I just looked at the python3-numpy = 1:2.1.1+ds-1 currently in
experimental.

Overall it works! Thanks for doing that.

I built these packages for amd64 and arm64 (natively; want to think
about one thing at a time). Then I installed python3-numpy-dev:amd64 and
python3-numpy-dev:arm64 on my amd64 machine; they co-installed nicely.
Then I tried to build a Python extension module using these. The test
module was mrcal. Natively:

  make mrcal-pywrap.o

And cross:

  PKG_CONFIG=aarch64-linux-gnu-pkgconf CC=aarch64-linux-gnu-gcc make 
mrcal-pywrap.o

Both of these worked nicely. The mrcal upstream needed this patch to
work with numpy2:

  
https://github.com/dkogan/mrcal/commit/0934dfe97099873f6b4415de23b3e784c745673c

That's due to a questionable upstream decision; not OUR thing to fix.


Now for some details. I see the python3-numpy-dev package separates ALL
the headers into /usr/lib/ARCH/. 99% of them are identical across arches
though, so that's overkill, but it just costs our users a bit of extra
disk space, so it's probably ok.

Along the same lines, 99% of all files in numpy in general, are
identical across arches, so we can bring more stuff into the -dev
package if we need to. the -dev package is Multi-Arch:same, so that will
make more stuff avaialble to cross-arch usages. I THINK the current
split is fine, and we can bring more stuff over later, if we find out
that we need it.

I think the way you have the new package set up is good:

> Package: python3-numpy
> Architecture: any
> Multi-Arch: allowed    ###### more on this further down
> Depends: python3-numpy-dev
>
> and
>
> Package: python3-numpy-dev
> Architecture: any
> Multi-Arch: same

So anybody that had Depends:python3-numpy will get the same stuff as
before. And if they want to do fancier things, they can
Build-Depends:python3-numpy-dev


> most people can continue build-depending on python3-numpy, and if you need to 
> be
> able to run numpy code while cross-building, you can
> use Build-Depends: python3-numpy:any, python3-numpy-dev. Am I wrong?

I want to say that

- we don't want Multi-Arch:allowed
- Cross-builders will want to
  Build-Depends: python3-numpy-dev
- Packages using numpy in their tests will want to
  Build-Depends: python3-numpy <!nocheck>

What's your thought about using :allowed/:any the way you noted above?
That will allow a native python3-numpy and a foreign python3-numpy-dev
to be installed, which most of the time isn't useful. I definitely may
be missing some nuances here.


> Everything might be complicated further by the fact that built
> extensions usually do not depend on python3-numpy itself, but on
> python3-numpy-abiX which is a virtual package provided by
> python3-numpy. My guess/hope is that the this will still work with
> Multi-Arch.

I think this is OK. The files that follow the ABI are the .so files,
which live in python3-numpy, which is the package that Provides those
virtual abi packages. The current effort is about cross-BUILDING (with
python3-numpy-dev), not cross-EXECUTING, which what the python3-numpy
and the abi stuff does.

Other notes:

I tried swig and numpy.i. It works, but we should add a small note to
debian/patches/0005-Adapt-SWIG-documentation-to-Debian.patch to say that
the user should

  %include "numpy/numpy.i"

and not

  %include "numpy.i"

I'll send you a patch right after this.

We ship .a files in python3-numpy-dev. I don't know what those do. Any
idea? It'd be good to test those.

The python3-numpy-doc package should be arch-independent, but the
generated docs do have some differences in their data examples, and in
some places they explicitly talk about the arch. I don't think that
BREAKS anything, other than making the build unreproducible. For the
record I'm attaching the doc difference

python3-numpy ships arch-less symlinks:

  /usr/lib/python3/dist-packages/numpy/_core/include -> 
../../../../x86_64-linux-gnu/python3-numpy/numpy/_core/include
  /usr/lib/python3/dist-packages/numpy/_core/lib -> 
../../../../x86_64-linux-gnu/python3-numpy/numpy/_core/lib
  /usr/lib/python3/dist-packages/numpy/f2py/src -> 
