Subject: Re: bug#25834: [PATCH] Update scipy stack.

From: Marius Bakke <[email-masked]>
Date: Mon, 06 Mar 2017 15:47:52 +0100

Hi Thomas! Thanks again for taking this on, and for your patience!

The patches LGTM overall, but I have a couple of comments/questions.

Thomas Danckaert <[email-masked]> writes:

> From b73e26ce12dc2fd0b38937bc615f5071556dfd5a Mon Sep 17 00:00:00 2001
> From: Thomas Danckaert <[email-masked]>
> Date: Tue, 21 Feb 2017 20:28:27 +0100
> Subject: [PATCH 3/8] gnu: python-numpy: Update to 1.12.0.
>
> * gnu/packages/python.scm (python-numpy): Update to 1.12.0.
>   [source]: Use github instead of sourceforge.
>   [native-inputs]: Add python-cython.
>
>   To simplify the handling of dependency cycles (numpy documentation depends
>   on matplotlib, which depends on numpy), we split out the documentation into
>   a separate package:
>   (python-numpy-bootstrap, python2-numpy-bootstrap): Remove variables.
>   (python-numpy-documentation, python2-numpy-documentation): New variables.

[...]

> ---
>  gnu/packages/python.scm | 148 +++++++++++++++++++++++++++---------------------
>  1 file changed, 82 insertions(+), 66 deletions(-)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index c449ccb6e..d296ee1d9 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -3402,24 +3402,26 @@ between language specification and implementation aspects.")
>  
>  ;; This version of numpy is missing the documentation and is only used to
>  ;; build matplotlib which is required to build numpy's documentation.

Note to self: Update this comment.

