from cytoolz import merge
from cytoolz import partial
from merlin import chips
from merlin import dates
from merlin import functions
from merlin import rods
from merlin import specs
[docs]def pyccd(x, y, locations, dates_fn, specmap, chipmap):
"""Builds inputs for the pyccd algorithm.
Args:
x: x projection coordinate of chip
y: y projection coordinate of chip
locations: chip shaped 2d array of projection coordinates
dates_fn (fn): returns dates that should be included in time series
specmap (dict): mapping of keys to specs
chipmap (dict): mapping of keys to chips
Returns:
A tuple of tuples.
The pyccd format key is ```(chip_x, chip_y, x, y)``` with a
dictionary of sorted numpy arrays representing each spectra plus an
additional sorted dates array.
>>> pyccd_format(*args)
(((chip_x, chip_y, x1, y1), {"dates": [], "reds": [],
"greens": [], "blues": [],
"nirs1": [], "swir1s": [],
"swir2s": [], "thermals": [],
"qas": []}),
((chip_x, chip_y, x1, y2), {"dates": [], "reds": [],
"greens": [], "blues": [],
"nirs1": [], "swir1s": [],
"swir2s": [], "thermals": [],
"qas": []}))
...
"""
_index = specs.index(list(functions.flatten(specmap.values())))
_dates = dates_fn(datemap=dates.mapped(chipmap))
_creator = partial(rods.create, x=x, y=y, dateseq=_dates, locations=locations, spec_index=_index)
_flipped = partial(functions.flip_keys, {k: _creator(chipseq=v) for k, v in chipmap.items()})
_rods = functions.insert_into_every(key='dates',
value=list(map(dates.to_ordinal, dates.rsort(_dates))),
dods=_flipped())
return tuple((k, v) for k, v in _rods.items())
[docs]def aux(x, y, locations, dates_fn, specmap, chipmap):
"""Builds aux formatted timeseries.
Args:
x: x projection coordinate of chip
y: y projection coordinate of chip
locations: chip shaped 2d array of projection coordinates
dates_fn (fn): returns dates that should be included in time series
specmap (dict): mapping of keys to specs
chipmap (dict): mapping of keys to chips
Returns:
A tuple of tuples.
The aux format key is ```(chip_x, chip_y, x, y)``` with a
dictionary of sorted numpy arrays representing each spectra plus an
additional sorted dates array.
>>> aux(*args)
(((chip_x, chip_y, x1, y1), {"dates": [], "nlcd": [],
"nlcdtrn": [], "trends": [],
"mpw": [], "dem": [],
"posidex": [], "aspect": [],
"slope": []}),
((chip_x, chip_y, x1, y2), {"dates": [], "nlcd": [],
"nlcdtrn": [], "trends": [],
"mpw": [], "dem": [],
"posidex": [], "aspect": [],
"slope": []}))
...
"""
_index = specs.index(list(functions.flatten(specmap.values())))
_dates = dates_fn(datemap=dates.mapped(chipmap))
_creator = partial(rods.create, x=x, y=y, dateseq=_dates, locations=locations, spec_index=_index)
_flipped = partial(functions.flip_keys, {k: _creator(chipseq=v) for k, v in chipmap.items()})
_rods = functions.insert_into_every(key='dates',
value=[dates.minmax(_dates)],
dods=_flipped())
return tuple((k, v) for k, v in _rods.items())