|
8 | 8 | import contextlib |
9 | 9 | import ctypes as ctp |
10 | 10 | import io |
11 | | -import pathlib |
12 | 11 | import sys |
13 | 12 | import warnings |
14 | 13 | from collections.abc import Callable, Generator, Sequence |
@@ -1792,43 +1791,43 @@ def virtualfile_in( # noqa: PLR0912 |
1792 | 1791 | "vectors": self.virtualfile_from_vectors, |
1793 | 1792 | }[kind] |
1794 | 1793 |
|
1795 | | - # Ensure the data is an iterable (Python list or tuple) |
1796 | | - if kind in {"geojson", "grid", "image", "file", "arg", "stringio"}: |
1797 | | - if kind == "image" and data.dtype != "uint8": |
1798 | | - msg = ( |
1799 | | - f"Input image has dtype: {data.dtype} which is unsupported, " |
1800 | | - "and may result in an incorrect output. Please recast image " |
1801 | | - "to a uint8 dtype and/or scale to 0-255 range, e.g. " |
1802 | | - "using a histogram equalization function like " |
1803 | | - "skimage.exposure.equalize_hist." |
1804 | | - ) |
1805 | | - warnings.warn(message=msg, category=RuntimeWarning, stacklevel=2) |
1806 | | - _data = (data,) if not isinstance(data, pathlib.PurePath) else (str(data),) |
1807 | | - elif kind == "empty": |
1808 | | - # data is None, so data must be given via x/y/z. |
1809 | | - _data = [x, y] |
1810 | | - if z is not None: |
1811 | | - _data.append(z) |
1812 | | - if extra_arrays: |
1813 | | - _data.extend(extra_arrays) |
1814 | | - elif kind == "vectors": |
1815 | | - if hasattr(data, "items") and not hasattr(data, "to_frame"): |
1816 | | - # pandas.DataFrame or xarray.Dataset types. |
1817 | | - # pandas.Series will be handled below like a 1-D numpy.ndarray. |
1818 | | - _data = [array for _, array in data.items()] |
1819 | | - else: |
1820 | | - # Python list, tuple, numpy.ndarray, and pandas.Series types |
1821 | | - _data = np.atleast_2d(np.asanyarray(data).T) |
1822 | | - elif kind == "matrix": |
1823 | | - # GMT can only accept a 2-D matrix which are signed integer (i), unsigned |
1824 | | - # integer (u) or floating point (f) types. For other data types, we need to |
1825 | | - # use virtualfile_from_vectors instead, which turns the matrix into a list |
1826 | | - # of vectors and allows for better handling of non-integer/float type inputs |
1827 | | - # (e.g. for string or datetime data types). |
1828 | | - _data = (data,) |
1829 | | - if data.dtype.kind not in "iuf": |
1830 | | - _virtualfile_from = self.virtualfile_from_vectors |
1831 | | - _data = data.T |
| 1794 | + # Ensure the data is an iterable (Python list or tuple). |
| 1795 | + match kind: |
| 1796 | + case "arg" | "file" | "geojson" | "grid" | "image" | "stringio": |
| 1797 | + _data = (data,) |
| 1798 | + if kind == "image" and data.dtype != "uint8": |
| 1799 | + msg = ( |
| 1800 | + f"Input image has dtype: {data.dtype} which is unsupported, " |
| 1801 | + "and may result in an incorrect output. Please recast image " |
| 1802 | + "to a uint8 dtype and/or scale to 0-255 range, e.g. " |
| 1803 | + "using a histogram equalization function like " |
| 1804 | + "skimage.exposure.equalize_hist." |
| 1805 | + ) |
| 1806 | + warnings.warn(message=msg, category=RuntimeWarning, stacklevel=2) |
| 1807 | + case "empty": # data is None, so data must be given via x/y/z. |
| 1808 | + _data = [x, y] |
| 1809 | + if z is not None: |
| 1810 | + _data.append(z) |
| 1811 | + if extra_arrays: |
| 1812 | + _data.extend(extra_arrays) |
| 1813 | + case "vectors": |
| 1814 | + if hasattr(data, "items") and not hasattr(data, "to_frame"): |
| 1815 | + # pandas.DataFrame or xarray.Dataset types. |
| 1816 | + # pandas.Series will be handled below like a 1-D numpy.ndarray. |
| 1817 | + _data = [array for _, array in data.items()] |
| 1818 | + else: |
| 1819 | + # Python list, tuple, numpy.ndarray, and pandas.Series types |
| 1820 | + _data = np.atleast_2d(np.asanyarray(data).T) |
| 1821 | + case "matrix": |
| 1822 | + # GMT can only accept a 2-D matrix which are signed integer (i), |
| 1823 | + # unsigned integer (u) or floating point (f) types. For other data |
| 1824 | + # types, we need to use virtualfile_from_vectors instead, which turns |
| 1825 | + # the matrix into a list of vectors and allows for better handling of |
| 1826 | + # non-integer/float type inputs (e.g. for string or datetime data types) |
| 1827 | + _data = (data,) |
| 1828 | + if data.dtype.kind not in "iuf": |
| 1829 | + _virtualfile_from = self.virtualfile_from_vectors |
| 1830 | + _data = data.T |
1832 | 1831 |
|
1833 | 1832 | # Finally create the virtualfile from the data, to be passed into GMT |
1834 | 1833 | file_context = _virtualfile_from(*_data) |
|
0 commit comments