../../../../x86_64-linux-gnu/python3-numpy/numpy/f2py/src
  /usr/lib/python3/dist-packages/numpy/random/lib -> 
../../../../x86_64-linux-gnu/python3-numpy/numpy/random/lib

I guess this preserves backwards compatibility, but could it cause
confusion for cross-builders? Do we know what will break if we get rid
of the symlinks and only make the new paths available?

This all looks great!

diff --exclude '*.js' -Naur doc1/usr/share/doc/python-numpy/html/reference/arrays.scalars.html doc2/usr/share/doc/python-numpy/html/reference/arrays.scalars.html
--- doc1/usr/share/doc/python-numpy/html/reference/arrays.scalars.html	2024-09-06 05:18:38.000000000 -0700
+++ doc2/usr/share/doc/python-numpy/html/reference/arrays.scalars.html	2024-09-06 05:18:38.000000000 -0700
@@ -1236,7 +1236,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.byte" title="numpy.byte"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.byte</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.int8" title="numpy.int8"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.int8</span></code></a>: 8-bit signed integer (<code class="docutils literal notranslate"><span class="pre">-128</span></code> to <code class="docutils literal notranslate"><span class="pre">127</span></code>).</p>
 </dd>
 </dl>
@@ -1253,7 +1253,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.short" title="numpy.short"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.short</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.int16" title="numpy.int16"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.int16</span></code></a>: 16-bit signed integer (<code class="docutils literal notranslate"><span class="pre">-32_768</span></code> to <code class="docutils literal notranslate"><span class="pre">32_767</span></code>).</p>
 </dd>
 </dl>
@@ -1270,7 +1270,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.intc" title="numpy.intc"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.intc</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.int32" title="numpy.int32"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.int32</span></code></a>: 32-bit signed integer (<code class="docutils literal notranslate"><span class="pre">-2_147_483_648</span></code> to <code class="docutils literal notranslate"><span class="pre">2_147_483_647</span></code>).</p>
 </dd>
 </dl>
@@ -1288,10 +1288,10 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.int_" title="numpy.int_"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.int_</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.int64" title="numpy.int64"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.int64</span></code></a>: 64-bit signed integer (<code class="docutils literal notranslate"><span class="pre">-9_223_372_036_854_775_808</span></code> to <code class="docutils literal notranslate"><span class="pre">9_223_372_036_854_775_807</span></code>).</p>
 </dd>
-<dt class="field-even">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-even">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.intp" title="numpy.intp"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.intp</span></code></a>: Signed integer large enough to fit pointer, compatible with C <code class="docutils literal notranslate"><span class="pre">intptr_t</span></code>.</p>
 </dd>
 </dl>
@@ -1334,7 +1334,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.ubyte" title="numpy.ubyte"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.ubyte</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.uint8" title="numpy.uint8"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.uint8</span></code></a>: 8-bit unsigned integer (<code class="docutils literal notranslate"><span class="pre">0</span></code> to <code class="docutils literal notranslate"><span class="pre">255</span></code>).</p>
 </dd>
 </dl>
@@ -1351,7 +1351,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.ushort" title="numpy.ushort"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.ushort</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.uint16" title="numpy.uint16"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.uint16</span></code></a>: 16-bit unsigned integer (<code class="docutils literal notranslate"><span class="pre">0</span></code> to <code class="docutils literal notranslate"><span class="pre">65_535</span></code>).</p>
 </dd>
 </dl>
@@ -1368,7 +1368,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.uintc" title="numpy.uintc"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.uintc</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.uint32" title="numpy.uint32"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.uint32</span></code></a>: 32-bit unsigned integer (<code class="docutils literal notranslate"><span class="pre">0</span></code> to <code class="docutils literal notranslate"><span class="pre">4_294_967_295</span></code>).</p>
 </dd>
 </dl>
@@ -1386,10 +1386,10 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.uint" title="numpy.uint"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.uint</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.uint64" title="numpy.uint64"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.uint64</span></code></a>: 64-bit unsigned integer (<code class="docutils literal notranslate"><span class="pre">0</span></code> to <code class="docutils literal notranslate"><span class="pre">18_446_744_073_709_551_615</span></code>).</p>
 </dd>
