scipy / scipy

SciPy library main repository
https://scipy.org
BSD 3-Clause "New" or "Revised" License
12.93k stars 5.15k forks source link

BUG: Offline documentation build fails with Sphinx 4.5 #16028

Closed Apteryks closed 2 years ago

Apteryks commented 2 years ago

Describe your issue.

After upgrading Sphinx from version 4.2.0 to 4.5.0, the SciPy documentation can no longer be built, failing with error:

Sphinx parallel build error:
AttributeError: can't set attribute
make: *** [Makefile:122: html-build] Error 2
error: in phase 'install-doc': uncaught exception:
%exception #<&invoke-error program: "make" arguments: ("html" "SPHINXOPTS=-j24") exit-status: 2 term-signal: #f stop-signal: #f>
phase `install-doc' failed after 55.8 seconds
command "make" "html" "SPHINXOPTS=-j24" failed with status 2

Reproducing Code Example

Bumping the sphinx dependency to latest should trigger the problem.

Error message

Full build log attached, GZip-compressed. *EDIT: removed for security reasons*

SciPy/NumPy/Python version information

1.8.0/1.21.6/3.9.9

melissawm commented 2 years ago

Hello @Apteryks - thanks for the report. Can you clarify if you used the make html-scipyorg command, or make html? (Just for reference: here's our documentation building instructions)

Apteryks commented 2 years ago

Hello! I used make html; for the record, this is the GNU Guix package definition I've tested with:

(define-public python-scipy
  (package
    (name "python-scipy")
    (version "1.8.0")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "scipy" version))
       (sha256
        (base32 "1gghkwn93niyasm36333xbqrnn3yiadq9d97wnc9mg14nzbg5m1i"))))
    (outputs '("out" "doc"))
    (build-system python-build-system)
    (arguments
     (list
      #:modules '((guix build utils)
                  (guix build python-build-system)
                  (ice-9 format))
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'disable-pythran
            (lambda _
              (setenv "SCIPY_USE_PYTHRAN" "0")))
          (add-before 'build 'change-home-dir
            (lambda _
              ;; Change from /homeless-shelter to /tmp for write permission.
              (setenv "HOME" "/tmp")))
          (add-before 'build 'configure-openblas
            (lambda _
              (call-with-output-file "site.cfg"
                (lambda (port)
                  (format port
                          "\
[blas]
libraries = openblas
library_dirs = ~a/lib
include_dirs = ~:*~a/include

[atlas]
library_dirs = ~:*~a/lib
atlas_libs = openblas~%"  #$(this-package-input "openblas"))))))
          (add-before 'build 'parallelize-build
            (lambda _
              (setenv "NPY_NUM_BUILD_JOBS"
                      (number->string (parallel-job-count)))))
          (add-before 'check 'install-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
                     (doc (string-append data "/doc/" #$name "-" #$version))
                     (html (string-append doc "/html")))
                (with-directory-excursion "doc"
                  ;; Build doc.
                  (invoke "make" "html"
                          ;; Building the documentation takes a very long time.
                          ;; Parallelize it.
                          (string-append "SPHINXOPTS=-j"
                                         (number->string (parallel-job-count))))
                  ;; Install doc.
                  (mkdir-p html)
                  (copy-recursively "build/html" html)))))
          (replace 'check
            (lambda* (#:key tests? #:allow-other-keys)
              (when tests?
                (invoke "./runtests.py" "-vv" "--no-build" "--mode=fast"
                        "-j" (number->string (parallel-job-count)))))))))
    (propagated-inputs (list python-numpy python-matplotlib python-pyparsing))
    (inputs (list openblas pybind11))
    (native-inputs
     (list gfortran
           perl
           python-cython
           python-numpydoc
           python-pydata-sphinx-theme
           python-pytest
           python-pytest-xdist
           python-sphinx-4.2      ;https://github.com/scipy/scipy/issues/16028
           python-sphinx-panels
           python-threadpoolctl
           which))
    (home-page "https://scipy.org/")
    (synopsis "The Scipy library provides efficient numerical routines")
    (description "The SciPy library is one of the core packages that make up
the SciPy stack.  It provides many user-friendly and efficient numerical
routines such as routines for numerical integration and optimization.")
    (properties `((python2-variant . ,(delay python2-scipy))))
    (license license:bsd-3)))

