From 4fe75fd25f646e8f68bd04e3da2806ecef93810d Mon Sep 17 00:00:00 2001 From: PProfizi Date: Mon, 13 Jan 2025 16:57:57 +0100 Subject: [PATCH 1/5] Fix/refactor ansys.dpf.core._version.ServerToAnsysVersion --- src/ansys/dpf/core/_version.py | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/src/ansys/dpf/core/_version.py b/src/ansys/dpf/core/_version.py index 5fb17342c0d..ebe63301a78 100644 --- a/src/ansys/dpf/core/_version.py +++ b/src/ansys/dpf/core/_version.py @@ -27,31 +27,16 @@ class ServerToAnsysVersion: - legacy_version_map = { - "1.0": "2021R1", - "2.0": "2021R2", - "3.0": "2022R1", - "4.0": "2022R2", - "5.0": "2023R1", - "6.0": "2023R2", - "6.1": "2023R2", - "6.2": "2023R2", - "7.0": "2024R1", - "7.1": "2024R1", - "8.0": "2024R2", - "8.1": "2024R2", - "8.2": "2024R2", - "9.0": "2025R1", - "9.1": "2025R1", - "10.0": "2025R2", - } - def __getitem__(self, item): - if len(item) == 3: - return self.legacy_version_map[item] - else: - split = item.split(".") - return split[0] + "R" + split[1] + split = item.split(".") + major = int(split[0]) + minor = int(split[1]) + if major < 2024: + # Detect new cases of XX.Y versions (necessarily XX<2024) + # Compute release version equivalent + minor = 2 - major % 2 + major = 2020 + major // 2 + major % 2 + return f"{major}R{minor}" server_to_ansys_version = ServerToAnsysVersion() From 84c76c339b07723e37faa11dcb7af52e11b0e86c Mon Sep 17 00:00:00 2001 From: PProfizi Date: Mon, 13 Jan 2025 16:58:22 +0100 Subject: [PATCH 2/5] Add testing --- tests/test_version.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tests/test_version.py diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 00000000000..99110fc0301 --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,43 @@ +# Copyright (C) 2020 - 2025 ANSYS, Inc. and/or its affiliates. +# SPDX-License-Identifier: MIT +# +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import pytest + +from ansys.dpf.core._version import server_to_ansys_version + + +@pytest.mark.parametrize( + "server_version,ansys_version", + [ + ("1.0", "2021R1"), + ("2.0", "2021R2"), + ("2.1", "2021R2"), + ("3.0", "2022R1"), + ("2023.0", "3032R1"), + ("2023.1.12", "3032R1"), + ("2024.0", "2024R0"), + ("2024.1", "2024R1"), + ("2024.1.pre0", "2024R1"), + ], +) +def test_server_to_ansys_version(server_version, ansys_version): + assert server_to_ansys_version[server_version] == ansys_version From 5cb6408a6b2d0ad35a8b14682e06714c190241c8 Mon Sep 17 00:00:00 2001 From: PProfizi Date: Tue, 14 Jan 2025 09:05:24 +0100 Subject: [PATCH 3/5] Refactor using packaging.version, add comments. --- src/ansys/dpf/core/_version.py | 24 +++++++++++++++--------- tests/test_version.py | 4 +++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/ansys/dpf/core/_version.py b/src/ansys/dpf/core/_version.py index ebe63301a78..6968146a5a1 100644 --- a/src/ansys/dpf/core/_version.py +++ b/src/ansys/dpf/core/_version.py @@ -22,21 +22,27 @@ """Version for ansys-dpf-core.""" +from packaging.version import parse as parse_version + # Minimal DPF server version supported min_server_version = "4.0" class ServerToAnsysVersion: def __getitem__(self, item): - split = item.split(".") - major = int(split[0]) - minor = int(split[1]) - if major < 2024: - # Detect new cases of XX.Y versions (necessarily XX<2024) - # Compute release version equivalent - minor = 2 - major % 2 - major = 2020 + major // 2 + major % 2 - return f"{major}R{minor}" + version = parse_version(item) + if version.major < 2024: + # Support the current DPF versioning scheme (XX.Y where necessarily XX<2024) + # Compute release version equivalent (YEAR+'R'+REVISION) + # The revision is 'R1' for any odd major DPF version, 'R2' for even major versions. + ansys_revision = 2 - version.major % 2 + # The year is 2021 for DPF 1.0, and bumped every two releases. + ansys_year = 2020 + version.major // 2 + version.major % 2 + # Return the corresponding Ansys release + return f"{ansys_year}R{ansys_revision}" + else: + # Support the YEAR.REVISION versioning scheme for DPF + return f"{version.major}R{version.minor}" server_to_ansys_version = ServerToAnsysVersion() diff --git a/tests/test_version.py b/tests/test_version.py index 99110fc0301..f3d6a2ea352 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -28,14 +28,16 @@ @pytest.mark.parametrize( "server_version,ansys_version", [ + # Current DPF versioning ("1.0", "2021R1"), ("2.0", "2021R2"), ("2.1", "2021R2"), ("3.0", "2022R1"), ("2023.0", "3032R1"), ("2023.1.12", "3032R1"), + # Proposed calendar-like versioning ("2024.0", "2024R0"), - ("2024.1", "2024R1"), + ("2024.1.12", "2024R1"), ("2024.1.pre0", "2024R1"), ], ) From b5794a199ac841691d98cc9b4f9a7a51a51618a0 Mon Sep 17 00:00:00 2001 From: PProfizi Date: Tue, 14 Jan 2025 09:28:33 +0100 Subject: [PATCH 4/5] Remove support for proposed DPF versioning YEAR.REVISION.PATCH --- src/ansys/dpf/core/_version.py | 20 ++++++++------------ tests/test_version.py | 4 ---- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/ansys/dpf/core/_version.py b/src/ansys/dpf/core/_version.py index 6968146a5a1..a1a1253e617 100644 --- a/src/ansys/dpf/core/_version.py +++ b/src/ansys/dpf/core/_version.py @@ -31,18 +31,14 @@ class ServerToAnsysVersion: def __getitem__(self, item): version = parse_version(item) - if version.major < 2024: - # Support the current DPF versioning scheme (XX.Y where necessarily XX<2024) - # Compute release version equivalent (YEAR+'R'+REVISION) - # The revision is 'R1' for any odd major DPF version, 'R2' for even major versions. - ansys_revision = 2 - version.major % 2 - # The year is 2021 for DPF 1.0, and bumped every two releases. - ansys_year = 2020 + version.major // 2 + version.major % 2 - # Return the corresponding Ansys release - return f"{ansys_year}R{ansys_revision}" - else: - # Support the YEAR.REVISION versioning scheme for DPF - return f"{version.major}R{version.minor}" + # The current DPF versioning scheme is MAJOR.MINOR.PATCH + # Compute release version equivalent (YEAR+'R'+REVISION) + # The revision is 'R1' for any odd major DPF version, 'R2' for even major versions. + ansys_revision = 2 - version.major % 2 + # The year is 2021 for DPF 1.0, and bumped every two releases. + ansys_year = 2020 + version.major // 2 + version.major % 2 + # Return the corresponding Ansys release + return f"{ansys_year}R{ansys_revision}" server_to_ansys_version = ServerToAnsysVersion() diff --git a/tests/test_version.py b/tests/test_version.py index f3d6a2ea352..09d5e91de61 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -35,10 +35,6 @@ ("3.0", "2022R1"), ("2023.0", "3032R1"), ("2023.1.12", "3032R1"), - # Proposed calendar-like versioning - ("2024.0", "2024R0"), - ("2024.1.12", "2024R1"), - ("2024.1.pre0", "2024R1"), ], ) def test_server_to_ansys_version(server_version, ansys_version): From 8312868de1ea73f7e7ccd4a5f8fc1a29504645b3 Mon Sep 17 00:00:00 2001 From: PProfizi Date: Tue, 14 Jan 2025 09:39:54 +0100 Subject: [PATCH 5/5] Update test_checkversion.test_version --- tests/test_checkversion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_checkversion.py b/tests/test_checkversion.py index a28abbe5f0c..5df50ce4ab8 100644 --- a/tests/test_checkversion.py +++ b/tests/test_checkversion.py @@ -112,4 +112,4 @@ def test_version(): from ansys.dpf.core._version import server_to_ansys_version assert server_to_ansys_version["1.0"] == "2021R1" - assert server_to_ansys_version["2099.9"] == "2099R9" + assert server_to_ansys_version["10.0.12"] == "2025R2"