From 85e1c8f58a9f3207ddfefdd4435e29cbf4523d2c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 15:52:34 +0000 Subject: [PATCH 1/2] Initial plan From 112ef8280f5394b87d226b4371e5876128bdad74 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 15:56:31 +0000 Subject: [PATCH 2/2] Handle optional muselsl/pylsl imports in EEG device module Co-authored-by: JohnGriffiths <397826+JohnGriffiths@users.noreply.github.com> --- eegnb/devices/eeg.py | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/eegnb/devices/eeg.py b/eegnb/devices/eeg.py index 6c017ed2..eb320885 100644 --- a/eegnb/devices/eeg.py +++ b/eegnb/devices/eeg.py @@ -15,13 +15,52 @@ import pandas as pd from brainflow.board_shim import BoardShim, BoardIds, BrainFlowInputParams -from muselsl import stream, list_muses, record, constants as mlsl_cnsts -from pylsl import StreamInfo, StreamOutlet, StreamInlet, resolve_byprop from serial import Serial, EIGHTBITS, PARITY_NONE, STOPBITS_ONE from eegnb.utils.missing import missing_module +try: + from muselsl import stream, list_muses, record, constants as mlsl_cnsts +except (ImportError, OSError): + muselsl = missing_module( + "muselsl", + "The MuseLSL backend (Muse 2016, Muse 2, and Muse S devices)", + "streaming", + ) + + def stream(*args, **kwargs): + return muselsl.stream(*args, **kwargs) + + def list_muses(*args, **kwargs): + return muselsl.list_muses(*args, **kwargs) + + def record(*args, **kwargs): + return muselsl.record(*args, **kwargs) + + mlsl_cnsts = muselsl + +try: + from pylsl import StreamInfo, StreamOutlet, StreamInlet, resolve_byprop +except (ImportError, OSError): + pylsl = missing_module( + "pylsl", + "The LSL streaming backend (including MuseLSL marker/data transport)", + "streaming", + ) + + def StreamInfo(*args, **kwargs): + return pylsl.StreamInfo(*args, **kwargs) + + def StreamOutlet(*args, **kwargs): + return pylsl.StreamOutlet(*args, **kwargs) + + def StreamInlet(*args, **kwargs): + return pylsl.StreamInlet(*args, **kwargs) + + def resolve_byprop(*args, **kwargs): + return pylsl.resolve_byprop(*args, **kwargs) + try: import pyxid2 except (ImportError, OSError):