forked from pearu/f2py
-
Notifications
You must be signed in to change notification settings - Fork 34
(Towards #428) Implementation of the Fortran2008 intrinsics #514
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 6 commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
bae98ef
Implementation of the Fortran2008 intrinsics
LonelyCat124 fd6da0d
Formatting
LonelyCat124 47f6796
Updates for review and F2008 structure
LonelyCat124 85dacbd
fix formatting
LonelyCat124 601e30c
manual pyblack update
LonelyCat124 53b2dd2
More formatting changes
LonelyCat124 3ab5c2f
#514 fix pylint issues
arporter 3c2efbf
#514 rm print
arporter 9db78c5
#514 move new tests into existing test file
arporter 1cf044c
#514 rm new test file
arporter 8cf6a43
#514 fix black formatting for 3.14
arporter 5a27f24
Update changelog
sergisiso File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,99 @@ | ||
| # ----------------------------------------------------------------------------- | ||
| # BSD 3-Clause License | ||
| # | ||
| # Copyright (c) 2026, Science and Technology Facilities Council. | ||
| # All rights reserved. | ||
| # | ||
| # Redistribution and use in source and binary forms, with or without | ||
| # modification, are permitted provided that the following conditions are met: | ||
| # | ||
| # * Redistributions of source code must retain the above copyright notice, this | ||
| # list of conditions and the following disclaimer. | ||
| # | ||
| # * Redistributions in binary form must reproduce the above copyright notice, | ||
| # this list of conditions and the following disclaimer in the documentation | ||
| # and/or other materials provided with the distribution. | ||
| # | ||
| # * Neither the name of the copyright holder nor the names of its | ||
| # contributors may be used to endorse or promote products derived from | ||
| # this software without specific prior written permission. | ||
| # | ||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
| # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
| # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
| # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
| # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
| # POSSIBILITY OF SUCH DAMAGE. | ||
| # ----------------------------------------------------------------------------- | ||
|
|
||
| """ | ||
| Module containing Fortran2008 Intrinsics. | ||
| """ | ||
|
|
||
| from typing import Union | ||
|
arporter marked this conversation as resolved.
Outdated
|
||
|
|
||
| from fparser.two.Fortran2003 import Intrinsic_Name as F2003_Intrinsic_Name | ||
| from fparser.two.Fortran2003 import ( | ||
| Intrinsic_Function_Reference as F2003_Intrinsic_Function_Reference, | ||
| ) | ||
| from fparser.two.utils import STRINGBase | ||
|
|
||
|
|
||
| class Intrinsic_Name(F2003_Intrinsic_Name): | ||
| """ | ||
| Represents the name of a Fortran 2008 intrinsic function. | ||
|
|
||
| All generic intrinsic names are specified as keys in the | ||
| `generic_function_names` dictionary, with their values indicating | ||
| the minimum and maximum number of arguments allowed for this | ||
| intrinsic function. A `-1` indicates an unlimited number of | ||
| arguments. The names are split into the categories specified in | ||
| the Fortran2003 specification document. | ||
|
|
||
| All specific intrinsic names (which have a different name to their | ||
| generic counterpart) are specified as keys in the | ||
| `specific_function_names` dictionary, with their values indicating | ||
| which generic function they are associated with | ||
| """ | ||
|
|
||
| f08_math_intrinsics = { | ||
| "ERF": {"min": 1, "max": 1}, | ||
| "GAMMA": {"min": 1, "max": 1}, | ||
| } | ||
|
|
||
| f08_bitshift_intrinsics = { | ||
| "SHIFTL": {"min": 2, "max": 2}, | ||
| "SHIFTR": {"min": 2, "max": 2}, | ||
| "SHIFTA": {"min": 2, "max": 2}, | ||
| } | ||
|
|
||
| # Create the dicts (not inherited from F2003_Intrinsic_Name) | ||
| generic_function_names = {} | ||
| generic_function_names.update(F2003_Intrinsic_Name.generic_function_names) | ||
| generic_function_names.update(f08_math_intrinsics) | ||
| generic_function_names.update(f08_bitshift_intrinsics) | ||
|
|
||
| specific_function_names = F2003_Intrinsic_Name.specific_function_names | ||
|
|
||
| # A list of all function names | ||
| function_names = list(generic_function_names.keys()) + list( | ||
| specific_function_names.keys() | ||
| ) | ||
|
|
||
|
|
||
| class Intrinsic_Function_Reference(F2003_Intrinsic_Function_Reference): | ||
| """ | ||
| Represents Fortran intrinsics:: | ||
|
|
||
| function-reference is intrinsic-name ( [ actual-arg-spec-list ] ) | ||
|
|
||
| """ | ||
|
|
||
| # Set the type of Intrinsic_Name to be used | ||
| _intrinsic_type = Intrinsic_Name | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| # ----------------------------------------------------------------------------- | ||
| # BSD 3-Clause License | ||
| # | ||
| # Copyright (c) 2023-2024, Science and Technology Facilities Council. | ||
| # All rights reserved. | ||
| # | ||
| # Redistribution and use in source and binary forms, with or without | ||
| # modification, are permitted provided that the following conditions are met: | ||
| # | ||
| # * Redistributions of source code must retain the above copyright notice, this | ||
| # list of conditions and the following disclaimer. | ||
| # | ||
| # * Redistributions in binary form must reproduce the above copyright notice, | ||
| # this list of conditions and the following disclaimer in the documentation | ||
| # and/or other materials provided with the distribution. | ||
| # | ||
| # * Neither the name of the copyright holder nor the names of its | ||
| # contributors may be used to endorse or promote products derived from | ||
| # this software without specific prior written permission. | ||
| # | ||
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
| # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
| # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
| # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
| # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
| # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
| # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
| # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
| # POSSIBILITY OF SUCH DAMAGE. | ||
| # ----------------------------------------------------------------------------- | ||
|
|
||
| """Test the Fortran 2008 intrinsic support.""" | ||
|
|
||
| from fparser.common.readfortran import FortranStringReader | ||
| from fparser.two.Fortran2003 import Part_Ref | ||
| from fparser.two.Fortran2008 import Intrinsic_Name | ||
| from fparser.two.utils import walk | ||
|
|
||
|
|
||
| def test_f2008_intrinsic(f2008_parser): | ||
| """Test Fortran2008 intrinsic is created with the f2008 parser.""" | ||
|
|
||
| reader = FortranStringReader("""subroutine test | ||
| integer :: i | ||
|
|
||
| i = erf(i) | ||
| end subroutine test | ||
| """) | ||
| tree = f2008_parser(reader) | ||
| intrinsic = walk(tree, Intrinsic_Name) | ||
| print(tree.__repr__) | ||
|
arporter marked this conversation as resolved.
Outdated
|
||
| assert len(intrinsic) == 1 | ||
| assert str(intrinsic[0]) == "ERF" | ||
|
|
||
|
|
||
| def test_f2008_intrinsic_f2003_parse(f2003_parser): | ||
| """Test Fortran2008 intrinsic is not created with the f2003 parser.""" | ||
| reader = FortranStringReader("""subroutine test | ||
| integer :: i | ||
|
|
||
| i = erf(i) | ||
| end subroutine test | ||
| """) | ||
| tree = f2003_parser(reader) | ||
| intrinsic = walk(tree, Intrinsic_Name) | ||
| assert len(intrinsic) == 0 | ||
| partref = walk(tree, Part_Ref) | ||
| assert len(partref) == 1 | ||
| assert str(partref[0]) == "erf(i)" | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.