From aca5c02f90945160301fde496ffcb54e1857d7cc Mon Sep 17 00:00:00 2001 From: Davide Valsecchi Date: Thu, 14 Mar 2024 20:42:22 +0100 Subject: [PATCH 1/6] testig pytorch_scatter integration --- pytorch_scatter.spec | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pytorch_scatter.spec diff --git a/pytorch_scatter.spec b/pytorch_scatter.spec new file mode 100644 index 00000000000..77e6d0dde5c --- /dev/null +++ b/pytorch_scatter.spec @@ -0,0 +1,44 @@ +### RPM external pytorch_scatter 2.1.2 +## INCLUDE compilation_flags +## INCLUDE cpp-standard +%define tag 1824369201e67dd5f06bf71c84b09aab133d2fb1 +%define branch cms/v2.1.2 + +Source: git+https://github.com/valsdav/pytorch_scatter.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz + +BuildRequires: cmake +Requires: pytorch cudnn +%define build_flags -Wall -Wextra -pedantic %{?arch_build_flags} + +%prep +%setup -n %{n}-%{realversion} + +%build + +rm -rf ../build && mkdir ../build && cd ../build + + +cmake ../%{n}-%{realversion} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=%{i} \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_PREFIX_PATH="%{cmake_prefix_path}" \ + -DCMAKE_CXX_STANDARD="%{cms_cxx_standard}" \ + -DCMAKE_CXX_FLAGS="%{build_flags}" \ + -DBUILD_TEST=OFF \ + -DWITH_PYTHON=OFF \ + -DWITH_CUDA=OFF \ + -DBUILD_TEST=OFF \ + -DBUILD_SHARED_LIBS=ON + +#-DCMAKE_CXX_STANDARD:STRING="%{cms_cxx_standard}" \ + #-DCMAKE_CXX_FLAGS="%{build_flags}" \#-DCMAKE_CXX_STANDARD:STRING="%{cms_cxx_standard}" \ + #-DCMAKE_CXX_FLAGS="%{build_flags}" \ + +make %{makeprocesses} VERBOSE=1 + +%install +cd ../build +make %{makeprocesses} install VERBOSE=1 + +%post From c20e4f9493a01a9fabe470c8fd6240ff0024b635 Mon Sep 17 00:00:00 2001 From: Davide Valsecchi Date: Sun, 17 Mar 2024 23:16:37 +0100 Subject: [PATCH 2/6] Added pytorch custom ops tools --- cmssw-tool-conf.spec | 3 ++ pytorch-cluster.spec | 45 +++++++++++++++++++ pytorch_scatter.spec => pytorch-scatter.spec | 14 +++--- pytorch-sparse.spec | 45 +++++++++++++++++++ .../tools/pytorch-cluster/pytorch-cluster.xml | 10 +++++ .../tools/pytorch-scatter/pytorch-scatter.xml | 10 +++++ .../tools/pytorch-sparse/pytorch-sparse.xml | 10 +++++ .../tools/pytorch/pytorch-cluster.xml | 10 +++++ .../tools/pytorch/pytorch-scatter.xml | 10 +++++ .../tools/pytorch/pytorch-sparse.xml | 10 +++++ 10 files changed, 160 insertions(+), 7 deletions(-) create mode 100644 pytorch-cluster.spec rename pytorch_scatter.spec => pytorch-scatter.spec (70%) create mode 100644 pytorch-sparse.spec create mode 100644 scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml create mode 100644 scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml create mode 100644 scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml create mode 100644 scram-tools.file/tools/pytorch/pytorch-cluster.xml create mode 100644 scram-tools.file/tools/pytorch/pytorch-scatter.xml create mode 100644 scram-tools.file/tools/pytorch/pytorch-sparse.xml diff --git a/cmssw-tool-conf.spec b/cmssw-tool-conf.spec index 7a2d8271051..22e30e4a3a1 100644 --- a/cmssw-tool-conf.spec +++ b/cmssw-tool-conf.spec @@ -182,6 +182,9 @@ Requires: xtensor Requires: xtl Requires: xgboost Requires: pytorch +Requires: pytorch-scatter +Requires: pytorch-cluster +Requires: pytorch-sparse ## INCLUDE cmssw-vectorization ## INCLUDE cmssw-drop-tools diff --git a/pytorch-cluster.spec b/pytorch-cluster.spec new file mode 100644 index 00000000000..561ce92a460 --- /dev/null +++ b/pytorch-cluster.spec @@ -0,0 +1,45 @@ +### RPM external pytorch-cluster 1.6.3 +## INCLUDE compilation_flags +## INCLUDE cpp-standard +%define tag f2d99195a0003ca2d2ba9ed50d0117e2f23360e0 +%define branch cms/v1.6.3 +%define github_user valsdav + +Source: git+https://github.com/%{github_user}/pytorch_cluster.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz + +BuildRequires: cmake +Requires: pytorch cudnn +%define build_flags -Wall -Wextra -pedantic %{?arch_build_flags} + +%prep +%setup -n %{n}-%{realversion} +# Make sure the default c++sdt stand is c++11 +grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt +sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt + +%build + +rm -rf ../build && mkdir ../build && cd ../build + + +cmake ../%{n}-%{realversion} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=%{i} \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_PREFIX_PATH="%{cmake_prefix_path}" \ + -DCMAKE_CXX_STANDARD=%{cms_cxx_standard} \ + -DCMAKE_CXX_FLAGS="%{build_flags}" \ + -DBUILD_TEST=OFF \ + -DWITH_PYTHON=OFF \ + -DWITH_CUDA=OFF \ + -DBUILD_TEST=OFF \ + -DBUILD_SHARED_LIBS=ON + + +make %{makeprocesses} VERBOSE=1 + +%install +cd ../build +make %{makeprocesses} install VERBOSE=1 + +%post diff --git a/pytorch_scatter.spec b/pytorch-scatter.spec similarity index 70% rename from pytorch_scatter.spec rename to pytorch-scatter.spec index 77e6d0dde5c..37619c64629 100644 --- a/pytorch_scatter.spec +++ b/pytorch-scatter.spec @@ -1,7 +1,7 @@ -### RPM external pytorch_scatter 2.1.2 +### RPM external pytorch-scatter 2.1.2 ## INCLUDE compilation_flags ## INCLUDE cpp-standard -%define tag 1824369201e67dd5f06bf71c84b09aab133d2fb1 +%define tag c095c62e4334fcd05e4ac3c4bb09d285960d6be6 %define branch cms/v2.1.2 Source: git+https://github.com/valsdav/pytorch_scatter.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz @@ -12,6 +12,9 @@ Requires: pytorch cudnn %prep %setup -n %{n}-%{realversion} +# Make sure the default c++sdt stand is c++11 +grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt +sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt %build @@ -23,17 +26,14 @@ cmake ../%{n}-%{realversion} \ -DCMAKE_INSTALL_PREFIX=%{i} \ -DCMAKE_INSTALL_LIBDIR=lib \ -DCMAKE_PREFIX_PATH="%{cmake_prefix_path}" \ - -DCMAKE_CXX_STANDARD="%{cms_cxx_standard}" \ + -DCMAKE_CXX_STANDARD=%{cms_cxx_standard} \ -DCMAKE_CXX_FLAGS="%{build_flags}" \ -DBUILD_TEST=OFF \ -DWITH_PYTHON=OFF \ -DWITH_CUDA=OFF \ -DBUILD_TEST=OFF \ - -DBUILD_SHARED_LIBS=ON + -DBUILD_SHARED_LIBS=ON -#-DCMAKE_CXX_STANDARD:STRING="%{cms_cxx_standard}" \ - #-DCMAKE_CXX_FLAGS="%{build_flags}" \#-DCMAKE_CXX_STANDARD:STRING="%{cms_cxx_standard}" \ - #-DCMAKE_CXX_FLAGS="%{build_flags}" \ make %{makeprocesses} VERBOSE=1 diff --git a/pytorch-sparse.spec b/pytorch-sparse.spec new file mode 100644 index 00000000000..9774f6bae4d --- /dev/null +++ b/pytorch-sparse.spec @@ -0,0 +1,45 @@ +### RPM external pytorch-sparse 0.6.18 +## INCLUDE compilation_flags +## INCLUDE cpp-standard +%define tag 2d559810c6af7f8b2cf88553dd5a5824a667a07d +%define branch cms/v0.6.18 +%define github_user valsdav + +Source: git+https://github.com/%{github_user}/pytorch_sparse.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz + +BuildRequires: cmake +Requires: pytorch cudnn +%define build_flags -Wall -Wextra -pedantic %{?arch_build_flags} + +%prep +%setup -n %{n}-%{realversion} +# Make sure the default c++sdt stand is c++11 +grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt +sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt + +%build + +rm -rf ../build && mkdir ../build && cd ../build + + +cmake ../%{n}-%{realversion} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=%{i} \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_PREFIX_PATH="%{cmake_prefix_path}" \ + -DCMAKE_CXX_STANDARD=%{cms_cxx_standard} \ + -DCMAKE_CXX_FLAGS="%{build_flags}" \ + -DBUILD_TEST=OFF \ + -DWITH_PYTHON=OFF \ + -DWITH_CUDA=OFF \ + -DBUILD_TEST=OFF \ + -DBUILD_SHARED_LIBS=ON + + +make %{makeprocesses} VERBOSE=1 + +%install +cd ../build +make %{makeprocesses} install VERBOSE=1 + +%post diff --git a/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml b/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml new file mode 100644 index 00000000000..662e1557a83 --- /dev/null +++ b/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml b/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml new file mode 100644 index 00000000000..28482a84773 --- /dev/null +++ b/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml b/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml new file mode 100644 index 00000000000..7e0ba7c5194 --- /dev/null +++ b/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/scram-tools.file/tools/pytorch/pytorch-cluster.xml b/scram-tools.file/tools/pytorch/pytorch-cluster.xml new file mode 100644 index 00000000000..662e1557a83 --- /dev/null +++ b/scram-tools.file/tools/pytorch/pytorch-cluster.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/scram-tools.file/tools/pytorch/pytorch-scatter.xml b/scram-tools.file/tools/pytorch/pytorch-scatter.xml new file mode 100644 index 00000000000..28482a84773 --- /dev/null +++ b/scram-tools.file/tools/pytorch/pytorch-scatter.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/scram-tools.file/tools/pytorch/pytorch-sparse.xml b/scram-tools.file/tools/pytorch/pytorch-sparse.xml new file mode 100644 index 00000000000..7e0ba7c5194 --- /dev/null +++ b/scram-tools.file/tools/pytorch/pytorch-sparse.xml @@ -0,0 +1,10 @@ + + + + + + + + + + From 71e66f559553b83a1a499dd8d7de0262e2bd595f Mon Sep 17 00:00:00 2001 From: Davide Valsecchi Date: Mon, 18 Mar 2024 11:02:51 +0100 Subject: [PATCH 3/6] Added pytorch custom ops tool --- .../tools/pytorch-custom-ops/pytorch-custom-ops.xml | 6 ++++++ scram-tools.file/tools/pytorch/pytorch-cluster.xml | 10 ---------- scram-tools.file/tools/pytorch/pytorch-scatter.xml | 10 ---------- scram-tools.file/tools/pytorch/pytorch-sparse.xml | 10 ---------- 4 files changed, 6 insertions(+), 30 deletions(-) create mode 100644 scram-tools.file/tools/pytorch-custom-ops/pytorch-custom-ops.xml delete mode 100644 scram-tools.file/tools/pytorch/pytorch-cluster.xml delete mode 100644 scram-tools.file/tools/pytorch/pytorch-scatter.xml delete mode 100644 scram-tools.file/tools/pytorch/pytorch-sparse.xml diff --git a/scram-tools.file/tools/pytorch-custom-ops/pytorch-custom-ops.xml b/scram-tools.file/tools/pytorch-custom-ops/pytorch-custom-ops.xml new file mode 100644 index 00000000000..276fa00489d --- /dev/null +++ b/scram-tools.file/tools/pytorch-custom-ops/pytorch-custom-ops.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/scram-tools.file/tools/pytorch/pytorch-cluster.xml b/scram-tools.file/tools/pytorch/pytorch-cluster.xml deleted file mode 100644 index 662e1557a83..00000000000 --- a/scram-tools.file/tools/pytorch/pytorch-cluster.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/scram-tools.file/tools/pytorch/pytorch-scatter.xml b/scram-tools.file/tools/pytorch/pytorch-scatter.xml deleted file mode 100644 index 28482a84773..00000000000 --- a/scram-tools.file/tools/pytorch/pytorch-scatter.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/scram-tools.file/tools/pytorch/pytorch-sparse.xml b/scram-tools.file/tools/pytorch/pytorch-sparse.xml deleted file mode 100644 index 7e0ba7c5194..00000000000 --- a/scram-tools.file/tools/pytorch/pytorch-sparse.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - From d5b9fc2ce551cac03c4bc3e6e5b80149331005f9 Mon Sep 17 00:00:00 2001 From: Davide Valsecchi Date: Fri, 22 Mar 2024 18:20:58 +0100 Subject: [PATCH 4/6] using the original github repositories, no patches needed --- pytorch-cluster.spec | 4 ++-- pytorch-scatter.spec | 5 +++-- pytorch-sparse.spec | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pytorch-cluster.spec b/pytorch-cluster.spec index 561ce92a460..a5bbd214a30 100644 --- a/pytorch-cluster.spec +++ b/pytorch-cluster.spec @@ -2,8 +2,8 @@ ## INCLUDE compilation_flags ## INCLUDE cpp-standard %define tag f2d99195a0003ca2d2ba9ed50d0117e2f23360e0 -%define branch cms/v1.6.3 -%define github_user valsdav +%define branch master +%define github_user rusty1s Source: git+https://github.com/%{github_user}/pytorch_cluster.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz diff --git a/pytorch-scatter.spec b/pytorch-scatter.spec index 37619c64629..be8df101e4c 100644 --- a/pytorch-scatter.spec +++ b/pytorch-scatter.spec @@ -2,9 +2,10 @@ ## INCLUDE compilation_flags ## INCLUDE cpp-standard %define tag c095c62e4334fcd05e4ac3c4bb09d285960d6be6 -%define branch cms/v2.1.2 +%define branch master +%define github_user rusty1s -Source: git+https://github.com/valsdav/pytorch_scatter.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz +Source: git+https://github.com/%{github_user}/pytorch_scatter.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz BuildRequires: cmake Requires: pytorch cudnn diff --git a/pytorch-sparse.spec b/pytorch-sparse.spec index 9774f6bae4d..0ff8f9bf2d4 100644 --- a/pytorch-sparse.spec +++ b/pytorch-sparse.spec @@ -2,8 +2,8 @@ ## INCLUDE compilation_flags ## INCLUDE cpp-standard %define tag 2d559810c6af7f8b2cf88553dd5a5824a667a07d -%define branch cms/v0.6.18 -%define github_user valsdav +%define branch master +%define github_user rusty1s Source: git+https://github.com/%{github_user}/pytorch_sparse.git?obj=%{branch}/%{tag}&export=%{n}-%{realversion}&submodules=1&output=/%{n}-%{realversion}.tgz From 5e6e82d3e1cf44f16dc48a16bc3e3a9eb576a794 Mon Sep 17 00:00:00 2001 From: Davide Valsecchi Date: Mon, 25 Mar 2024 10:20:17 +0100 Subject: [PATCH 5/6] Added spec file for pytorch-custom-ops --- cmssw-tool-conf.spec | 4 +--- pytorch-cluster.spec | 4 +--- pytorch-custom-ops.spec | 8 ++++++++ pytorch-scatter.spec | 4 +--- pytorch-sparse.spec | 4 +--- 5 files changed, 12 insertions(+), 12 deletions(-) create mode 100644 pytorch-custom-ops.spec diff --git a/cmssw-tool-conf.spec b/cmssw-tool-conf.spec index 22e30e4a3a1..fbae596f906 100644 --- a/cmssw-tool-conf.spec +++ b/cmssw-tool-conf.spec @@ -182,9 +182,7 @@ Requires: xtensor Requires: xtl Requires: xgboost Requires: pytorch -Requires: pytorch-scatter -Requires: pytorch-cluster -Requires: pytorch-sparse +Requires: pytorch-custom-ops ## INCLUDE cmssw-vectorization ## INCLUDE cmssw-drop-tools diff --git a/pytorch-cluster.spec b/pytorch-cluster.spec index a5bbd214a30..26fbec0f3cc 100644 --- a/pytorch-cluster.spec +++ b/pytorch-cluster.spec @@ -13,7 +13,7 @@ Requires: pytorch cudnn %prep %setup -n %{n}-%{realversion} -# Make sure the default c++sdt stand is c++11 +# Make sure the default c++sdt stand is c++14 grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt @@ -41,5 +41,3 @@ make %{makeprocesses} VERBOSE=1 %install cd ../build make %{makeprocesses} install VERBOSE=1 - -%post diff --git a/pytorch-custom-ops.spec b/pytorch-custom-ops.spec new file mode 100644 index 00000000000..b95b2ca2fde --- /dev/null +++ b/pytorch-custom-ops.spec @@ -0,0 +1,8 @@ +### RPM external pytorch-custom-ops 1.0 +Source: none +Requires: pytorch-scatter +Requires: pytorch-cluster +Requires: pytorch-sparse +%prep +%build +%install diff --git a/pytorch-scatter.spec b/pytorch-scatter.spec index be8df101e4c..943d8f4df18 100644 --- a/pytorch-scatter.spec +++ b/pytorch-scatter.spec @@ -13,7 +13,7 @@ Requires: pytorch cudnn %prep %setup -n %{n}-%{realversion} -# Make sure the default c++sdt stand is c++11 +# Make sure the default c++sdt stand is c++14 grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt @@ -41,5 +41,3 @@ make %{makeprocesses} VERBOSE=1 %install cd ../build make %{makeprocesses} install VERBOSE=1 - -%post diff --git a/pytorch-sparse.spec b/pytorch-sparse.spec index 0ff8f9bf2d4..cbef709381a 100644 --- a/pytorch-sparse.spec +++ b/pytorch-sparse.spec @@ -13,7 +13,7 @@ Requires: pytorch cudnn %prep %setup -n %{n}-%{realversion} -# Make sure the default c++sdt stand is c++11 +# Make sure the default c++sdt stand is c++14 grep -q 'CMAKE_CXX_STANDARD *14' CMakeLists.txt sed -i -e 's|CMAKE_CXX_STANDARD *14|CMAKE_CXX_STANDARD %{cms_cxx_standard}|' CMakeLists.txt @@ -41,5 +41,3 @@ make %{makeprocesses} VERBOSE=1 %install cd ../build make %{makeprocesses} install VERBOSE=1 - -%post From 492ec080954424dc5dae3fba178c76f8c73a2777 Mon Sep 17 00:00:00 2001 From: Davide Valsecchi Date: Mon, 25 Mar 2024 18:26:01 +0100 Subject: [PATCH 6/6] fixed env variables for new tools --- .../tools/pytorch-cluster/pytorch-cluster.xml | 8 ++++---- .../tools/pytorch-scatter/pytorch-scatter.xml | 8 ++++---- scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml b/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml index 662e1557a83..6d5befff06b 100644 --- a/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml +++ b/scram-tools.file/tools/pytorch-cluster/pytorch-cluster.xml @@ -1,9 +1,9 @@ - - - - + + + + diff --git a/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml b/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml index 28482a84773..a9d2c01204d 100644 --- a/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml +++ b/scram-tools.file/tools/pytorch-scatter/pytorch-scatter.xml @@ -1,9 +1,9 @@ - - - - + + + + diff --git a/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml b/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml index 7e0ba7c5194..f89f3b1846e 100644 --- a/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml +++ b/scram-tools.file/tools/pytorch-sparse/pytorch-sparse.xml @@ -1,9 +1,9 @@ - - - - + + + +