Skip to main content

eyetrajectoriespy

PyPI version GitHub Release Python Documentation

Functional analysis of continuous and sparse eye-tracking trajectories in Python.

Instead of immediately reducing gaze to fixation counts, dwell summaries, or symbolic scanpaths, eyetrajectoriespy treats gaze as a time-indexed functional process

$$ \mathbf G_i(t)= \begin{bmatrix} x_i(t)\ y_i(t) \end{bmatrix}. $$

Stable: 1.0.0 · Published 1.1 release candidate: 1.1.0rc1 · Python: 3.11–3.13

pip install eyetrajectoriespy
# exact reproducible stable release
pip install eyetrajectoriespy==1.0.0
# exact published 1.1 prerelease
pip install eyetrajectoriespy==1.1.0rc1

Documentation · Quick start · Choose a workflow · Mathematics · Visual gallery · Validation

Current stable release: 1.0.0
1.0.0 freezes the evidence-backed 1.0 compatibility boundary over the production-observed 1.0.0rc1 scientific/API surface without adding a new estimator or changing scientific behavior. Release qualification, immutable hashes, OIDC/attestation evidence, and publication chronology are retained in the 1.0.0 release notes and validation records rather than repeated on this landing page.

Published 1.1 release candidate: 1.1.0rc1
The post-1.0 sparse/irregular scientific programme (#158) and integration/readiness programme (#183) are complete through R5. 1.1.0rc1 is published on GitHub and production PyPI from exact protected-main commit f4405897e2a7a2392c03523cc7fa18e43df00e5e; the frozen 1.0.0 root compatibility boundary remains unchanged, and the 1.1 additions remain supported module-scoped APIs. 1.0.0 remains the stable/default release while the RC undergoes production-installed observation before any final 1.1.0 promotion decision.

Sparse planar covariance structure estimated by eyetrajectoriespy

What can it model?

Scientific object Main route Status
Dense/common-grid continuous x/y gaze fit_mfpca() stable 1.0
Sparse/irregular single-coordinate gaze fit_sparse_fpca() + PACE stable 1.0
Sparse/irregular paired planar x/y gaze fit_sparse_mfpca() + joint PACE stable 1.0
Repeated participant/trial functions functional mixed effects / multilevel FPCA stable 1.0
Conditional uncertainty for sparse PACE and joint PACE scores sparse_score_uncertainty / sparse_multivariate_score_uncertainty supported 1.1 RC module API
Audited sparse smoothing-bandwidth selection sparse_bandwidth_selection / sparse_multivariate_bandwidth_selection supported 1.1 RC module API
Candidate-sample observation-process diagnostics observation_process supported 1.1 RC module API
Sparse participant/trial hierarchical decomposition sparse_multilevel supported 1.1 RC module API
Coordinate-specific asynchronous sparse planar gaze sparse_multivariate_async supported 1.1 RC module API
Future/partially observed sparse trajectory prediction and participant-aware conformal bands sparse_partial_prediction / sparse_partial_conformal supported 1.1 RC module API

The post-1.0 module-scoped APIs are documented in the 1.1 module API and integration audit. They are intentionally not root re-exports and should not be interpreted as stable 1.1.0 functionality until final promotion is separately qualified.

Which workflow do I need?

Scientific question Start here
What are the dominant modes of continuous gaze variation? Continuous gaze exploration + FPCA
How does an experimental predictor change a continuous functional response? Experimental functional regression
How do repeated participant trials affect functional inference? Repeated-trial functional mixed effects
How do predictors change repeated binary or count functional responses? Generalized binary/count responses
Is recurrence or nonlinear temporal organization the scientific target? Nonlinear/recurrence analysis

Minimal dense/common-grid example

from eyetrajectoriespy import fit_mfpca, simulate_planar_trajectories

gaze = simulate_planar_trajectories(
    n_participants=20,
    trials_per_participant=6,
    random_state=7,
)
fit = fit_mfpca(gaze, n_components=0.95, scaling="dimension_sd")
print(fit.explained_variance_ratio)

Minimal sparse paired-planar example

import numpy as np
from eyetrajectoriespy import fit_sparse_mfpca

fit = fit_sparse_mfpca(
    irregular,
    dimensions=("x", "y"),
    n_components=2,
    evaluation_grid=np.linspace(0.0, 1.0, 41),
    mean_bandwidth=0.20,
    covariance_bandwidth=0.30,
    measurement_error="diagonal",
    measurement_error_variance=(0.0025, 0.0025),
    psd_action="project",
    score_failure_action="retain_nan",
)

The sparse estimator uses native paired observations to estimate a joint population mean/covariance model. Evaluating fitted population functions at native times for PACE is not raw-trajectory interpolation.

What eyetrajectoriespy refuses to hide

Consequential choices stay explicit: missingness, interpolation, smoothing, registration, time/coordinate normalization, analysis support, measurement-error assumptions, PSD policy, family/model selection, resampling unit, denominator/exposure semantics, and failure/status codes.

Scope

eyetrajectoriespy starts once gaze has a scientifically interpretable time and coordinate representation. Event detection, general gaze QC, survival analysis, AOI perturbation robustness, and symbolic sequence models belong upstream or in specialist packages.

The package deliberately separates stable public methods, advanced diagnostics, external-backend interoperability, and experimental methods. Scientific product qualification matters more than estimator count.

Where is the full advanced API?

The README is intentionally a compact entry point rather than the exhaustive function catalogue.

Release lineage and reproducibility

The stable pre-1.0 sequence remains explicit: 0.10.0 introduced the native sparse univariate FPCA/PACE line, the immutable 0.11.0rc1 prerelease preceded final 0.11 known-truth recovery infrastructure, and 0.12.0 added the native sparse planar MFPCA/joint-PACE line. 1.0.0 closes that stabilization programme as the frozen stable compatibility baseline. Published tags and distributions remain immutable historical records. The completed A1–C1 and R1–R5 1.1 work is published as immutable prerelease 1.1.0rc1; production-installed observation now precedes any separately qualified final 1.1.0 promotion.

Documentation and reproducibility

Development checks:

python -m pytest --cov=eyetrajectoriespy
python -m compileall -q src
python scripts/generate_function_equation_index.py --check
python scripts/generate_docs_gallery.py
python scripts/generate_sparse_mfpca_docs_figure.py
python scripts/validate_docs_contracts.py
mkdocs build --strict

Citation and license

See CITATION.cff for citation metadata. MIT © 2026 Stefanos Balaskas.

Metadata

Release files for eyetrajectoriespy 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eyetrajectoriespy 1.1.0
File Size Uploaded Provenance Actions
eyetrajectoriespy-1.1.0.tar.gz 540.9 kB With provenance Details for eyetrajectoriespy-1.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for eyetrajectoriespy 1.1.0
File Interpreter ABI Platform Actions
eyetrajectoriespy-1.1.0-py3-none-any.whl Python 3 none any Details for eyetrajectoriespy-1.1.0-py3-none-any.whl

Total release size: 977.6 kB

Release files / eyetrajectoriespy-1.1.0.tar.gz

Download URL eyetrajectoriespy-1.1.0.tar.gz
Size 540.9 kB
Tags Source
SHA-256 checksum
How to use checksums
446a42532f3812b0aae8df24e0a95a40355a0669e822e4b27cd31350f57cf87b
BLAKE2b-256 checksum
How to use checksums
e03dc808a7951b19ab1730917ad2dae0d7378e20076cdb508cf6c11bf6061d04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Release files / eyetrajectoriespy-1.1.0-py3-none-any.whl

Download URL eyetrajectoriespy-1.1.0-py3-none-any.whl
Size 436.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bb869c7a1dd3ecd03135d1615d2977f4d0e07c8cfa4fdef10cddc83f826dbf5b
BLAKE2b-256 checksum
How to use checksums
286d759f53e8d875aba8745ee9c3445572d7cd3696ee28b59bac546fc1b1de68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

Security for eyetrajectoriespy 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for eyetrajectoriespy-1.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 7, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page