from __future__ import division, unicode_literals, print_function, absolute_import
import numpy as np
from podpac.core.coordinates.uniform_coordinates1d import UniformCoordinates1d
from podpac.core.coordinates.stacked_coordinates import StackedCoordinates
[docs]def crange(start, stop, step, name=None):
"""
Create uniformly-spaced 1d coordinates with a start, stop, and step.
For numerical coordinates, the start, stop, and step are converted to ``float``. For time
coordinates, the start and stop are converted to numpy ``datetime64``, and the step is converted to numpy
``timedelta64``. For convenience, podpac automatically converts datetime strings such as ``'2018-01-01'`` to
``datetime64`` and timedelta strings such as ``'1,D'`` to ``timedelta64``.
Arguments
---------
start : float, datetime64, datetime, str
Start coordinate.
stop : float, datetime64, datetime, str
Stop coordinate.
step : float, timedelta64, timedelta, str
Signed, non-zero step between coordinates.
name : str, optional
Dimension name.
Returns
-------
:class:`UniformCoordinates1d`
Uniformly-spaced 1d coordinates.
"""
return UniformCoordinates1d(start, stop, step=step, name=name)
[docs]def clinspace(start, stop, size, name=None):
"""
Create uniformly-spaced 1d or stacked coordinates with a start, stop, and size.
For numerical coordinates, the start and stop are converted to ``float``. For time coordinates, the start and stop
are converted to numpy ``datetime64``. For convenience, podpac automatically converts datetime strings such as
``'2018-01-01'`` to ``datetime64``.
Arguments
---------
start : float, datetime64, datetime, str, tuple
Start coordinate for 1d coordinates, or tuple of start coordinates for stacked coordinates.
stop : float, datetime64, datetime, str, tuple
Stop coordinate for 1d coordinates, or tuple of stop coordinates for stacked coordinates.
size : int
Number of coordinates.
name : str, optional
Dimension name.
Returns
-------
:class:`UniformCoordinates1d`
Uniformly-spaced 1d coordinates.
Raises
------
ValueError
If the start and stop are not the same size.
"""
if np.array(start).size != np.array(stop).size:
raise ValueError(
"Size mismatch, 'start' and 'stop' must have the same size (%s != %s)"
% (np.array(start).size, np.array(stop).size)
)
# As of numpy 0.16, np.array([0, (0, 10)]) no longer raises a ValueError
# so we have to explicitly check for sizes of start and stop (see above)
a = np.array([start, stop])
if a.ndim == 2:
cs = [UniformCoordinates1d(start[i], stop[i], size=size) for i in range(a[0].size)]
c = StackedCoordinates(cs, name=name)
else:
c = UniformCoordinates1d(start, stop, size=size, name=name)
return c