-<dt class="field-even">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-even">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.uintp" title="numpy.uintp"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.uintp</span></code></a>: Unsigned integer large enough to fit pointer, compatible with C <code class="docutils literal notranslate"><span class="pre">uintptr_t</span></code>.</p>
 </dd>
 </dl>
@@ -1481,7 +1481,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.half" title="numpy.half"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.half</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.float16" title="numpy.float16"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.float16</span></code></a>: 16-bit-precision floating-point number type: sign bit, 5 bits exponent, 10 bits mantissa.</p>
 </dd>
 </dl>
@@ -1498,7 +1498,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.single" title="numpy.single"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.single</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.float32" title="numpy.float32"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.float32</span></code></a>: 32-bit-precision floating-point number type: sign bit, 8 bits exponent, 23 bits mantissa.</p>
 </dd>
 </dl>
@@ -1516,7 +1516,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.double" title="numpy.double"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.double</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.float64" title="numpy.float64"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.float64</span></code></a>: 64-bit precision floating-point number type: sign bit, 11 bits exponent, 52 bits mantissa.</p>
 </dd>
 </dl>
@@ -1531,7 +1531,7 @@
 <dt class="field-odd">Character code<span class="colon">:</span></dt>
 <dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">'g'</span></code></p>
 </dd>
-<dt class="field-even">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-even">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.float128" title="numpy.float128"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.float128</span></code></a>: 128-bit extended-precision floating-point number type.</p>
 </dd>
 </dl>
@@ -1559,7 +1559,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.csingle" title="numpy.csingle"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.csingle</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.complex64" title="numpy.complex64"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.complex64</span></code></a>: Complex number type composed of 2 32-bit-precision floating-point numbers.</p>
 </dd>
 </dl>
@@ -1577,7 +1577,7 @@
 <dt class="field-even">Canonical name<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.cdouble" title="numpy.cdouble"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.cdouble</span></code></a></p>
 </dd>
-<dt class="field-odd">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-odd">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-odd"><p><a class="reference internal" href="#numpy.complex128" title="numpy.complex128"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.complex128</span></code></a>: Complex number type composed of 2 64-bit-precision floating-point numbers.</p>
 </dd>
 </dl>
@@ -1592,7 +1592,7 @@
 <dt class="field-odd">Character code<span class="colon">:</span></dt>
 <dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">'G'</span></code></p>
 </dd>
-<dt class="field-even">Alias on this platform (Linux aarch64)<span class="colon">:</span></dt>
+<dt class="field-even">Alias on this platform (Linux x86_64)<span class="colon">:</span></dt>
 <dd class="field-even"><p><a class="reference internal" href="#numpy.complex256" title="numpy.complex256"><code class="xref py py-obj docutils literal notranslate"><span class="pre">numpy.complex256</span></code></a>: Complex number type composed of 2 128-bit extended-precision floating-point numbers.</p>
 </dd>
 </dl>
diff --exclude '*.js' -Naur doc1/usr/share/doc/python-numpy/html/reference/random/new-or-different.html doc2/usr/share/doc/python-numpy/html/reference/random/new-or-different.html
--- doc1/usr/share/doc/python-numpy/html/reference/random/new-or-different.html	2024-09-06 05:18:38.000000000 -0700
+++ doc2/usr/share/doc/python-numpy/html/reference/random/new-or-different.html	2024-09-06 05:18:38.000000000 -0700
@@ -586,22 +586,22 @@
 <span class="gp">In [3]: </span><span class="o">%</span><span class="k">timeit</span> -n 1 rng.standard_normal(100000)
 <span class="gp">   ...: </span><span class="o">%</span><span class="k">timeit</span> -n 1 numpy.random.standard_normal(100000)
 <span class="gp">   ...: </span>