The direct dependencies used are:

$ ./pre-inst-env guix show python-scipy | recsel -p dependencies
dependencies: gfortran@10.3.0 openblas@0.3.18 perl@5.34.0 pybind11@2.8.1 python-cython@0.29.24
+ python-matplotlib@3.5.1 python-numpy@1.21.6 python-numpydoc@1.2.1 python-pydata-sphinx-theme@0.6.3
+ python-pyparsing@3.0.6 python-pytest-xdist@2.1.0 python-pytest@6.2.5 python-sphinx-panels@0.6.0
+ python-sphinx@4.2.0 python-threadpoolctl@2.1.0 which@2.21
tupui commented 2 years ago

Hi @Apteryks, FYI I deleted the log file for security reasons. We should never post zip files on issues.

tupui commented 2 years ago

Our CI is running with Sphinx 4.5. See here for instance https://app.circleci.com/pipelines/github/scipy/scipy/12713/workflows/3d1c5fbf-e21d-4907-801e-84c8421789e0/jobs/46812

Apteryks commented 2 years ago

@tupui thanks for pointing that to me. I'll compare the versions used; perhaps something is wrong with my packaging of Sphinx 4.5.0. Also, for my general culture, what are the security concerns regarding gzipped files?

tupui commented 2 years ago

Great, please let us know.

Also, for my general culture, what are the security concerns regarding gzipped files?

Non plain text files can hide anything like a fork bomb or other malicious scripts/executable. This is why we always share plain log or an extract.

On GitHub you can use a detail dropdown to not pollute the output.

<details>
<summary>Details</summary>
...
</details>
Apteryks commented 2 years ago

I'm able to build the docs outside of the networkless container, so I suppose it fails because of failing to fetch the intersphinx objects from the Internet in the build container:

