8000 Merge pull request #24299 from HaoZeke/gh24008_regression_f2py · numpy/numpy@b6b6f22 · GitHub
[go: up one dir, main page]

Skip to content

Commit b6b6f22

Browse files
authored
Merge pull request #24299 from HaoZeke/gh24008_regression_f2py
BUG: Fix assumed length f2py regression
2 parents 7057b2f + 9a44f54 commit b6b6f22

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

numpy/f2py/crackfortran.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,6 +1742,23 @@ def updatevars(typespec, selector, attrspec, entitydecl):
17421742
else:
17431743
del d1[k]
17441744

1745+
if 'len' in d1 and 'array' in d1:
1746+
if d1['len'] == '':
1747+
d1['len'] = d1['array']
1748+
del d1['array']
1749+
elif typespec == 'character':
1750+
if ('charselector' not in edecl) or (not edecl['charselector']):
1751+
edecl['charselector'] = {}
1752+
if 'len' in edecl['charselector']:
1753+
del edecl['charselector']['len']
1754+
edecl['charselector']['*'] = d1['len']
1755+
del d1['len']
1756+
else:
1757+
d1['array'] = d1['array'] + ',' + d1['len']
1758+
del d1['len']
1759+
errmess('updatevars: "%s %s" is mapped to "%s %s(%s)"\n' % (
1760+
typespec, e, typespec, ename, d1['array']))
1761+
17451762
if 'len' in d1:
17461763
if typespec in ['complex', 'integer', 'logical', 'real']:
17471764
if ('kindselector' not in edecl) or (not edecl['kindselector']):
@@ -1763,16 +1780,6 @@ def updatevars(typespec, selector, attrspec, entitydecl):
17631780
else:
17641781
edecl['='] = d1['init']
17651782

1766-
if 'len' in d1 and 'array' in d1:
1767-
if d1['len'] == '':
1768-
d1['len'] = d1['array']
1769-
del d1['array']
1770-
else:
1771-
d1['array'] = d1['array'] + ',' + d1['len']
1772-
del d1['len']
1773-
errmess('updatevars: "%s %s" is mapped to "%s %s(%s)"\n' % (
1774-
typespec, e, typespec, ename, d1['array']))
1775-
17761783
if 'array' in d1:
17771784
dm = 'dimension(%s)' % d1['array']
17781785
if 'attrspec' not in edecl or (not edecl['attrspec']):

numpy/f2py/tests/src/string/gh24008.f

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
SUBROUTINE GREET(NAME, GREETING)
2+
CHARACTER NAME*(*), GREETING*(*)
3+
CHARACTER*(50) MESSAGE
4+
5+
MESSAGE = 'Hello, ' // NAME // ', ' // GREETING
6+
c$$$ PRINT *, MESSAGE
7+
8+
END SUBROUTINE GREET

numpy/f2py/tests/test_character.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,6 @@ def test_character_bc(self, state):
574574
class TestStringScalarArr(util.F2PyTest):
575575
sources = [util.getpath("tests", "src", "string", "scalar_string.f90")]
576576

577-
@pytest.mark.slow
578577
def test_char(self):
579578
for out in (self.module.string_test.string,
580579
self.module.string_test.string77):
@@ -583,11 +582,16 @@ def test_char(self):
583582
expected = '|S8'
584583
assert out.dtype == expected
585584

586-
@pytest.mark.slow
587585
def test_char_arr(self):
588586
for out in (self.module.string_test.strarr,
589587
self.module.string_test.strarr77):
590588
expected = (5,7)
591589
assert out.shape == expected
592590
expected = '|S12'
593591
assert out.dtype == expected
592+
593+
class TestStringAssumedLength(util.F2PyTest):
594+
sources = [util.getpath("tests", "src", "string", "gh24008.f")]
595+
596+
def test_gh24008(self):
597+
self.module.greet("joe", "bob")

0 commit comments

Comments
 (0)
0