all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#49476] [PATCH] gnu: Add nomad-optimizer.
@ 2021-07-09  3:29 Paul A. Patience
  2021-07-09  3:43 ` Paul A. Patience
  0 siblings, 1 reply; 5+ messages in thread
From: Paul A. Patience @ 2021-07-09  3:29 UTC (permalink / raw)
  To: 49476

[-- Attachment #1: Type: text/plain, Size: 176 bytes --]

Hi,

The attached patch adds the nomad-optimizer package.
The actual program/library is called NOMAD, but
there is already a nomad package in Guix.

Best regards,
Paul

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-nomad-optimizer.patch --]
[-- Type: text/x-patch; name=0001-gnu-Add-nomad-optimizer.patch, Size: 8535 bytes --]

From dda8093881cbc810516c06453bc0d3cc380bc8b5 Mon Sep 17 00:00:00 2001
From: "Paul A. Patience" <paul@apatience.com>
Date: Thu, 8 Jul 2021 23:22:30 -0400
Subject: [PATCH] gnu: Add nomad-optimizer.

* gnu/packages/maths.scm (nomad-optimizer): New variable.
---
 gnu/packages/maths.scm | 148 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 148 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index b8e9a31be7..a54cb6f0cf 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1798,6 +1798,154 @@ large-scale nonlinear optimization.  It provides C++, C, and Fortran
 interfaces.")
     (license license:epl2.0)))
 
+(define-public nomad-optimizer
+  (package
+    (name "nomad-optimizer")
+    (version "4.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/bbopt/nomad.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0w386d8r5ldbvnv0c0g7vz95pfpvwdxis26vaalk2amsa5akl775"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("python" ,python-wrapper)
+       ("python-cython" ,python-cython)))
+    (arguments
+     `(#:imported-modules ((guix build python-build-system)
+                           ,@%cmake-build-system-modules)
+       #:modules (((guix build python-build-system)
+                   #:select (python-version site-packages))
+                  (guix build cmake-build-system)
+                  (guix build utils))
+       #:configure-flags
+       '("-DBUILD_INTERFACES=ON"
+         "-DBUILD_TESTS=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-sources-for-build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               ;; CMAKE_INSTALL_PREFIX is accidentally hardcoded.
+               (("set\\(CMAKE_INSTALL_PREFIX .* FORCE\\)") "")
+               ;; Requiring GCC version 8 or later is unwarranted.
+               (("message\\(FATAL_ERROR \"GCC version < 8")
+                "message(STATUS \"GCC version < 8"))
+
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "interfaces/PyNomad/CMakeLists.txt"
+                 ;; We don't want to build in-place, and anyway the install
+                 ;; command further below runs build_ext as a prerequisite.
+                 (("COMMAND python setup_PyNomad\\.py .* build_ext --inplace\n")
+                  "")
+                 ;; Don't install locally.
+                 (("COMMAND python (setup_PyNomad\\.py .* install) --user\n"
+                   _ args)
+                  (string-append "COMMAND ${CMAKE_COMMAND} -E env"
+                                 " CC=" ,(cc-for-target)
+                                 " CXX=" ,(cxx-for-target)
+                                 " " (which "python")
+                                 " " args
+                                 " --prefix=" out
+                                 "\n")))
+               ;; Fix erroneous assumptions about the paths of the include and
+               ;; library directories.
+               (substitute* "interfaces/PyNomad/setup_PyNomad.py"
+                 (("^( +os_include_dirs = ).*" _ prefix)
+                  (string-append prefix "[\"../../src\"]\n"))
+                 (("^(installed_lib_dir = ).*" _ prefix)
+                  (string-append prefix "\"" out "/lib\"\n"))))
+             #t))
+
+         ;; Fix the tests so they run in out-of-source builds.
+         (add-after 'fix-sources-for-build 'fix-sources-for-tests
+           (lambda _
+             (substitute*
+                 (map (lambda (d) (string-append "examples/" d "/CMakeLists.txt"))
+                      (append
+                       (map (lambda (d) (string-append "basic/library/" d))
+                            '("example1" "example2" "example3"
+                              "single_obj_parallel"))
+                       (map (lambda (d) (string-append "advanced/library/" d))
+                            '("FixedVariable" "NMonly" "PSDMads" "Restart"
+                              "c_api/example1" "c_api/example2"
+                              "exampleSuggestAndObserve"))))
+               ;; The built examples are assumed to be in the source tree
+               ;; (which isn't the case here).
+               (("(COMMAND \\$\\{CMAKE_BINARY_DIR\\}/examples/runExampleTest\\.sh )\\.(/.*)"
+                 _ command test)
+                (string-append command "${CMAKE_CURRENT_BINARY_DIR}" test)))
+             ;; (Unrelated to support for out-of-source testing.)
+             (make-file-writable
+              "examples/advanced/library/exampleSuggestAndObserve/cache0.txt")
+
+             (let* ((builddir (string-append (getcwd) "/../build"))
+                    ;; The BB_EXE and SURROGATE_EXE paths are interpreted
+                    ;; relative to the configuration file provided to NOMAD.
+                    ;; However, the configuration files are all in the source
+                    ;; tree rather than in the build tree (unlike the compiled
+                    ;; executables).
+                    (fix-exe-path (lambda* (dir #:optional
+                                                (file "param.txt")
+                                                (exe-opt "BB_EXE"))
+                                    (substitute* (string-append dir "/" file)
+                                      (((string-append "^" exe-opt " +"))
+                                       ;; The $ prevents NOMAD from prefixing
+                                       ;; the executable with the path of the
+                                       ;; parent directory of the configuration
+                                       ;; file NOMAD was provided with as
+                                       ;; argument (param.txt or some such).
+                                       (string-append exe-opt " $"
+                                                      builddir "/" dir "/"))))))
+               (for-each
+                (lambda (dir)
+                  (let ((dir (string-append "examples/" dir)))
+                    (substitute* (string-append dir "/CMakeLists.txt")
+                      ;; The install phase has not yet run.
+                      (("COMMAND \\$\\{CMAKE_INSTALL_PREFIX\\}/bin/nomad ")
+                       "COMMAND ${CMAKE_BINARY_DIR}/src/nomad "))
+                    (fix-exe-path dir)
+                    (when (equal? dir "examples/basic/batch/surrogate_sort")
+                      (fix-exe-path dir "param.txt" "SURROGATE_EXE"))))
+                (append (map (lambda (d) (string-append "basic/batch/" d))
+                             '("example1" "example2"
+                               "single_obj" "single_obj_parallel"
+                               "surrogate_sort"))
+                        '("advanced/batch/LHonly")))
+
+               (let ((dir "examples/advanced/batch/FixedVariable"))
+                 (substitute* (string-append dir "/runFixed.sh")
+                   ;; Hardcoded path to NOMAD executable.
+                   (("^\\.\\./\\.\\./\\.\\./\\.\\./bin/nomad ")
+                    (string-append builddir "/src/nomad ")))
+                 (for-each
+                  (lambda (f) (fix-exe-path dir f))
+                  '("param1.txt" "param2.txt" "param3.txt" "param10.txt"))))
+             #t))
+
+         ;; The information in the .egg-info file is not kept up to date.
+         (add-after 'install 'delete-superfluous-egg-info
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (delete-file (string-append
+                           (site-packages inputs outputs)
+                           "PyNomad-0.0.0-py"
+                           (python-version (assoc-ref inputs "python"))
+                           ".egg-info"))
+             #t)))))
+    (home-page "https://www.gerad.ca/nomad/")
+    (synopsis "Nonlinear optimization by mesh-adaptive direct search")
+    (description
+     "NOMAD is a C++ implementation of the mesh-adaptive direct search (MADS)
+algorithm, designed for difficult blackbox optimization problems. These
+problems occur when the functions defining the objective and constraints are
+the result of costly computer simulations.")
+    (license license:lgpl3)))
+
 (define-public cbc
   (package
     (name "cbc")
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [bug#49476] [PATCH] gnu: Add nomad-optimizer.
  2021-07-09  3:29 [bug#49476] [PATCH] gnu: Add nomad-optimizer Paul A. Patience
@ 2021-07-09  3:43 ` Paul A. Patience
  2021-07-19 17:33   ` bug#49476: " Ludovic Courtès
  0 siblings, 1 reply; 5+ messages in thread
From: Paul A. Patience @ 2021-07-09  3:43 UTC (permalink / raw)
  To: 49476

[-- Attachment #1: Type: text/plain, Size: 362 bytes --]

On Thursday, July 8th, 2021 at 23:29, Paul A. Patience <paul@apatience.com> wrote:

> The attached patch adds the nomad-optimizer package.

I forgot to run guix lint.
Here is the updated patch.

Unfortunately, guix lint complains about a long line,
but forcing it to wrap would cause it to become more
unreadable, in my opinion.

Best regards,
Paul

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-nomad-optimizer.patch --]
[-- Type: text/x-patch; name=0001-gnu-Add-nomad-optimizer.patch, Size: 8533 bytes --]

From 34a15bce446a401a5c6be60d1b6c8ce641709007 Mon Sep 17 00:00:00 2001
From: "Paul A. Patience" <paul@apatience.com>
Date: Thu, 8 Jul 2021 23:38:51 -0400
Subject: [PATCH] gnu: Add nomad-optimizer.

* gnu/packages/maths.scm (nomad-optimizer): New variable.
---
 gnu/packages/maths.scm | 148 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 148 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index b8e9a31be7..6f761f9498 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1798,6 +1798,154 @@ large-scale nonlinear optimization.  It provides C++, C, and Fortran
 interfaces.")
     (license license:epl2.0)))
 
+(define-public nomad-optimizer
+  (package
+    (name "nomad-optimizer")
+    (version "4.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/bbopt/nomad/")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0w386d8r5ldbvnv0c0g7vz95pfpvwdxis26vaalk2amsa5akl775"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("python" ,python-wrapper)
+       ("python-cython" ,python-cython)))
+    (arguments
+     `(#:imported-modules ((guix build python-build-system)
+                           ,@%cmake-build-system-modules)
+       #:modules (((guix build python-build-system)
+                   #:select (python-version site-packages))
+                  (guix build cmake-build-system)
+                  (guix build utils))
+       #:configure-flags
+       '("-DBUILD_INTERFACES=ON"
+         "-DBUILD_TESTS=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-sources-for-build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               ;; CMAKE_INSTALL_PREFIX is accidentally hardcoded.
+               (("set\\(CMAKE_INSTALL_PREFIX .* FORCE\\)") "")
+               ;; Requiring GCC version 8 or later is unwarranted.
+               (("message\\(FATAL_ERROR \"GCC version < 8")
+                "message(STATUS \"GCC version < 8"))
+
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "interfaces/PyNomad/CMakeLists.txt"
+                 ;; We don't want to build in-place, and anyway the install
+                 ;; command further below runs build_ext as a prerequisite.
+                 (("COMMAND python setup_PyNomad\\.py .* build_ext --inplace\n")
+                  "")
+                 ;; Don't install locally.
+                 (("COMMAND python (setup_PyNomad\\.py .* install) --user\n"
+                   _ args)
+                  (string-append "COMMAND ${CMAKE_COMMAND} -E env"
+                                 " CC=" ,(cc-for-target)
+                                 " CXX=" ,(cxx-for-target)
+                                 " " (which "python")
+                                 " " args
+                                 " --prefix=" out
+                                 "\n")))
+               ;; Fix erroneous assumptions about the paths of the include and
+               ;; library directories.
+               (substitute* "interfaces/PyNomad/setup_PyNomad.py"
+                 (("^( +os_include_dirs = ).*" _ prefix)
+                  (string-append prefix "[\"../../src\"]\n"))
+                 (("^(installed_lib_dir = ).*" _ prefix)
+                  (string-append prefix "\"" out "/lib\"\n"))))
+             #t))
+
+         ;; Fix the tests so they run in out-of-source builds.
+         (add-after 'fix-sources-for-build 'fix-sources-for-tests
+           (lambda _
+             (substitute*
+                 (map (lambda (d) (string-append "examples/" d "/CMakeLists.txt"))
+                      (append
+                       (map (lambda (d) (string-append "basic/library/" d))
+                            '("example1" "example2" "example3"
+                              "single_obj_parallel"))
+                       (map (lambda (d) (string-append "advanced/library/" d))
+                            '("FixedVariable" "NMonly" "PSDMads" "Restart"
+                              "c_api/example1" "c_api/example2"
+                              "exampleSuggestAndObserve"))))
+               ;; The built examples are assumed to be in the source tree
+               ;; (which isn't the case here).
+               (("(COMMAND \\$\\{CMAKE_BINARY_DIR\\}/examples/runExampleTest\\.sh )\\.(/.*)"
+                 _ command test)
+                (string-append command "${CMAKE_CURRENT_BINARY_DIR}" test)))
+             ;; (Unrelated to support for out-of-source testing.)
+             (make-file-writable
+              "examples/advanced/library/exampleSuggestAndObserve/cache0.txt")
+
+             (let* ((builddir (string-append (getcwd) "/../build"))
+                    ;; The BB_EXE and SURROGATE_EXE paths are interpreted
+                    ;; relative to the configuration file provided to NOMAD.
+                    ;; However, the configuration files are all in the source
+                    ;; tree rather than in the build tree (unlike the compiled
+                    ;; executables).
+                    (fix-exe-path (lambda* (dir #:optional
+                                                (file "param.txt")
+                                                (exe-opt "BB_EXE"))
+                                    (substitute* (string-append dir "/" file)
+                                      (((string-append "^" exe-opt " +"))
+                                       ;; The $ prevents NOMAD from prefixing
+                                       ;; the executable with the path of the
+                                       ;; parent directory of the configuration
+                                       ;; file NOMAD was provided with as
+                                       ;; argument (param.txt or some such).
+                                       (string-append exe-opt " $"
+                                                      builddir "/" dir "/"))))))
+               (for-each
+                (lambda (dir)
+                  (let ((dir (string-append "examples/" dir)))
+                    (substitute* (string-append dir "/CMakeLists.txt")
+                      ;; The install phase has not yet run.
+                      (("COMMAND \\$\\{CMAKE_INSTALL_PREFIX\\}/bin/nomad ")
+                       "COMMAND ${CMAKE_BINARY_DIR}/src/nomad "))
+                    (fix-exe-path dir)
+                    (when (equal? dir "examples/basic/batch/surrogate_sort")
+                      (fix-exe-path dir "param.txt" "SURROGATE_EXE"))))
+                (append (map (lambda (d) (string-append "basic/batch/" d))
+                             '("example1" "example2"
+                               "single_obj" "single_obj_parallel"
+                               "surrogate_sort"))
+                        '("advanced/batch/LHonly")))
+
+               (let ((dir "examples/advanced/batch/FixedVariable"))
+                 (substitute* (string-append dir "/runFixed.sh")
+                   ;; Hardcoded path to NOMAD executable.
+                   (("^\\.\\./\\.\\./\\.\\./\\.\\./bin/nomad ")
+                    (string-append builddir "/src/nomad ")))
+                 (for-each
+                  (lambda (f) (fix-exe-path dir f))
+                  '("param1.txt" "param2.txt" "param3.txt" "param10.txt"))))
+             #t))
+
+         ;; The information in the .egg-info file is not kept up to date.
+         (add-after 'install 'delete-superfluous-egg-info
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (delete-file (string-append
+                           (site-packages inputs outputs)
+                           "PyNomad-0.0.0-py"
+                           (python-version (assoc-ref inputs "python"))
+                           ".egg-info"))
+             #t)))))
+    (home-page "https://www.gerad.ca/nomad/")
+    (synopsis "Nonlinear optimization by mesh-adaptive direct search")
+    (description
+     "NOMAD is a C++ implementation of the mesh-adaptive direct search (MADS)
+algorithm, designed for difficult blackbox optimization problems.  These
+problems occur when the functions defining the objective and constraints are
+the result of costly computer simulations.")
+    (license license:lgpl3)))
+
 (define-public cbc
   (package
     (name "cbc")
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* bug#49476: [PATCH] gnu: Add nomad-optimizer.
  2021-07-09  3:43 ` Paul A. Patience
@ 2021-07-19 17:33   ` Ludovic Courtès
       [not found]     ` <XnOUQYHTkkaJL37iP0Ir0UqXxzMbxyFZ8P9eRXvKWEEHUCN0lyxN2CU-rbpXnwrdbo9mmg-vwXyCTZznnnOxTbh6cosXd-gqV_ntt5D-1e4=@apatience.com>
  0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2021-07-19 17:33 UTC (permalink / raw)
  To: Paul A. Patience; +Cc: 49476-done

Hi Paul,

"Paul A. Patience" <paul@apatience.com> skribis:

> From 34a15bce446a401a5c6be60d1b6c8ce641709007 Mon Sep 17 00:00:00 2001
> From: "Paul A. Patience" <paul@apatience.com>
> Date: Thu, 8 Jul 2021 23:38:51 -0400
> Subject: [PATCH] gnu: Add nomad-optimizer.
>
> * gnu/packages/maths.scm (nomad-optimizer): New variable.

Applied with one change:

> +    (license license:lgpl3)))

This is ‘lgpl3+’ since source file headers carry the “or any later
version” wording.

Thanks!

Ludo’.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#49476] [PATCH] gnu: Add nomad-optimizer.
       [not found]     ` <XnOUQYHTkkaJL37iP0Ir0UqXxzMbxyFZ8P9eRXvKWEEHUCN0lyxN2CU-rbpXnwrdbo9mmg-vwXyCTZznnnOxTbh6cosXd-gqV_ntt5D-1e4=@apatience.com>
@ 2021-07-23  9:03       ` Ludovic Courtès
  2021-07-23 22:08         ` Paul A. Patience
  0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2021-07-23  9:03 UTC (permalink / raw)
  To: Paul A. Patience; +Cc: 49476

Hi,

"Paul A. Patience" <paul@apatience.com> skribis:

> On Monday, July 19th, 2021 at 13:33, Ludovic Courtès <ludo@gnu.org> wrote:
>
>> Applied with one change:
>>
>> > -   (license license:lgpl3)))
>>
>> This is ‘lgpl3+’ since source file headers carry the “or any later
>> version” wording.
>
> Nice catch. I've reported this to the project authors [1].
>
> Best regards,
> Paul
>
> [1]: https://github.com/bbopt/nomad/issues/52

Note that the LICENSE file is the standard LGPLv3 text; it should not be
modified.  The text reads:

  If the Library as you received it does not specify a version number of
  the GNU Lesser General Public License, you may choose any version of
  the GNU Lesser General Public License ever published by the Free
  Software Foundation.

In this case, headers explicitly specify “version 3 or any later
version”.  So I’d say the authors of nomad did “everything right”.

Thanks,
Ludo’.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#49476] [PATCH] gnu: Add nomad-optimizer.
  2021-07-23  9:03       ` [bug#49476] " Ludovic Courtès
@ 2021-07-23 22:08         ` Paul A. Patience
  0 siblings, 0 replies; 5+ messages in thread
From: Paul A. Patience @ 2021-07-23 22:08 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 49476

On Friday, July 23rd, 2021 at 05:03, Ludovic Courtès <ludo@gnu.org> wrote:
> Note that the LICENSE file is the standard LGPLv3 text; it should not be
> modified.  The text reads:
>
>   If the Library as you received it does not specify a version number of
>   the GNU Lesser General Public License, you may choose any version of
>   the GNU Lesser General Public License ever published by the Free
>   Software Foundation.
>
> In this case, headers explicitly specify “version 3 or any later
> version”.  So I’d say the authors of nomad did “everything right”.

My bad! I didn't know about this.
Thank you for the clarification.

Best regards,
Paul





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-07-23 22:10 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-09  3:29 [bug#49476] [PATCH] gnu: Add nomad-optimizer Paul A. Patience
2021-07-09  3:43 ` Paul A. Patience
2021-07-19 17:33   ` bug#49476: " Ludovic Courtès
     [not found]     ` <XnOUQYHTkkaJL37iP0Ir0UqXxzMbxyFZ8P9eRXvKWEEHUCN0lyxN2CU-rbpXnwrdbo9mmg-vwXyCTZznnnOxTbh6cosXd-gqV_ntt5D-1e4=@apatience.com>
2021-07-23  9:03       ` [bug#49476] " Ludovic Courtès
2021-07-23 22:08         ` Paul A. Patience

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.