Skip to content

Coordinates

This module contains abscissa and ordinate objects for core nelpy objects.

Abscissa

An abscissa (x-axis) object for core nelpy data containers.

Parameters:

Name Type Description Default
support IntervalArray

The support associated with the abscissa. Default is an empty IntervalArray.

None
is_wrapping bool

Whether or not the abscissa is wrapping (continuous). Default is False.

False
labelstring str

String template for the abscissa label. Default is '{}'.

None

Attributes:

Name Type Description
support IntervalArray

The support associated with the abscissa.

base_unit str

The base unit of the abscissa, inherited from support.

is_wrapping bool

Whether the abscissa is wrapping.

label str

The formatted label for the abscissa.

Source code in nelpy/core/_coordinates.py
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
class Abscissa:
    """
    An abscissa (x-axis) object for core nelpy data containers.

    Parameters
    ----------
    support : nelpy.IntervalArray, optional
        The support associated with the abscissa. Default is an empty IntervalArray.
    is_wrapping : bool, optional
        Whether or not the abscissa is wrapping (continuous). Default is False.
    labelstring : str, optional
        String template for the abscissa label. Default is '{}'.

    Attributes
    ----------
    support : nelpy.IntervalArray
        The support associated with the abscissa.
    base_unit : str
        The base unit of the abscissa, inherited from support.
    is_wrapping : bool
        Whether the abscissa is wrapping.
    label : str
        The formatted label for the abscissa.
    """

    def __init__(self, support=None, is_wrapping=False, labelstring=None):
        # TODO: add label support
        if support is None:
            support = core.IntervalArray(empty=True)
        if labelstring is None:
            labelstring = "{}"

        self.formatter = formatters.ArbitraryFormatter
        self.support = support
        self.base_unit = self.support.base_unit
        self._labelstring = labelstring
        self.is_wrapping = is_wrapping

    @property
    def label(self):
        """
        Get the abscissa label.

        Returns
        -------
        label : str
            The formatted abscissa label.
        """
        return self._labelstring.format(self.base_unit)

    @label.setter
    def label(self, val):
        """
        Set the abscissa label string template.

        Parameters
        ----------
        val : str
            String template for the abscissa label.
        """
        if val is None:
            val = "{}"
        try:  # cast to str:
            labelstring = str(val)
        except TypeError:
            raise TypeError("cannot convert label to string")
        else:
            labelstring = val
        self._labelstring = labelstring

    def __repr__(self):
        return "Abscissa(base_unit={}, is_wrapping={}) on domain [{}, {})".format(
            self.base_unit, self.is_wrapping, self.domain.start, self.domain.stop
        )

    @property
    def domain(self):
        """Domain (in base units) on which abscissa is defined."""
        return self.support.domain

    @domain.setter
    def domain(self, val):
        """Domain (in base units) on which abscissa is defined."""
        # val can be an IntervalArray type, or (start, stop)
        self.support.domain = val
        self.support = self.support[self.support.domain]

domain property writable

Domain (in base units) on which abscissa is defined.

label property writable

Get the abscissa label.

Returns:

Name Type Description
label str

The formatted abscissa label.

AnalogSignalArrayAbscissa

Bases: Abscissa

Abscissa for AnalogSignalArray.

Source code in nelpy/core/_coordinates.py
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
class AnalogSignalArrayAbscissa(Abscissa):
    """Abscissa for AnalogSignalArray."""

    def __init__(self, *args, **kwargs):
        support = kwargs.get("support", core.EpochArray(empty=True))
        labelstring = kwargs.get(
            "labelstring", "time ({})"
        )  # TODO FIXME after unit inheritance; inherit from formatter?

        kwargs["support"] = support
        kwargs["labelstring"] = labelstring

        super().__init__(*args, **kwargs)

        self.formatter = self.support.formatter

AnalogSignalArrayOrdinate

Bases: Ordinate

Ordinate for AnalogSignalArray.

Examples:

nel.AnalogSignalArrayOrdinate(base_unit='uV')

Source code in nelpy/core/_coordinates.py
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
class AnalogSignalArrayOrdinate(Ordinate):
    """Ordinate for AnalogSignalArray.

    Examples
    -------
    nel.AnalogSignalArrayOrdinate(base_unit='uV')
    """

    def __init__(self, *args, **kwargs):
        base_unit = kwargs.get("base_unit", "V")
        labelstring = kwargs.get("labelstring", "voltage ({})")

        kwargs["base_unit"] = base_unit
        kwargs["labelstring"] = labelstring

        super().__init__(*args, **kwargs)

Ordinate

An ordinate (y-axis) object for core nelpy data containers.

Parameters:

