summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2023-02-14 08:28:36 -0500
committerGitHub <noreply@github.com>2023-02-14 08:28:36 -0500
commit40545d4200ca29716ec47df93b0bc6159483eec2 (patch)
treea75e94f8b886ab68906803b8d852efbec1797db8
parent7efaf7f47905d853d303cb79fa05b977e6706d07 (diff)
parentefcb0fbd138294fa362628ab1c8567255e374fd8 (diff)
downloadnumpy-40545d4200ca29716ec47df93b0bc6159483eec2.tar.gz
Merge pull request #23206 from charris/backport-23194
BUG: fix for f2py string scalars (#23194)
-rw-r--r--numpy/f2py/capi_maps.py6
-rw-r--r--numpy/f2py/tests/src/string/scalar_string.f907
-rw-r--r--numpy/f2py/tests/test_character.py20
3 files changed, 30 insertions, 3 deletions
diff --git a/numpy/f2py/capi_maps.py b/numpy/f2py/capi_maps.py
index f07066a09..aaae3a8e0 100644
--- a/numpy/f2py/capi_maps.py
+++ b/numpy/f2py/capi_maps.py
@@ -342,9 +342,9 @@ def getstrlength(var):
def getarrdims(a, var, verbose=0):
ret = {}
if isstring(var) and not isarray(var):
- ret['dims'] = getstrlength(var)
- ret['size'] = ret['dims']
- ret['rank'] = '1'
+ ret['size'] = getstrlength(var)
+ ret['rank'] = '0'
+ ret['dims'] = ''
elif isscalar(var):
ret['size'] = '1'
ret['rank'] = '0'
diff --git a/numpy/f2py/tests/src/string/scalar_string.f90 b/numpy/f2py/tests/src/string/scalar_string.f90
new file mode 100644
index 000000000..d847668bb
--- /dev/null
+++ b/numpy/f2py/tests/src/string/scalar_string.f90
@@ -0,0 +1,7 @@
+MODULE string_test
+
+ character(len=8) :: string
+
+ character(len=12), dimension(5,7) :: strarr
+
+END MODULE string_test
diff --git a/numpy/f2py/tests/test_character.py b/numpy/f2py/tests/test_character.py
index b54b4d981..a5cfffe0d 100644
--- a/numpy/f2py/tests/test_character.py
+++ b/numpy/f2py/tests/test_character.py
@@ -568,3 +568,23 @@ class TestMiscCharacter(util.F2PyTest):
assert_equal(len(a), 2)
assert_raises(Exception, lambda: f(b'c'))
+
+
+class TestStringScalarArr(util.F2PyTest):
+ sources = [util.getpath("tests", "src", "string", "scalar_string.f90")]
+
+ @pytest.mark.slow
+ def test_char(self):
+ out = self.module.string_test.string
+ expected = ()
+ assert out.shape == expected
+ expected = '|S8'
+ assert out.dtype == expected
+
+ @pytest.mark.slow
+ def test_char_arr(self):
+ out = self.module.string_test.strarr
+ expected = (5,7)
+ assert out.shape == expected
+ expected = '|S12'
+ assert out.dtype == expected