loading intersphinx inventory from https://docs.python.org/dev/objects.inv...
WARNING: failed to reach any of the inventories with the following issues:
intersphinx inventory 'https://docs.python.org/dev/objects.inv' not fetchable due to <class 'requests.exceptions.ConnectionError'>: HTTPSConnectionPool(host='docs.python.org', port=443): Max retries exceeded with url: /dev/objects.inv (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fffd6104160>: Failed to establish a new connection: [Errno -2] Name or service not known'))
loading intersphinx inventory from https://numpy.org/devdocs/objects.inv...
WARNING: failed to reach any of the inventories with the following issues:
intersphinx inventory 'https://numpy.org/devdocs/objects.inv' not fetchable due to <class 'requests.exceptions.ConnectionError'>: HTTPSConnectionPool(host='numpy.org', port=443): Max retries exceeded with url: /devdocs/objects.inv (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fffd61048e0>: Failed to establish a new connection: [Errno -2] Name or service not known'))
loading intersphinx inventory from https://numpy.org/neps/objects.inv...
WARNING: failed to reach any of the inventories with the following issues:
intersphinx inventory 'https://numpy.org/neps/objects.inv' not fetchable due to <class 'requests.exceptions.ConnectionError'>: HTTPSConnectionPool(host='numpy.org', port=443): Max retries exceeded with url: /neps/objects.inv (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fffd61044c0>: Failed to establish a new connection: [Errno -2] Name or service not known'))
loading intersphinx inventory from https://matplotlib.org/objects.inv...
WARNING: failed to reach any of the inventories with the following issues:
intersphinx inventory 'https://matplotlib.org/objects.inv' not fetchable due to <class 'requests.exceptions.ConnectionError'>: HTTPSConnectionPool(host='matplotlib.org', port=443): Max retries exceeded with url: /objects.inv (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fffd6017bb0>: Failed to establish a new connection: [Errno -2] Name or service not known'))
loading intersphinx inventory from https://asv.readthedocs.io/en/stable/objects.inv...
WARNING: failed to reach any of the inventories with the following issues:
intersphinx inventory 'https://asv.readthedocs.io/en/stable/objects.inv' not fetchable due to <class 'requests.exceptions.ConnectionError'>: HTTPSConnectionPool(host='asv.readthedocs.io', port=443): Max retries exceeded with url: /en/stable/objects.inv (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fffd60172b0>: Failed to establish a new connection: [Errno -2] Name or service not known'))

This Sphinx/intersphinx 4.5 behavior is new compared to 4.2, which allows the build to proceed anyway. I could patch the conf.py file so that each intersphinx reference object is found locally, but I'm not sure I have all these built docs available. I'll rename the issue accordingly. Sadly, commenting out intersphinx from the extensions doesn't alleviate the problem.

tupui commented 2 years ago

Well IMO this is not something we want to support. We don't want to "patch" Sphinx.

Apteryks commented 2 years ago

Just to be clear, I didn't mean patching Sphinx itself, but the doc/source/conf.py Sphinx configuration file used by SciPy. It is possible to specify intersphinx reference objects via file URI instead of HTTP, which would work offline. Sadly it seems intersphinx is making the building doc offline use case difficult, having no way to specify a search patch which would allow packagers to add other Sphinx HTML docs on a SPHINXPATH for example and automatically discovered without the need to alter the local conf.py file.

tupui commented 2 years ago

I understood, but if this is Sphinx behaviour now, I don't think we should add hacks to go around. If we still want to have the doc building offline then maybe no inter-sphinx at all is fine. So we would just put this under a if. Or we raise this to Sphinx maintainers.

Apteryks commented 2 years ago

The build failure is triggered even when removing 'sphinx.ext.intersphinx' from the list of extensions; it appears something else in the tooling (another sphinx extension?) expects the information to be there.

tupui commented 2 years ago

mmm ok thanks for checking.

Apteryks commented 2 years ago

Yeah, it always end up with something like:

$ make html SPHINXOPTS=-j24                      
# @echo sdist build with unlabeled sources
mkdir -p build/html build/doctrees
LANG=C python3 -msphinx -b html -d build/doctrees  -j24 source build/html 
Running Sphinx v4.5.0
SciPy (VERSION 1.8.0)
[autosummary] generating autosummary for: building/faq.rst, building/index.rst, building/linux.rst, building/macosx.rst, building/windows.rst, dev/api-dev/api-dev-toc.rst, dev/api-dev/nan_policy.rst, dev/api-dev/special_ufuncs.rst, dev/conduct/code_of_conduct.rst, dev/conduct/report_handling_manual.rst, ..., tutorial/stats/discrete_yulesimon.rst, tutorial/stats/discrete_zipf.rst, tutorial/stats/discrete_zipfian.rst, tutorial/stats/sampling.rst, tutorial/stats/sampling_dau.rst, tutorial/stats/sampling_dgt.rst, tutorial/stats/sampling_hinv.rst, tutorial/stats/sampling_pinv.rst, tutorial/stats/sampling_srou.rst, tutorial/stats/sampling_tdr.rst
[autosummary] generating autosummary for: /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.ClusterNode.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.DisjointSet.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.average.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.centroid.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.complete.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.cophenet.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.correspond.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.cut_tree.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.dendrogram.rst, ..., /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.wrapcauchy.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.yeojohnson.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.yeojohnson_llf.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.yeojohnson_normmax.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.yeojohnson_normplot.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.yulesimon.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.zipf.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.zipfian.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.zmap.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.zscore.rst
[autosummary] generating autosummary for: /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.__getitem__.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.__len__.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.__mul__.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.count.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.from_cython.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.function.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.index.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.signature.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.LowLevelCallable.user_data.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.cluster.hierarchy.ClusterNode.get_count.rst, ..., /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.NumericalInversePolynomial.set_random_state.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.NumericalInversePolynomial.u_error.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.SimpleRatioUniforms.rvs.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.SimpleRatioUniforms.set_random_state.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.TransformedDensityRejection.hat_area.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.TransformedDensityRejection.ppf_hat.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.TransformedDensityRejection.rvs.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.TransformedDensityRejection.set_random_state.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.TransformedDensityRejection.squeeze_area.rst, /tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/reference/generated/scipy.stats.sampling.TransformedDensityRejection.squeeze_hat_ratio.rst
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 319 source files that are out of date
updating environment: [new config] 4200 added, 0 changed, 0 removed
reading sources... [  0%] building/faq .. dev/hacking
reading sources... [  1%] dev/index .. reference/generated/scipy.cluster.hierarchy.centroid
reading sources... [  2%] reference/generated/scipy.cluster.hierarchy.complete .. reference/generated/scipy.fft.dct
reading sources... [  3%] reference/generated/scipy.fft.dctn .. reference/generated/scipy.fftpack.convolve.convolve
reading sources... [  4%] reference/generated/scipy.fftpack.convolve.convolve_z .. reference/generated/scipy.integrate.DOP853.A
reading sources... [  5%] reference/generated/scipy.integrate.DOP853.A_EXTRA .. reference/generated/scipy.integrate.RK23.n_stages
reading sources... [  6%] reference/generated/scipy.integrate.RK23.order .. reference/generated/scipy.integrate.ode.set_initial_value
reading sources... [  7%] reference/generated/scipy.integrate.ode.set_integrator .. reference/generated/scipy.interpolate.BPoly.extrapolate
reading sources... [  8%] reference/generated/scipy.interpolate.BPoly.from_derivatives .. reference/generated/scipy.interpolate.CubicHermiteSpline.roots
reading sources... [  9%] reference/generated/scipy.interpolate.CubicHermiteSpline.solve .. reference/generated/scipy.interpolate.LSQBivariateSpline.integral
reading sources... [ 10%] reference/generated/scipy.interpolate.LSQSphereBivariateSpline .. reference/generated/scipy.interpolate.PPoly.integrate
reading sources... [ 11%] reference/generated/scipy.interpolate.PPoly.roots .. reference/generated/scipy.interpolate.SmoothBivariateSpline.ev
reading sources... [ 12%] reference/generated/scipy.interpolate.SmoothBivariateSpline.get_coeffs .. reference/generated/scipy.interpolate.pchip_interpolate
reading sources... [ 13%] reference/generated/scipy.interpolate.spalde .. reference/generated/scipy.io.netcdf_file
reading sources... [ 14%] reference/generated/scipy.io.netcdf_file.close .. reference/generated/scipy.linalg.blas.chpr2
reading sources... [ 15%] reference/generated/scipy.linalg.blas.crotg .. reference/generated/scipy.linalg.blas.dsyrk
reading sources... [ 16%] reference/generated/scipy.linalg.blas.dtbmv .. reference/generated/scipy.linalg.blas.stbmv
reading sources... [ 17%] reference/generated/scipy.linalg.blas.stpsv .. reference/generated/scipy.linalg.block_diag
reading sources... [ 18%] reference/generated/scipy.linalg.cdf2rdf .. reference/generated/scipy.linalg.interpolative.estimate_spectral_norm
reading sources... [ 19%] reference/generated/scipy.linalg.interpolative.estimate_spectral_norm_diff .. reference/generated/scipy.linalg.lapack.cgeqrf_lwork
reading sources... [ 20%] reference/generated/scipy.linalg.lapack.cgeqrfp .. reference/generated/scipy.linalg.lapack.chegvx
reading sources... [ 21%] reference/generated/scipy.linalg.lapack.chegvx_lwork .. reference/generated/scipy.linalg.lapack.crot
reading sources... [ 22%] reference/generated/scipy.linalg.lapack.csycon .. reference/generated/scipy.linalg.lapack.dgebal
reading sources... [ 23%] reference/generated/scipy.linalg.lapack.dgecon .. reference/generated/scipy.linalg.lapack.dgglse
reading sources... [ 24%] reference/generated/scipy.linalg.lapack.dgglse_lwork .. reference/generated/scipy.linalg.lapack.dpstrf
reading sources... [ 25%] reference/generated/scipy.linalg.lapack.dpteqr .. reference/generated/scipy.linalg.lapack.dsytrf_lwork
reading sources... [ 26%] reference/generated/scipy.linalg.lapack.dtbtrs .. reference/generated/scipy.linalg.lapack.sgelsy
reading sources... [ 27%] reference/generated/scipy.linalg.lapack.sgelsy_lwork .. reference/generated/scipy.linalg.lapack.sorghr_lwork
reading sources... [ 28%] reference/generated/scipy.linalg.lapack.sorgqr .. reference/generated/scipy.linalg.lapack.ssyconv
reading sources... [ 29%] reference/generated/scipy.linalg.lapack.ssyequb .. reference/generated/scipy.linalg.lapack.stzrzf
reading sources... [ 30%] reference/generated/scipy.linalg.lapack.stzrzf_lwork .. reference/generated/scipy.linalg.lapack.zgetri_lwork
reading sources... [ 31%] reference/generated/scipy.linalg.lapack.zgetrs .. reference/generated/scipy.linalg.lapack.zlaswp
reading sources... [ 32%] reference/generated/scipy.linalg.lapack.zlauum .. reference/generated/scipy.linalg.lapack.ztgexc
reading sources... [ 33%] reference/generated/scipy.linalg.lapack.ztgsen .. reference/generated/scipy.linalg.polar
reading sources... [ 33%] reference/generated/scipy.linalg.qr .. reference/generated/scipy.ndimage.binary_dilation
reading sources... [ 34%] reference/generated/scipy.ndimage.binary_erosion .. reference/generated/scipy.ndimage.maximum
reading sources... [ 35%] reference/generated/scipy.ndimage.maximum_filter .. reference/generated/scipy.odr.Output
reading sources... [ 36%] reference/generated/scipy.odr.Output.pprint .. reference/generated/scipy.optimize.OptimizeResult.copy
reading sources... [ 37%] reference/generated/scipy.optimize.OptimizeResult.fromkeys .. reference/generated/scipy.optimize.fmin_powell
reading sources... [ 38%] reference/generated/scipy.optimize.fmin_slsqp .. reference/generated/scipy.signal.StateSpace.poles
reading sources... [ 39%] reference/generated/scipy.signal.StateSpace.to_ss .. reference/generated/scipy.signal.cheb1ord
reading sources... [ 40%] reference/generated/scipy.signal.cheb2ap .. reference/generated/scipy.signal.dlti.zeros
reading sources... [ 41%] reference/generated/scipy.signal.dstep .. reference/generated/scipy.signal.lombscargle
reading sources... [ 42%] reference/generated/scipy.signal.lp2bp .. reference/generated/scipy.signal.resample_poly
reading sources... [ 43%] reference/generated/scipy.signal.residue .. reference/generated/scipy.signal.windows.cosine
reading sources... [ 44%] reference/generated/scipy.signal.windows.dpss .. reference/generated/scipy.sparse.bsr_array.check_format
reading sources... [ 45%] reference/generated/scipy.sparse.bsr_array.conj .. reference/generated/scipy.sparse.bsr_array.setdiag
reading sources... [ 46%] reference/generated/scipy.sparse.bsr_array.shape .. reference/generated/scipy.sparse.bsr_matrix.conjugate
reading sources... [ 47%] reference/generated/scipy.sparse.bsr_matrix.copy .. reference/generated/scipy.sparse.bsr_matrix.sign
reading sources... [ 48%] reference/generated/scipy.sparse.bsr_matrix.sin .. reference/generated/scipy.sparse.coo_array.dot
reading sources... [ 49%] reference/generated/scipy.sparse.coo_array.dtype .. reference/generated/scipy.sparse.coo_array.tocoo
reading sources... [ 50%] reference/generated/scipy.sparse.coo_array.tocsc .. reference/generated/scipy.sparse.coo_matrix.getrow
reading sources... [ 51%] reference/generated/scipy.sparse.coo_matrix.log1p .. reference/generated/scipy.sparse.csc_array.__len__
reading sources... [ 52%] reference/generated/scipy.sparse.csc_array.__mul__ .. reference/generated/scipy.sparse.csc_array.ndim
reading sources... [ 53%] reference/generated/scipy.sparse.csc_array.nnz .. reference/generated/scipy.sparse.csc_matrix.arctanh
reading sources... [ 54%] reference/generated/scipy.sparse.csc_matrix.argmax .. reference/generated/scipy.sparse.csc_matrix.rad2deg
reading sources... [ 55%] reference/generated/scipy.sparse.csc_matrix.reshape .. reference/generated/scipy.sparse.csgraph.depth_first_tree
reading sources... [ 56%] reference/generated/scipy.sparse.csgraph.dijkstra .. reference/generated/scipy.sparse.csr_array.get_shape
reading sources... [ 57%] reference/generated/scipy.sparse.csr_array.getcol .. reference/generated/scipy.sparse.csr_array.tocsr
reading sources... [ 58%] reference/generated/scipy.sparse.csr_array.todense .. reference/generated/scipy.sparse.csr_matrix.getrow
reading sources... [ 59%] reference/generated/scipy.sparse.csr_matrix.has_canonical_format .. reference/generated/scipy.sparse.csr_matrix.trace
reading sources... [ 60%] reference/generated/scipy.sparse.csr_matrix.transpose .. reference/generated/scipy.sparse.dia_array.rad2deg
reading sources... [ 61%] reference/generated/scipy.sparse.dia_array.reshape .. reference/generated/scipy.sparse.dia_matrix.deg2rad
reading sources... [ 62%] reference/generated/scipy.sparse.dia_matrix.diagonal .. reference/generated/scipy.sparse.dia_matrix.tocsr
reading sources... [ 63%] reference/generated/scipy.sparse.dia_matrix.todense .. reference/generated/scipy.sparse.dok_array.nnz
reading sources... [ 64%] reference/generated/scipy.sparse.dok_array.nonzero .. reference/generated/scipy.sparse.dok_matrix.fromkeys
reading sources... [ 65%] reference/generated/scipy.sparse.dok_matrix.get .. reference/generated/scipy.sparse.eye
reading sources... [ 66%] reference/generated/scipy.sparse.find .. reference/generated/scipy.sparse.lil_array.ndim
reading sources... [ 66%] reference/generated/scipy.sparse.lil_array.nnz .. reference/generated/scipy.sparse.lil_matrix.getrow
reading sources... [ 67%] reference/generated/scipy.sparse.lil_matrix.getrowview .. reference/generated/scipy.sparse.linalg.LinearOperator.transpose
reading sources... [ 68%] reference/generated/scipy.sparse.linalg.MatrixRankWarning .. reference/generated/scipy.sparse.save_npz
reading sources... [ 69%] reference/generated/scipy.sparse.spdiags .. reference/generated/scipy.sparse.spmatrix.todia
reading sources... [ 70%] reference/generated/scipy.sparse.spmatrix.todok .. reference/generated/scipy.spatial.KDTree.query_ball_tree
reading sources... [ 71%] reference/generated/scipy.spatial.KDTree.query_pairs .. reference/generated/scipy.spatial.distance.canberra
reading sources... [ 72%] reference/generated/scipy.spatial.distance.cdist .. reference/generated/scipy.spatial.transform.Rotation.as_matrix
reading sources... [ 73%] reference/generated/scipy.spatial.transform.Rotation.as_mrp .. reference/generated/scipy.special.beip_zeros
reading sources... [ 74%] reference/generated/scipy.special.ber .. reference/generated/scipy.special.ellip_harm_2
reading sources... [ 75%] reference/generated/scipy.special.ellip_normal .. reference/generated/scipy.special.expi
reading sources... [ 76%] reference/generated/scipy.special.expit .. reference/generated/scipy.special.hyp1f1
reading sources... [ 77%] reference/generated/scipy.special.hyp2f1 .. reference/generated/scipy.special.ker_zeros
reading sources... [ 78%] reference/generated/scipy.special.kerp .. reference/generated/scipy.special.nbdtrc
reading sources... [ 79%] reference/generated/scipy.special.nbdtri .. reference/generated/scipy.special.pro_ang1_cv
reading sources... [ 80%] reference/generated/scipy.special.pro_cv .. reference/generated/scipy.special.softmax
reading sources... [ 81%] reference/generated/scipy.special.spence .. reference/generated/scipy.stats.SpearmanRConstantInputWarning
reading sources... [ 82%] reference/generated/scipy.stats._result_classes.BinomTestResult .. reference/generated/scipy.stats.brunnermunzel
reading sources... [ 83%] reference/generated/scipy.stats.burr .. reference/generated/scipy.stats.fisher_exact
reading sources... [ 84%] reference/generated/scipy.stats.fisk .. reference/generated/scipy.stats.halfcauchy
reading sources... [ 85%] reference/generated/scipy.stats.halfgennorm .. reference/generated/scipy.stats.logser
reading sources... [ 86%] reference/generated/scipy.stats.loguniform .. reference/generated/scipy.stats.mstats.median_cihs
reading sources... [ 87%] reference/generated/scipy.stats.mstats.meppf .. reference/generated/scipy.stats.mstats.tvar
reading sources... [ 88%] reference/generated/scipy.stats.mstats.variation .. reference/generated/scipy.stats.qmc.Halton.fast_forward
reading sources... [ 89%] reference/generated/scipy.stats.qmc.Halton.random .. reference/generated/scipy.stats.rv_continuous.entropy
reading sources... [ 90%] reference/generated/scipy.stats.rv_continuous.expect .. reference/generated/scipy.stats.rv_discrete.sf
reading sources... [ 91%] reference/generated/scipy.stats.rv_discrete.stats .. reference/generated/scipy.stats.sampling.NumericalInverseHermite.midpoint_error
reading sources... [ 92%] reference/generated/scipy.stats.sampling.NumericalInverseHermite.ppf .. reference/generated/scipy.stats.tiecorrect
reading sources... [ 93%] reference/generated/scipy.stats.tmax .. reference/generated/scipy.stats.zscore
reading sources... [ 94%] reference/index .. reference/optimize.qap-faq
reading sources... [ 95%] reference/optimize.root-anderson .. release.0.11.0
reading sources... [ 96%] release.0.12.0 .. release.1.6.0
reading sources... [ 97%] release.1.6.1 .. tutorial/stats/continuous_exponpow
reading sources... [ 98%] tutorial/stats/continuous_exponweib .. tutorial/stats/continuous_lognorm
reading sources... [ 99%] tutorial/stats/continuous_loguniform .. tutorial/stats/discrete_hypergeom
reading sources... [100%] tutorial/stats/discrete_logser .. tutorial/stats/sampling_tdr

waiting for workers...
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [  1%] building/index .. dev/roadmap
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/api-dev/nan_policy.rst:179: WARNING: py:obj reference target not found: numpy.sin
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/benchmarking.rst:40: WARNING: undefined label: asv:writing-benchmarks
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/contributor_toc.rst:41: WARNING: unknown document: numpy:reference/distutils_guide
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/contributor_toc.rst:50: WARNING: unknown document: numpy:reference/testing
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/contributor_toc.rst:57: WARNING: undefined label: numpy:howto-document
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/development_workflow.rst:284: WARNING: undefined label: numpy:writing-the-commit-message
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/rendering_documentation.rst:9: WARNING: undefined label: numpy:howto-document
source/dev/core-dev/github.rst.inc:117: WARNING: undefined label: numpy:writing-the-commit-message
source/dev/core-dev/distributing.rst.inc:112: WARNING: undefined label: nep29
../HACKING.rst.txt:57: WARNING: unknown document: numpy:reference/testing
../HACKING.rst.txt:72: WARNING: undefined label: numpy:howto-document
writing output... [  2%] dev/roadmap-detailed .. reference/generated/scipy.cluster.hierarchy.correspond
writing output... [  3%] reference/generated/scipy.cluster.hierarchy.cut_tree .. reference/generated/scipy.fft.fft
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans:57: WARNING: py:obj reference target not found: numpy.random.Generator
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans:48: WARNING: py:obj reference target not found: numpy.random.RandomState
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans:50: WARNING: py:obj reference target not found: numpy.random
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans:50: WARNING: py:obj reference target not found: numpy.random.RandomState
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans2:68: WARNING: py:obj reference target not found: numpy.random.Generator
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans2:59: WARNING: py:obj reference target not found: numpy.random.RandomState
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans2:61: WARNING: py:obj reference target not found: numpy.random
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/install/lib/python3.9/site-packages/scipy/cluster/vq.py:docstring of scipy.cluster.vq.kmeans2:61: WARNING: py:obj reference target not found: numpy.random.RandomState

Sphinx parallel build error:
AttributeError: can't set attribute
make: *** [Makefile:122: html-build] Error 2
tupui commented 2 years ago

Ok but IMO it's an issue on Sphinx. Good that there are warnings, but it could still go on with the build.

Apteryks commented 2 years ago

When building without parallel jobs, the error is a bit better:

writing output... [  1%] dev/toolchain
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/api-dev/nan_policy.rst:179: WARNING: py:obj reference target not found: numpy.sin
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/benchmarking.rst:40: WARNING: undefined label: asv:writing-benchmarks
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/contributor_toc.rst:41: WARNING: unknown document: numpy:reference/distutils_guide
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/contributor_toc.rst:50: WARNING: unknown document: numpy:reference/testing
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/contributor_toc.rst:57: WARNING: undefined label: numpy:howto-document
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/development_workflow.rst:284: WARNING: undefined label: numpy:writing-the-commit-message
/tmp/guix-build-python-scipy-1.8.0.drv-0/scipy-1.8.0/doc/source/dev/contributor/rendering_documentation.rst:9: WARNING: undefined label: numpy:howto-document
source/dev/core-dev/github.rst.inc:117: WARNING: undefined label: numpy:writing-the-commit-message
source/dev/core-dev/distributing.rst.inc:112: WARNING: undefined label: nep29
../HACKING.rst.txt:57: WARNING: unknown document: numpy:reference/testing
../HACKING.rst.txt:72: WARNING: undefined label: numpy:howto-document

Exception occurred:
  File "/gnu/store/fh79wqmd9f22rvbyvk73rw6ilhlm1gsy-profile/lib/python3.9/site-packages/pydata_sphinx_theme/bootstrap_html_translator.py", line 34, in visit_table
    self._table_row_index = 0
AttributeError: can't set attribute
The full traceback has been saved in /tmp/sphinx-err-twmiffk7.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
make: *** [Makefile:122: html-build] Error 2

This looks like: https://github.com/pydata/pydata-sphinx-theme/issues/508.

tupui commented 2 years ago

Yeah but we are using latest in our CI.

tupui commented 2 years ago

Although is your recipe using the latest version of the theme?

Apteryks commented 2 years ago

I thought I was using latest of every Sphinx things, but not for pydata, which was stuck on an older version (0.6.4) due to https://github.com/pydata/pydata-sphinx-theme/issues/628. I have more testing to do following bumping it to 0.7.2 which supposedly restores compatibility with Sphinx 4.3+, but I'm confident it'll be fixed.

Usually this kind of issue gets known at build time because setuptools honors the specified dependency bounds in setup.py, but it seems there's no link between doc_requirements.txt and setup.py, which made it easy to miss. Sorry for taking your time, and happy Friday :-)

tupui commented 2 years ago

No worries thanks for following up. Be sure to check the version we use for 1.8. For the theme we update quite often as we use the latest features and don't maintain backward compatibility here.

Good Friday to you as well 😃