pulse2percept.units.base
Dimension,
Unit,
Quantity,
DimensionMismatchError,
as_value()
Module Attributes
The dimension of a plain number |
|
The unit of a plain number, used for image intensities and other dimensionless data |
|
Second |
|
Millisecond |
|
Microsecond |
|
Nanosecond |
|
Hertz |
|
Kilohertz |
|
Meter |
|
Centimeter |
|
Millimeter |
|
Micrometer (micron) |
|
Nanometer |
|
Ampere |
|
Milliampere |
|
Microampere |
|
Nanoampere |
|
Volt |
|
Millivolt |
|
Microvolt |
|
Coulomb |
|
Millicoulomb |
|
Microcoulomb |
|
Nanocoulomb |
|
converting dva to a distance on the retina or cortex requires a visual field map, not a scale factor. |
Functions
|
Convert a value to a bare number expressed in |
|
Whether a value carries a physical unit |
Classes
|
Physical dimensionality of a unit or quantity |
|
A number (or array of numbers) with a unit |
|
A unit of measurement |
Exceptions
Raised when quantities of incompatible dimensions are combined |
- exception pulse2percept.units.base.DimensionMismatchError[source]
Raised when quantities of incompatible dimensions are combined
Subclasses
TypeErrorbecause a dimension mismatch is a type error in the physical sense: microamps are simply not a kind of millisecond.Added in version 0.10.0.
- add_note()
Exception.add_note(note) – add a note to the exception
- with_traceback()
Exception.with_traceback(tb) – set self.__traceback__ to tb and return self.
- class pulse2percept.units.base.Dimension(**exponents)[source]
Physical dimensionality of a unit or quantity
A dimension is a vector of integer exponents over the primitive dimensions in
BASE_DIMENSIONS. Dimensions are immutable, hashable, and support multiplication, division, and integer powers.Added in version 0.10.0.
- Parameters:
**exponents (int) – Exponent for each primitive dimension, e.g.
Dimension(current=1, length=-2)for a current density. Omitted dimensions have exponent 0.
Examples
>>> from pulse2percept.units import Dimension >>> Dimension(current=1) * Dimension(time=1) Dimension('charge') >>> Dimension(time=-1).name 'frequency'
- property exponents
Tuple of exponents, aligned with
BASE_DIMENSIONS
- property is_dimensionless
Whether all exponents are zero
- property name
Human-readable name, e.g.
'electric current'
- pulse2percept.units.base.DIMENSIONLESS = Dimension('dimensionless')[source]
The dimension of a plain number
- class pulse2percept.units.base.Unit(dimension, scale, symbol)[source]
A unit of measurement
A unit is a dimension plus a scale factor relative to the base unit of that dimension (seconds, meters, amperes, volts, or degrees of visual angle) plus a symbol used for display.
Multiplying a number, list, or NumPy array by a unit produces a
Quantity. Multiplying, dividing, or exponentiating units produces another unit, so derived units such asuA / mm ** 2need not be predefined.Units are immutable. p2p does not maintain a unit registry, parse unit strings, or generate SI prefixes automatically: the vocabulary exported by
pulse2percept.unitsis the whole of it.Added in version 0.10.0.
- Parameters:
Examples
>>> from pulse2percept.units import uA, mm, ms >>> uA / mm ** 2 uA/mm^2 >>> 50 * uA 50 uA
- property scale
Size of this unit relative to the base unit of its dimension
- property symbol
Short symbol used for display
- class pulse2percept.units.base.Quantity(magnitude, unit)[source]
A number (or array of numbers) with a unit
Quantities are what users build by multiplying a number by a unit, and they exist to be checked and converted at p2p’s public API boundaries. They are deliberately not NumPy arrays: p2p strips units before any numerical work, so quantities never reach a Cython kernel and never impose per-element overhead on a simulation.
For the same reason,
np.asarray(5 * uA)does not silently yield5. Removing a unit is something you write down, usingto_value().Equivalent unit choices convert consistently up to floating-point precision, and quantities compare accordingly:
0.0041 * mA == 4.1 * uAis True even though rescaling the former gives4.1000000000000005.Added in version 0.10.0.
- Parameters:
Examples
>>> from pulse2percept.units import uA, mA >>> 500 * uA == 0.5 * mA True >>> (500 * uA).to(mA) 0.5 mA >>> (500 * uA).to_value(mA) 0.5
- property magnitude
The numerical value(s), expressed in
self.unit
- pulse2percept.units.base.as_value(value, unit, name=None)[source]
Convert a value to a bare number expressed in
unitThis is p2p’s standard Python-to-numerics boundary. A
Quantityis dimension-checked and rescaled tounit; a bare number is assumed to already be expressed inunitand is passed through untouched (includingNone).- Parameters:
- Returns:
value – The bare numerical value, expressed in
unit.- Return type:
float, np.ndarray, or None
Examples
>>> from pulse2percept.units import as_value, ms, s >>> as_value(20, ms) 20 >>> as_value(0.02 * s, ms) 20.0
- pulse2percept.units.base.has_units(value)[source]
Whether a value carries a physical unit
True for a
QuantityorUnit, and for a list or tuple containing one. Cheap enough to call before every attribute assignment, which is whatParametrizeddoes.