Skip to content

Dev v0.1.17#12

Closed
mathiassalvas wants to merge 4 commits into
mainfrom
dev_v0.1.17
Closed

Dev v0.1.17#12
mathiassalvas wants to merge 4 commits into
mainfrom
dev_v0.1.17

Conversation

@mathiassalvas

Copy link
Copy Markdown
Collaborator

This pull request adds optional integration for Wooting analog keyboards, providing pressure acquisition, logging, and on-screen visual feedback. It introduces new documentation, updates the installation process, exposes a keyboard-agnostic visual feedback toolkit, and adds demo scripts. The changes are organized into Wooting integration, documentation, packaging, and core API enhancements.

Wooting Analog Keyboard Integration:

  • Added optional Wooting analog-keyboard integration via the tachypy[wooting] extra, exposing WOOTING_ACQUISITION for pressure acquisition, logging, and on-screen feedback directly from the top-level tachypy namespace. [1] [2] [3]
  • Introduced new console demo entry points: tachypy-wooting-fixation-demo and tachypy-wooting-mini-bw. [1] [2]

Documentation Updates:

  • Added a comprehensive docs/wooting.rst page detailing installation, usage, API, and experiment lifecycle for Wooting integration.
  • Updated README.md, docs/api.rst, docs/getting_started.rst, and docs/index.rst to reference Wooting integration, installation instructions, and documentation. [1] [2] [3] [4] [5]

Packaging and Setup:

  • Updated setup.py and setup.cfg to add the wooting extra, declare new dependencies, update author credits, and include demo scripts in the package. [1] [2] [3] [4]
  • Excluded new demo files from test coverage.

Core API Enhancements:

  • Exposed keyboard-agnostic visual feedback toolkit (PressureFeedbackWidget, InteractiveFixationCross, PressureFeedbackState, PressureFeedbackConfig, PressureSource, VisualPressureFeedbackMixin) in the main tachypy API and documented their usage. [1] [2] [3]

mathiassalvas and others added 4 commits June 15, 2026 09:42
- Add tachypy.feedback: keyboard-agnostic visual pressure-feedback engine,
  mixin, state machine, scale mapper, widget ABC, InteractiveFixationCross
- Add tachypy.wooting facade: enriched WOOTING_ACQUISITION (base + mixin),
  re-exports, and ported visual demos (fixation, mini-bw)
- Expose WOOTING_ACQUISITION at top level via lazy __getattr__ (extra-gated)
- Add [wooting] extra + demo entry points; docs/wooting.rst + api autodoc
- Port feedback tests to tachypy/tests/test_feedback.py

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…-integration

# Conflicts:
#	docs/getting_started.rst
#	setup.py
* Add first-class TachyWooting integration in the TachyPy package.
* Expose `WOOTING_ACQUISITION` through TachyPy for a simpler user-facing API.
* Enable natural analog keyboard workflows directly from TachyPy.
* Add visual pressure feedback for light-press and readiness phases.
* Refactor the pressure feedback system and remove the unused `PressureSource` interface.
* Improve `PressureFeedbackWidget` with better pressure text, geometry, and interactive fixation cross handling.
* Integrate Wooting acquisition with the TachyPy visual feedback system.
* Keep Wooting support as an optional dependency so TachyPy core remains lightweight.
* Update documentation, demos, and tests for the new integration.
* Add tests for pressure feedback rendering and pressure state management.
Copilot AI review requested due to automatic review settings June 15, 2026 17:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds an optional Wooting analog-keyboard integration to TachyPy, including a keyboard-agnostic visual pressure-feedback toolkit (model + runner + widget), a Wooting facade that enriches TachyWooting’s acquisition class with visual feedback, demo scripts, and accompanying documentation/packaging updates.

Changes:

  • Introduces the tachypy.feedback toolkit (pressure model/state machine, render loop, default interactive fixation-cross widget) and exposes it via the top-level tachypy namespace.
  • Adds tachypy.wooting integration, including an enriched WOOTING_ACQUISITION and two demo entry points.
  • Expands docs to cover Wooting installation/usage and updates packaging to provide a wooting extra.

Reviewed changes

Copilot reviewed 17 out of 19 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
tests/test_pressure_keyboard.py Adds unit tests for lazy exports, facade enrichment, pressure model/state, widget behavior, and visual wait loop.
src/tachypy/wooting/demos/visual_fixation_demo.py Adds an on-screen gamified fixation/pressure feedback demo using Wooting acquisition + visual mixin.
src/tachypy/wooting/demos/mini_bw_experiment.py Adds a minimal black/white experiment demo that uses readiness feedback and analog acquisition.
src/tachypy/wooting/demos/init.py Documents Wooting demo entry points.
src/tachypy/wooting/init.py Implements the TachyPy↔TachyWooting facade and enriched WOOTING_ACQUISITION.
src/tachypy/feedback/widgets.py Adds PressureFeedbackWidget and default InteractiveFixationCross renderer.
src/tachypy/feedback/runner.py Adds the keyboard-agnostic visual loop and VisualPressureFeedbackMixin.
src/tachypy/feedback/model.py Adds PressureSource protocol, config, and state machine for pressure readiness.
src/tachypy/feedback/init.py Exposes the pressure-feedback toolkit public API.
src/tachypy/init.py Adds lazy exports for the feedback toolkit and a lazy WOOTING_ACQUISITION shortcut.
setup.py Adds wooting extra and installs new demo console scripts.
setup.cfg Adds wooting extra, demo entry points, and excludes demos from coverage.
README.md Documents the optional Wooting integration and install instructions.
docs/wooting.rst Adds a comprehensive Wooting integration guide.
docs/index.rst Adds wooting to the docs toctree.
docs/getting_started.rst Mentions the Wooting extra in setup instructions.
docs/api.rst Documents tachypy.feedback in the public API reference.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +36 to +41
if not hasattr(response_handler, "get_key_presses"):
return False
for event in response_handler.get_key_presses():
if event.get("type") == "keydown" and str(event.get("key", "")).lower() in exit_keys:
return True
return False
Comment thread README.md
Comment on lines 83 to 87
pip install -e ".[test]" # pytest
pip install -e ".[text]" # Pillow text fallback
pip install -e ".[wooting]" # Wooting analog-keyboard integration
# Audio support (tachyaudio) is included in the base install
```
Comment thread docs/getting_started.rst
Comment on lines 29 to 32
pip install -e ".[test]" # pytest, coverage, lint tooling
pip install -e ".[text]" # Pillow text fallback
pip install -e ".[wooting]" # Wooting analog-keyboard integration
# Audio support (tachyaudio) is included in the base install
Comment on lines +59 to +63
# Optional goal markers (thin vertical ticks at ±half_width)
show_goal_markers: bool | float = False,
# Optional real-time pressure text
show_pressure_text: bool = False,
left_pressure_label: str = "",
score = Text(text="Score: —", font_size=24, color=(0, 0, 0),
dest_rect=(w - 240, margin + 50, w - margin, margin + 122))

yes_code, no_code = acq._to_keycodes([YES_KEY, NO_KEY])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants