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='x')</span> +<span class="gh">Out[6]: </span><span class="go">Polynomial([4.06838521, 5.19782936], domain=[0., 9.], window=[-1., 1.], symbol='x')</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='x')</span> +<span class="gh">Out[7]: </span><span class="go">Polynomial([-1.12944415, 1.15507319], domain=[-1., 1.], window=[-1., 1.], symbol='x')</span> </pre></div> </div> </section>