> -(define python-numpy-bootstrap
> +(define-public python-numpy
>    (package
> -    (name "python-numpy-bootstrap")
> -    (version "1.10.4")
> +    (name "python-numpy")
> +    (version "1.12.0")
>      (source
>       (origin
>         (method url-fetch)
> -       (uri (string-append "mirror://sourceforge/numpy/NumPy/" version
> -                           "/numpy-" version ".tar.gz"))
> +       (uri (string-append
> +             "https://github.com/numpy/numpy/archive/v" version ".tar.gz"))
> +       (file-name (string-append name "-" version ".tar.gz"))
>         (sha256
>          (base32
> -         "1bjjhvncraka5s6i4lg644jrxij6bvycxy7an20gcz3a0m11iygp"))))
> +         "025d4j4aakcp8w5i5diqh812cbbjgac7jszx1j56ivrbi1i8vv7d"))))
>      (build-system python-build-system)
>      (inputs
>       `(("openblas" ,openblas)
>         ("lapack" ,lapack)))
>      (native-inputs
> -     `(("python-nose" ,python-nose)
> +     `(("python-cython" ,python-cython)
> +       ("python-nose" ,python-nose)
>         ("gfortran" ,gfortran)))
>      (arguments
>       `(#:phases
> @@ -3468,8 +3470,8 @@ and Fortran code, useful linear algebra, Fourier transform, and random number
>  capabilities.")
>      (license license:bsd-3)))
>  
> -(define python2-numpy-bootstrap
> -  (package-with-python2 python-numpy-bootstrap))
> +(define-public python2-numpy
> +  (package-with-python2 python-numpy))
>  
>  (define-public python-munch
>    (package
> @@ -3526,69 +3528,83 @@ Models, is a program for performing both single-SNP and SNP-set genome-wide
>  association studies (GWAS) on extremely large data sets.")
>      (license license:asl2.0)))
>  
> -(define-public python-numpy
> -  (package (inherit python-numpy-bootstrap)
> -    (name "python-numpy")
> -    (outputs '("out" "doc"))
> -    (inputs
> -     `(("which" ,which)
> -       ,@(package-inputs python-numpy-bootstrap)))
> -    (propagated-inputs
> -     `(("python-matplotlib" ,python-matplotlib)
> -       ("python-pyparsing" ,python-pyparsing)
> -       ,@(package-propagated-inputs python-numpy-bootstrap)))
> +(define-public python-numpy-documentation
> +  (package
> +    (name "python-numpy-documentation")
> +    (version (package-version python-numpy))
> +    (source (package-source python-numpy))
> +    (build-system python-build-system)
>      (native-inputs
> -     `(("pkg-config" ,pkg-config)
> +     `(("python-matplotlib" ,python-matplotlib)
> +       ("python-numpy" ,python-numpy)
> +       ("pkg-config" ,pkg-config)
>         ("python-sphinx" ,python-sphinx)
>         ("python-numpydoc" ,python-numpydoc)
>         ("texlive" ,texlive)
>         ("texinfo" ,texinfo)
>         ("perl" ,perl)
> -       ,@(package-native-inputs python-numpy-bootstrap)))
> -    (arguments
> -     `(,@(substitute-keyword-arguments
> -             (package-arguments python-numpy-bootstrap)
> -           ((#:phases phases)
> -            `(alist-cons-after
> -              'install 'install-doc
> -              (lambda* (#:key inputs outputs #:allow-other-keys)
> -                ;; Make installed package available for building the
> -                ;; documentation
> -                (add-installed-pythonpath inputs outputs)
> -                (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
> -                       (doc (string-append
> -                             data "/doc/" ,name "-"
> -                             ,(package-version python-numpy-bootstrap)))
> -                       (info (string-append data "/info"))
> -                       (html (string-append doc "/html"))
> -                       (pyver ,(string-append "PYVER=")))
> -                  (with-directory-excursion "doc"
> -                    (mkdir-p html)
> -                    (system* "make" "html" pyver)
> -                    (system* "make" "latex" "PAPER=a4" pyver)
> -                    (system* "make" "-C" "build/latex"
> -                             "all-pdf" "PAPER=a4" pyver)
> -                    ;; FIXME: Generation of the info file fails.
> -                    ;; (system* "make" "info" pyver)
> -                    ;; (mkdir-p info)
> -                    ;; (copy-file "build/texinfo/numpy.info"
> -                    ;;            (string-append info "/numpy.info"))
> -                    (for-each (lambda (file)
> -                                (copy-file (string-append "build/latex" file)
> -                                           (string-append doc file)))
> -                              '("/numpy-ref.pdf" "/numpy-user.pdf"))
> -                    (with-directory-excursion "build/html"
> -                      (for-each (lambda (file)
> -                                  (let* ((dir (dirname file))
> -                                         (tgt-dir (string-append html "/" dir)))
> -                                    (unless (equal? "." dir)
> -                                      (mkdir-p tgt-dir))
> -                                    (install-file file html)))
> -                                (find-files "." ".*"))))))
> -              ,phases)))))))
> +       ("scipy-sphinx-theme"
> +        ,(origin ; The build script expects scipy-sphinx-theme as a git submodule
> +           (method git-fetch)
> +           (uri (git-reference
> +                 (url "https://github.com/scipy/scipy-sphinx-theme.git")
> +                 (commit "c466764e22")))
> +           (sha256
> +            (base32
> +                "0q2y87clwlsgc7wvlsn9pzyssybcq10plwhq2w1ydykfsyyqbmkl"))))

Do you know if packaging this would work? Also, please use full commit
hashes. I will add this and fix indentation before pushing.

> +       ,@(package-native-inputs python-numpy)))
> +    (arguments
> +     `(#:tests? #f ; we're only generating the documentation
> +       #:phases
> +       (modify-phases %standard-phases
> +         (delete 'build)
> +         (replace 'install
> +           (lambda* (#:key inputs outputs #:allow-other-keys)
> +             (let* ((data (string-append (assoc-ref outputs "out") "/share"))
> +                    (doc (string-append
> +                          data "/doc/" ,name "-"
> +                          ,(package-version python-numpy)))
> +                    (info-reader (string-append data "/info"))
> +                    (html (string-append doc "/html"))
> +                    (scipy-sphinx-theme "scipy-sphinx-theme")
> +                    (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme))
> +                    (pyver ,(string-append "PYVER=")))
> +               (with-directory-excursion "doc"
> +                 (copy-recursively sphinx-theme-checkout scipy-sphinx-theme)
> +                 (mkdir-p html)
> +                 (system* "make" "html" pyver)
> +                 (system* "make" "latex" "PAPER=a4" pyver)
> +                 (system* "make" "-C" "build/latex"
> +                          "all-pdf" "PAPER=a4" pyver)
> +                 ;; FIXME: Generation of the info file fails.
> +                 ;; (system* "make" "info" pyver)
> +                 ;; (mkdir-p info)
> +                 ;; (copy-file "build/texinfo/numpy.info"
> +                 ;;            (string-append info "/numpy.info"))
> +                 (for-each (lambda (file)
> +                             (copy-file (string-append "build/latex" file)
> +                                        (string-append doc file)))
> +                           '("/numpy-ref.pdf" "/numpy-user.pdf"))
> +                 (with-directory-excursion "build/html"
> +                   (for-each (lambda (file)
> +                               (let* ((dir (dirname file))
> +                                      (tgt-dir (string-append html "/" dir)))
> +                                 (unless (equal? "." dir)
> +                                   (mkdir-p tgt-dir))
> +                                 (install-file file html)))
> +                             (find-files "." ".*")))))
> +             #t)))))
> +    (home-page (package-home-page python-numpy))
> +    (synopsis "Documentation for the python-numpy package")
> +    (description (package-description python-numpy))
> +    (license (package-license python-numpy))))
>  
> -(define-public python2-numpy
> -  (package-with-python2 python-numpy))
> +(define-public python2-numpy-documentation
> +  (let ((numpy-documentation (package-with-python2 python-numpy-documentation)))
> +    (package
> +      (inherit numpy-documentation)
> +      (native-inputs `(("python2-functools32" ,python2-functools32)
> +                       ,@(package-native-inputs numpy-documentation))))))

Do we need a python2 variant of the documentation? Does it differ from
the python3 variant?

Actually these were my only questions (but it applies to matplotlib
documentation as well). The patches LGTM, great work!