-<span class="go">928 us +- 35.5 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
-<span class="go">2.48 ms +- 9.48 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
+<span class="go">1.15 ms +- 19.5 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
+<span class="go">2.25 ms +- 17.6 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
 </pre></div>
 </div>
 <div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [4]: </span><span class="o">%</span><span class="k">timeit</span> -n 1 rng.standard_exponential(100000)
 <span class="gp">   ...: </span><span class="o">%</span><span class="k">timeit</span> -n 1 numpy.random.standard_exponential(100000)
 <span class="gp">   ...: </span>
-<span class="go">796 us +- 10.7 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
-<span class="go">1.74 ms +- 9.79 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
+<span class="go">631 us +- 6.04 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
+<span class="go">1.66 ms +- 16.9 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
 </pre></div>
 </div>
 <div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [5]: </span><span class="o">%</span><span class="k">timeit</span> -n 1 rng.standard_gamma(3.0, 100000)
 <span class="gp">   ...: </span><span class="o">%</span><span class="k">timeit</span> -n 1 numpy.random.standard_gamma(3.0, 100000)
 <span class="gp">   ...: </span>
-<span class="go">2.32 ms +- 12 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
-<span class="go">4.43 ms +- 8.47 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
+<span class="go">2.37 ms +- 20.1 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
+<span class="go">4.55 ms +- 5.86 us per loop (mean +- std. dev. of 7 runs, 1 loop each)</span>
 </pre></div>
 </div>
 <ul class="simple">
@@ -636,13 +636,13 @@
 <div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [6]: </span><span class="n">rng</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">default_rng</span><span class="p">()</span>
 
 <span class="gp">In [7]: </span><span class="n">rng</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)</span>
-<span class="gh">Out[7]: </span><span class="go">array([0.29841915, 0.21258598, 0.86408385])</span>
+<span class="gh">Out[7]: </span><span class="go">array([0.90976993, 0.62117911, 0.96281198])</span>
 
 <span class="gp">In [8]: </span><span class="n">rng</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
-<span class="gh">Out[8]: </span><span class="go">array([0.2825852 , 0.3334474 , 0.07280982], dtype=float32)</span>
+<span class="gh">Out[8]: </span><span class="go">array([0.7565704 , 0.04538244, 0.43933243], dtype=float32)</span>
 
 <span class="gp">In [9]: </span><span class="n">rng</span><span class="o">.</span><span class="n">integers</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">256</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">uint8</span><span class="p">)</span>
-<span class="gh">Out[9]: </span><span class="go">array([110, 198, 176], dtype=uint8)</span>
+<span class="gh">Out[9]: </span><span class="go">array([ 24, 163,  10], dtype=uint8)</span>
 </pre></div>
 </div>
 <ul>
@@ -663,10 +663,10 @@
 <span class="gp">In [11]: </span><span class="n">existing</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span>
 
 <span class="gp">In [12]: </span><span class="n">rng</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="n">out</span><span class="o">=</span><span class="n">existing</span><span class="p">[:</span><span class="mi">2</span><span class="p">])</span>
-<span class="gh">Out[12]: </span><span class="go">array([0.25415022, 0.25021378])</span>
+<span class="gh">Out[12]: </span><span class="go">array([0.49564521, 0.25794318])</span>
 
 <span class="gp">In [13]: </span><span class="nb">print</span><span class="p">(</span><span class="n">existing</span><span class="p">)</span>
-<span class="go">[0.25415022 0.25021378 0.         0.        ]</span>
+<span class="go">[0.49564521 0.25794318 0.         0.        ]</span>
 </pre></div>
 </div>
 <ul class="simple">
@@ -686,17 +686,17 @@
 
 <span class="gp">In [17]: </span><span class="n">rng</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
 <span class="gh">Out[17]: </span>
-<span class="go">array([[ 3,  2,  2,  1,  0],</span>
-<span class="go">       [ 7,  6,  6,  5,  4],</span>
-<span class="go">       [11, 10, 10,  9,  8]])</span>
+<span class="go">array([[1, 1, 0, 1, 0],</span>
+<span class="go">       [5, 5, 4, 5, 4],</span>
+<span class="go">       [9, 9, 8, 9, 8]])</span>
 
 <span class="gp">In [18]: </span><span class="n">rng</span><span class="o">.</span><span class="n">shuffle</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>        <span class="c1"># Shuffle in-place</span>
 
 <span class="gp">In [19]: </span><span class="n">a</span>
 <span class="gh">Out[19]: </span>