Name Type Description Default
base_unit str

The base unit for the ordinate. Default is ''.

None
is_linking bool

Whether the ordinate is linking. Default is False.

False
is_wrapping bool

Whether the ordinate is wrapping. Default is False.

False
labelstring str

String template for the ordinate label. Default is '{}'.

None
_range IntervalArray

The range of the ordinate. Default is [-inf, inf].

None

Attributes:

Name Type Description
base_unit str

The base unit for the ordinate.

is_linking bool

Whether the ordinate is linking.

is_wrapping bool

Whether the ordinate is wrapping.

label str

The formatted label for the ordinate.

range IntervalArray

The range of the ordinate.

Source code in nelpy/core/_coordinates.py
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
class Ordinate:
    """
    An ordinate (y-axis) object for core nelpy data containers.

    Parameters
    ----------
    base_unit : str, optional
        The base unit for the ordinate. Default is ''.
    is_linking : bool, optional
        Whether the ordinate is linking. Default is False.
    is_wrapping : bool, optional
        Whether the ordinate is wrapping. Default is False.
    labelstring : str, optional
        String template for the ordinate label. Default is '{}'.
    _range : nelpy.IntervalArray, optional
        The range of the ordinate. Default is [-inf, inf].

    Attributes
    ----------
    base_unit : str
        The base unit for the ordinate.
    is_linking : bool
        Whether the ordinate is linking.
    is_wrapping : bool
        Whether the ordinate is wrapping.
    label : str
        The formatted label for the ordinate.
    range : nelpy.IntervalArray
        The range of the ordinate.
    """

    def __init__(
        self,
        base_unit=None,
        is_linking=False,
        is_wrapping=False,
        labelstring=None,
        _range=None,
    ):
        # TODO: add label support

        if base_unit is None:
            base_unit = ""
        if labelstring is None:
            labelstring = "{}"

        if _range is None:
            _range = core.IntervalArray([-inf, inf])

        self.base_unit = base_unit
        self._labelstring = labelstring
        self.is_linking = is_linking
        self.is_wrapping = is_wrapping
        self._is_wrapped = None  # intialize to unknown (None) state
        self._range = _range

    @property
    def label(self):
        """
        Get the ordinate label.

        Returns
        -------
        label : str
            The formatted ordinate label.
        """
        return self._labelstring.format(self.base_unit)

    @label.setter
    def label(self, val):
        """
        Set the ordinate label string template.

        Parameters
        ----------
        val : str
            String template for the ordinate label.
        """
        if val is None:
            val = "{}"
        try:  # cast to str:
            labelstring = str(val)
        except TypeError:
            raise TypeError("cannot convert label to string")
        else:
            labelstring = val
        self._labelstring = labelstring

    def __repr__(self):
        """
        Return a string representation of the Ordinate object.

        Returns
        -------
        repr_str : str
            String representation of the Ordinate.
        """
        return "Ordinate(base_unit={}, is_linking={}, is_wrapping={})".format(
            self.base_unit, self.is_linking, self.is_wrapping
        )

    @property
    def range(self):
        """
        Get the range (in ordinate base units) on which ordinate is defined.

        Returns
        -------
        range : nelpy.IntervalArray
            The range of the ordinate.
        """
        return self._range

    @range.setter
    def range(self, val):
        """Range (in ordinate base units) on which ordinate is defined."""
        # val can be an IntervalArray type, or (start, stop)
        if isinstance(val, type(self.range)):
            self._range = val
        elif isinstance(val, (tuple, list)):
            prev_domain = self.range.domain
            self._range = type(self.range)([val[0], val[1]])
            self._range.domain = prev_domain
        else:
            raise TypeError("range must be of type {}".format(str(type(self.range))))

        self._range = self.range[self.range.domain]

label property writable

Get the ordinate label.

Returns:

Name Type Description
label str

The formatted ordinate label.

range property writable

Get the range (in ordinate base units) on which ordinate is defined.

Returns:

Name Type Description
range IntervalArray

The range of the ordinate.

TemporalAbscissa

Bases: Abscissa

Abscissa for time series data.

Source code in nelpy/core/_coordinates.py
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
class TemporalAbscissa(Abscissa):
    """Abscissa for time series data."""

    def __init__(self, *args, **kwargs):
        support = kwargs.get("support", core.EpochArray(empty=True))
        labelstring = kwargs.get(
            "labelstring", "time ({})"
        )  # TODO FIXME after unit inheritance; inherit from formatter?

        if support is None:
            support = core.EpochArray(empty=True)

        kwargs["support"] = support
        kwargs["labelstring"] = labelstring

        super().__init__(*args, **kwargs)

        self.formatter = self.support.formatter