Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions pygmt/src/x2sys_cross.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,9 +250,12 @@ def x2sys_cross(
unit = time_unit.upper() if time_unit in "wd" else time_unit
scale = 1.0

columns = result.columns[2:4]
result[columns] *= scale
result[columns] = result[columns].apply(pd.to_timedelta, unit=unit)
if columns[0][0] == "t": # "t" or "i":
result[columns] += pd.Timestamp(lib.get_default("TIME_EPOCH"))
if len(result) > 0: # if crossovers exist (more than one output row)
columns: pd.Index = result.columns[2:4] # i_1/i_2 or t_1/t_2 columns
result[columns] *= scale
result[columns] = result[columns].apply(pd.to_timedelta, unit=unit)

if columns[0][0] == "t": # "t" or "i":
result[columns] += pd.Timestamp(lib.get_default("TIME_EPOCH"))

return result
23 changes: 23 additions & 0 deletions pygmt/tests/test_x2sys_cross.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,3 +308,26 @@ def test_x2sys_cross_trackvalues():
assert output.shape == (14338, 12)
npt.assert_allclose(output.z_1.mean(), -2422.418556, rtol=1e-4)
npt.assert_allclose(output.z_2.mean(), -2402.268364, rtol=1e-4)


@pytest.mark.usefixtures("mock_x2sys_home")
def test_x2sys_cross_output_dataframe_empty(tracks):
"""
Test that x2sys_cross can output an empty dataframe (when there are no crossovers)
without any errors.

Regression test for
https://forum.generic-mapping-tools.org/t/issue-with-x2sys-in-pygmt-solved/6154
"""
with TemporaryDirectory(prefix="X2SYS", dir=Path.cwd()) as tmpdir:
tag = Path(tmpdir).name
x2sys_init(tag=tag, fmtfile="xyz", force=True)

tracks = [tracks[0][:5]] # subset to less rows so there won't be crossovers
output = x2sys_cross(tracks=tracks, tag=tag, coe="i")

assert isinstance(output, pd.DataFrame)
assert output.shape == (0, 0)
assert output.empty
columns = list(output.columns)
assert columns == []
Loading