-<span class="go">array([[ 2,  1,  3,  0],</span>
-<span class="go">       [ 6,  5,  7,  4],</span>
-<span class="go">       [10,  9, 11,  8]])</span>
+<span class="go">array([[ 3,  2,  0,  1],</span>
+<span class="go">       [ 7,  6,  4,  5],</span>
+<span class="go">       [11, 10,  8,  9]])</span>
 </pre></div>
 </div>
 <ul class="simple">
diff --exclude '*.js' -Naur doc1/usr/share/doc/python-numpy/html/reference/routines.polynomials.html doc2/usr/share/doc/python-numpy/html/reference/routines.polynomials.html
--- doc1/usr/share/doc/python-numpy/html/reference/routines.polynomials.html	2024-09-06 05:18:38.000000000 -0700
+++ doc2/usr/share/doc/python-numpy/html/reference/routines.polynomials.html	2024-09-06 05:18:38.000000000 -0700
@@ -733,7 +733,7 @@
 <p>With the legacy polynomial module, a linear fit (i.e. polynomial of degree 1)
 could be applied to these data with <a class="reference internal" href="generated/numpy.polyfit.html#numpy.polyfit" title="numpy.polyfit"><code class="xref py py-obj docutils literal notranslate"><span class="pre">polyfit</span></code></a>:</p>
 <div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [4]: </span><span class="n">np</span><span class="o">.</span><span class="n">polyfit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">deg</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
-<span class="gh">Out[4]: </span><span class="go">array([ 1.04756807, -0.17191993])</span>
+<span class="gh">Out[4]: </span><span class="go">array([ 1.15507319, -1.12944415])</span>
 </pre></div>
 </div>
 <p>With the new polynomial API, the <a class="reference internal" href="generated/numpy.polynomial.polynomial.Polynomial.fit.html#numpy.polynomial.polynomial.Polynomial.fit" title="numpy.polynomial.polynomial.Polynomial.fit"><code class="xref py py-obj docutils literal notranslate"><span class="pre">fit</span></code></a>
@@ -741,7 +741,7 @@
 <div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [5]: </span><span class="n">p_fitted</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">polynomial</span><span class="o">.</span><span class="n">Polynomial</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">deg</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
 
 <span class="gp">In [6]: </span><span class="n">p_fitted</span>
-<span class="gh">Out[6]: </span><span class="go">Polynomial([4.54213639, 4.71405632], domain=[0., 9.], window=[-1.,  1.], symbol=&#39;x&#39;)</span>
+<span class="gh">Out[6]: </span><span class="go">Polynomial([4.06838521, 5.19782936], domain=[0., 9.], window=[-1.,  1.], symbol=&#39;x&#39;)</span>
 </pre></div>
 </div>
 <p>Note that the coefficients are given <em>in the scaled domain</em> defined by the
@@ -749,7 +749,7 @@
 <a class="reference internal" href="generated/numpy.polynomial.polynomial.Polynomial.convert.html#numpy.polynomial.polynomial.Polynomial.convert" title="numpy.polynomial.polynomial.Polynomial.convert"><code class="xref py py-obj docutils literal notranslate"><span class="pre">convert</span></code></a> can be used to get the
 coefficients in the unscaled data domain.</p>
 <div class="highlight-ipython notranslate"><div class="highlight"><pre><span></span><span class="gp">In [7]: </span><span class="n">p_fitted</span><span class="o">.</span><span class="n">convert</span><span class="p">()</span>
-<span class="gh">Out[7]: </span><span class="go">Polynomial([-0.17191993,  1.04756807], domain=[-1.,  1.], window=[-1.,  1.], symbol=&#39;x&#39;)</span>
+<span class="gh">Out[7]: </span><span class="go">Polynomial([-1.12944415,  1.15507319], domain=[-1.,  1.], window=[-1.,  1.], symbol=&#39;x&#39;)</span>
 </pre></div>
 </div>
 </section>

Reply via email to