Skip to content

Commit

Permalink
Let pygmt.info load datetime columns into a str dtype array (GenericM…
Browse files Browse the repository at this point in the history
…appingTools#960)

Fixes problem with pygmt.info not being able to handle datetime64 inputs.
I.e. `ValueError: could not convert string to float: '2021-01-01T12:34:56'`
However, users will still need to use`pygmt.info(..., coltypes="0T")` until
upstream issue at GenericMappingTools/gmt#4241
is resolved. Also added two extra unit tests using numpy datetime64 types.

* Use common alias coltypes (f) in tests and make a note on the workaround
  • Loading branch information
weiji14 authored and Josh Sixsmith committed Dec 21, 2022
1 parent 8a1945b commit f57277d
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
6 changes: 5 additions & 1 deletion pygmt/src/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ def info(table, **kwargs):
# instead of a raw string that is less useful.
if result.startswith(("-R", "-T")): # e.g. -R0/1/2/3 or -T0/9/1
result = result[2:].replace("/", " ")
result = np.loadtxt(result.splitlines())
try:
result = np.loadtxt(result.splitlines())
except ValueError:
# Load non-numerical outputs in str type, e.g. for datetime
result = np.loadtxt(result.splitlines(), dtype="str")

return result
27 changes: 27 additions & 0 deletions pygmt/tests/test_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,20 @@ def test_info_dataframe():
assert output == expected_output


def test_info_numpy_array_time_column():
"""
Make sure info works on a numpy.ndarray input with a datetime type.
"""
table = pd.date_range(start="2020-01-01", periods=5).to_numpy()
# Please remove coltypes="0T" workaround after
# https://github.com/GenericMappingTools/gmt/issues/4241 is resolved
output = info(table=table, coltypes="0T")
expected_output = (
"<vector memory>: N = 5 <2020-01-01T00:00:00/2020-01-05T00:00:00>\n"
)
assert output == expected_output


@pytest.mark.xfail(
reason="UNIX timestamps returned instead of ISO datetime, should work on GMT 6.2.0 "
"after https://github.com/GenericMappingTools/gmt/issues/4241 is resolved",
Expand Down Expand Up @@ -115,6 +129,19 @@ def test_info_per_column():
)


def test_info_per_column_with_time_inputs():
"""
Make sure the per_column option works with time inputs.
"""
table = pd.date_range(start="2020-01-01", periods=5).to_numpy()
# Please remove coltypes="0T" workaround after
# https://github.com/GenericMappingTools/gmt/issues/4241 is resolved
output = info(table=table, per_column=True, coltypes="0T")
npt.assert_equal(
actual=output, desired=["2020-01-01T00:00:00", "2020-01-05T00:00:00"]
)


def test_info_spacing():
"""
Make sure the spacing option works.
Expand Down

0 comments on commit f57277d

Please sign in to comment.