Source code for pyrfu.pyrf.ts_append
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3rd party imports
import numpy as np
import xarray as xr
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def ts_append(inp0, inp1):
r"""Concatenate two time series along the time axis.
Parameters
----------
inp0 : xarray.DataArray
Time series of the first input (early times).
inp1 : xarray.DataArray
Time series of the second input (late times).
Returns
-------
out : xarray.DataArray
Concatenated time series.
Notes
-----
The time series must be in the correct time order.
"""
if inp0 is None:
return inp1
out_data = {}
if inp0.data.ndim != 1:
out_data["data"] = np.vstack([inp0, inp1])
else:
out_data["data"] = np.hstack([inp0, inp1])
out_data["attrs"] = {}
for k in inp0.attrs:
if isinstance(inp0.attrs[k], np.ndarray):
out_data["attrs"][k] = np.hstack([inp0.attrs[k], inp1.attrs[k]])
else:
out_data["attrs"][k] = inp0.attrs[k]
depends = [{} for _ in range(len(inp0.dims))]
for i, dim in enumerate(inp0.dims):
if i == 0 or dim == "time":
depends[i]["data"] = np.hstack([inp0[dim].data, inp1[dim].data])
# add attributes
depends[i]["attrs"] = {}
for k in inp0[dim].attrs:
# if attrs is array time append
if isinstance(inp0[dim].attrs[k], np.ndarray):
depends[i]["attrs"][k] = np.hstack(
[inp0[dim].attrs[k], inp1[dim].attrs[k]],
)
else:
depends[i]["attrs"][k] = inp0[dim].attrs[k]
else:
# Use values of other coordinates of inp0 assuming equal to inp1
depends[i]["data"] = inp0[dim].data
# add attributes
depends[i]["attrs"] = {}
for k in inp0[dim].attrs:
depends[i]["attrs"][k] = inp0[dim].attrs[k]
# Create DataArray
out = xr.DataArray(
out_data["data"],
coords=[depend["data"] for depend in depends],
dims=inp0.dims,
attrs=out_data["attrs"],
)
for i, dim in enumerate(out.dims):
out[dim].attrs = depends[i]["attrs"]
return out