Skip to main content

eyetrajectoriespy

PyPI Python License: MIT Documentation

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

Instead of reducing every trial immediately to fixation counts, dwell times or a symbolic scanpath, eyetrajectoriespy models gaze as a time-indexed planar process G(t) = [x(t), y(t)], with explicit observation and scientific-inference contracts.

Illustrative gaze trajectory, time representation and scientific analysis

Published stable: 1.1.0 · Python 3.11–3.13.
Published prerelease: 1.2.0rc2, qualified and published to GitHub/PyPI on 24 October 2026. Next stable version under final qualification: 1.2.0 (not published). This branch stages the exact final package identity and keeps production publication DISARMED until fresh final-version scientific/performance CI, scope checks, and separate release authorization. Ten workflow routes retain their qualified engineering boundaries; E1–E4 helpers remain explicitly experimental. The original prerelease evidence remains immutable.

Documentation · Start here · Choose a workflow · Figure atlas · Research evidence · News · Release status

Install stable 1.1.0

pip install eyetrajectoriespy==1.1.0
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)

This illustration uses deterministic synthetic data, not human-subject observations. For complete sparse examples, use the paired planar sparse guide.

What do you want to analyze?

Question Method family Guide
Dominant variation across x/y paths FPCA / planar MFPCA Continuous FPCA
Irregular and sparsely observed gaze Sparse FPCA/PACE, joint PACE Sparse planar gaze
Coordinate-asynchronous x/y samples Sparse asynchronous multivariate Qualified 1.1 module APIs
Time-varying condition effects Function-on-scalar regression Functional regression
Repeated participant/trial outcomes Functional mixed effects / multilevel Repeated-trial models
Temporal recurrence and dynamics Recurrence / RQA Nonlinear analysis

Product and research qualification

Surface State
Frozen 1.0 root API compatibility boundary Stable
Qualified 1.1 sparse/irregular module-scoped additions Stable 1.1.0
Ten transparent eyetrajectoriespy.workflows orchestration routes Unpublished 1.2 candidate
W3 nominal-90% whole-function inference Not generally calibrated — #289
Outcome-dependent missing gaze and selective validation Not field-identified — #296
1.2 GitHub Release / PyPI promotion Disarmed / HOLD

A successful synthetic benchmark or independent artifact replay is not the same as calibrated statistical inference or production release qualification. Read the scientific evidence guide.

Research news, figures and reproducibility

The W3 R76–R95 programme has published documentation of influential-unit, covariance, missingness, external-validation and identifiability experiments, including negative results. The scientific study map links original papers; the figure atlas includes source-derived synthetic plots. The R93, R94 and R95 sharp-set proofs are conditional population mathematics—not confidence intervals or real-gaze MNAR corrections.

October 2026 news · Original and independent evidence · Validation ledger

Which workflow do I need?

Choose by the gaze observation grid, the participant/trial hierarchy, and the uncertainty claim, not by the number of available estimators. The analysis decision map and workflow comparisons explain those choices.

Where is the full advanced API?

The compact README is an orientation page, not an exhaustive function catalogue. Use the stable public API, module-scoped 1.1 additions and the exact scientific references:

Historical release lineage: 0.10.0 introduced native sparse univariate FPCA/PACE, and the immutable 0.11.0rc1 pre-release preceded the 0.11 validation expansion. Published 1.1.0 remains the stable installation target.

Documentation and contribution

Quick start · Input schemas · Mathematics · Visual gallery · Reproducibility guide · Contributing · Cite

The package complements, rather than replaces, upstream fixation/saccade detection, instrument quality control, AOI event analysis and symbolic scanpath pipelines. MIT © 2026 Stefanos Balaskas.

Metadata

Release files for eyetrajectoriespy 1.2.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.2.0
File Size Uploaded Provenance Actions
eyetrajectoriespy-1.2.0.tar.gz 601.4 kB With provenance Details for eyetrajectoriespy-1.2.0.tar.gz

Built distribution (wheel)

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

Total release size: 1.1 MB

Release files / eyetrajectoriespy-1.2.0.tar.gz

Download URL eyetrajectoriespy-1.2.0.tar.gz
Size 601.4 kB
Tags Source
SHA-256 checksum
How to use checksums
cba3c53cecac3e99cfd5161baa042f70c9911ca43565243e5a426f889a4bbe93
BLAKE2b-256 checksum
How to use checksums
f9aba47b9554f33c5f3694158d4b22e8b53fe00f5becb5d531ea116e096f13c3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

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

Download URL eyetrajectoriespy-1.2.0-py3-none-any.whl
Size 480.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bfc52f511404fab82a8fdc037503f7b3054658aaca9ae4e0639793bcf4076501
BLAKE2b-256 checksum
How to use checksums
c85ab47a91be4edfedb84b39ce010694c420ba02ed2912107b3f010776cc19c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Security for eyetrajectoriespy 1.2.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.2.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 24, 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