Skip to content

Commit 1eed807

Browse files
committed
Set element.ndi_element_class to match MATLAB class(self) behavior
MATLAB's element.newdocument() sets element.ndi_element_class to class(ndi_element_obj), which returns the MATLAB class name (e.g. "ndi.element", "ndi.probe.timeseries.mfdaq"). Python was leaving this as the schema default "ndi_element". Changes: - Element: Add ndi_element_class() returning "ndi.element", set it in newdocument() - Probe: Override ndi_element_class() to use probetype2object.json mapping (e.g. "n-trode" -> "ndi.probe.timeseries.mfdaq"), remove redundant newdocument() override (inherit from Element like MATLAB) - Element.searchquery(): Match MATLAB's query which includes name, type, ndi_element_class, and reference (was only base.id) https://claude.ai/code/session_01RBSaNF8SSrGqnpnP5vUT47
1 parent efcebe7 commit 1eed807

2 files changed

Lines changed: 39 additions & 28 deletions

File tree

src/ndi/element/__init__.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,20 @@ def dependencies(self) -> dict[str, str]:
183183
"""Get additional dependencies."""
184184
return self._dependencies
185185

186+
def ndi_element_class(self) -> str:
187+
"""Return the NDI element class name for document storage.
188+
189+
MATLAB equivalent: ``class(ndi_element_obj)``
190+
191+
Returns the MATLAB-compatible class name string used in the
192+
``element.ndi_element_class`` document field. Subclasses
193+
override this to return their own class name.
194+
195+
Returns:
196+
MATLAB class name string, e.g. ``'ndi.element'``.
197+
"""
198+
return "ndi.element"
199+
186200
def elementstring(self) -> str:
187201
"""
188202
Format element as human-readable string.
@@ -393,6 +407,7 @@ def newdocument(self) -> Any:
393407
doc = Document(
394408
"element",
395409
**{
410+
"element.ndi_element_class": self.ndi_element_class(),
396411
"element.name": self._name,
397412
"element.reference": self._reference,
398413
"element.type": self._type,
@@ -421,12 +436,22 @@ def searchquery(self) -> Any:
421436
"""
422437
Create a query to find this element.
423438
439+
MATLAB equivalent: ``ndi.element/searchquery``
440+
441+
Builds a query matching session_id, element name, type,
442+
ndi_element_class, and reference — the same fields used
443+
by the MATLAB implementation.
444+
424445
Returns:
425446
Query matching this element's document
426447
"""
427448
from ..query import Query
428449

429-
q = Query("base.id") == self.id
450+
q = self._session.searchquery() if self._session is not None else Query("")
451+
q = q & (Query("element.name") == self._name)
452+
q = q & (Query("element.type") == self._type)
453+
q = q & (Query("element.ndi_element_class") == self.ndi_element_class())
454+
q = q & (Query("element.reference") == self._reference)
430455
return q
431456

432457
# =========================================================================

src/ndi/probe/__init__.py

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -305,38 +305,24 @@ def getchanneldevinfo(
305305
}
306306

307307
# =========================================================================
308-
# DocumentService Override
308+
# Element overrides
309309
# =========================================================================
310310

311-
def newdocument(self) -> Any:
312-
"""
313-
Create a new document for this probe.
311+
def ndi_element_class(self) -> str:
312+
"""Return the NDI element class name for document storage.
314313
315-
Returns:
316-
Document representing this probe
317-
"""
318-
from ..document import Document
319-
320-
doc = Document(
321-
"element",
322-
**{
323-
"element.name": self._name,
324-
"element.reference": self._reference,
325-
"element.type": self._type,
326-
"element.direct": True, # MATLAB sets direct=1 for probes
327-
"base.id": self.id,
328-
},
329-
)
314+
MATLAB equivalent: ``class(ndi_probe_obj)``
330315
331-
# Set session ID
332-
if self._session is not None:
333-
doc.set_session_id(self._session.id)
316+
Uses the ``probetype2object.json`` mapping to translate the
317+
probe *type* (e.g. ``'n-trode'``) to the MATLAB class name
318+
(e.g. ``'ndi.probe.timeseries.mfdaq'``). Falls back to
319+
``'ndi.probe'`` when the type is not in the mapping.
334320
335-
# Set subject dependency
336-
if self._subject_id:
337-
doc.set_dependency_value("subject_id", self._subject_id)
338-
339-
return doc
321+
Returns:
322+
MATLAB class name string.
323+
"""
324+
type_map = getProbeTypeMap()
325+
return type_map.get(self._type, "ndi.probe")
340326

341327
# =========================================================================
342328
# Static Methods

0 commit comments

Comments
 (0)