diff --git a/.CondaPkg/env/conda-meta/history b/.CondaPkg/env/conda-meta/history index 526e70f55..ebcee0f0b 100644 --- a/.CondaPkg/env/conda-meta/history +++ b/.CondaPkg/env/conda-meta/history @@ -1,5 +1,5 @@ -==> 2024-04-02 17:39:53 <== -# cmd: /home/runner/.julia/artifacts/87052ac9aec71548f804b30280151288cb1ed40e/bin/micromamba -r /home/runner/.julia/scratchspaces/0b3b1443-0f03-428d-bdfb-f27f9c1191ea/root create -y -p /home/runner/work/qECCBenchWiki/qECCBenchWiki/.CondaPkg/env --override-channels --no-channel-priority libstdcxx-ng[version='>=3.4,<13.0'] pip[version='>=22.0.0'] python[version='>=3.7,<4',channel='conda-forge',build='*cpython*'] -c conda-forge +==> 2024-04-10 03:14:27 <== +# cmd: /home/runner/.julia/artifacts/7973f2c7725e2d0eef7a95159454c4145f0945a2/bin/micromamba -r /home/runner/.julia/scratchspaces/0b3b1443-0f03-428d-bdfb-f27f9c1191ea/root create -y -p /home/runner/work/qECCBenchWiki/qECCBenchWiki/.CondaPkg/env --override-channels --no-channel-priority libstdcxx-ng[version='>=3.4,<13.0'] pip[version='>=22.0.0'] python[version='>=3.7,<4',channel='conda-forge',build='*cpython*'] -c conda-forge # conda version: 3.8.0 +https://conda.anaconda.org/conda-forge/linux-64::libstdcxx-ng-12.3.0-h0f45ef3_5 +https://conda.anaconda.org/conda-forge/linux-64::_libgcc_mutex-0.1-conda_forge diff --git a/.CondaPkg/env/lib/python3.12/__pycache__/_sysconfigdata__linux_x86_64-linux-gnu.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/__pycache__/_sysconfigdata__linux_x86_64-linux-gnu.cpython-312.pyc index d8be005d3..5add10255 100644 Binary files a/.CondaPkg/env/lib/python3.12/__pycache__/_sysconfigdata__linux_x86_64-linux-gnu.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/__pycache__/_sysconfigdata__linux_x86_64-linux-gnu.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc index 5219315f0..1384d1fb0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc index 49fb6789c..c24444d1e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc index 29fb44dee..e50f99d67 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc index c069e5212..0c0c75ec4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc index fd640f227..cde3b78a6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc index 86c4fd068..315a399a6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc index 727a06ab9..b3b8802ea 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc index 5c28a6dbc..d52a6b5c4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc index 62b5e73db..94ed9b05f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc index 07172de4c..cd597da00 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc index 0a697faf8..5dd56245b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc index 3298b76bd..5dd1dff2b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc index 05bbefd91..b5aa39059 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc index cf231acfc..282928f22 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc index dc1de306a..795338424 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc index c70831d4e..7195bfb43 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc index 214b54017..90c9750b0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc index 196519d54..680340363 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc index 4691123a7..ac6c47e64 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc index fd3585340..e4dc8f3b3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc index e4c7a1e34..c08761a35 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc index a869920c6..84d90c0fd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc index 00c9b5492..51025b64e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc index a182b1d50..11a0ab5df 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc index e798d3cb3..b456978d4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc index 9b720d099..a46d6d3f7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc index aa8e8705f..3d59b542d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc index 8c123bfd5..9e1e0275c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc index 36ddfc1db..19afd6921 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc index a5004978d..8983c2df4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc index 85f376fe0..0269b9fdc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc index c7938b1c7..fa79d9558 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc index 53d31d49e..e548c566a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc index a33a93f60..4c49fe9d6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc index e2823efdc..c12860572 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc index 4e88a5367..72083a3c5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc index 498145a3a..d967a8ebe 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc index 1fa52c1b8..1c56f2e94 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc index 6e3f3d51d..601f3942d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc index 34f7eaac2..407d1d49b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc index 8099e6ef1..f87468856 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc index bb90641ef..9dd2f9397 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc index 3900371e7..ea0cf8f2a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc index 2493ce1fc..57209a77b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc index b38e6e6fd..323d43608 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc index aed2df93f..0714bb283 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc index d35769a37..04bd8b28a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc index 434c26992..97e84024c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc index 843ae8538..5cd9bbf92 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc index 93b53b2e8..1cfa64618 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc index a29aa5787..49c9b6ba1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc index 212fa289e..2f955d0ca 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc index 0429cb962..947cd9d75 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc index a87ad846a..e71a7deff 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc index 056cb0438..8fd11b8f5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc index a3c61c297..f1b9dd14b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc index 35a56f978..ffb8b1800 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc index 396abb9b1..242b4b0a2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc index 47adf2004..2bffef679 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc index e58304d64..73563e121 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc index 65ce4eb0b..086a9182a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc index 4868a86b4..e6dd46a51 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc index 241e95a7c..b07816b4d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc index f8b177f02..92c9e6c52 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc index 8296cd3ad..f7028869a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc index 5bb2ac685..b67b50368 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc index 25e41b87c..cfd810318 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc index 9025765f1..41e7c53bc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc index fdae0ca2c..2a5f51357 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc index f4a8a6f55..854b4c795 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc index 143f23339..887a08e41 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PyAccess.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PyAccess.cpython-312.pyc index 679228edb..11c91c387 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PyAccess.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/PyAccess.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc index de7329de4..15802d988 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc index a1a0ad0b1..e8e7c94bc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc index 1518e616d..3a6862570 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc index edb05d28e..4a324e2da 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc index e73dd3635..0f962171a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc index ca58ad1b9..4f93e06c9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc index 510ca567c..09364c8bc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc index d858f4446..d45c1b73d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc index d05c9f901..f420fbff2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc index 1f28bb8dd..fde6ddb2e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc index 99b053823..0a2c349bf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc index e8adac2ae..a396cfd8d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc index 51e11d263..859d01219 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc index cef5d4452..a4519a39b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc index 42f34eaef..c4527b4cc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc index dbb42449b..92744820c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc index 16378237b..9a62e5985 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc index 5f66335fa..65cddfbff 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc index ddf1d6e8f..7fd347e7e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc index f73943406..22064ecfa 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc index ec795a5fa..584e4806b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc index 8c6f4f1b3..106cf1f7f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc index 653ab45ad..b3ec21755 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc index 9cd84145e..c17468c9e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/pylab.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/pylab.cpython-312.pyc index 4429881ee..9c6a830ca 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/pylab.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/pylab.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/six.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/six.cpython-312.pyc index bfa118387..8a3ba5eac 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/six.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/__pycache__/six.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/INSTALLER b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/INSTALLER similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/INSTALLER rename to .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/INSTALLER diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/LICENSE b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/LICENSE similarity index 96% rename from .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/LICENSE rename to .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/LICENSE index 90f83c97d..96837bd9e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/LICENSE +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2021-2023, ContourPy Developers. +Copyright (c) 2021-2024, ContourPy Developers. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/METADATA b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/METADATA similarity index 97% rename from .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/METADATA rename to .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/METADATA index ae131f08d..7078d8245 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/METADATA +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/METADATA @@ -1,11 +1,11 @@ Metadata-Version: 2.1 Name: contourpy -Version: 1.2.0 +Version: 1.2.1 Summary: Python library for calculating contours of 2D quadrilateral grids Author-Email: Ian Thomas License: BSD 3-Clause License - Copyright (c) 2021-2023, ContourPy Developers. + Copyright (c) 2021-2024, ContourPy Developers. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -50,7 +50,7 @@ Project-URL: Changelog, https://contourpy.readthedocs.io/en/latest/changelog.htm Project-URL: Documentation, https://contourpy.readthedocs.io Project-URL: Repository, https://github.com/contourpy/contourpy Requires-Python: >=3.9 -Requires-Dist: numpy<2.0,>=1.20 +Requires-Dist: numpy>=1.20 Requires-Dist: furo; extra == "docs" Requires-Dist: sphinx>=7.2; extra == "docs" Requires-Dist: sphinx-copybutton; extra == "docs" @@ -58,7 +58,7 @@ Requires-Dist: bokeh; extra == "bokeh" Requires-Dist: selenium; extra == "bokeh" Requires-Dist: contourpy[bokeh,docs]; extra == "mypy" Requires-Dist: docutils-stubs; extra == "mypy" -Requires-Dist: mypy==1.6.1; extra == "mypy" +Requires-Dist: mypy==1.8.0; extra == "mypy" Requires-Dist: types-Pillow; extra == "mypy" Requires-Dist: contourpy[test-no-images]; extra == "test" Requires-Dist: matplotlib; extra == "test" diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/RECORD b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/RECORD similarity index 57% rename from .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/RECORD rename to .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/RECORD index bff8959f9..3293ee9c7 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/RECORD +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/RECORD @@ -1,9 +1,9 @@ -contourpy-1.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -contourpy-1.2.0.dist-info/LICENSE,sha256=wlIhVrp9Tfu-wmbf6pi_dqabxB7bGMrTIxd_rWsZs18,1534 -contourpy-1.2.0.dist-info/METADATA,sha256=JW30mmlS9Ap5mgMbdu5Fm7IQCRAhPjnXPkTcqfLN0Eg,5807 -contourpy-1.2.0.dist-info/RECORD,, -contourpy-1.2.0.dist-info/WHEEL,sha256=3qIDcXCk577AXiK3pDifO-gE9U_MYWYGgtD78gLa2_U,137 -contourpy/__init__.py,sha256=qKoGLA4Q5-E-rCX9yWnkaAM3uX87Kff-E1vXXHO5AyI,11319 +contourpy-1.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +contourpy-1.2.1.dist-info/LICENSE,sha256=x9ChU7_6oQQERGPrxjN5PUUXIu_TE4tf_SUntA8VBaI,1534 +contourpy-1.2.1.dist-info/METADATA,sha256=2P2_nKjGaPLSnVIu_O4EdfAkPhic9smE2DwyQuB7emE,5802 +contourpy-1.2.1.dist-info/RECORD,, +contourpy-1.2.1.dist-info/WHEEL,sha256=3qIDcXCk577AXiK3pDifO-gE9U_MYWYGgtD78gLa2_U,137 +contourpy/__init__.py,sha256=sAgP3LY7-PTMH96gQeA65OZrP1ZgNo9Bcw3h0BnpOI0,11330 contourpy/__pycache__/__init__.cpython-312.pyc,, contourpy/__pycache__/_version.cpython-312.pyc,, contourpy/__pycache__/array.cpython-312.pyc,, @@ -13,16 +13,16 @@ contourpy/__pycache__/dechunk.cpython-312.pyc,, contourpy/__pycache__/enum_util.cpython-312.pyc,, contourpy/__pycache__/typecheck.cpython-312.pyc,, contourpy/__pycache__/types.cpython-312.pyc,, -contourpy/_contourpy.cpython-312-x86_64-linux-gnu.so,sha256=bwTmIm9146nQ3mYj6XXG0Ku7KB1NcqHUUsxwtth_f9g,835112 -contourpy/_contourpy.pyi,sha256=qCJj74hNvncMCfYN8n4YghbWd8I4-87wdpQRwoJBMuU,7111 -contourpy/_version.py,sha256=MpAT5hgNoHnTtG1XRD_GV_A7QrHVU6vJjGSw_8qMGA4,22 +contourpy/_contourpy.cpython-312-x86_64-linux-gnu.so,sha256=Mlzi4wzOSsj5z1WNpJkq9xFN8xqFCT9ZFYRkZ6VTLO8,840136 +contourpy/_contourpy.pyi,sha256=zQ4pIKuHmBBPJgLZdctJJH99BYSlGfKRc8A-j4HeNoM,6970 +contourpy/_version.py,sha256=Mlm4Gvmb_6yQxwUbv2Ksc-BJFXLPg9H1Vt2iV7wXrA4,22 contourpy/array.py,sha256=fNp-o8odWzqANFoT2J5ueMW7q7y1vSJkjzkEUYN4B-Q,9012 contourpy/chunk.py,sha256=8njDQqlpuD22RjaaCyA75FXQsSQDY5hZGJSrxFpvGGU,3279 contourpy/convert.py,sha256=AuHThR7s-VJIvUBydcwYiRs2WrlDvxY_5eQnHSlI7v8,23398 -contourpy/dechunk.py,sha256=7YDjPF2-fzttXJqvsGBkYfie6ZFawMoTdNaCc1o6WPE,5490 +contourpy/dechunk.py,sha256=1J6QWQCkwYl87fhmQfXncPRvMhMauuYDmlVxZBoG2pg,5498 contourpy/enum_util.py,sha256=o8MItJRs08oqzwPP3IwC75BBAY9Qq95saIzjkXBXwqA,1519 contourpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -contourpy/typecheck.py,sha256=-V-U7Rs0LxDxDEd_rdKJM321nd4PrxV2ZX3DeChWo6E,10746 +contourpy/typecheck.py,sha256=t1nvvCuKMYva1Zx4fc30EpdKFcO0Enz3n_UFfXBsq9o,10747 contourpy/types.py,sha256=2K4T5tJpMIjYrkkg1Lqh3C2ZKlnOhnMtYmtwz92l_y8,247 contourpy/util/__init__.py,sha256=eVhJ_crOHL7nkG4Kb0dOo7NL4WHMy_Px665aAN_3d-8,118 contourpy/util/__pycache__/__init__.cpython-312.pyc,, @@ -33,10 +33,10 @@ contourpy/util/__pycache__/data.cpython-312.pyc,, contourpy/util/__pycache__/mpl_renderer.cpython-312.pyc,, contourpy/util/__pycache__/mpl_util.cpython-312.pyc,, contourpy/util/__pycache__/renderer.cpython-312.pyc,, -contourpy/util/_build_config.py,sha256=QFikbw0fKaGNn0ehP6jeZURbKR7wxAWVeIr-jAE_9kU,1848 -contourpy/util/bokeh_renderer.py,sha256=OS-n5xqydxmdQ64FYmHOAaw_1PqP5JA-ihy0nEgtzgU,13848 -contourpy/util/bokeh_util.py,sha256=g7Lr_Wo8hZsgVrCdkdwXCBMXBV5SVocmUznoXUftPxI,2780 +contourpy/util/_build_config.py,sha256=GzMsa8uBfdDx8dDIouC81w_B3BC7R42LHJZ4OxKLW4I,1848 +contourpy/util/bokeh_renderer.py,sha256=pGPyK1tN-lCR4S8ETY4KdTRFs_Qdm4Wy9H8wd8ZVqtY,13771 +contourpy/util/bokeh_util.py,sha256=wc-S3ewBUYWyIkEv9jkhFySIergjLQl4Z0UEVnE0HhA,2804 contourpy/util/data.py,sha256=cPSAk3pUlg1N4uTp4chzXZLjR5uXnFa2h3adXn-_DJg,2566 -contourpy/util/mpl_renderer.py,sha256=VWnpAvGelCDkx7w4RS1JWArSKgACQojqHNarC8TbUDM,20013 +contourpy/util/mpl_renderer.py,sha256=UONy5efwxAlr0RSS3ecpcmUCexAXrbpnSXhXC6ynUdc,20061 contourpy/util/mpl_util.py,sha256=q2OO2gGSO7bYgpNj3DCJtRUC8BjuBSrQClrZ92trT0U,3438 contourpy/util/renderer.py,sha256=scRiAvbLo6jrDxT3AJ9cO-5PTtpL5BXRfGNt1Vxv7QI,2367 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/WHEEL b/.CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/WHEEL similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.0.dist-info/WHEEL rename to .CondaPkg/env/lib/python3.12/site-packages/contourpy-1.2.1.dist-info/WHEEL diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__init__.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__init__.py index 7b85874c7..aa6baf93d 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__init__.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__init__.py @@ -5,8 +5,15 @@ import numpy as np from contourpy._contourpy import ( - ContourGenerator, FillType, LineType, Mpl2005ContourGenerator, Mpl2014ContourGenerator, - SerialContourGenerator, ThreadedContourGenerator, ZInterp, max_threads, + ContourGenerator, + FillType, + LineType, + Mpl2005ContourGenerator, + Mpl2014ContourGenerator, + SerialContourGenerator, + ThreadedContourGenerator, + ZInterp, + max_threads, ) from contourpy._version import __version__ from contourpy.chunk import calc_chunk_sizes @@ -41,12 +48,12 @@ # Simple mapping of algorithm name to class name. -_class_lookup: dict[str, type[ContourGenerator]] = dict( - mpl2005=Mpl2005ContourGenerator, - mpl2014=Mpl2014ContourGenerator, - serial=SerialContourGenerator, - threaded=ThreadedContourGenerator, -) +_class_lookup: dict[str, type[ContourGenerator]] = { + "mpl2005": Mpl2005ContourGenerator, + "mpl2014": Mpl2014ContourGenerator, + "serial": SerialContourGenerator, + "threaded": ThreadedContourGenerator, +} def _remove_z_mask( @@ -257,6 +264,4 @@ def contour_generator( kwargs["thread_count"] = thread_count # Create contour generator. - cont_gen = cls(*args, **kwargs) - - return cont_gen + return cls(*args, **kwargs) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/__init__.cpython-312.pyc index 5c6b4b87e..0ecd6ff77 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/_version.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/_version.cpython-312.pyc index 44216314b..1326ac88a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/_version.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/_version.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/array.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/array.cpython-312.pyc index 6398f9fa6..ec67876a2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/array.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/array.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/chunk.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/chunk.cpython-312.pyc index 0428e2a46..932af8900 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/chunk.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/chunk.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/convert.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/convert.cpython-312.pyc index 243493a33..81ed78bd6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/convert.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/convert.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/dechunk.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/dechunk.cpython-312.pyc index c4b29f865..b36dabaa3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/dechunk.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/dechunk.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/enum_util.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/enum_util.cpython-312.pyc index 6733816f3..6a0a0c983 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/enum_util.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/enum_util.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/typecheck.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/typecheck.cpython-312.pyc index b129b806d..2ea98b98e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/typecheck.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/typecheck.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/types.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/types.cpython-312.pyc index 116b97336..a450f616f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/types.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/__pycache__/types.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.cpython-312-x86_64-linux-gnu.so index 431ff84ef..4d761e6ac 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.pyi b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.pyi index 7cbca5902..077f5f9b5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.pyi +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_contourpy.pyi @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import ClassVar, NoReturn import numpy as np @@ -55,7 +53,6 @@ class FillType: def __init__(self, value: int) -> None: ... def __int__(self) -> int: ... def __ne__(self, other: object) -> bool: ... - def __repr__(self) -> str: ... def __setstate__(self, state: int) -> NoReturn: ... @property def name(self) -> str: ... @@ -76,7 +73,6 @@ class LineType: def __init__(self, value: int) -> None: ... def __int__(self) -> int: ... def __ne__(self, other: object) -> bool: ... - def __repr__(self) -> str: ... def __setstate__(self, state: int) -> NoReturn: ... @property def name(self) -> str: ... @@ -94,7 +90,6 @@ class ZInterp: def __init__(self, value: int) -> None: ... def __int__(self) -> int: ... def __ne__(self, other: object) -> bool: ... - def __repr__(self) -> str: ... def __setstate__(self, state: int) -> NoReturn: ... @property def name(self) -> str: ... diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_version.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_version.py index c68196d1c..a955fdae1 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_version.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/_version.py @@ -1 +1 @@ -__version__ = "1.2.0" +__version__ = "1.2.1" diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/dechunk.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/dechunk.py index 92b61bba2..622a1ceb7 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/dechunk.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/dechunk.py @@ -4,7 +4,9 @@ from contourpy._contourpy import FillType, LineType from contourpy.array import ( - concat_codes_or_none, concat_offsets_or_none, concat_points_or_none, + concat_codes_or_none, + concat_offsets_or_none, + concat_points_or_none, concat_points_or_none_with_nan, ) from contourpy.enum_util import as_fill_type, as_line_type diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/typecheck.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/typecheck.py index 06a18f6cb..23fbd5485 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/typecheck.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/typecheck.py @@ -196,7 +196,7 @@ def check_lines(lines: cpy.LineReturn, line_type: LineType | str) -> None: if TYPE_CHECKING: lines = cast(cpy.LineReturn_ChunkCombinedNan, lines) _check_tuple_of_lists_with_same_length(lines, 1, allow_empty_lists=False) - for chunk, points_or_none in enumerate(lines[0]): + for _chunk, points_or_none in enumerate(lines[0]): if points_or_none is not None: check_point_array(points_or_none) else: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/__init__.cpython-312.pyc index 75974b6ca..38db10729 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/_build_config.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/_build_config.cpython-312.pyc index d84847187..d3692fdcb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/_build_config.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/_build_config.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_renderer.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_renderer.cpython-312.pyc index 57a55b49f..ad5df99d0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_renderer.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_renderer.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_util.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_util.cpython-312.pyc index 79f1ab0f3..7a5396b90 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_util.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/bokeh_util.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/data.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/data.cpython-312.pyc index b8f32739a..f08abf8b7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/data.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/data.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_renderer.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_renderer.cpython-312.pyc index 476828ca8..c8bb80bb8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_renderer.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_renderer.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_util.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_util.cpython-312.pyc index 3f29ca50c..8524a839b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_util.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/mpl_util.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/renderer.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/renderer.cpython-312.pyc index cfb900013..3f0e2ab4a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/renderer.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/__pycache__/renderer.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/_build_config.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/_build_config.py index 313304a85..1719572a9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/_build_config.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/_build_config.py @@ -16,22 +16,22 @@ def build_config() -> dict[str, str]: # Python settings python_version="3.12", python_install_dir=r"/usr/local/lib/python3.12/site-packages/", - python_path=r"/tmp/build-env-93hl6gjg/bin/python", + python_path=r"/tmp/build-env-63gj_onc/bin/python", # Package versions - contourpy_version="1.2.0", - meson_version="1.2.3", + contourpy_version="1.2.1", + meson_version="1.4.0", mesonpy_version="0.15.0", - pybind11_version="2.11.1", + pybind11_version="2.12.0", # Misc meson settings meson_backend="ninja", - build_dir=r"/project/.mesonpy-_bp879s6/lib/contourpy/util", + build_dir=r"/project/.mesonpy-5b6b5mia/lib/contourpy/util", source_dir=r"/project/lib/contourpy/util", cross_build="False", # Build options - build_options=r"-Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dvsenv=True --native-file=/project/.mesonpy-_bp879s6/meson-python-native-file.ini", + build_options=r"-Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dvsenv=True --native-file=/project/.mesonpy-5b6b5mia/meson-python-native-file.ini", buildtype="release", cpp_std="c++17", debug="False", diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_renderer.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_renderer.py index c467fe9f7..85b0f8c40 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_renderer.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_renderer.py @@ -11,7 +11,6 @@ from bokeh.plotting import figure import numpy as np -from contourpy import FillType, LineType from contourpy.enum_util import as_fill_type, as_line_type from contourpy.util.bokeh_util import filled_to_bokeh, lines_to_bokeh from contourpy.util.renderer import Renderer @@ -22,6 +21,7 @@ from numpy.typing import ArrayLike from selenium.webdriver.remote.webdriver import WebDriver + from contourpy import FillType, LineType from contourpy._contourpy import FillReturn, LineReturn @@ -146,21 +146,21 @@ def grid( """ fig = self._get_figure(ax) x, y = self._grid_as_2d(x, y) - xs = [row for row in x] + [row for row in x.T] - ys = [row for row in y] + [row for row in y.T] - kwargs = dict(line_color=color, alpha=alpha) + xs = list(x) + list(x.T) + ys = list(y) + list(y.T) + kwargs = {"line_color": color, "alpha": alpha} fig.multi_line(xs, ys, **kwargs) if quad_as_tri_alpha > 0: # Assumes no quad mask. xmid = (0.25*(x[:-1, :-1] + x[1:, :-1] + x[:-1, 1:] + x[1:, 1:])).ravel() ymid = (0.25*(y[:-1, :-1] + y[1:, :-1] + y[:-1, 1:] + y[1:, 1:])).ravel() fig.multi_line( - [row for row in np.stack((x[:-1, :-1].ravel(), xmid, x[1:, 1:].ravel()), axis=1)], - [row for row in np.stack((y[:-1, :-1].ravel(), ymid, y[1:, 1:].ravel()), axis=1)], + list(np.stack((x[:-1, :-1].ravel(), xmid, x[1:, 1:].ravel()), axis=1)), + list(np.stack((y[:-1, :-1].ravel(), ymid, y[1:, 1:].ravel()), axis=1)), **kwargs) fig.multi_line( - [row for row in np.stack((x[:-1, 1:].ravel(), xmid, x[1:, :-1].ravel()), axis=1)], - [row for row in np.stack((y[:-1, 1:].ravel(), ymid, y[1:, :-1].ravel()), axis=1)], + list(np.stack((x[:-1, 1:].ravel(), xmid, x[1:, :-1].ravel()), axis=1)), + list(np.stack((y[:-1, 1:].ravel(), ymid, y[1:, :-1].ravel()), axis=1)), **kwargs) if point_color is not None: fig.circle( @@ -323,7 +323,7 @@ def z_values( x, y = self._grid_as_2d(x, y) z = np.asarray(z) ny, nx = z.shape - kwargs = dict(text_color=color, text_align="center", text_baseline="middle") + kwargs = {"text_color": color, "text_align": "center", "text_baseline": "middle"} for j in range(ny): for i in range(nx): fig.add_layout(Label(x=x[j, i], y=y[j, i], text=f"{z[j, i]:{fmt}}", **kwargs)) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_util.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_util.py index 80b9396ea..e75eb8445 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_util.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/bokeh_util.py @@ -9,7 +9,10 @@ if TYPE_CHECKING: from contourpy._contourpy import ( - CoordinateArray, FillReturn, LineReturn, LineReturn_ChunkCombinedNan, + CoordinateArray, + FillReturn, + LineReturn, + LineReturn_ChunkCombinedNan, ) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/mpl_renderer.py b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/mpl_renderer.py index 2d8997f2c..c459e02a9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/mpl_renderer.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/contourpy/util/mpl_renderer.py @@ -1,6 +1,5 @@ from __future__ import annotations -from collections.abc import Sequence import io from typing import TYPE_CHECKING, Any, cast @@ -15,6 +14,8 @@ from contourpy.util.renderer import Renderer if TYPE_CHECKING: + from collections.abc import Sequence + from matplotlib.axes import Axes from matplotlib.figure import Figure from numpy.typing import ArrayLike @@ -49,14 +50,15 @@ def __init__( gridspec_kw: dict[str, Any] | None = None, ) -> None: if backend is not None: - import matplotlib - matplotlib.use(backend) + import matplotlib as mpl + mpl.use(backend) - kwargs: dict[str, Any] = dict(figsize=figsize, squeeze=False, sharex=True, sharey=True) + kwargs: dict[str, Any] = {"figsize": figsize, "squeeze": False, + "sharex": True, "sharey": True} if gridspec_kw is not None: kwargs["gridspec_kw"] = gridspec_kw else: - kwargs["subplot_kw"] = dict(aspect="equal") + kwargs["subplot_kw"] = {"aspect": "equal"} self._fig, axes = plt.subplots(nrows, ncols, **kwargs) self._axes = axes.flatten() @@ -145,7 +147,7 @@ def grid( """ ax = self._get_ax(ax) x, y = self._grid_as_2d(x, y) - kwargs: dict[str, Any] = dict(color=color, alpha=alpha) + kwargs: dict[str, Any] = {"color": color, "alpha": alpha} ax.plot(x, y, x.T, y.T, **kwargs) if quad_as_tri_alpha > 0: # Assumes no quad mask. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/cycler/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/cycler/__pycache__/__init__.cpython-312.pyc index ebd2bf6fb..8a5ab2932 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/cycler/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/cycler/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/__init__.cpython-312.pyc index 29328c50c..b9d08d1cf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_common.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_common.cpython-312.pyc index 39a742773..84c2ebe2b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_common.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_common.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_version.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_version.cpython-312.pyc index 9ba6c6ce6..13e60fd7d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_version.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/_version.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/easter.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/easter.cpython-312.pyc index 28a228897..fa502af76 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/easter.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/easter.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/relativedelta.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/relativedelta.cpython-312.pyc index 05e513f5c..1c2957281 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/relativedelta.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/relativedelta.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/rrule.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/rrule.cpython-312.pyc index 852aeeff0..fd025cc23 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/rrule.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/rrule.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/tzwin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/tzwin.cpython-312.pyc index 4b1891b33..c908e6cb1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/tzwin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/tzwin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/utils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/utils.cpython-312.pyc index c1065c161..7b009f990 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/utils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/__pycache__/utils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/__init__.cpython-312.pyc index 61361454c..f6aa11b98 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/_parser.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/_parser.cpython-312.pyc index ba6357da5..443e1dd9c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/_parser.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/_parser.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/isoparser.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/isoparser.cpython-312.pyc index c69da5807..bc48e1ea8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/isoparser.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/parser/__pycache__/isoparser.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/__init__.cpython-312.pyc index c6fb04ba8..c106bd638 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_common.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_common.cpython-312.pyc index 4e5272e42..ac986c1e6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_common.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_common.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_factories.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_factories.cpython-312.pyc index f4152f00e..252d55ecd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_factories.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/_factories.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/tz.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/tz.cpython-312.pyc index 26b11022e..0e7a80f04 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/tz.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/tz.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/win.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/win.cpython-312.pyc index acc2ba921..7e1f4cffe 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/win.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/tz/__pycache__/win.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc index 3f22a4996..bcb7177f9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc index b1525d2a7..c1679830f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/dateutil/zoneinfo/__pycache__/rebuild.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__init__.py b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__init__.py index ead49e26c..5621f391f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__init__.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__init__.py @@ -3,6 +3,6 @@ log = logging.getLogger(__name__) -version = __version__ = "4.50.0" +version = __version__ = "4.51.0" __all__ = ["version", "log", "configLogger"] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__init__.cpython-312.pyc index 4374b6ea5..7449efef3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__main__.cpython-312.pyc index 0fe7e7f35..322b12283 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/afmLib.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/afmLib.cpython-312.pyc index 7eaf489d7..89ba3ed7a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/afmLib.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/afmLib.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/agl.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/agl.cpython-312.pyc index 14fc7919d..e83f5bcef 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/agl.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/agl.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/fontBuilder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/fontBuilder.cpython-312.pyc index 02370726c..84f9cdb1c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/fontBuilder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/fontBuilder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/help.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/help.cpython-312.pyc index bdc7cbaf6..cf630c296 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/help.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/help.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/tfmLib.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/tfmLib.cpython-312.pyc index 4cf3cbcf0..aea886d1b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/tfmLib.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/tfmLib.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/ttx.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/ttx.cpython-312.pyc index 1138733f3..ccf5a5b79 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/ttx.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/ttx.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/unicode.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/unicode.cpython-312.pyc index c714e8784..ffcd75ac8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/unicode.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/__pycache__/unicode.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/__init__.cpython-312.pyc index 251569700..79f61441a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/specializer.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/specializer.cpython-312.pyc index 499d8ff39..97d2e45cb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/specializer.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/specializer.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/width.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/width.cpython-312.pyc index 76abf9989..783daa882 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/width.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cffLib/__pycache__/width.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/__init__.cpython-312.pyc index 1cff629ae..221c2ce4d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/builder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/builder.cpython-312.pyc index 30ffdd80b..38dadf76a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/builder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/builder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/errors.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/errors.cpython-312.pyc index 20367269b..29f52e98b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/errors.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/errors.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/geometry.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/geometry.cpython-312.pyc index 103ea7f89..7bc6bb396 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/geometry.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/geometry.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/table_builder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/table_builder.cpython-312.pyc index e7040765c..26aa6b399 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/table_builder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/table_builder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/unbuilder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/unbuilder.cpython-312.pyc index 4547ed688..94ccb9348 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/unbuilder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/colorLib/__pycache__/unbuilder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/config/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/config/__pycache__/__init__.cpython-312.pyc index 36962450e..9b629c28a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/config/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/config/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__init__.cpython-312.pyc index 751a3177d..bde292342 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__main__.cpython-312.pyc index 10da0a6bd..df66dc7c1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/benchmark.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/benchmark.cpython-312.pyc index aeda8c619..c95d7c7c5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/benchmark.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/benchmark.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cli.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cli.cpython-312.pyc index 493481a84..7591baa5d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cli.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cli.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cu2qu.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cu2qu.cpython-312.pyc index 0df7b5e71..9c547b12d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cu2qu.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/cu2qu.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/errors.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/errors.cpython-312.pyc index 97ea4e469..bf6d28009 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/errors.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/errors.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/ufo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/ufo.cpython-312.pyc index 12620ed2d..9b3e6db42 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/ufo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/__pycache__/ufo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.c b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.c index ecf6e4930..bd33633b4 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.c @@ -1,4 +1,4 @@ -/* Generated by Cython 3.0.9 */ +/* Generated by Cython 3.0.10 */ /* BEGIN: Cython Metadata { @@ -42,10 +42,10 @@ END: Cython Metadata */ #else #define __PYX_EXTRA_ABI_MODULE_NAME "" #endif -#define CYTHON_ABI "3_0_9" __PYX_EXTRA_ABI_MODULE_NAME +#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." -#define CYTHON_HEX_VERSION 0x030009F0 +#define CYTHON_HEX_VERSION 0x03000AF0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -137,6 +137,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -198,6 +200,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(CYTHON_LIMITED_API) #ifdef Py_LIMITED_API #undef __PYX_LIMITED_VERSION_HEX @@ -259,6 +263,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -268,11 +274,17 @@ END: Cython Metadata */ #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -280,8 +292,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -293,11 +303,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -305,6 +326,12 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 @@ -395,6 +422,9 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) @@ -7333,8 +7363,10 @@ static PyObject *__pyx_pf_9fontTools_5cu2qu_5cu2qu_5curves_to_quadratic(CYTHON_U return __pyx_r; } +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen *__pyx_freelist_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen[8]; static int __pyx_freecount_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -7342,7 +7374,7 @@ static PyObject *__pyx_tp_new_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___spli allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen)))) { o = (PyObject*)__pyx_freelist_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen[--__pyx_freecount_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen)); @@ -7365,7 +7397,7 @@ static void __pyx_tp_dealloc_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split } } #endif - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen)))) { __pyx_freelist_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen[__pyx_freecount_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen++] = ((struct __pyx_obj_9fontTools_5cu2qu_5cu2qu___pyx_scope_struct___split_cubic_into_n_gen *)o); } else diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.cpython-312-x86_64-linux-gnu.so index a0a2a08ec..ee250910a 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/cu2qu/cu2qu.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__init__.cpython-312.pyc index 6e926e00e..87b9f73a0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__main__.cpython-312.pyc index 30a437b0b..5c81d8e2e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/split.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/split.cpython-312.pyc index bb66c5cd8..043e3abd4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/split.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/split.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/statNames.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/statNames.cpython-312.pyc index 701c57ffa..c6affdebd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/statNames.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/statNames.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/types.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/types.cpython-312.pyc index d7dcdfaaf..07f6620cc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/types.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/designspaceLib/__pycache__/types.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/MacRoman.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/MacRoman.cpython-312.pyc index 1fb5d00ac..724c9b729 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/MacRoman.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/MacRoman.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/StandardEncoding.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/StandardEncoding.cpython-312.pyc index b3adb1143..230a95b5d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/StandardEncoding.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/StandardEncoding.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/__init__.cpython-312.pyc index 00d07534e..658067732 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/codecs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/codecs.cpython-312.pyc index 32e01cfce..34b2ff7fa 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/codecs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/encodings/__pycache__/codecs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__init__.cpython-312.pyc index 7be155824..ae06e34cd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__main__.cpython-312.pyc index 92112f027..5d9433218 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/ast.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/ast.cpython-312.pyc index 74b1ba986..efd9cb628 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/ast.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/ast.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/builder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/builder.cpython-312.pyc index ede025f3d..c78c727db 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/builder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/builder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/error.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/error.cpython-312.pyc index e5f139e57..d2bb4cce1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/error.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/error.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lexer.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lexer.cpython-312.pyc index f7681ec58..6f71ab54e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lexer.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lexer.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/location.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/location.cpython-312.pyc index 6b21526dc..9c1d3bd65 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/location.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/location.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lookupDebugInfo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lookupDebugInfo.cpython-312.pyc index 5cf5e2657..d3238a364 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lookupDebugInfo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/lookupDebugInfo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/parser.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/parser.cpython-312.pyc index 88d2479be..fbd17a67d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/parser.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/parser.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/variableScalar.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/variableScalar.cpython-312.pyc index b8005810f..33e3d0732 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/variableScalar.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/__pycache__/variableScalar.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.c b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.c index 657aaa84d..f2358bb04 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.c @@ -1,4 +1,4 @@ -/* Generated by Cython 3.0.9 */ +/* Generated by Cython 3.0.10 */ /* BEGIN: Cython Metadata { @@ -36,10 +36,10 @@ END: Cython Metadata */ #else #define __PYX_EXTRA_ABI_MODULE_NAME "" #endif -#define CYTHON_ABI "3_0_9" __PYX_EXTRA_ABI_MODULE_NAME +#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." -#define CYTHON_HEX_VERSION 0x030009F0 +#define CYTHON_HEX_VERSION 0x03000AF0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -131,6 +131,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -192,6 +194,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(CYTHON_LIMITED_API) #ifdef Py_LIMITED_API #undef __PYX_LIMITED_VERSION_HEX @@ -253,6 +257,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -262,11 +268,17 @@ END: Cython Metadata */ #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -274,8 +286,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -287,11 +297,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -299,6 +320,12 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 @@ -389,6 +416,9 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.cpython-312-x86_64-linux-gnu.so index 4e0cf13fa..9c0837cb5 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/feaLib/lexer.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__init__.cpython-312.pyc index edb150d2f..ed254f9ed 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__main__.cpython-312.pyc index be0842453..a37d091df 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/base.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/base.cpython-312.pyc index 15036c38d..f7a1bce55 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/base.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/base.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/cmap.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/cmap.cpython-312.pyc index 8faedcf5d..dfe30e4e1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/cmap.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/cmap.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/layout.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/layout.cpython-312.pyc index 3bcf0e917..38ca9c68c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/layout.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/layout.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/options.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/options.cpython-312.pyc index da54987de..7e7b00e34 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/options.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/options.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/tables.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/tables.cpython-312.pyc index c8a25b77b..ed3f9e9b7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/tables.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/tables.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/unicode.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/unicode.cpython-312.pyc index 096ec34d3..9783a5fb0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/unicode.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/unicode.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/util.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/util.cpython-312.pyc index 1ef2194f6..3df7c3fcf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/util.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/merge/__pycache__/util.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/__init__.cpython-312.pyc index 5d4f6c7f1..50619cebe 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/arrayTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/arrayTools.cpython-312.pyc index 1cdebe220..a172529ff 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/arrayTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/arrayTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/bezierTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/bezierTools.cpython-312.pyc index 0dc9275b0..813c8c08a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/bezierTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/bezierTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/classifyTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/classifyTools.cpython-312.pyc index 5871dfc18..d60e08eb0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/classifyTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/classifyTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cliTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cliTools.cpython-312.pyc index 7efa129dc..65a409a4c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cliTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cliTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/configTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/configTools.cpython-312.pyc index c4836c849..a06c90bd8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/configTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/configTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cython.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cython.cpython-312.pyc index 64bd72660..c736b06f6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cython.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/cython.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/dictTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/dictTools.cpython-312.pyc index 1bcc3cebc..1db41ab96 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/dictTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/dictTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/eexec.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/eexec.cpython-312.pyc index 26bf0f2a9..51f5a9ce0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/eexec.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/eexec.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/encodingTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/encodingTools.cpython-312.pyc index 253017b5e..5b8e2041d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/encodingTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/encodingTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/etree.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/etree.cpython-312.pyc index 2cf5411eb..9bf0d6383 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/etree.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/etree.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/filenames.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/filenames.cpython-312.pyc index dec76204c..a8b20337a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/filenames.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/filenames.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/fixedTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/fixedTools.cpython-312.pyc index 6af043cc5..c083e6aae 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/fixedTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/fixedTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/intTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/intTools.cpython-312.pyc index d33966f8c..14bfd280d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/intTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/intTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/loggingTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/loggingTools.cpython-312.pyc index 35db547fb..c0b461eff 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/loggingTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/loggingTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macCreatorType.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macCreatorType.cpython-312.pyc index 63edc6c61..8946e2c07 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macCreatorType.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macCreatorType.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macRes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macRes.cpython-312.pyc index e20d75b63..917bf4992 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macRes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/macRes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psCharStrings.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psCharStrings.cpython-312.pyc index f2cc825ed..f8a82ddaa 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psCharStrings.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psCharStrings.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psLib.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psLib.cpython-312.pyc index 73aca25e5..39161050b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psLib.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psLib.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psOperators.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psOperators.cpython-312.pyc index d56fb2610..eaa3001d5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psOperators.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/psOperators.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/py23.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/py23.cpython-312.pyc index 93f754ed1..b000e3b47 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/py23.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/py23.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/roundTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/roundTools.cpython-312.pyc index 9f86ddd77..664e9daeb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/roundTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/roundTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/sstruct.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/sstruct.cpython-312.pyc index 285b48554..b0f793f7c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/sstruct.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/sstruct.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/symfont.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/symfont.cpython-312.pyc index 102da07a1..2c324d023 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/symfont.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/symfont.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/testTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/testTools.cpython-312.pyc index e7c908c03..182981feb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/testTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/testTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/textTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/textTools.cpython-312.pyc index 73c875dfc..43f7b2e9e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/textTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/textTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/timeTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/timeTools.cpython-312.pyc index 769a009a8..9e16ad76b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/timeTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/timeTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/transform.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/transform.cpython-312.pyc index be9d7584c..50a5cdc74 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/transform.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/transform.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/treeTools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/treeTools.cpython-312.pyc index edf04cb05..9a2b9142a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/treeTools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/treeTools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/vector.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/vector.cpython-312.pyc index b24065ce7..b61d7424b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/vector.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/vector.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/visitor.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/visitor.cpython-312.pyc index 8d40d663d..467596b60 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/visitor.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/visitor.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlReader.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlReader.cpython-312.pyc index 6b74a7e3e..d249063a7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlReader.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlReader.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlWriter.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlWriter.cpython-312.pyc index fbd902b6c..6e5aa78e2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlWriter.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/__pycache__/xmlWriter.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.c b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.c index ded28a712..1c76f6e4c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.c @@ -1,4 +1,4 @@ -/* Generated by Cython 3.0.9 */ +/* Generated by Cython 3.0.10 */ /* BEGIN: Cython Metadata { @@ -36,10 +36,10 @@ END: Cython Metadata */ #else #define __PYX_EXTRA_ABI_MODULE_NAME "" #endif -#define CYTHON_ABI "3_0_9" __PYX_EXTRA_ABI_MODULE_NAME +#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." -#define CYTHON_HEX_VERSION 0x030009F0 +#define CYTHON_HEX_VERSION 0x03000AF0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -131,6 +131,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -192,6 +194,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(CYTHON_LIMITED_API) #ifdef Py_LIMITED_API #undef __PYX_LIMITED_VERSION_HEX @@ -253,6 +257,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -262,11 +268,17 @@ END: Cython Metadata */ #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -274,8 +286,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -287,11 +297,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -299,6 +320,12 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 @@ -389,6 +416,9 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) @@ -30323,8 +30353,10 @@ static PyObject *__pyx_pf_9fontTools_4misc_11bezierTools_94printSegments(CYTHON_ return __pyx_r; } +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -30332,7 +30364,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr)); @@ -30360,7 +30392,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct__ PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_t); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct__genexpr *)o); } else @@ -30486,8 +30518,10 @@ static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -30495,7 +30529,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr)); @@ -30523,7 +30557,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_1 PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_t); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_1_genexpr *)o); } else @@ -30649,8 +30683,10 @@ static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -30658,7 +30694,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC)); @@ -30685,7 +30721,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_2 #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_v_ts); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_2_splitCubicAtTC *)o); } else @@ -30808,8 +30844,10 @@ static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -30817,7 +30855,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC)); @@ -30850,7 +30888,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_3 Py_CLEAR(p->__pyx_v_pt4); Py_CLEAR(p->__pyx_v_ts); Py_CLEAR(p->__pyx_t_0); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_3__splitCubicAtTC *)o); } else @@ -30991,8 +31029,10 @@ static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -31000,7 +31040,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr)); @@ -31028,7 +31068,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_4 PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_i); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_4_genexpr *)o); } else @@ -31154,8 +31194,10 @@ static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -31163,7 +31205,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t)); @@ -31190,7 +31232,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_5 #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_v_precision); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_5__curve_curve_intersections_t *)o); } else @@ -31323,8 +31365,10 @@ static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -31332,7 +31376,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr)); @@ -31360,7 +31404,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_6 PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_p); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_6_genexpr *)o); } else @@ -31486,8 +31530,10 @@ static PyTypeObject __pyx_type_9fontTools_4misc_11bezierTools___pyx_scope_struct }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr[8]; static int __pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -31495,7 +31541,7 @@ static PyObject *__pyx_tp_new_9fontTools_4misc_11bezierTools___pyx_scope_struct_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr[--__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr)); @@ -31523,7 +31569,7 @@ static void __pyx_tp_dealloc_9fontTools_4misc_11bezierTools___pyx_scope_struct_7 PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_x); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr)))) { __pyx_freelist_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr[__pyx_freecount_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr++] = ((struct __pyx_obj_9fontTools_4misc_11bezierTools___pyx_scope_struct_7_genexpr *)o); } else diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.cpython-312-x86_64-linux-gnu.so index 92282cec6..631c4c73b 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/bezierTools.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/plistlib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/plistlib/__pycache__/__init__.cpython-312.pyc index 279221eba..c703d3f7d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/plistlib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/misc/plistlib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__init__.cpython-312.pyc index fe6fbe09c..90f5786d4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__main__.cpython-312.pyc index 1911dcdea..a85c815e1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/mtiLib/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/__init__.cpython-312.pyc index 8aa7a474d..14f8579f7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/builder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/builder.cpython-312.pyc index 1477cb43a..97d162346 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/builder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/builder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/error.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/error.cpython-312.pyc index fa4d7f3e8..de961aa8a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/error.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/error.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/maxContextCalc.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/maxContextCalc.cpython-312.pyc index 03c89a1d5..6d3411f39 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/maxContextCalc.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/__pycache__/maxContextCalc.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__init__.cpython-312.pyc index 274e7929c..05228cf04 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__main__.cpython-312.pyc index ad0dbfa09..2cef3574f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/gpos.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/gpos.cpython-312.pyc index dbae37e64..033070dfd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/gpos.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/otlLib/optimize/__pycache__/gpos.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/__init__.cpython-312.pyc index 2751881e5..767d9247e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/areaPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/areaPen.cpython-312.pyc index 6f5364b2e..bd821370e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/areaPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/areaPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/basePen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/basePen.cpython-312.pyc index 83fb9bede..3cfb1da84 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/basePen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/basePen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/boundsPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/boundsPen.cpython-312.pyc index d89009e0d..6a4bbd87e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/boundsPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/boundsPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cairoPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cairoPen.cpython-312.pyc index 6e4512c41..c9e757fee 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cairoPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cairoPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cocoaPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cocoaPen.cpython-312.pyc index f659b7901..b335e5345 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cocoaPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cocoaPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cu2quPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cu2quPen.cpython-312.pyc index 17fa8eb2c..e48675769 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cu2quPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/cu2quPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/explicitClosingLinePen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/explicitClosingLinePen.cpython-312.pyc index 919cb9cd8..b752df6e5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/explicitClosingLinePen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/explicitClosingLinePen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/filterPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/filterPen.cpython-312.pyc index 475277c31..f5d05fe50 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/filterPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/filterPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/freetypePen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/freetypePen.cpython-312.pyc index bc8e103ec..891b7c44e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/freetypePen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/freetypePen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/hashPointPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/hashPointPen.cpython-312.pyc index f253e04f8..55c1cfb17 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/hashPointPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/hashPointPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/momentsPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/momentsPen.cpython-312.pyc index 4dc2189a3..31014c8b8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/momentsPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/momentsPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/perimeterPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/perimeterPen.cpython-312.pyc index 0823e0987..37f9eb96b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/perimeterPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/perimeterPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointInsidePen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointInsidePen.cpython-312.pyc index 4ade2ff31..22dd716dc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointInsidePen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointInsidePen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointPen.cpython-312.pyc index c3f679b6a..241995ac3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/pointPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qtPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qtPen.cpython-312.pyc index 2aac69734..e681d7c7c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qtPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qtPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qu2cuPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qu2cuPen.cpython-312.pyc index eb6cdc80c..4ebbc77e4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qu2cuPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/qu2cuPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/quartzPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/quartzPen.cpython-312.pyc index afbf8e11b..5f4fec34f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/quartzPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/quartzPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/recordingPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/recordingPen.cpython-312.pyc index 82306e057..b823f6368 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/recordingPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/recordingPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reportLabPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reportLabPen.cpython-312.pyc index 0fabbf52e..4b714d18c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reportLabPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reportLabPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reverseContourPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reverseContourPen.cpython-312.pyc index 88601cff3..7cdc96eb3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reverseContourPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/reverseContourPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/roundingPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/roundingPen.cpython-312.pyc index 4930dd9ce..db53025d4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/roundingPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/roundingPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/statisticsPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/statisticsPen.cpython-312.pyc index a29b21057..28f75af52 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/statisticsPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/statisticsPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/svgPathPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/svgPathPen.cpython-312.pyc index f545d2941..16a1cf06c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/svgPathPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/svgPathPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/t2CharStringPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/t2CharStringPen.cpython-312.pyc index b984faa1c..342458a31 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/t2CharStringPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/t2CharStringPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/teePen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/teePen.cpython-312.pyc index 313559989..ddedb8aa5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/teePen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/teePen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/transformPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/transformPen.cpython-312.pyc index 8c919e8ca..4d3edc9a4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/transformPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/transformPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/ttGlyphPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/ttGlyphPen.cpython-312.pyc index 55561ed3b..3fefdeb96 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/ttGlyphPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/ttGlyphPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/wxPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/wxPen.cpython-312.pyc index fdccae7c1..4cdbb825d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/wxPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/__pycache__/wxPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.c b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.c index cf0861632..ea11bb9aa 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.c @@ -1,4 +1,4 @@ -/* Generated by Cython 3.0.9 */ +/* Generated by Cython 3.0.10 */ /* BEGIN: Cython Metadata { @@ -36,10 +36,10 @@ END: Cython Metadata */ #else #define __PYX_EXTRA_ABI_MODULE_NAME "" #endif -#define CYTHON_ABI "3_0_9" __PYX_EXTRA_ABI_MODULE_NAME +#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." -#define CYTHON_HEX_VERSION 0x030009F0 +#define CYTHON_HEX_VERSION 0x03000AF0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -131,6 +131,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -192,6 +194,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(CYTHON_LIMITED_API) #ifdef Py_LIMITED_API #undef __PYX_LIMITED_VERSION_HEX @@ -253,6 +257,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -262,11 +268,17 @@ END: Cython Metadata */ #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -274,8 +286,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -287,11 +297,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -299,6 +320,12 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 @@ -389,6 +416,9 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.cpython-312-x86_64-linux-gnu.so index 683f4882e..20cbdf6cc 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/pens/momentsPen.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__init__.cpython-312.pyc index 407f1a0ff..f146a318a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__main__.cpython-312.pyc index 3ae4b3379..76bcd6318 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/benchmark.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/benchmark.cpython-312.pyc index 5bd704958..4d42dfa11 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/benchmark.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/benchmark.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/cli.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/cli.cpython-312.pyc index 2535e5808..ffa132955 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/cli.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/cli.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/qu2cu.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/qu2cu.cpython-312.pyc index 0d99d6f30..f40c63629 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/qu2cu.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/__pycache__/qu2cu.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.c b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.c index 3ded79b99..d7400043c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.c @@ -1,4 +1,4 @@ -/* Generated by Cython 3.0.9 */ +/* Generated by Cython 3.0.10 */ /* BEGIN: Cython Metadata { @@ -42,10 +42,10 @@ END: Cython Metadata */ #else #define __PYX_EXTRA_ABI_MODULE_NAME "" #endif -#define CYTHON_ABI "3_0_9" __PYX_EXTRA_ABI_MODULE_NAME +#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." -#define CYTHON_HEX_VERSION 0x030009F0 +#define CYTHON_HEX_VERSION 0x03000AF0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -137,6 +137,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -198,6 +200,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(CYTHON_LIMITED_API) #ifdef Py_LIMITED_API #undef __PYX_LIMITED_VERSION_HEX @@ -259,6 +263,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -268,11 +274,17 @@ END: Cython Metadata */ #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -280,8 +292,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -293,11 +303,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -305,6 +326,12 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 @@ -395,6 +422,9 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) @@ -8041,8 +8071,10 @@ static PyObject *__pyx_pf_9fontTools_5qu2cu_5qu2cu_8main(CYTHON_UNUSED PyObject return __pyx_r; } +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr *__pyx_freelist_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr[8]; static int __pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -8050,7 +8082,7 @@ static PyObject *__pyx_tp_new_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genex allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr[--__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr)); @@ -8079,7 +8111,7 @@ static void __pyx_tp_dealloc_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexp Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_c); Py_CLEAR(p->__pyx_t_0); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr)))) { __pyx_freelist_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr[__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr++] = ((struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__genexpr *)o); } else @@ -8208,8 +8240,10 @@ static PyTypeObject __pyx_type_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct__gene }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr *__pyx_freelist_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr[8]; static int __pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -8217,7 +8251,7 @@ static PyObject *__pyx_tp_new_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_gene allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr[--__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr)); @@ -8245,7 +8279,7 @@ static void __pyx_tp_dealloc_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genex PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_t_0); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr)))) { __pyx_freelist_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr[__pyx_freecount_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_9fontTools_5qu2cu_5qu2cu___pyx_scope_struct_1_genexpr *)o); } else diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.cpython-312-x86_64-linux-gnu.so index 0545805fc..19abf2231 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/qu2cu/qu2cu.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__init__.cpython-312.pyc index c66bc61fc..34d0ff1b9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__main__.cpython-312.pyc index d33f1f6e4..63372b786 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/cff.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/cff.cpython-312.pyc index d0303f4a8..6cd40c89b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/cff.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/cff.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/svg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/svg.cpython-312.pyc index 09c563778..64a36605b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/svg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/svg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/util.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/util.cpython-312.pyc index 53de85ecf..15dba7d12 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/util.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/subset/__pycache__/util.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/__pycache__/__init__.cpython-312.pyc index 18604af59..3233c2e64 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/__init__.cpython-312.pyc index d6de7867d..0265623cc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/arc.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/arc.cpython-312.pyc index 3980dc1a3..a5f9b7a86 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/arc.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/arc.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/parser.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/parser.cpython-312.pyc index 18badd474..53479890c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/parser.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/parser.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/shapes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/shapes.cpython-312.pyc index eee3c3653..87607a766 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/shapes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/svgLib/path/__pycache__/shapes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/t1Lib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/t1Lib/__pycache__/__init__.cpython-312.pyc index 6deb649cb..7cf31b3c1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/t1Lib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/t1Lib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__init__.cpython-312.pyc index c28230d5b..46e3f5059 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__main__.cpython-312.pyc index f9438d055..30e18c8d7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/macUtils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/macUtils.cpython-312.pyc index 93ab7f91e..b73195ec4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/macUtils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/macUtils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/removeOverlaps.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/removeOverlaps.cpython-312.pyc index 55fd41733..e7b8a2cfd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/removeOverlaps.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/removeOverlaps.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/reorderGlyphs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/reorderGlyphs.cpython-312.pyc new file mode 100644 index 000000000..79c726ca0 Binary files /dev/null and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/reorderGlyphs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/scaleUpem.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/scaleUpem.cpython-312.pyc index 955c88852..4cbcb07cd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/scaleUpem.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/scaleUpem.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/sfnt.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/sfnt.cpython-312.pyc index 90fdad956..e39587679 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/sfnt.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/sfnt.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/standardGlyphOrder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/standardGlyphOrder.cpython-312.pyc index cb99278bc..12519d16d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/standardGlyphOrder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/standardGlyphOrder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttCollection.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttCollection.cpython-312.pyc index d15e5c485..9f06c89c9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttCollection.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttCollection.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttFont.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttFont.cpython-312.pyc index 49453197d..57b456a46 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttFont.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttFont.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttGlyphSet.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttGlyphSet.cpython-312.pyc index f754b2cb4..fbe425749 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttGlyphSet.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttGlyphSet.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttVisitor.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttVisitor.cpython-312.pyc index 7330985b6..2d3baf77f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttVisitor.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/ttVisitor.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/woff2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/woff2.cpython-312.pyc index 89b9b6564..877d4a00b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/woff2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/__pycache__/woff2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/reorderGlyphs.py b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/reorderGlyphs.py new file mode 100644 index 000000000..3221261f1 --- /dev/null +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/reorderGlyphs.py @@ -0,0 +1,278 @@ +"""Reorder glyphs in a font.""" + +__author__ = "Rod Sheeter" + +# See https://docs.google.com/document/d/1h9O-C_ndods87uY0QeIIcgAMiX2gDTpvO_IhMJsKAqs/ +# for details. + + +from fontTools import ttLib +from fontTools.ttLib.tables import otBase +from fontTools.ttLib.tables import otTables as ot +from abc import ABC, abstractmethod +from dataclasses import dataclass +from collections import deque +from typing import ( + Optional, + Any, + Callable, + Deque, + Iterable, + List, + NamedTuple, + Tuple, + Union, +) + + +_COVERAGE_ATTR = "Coverage" # tables that have one coverage use this name + + +def _sort_by_gid( + get_glyph_id: Callable[[str], int], + glyphs: List[str], + parallel_list: Optional[List[Any]], +): + if parallel_list: + reordered = sorted( + ((g, e) for g, e in zip(glyphs, parallel_list)), + key=lambda t: get_glyph_id(t[0]), + ) + sorted_glyphs, sorted_parallel_list = map(list, zip(*reordered)) + parallel_list[:] = sorted_parallel_list + else: + sorted_glyphs = sorted(glyphs, key=get_glyph_id) + + glyphs[:] = sorted_glyphs + + +def _get_dotted_attr(value: Any, dotted_attr: str) -> Any: + attr_names = dotted_attr.split(".") + assert attr_names + + while attr_names: + attr_name = attr_names.pop(0) + value = getattr(value, attr_name) + return value + + +class ReorderRule(ABC): + """A rule to reorder something in a font to match the fonts glyph order.""" + + @abstractmethod + def apply(self, font: ttLib.TTFont, value: otBase.BaseTable) -> None: ... + + +@dataclass(frozen=True) +class ReorderCoverage(ReorderRule): + """Reorder a Coverage table, and optionally a list that is sorted parallel to it.""" + + # A list that is parallel to Coverage + parallel_list_attr: Optional[str] = None + coverage_attr: str = _COVERAGE_ATTR + + def apply(self, font: ttLib.TTFont, value: otBase.BaseTable) -> None: + coverage = _get_dotted_attr(value, self.coverage_attr) + + if type(coverage) is not list: + # Normal path, process one coverage that might have a parallel list + parallel_list = None + if self.parallel_list_attr: + parallel_list = _get_dotted_attr(value, self.parallel_list_attr) + assert ( + type(parallel_list) is list + ), f"{self.parallel_list_attr} should be a list" + assert len(parallel_list) == len(coverage.glyphs), "Nothing makes sense" + + _sort_by_gid(font.getGlyphID, coverage.glyphs, parallel_list) + + else: + # A few tables have a list of coverage. No parallel list can exist. + assert ( + not self.parallel_list_attr + ), f"Can't have multiple coverage AND a parallel list; {self}" + for coverage_entry in coverage: + _sort_by_gid(font.getGlyphID, coverage_entry.glyphs, None) + + +@dataclass(frozen=True) +class ReorderList(ReorderRule): + """Reorder the items within a list to match the updated glyph order. + + Useful when a list ordered by coverage itself contains something ordered by a gid. + For example, the PairSet table of https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-2-pair-adjustment-positioning-subtable. + """ + + list_attr: str + key: str + + def apply(self, font: ttLib.TTFont, value: otBase.BaseTable) -> None: + lst = _get_dotted_attr(value, self.list_attr) + assert isinstance(lst, list), f"{self.list_attr} should be a list" + lst.sort(key=lambda v: font.getGlyphID(getattr(v, self.key))) + + +# (Type, Optional Format) => List[ReorderRule] +# Encodes the relationships Cosimo identified +_REORDER_RULES = { + # GPOS + (ot.SinglePos, 1): [ReorderCoverage()], + (ot.SinglePos, 2): [ReorderCoverage(parallel_list_attr="Value")], + (ot.PairPos, 1): [ReorderCoverage(parallel_list_attr="PairSet")], + (ot.PairSet, None): [ReorderList("PairValueRecord", key="SecondGlyph")], + (ot.PairPos, 2): [ReorderCoverage()], + (ot.CursivePos, 1): [ReorderCoverage(parallel_list_attr="EntryExitRecord")], + (ot.MarkBasePos, 1): [ + ReorderCoverage( + coverage_attr="MarkCoverage", parallel_list_attr="MarkArray.MarkRecord" + ), + ReorderCoverage( + coverage_attr="BaseCoverage", parallel_list_attr="BaseArray.BaseRecord" + ), + ], + (ot.MarkLigPos, 1): [ + ReorderCoverage( + coverage_attr="MarkCoverage", parallel_list_attr="MarkArray.MarkRecord" + ), + ReorderCoverage( + coverage_attr="LigatureCoverage", + parallel_list_attr="LigatureArray.LigatureAttach", + ), + ], + (ot.MarkMarkPos, 1): [ + ReorderCoverage( + coverage_attr="Mark1Coverage", parallel_list_attr="Mark1Array.MarkRecord" + ), + ReorderCoverage( + coverage_attr="Mark2Coverage", parallel_list_attr="Mark2Array.Mark2Record" + ), + ], + (ot.ContextPos, 1): [ReorderCoverage(parallel_list_attr="PosRuleSet")], + (ot.ContextPos, 2): [ReorderCoverage()], + (ot.ContextPos, 3): [ReorderCoverage()], + (ot.ChainContextPos, 1): [ReorderCoverage(parallel_list_attr="ChainPosRuleSet")], + (ot.ChainContextPos, 2): [ReorderCoverage()], + (ot.ChainContextPos, 3): [ + ReorderCoverage(coverage_attr="BacktrackCoverage"), + ReorderCoverage(coverage_attr="InputCoverage"), + ReorderCoverage(coverage_attr="LookAheadCoverage"), + ], + # GSUB + (ot.ContextSubst, 1): [ReorderCoverage(parallel_list_attr="SubRuleSet")], + (ot.ContextSubst, 2): [ReorderCoverage()], + (ot.ContextSubst, 3): [ReorderCoverage()], + (ot.ChainContextSubst, 1): [ReorderCoverage(parallel_list_attr="ChainSubRuleSet")], + (ot.ChainContextSubst, 2): [ReorderCoverage()], + (ot.ChainContextSubst, 3): [ + ReorderCoverage(coverage_attr="BacktrackCoverage"), + ReorderCoverage(coverage_attr="InputCoverage"), + ReorderCoverage(coverage_attr="LookAheadCoverage"), + ], + (ot.ReverseChainSingleSubst, 1): [ + ReorderCoverage(parallel_list_attr="Substitute"), + ReorderCoverage(coverage_attr="BacktrackCoverage"), + ReorderCoverage(coverage_attr="LookAheadCoverage"), + ], + # GDEF + (ot.AttachList, None): [ReorderCoverage(parallel_list_attr="AttachPoint")], + (ot.LigCaretList, None): [ReorderCoverage(parallel_list_attr="LigGlyph")], + (ot.MarkGlyphSetsDef, None): [ReorderCoverage()], + # MATH + (ot.MathGlyphInfo, None): [ReorderCoverage(coverage_attr="ExtendedShapeCoverage")], + (ot.MathItalicsCorrectionInfo, None): [ + ReorderCoverage(parallel_list_attr="ItalicsCorrection") + ], + (ot.MathTopAccentAttachment, None): [ + ReorderCoverage( + coverage_attr="TopAccentCoverage", parallel_list_attr="TopAccentAttachment" + ) + ], + (ot.MathKernInfo, None): [ + ReorderCoverage( + coverage_attr="MathKernCoverage", parallel_list_attr="MathKernInfoRecords" + ) + ], + (ot.MathVariants, None): [ + ReorderCoverage( + coverage_attr="VertGlyphCoverage", + parallel_list_attr="VertGlyphConstruction", + ), + ReorderCoverage( + coverage_attr="HorizGlyphCoverage", + parallel_list_attr="HorizGlyphConstruction", + ), + ], +} + + +# TODO Port to otTraverse + +SubTablePath = Tuple[otBase.BaseTable.SubTableEntry, ...] + + +def _bfs_base_table( + root: otBase.BaseTable, root_accessor: str +) -> Iterable[SubTablePath]: + yield from _traverse_ot_data( + root, root_accessor, lambda frontier, new: frontier.extend(new) + ) + + +# Given f(current frontier, new entries) add new entries to frontier +AddToFrontierFn = Callable[[Deque[SubTablePath], List[SubTablePath]], None] + + +def _traverse_ot_data( + root: otBase.BaseTable, root_accessor: str, add_to_frontier_fn: AddToFrontierFn +) -> Iterable[SubTablePath]: + # no visited because general otData is forward-offset only and thus cannot cycle + + frontier: Deque[SubTablePath] = deque() + frontier.append((otBase.BaseTable.SubTableEntry(root_accessor, root),)) + while frontier: + # path is (value, attr_name) tuples. attr_name is attr of parent to get value + path = frontier.popleft() + current = path[-1].value + + yield path + + new_entries = [] + for subtable_entry in current.iterSubTables(): + new_entries.append(path + (subtable_entry,)) + + add_to_frontier_fn(frontier, new_entries) + + +def reorderGlyphs(font: ttLib.TTFont, new_glyph_order: List[str]): + old_glyph_order = font.getGlyphOrder() + if len(new_glyph_order) != len(old_glyph_order): + raise ValueError( + f"New glyph order contains {len(new_glyph_order)} glyphs, " + f"but font has {len(old_glyph_order)} glyphs" + ) + + if set(old_glyph_order) != set(new_glyph_order): + raise ValueError( + "New glyph order does not contain the same set of glyphs as the font:\n" + f"* only in new: {set(new_glyph_order) - set(old_glyph_order)}\n" + f"* only in old: {set(old_glyph_order) - set(new_glyph_order)}" + ) + + # Changing the order of glyphs in a TTFont requires that all tables that use + # glyph indexes have been fully. + # Cf. https://github.com/fonttools/fonttools/issues/2060 + font.ensureDecompiled() + not_loaded = sorted(t for t in font.keys() if not font.isLoaded(t)) + if not_loaded: + raise ValueError(f"Everything should be loaded, following aren't: {not_loaded}") + + font.setGlyphOrder(new_glyph_order) + + coverage_containers = {"GDEF", "GPOS", "GSUB", "MATH"} + for tag in coverage_containers: + if tag in font.keys(): + for path in _bfs_base_table(font[tag].table, f'font["{tag}"]'): + value = path[-1].value + reorder_key = (type(value), getattr(value, "Format", None)) + for reorder in _REORDER_RULES.get(reorder_key, []): + reorder.apply(font, value) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/B_A_S_E_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/B_A_S_E_.cpython-312.pyc index bd50fea04..14c3d36c6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/B_A_S_E_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/B_A_S_E_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/BitmapGlyphMetrics.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/BitmapGlyphMetrics.cpython-312.pyc index e0487ebdc..6a60ec1f9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/BitmapGlyphMetrics.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/BitmapGlyphMetrics.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_D_T_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_D_T_.cpython-312.pyc index 5baf999d9..be1867224 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_D_T_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_D_T_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_L_C_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_L_C_.cpython-312.pyc index 65cba01b2..2adb47acf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_L_C_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_B_L_C_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F_.cpython-312.pyc index 2c61c8023..6e5f90edd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F__2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F__2.cpython-312.pyc index b1db2b1a3..1ee32cb1e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F__2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_F_F__2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_O_L_R_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_O_L_R_.cpython-312.pyc index f0510ff99..a3493f116 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_O_L_R_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_O_L_R_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_P_A_L_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_P_A_L_.cpython-312.pyc index 278b2dc6f..273f88d99 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_P_A_L_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/C_P_A_L_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D_S_I_G_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D_S_I_G_.cpython-312.pyc index 4e57a989e..4debe8110 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D_S_I_G_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D_S_I_G_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D__e_b_g.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D__e_b_g.cpython-312.pyc index 4c049a6ce..b293d6b8a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D__e_b_g.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/D__e_b_g.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/DefaultTable.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/DefaultTable.cpython-312.pyc index 1cbf934ea..9e1ea713b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/DefaultTable.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/DefaultTable.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_D_T_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_D_T_.cpython-312.pyc index 01054bf27..64ccd7c09 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_D_T_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_D_T_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_L_C_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_L_C_.cpython-312.pyc index 80efd889e..235a55da1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_L_C_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/E_B_L_C_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F_F_T_M_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F_F_T_M_.cpython-312.pyc index 9d607d328..ff7c127f3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F_F_T_M_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F_F_T_M_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F__e_a_t.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F__e_a_t.cpython-312.pyc index c1cdd8062..59754ae46 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F__e_a_t.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/F__e_a_t.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_D_E_F_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_D_E_F_.cpython-312.pyc index b0a8e70d1..948f5509e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_D_E_F_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_D_E_F_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_M_A_P_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_M_A_P_.cpython-312.pyc index 7b2774106..302b2e17e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_M_A_P_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_M_A_P_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_K_G_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_K_G_.cpython-312.pyc index 1d1eb898e..0a3967646 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_K_G_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_K_G_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_O_S_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_O_S_.cpython-312.pyc index 97ddde04d..5f57baf43 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_O_S_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_P_O_S_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_S_U_B_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_S_U_B_.cpython-312.pyc index 0a0246a24..e4a468fc5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_S_U_B_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G_S_U_B_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_a_t.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_a_t.cpython-312.pyc index 4f3a0d1ac..432dac25d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_a_t.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_a_t.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_o_c.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_o_c.cpython-312.pyc index 5414e1e2e..d295b0f72 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_o_c.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/G__l_o_c.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/H_V_A_R_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/H_V_A_R_.cpython-312.pyc index 8673305c5..6359d06fd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/H_V_A_R_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/H_V_A_R_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/J_S_T_F_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/J_S_T_F_.cpython-312.pyc index b00a2e275..c3a75f5ff 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/J_S_T_F_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/J_S_T_F_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/L_T_S_H_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/L_T_S_H_.cpython-312.pyc index b5d16473d..cfba82aa4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/L_T_S_H_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/L_T_S_H_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_A_T_H_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_A_T_H_.cpython-312.pyc index 8ee676eb3..d5ede4caf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_A_T_H_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_A_T_H_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_E_T_A_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_E_T_A_.cpython-312.pyc index 85a72ec9c..eb151f6ac 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_E_T_A_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_E_T_A_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_V_A_R_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_V_A_R_.cpython-312.pyc index 27e2d67c0..dadfd8759 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_V_A_R_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/M_V_A_R_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/O_S_2f_2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/O_S_2f_2.cpython-312.pyc index c50ff1471..05c2d8afe 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/O_S_2f_2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/O_S_2f_2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_I_N_G_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_I_N_G_.cpython-312.pyc index 86f924160..ffa95fc84 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_I_N_G_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_I_N_G_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_T_A_T_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_T_A_T_.cpython-312.pyc index ce65e3806..603188aea 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_T_A_T_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_T_A_T_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_V_G_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_V_G_.cpython-312.pyc index cd3a73ddc..b5b2f83e2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_V_G_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S_V_G_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_f.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_f.cpython-312.pyc index b1469126f..62fb4e63a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_f.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_f.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_l.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_l.cpython-312.pyc index 22da47d09..abf4aa651 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_l.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/S__i_l_l.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_B_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_B_.cpython-312.pyc index d836b209a..ad71067a8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_B_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_B_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_C_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_C_.cpython-312.pyc index 402d81bc2..a895f3962 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_C_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_C_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_D_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_D_.cpython-312.pyc index afbb01953..7f4a61866 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_D_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_D_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_J_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_J_.cpython-312.pyc index dd54a57fa..e29f4b47d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_J_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_J_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_P_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_P_.cpython-312.pyc index 645e9ff4c..bfdf1117f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_P_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_P_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_S_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_S_.cpython-312.pyc index d1078754d..ee2fff863 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_S_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_S_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_V_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_V_.cpython-312.pyc index 93900b981..b46af841f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_V_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I_V_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__0.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__0.cpython-312.pyc index 08c63d855..00686bb0d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__0.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__0.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__1.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__1.cpython-312.pyc index 85ca5c29e..53810f820 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__1.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__1.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__2.cpython-312.pyc index b7c1aa85b..53057dce8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__3.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__3.cpython-312.pyc index 368aa3506..dbe227556 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__3.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__3.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__5.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__5.cpython-312.pyc index 31a208f70..349e8e46a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__5.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_S_I__5.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_T_F_A_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_T_F_A_.cpython-312.pyc index dd7504fb7..91c85b299 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_T_F_A_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/T_T_F_A_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/TupleVariation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/TupleVariation.cpython-312.pyc index 837ad8dbc..72ce82812 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/TupleVariation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/TupleVariation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_D_M_X_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_D_M_X_.cpython-312.pyc index 7cb00e524..3ac3404dd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_D_M_X_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_D_M_X_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_O_R_G_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_O_R_G_.cpython-312.pyc index ee31ea546..144fe9d2f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_O_R_G_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_O_R_G_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_V_A_R_.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_V_A_R_.cpython-312.pyc index da3d28ef7..bc3941004 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_V_A_R_.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/V_V_A_R_.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/__init__.cpython-312.pyc index 73c766d73..f050fd237 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_n_k_r.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_n_k_r.cpython-312.pyc index 0381d8ad6..be7fda66c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_n_k_r.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_n_k_r.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_v_a_r.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_v_a_r.cpython-312.pyc index 3594f182b..90e66c9be 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_v_a_r.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_a_v_a_r.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_b_s_l_n.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_b_s_l_n.cpython-312.pyc index a51ae1db8..7616b2afa 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_b_s_l_n.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_b_s_l_n.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_i_d_g.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_i_d_g.cpython-312.pyc index 4496e486a..6aecef731 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_i_d_g.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_i_d_g.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_m_a_p.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_m_a_p.cpython-312.pyc index 3a03b31a0..26d1b9d4e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_m_a_p.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_m_a_p.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_a_r.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_a_r.cpython-312.pyc index be1121cfd..9b9ea6425 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_a_r.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_a_r.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_t.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_t.cpython-312.pyc index c492748f9..e5185173b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_t.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_c_v_t.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_e_a_t.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_e_a_t.cpython-312.pyc index 3ebe1173b..af779958c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_e_a_t.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_e_a_t.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_p_g_m.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_p_g_m.cpython-312.pyc index f543f3695..83e682f14 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_p_g_m.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_p_g_m.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_v_a_r.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_v_a_r.cpython-312.pyc index eed65a6bb..35b2876df 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_v_a_r.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_f_v_a_r.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_a_s_p.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_a_s_p.cpython-312.pyc index 3a0727872..5bbb78d09 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_a_s_p.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_a_s_p.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_c_i_d.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_c_i_d.cpython-312.pyc index 9f495381f..4bf771cc8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_c_i_d.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_c_i_d.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_l_y_f.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_l_y_f.cpython-312.pyc index f04bc847c..30cb34bb0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_l_y_f.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_l_y_f.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_v_a_r.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_v_a_r.cpython-312.pyc index 6addbb7dc..fe20827ee 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_v_a_r.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_g_v_a_r.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_d_m_x.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_d_m_x.cpython-312.pyc index 736ff0d6c..092888db6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_d_m_x.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_d_m_x.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_e_a_d.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_e_a_d.cpython-312.pyc index e8ad83cab..0fdeb73b0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_e_a_d.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_e_a_d.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_h_e_a.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_h_e_a.cpython-312.pyc index 7183c39cc..a020ae9cc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_h_e_a.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_h_e_a.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_m_t_x.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_m_t_x.cpython-312.pyc index ea063b076..863cac700 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_m_t_x.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_h_m_t_x.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_k_e_r_n.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_k_e_r_n.cpython-312.pyc index 92fb715be..3fe9bda23 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_k_e_r_n.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_k_e_r_n.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_c_a_r.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_c_a_r.cpython-312.pyc index 8a57be487..9d5b48f58 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_c_a_r.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_c_a_r.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_o_c_a.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_o_c_a.cpython-312.pyc index 058a18168..7612f14de 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_o_c_a.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_o_c_a.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_t_a_g.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_t_a_g.cpython-312.pyc index 0f5c09c5d..fdd34c8f9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_t_a_g.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_l_t_a_g.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_a_x_p.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_a_x_p.cpython-312.pyc index b54b78839..14333034c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_a_x_p.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_a_x_p.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_e_t_a.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_e_t_a.cpython-312.pyc index 9224bbcb5..51dfa003e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_e_t_a.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_e_t_a.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_t.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_t.cpython-312.pyc index 461a0c1f0..89e8bc992 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_t.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_t.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_x.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_x.cpython-312.pyc index 570cb0424..13ba52a4e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_x.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_m_o_r_x.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_n_a_m_e.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_n_a_m_e.cpython-312.pyc index 0ca7d85f9..b6d968058 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_n_a_m_e.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_n_a_m_e.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_o_p_b_d.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_o_p_b_d.cpython-312.pyc index 6f5565f9f..78492d23e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_o_p_b_d.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_o_p_b_d.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_o_s_t.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_o_s_t.cpython-312.pyc index cc4b35a54..c9248cf12 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_o_s_t.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_o_s_t.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_e_p.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_e_p.cpython-312.pyc index 2e76db802..f123e6d6d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_e_p.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_e_p.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_o_p.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_o_p.cpython-312.pyc index 938c1a7de..d4f3da09a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_o_p.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_p_r_o_p.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_s_b_i_x.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_s_b_i_x.cpython-312.pyc index 59d963c6e..35f9eca18 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_s_b_i_x.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_s_b_i_x.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_t_r_a_k.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_t_r_a_k.cpython-312.pyc index 364c52da2..427efd23d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_t_r_a_k.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_t_r_a_k.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_h_e_a.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_h_e_a.cpython-312.pyc index 56b5b9a6b..1893fcc90 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_h_e_a.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_h_e_a.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_m_t_x.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_m_t_x.cpython-312.pyc index 022c67714..31fc0f6a5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_m_t_x.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/_v_m_t_x.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/asciiTable.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/asciiTable.cpython-312.pyc index 6afa2dcc5..00967a563 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/asciiTable.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/asciiTable.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/grUtils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/grUtils.cpython-312.pyc index 0570dc4c8..fc4f96591 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/grUtils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/grUtils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otBase.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otBase.cpython-312.pyc index 94e1ceaa5..e3d489752 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otBase.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otBase.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otConverters.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otConverters.cpython-312.pyc index 9df4e5e81..b80a87eb2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otConverters.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otConverters.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otData.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otData.cpython-312.pyc index eb5ae43dd..cb07be2fd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otData.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otData.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTables.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTables.cpython-312.pyc index 8bf04d0d2..cc000de29 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTables.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTables.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTraverse.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTraverse.cpython-312.pyc index b3f2fd708..93b8ae78a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTraverse.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/otTraverse.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixGlyph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixGlyph.cpython-312.pyc index 7a6eda462..502bbe0e9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixGlyph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixGlyph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixStrike.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixStrike.cpython-312.pyc index 6b46dba67..3898e353f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixStrike.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/sbixStrike.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/ttProgram.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/ttProgram.cpython-312.pyc index 6f792ca4c..6d1e88dcc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/ttProgram.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/__pycache__/ttProgram.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/otConverters.py b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/otConverters.py index afe4e538f..a2f672567 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/otConverters.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/tables/otConverters.py @@ -153,6 +153,8 @@ def __init__(self, name, repeat, aux, tableClass=None, *, description=""): self.name = name self.repeat = repeat self.aux = aux + if self.aux and not self.repeat: + self.aux = compile(self.aux, "", "eval") self.tableClass = tableClass self.isCount = name.endswith("Count") or name in [ "DesignAxisRecordSize", diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/ttFont.py b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/ttFont.py index ad62a187d..52e048b5f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/ttFont.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ttLib/ttFont.py @@ -840,6 +840,11 @@ def getBestCmap( """ return self["cmap"].getBestCmap(cmapPreferences=cmapPreferences) + def reorderGlyphs(self, new_glyph_order): + from .reorderGlyphs import reorderGlyphs + + reorderGlyphs(self, new_glyph_order) + class GlyphOrder(object): """A pseudo table. The glyph order isn't in the font as a separate diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/__init__.cpython-312.pyc index 3fca11fbb..2856d5498 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/converters.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/converters.cpython-312.pyc index e3fd53fde..a97740b3d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/converters.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/converters.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/errors.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/errors.cpython-312.pyc index d43603b7e..45c2ca8f7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/errors.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/errors.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/etree.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/etree.cpython-312.pyc index 31783f6ec..f5aadb196 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/etree.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/etree.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/filenames.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/filenames.cpython-312.pyc index f7a6a1bb3..f4f35b1a3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/filenames.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/filenames.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/glifLib.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/glifLib.cpython-312.pyc index a51421af4..10aa16b8e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/glifLib.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/glifLib.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/kerning.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/kerning.cpython-312.pyc index f898f4013..90427031d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/kerning.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/kerning.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/plistlib.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/plistlib.cpython-312.pyc index 47d332979..786797c3d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/plistlib.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/plistlib.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/pointPen.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/pointPen.cpython-312.pyc index 8ae4daf5c..216afaf7b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/pointPen.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/pointPen.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/utils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/utils.cpython-312.pyc index cccbdc5ec..51672d6c0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/utils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/utils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/validators.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/validators.cpython-312.pyc index 9c8c2174c..6747b8c77 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/validators.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/ufoLib/__pycache__/validators.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Blocks.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Blocks.cpython-312.pyc index 5432cdfb0..773116ca7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Blocks.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Blocks.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/OTTags.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/OTTags.cpython-312.pyc index ba14c1d64..164ca7ec1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/OTTags.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/OTTags.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/ScriptExtensions.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/ScriptExtensions.cpython-312.pyc index 0b1970504..844150b93 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/ScriptExtensions.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/ScriptExtensions.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Scripts.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Scripts.cpython-312.pyc index 313cfd1f2..d359eab9c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Scripts.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/Scripts.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/__init__.cpython-312.pyc index 39c65ae3c..88a566156 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/unicodedata/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__init__.cpython-312.pyc index a96f7cbbe..d20ce6e7e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__main__.cpython-312.pyc index a789cafc0..895246a5c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avar.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avar.cpython-312.pyc index 477436cfc..2b699987c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avar.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avar.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avarPlanner.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avarPlanner.cpython-312.pyc index 1c4c29da0..a4eeb2ae7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avarPlanner.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/avarPlanner.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/builder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/builder.cpython-312.pyc index a5c1e4757..b0fac702a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/builder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/builder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/cff.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/cff.cpython-312.pyc index c65506513..129b3623d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/cff.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/cff.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/errors.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/errors.cpython-312.pyc index 3e8502e5b..b642abd0e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/errors.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/errors.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/featureVars.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/featureVars.cpython-312.pyc index 35322a171..a9fc96a32 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/featureVars.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/featureVars.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatable.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatable.cpython-312.pyc index f052070c3..824513581 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatable.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatable.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableHelpers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableHelpers.cpython-312.pyc index 602eca1b7..05a804510 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableHelpers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableHelpers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatablePlot.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatablePlot.cpython-312.pyc index 74825e080..be56635fb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatablePlot.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatablePlot.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestContourOrder.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestContourOrder.cpython-312.pyc index f8e7ad693..d79bb8878 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestContourOrder.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestContourOrder.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestStartingPoint.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestStartingPoint.cpython-312.pyc index 02f8c305d..9ad3dbea5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestStartingPoint.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolatableTestStartingPoint.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolate_layout.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolate_layout.cpython-312.pyc index 51247936c..b8b9cca03 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolate_layout.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/interpolate_layout.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/iup.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/iup.cpython-312.pyc index af34dbb02..15afca3b6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/iup.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/iup.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/merger.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/merger.cpython-312.pyc index 7be608178..f8a5a0580 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/merger.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/merger.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/models.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/models.cpython-312.pyc index c2473ea1c..e8c76fb8b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/models.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/models.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mutator.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mutator.cpython-312.pyc index 6e0df3777..3d9e26f41 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mutator.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mutator.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mvar.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mvar.cpython-312.pyc index 7802a3043..eabed689a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mvar.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/mvar.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/plot.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/plot.cpython-312.pyc index a8290311e..b45d4849c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/plot.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/plot.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/stat.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/stat.cpython-312.pyc index f6aa0a349..23262b436 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/stat.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/stat.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/varStore.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/varStore.cpython-312.pyc index 9aa9532fb..00e5c6098 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/varStore.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/__pycache__/varStore.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__init__.cpython-312.pyc index 18b4dc241..52daf3bbc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__main__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__main__.cpython-312.pyc index fdac56857..173d42ef4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__main__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/__main__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/featureVars.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/featureVars.cpython-312.pyc index 98f033dfe..dafe03f02 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/featureVars.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/featureVars.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/names.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/names.cpython-312.pyc index d8a7cf5d3..2feebd00b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/names.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/names.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/solver.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/solver.cpython-312.pyc index bdf92f840..45d97612f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/solver.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/instancer/__pycache__/solver.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.c b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.c index 754a9c7de..71042aad8 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.c @@ -1,4 +1,4 @@ -/* Generated by Cython 3.0.9 */ +/* Generated by Cython 3.0.10 */ /* BEGIN: Cython Metadata { @@ -36,10 +36,10 @@ END: Cython Metadata */ #else #define __PYX_EXTRA_ABI_MODULE_NAME "" #endif -#define CYTHON_ABI "3_0_9" __PYX_EXTRA_ABI_MODULE_NAME +#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME #define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI #define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "." -#define CYTHON_HEX_VERSION 0x030009F0 +#define CYTHON_HEX_VERSION 0x03000AF0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -131,6 +131,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(PYPY_VERSION) #define CYTHON_COMPILING_IN_PYPY 1 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -192,6 +194,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(CYTHON_LIMITED_API) #ifdef Py_LIMITED_API #undef __PYX_LIMITED_VERSION_HEX @@ -253,6 +257,8 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 0 #endif + #undef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 #elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL) #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 0 @@ -262,11 +268,17 @@ END: Cython Metadata */ #ifndef CYTHON_USE_TYPE_SLOTS #define CYTHON_USE_TYPE_SLOTS 1 #endif + #ifndef CYTHON_USE_TYPE_SPECS + #define CYTHON_USE_TYPE_SPECS 0 + #endif #undef CYTHON_USE_PYTYPE_LOOKUP #define CYTHON_USE_PYTYPE_LOOKUP 0 #ifndef CYTHON_USE_ASYNC_SLOTS #define CYTHON_USE_ASYNC_SLOTS 1 #endif + #ifndef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #endif #undef CYTHON_USE_PYLIST_INTERNALS #define CYTHON_USE_PYLIST_INTERNALS 0 #ifndef CYTHON_USE_UNICODE_INTERNALS @@ -274,8 +286,6 @@ END: Cython Metadata */ #endif #undef CYTHON_USE_UNICODE_WRITER #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 #ifndef CYTHON_AVOID_BORROWED_REFS #define CYTHON_AVOID_BORROWED_REFS 0 #endif @@ -287,11 +297,22 @@ END: Cython Metadata */ #endif #undef CYTHON_FAST_THREAD_STATE #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_GIL + #define CYTHON_FAST_GIL 0 + #ifndef CYTHON_METH_FASTCALL + #define CYTHON_METH_FASTCALL 1 + #endif #undef CYTHON_FAST_PYCALL #define CYTHON_FAST_PYCALL 0 + #ifndef CYTHON_PEP487_INIT_SUBCLASS + #define CYTHON_PEP487_INIT_SUBCLASS 1 + #endif #ifndef CYTHON_PEP489_MULTI_PHASE_INIT #define CYTHON_PEP489_MULTI_PHASE_INIT 1 #endif + #ifndef CYTHON_USE_MODULE_STATE + #define CYTHON_USE_MODULE_STATE 0 + #endif #ifndef CYTHON_USE_TP_FINALIZE #define CYTHON_USE_TP_FINALIZE 1 #endif @@ -299,6 +320,12 @@ END: Cython Metadata */ #define CYTHON_USE_DICT_VERSIONS 0 #undef CYTHON_USE_EXC_INFO_STACK #define CYTHON_USE_EXC_INFO_STACK 0 + #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC + #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 + #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 0 + #endif #else #define CYTHON_COMPILING_IN_PYPY 0 #define CYTHON_COMPILING_IN_CPYTHON 1 @@ -389,6 +416,9 @@ END: Cython Metadata */ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC #define CYTHON_UPDATE_DESCRIPTOR_DOC 1 #endif + #ifndef CYTHON_USE_FREELISTS + #define CYTHON_USE_FREELISTS 1 + #endif #endif #if !defined(CYTHON_FAST_PYCCALL) #define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) @@ -10271,8 +10301,10 @@ static PyObject *__pyx_pf_9fontTools_6varLib_3iup_14iup_delta_optimize(CYTHON_UN return __pyx_r; } +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between *__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between[8]; static int __pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -10280,7 +10312,7 @@ static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_ allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between)))) { o = (PyObject*)__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between[--__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between)); @@ -10307,7 +10339,7 @@ static void __pyx_tp_dealloc_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f #endif PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_v_tolerance); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between)))) { __pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between[__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between++] = ((struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct____pyx_f_9fontTools_6varLib_3iup_can_iup_in_between *)o); } else @@ -10440,8 +10472,10 @@ static PyTypeObject __pyx_type_9fontTools_6varLib_3iup___pyx_scope_struct____pyx }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr *__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr[8]; static int __pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -10449,7 +10483,7 @@ static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_1_genex allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr[--__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr)); @@ -10477,7 +10511,7 @@ static void __pyx_tp_dealloc_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexp PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_outer_scope); Py_CLEAR(p->__pyx_genexpr_arg_0); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr)))) { __pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr[__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_1_genexpr *)o); } else @@ -10603,8 +10637,10 @@ static PyTypeObject __pyx_type_9fontTools_6varLib_3iup___pyx_scope_struct_1_gene }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize *__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize[8]; static int __pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -10612,7 +10648,7 @@ static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_c allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize)))) { o = (PyObject*)__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize[--__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize)); @@ -10640,7 +10676,7 @@ static void __pyx_tp_dealloc_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_co PyObject_GC_UnTrack(o); Py_CLEAR(p->__pyx_v_d0); Py_CLEAR(p->__pyx_v_tolerance); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize)))) { __pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize[__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize++] = ((struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_contour_optimize *)o); } else @@ -10779,8 +10815,10 @@ static PyTypeObject __pyx_type_9fontTools_6varLib_3iup___pyx_scope_struct_2_iup_ }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr *__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr[8]; static int __pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -10788,7 +10826,7 @@ static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_3_genex allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr[--__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr)); @@ -10817,7 +10855,7 @@ static void __pyx_tp_dealloc_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexp Py_CLEAR(p->__pyx_outer_scope); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_p); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr)))) { __pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr[__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr++] = ((struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_3_genexpr *)o); } else @@ -10946,8 +10984,10 @@ static PyTypeObject __pyx_type_9fontTools_6varLib_3iup___pyx_scope_struct_3_gene }; #endif +#if CYTHON_USE_FREELISTS static struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr *__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr[8]; static int __pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr = 0; +#endif static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { PyObject *o; @@ -10955,7 +10995,7 @@ static PyObject *__pyx_tp_new_9fontTools_6varLib_3iup___pyx_scope_struct_4_genex allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); o = alloc_func(t, 0); #else - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (likely((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr > 0) & (int)(t->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr)))) { o = (PyObject*)__pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr[--__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr]; memset(o, 0, sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr)); @@ -10984,7 +11024,7 @@ static void __pyx_tp_dealloc_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexp Py_CLEAR(p->__pyx_outer_scope); Py_CLEAR(p->__pyx_genexpr_arg_0); Py_CLEAR(p->__pyx_v_d); - #if CYTHON_COMPILING_IN_CPYTHON + #if CYTHON_USE_FREELISTS if (((int)(__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr < 8) & (int)(Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr)))) { __pyx_freelist_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr[__pyx_freecount_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr++] = ((struct __pyx_obj_9fontTools_6varLib_3iup___pyx_scope_struct_4_genexpr *)o); } else diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.cpython-312-x86_64-linux-gnu.so index 822d749c2..443fdefd4 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/varLib/iup.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/__init__.cpython-312.pyc index 4046c3a12..7dd1b3479 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/ast.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/ast.cpython-312.pyc index ffac595b7..20fe1beca 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/ast.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/ast.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/error.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/error.cpython-312.pyc index 59653ba7d..0e7be0019 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/error.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/error.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/lexer.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/lexer.cpython-312.pyc index 321fcee8a..c4407ce57 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/lexer.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/lexer.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/parser.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/parser.cpython-312.pyc index a04d97a2e..d646355c6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/parser.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/parser.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/voltToFea.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/voltToFea.cpython-312.pyc index 934380d22..495a1bec5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/voltToFea.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/fontTools/voltLib/__pycache__/voltToFea.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/INSTALLER b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/INSTALLER similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/INSTALLER rename to .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/INSTALLER diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/LICENSE b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/LICENSE similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/LICENSE rename to .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/LICENSE diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/METADATA b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/METADATA similarity index 99% rename from .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/METADATA rename to .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/METADATA index b374ebc49..60b6e6df8 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/METADATA +++ b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fonttools -Version: 4.50.0 +Version: 4.51.0 Summary: Tools to manipulate font files Home-page: http://github.com/fonttools/fonttools Author: Just van Rossum @@ -375,6 +375,12 @@ Have fun! Changelog ~~~~~~~~~ +4.51.0 (released 2024-04-05) +---------------------------- + +- [ttLib] Optimization on loading aux fields (#3464). +- [ttFont] Add reorderGlyphs (#3468). + 4.50.0 (released 2024-03-15) ---------------------------- diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/RECORD b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/RECORD similarity index 94% rename from .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/RECORD rename to .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/RECORD index 6d81bd725..148a3e389 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/RECORD +++ b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/RECORD @@ -3,7 +3,7 @@ ../../../bin/pyftsubset,sha256=uUuoQHwQNHGjMF-sIRDW-2qeYOfkdxYSrQg0IOvWzRc,273 ../../../bin/ttx,sha256=FPvIwKqE2vO7VcQWQ2rbbaYq8_dOUTKe-uNbOAr0Ccw,270 ../../../share/man/man1/ttx.1,sha256=cLbm_pOOj1C76T2QXvDxzwDj9gk-GTd5RztvTMsouFw,5377 -fontTools/__init__.py,sha256=pF1L0Qv6nEDqpWvjc8vobO7GIqTN6NthHx8ZHMOYqe4,183 +fontTools/__init__.py,sha256=wZP86I1CZDHxRjXYoLVEofzkydDkYtOMUS-EM73r0s0,183 fontTools/__main__.py,sha256=VjkGh1UD-i1zTDA1dXo1uecSs6PxHdGQ5vlCk_mCCYs,925 fontTools/__pycache__/__init__.cpython-312.pyc,, fontTools/__pycache__/__main__.cpython-312.pyc,, @@ -47,8 +47,8 @@ fontTools/cu2qu/__pycache__/errors.cpython-312.pyc,, fontTools/cu2qu/__pycache__/ufo.cpython-312.pyc,, fontTools/cu2qu/benchmark.py,sha256=M3Dix_peO6d4Nsq4SAiAO2bQGeNnZNordYAOk8hkHkw,1349 fontTools/cu2qu/cli.py,sha256=LcwNAc4rh3ufJEfZZoO6j-XTtAgg9MiQ0acZi16gFXA,6075 -fontTools/cu2qu/cu2qu.c,sha256=rdGpdSCcW-ABY2v92lN5x6w7hYE5rPYediCsjRwmwRU,594065 -fontTools/cu2qu/cu2qu.cpython-312-x86_64-linux-gnu.so,sha256=f4vNDr_R_ld8yQ-x5aavmLipdnvcMapX_etGpuNUVK8,1051264 +fontTools/cu2qu/cu2qu.c,sha256=HslQc1uyXnal2--7RgzeQ4uhOBftJ03_9SpdRzsL8Kg,594902 +fontTools/cu2qu/cu2qu.cpython-312-x86_64-linux-gnu.so,sha256=SToQF3xHdLrOmAK9Q-Fp5qTEB7yQw6qpiHT2QdhuxWs,1051280 fontTools/cu2qu/cu2qu.py,sha256=UIFGlFq9X6Pj_NuaXg7KWIzLyR1jnx7nMCX-hFVG0SQ,16466 fontTools/cu2qu/errors.py,sha256=PyJNMy8lHDtKpfFkc0nkM8F4jNLZAC4lPQCN1Km4bpg,2441 fontTools/cu2qu/ufo.py,sha256=qZR70uWdCia19Ff8GLn5NeItscvvn69DegjDZVF4eNI,11794 @@ -85,8 +85,8 @@ fontTools/feaLib/__pycache__/variableScalar.cpython-312.pyc,, fontTools/feaLib/ast.py,sha256=_27skibzPidJtI5lUFeVjEv5NVaNPbuz4u8oZfMuxMk,73801 fontTools/feaLib/builder.py,sha256=1ND1iQvxHQn5eLU-5bwCq-dpeHiv1JPaQmX15bJS2Gg,69242 fontTools/feaLib/error.py,sha256=Tq2dZUlCOyLfjTr3qibsT2g9t-S_JEf6bKgyNX55oCE,643 -fontTools/feaLib/lexer.c,sha256=oM4KUZUmkI8U_tLiVDpjyzf-f77PRAWCSyo_UYYrYAE,751912 -fontTools/feaLib/lexer.cpython-312-x86_64-linux-gnu.so,sha256=GR2vGbBTppFi-KBo9PCW9EGtJcgJfs3gSX2PoVz14jY,1511392 +fontTools/feaLib/lexer.c,sha256=dX5b70DpJUHBlC_ao2pS8C37YDz4EgQ60RYbrJLs8xY,752731 +fontTools/feaLib/lexer.cpython-312-x86_64-linux-gnu.so,sha256=GtTg2nY5B52hMfN_NRKssq3qZ-XiSAPyHFuxH3jd-bo,1511400 fontTools/feaLib/lexer.py,sha256=vKJiI1RVDRmYmdbuXA2NmcAOn8vDJPtiZZ7SfNGdfJ0,11117 fontTools/feaLib/location.py,sha256=JXzHqGV56EHdcq823AwA5oaK05hf_1ySWpScbo3zGC0,234 fontTools/feaLib/lookupDebugInfo.py,sha256=gVRr5-APWfT_a5-25hRuawSVX8fEvXVsOSLWkH91T2w,304 @@ -147,8 +147,8 @@ fontTools/misc/__pycache__/visitor.cpython-312.pyc,, fontTools/misc/__pycache__/xmlReader.cpython-312.pyc,, fontTools/misc/__pycache__/xmlWriter.cpython-312.pyc,, fontTools/misc/arrayTools.py,sha256=jZk__GE-K9VViZE_H-LPPj0smWbKng-yfPE8BfGp8HI,11483 -fontTools/misc/bezierTools.c,sha256=jI7vaFGg30W1z2HiXRZILQ6gqliSSsH81t05BUj6uqI,1804495 -fontTools/misc/bezierTools.cpython-312-x86_64-linux-gnu.so,sha256=QtceqW1GuKzgYBzJXrGZNiHpzfBnMvIYVeNYFe9M6Qc,4712344 +fontTools/misc/bezierTools.c,sha256=KxWh2B4mfA2TdZAhTfJiDki1YzEPGbn98yBtyyMf-vg,1805458 +fontTools/misc/bezierTools.cpython-312-x86_64-linux-gnu.so,sha256=TaRtEv1IHAsNe9GCEAwzf6cum85065a5BNOzTZBseB8,4712352 fontTools/misc/bezierTools.py,sha256=eiA4zu-hYd06Ys3bEgRI7VS9GnKuJhgRIPmi_1dSDlY,44731 fontTools/misc/classifyTools.py,sha256=zcg3EM4GOerBW9c063ljaLllgeeZ772EpFZjp9CdgLI,5613 fontTools/misc/cliTools.py,sha256=qCznJMLCQu3ZHQD_4ctUnr3TkfAUdkGl-UuxZUrppy0,1862 @@ -241,8 +241,8 @@ fontTools/pens/explicitClosingLinePen.py,sha256=kKKtdZiwaf8Cj4_ytrIDdGB2GMpPPDXm fontTools/pens/filterPen.py,sha256=kKSvLmWCW4MkCF0ciJhjTj-LdUGOQL593PFkpm5PhP8,7790 fontTools/pens/freetypePen.py,sha256=MsIjlwvd54qQoSe3fqqGm4ZyhrhQi3-9B6X1yv5_KuQ,19813 fontTools/pens/hashPointPen.py,sha256=gElrFyQoOQp3ZbpKHRWPwC61A9OgT2Js8crVUD8BQAY,3573 -fontTools/pens/momentsPen.c,sha256=H6cROegazPKzlMvJozJ8RbfwZvCIejbwKKE8XbjAflI,542447 -fontTools/pens/momentsPen.cpython-312-x86_64-linux-gnu.so,sha256=ohNwYg4Id28Q7W5Tf42PvDaxHFXrMErGF5LL__i6nqg,1272560 +fontTools/pens/momentsPen.c,sha256=RNFaLXC3_TkXMhzA-lB91xt9Pjpt2bz_CYWdlV7WTeA,543266 +fontTools/pens/momentsPen.cpython-312-x86_64-linux-gnu.so,sha256=j56IQZJYZ3wFH1ybdvZUsoHySSaHmtj9ObtY9Gw1TP4,1272568 fontTools/pens/momentsPen.py,sha256=kiSvVWLJQPmUlus8MbMGkj8TB_QoZYL9uUwUMhyAHCQ,25685 fontTools/pens/perimeterPen.py,sha256=lr6NzrIWxi4TXBJPbcJsKzqABWfQeil2Bgm9BgUD3N4,2153 fontTools/pens/pointInsidePen.py,sha256=AloaWABNZY0KHkjIiHhElXUqJ_kr1Slf3XgwNtH7vwU,6336 @@ -270,8 +270,8 @@ fontTools/qu2cu/__pycache__/cli.cpython-312.pyc,, fontTools/qu2cu/__pycache__/qu2cu.cpython-312.pyc,, fontTools/qu2cu/benchmark.py,sha256=b-YjDXcbRr07rxwjJKUXxYhXznTyGffsavRW0pRuJwY,1453 fontTools/qu2cu/cli.py,sha256=undiO1TF_L4aJTaep1iDzYfYEAGN9KQpbXZMDPxxr3g,3713 -fontTools/qu2cu/qu2cu.c,sha256=SuA2UuYzorBBhFpRig6POU0JUfKuf44BHlnUe4M-Ves,659412 -fontTools/qu2cu/qu2cu.cpython-312-x86_64-linux-gnu.so,sha256=fSzLEQCkAXLxQkRfyAT2NLSwCuXQxxgIUp6FAPKpTwo,1243088 +fontTools/qu2cu/qu2cu.c,sha256=cdWG9Mjq_5S0TfQiWg3-RKK15Hf9AZEYvhvjk5iXcGg,660267 +fontTools/qu2cu/qu2cu.cpython-312-x86_64-linux-gnu.so,sha256=_tw2Km56tGneDK00XmTLpoabwDSrDL5NkQM6uC3ba-E,1243088 fontTools/qu2cu/qu2cu.py,sha256=1RKhaMBBiDvo5PtkNqR5p0X2HQ4yel4TbWT8MFU6Hps,12315 fontTools/subset/__init__.py,sha256=MOmuPAP9_ucldTiSEZywvvNg0ppy74x1N3L6WnSidoY,129814 fontTools/subset/__main__.py,sha256=bhtfP2SqP4k799pxtksFgnC-XGNQDr3LcO4lc8T5e5g,95 @@ -302,6 +302,7 @@ fontTools/ttLib/__pycache__/__init__.cpython-312.pyc,, fontTools/ttLib/__pycache__/__main__.cpython-312.pyc,, fontTools/ttLib/__pycache__/macUtils.cpython-312.pyc,, fontTools/ttLib/__pycache__/removeOverlaps.cpython-312.pyc,, +fontTools/ttLib/__pycache__/reorderGlyphs.cpython-312.pyc,, fontTools/ttLib/__pycache__/scaleUpem.cpython-312.pyc,, fontTools/ttLib/__pycache__/sfnt.cpython-312.pyc,, fontTools/ttLib/__pycache__/standardGlyphOrder.cpython-312.pyc,, @@ -312,6 +313,7 @@ fontTools/ttLib/__pycache__/ttVisitor.cpython-312.pyc,, fontTools/ttLib/__pycache__/woff2.cpython-312.pyc,, fontTools/ttLib/macUtils.py,sha256=lj3oeFpyjV7ko_JqnluneITmAtlc119J-vwTTg2s73A,1737 fontTools/ttLib/removeOverlaps.py,sha256=0eRyIBLjwoxgKnC98IjCJOXGSodhZHSbWAq-kJOpydg,8138 +fontTools/ttLib/reorderGlyphs.py,sha256=y4UAVABTMykRWIF9_BJP1B8X4JRLde5GzIOkAafofE8,10011 fontTools/ttLib/scaleUpem.py,sha256=VNUWyE8ZmbhTe8PpRFZ308a6394lkV2dYolW4Ix_cgw,12223 fontTools/ttLib/sfnt.py,sha256=KkLGD3SBKdZ1QCTEtTvmXP05-w1ZAM_8pKRfPUVg240,22829 fontTools/ttLib/standardGlyphOrder.py,sha256=7AY_fVWdtwZ4iv5uWdyKAUcbEQiSDt1lN4sqx9xXwE0,5785 @@ -502,7 +504,7 @@ fontTools/ttLib/tables/_v_m_t_x.py,sha256=oUrskRNAf3FLIZaYLuk03np_IsIWBGUWbMFcdj fontTools/ttLib/tables/asciiTable.py,sha256=4c69jsAirUnDEpylf9CYBoCKTzwbmfbtUAOrtPnpHjY,637 fontTools/ttLib/tables/grUtils.py,sha256=hcOJ5oJPOd2uJWnWA7qwR7AfL37YZ5zUT7g8o5BBV80,2270 fontTools/ttLib/tables/otBase.py,sha256=0Aik3BCMmUBUwsPMKHhAAHKYqXSaL7dIUuYP2qd1D0k,53158 -fontTools/ttLib/tables/otConverters.py,sha256=utVgYEJOrVjjaVSgX0DqgRPwvYEDTaz50cuTZJUK1rY,69216 +fontTools/ttLib/tables/otConverters.py,sha256=NHiRZz8KQtKY-6JCz5wRHC5UXxEAhvLD2wJmpop6mP8,69318 fontTools/ttLib/tables/otData.py,sha256=u4MduMik-MnGDZeqVTVQaBRerjeHKQXRdmXaHsGqmMY,192591 fontTools/ttLib/tables/otTables.py,sha256=87FTcd-g0YT1muO0nat93FjN66tfNG3x1ucb3WVcPcQ,83289 fontTools/ttLib/tables/otTraverse.py,sha256=oTr7nA7u7kEltLAhl4Kfl1RPD8O2_bKaoXa5l0hkRVA,5497 @@ -511,7 +513,7 @@ fontTools/ttLib/tables/sbixStrike.py,sha256=gFyOlhRIGnd59y0SrhtsT2Ce4L3yaBrLoFJ_ fontTools/ttLib/tables/table_API_readme.txt,sha256=eZlRTLUkLzc_9Ot3pdfhyMb3ahU0_Iipx0vSbzOVGy8,2748 fontTools/ttLib/tables/ttProgram.py,sha256=tgtxgd-EnOq-2PUlYEihp-6NHu_7HnE5rxeSAtmXOtU,35888 fontTools/ttLib/ttCollection.py,sha256=aRph2MkBK3kd9-JCLqhJ1EN9pffN_lVX6WWmOTTewc8,3963 -fontTools/ttLib/ttFont.py,sha256=hMzW3Z_U3_vGkZiiYXbNZiTr6NUsCRWCxnewbHTINA8,41064 +fontTools/ttLib/ttFont.py,sha256=55LSK8d5jOAmj_IQkiUX58I9RUidmdbmLN9_p7oQS6s,41206 fontTools/ttLib/ttGlyphSet.py,sha256=VYd22RriGS87j_BBJVpi_azKJXDwe4rILoTlapxYes0,13192 fontTools/ttLib/ttVisitor.py,sha256=_tah4C42Tv6Pm9QeLNQwwVCxqI4VNEAqYCbmThp6cvY,1025 fontTools/ttLib/woff2.py,sha256=MapZb0Hcfs7tfUIngTdhRk-n-duMLMBTccawMjtkOYo,61133 @@ -595,8 +597,8 @@ fontTools/varLib/interpolatablePlot.py,sha256=w393P6mGLRhYkIjSxMww3qyoYxAUZzCXlm fontTools/varLib/interpolatableTestContourOrder.py,sha256=EmJ2jp4sHuSM5P-seYvOLk0HLdWyPOHeVWRKIGIKXx4,3033 fontTools/varLib/interpolatableTestStartingPoint.py,sha256=Hq3NtC8I-O5dFnFoBQ6qVvLCzlPWEZqOSLP15QeuSAw,4231 fontTools/varLib/interpolate_layout.py,sha256=22VjGZuV2YiAe2MpdTf0xPVz1x2G84bcOL0vOeBpGQM,3689 -fontTools/varLib/iup.c,sha256=UgkiBjxeVjoiUpp1jo1iGPgi7eHsaTA95oYDX7DDE5o,780068 -fontTools/varLib/iup.cpython-312-x86_64-linux-gnu.so,sha256=N5zCDtbrFPi35Wi-xVHqfHgfGHYTghmEczprlHq5_7M,1660440 +fontTools/varLib/iup.c,sha256=BqId3MbYRPoeHbS0KqTP_ZVAYo3x7YeWoBfwzObuTkU,780977 +fontTools/varLib/iup.cpython-312-x86_64-linux-gnu.so,sha256=hs0-o8i00DiFpCDNHgWMqimtIQOMLj-EzBeBwrrJnRc,1660448 fontTools/varLib/iup.py,sha256=bUk3O1QoFM8k_QEleHruT0biPoauX8AUJorbRuO21Vo,14675 fontTools/varLib/merger.py,sha256=E59oli4AwqWZ-FgnuStMSBvsB-FHe-55esXTYUqGeJ8,60802 fontTools/varLib/models.py,sha256=SQI0ipNdl1WX8ysszet58UPtSRAAr9R0K40800AdXQo,21961 @@ -617,10 +619,10 @@ fontTools/voltLib/error.py,sha256=phcQOQj-xOspCXu9hBJQRhSOBDzxHRgZd3fWQOFNJzw,39 fontTools/voltLib/lexer.py,sha256=OvuETOSvlS6v7iCVeJ3IdH2Cg71n3OJoEyiB3-h6vhE,3368 fontTools/voltLib/parser.py,sha256=wBSUrjLT3fSPv9Mjx6_ULIf8IcGlwjtb4Auxjh5wqnc,24916 fontTools/voltLib/voltToFea.py,sha256=yi5cytZjCJbsKdJuM5k6HWSlqE_ZUv0l1rzp8K1vo3A,28465 -fonttools-4.50.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -fonttools-4.50.0.dist-info/LICENSE,sha256=Z4cgj4P2Wcy8IiOy_elS_6b36KymLxqKK_W8UbsbI4M,1072 -fonttools-4.50.0.dist-info/METADATA,sha256=mhqRksmUHW7QKSfZjmTVnx1QMVlQO_PfrzsNDqr5f4A,159353 -fonttools-4.50.0.dist-info/RECORD,, -fonttools-4.50.0.dist-info/WHEEL,sha256=W7tdgpqq-AavPTfzlQjmjM9Wk9z6xJ1sl2eXX0QhW0c,225 -fonttools-4.50.0.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147 -fonttools-4.50.0.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10 +fonttools-4.51.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +fonttools-4.51.0.dist-info/LICENSE,sha256=Z4cgj4P2Wcy8IiOy_elS_6b36KymLxqKK_W8UbsbI4M,1072 +fonttools-4.51.0.dist-info/METADATA,sha256=lr4M1q7eNqmK2TlHe3pDxxFGBChT9m2Y6AEpJ_LfRQM,159505 +fonttools-4.51.0.dist-info/RECORD,, +fonttools-4.51.0.dist-info/WHEEL,sha256=W7tdgpqq-AavPTfzlQjmjM9Wk9z6xJ1sl2eXX0QhW0c,225 +fonttools-4.51.0.dist-info/entry_points.txt,sha256=8kVHddxfFWA44FSD4mBpmC-4uCynQnkoz_9aNJb227Y,147 +fonttools-4.51.0.dist-info/top_level.txt,sha256=rRgRylrXzekqWOsrhygzib12pQ7WILf7UGjqEwkIFDM,10 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/WHEEL b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/WHEEL similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/WHEEL rename to .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/WHEEL diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/entry_points.txt b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/entry_points.txt similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/entry_points.txt rename to .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/entry_points.txt diff --git a/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/top_level.txt b/.CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/top_level.txt similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.50.0.dist-info/top_level.txt rename to .CondaPkg/env/lib/python3.12/site-packages/fonttools-4.51.0.dist-info/top_level.txt diff --git a/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/__init__.cpython-312.pyc index 43578afed..e71311a84 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/exceptions.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/exceptions.cpython-312.pyc index 60526e6c7..a924f39b7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/exceptions.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/kiwisolver/__pycache__/exceptions.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc-0.1.51.dist-info/RECORD b/.CondaPkg/env/lib/python3.12/site-packages/ldpc-0.1.51.dist-info/RECORD index 0b2b3278a..0802f9475 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/ldpc-0.1.51.dist-info/RECORD +++ b/.CondaPkg/env/lib/python3.12/site-packages/ldpc-0.1.51.dist-info/RECORD @@ -17,11 +17,11 @@ ldpc/__pycache__/mod2.cpython-312.pyc,, ldpc/__pycache__/protograph.cpython-312.pyc,, ldpc/alist.py,sha256=I7eBnmnO9NfpZoI1i6yUb7mDtqFHhjCcHsNKmaFENyM,1872 ldpc/bp_decode_sim.py,sha256=SZ9SKbh6n8YVmZF4unLwjcuNajTC0Y8L4qCV0BKSQTU,3363 -ldpc/bp_decoder.c,sha256=Tak4aASPDyHskfFzCA3wI63HjHVBZddV9szknhPRggI,701533 +ldpc/bp_decoder.c,sha256=cvYhZKNQwBwycZHW5jTJY4mJf6PYsCupuskY_rpAsSs,701533 ldpc/bp_decoder.cpython-312-x86_64-linux-gnu.so,sha256=ADwNh1YqaMiDyaWgwWmStNWxudz1ggmtw3ky819y5Ss,140768 ldpc/bp_decoder.pxd,sha256=0j0GezmKwZHl7W8AfQF_RX8LMa3s_3VPRySnldHQr70,1229 ldpc/bp_decoder.pyx,sha256=g4ttvfN3tGXAt_HXPZwIfEekqwCMLyLeE3ywUQMjlq0,20923 -ldpc/c_util.c,sha256=tKAoGPx0OvDFFqACQS37iwp9cB7esvND27sJsc83VBk,368631 +ldpc/c_util.c,sha256=XxTB7MKkcp3K7JlWRYHbCmzUXfgcEEItBsgJOhRryl4,368631 ldpc/c_util.cpython-312-x86_64-linux-gnu.so,sha256=tHYgnajEbFBXSmsox7pwqU7rYhSWAEQs_T3ffpryfbE,79192 ldpc/c_util.pxd,sha256=NcgnOy1XXSpIR5qN-Y95AOduRwrzq1J5FY5q3ICrKFc,1204 ldpc/c_util.pyx,sha256=Oyh_tTXv7244MUKAFid7jdwe4BR_4tmro0rqQjvvAxE,1344 @@ -38,11 +38,11 @@ ldpc/include/mod2sparse_extra.h,sha256=GdAXKRv5d77SwdSJ1icNywQHPyMIN3QaINHI4ZV-n ldpc/include/sort.c,sha256=0mErmqtEnszM03VgVdSUP8E-jHQBLeL74H3FGOFhgYw,2054 ldpc/include/sort.h,sha256=IN8tkKI_rxs49K2Bb30XaMzUNIqwcaUhqb-g3G_-brc,380 ldpc/mod2.py,sha256=uiiXsA4665dhqpP2_SYkTKe0O9Xz8dFpzTwFbmsXcZ4,12088 -ldpc/mod2sparse.c,sha256=2SbdGTvk9BC5xoeZDhygipEGdntqXYQ0HGcaAzeWiO8,668872 +ldpc/mod2sparse.c,sha256=aEpZxUvwekBj-uTxntwOywHYPcNhnntefnejAxgQvNo,668872 ldpc/mod2sparse.cpython-312-x86_64-linux-gnu.so,sha256=1GtxCu1LGV9bb_VwuIGsUbd7PxNGLhnhksJzoNuGjN0,149336 ldpc/mod2sparse.pxd,sha256=1IcCbTXDz_YksECDONQAqIc01ufFtrmgKSlpu_ThWjw,2621 ldpc/mod2sparse.pyx,sha256=WrXnIWwcqGGj7JokP3OGtts2Wobu3pQejN5WC83EpFA,6103 -ldpc/osd.c,sha256=Rchf94KYd2acoPQBbPS6f6Fmv_hI0NnxrBjX-hnUfLc,588518 +ldpc/osd.c,sha256=tRer2dOQUQkluI5fPZWORUaY6Ioplh7dSxx3nA30Pl0,588518 ldpc/osd.cpython-312-x86_64-linux-gnu.so,sha256=e9-clv3zShf9JaKfQCy8Juqo8uBsPNbuDz-cyRzwDfs,127072 ldpc/osd.pxd,sha256=Gns2n5a3CIB-wemajVKprO1SXZnjp8Z_D5yfYYFxLhg,1315 ldpc/osd.pyx,sha256=0ygdgGOigRnVjRjUJa6UbgQtew_SSKN4MzEeLV09Hh0,12553 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/__init__.cpython-312.pyc index 5210c5bdc..016ff3f80 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/alist.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/alist.cpython-312.pyc index 20d02467e..5f75d325c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/alist.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/alist.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/bp_decode_sim.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/bp_decode_sim.cpython-312.pyc index 4e6f59f51..6432c4a90 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/bp_decode_sim.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/bp_decode_sim.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/code_util.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/code_util.cpython-312.pyc index 6cc28fa8b..b4379ecb6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/code_util.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/code_util.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/codes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/codes.cpython-312.pyc index 965e9c47b..c5ca807e5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/codes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/codes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/mod2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/mod2.cpython-312.pyc index 0310cf0b1..edddeba34 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/mod2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/mod2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/protograph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/protograph.cpython-312.pyc index e9fce272c..393110a04 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/protograph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/__pycache__/protograph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/bp_decoder.c b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/bp_decoder.c index 65801e476..19ccd349a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/bp_decoder.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/bp_decoder.c @@ -4,11 +4,11 @@ { "distutils": { "depends": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", "src/ldpc/include/binary_char.h", "src/ldpc/include/mod2sparse.h", "src/ldpc/include/mod2sparse_extra.h", @@ -18,7 +18,7 @@ "-std=c11" ], "include_dirs": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include", "src/ldpc/include" ], "name": "ldpc.bp_decoder", @@ -1550,7 +1550,7 @@ static const char *__pyx_f[] = { /* #### Code section: numeric_typedefs ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< @@ -1559,7 +1559,7 @@ static const char *__pyx_f[] = { */ typedef npy_int8 __pyx_t_5numpy_int8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< @@ -1568,7 +1568,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t; */ typedef npy_int16 __pyx_t_5numpy_int16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< @@ -1577,7 +1577,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t; */ typedef npy_int32 __pyx_t_5numpy_int32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< @@ -1586,7 +1586,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t; */ typedef npy_int64 __pyx_t_5numpy_int64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< @@ -1595,7 +1595,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t; */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< @@ -1604,7 +1604,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t; */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< @@ -1613,7 +1613,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t; */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< @@ -1622,7 +1622,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t; */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< @@ -1631,7 +1631,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t; */ typedef npy_float32 __pyx_t_5numpy_float32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< @@ -1640,7 +1640,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t; */ typedef npy_float64 __pyx_t_5numpy_float64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< @@ -1649,7 +1649,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t; */ typedef npy_long __pyx_t_5numpy_int_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< @@ -1658,7 +1658,7 @@ typedef npy_long __pyx_t_5numpy_int_t; */ typedef npy_longlong __pyx_t_5numpy_longlong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< @@ -1667,7 +1667,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t; */ typedef npy_ulong __pyx_t_5numpy_uint_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< @@ -1676,7 +1676,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t; */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< @@ -1685,7 +1685,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; */ typedef npy_intp __pyx_t_5numpy_intp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< @@ -1694,7 +1694,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t; */ typedef npy_uintp __pyx_t_5numpy_uintp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< @@ -1703,7 +1703,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t; */ typedef npy_double __pyx_t_5numpy_float_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< @@ -1712,7 +1712,7 @@ typedef npy_double __pyx_t_5numpy_float_t; */ typedef npy_double __pyx_t_5numpy_double_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< @@ -1751,7 +1751,7 @@ static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(floa struct __pyx_obj_4ldpc_10mod2sparse_pymod2sparse; struct __pyx_obj_4ldpc_10bp_decoder_bp_decoder; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< @@ -1760,7 +1760,7 @@ struct __pyx_obj_4ldpc_10bp_decoder_bp_decoder; */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< @@ -1769,7 +1769,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< @@ -1778,7 +1778,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< @@ -3722,7 +3722,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_codeobj__17 __pyx_mstate_global->__pyx_codeobj__17 /* #### Code section: module_code ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -3733,7 +3733,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { PyObject *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 * """Returns a borrowed reference to the object owning the data/memory. * """ * return PyArray_BASE(self) # <<<<<<<<<<<<<< @@ -3743,7 +3743,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject __pyx_r = PyArray_BASE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -3756,7 +3756,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -3770,7 +3770,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray PyArray_Descr *__pyx_t_1; __Pyx_RefNannySetupContext("descr", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 * """Returns an owned reference to the dtype of the array. * """ * return PyArray_DESCR(self) # <<<<<<<<<<<<<< @@ -3783,7 +3783,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray __pyx_r = ((PyArray_Descr *)__pyx_t_1); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -3798,7 +3798,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -3809,7 +3809,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 * """Returns the number of dimensions in the array. * """ * return PyArray_NDIM(self) # <<<<<<<<<<<<<< @@ -3819,7 +3819,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx __pyx_r = PyArray_NDIM(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -3832,7 +3832,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -3843,7 +3843,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 * Can return NULL for 0-dimensional arrays. * """ * return PyArray_DIMS(self) # <<<<<<<<<<<<<< @@ -3853,7 +3853,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec __pyx_r = PyArray_DIMS(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -3866,7 +3866,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -3877,7 +3877,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 * The number of elements matches the number of dimensions of the array (ndim). * """ * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< @@ -3887,7 +3887,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO __pyx_r = PyArray_STRIDES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -3900,7 +3900,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -3911,7 +3911,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { npy_intp __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 * """Returns the total size (in number of elements) of the array. * """ * return PyArray_SIZE(self) # <<<<<<<<<<<<<< @@ -3921,7 +3921,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * __pyx_r = PyArray_SIZE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -3934,7 +3934,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3945,7 +3945,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { char *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 * of `PyArray_DATA()` instead, which returns a 'void*'. * """ * return PyArray_BYTES(self) # <<<<<<<<<<<<<< @@ -3955,7 +3955,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p __pyx_r = PyArray_BYTES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3968,7 +3968,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -3985,7 +3985,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< @@ -3999,7 +3999,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -4018,7 +4018,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -4035,7 +4035,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< @@ -4049,7 +4049,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -4068,7 +4068,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -4085,7 +4085,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< @@ -4099,7 +4099,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -4118,7 +4118,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -4135,7 +4135,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< @@ -4149,7 +4149,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -4168,7 +4168,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -4185,7 +4185,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< @@ -4199,7 +4199,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -4218,7 +4218,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -4232,7 +4232,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ int __pyx_t_1; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -4242,7 +4242,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape # <<<<<<<<<<<<<< @@ -4254,7 +4254,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -4263,7 +4263,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 * return d.subarray.shape * else: * return () # <<<<<<<<<<<<<< @@ -4277,7 +4277,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ goto __pyx_L0; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -4292,7 +4292,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -4306,7 +4306,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a const char *__pyx_filename = NULL; int __pyx_clineno = 0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 * * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< @@ -4315,7 +4315,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ Py_INCREF(__pyx_v_base); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< @@ -4324,7 +4324,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 970, __pyx_L1_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -4339,7 +4339,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a __pyx_L0:; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4354,7 +4354,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 * * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< @@ -4363,7 +4363,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4373,7 +4373,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_t_1 = (__pyx_v_base == NULL); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 * base = PyArray_BASE(arr) * if base is NULL: * return None # <<<<<<<<<<<<<< @@ -4384,7 +4384,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4393,7 +4393,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 * if base is NULL: * return None * return base # <<<<<<<<<<<<<< @@ -4405,7 +4405,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4420,7 +4420,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4444,7 +4444,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_array", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4460,7 +4460,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 * cdef inline int import_array() except -1: * try: * __pyx_import_array() # <<<<<<<<<<<<<< @@ -4469,7 +4469,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { */ __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 982, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4483,7 +4483,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 * try: * __pyx_import_array() * except Exception: # <<<<<<<<<<<<<< @@ -4498,7 +4498,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -4513,7 +4513,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4529,7 +4529,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4552,7 +4552,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -4576,7 +4576,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_umath", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4592,7 +4592,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 * cdef inline int import_umath() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -4601,7 +4601,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 988, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4615,7 +4615,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -4630,7 +4630,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -4645,7 +4645,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4661,7 +4661,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -4684,7 +4684,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -4708,7 +4708,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_ufunc", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4724,7 +4724,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 * cdef inline int import_ufunc() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -4733,7 +4733,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 994, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4747,7 +4747,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -4762,7 +4762,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -4777,7 +4777,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4793,7 +4793,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -4816,7 +4816,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -4827,7 +4827,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 * bool * """ * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< @@ -4837,7 +4837,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -4850,7 +4850,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -4861,7 +4861,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 * bool * """ * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< @@ -4871,7 +4871,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -4884,7 +4884,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4895,7 +4895,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { npy_datetime __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 * also needed. That can be found using `get_datetime64_unit`. * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4905,7 +4905,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4918,7 +4918,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4929,7 +4929,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { npy_timedelta __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 * returns the int64 value underlying scalar numpy timedelta64 object * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4939,7 +4939,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4952,7 +4952,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -4963,7 +4963,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { NPY_DATETIMEUNIT __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 * returns the unit part of the dtype for a numpy datetime64 object. * """ * return (obj).obmeta.base # <<<<<<<<<<<<<< @@ -4971,7 +4971,7 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -10657,7 +10657,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -10668,7 +10668,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/c_util.c b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/c_util.c index 145fc2956..4953a1b0e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/c_util.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/c_util.c @@ -4,11 +4,11 @@ { "distutils": { "depends": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", "src/ldpc/include/binary_char.h", "src/ldpc/include/sort.h" ], @@ -16,7 +16,7 @@ "-std=c11" ], "include_dirs": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include", "src/ldpc/include" ], "name": "ldpc.c_util", @@ -1580,7 +1580,7 @@ typedef struct { /* #### Code section: numeric_typedefs ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< @@ -1589,7 +1589,7 @@ typedef struct { */ typedef npy_int8 __pyx_t_5numpy_int8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< @@ -1598,7 +1598,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t; */ typedef npy_int16 __pyx_t_5numpy_int16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< @@ -1607,7 +1607,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t; */ typedef npy_int32 __pyx_t_5numpy_int32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< @@ -1616,7 +1616,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t; */ typedef npy_int64 __pyx_t_5numpy_int64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< @@ -1625,7 +1625,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t; */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< @@ -1634,7 +1634,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t; */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< @@ -1643,7 +1643,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t; */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< @@ -1652,7 +1652,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t; */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< @@ -1661,7 +1661,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t; */ typedef npy_float32 __pyx_t_5numpy_float32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< @@ -1670,7 +1670,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t; */ typedef npy_float64 __pyx_t_5numpy_float64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< @@ -1679,7 +1679,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t; */ typedef npy_long __pyx_t_5numpy_int_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< @@ -1688,7 +1688,7 @@ typedef npy_long __pyx_t_5numpy_int_t; */ typedef npy_longlong __pyx_t_5numpy_longlong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< @@ -1697,7 +1697,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t; */ typedef npy_ulong __pyx_t_5numpy_uint_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< @@ -1706,7 +1706,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t; */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< @@ -1715,7 +1715,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; */ typedef npy_intp __pyx_t_5numpy_intp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< @@ -1724,7 +1724,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t; */ typedef npy_uintp __pyx_t_5numpy_uintp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< @@ -1733,7 +1733,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t; */ typedef npy_double __pyx_t_5numpy_float_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< @@ -1742,7 +1742,7 @@ typedef npy_double __pyx_t_5numpy_float_t; */ typedef npy_double __pyx_t_5numpy_double_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< @@ -1779,7 +1779,7 @@ static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(do /*--- Type declarations ---*/ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< @@ -1788,7 +1788,7 @@ static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(do */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< @@ -1797,7 +1797,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< @@ -1806,7 +1806,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< @@ -2791,7 +2791,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_tuple__2 __pyx_mstate_global->__pyx_tuple__2 /* #### Code section: module_code ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -2802,7 +2802,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { PyObject *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 * """Returns a borrowed reference to the object owning the data/memory. * """ * return PyArray_BASE(self) # <<<<<<<<<<<<<< @@ -2812,7 +2812,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject __pyx_r = PyArray_BASE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -2825,7 +2825,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -2839,7 +2839,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray PyArray_Descr *__pyx_t_1; __Pyx_RefNannySetupContext("descr", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 * """Returns an owned reference to the dtype of the array. * """ * return PyArray_DESCR(self) # <<<<<<<<<<<<<< @@ -2852,7 +2852,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray __pyx_r = ((PyArray_Descr *)__pyx_t_1); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -2867,7 +2867,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -2878,7 +2878,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 * """Returns the number of dimensions in the array. * """ * return PyArray_NDIM(self) # <<<<<<<<<<<<<< @@ -2888,7 +2888,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx __pyx_r = PyArray_NDIM(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -2901,7 +2901,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -2912,7 +2912,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 * Can return NULL for 0-dimensional arrays. * """ * return PyArray_DIMS(self) # <<<<<<<<<<<<<< @@ -2922,7 +2922,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec __pyx_r = PyArray_DIMS(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -2935,7 +2935,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -2946,7 +2946,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 * The number of elements matches the number of dimensions of the array (ndim). * """ * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< @@ -2956,7 +2956,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO __pyx_r = PyArray_STRIDES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -2969,7 +2969,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -2980,7 +2980,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { npy_intp __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 * """Returns the total size (in number of elements) of the array. * """ * return PyArray_SIZE(self) # <<<<<<<<<<<<<< @@ -2990,7 +2990,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * __pyx_r = PyArray_SIZE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -3003,7 +3003,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3014,7 +3014,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { char *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 * of `PyArray_DATA()` instead, which returns a 'void*'. * """ * return PyArray_BYTES(self) # <<<<<<<<<<<<<< @@ -3024,7 +3024,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p __pyx_r = PyArray_BYTES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3037,7 +3037,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -3054,7 +3054,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< @@ -3068,7 +3068,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -3087,7 +3087,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3104,7 +3104,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< @@ -3118,7 +3118,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3137,7 +3137,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -3154,7 +3154,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< @@ -3168,7 +3168,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -3187,7 +3187,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -3204,7 +3204,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< @@ -3218,7 +3218,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -3237,7 +3237,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -3254,7 +3254,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< @@ -3268,7 +3268,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -3287,7 +3287,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -3301,7 +3301,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ int __pyx_t_1; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -3311,7 +3311,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape # <<<<<<<<<<<<<< @@ -3323,7 +3323,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -3332,7 +3332,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 * return d.subarray.shape * else: * return () # <<<<<<<<<<<<<< @@ -3346,7 +3346,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ goto __pyx_L0; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -3361,7 +3361,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -3375,7 +3375,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a const char *__pyx_filename = NULL; int __pyx_clineno = 0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 * * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< @@ -3384,7 +3384,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ Py_INCREF(__pyx_v_base); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< @@ -3393,7 +3393,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 970, __pyx_L1_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -3408,7 +3408,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a __pyx_L0:; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -3423,7 +3423,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 * * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< @@ -3432,7 +3432,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -3442,7 +3442,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_t_1 = (__pyx_v_base == NULL); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 * base = PyArray_BASE(arr) * if base is NULL: * return None # <<<<<<<<<<<<<< @@ -3453,7 +3453,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -3462,7 +3462,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 * if base is NULL: * return None * return base # <<<<<<<<<<<<<< @@ -3474,7 +3474,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -3489,7 +3489,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -3513,7 +3513,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_array", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -3529,7 +3529,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 * cdef inline int import_array() except -1: * try: * __pyx_import_array() # <<<<<<<<<<<<<< @@ -3538,7 +3538,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { */ __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 982, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -3552,7 +3552,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 * try: * __pyx_import_array() * except Exception: # <<<<<<<<<<<<<< @@ -3567,7 +3567,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -3582,7 +3582,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -3598,7 +3598,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -3621,7 +3621,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -3645,7 +3645,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_umath", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -3661,7 +3661,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 * cdef inline int import_umath() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -3670,7 +3670,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 988, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -3684,7 +3684,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -3699,7 +3699,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -3714,7 +3714,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -3730,7 +3730,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -3753,7 +3753,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -3777,7 +3777,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_ufunc", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -3793,7 +3793,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 * cdef inline int import_ufunc() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -3802,7 +3802,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 994, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -3816,7 +3816,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -3831,7 +3831,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -3846,7 +3846,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -3862,7 +3862,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -3885,7 +3885,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -3896,7 +3896,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 * bool * """ * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< @@ -3906,7 +3906,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -3919,7 +3919,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -3930,7 +3930,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 * bool * """ * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< @@ -3940,7 +3940,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -3953,7 +3953,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -3964,7 +3964,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { npy_datetime __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 * also needed. That can be found using `get_datetime64_unit`. * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -3974,7 +3974,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -3987,7 +3987,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -3998,7 +3998,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { npy_timedelta __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 * returns the int64 value underlying scalar numpy timedelta64 object * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4008,7 +4008,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4021,7 +4021,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -4032,7 +4032,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { NPY_DATETIMEUNIT __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 * returns the unit part of the dtype for a numpy datetime64 object. * """ * return (obj).obmeta.base # <<<<<<<<<<<<<< @@ -4040,7 +4040,7 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -4914,7 +4914,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -4925,7 +4925,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/mod2sparse.c b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/mod2sparse.c index 5e2dcca04..60c31253d 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/mod2sparse.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/mod2sparse.c @@ -4,11 +4,11 @@ { "distutils": { "depends": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", "src/ldpc/include/binary_char.h", "src/ldpc/include/mod2sparse.h", "src/ldpc/include/mod2sparse_extra.h", @@ -18,7 +18,7 @@ "-std=c11" ], "include_dirs": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include", "src/ldpc/include" ], "name": "ldpc.mod2sparse", @@ -1584,7 +1584,7 @@ typedef struct { /* #### Code section: numeric_typedefs ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< @@ -1593,7 +1593,7 @@ typedef struct { */ typedef npy_int8 __pyx_t_5numpy_int8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< @@ -1602,7 +1602,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t; */ typedef npy_int16 __pyx_t_5numpy_int16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< @@ -1611,7 +1611,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t; */ typedef npy_int32 __pyx_t_5numpy_int32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< @@ -1620,7 +1620,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t; */ typedef npy_int64 __pyx_t_5numpy_int64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< @@ -1629,7 +1629,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t; */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< @@ -1638,7 +1638,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t; */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< @@ -1647,7 +1647,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t; */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< @@ -1656,7 +1656,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t; */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< @@ -1665,7 +1665,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t; */ typedef npy_float32 __pyx_t_5numpy_float32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< @@ -1674,7 +1674,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t; */ typedef npy_float64 __pyx_t_5numpy_float64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< @@ -1683,7 +1683,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t; */ typedef npy_long __pyx_t_5numpy_int_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< @@ -1692,7 +1692,7 @@ typedef npy_long __pyx_t_5numpy_int_t; */ typedef npy_longlong __pyx_t_5numpy_longlong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< @@ -1701,7 +1701,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t; */ typedef npy_ulong __pyx_t_5numpy_uint_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< @@ -1710,7 +1710,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t; */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< @@ -1719,7 +1719,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; */ typedef npy_intp __pyx_t_5numpy_intp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< @@ -1728,7 +1728,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t; */ typedef npy_uintp __pyx_t_5numpy_uintp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< @@ -1737,7 +1737,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t; */ typedef npy_double __pyx_t_5numpy_float_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< @@ -1746,7 +1746,7 @@ typedef npy_double __pyx_t_5numpy_float_t; */ typedef npy_double __pyx_t_5numpy_double_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< @@ -1784,7 +1784,7 @@ static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(do /*--- Type declarations ---*/ struct __pyx_obj_4ldpc_10mod2sparse_pymod2sparse; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< @@ -1793,7 +1793,7 @@ struct __pyx_obj_4ldpc_10mod2sparse_pymod2sparse; */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< @@ -1802,7 +1802,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< @@ -1811,7 +1811,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< @@ -3546,7 +3546,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_codeobj__19 __pyx_mstate_global->__pyx_codeobj__19 /* #### Code section: module_code ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -3557,7 +3557,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { PyObject *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 * """Returns a borrowed reference to the object owning the data/memory. * """ * return PyArray_BASE(self) # <<<<<<<<<<<<<< @@ -3567,7 +3567,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject __pyx_r = PyArray_BASE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -3580,7 +3580,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -3594,7 +3594,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray PyArray_Descr *__pyx_t_1; __Pyx_RefNannySetupContext("descr", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 * """Returns an owned reference to the dtype of the array. * """ * return PyArray_DESCR(self) # <<<<<<<<<<<<<< @@ -3607,7 +3607,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray __pyx_r = ((PyArray_Descr *)__pyx_t_1); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -3622,7 +3622,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -3633,7 +3633,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 * """Returns the number of dimensions in the array. * """ * return PyArray_NDIM(self) # <<<<<<<<<<<<<< @@ -3643,7 +3643,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx __pyx_r = PyArray_NDIM(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -3656,7 +3656,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -3667,7 +3667,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 * Can return NULL for 0-dimensional arrays. * """ * return PyArray_DIMS(self) # <<<<<<<<<<<<<< @@ -3677,7 +3677,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec __pyx_r = PyArray_DIMS(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -3690,7 +3690,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -3701,7 +3701,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 * The number of elements matches the number of dimensions of the array (ndim). * """ * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< @@ -3711,7 +3711,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO __pyx_r = PyArray_STRIDES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -3724,7 +3724,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -3735,7 +3735,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { npy_intp __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 * """Returns the total size (in number of elements) of the array. * """ * return PyArray_SIZE(self) # <<<<<<<<<<<<<< @@ -3745,7 +3745,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * __pyx_r = PyArray_SIZE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -3758,7 +3758,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3769,7 +3769,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { char *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 * of `PyArray_DATA()` instead, which returns a 'void*'. * """ * return PyArray_BYTES(self) # <<<<<<<<<<<<<< @@ -3779,7 +3779,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p __pyx_r = PyArray_BYTES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3792,7 +3792,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -3809,7 +3809,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< @@ -3823,7 +3823,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -3842,7 +3842,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3859,7 +3859,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< @@ -3873,7 +3873,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3892,7 +3892,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -3909,7 +3909,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< @@ -3923,7 +3923,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -3942,7 +3942,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -3959,7 +3959,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< @@ -3973,7 +3973,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -3992,7 +3992,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -4009,7 +4009,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< @@ -4023,7 +4023,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -4042,7 +4042,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -4056,7 +4056,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ int __pyx_t_1; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -4066,7 +4066,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape # <<<<<<<<<<<<<< @@ -4078,7 +4078,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -4087,7 +4087,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 * return d.subarray.shape * else: * return () # <<<<<<<<<<<<<< @@ -4101,7 +4101,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ goto __pyx_L0; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -4116,7 +4116,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -4130,7 +4130,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a const char *__pyx_filename = NULL; int __pyx_clineno = 0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 * * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< @@ -4139,7 +4139,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ Py_INCREF(__pyx_v_base); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< @@ -4148,7 +4148,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 970, __pyx_L1_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -4163,7 +4163,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a __pyx_L0:; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4178,7 +4178,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 * * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< @@ -4187,7 +4187,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4197,7 +4197,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_t_1 = (__pyx_v_base == NULL); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 * base = PyArray_BASE(arr) * if base is NULL: * return None # <<<<<<<<<<<<<< @@ -4208,7 +4208,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4217,7 +4217,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 * if base is NULL: * return None * return base # <<<<<<<<<<<<<< @@ -4229,7 +4229,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4244,7 +4244,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4268,7 +4268,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_array", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4284,7 +4284,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 * cdef inline int import_array() except -1: * try: * __pyx_import_array() # <<<<<<<<<<<<<< @@ -4293,7 +4293,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { */ __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 982, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4307,7 +4307,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 * try: * __pyx_import_array() * except Exception: # <<<<<<<<<<<<<< @@ -4322,7 +4322,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -4337,7 +4337,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4353,7 +4353,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4376,7 +4376,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -4400,7 +4400,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_umath", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4416,7 +4416,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 * cdef inline int import_umath() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -4425,7 +4425,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 988, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4439,7 +4439,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -4454,7 +4454,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -4469,7 +4469,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4485,7 +4485,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -4508,7 +4508,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -4532,7 +4532,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_ufunc", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4548,7 +4548,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 * cdef inline int import_ufunc() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -4557,7 +4557,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 994, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4571,7 +4571,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -4586,7 +4586,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -4601,7 +4601,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4617,7 +4617,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -4640,7 +4640,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -4651,7 +4651,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 * bool * """ * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< @@ -4661,7 +4661,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -4674,7 +4674,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -4685,7 +4685,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 * bool * """ * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< @@ -4695,7 +4695,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -4708,7 +4708,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4719,7 +4719,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { npy_datetime __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 * also needed. That can be found using `get_datetime64_unit`. * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4729,7 +4729,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4742,7 +4742,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4753,7 +4753,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { npy_timedelta __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 * returns the int64 value underlying scalar numpy timedelta64 object * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4763,7 +4763,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4776,7 +4776,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -4787,7 +4787,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { NPY_DATETIMEUNIT __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 * returns the unit part of the dtype for a numpy datetime64 object. * """ * return (obj).obmeta.base # <<<<<<<<<<<<<< @@ -4795,7 +4795,7 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -9527,7 +9527,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -9538,7 +9538,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/osd.c b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/osd.c index 083870ce8..1cfac9ecc 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/osd.c +++ b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/osd.c @@ -4,11 +4,11 @@ { "distutils": { "depends": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayscalars.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ufuncobject.h", "src/ldpc/include/binary_char.h", "src/ldpc/include/mod2sparse.h", "src/ldpc/include/mod2sparse_extra.h", @@ -18,7 +18,7 @@ "-std=c11" ], "include_dirs": [ - "/tmp/pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/core/include", + "/tmp/pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/core/include", "src/ldpc/include" ], "name": "ldpc.osd", @@ -1553,7 +1553,7 @@ static const char *__pyx_f[] = { /* #### Code section: numeric_typedefs ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":730 * # in Cython to enable them only on the right systems. * * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< @@ -1562,7 +1562,7 @@ static const char *__pyx_f[] = { */ typedef npy_int8 __pyx_t_5numpy_int8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":731 * * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< @@ -1571,7 +1571,7 @@ typedef npy_int8 __pyx_t_5numpy_int8_t; */ typedef npy_int16 __pyx_t_5numpy_int16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":732 * ctypedef npy_int8 int8_t * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< @@ -1580,7 +1580,7 @@ typedef npy_int16 __pyx_t_5numpy_int16_t; */ typedef npy_int32 __pyx_t_5numpy_int32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":733 * ctypedef npy_int16 int16_t * ctypedef npy_int32 int32_t * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< @@ -1589,7 +1589,7 @@ typedef npy_int32 __pyx_t_5numpy_int32_t; */ typedef npy_int64 __pyx_t_5numpy_int64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":737 * #ctypedef npy_int128 int128_t * * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< @@ -1598,7 +1598,7 @@ typedef npy_int64 __pyx_t_5numpy_int64_t; */ typedef npy_uint8 __pyx_t_5numpy_uint8_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":738 * * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< @@ -1607,7 +1607,7 @@ typedef npy_uint8 __pyx_t_5numpy_uint8_t; */ typedef npy_uint16 __pyx_t_5numpy_uint16_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":739 * ctypedef npy_uint8 uint8_t * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< @@ -1616,7 +1616,7 @@ typedef npy_uint16 __pyx_t_5numpy_uint16_t; */ typedef npy_uint32 __pyx_t_5numpy_uint32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":740 * ctypedef npy_uint16 uint16_t * ctypedef npy_uint32 uint32_t * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< @@ -1625,7 +1625,7 @@ typedef npy_uint32 __pyx_t_5numpy_uint32_t; */ typedef npy_uint64 __pyx_t_5numpy_uint64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744 * #ctypedef npy_uint128 uint128_t * * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< @@ -1634,7 +1634,7 @@ typedef npy_uint64 __pyx_t_5numpy_uint64_t; */ typedef npy_float32 __pyx_t_5numpy_float32_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745 * * ctypedef npy_float32 float32_t * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< @@ -1643,7 +1643,7 @@ typedef npy_float32 __pyx_t_5numpy_float32_t; */ typedef npy_float64 __pyx_t_5numpy_float64_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754 * # The int types are mapped a bit surprising -- * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t # <<<<<<<<<<<<<< @@ -1652,7 +1652,7 @@ typedef npy_float64 __pyx_t_5numpy_float64_t; */ typedef npy_long __pyx_t_5numpy_int_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":755 * # numpy.int corresponds to 'l' and numpy.long to 'q' * ctypedef npy_long int_t * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< @@ -1661,7 +1661,7 @@ typedef npy_long __pyx_t_5numpy_int_t; */ typedef npy_longlong __pyx_t_5numpy_longlong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":757 * ctypedef npy_longlong longlong_t * * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< @@ -1670,7 +1670,7 @@ typedef npy_longlong __pyx_t_5numpy_longlong_t; */ typedef npy_ulong __pyx_t_5numpy_uint_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":758 * * ctypedef npy_ulong uint_t * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< @@ -1679,7 +1679,7 @@ typedef npy_ulong __pyx_t_5numpy_uint_t; */ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":760 * ctypedef npy_ulonglong ulonglong_t * * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< @@ -1688,7 +1688,7 @@ typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; */ typedef npy_intp __pyx_t_5numpy_intp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761 * * ctypedef npy_intp intp_t * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< @@ -1697,7 +1697,7 @@ typedef npy_intp __pyx_t_5numpy_intp_t; */ typedef npy_uintp __pyx_t_5numpy_uintp_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":763 * ctypedef npy_uintp uintp_t * * ctypedef npy_double float_t # <<<<<<<<<<<<<< @@ -1706,7 +1706,7 @@ typedef npy_uintp __pyx_t_5numpy_uintp_t; */ typedef npy_double __pyx_t_5numpy_float_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764 * * ctypedef npy_double float_t * ctypedef npy_double double_t # <<<<<<<<<<<<<< @@ -1715,7 +1715,7 @@ typedef npy_double __pyx_t_5numpy_float_t; */ typedef npy_double __pyx_t_5numpy_double_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765 * ctypedef npy_double float_t * ctypedef npy_double double_t * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< @@ -1755,7 +1755,7 @@ struct __pyx_obj_4ldpc_10mod2sparse_pymod2sparse; struct __pyx_obj_4ldpc_10bp_decoder_bp_decoder; struct __pyx_obj_4ldpc_3osd_bposd_decoder; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767 * ctypedef npy_longdouble longdouble_t * * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< @@ -1764,7 +1764,7 @@ struct __pyx_obj_4ldpc_3osd_bposd_decoder; */ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768 * * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< @@ -1773,7 +1773,7 @@ typedef npy_cfloat __pyx_t_5numpy_cfloat_t; */ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769 * ctypedef npy_cfloat cfloat_t * ctypedef npy_cdouble cdouble_t * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< @@ -1782,7 +1782,7 @@ typedef npy_cdouble __pyx_t_5numpy_cdouble_t; */ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":771 * ctypedef npy_clongdouble clongdouble_t * * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< @@ -3620,7 +3620,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_codeobj__12 __pyx_mstate_global->__pyx_codeobj__12 /* #### Code section: module_code ### */ -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -3631,7 +3631,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) { PyObject *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248 * """Returns a borrowed reference to the object owning the data/memory. * """ * return PyArray_BASE(self) # <<<<<<<<<<<<<< @@ -3641,7 +3641,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject __pyx_r = PyArray_BASE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":245 * * @property * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<< @@ -3654,7 +3654,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -3668,7 +3668,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray PyArray_Descr *__pyx_t_1; __Pyx_RefNannySetupContext("descr", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254 * """Returns an owned reference to the dtype of the array. * """ * return PyArray_DESCR(self) # <<<<<<<<<<<<<< @@ -3681,7 +3681,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray __pyx_r = ((PyArray_Descr *)__pyx_t_1); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":251 * * @property * cdef inline dtype descr(self): # <<<<<<<<<<<<<< @@ -3696,7 +3696,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -3707,7 +3707,7 @@ static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArray static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":260 * """Returns the number of dimensions in the array. * """ * return PyArray_NDIM(self) # <<<<<<<<<<<<<< @@ -3717,7 +3717,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx __pyx_r = PyArray_NDIM(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":257 * * @property * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<< @@ -3730,7 +3730,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -3741,7 +3741,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":268 * Can return NULL for 0-dimensional arrays. * """ * return PyArray_DIMS(self) # <<<<<<<<<<<<<< @@ -3751,7 +3751,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec __pyx_r = PyArray_DIMS(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263 * * @property * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<< @@ -3764,7 +3764,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -3775,7 +3775,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) { npy_intp *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":275 * The number of elements matches the number of dimensions of the array (ndim). * """ * return PyArray_STRIDES(self) # <<<<<<<<<<<<<< @@ -3785,7 +3785,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO __pyx_r = PyArray_STRIDES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":271 * * @property * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<< @@ -3798,7 +3798,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -3809,7 +3809,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayO static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) { npy_intp __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":281 * """Returns the total size (in number of elements) of the array. * """ * return PyArray_SIZE(self) # <<<<<<<<<<<<<< @@ -3819,7 +3819,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * __pyx_r = PyArray_SIZE(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":278 * * @property * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<< @@ -3832,7 +3832,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3843,7 +3843,7 @@ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject * static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) { char *__pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":290 * of `PyArray_DATA()` instead, which returns a 'void*'. * """ * return PyArray_BYTES(self) # <<<<<<<<<<<<<< @@ -3853,7 +3853,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p __pyx_r = PyArray_BYTES(__pyx_v_self); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284 * * @property * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<< @@ -3866,7 +3866,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__p return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -3883,7 +3883,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":774 * * cdef inline object PyArray_MultiIterNew1(a): * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< @@ -3897,7 +3897,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":773 * ctypedef npy_cdouble complex_t * * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< @@ -3916,7 +3916,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3933,7 +3933,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777 * * cdef inline object PyArray_MultiIterNew2(a, b): * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< @@ -3947,7 +3947,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776 * return PyArray_MultiIterNew(1, a) * * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< @@ -3966,7 +3966,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -3983,7 +3983,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780 * * cdef inline object PyArray_MultiIterNew3(a, b, c): * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< @@ -3997,7 +3997,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779 * return PyArray_MultiIterNew(2, a, b) * * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< @@ -4016,7 +4016,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -4033,7 +4033,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783 * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< @@ -4047,7 +4047,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782 * return PyArray_MultiIterNew(3, a, b, c) * * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< @@ -4066,7 +4066,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -4083,7 +4083,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786 * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< @@ -4097,7 +4097,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ __pyx_t_1 = 0; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785 * return PyArray_MultiIterNew(4, a, b, c, d) * * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< @@ -4116,7 +4116,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -4130,7 +4130,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ int __pyx_t_1; __Pyx_RefNannySetupContext("PyDataType_SHAPE", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -4140,7 +4140,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":790 * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): * return d.subarray.shape # <<<<<<<<<<<<<< @@ -4152,7 +4152,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789 * * cdef inline tuple PyDataType_SHAPE(dtype d): * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<< @@ -4161,7 +4161,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792 * return d.subarray.shape * else: * return () # <<<<<<<<<<<<<< @@ -4175,7 +4175,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ goto __pyx_L0; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788 * return PyArray_MultiIterNew(5, a, b, c, d, e) * * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<< @@ -4190,7 +4190,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -4204,7 +4204,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a const char *__pyx_filename = NULL; int __pyx_clineno = 0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":969 * * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! # <<<<<<<<<<<<<< @@ -4213,7 +4213,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ Py_INCREF(__pyx_v_base); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":970 * cdef inline void set_array_base(ndarray arr, object base): * Py_INCREF(base) # important to do this before stealing the reference below! * PyArray_SetBaseObject(arr, base) # <<<<<<<<<<<<<< @@ -4222,7 +4222,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a */ __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(2, 970, __pyx_L1_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":968 * int _import_umath() except -1 * * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< @@ -4237,7 +4237,7 @@ static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_a __pyx_L0:; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4252,7 +4252,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py int __pyx_t_1; __Pyx_RefNannySetupContext("get_array_base", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":973 * * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) # <<<<<<<<<<<<<< @@ -4261,7 +4261,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ __pyx_v_base = PyArray_BASE(__pyx_v_arr); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4271,7 +4271,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_t_1 = (__pyx_v_base == NULL); if (__pyx_t_1) { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":975 * base = PyArray_BASE(arr) * if base is NULL: * return None # <<<<<<<<<<<<<< @@ -4282,7 +4282,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":974 * cdef inline object get_array_base(ndarray arr): * base = PyArray_BASE(arr) * if base is NULL: # <<<<<<<<<<<<<< @@ -4291,7 +4291,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py */ } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":976 * if base is NULL: * return None * return base # <<<<<<<<<<<<<< @@ -4303,7 +4303,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py __pyx_r = ((PyObject *)__pyx_v_base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":972 * PyArray_SetBaseObject(arr, base) * * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< @@ -4318,7 +4318,7 @@ static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__py return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4342,7 +4342,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_array", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4358,7 +4358,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":982 * cdef inline int import_array() except -1: * try: * __pyx_import_array() # <<<<<<<<<<<<<< @@ -4367,7 +4367,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { */ __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 982, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4381,7 +4381,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":983 * try: * __pyx_import_array() * except Exception: # <<<<<<<<<<<<<< @@ -4396,7 +4396,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -4411,7 +4411,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":981 * # Cython code. * cdef inline int import_array() except -1: * try: # <<<<<<<<<<<<<< @@ -4427,7 +4427,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":980 * # Versions of the import_* functions which are more suitable for * # Cython code. * cdef inline int import_array() except -1: # <<<<<<<<<<<<<< @@ -4450,7 +4450,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -4474,7 +4474,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_umath", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4490,7 +4490,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":988 * cdef inline int import_umath() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -4499,7 +4499,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 988, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4513,7 +4513,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":989 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -4528,7 +4528,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -4543,7 +4543,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":987 * * cdef inline int import_umath() except -1: * try: # <<<<<<<<<<<<<< @@ -4559,7 +4559,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":986 * raise ImportError("numpy.core.multiarray failed to import") * * cdef inline int import_umath() except -1: # <<<<<<<<<<<<<< @@ -4582,7 +4582,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -4606,7 +4606,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("import_ufunc", 1); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4622,7 +4622,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_3); /*try:*/ { - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994 * cdef inline int import_ufunc() except -1: * try: * _import_umath() # <<<<<<<<<<<<<< @@ -4631,7 +4631,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { */ __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(2, 994, __pyx_L3_error) - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4645,7 +4645,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { goto __pyx_L8_try_end; __pyx_L3_error:; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995 * try: * _import_umath() * except Exception: # <<<<<<<<<<<<<< @@ -4660,7 +4660,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __Pyx_XGOTREF(__pyx_t_6); __Pyx_XGOTREF(__pyx_t_7); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< @@ -4675,7 +4675,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { } goto __pyx_L5_except_error; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":993 * * cdef inline int import_ufunc() except -1: * try: # <<<<<<<<<<<<<< @@ -4691,7 +4691,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { __pyx_L8_try_end:; } - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":992 * raise ImportError("numpy.core.umath failed to import") * * cdef inline int import_ufunc() except -1: # <<<<<<<<<<<<<< @@ -4714,7 +4714,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -4725,7 +4725,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) { static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1011 * bool * """ * return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type) # <<<<<<<<<<<<<< @@ -4735,7 +4735,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999 * * * cdef inline bint is_timedelta64_object(object obj): # <<<<<<<<<<<<<< @@ -4748,7 +4748,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -4759,7 +4759,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) { int __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1026 * bool * """ * return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type) # <<<<<<<<<<<<<< @@ -4769,7 +4769,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type)); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014 * * * cdef inline bint is_datetime64_object(object obj): # <<<<<<<<<<<<<< @@ -4782,7 +4782,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4793,7 +4793,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_o static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) { npy_datetime __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1036 * also needed. That can be found using `get_datetime64_unit`. * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4803,7 +4803,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1029 * * * cdef inline npy_datetime get_datetime64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4816,7 +4816,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4827,7 +4827,7 @@ static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject * static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) { npy_timedelta __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1043 * returns the int64 value underlying scalar numpy timedelta64 object * """ * return (obj).obval # <<<<<<<<<<<<<< @@ -4837,7 +4837,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval; goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1039 * * * cdef inline npy_timedelta get_timedelta64_value(object obj) nogil: # <<<<<<<<<<<<<< @@ -4850,7 +4850,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject return __pyx_r; } -/* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 +/* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -4861,7 +4861,7 @@ static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) { NPY_DATETIMEUNIT __pyx_r; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1050 * returns the unit part of the dtype for a numpy datetime64 object. * """ * return (obj).obmeta.base # <<<<<<<<<<<<<< @@ -4869,7 +4869,7 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base); goto __pyx_L0; - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1046 * * * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) nogil: # <<<<<<<<<<<<<< @@ -8416,7 +8416,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":984 * __pyx_import_array() * except Exception: * raise ImportError("numpy.core.multiarray failed to import") # <<<<<<<<<<<<<< @@ -8427,7 +8427,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple_); __Pyx_GIVEREF(__pyx_tuple_); - /* "../../pip-build-env-jo74avy2/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 + /* "../../pip-build-env-ollvpbqp/overlay/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":990 * _import_umath() * except Exception: * raise ImportError("numpy.core.umath failed to import") # <<<<<<<<<<<<<< diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_protograph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_protograph.cpython-312.pyc index 1abcf50b2..eea6209dd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_protograph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_protograph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_ring_of_circulants_f2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_ring_of_circulants_f2.cpython-312.pyc index f0880ea6b..d24d83ea9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_ring_of_circulants_f2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/ldpc/tests/__pycache__/test_ring_of_circulants_f2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/INSTALLER b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/INSTALLER similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/INSTALLER rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/INSTALLER diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_AMSFONTS b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_AMSFONTS similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_AMSFONTS rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_AMSFONTS diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_BAKOMA b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_BAKOMA similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_BAKOMA rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_BAKOMA diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_CARLOGO b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_CARLOGO similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_CARLOGO rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_CARLOGO diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_COLORBREWER b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_COLORBREWER similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_COLORBREWER rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_COLORBREWER diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_COURIERTEN b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_COURIERTEN similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_COURIERTEN rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_COURIERTEN diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_JSXTOOLS_RESIZE_OBSERVER b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_JSXTOOLS_RESIZE_OBSERVER similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_JSXTOOLS_RESIZE_OBSERVER rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_JSXTOOLS_RESIZE_OBSERVER diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_QHULL b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_QHULL similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_QHULL rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_QHULL diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_QT4_EDITOR b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_QT4_EDITOR similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_QT4_EDITOR rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_QT4_EDITOR diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_SOLARIZED b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_SOLARIZED similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_SOLARIZED rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_SOLARIZED diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_STIX b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_STIX similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_STIX rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_STIX diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_YORICK b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_YORICK similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/LICENSE_YORICK rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/LICENSE_YORICK diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/METADATA b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/METADATA similarity index 99% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/METADATA rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/METADATA index 391c3f638..c269e1e5c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/METADATA +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: matplotlib -Version: 3.8.3 +Version: 3.8.4 Summary: Python plotting package Home-page: https://matplotlib.org Download-URL: https://matplotlib.org/stable/users/installing/index.html @@ -43,7 +43,7 @@ Requires-Dist: contourpy >=1.0.1 Requires-Dist: cycler >=0.10 Requires-Dist: fonttools >=4.22.0 Requires-Dist: kiwisolver >=1.3.1 -Requires-Dist: numpy <2,>=1.21 +Requires-Dist: numpy >=1.21 Requires-Dist: packaging >=20.0 Requires-Dist: pillow >=8 Requires-Dist: pyparsing >=2.3.1 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/RECORD b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/RECORD similarity index 94% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/RECORD rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/RECORD index 0f9f0bfbe..5ccb7366d 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/RECORD +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/RECORD @@ -1,21 +1,21 @@ __pycache__/pylab.cpython-312.pyc,, -matplotlib-3.8.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -matplotlib-3.8.3.dist-info/LICENSE,sha256=WhqB6jAXKMi7opM9qDLAzWIina8giToCSrPVMkRGjbw,4830 -matplotlib-3.8.3.dist-info/LICENSE_AMSFONTS,sha256=FVFB1Zh38zj24cCAXem3mWTc5x_l0qVsROOLLA9-Ne4,12675 -matplotlib-3.8.3.dist-info/LICENSE_BAKOMA,sha256=k62ytTwCt84Gsmv_QTWMISSPQv7Sh7Yz7EwxA4N3zbs,1440 -matplotlib-3.8.3.dist-info/LICENSE_CARLOGO,sha256=YZAtXu803SSHC3KHqWJg0zKCM7lvcgK_cK1uKg2i3j8,4455 -matplotlib-3.8.3.dist-info/LICENSE_COLORBREWER,sha256=ARc2U_50XOISTsFW14tGBYLSpxnS2SEoBCZ-lf0sl-c,695 -matplotlib-3.8.3.dist-info/LICENSE_COURIERTEN,sha256=rIH3F6r_lFa4gBD8VTgqjf8ZnkxLzF1h4EDD9wY760M,802 -matplotlib-3.8.3.dist-info/LICENSE_JSXTOOLS_RESIZE_OBSERVER,sha256=WXdWrctR8kPvT7OGkgN39h0BKs4JBDZOGo7pquxq_IQ,6799 -matplotlib-3.8.3.dist-info/LICENSE_QHULL,sha256=EG1VyTH9aoSCLlNF2QAnPQWfHCcxDQJWfMsxPF0YxV0,1720 -matplotlib-3.8.3.dist-info/LICENSE_QT4_EDITOR,sha256=srUMqLYXKsojCVrfFduJ03J-nvLW7wF45CcjQBG-080,1230 -matplotlib-3.8.3.dist-info/LICENSE_SOLARIZED,sha256=EtUyf7xN-EWoaIPeme1f30GYRF1W26zfX62PDv3JdRM,1121 -matplotlib-3.8.3.dist-info/LICENSE_STIX,sha256=urPTHf7wf0g2JPL2XycR52BluOcnMnixwHHt4QQcmVk,5476 -matplotlib-3.8.3.dist-info/LICENSE_YORICK,sha256=yrdT04wJNlHo3rWrtoTj7WgCDg5BgDT5TXnokNx66E0,2313 -matplotlib-3.8.3.dist-info/METADATA,sha256=TTK3CkycJLf9Oj21ItRb4eHincAZlxo1Pc6D5fK4scc,5760 -matplotlib-3.8.3.dist-info/RECORD,, -matplotlib-3.8.3.dist-info/WHEEL,sha256=vJMp7mUkE-fMIYyE5xJ9Q2cYPnWVgHf20clVdwMSXAg,152 -matplotlib-3.8.3.dist-info/top_level.txt,sha256=9tEw2ni8DdgX8CceoYHqSH1s50vrJ9SDfgtLIG8e3Y4,30 +matplotlib-3.8.4.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +matplotlib-3.8.4.dist-info/LICENSE,sha256=WhqB6jAXKMi7opM9qDLAzWIina8giToCSrPVMkRGjbw,4830 +matplotlib-3.8.4.dist-info/LICENSE_AMSFONTS,sha256=FVFB1Zh38zj24cCAXem3mWTc5x_l0qVsROOLLA9-Ne4,12675 +matplotlib-3.8.4.dist-info/LICENSE_BAKOMA,sha256=k62ytTwCt84Gsmv_QTWMISSPQv7Sh7Yz7EwxA4N3zbs,1440 +matplotlib-3.8.4.dist-info/LICENSE_CARLOGO,sha256=YZAtXu803SSHC3KHqWJg0zKCM7lvcgK_cK1uKg2i3j8,4455 +matplotlib-3.8.4.dist-info/LICENSE_COLORBREWER,sha256=ARc2U_50XOISTsFW14tGBYLSpxnS2SEoBCZ-lf0sl-c,695 +matplotlib-3.8.4.dist-info/LICENSE_COURIERTEN,sha256=rIH3F6r_lFa4gBD8VTgqjf8ZnkxLzF1h4EDD9wY760M,802 +matplotlib-3.8.4.dist-info/LICENSE_JSXTOOLS_RESIZE_OBSERVER,sha256=WXdWrctR8kPvT7OGkgN39h0BKs4JBDZOGo7pquxq_IQ,6799 +matplotlib-3.8.4.dist-info/LICENSE_QHULL,sha256=EG1VyTH9aoSCLlNF2QAnPQWfHCcxDQJWfMsxPF0YxV0,1720 +matplotlib-3.8.4.dist-info/LICENSE_QT4_EDITOR,sha256=srUMqLYXKsojCVrfFduJ03J-nvLW7wF45CcjQBG-080,1230 +matplotlib-3.8.4.dist-info/LICENSE_SOLARIZED,sha256=EtUyf7xN-EWoaIPeme1f30GYRF1W26zfX62PDv3JdRM,1121 +matplotlib-3.8.4.dist-info/LICENSE_STIX,sha256=urPTHf7wf0g2JPL2XycR52BluOcnMnixwHHt4QQcmVk,5476 +matplotlib-3.8.4.dist-info/LICENSE_YORICK,sha256=yrdT04wJNlHo3rWrtoTj7WgCDg5BgDT5TXnokNx66E0,2313 +matplotlib-3.8.4.dist-info/METADATA,sha256=4LZXm7HUecLKgt0K_R434NLzGlctWzlH-Ok4fBFwjeA,5757 +matplotlib-3.8.4.dist-info/RECORD,, +matplotlib-3.8.4.dist-info/WHEEL,sha256=OvtvnbpcaxHa5TgXgfC48E6JA7zLr7svMspPP7Vk5o8,152 +matplotlib-3.8.4.dist-info/top_level.txt,sha256=9tEw2ni8DdgX8CceoYHqSH1s50vrJ9SDfgtLIG8e3Y4,30 matplotlib/__init__.py,sha256=NlrsFHM4j6fiYOWNP4Ug0buvxmDek9leE7lx7qZ8RcQ,53346 matplotlib/__init__.pyi,sha256=shbDzbbU57SOJAQ9yoracqXefDDKQ0AlVllY52EOHnQ,2899 matplotlib/__pycache__/__init__.cpython-312.pyc,, @@ -111,27 +111,27 @@ matplotlib/_docstring.pyi,sha256=p56uCgq4BKhM7ypMMc5edhV3-AnzYIeZUw4T9GhJoUU,687 matplotlib/_enums.py,sha256=cq5dtb_qy4g3cHgr1KdVA9qzYalgz7KCtTytyFp3PAs,6474 matplotlib/_enums.pyi,sha256=B5MhNYWDyhVZteR5lo9uRJ8RiduSGKrYw1NkBTT8Mx4,364 matplotlib/_fontconfig_pattern.py,sha256=_DthzglWlbrFvCIpycF33ap7UDY1yhdZPiXNsICvZ74,4734 -matplotlib/_image.cpython-312-x86_64-linux-gnu.so,sha256=WD9jTiKeUu71EHBIiLxU0Xbsq8RD1FowoNwiK1scl7U,2413528 +matplotlib/_image.cpython-312-x86_64-linux-gnu.so,sha256=6hwckyCZwGkjcXS673Ap_WWwjQr4m_qC7MIaUriKUfQ,2412008 matplotlib/_image.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 matplotlib/_internal_utils.py,sha256=nhK6LLWYW93fBcsFiO09JmqFj2rgHEsGYFOeaC7HRKw,2140 matplotlib/_layoutgrid.py,sha256=laNstF8ddikwhSjwLGNVjirsWeq0LhVSHVImWScAEi4,21676 matplotlib/_mathtext.py,sha256=Vmtol1VV9Souqr8Q7d8qOgv9BM9r8_YGv8Vbb6aOjEw,107430 matplotlib/_mathtext_data.py,sha256=RX5iq845Ne5nobFNM4-AhQc7Ua1UjfbXNefqJhh_vwg,51471 -matplotlib/_path.cpython-312-x86_64-linux-gnu.so,sha256=QEbG5PmW5erCVoFgonnjxBg71oFjaVYCkdRIl82ursA,1810296 +matplotlib/_path.cpython-312-x86_64-linux-gnu.so,sha256=7bv_91twTimae2o7r4ocJsQi2ve79z-8OkAY5yeeOOM,1807352 matplotlib/_path.pyi,sha256=yznyfzoUogH9vvi0vK68ga4Shlbrn5UBhAnLX8Ght1o,325 matplotlib/_pylab_helpers.py,sha256=lIkvc-NFRMQIsXykuymE1Dcf5A-bMvu4BcnQjUL9vKg,4331 matplotlib/_pylab_helpers.pyi,sha256=7OZKr-OL3ipVt1EDZ6e-tRwHASz-ijYfcIdlPczXhvQ,1012 -matplotlib/_qhull.cpython-312-x86_64-linux-gnu.so,sha256=cpL6Y0ng-G-20XU5R0Rus2zZELpvgdX-WWLycYTNnm0,2401736 +matplotlib/_qhull.cpython-312-x86_64-linux-gnu.so,sha256=ZRp4uIsvtsPJ5YwxJrdlQaHDRh5vMuBjdF19h_63Rsw,2400136 matplotlib/_qhull.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 matplotlib/_text_helpers.py,sha256=jvCm4JYRs_YTecSO2gZJyWS9tXjy5BHTJHBh8UZux2Q,2496 matplotlib/_tight_bbox.py,sha256=ddJ5ViXulbPLocHr-RkWK27WJSuV2WXUx74jZyL0NOg,2787 matplotlib/_tight_layout.py,sha256=oWCfzymTLvdmydhrYH2--O5UFMywQkJdXwvEAU3HR7s,12675 -matplotlib/_tri.cpython-312-x86_64-linux-gnu.so,sha256=us_qCFdsJC7TU4Hcc7OEEOxnfirMxsmDWZWzevhKUHw,371376 +matplotlib/_tri.cpython-312-x86_64-linux-gnu.so,sha256=rz98rqgp4fRMgqReTzJ2ly4VX74Nrd0m-r6k8eL6VrU,381192 matplotlib/_tri.pyi,sha256=UP0DudALEE02v92v0yIvlKNisqz2Opb6T0LKCIG0aeg,998 -matplotlib/_ttconv.cpython-312-x86_64-linux-gnu.so,sha256=PeBsXtFzPC6C039SUJjlUvyGCqg_46fK0Ig7IEFhlMw,285464 +matplotlib/_ttconv.cpython-312-x86_64-linux-gnu.so,sha256=bMqi-e2Z_JaSMWp-gihUSZ946tAsPlDP787AzA4y-tc,289608 matplotlib/_ttconv.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 matplotlib/_type1font.py,sha256=on8oxL6WDAlkXX6CMSgWyq3XWr6lkMsd1o20bOJwcAM,28308 -matplotlib/_version.py,sha256=vG1MF-pLKtXEORG4VQAqr4t8Cbyis4d6kgWOAErdqXA,411 +matplotlib/_version.py,sha256=vtXRFXfts_8ItxNdPkmh17AnVPVJCwD2S1cQsbqU9gQ,411 matplotlib/animation.py,sha256=18R-POTYdxvVXKHOHtem9j7EMmh-BhOynDuHVDk5jRI,71861 matplotlib/animation.pyi,sha256=OicmH7T3wjKUgFdSlBI1FsGQXGXL4ijYRLLOd3y6jLg,6611 matplotlib/artist.py,sha256=2F2JvfVer6ibzKOXe2jv6KVCV69T_ZldNjd3TvHvZYA,63486 @@ -142,7 +142,7 @@ matplotlib/axes/__pycache__/__init__.cpython-312.pyc,, matplotlib/axes/__pycache__/_axes.cpython-312.pyc,, matplotlib/axes/__pycache__/_base.cpython-312.pyc,, matplotlib/axes/__pycache__/_secondary_axes.cpython-312.pyc,, -matplotlib/axes/_axes.py,sha256=bB3qtuYoPdudUZmfpMr6Y06yBlPSNzFZXz7jdG0Mjss,333104 +matplotlib/axes/_axes.py,sha256=YOt5I-Q2I2vIM-qvOg0IO8WTjbUP-kaTVLv0YA0rG3k,333132 matplotlib/axes/_axes.pyi,sha256=K-2CHzn4VyKDNpBxAw0phtlGjueAYdUMVei20fWr_y8,25335 matplotlib/axes/_base.py,sha256=BHPsLJp2qYFhhWAto5VPWWrfu8kfmpM-lwXSL9MrSso,178148 matplotlib/axes/_base.pyi,sha256=BVoWMC0rr0TZgnrdYKrZVUyH1g9UjJvOdxK1J8eOYdI,16670 @@ -191,7 +191,7 @@ matplotlib/backends/__pycache__/backend_wx.cpython-312.pyc,, matplotlib/backends/__pycache__/backend_wxagg.cpython-312.pyc,, matplotlib/backends/__pycache__/backend_wxcairo.cpython-312.pyc,, matplotlib/backends/__pycache__/qt_compat.cpython-312.pyc,, -matplotlib/backends/_backend_agg.cpython-312-x86_64-linux-gnu.so,sha256=XeSE3Cel2K-Qpsbm_tSBweArao9SJjvTbaxkRCq8nIo,3386784 +matplotlib/backends/_backend_agg.cpython-312-x86_64-linux-gnu.so,sha256=UI3HFBf6p4yiwWfdH-VHdq4CKTTjaEIUHPwhrYaNjAQ,3386264 matplotlib/backends/_backend_agg.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 matplotlib/backends/_backend_gtk.py,sha256=A2fFTrR_A5JT8w83eq-7N9olVsof2YsWsE_z8AR3C1M,11338 matplotlib/backends/_backend_pdf_ps.py,sha256=E799e3XOJ5mp6YoecWp63xDS-DGqFLd4JfsGc0tMLRI,4444 @@ -202,12 +202,12 @@ matplotlib/backends/_tkagg.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF matplotlib/backends/backend_agg.py,sha256=mpVjm8ANUCcyvOcwwyLqXxLjKZ4CQK9orxcWOwkrFP8,20508 matplotlib/backends/backend_cairo.py,sha256=TCLk0CJKEWNDx4fNFU98XlE6zdESZE-uc4JRTeb86bI,17444 matplotlib/backends/backend_gtk3.py,sha256=MrXDKd-qDy2PDzxBx-EuvZXxUn3LwJokLtqh5sbN8FA,21805 -matplotlib/backends/backend_gtk3agg.py,sha256=qvYoB5OnIgjq7apNOiqTCaNVPnpetJWgyHyBsPLmPeg,2317 -matplotlib/backends/backend_gtk3cairo.py,sha256=vxoMgZBBcUiT2_yay6YJ4fK15mGuzedirMuO38kb3oI,967 +matplotlib/backends/backend_gtk3agg.py,sha256=LzA-FwoCKrBIu4v-PJHuqx3HWK-4OM7wuujyyl8EWnI,2465 +matplotlib/backends/backend_gtk3cairo.py,sha256=nelEH3ZZrdVPIUv8mjRWBzvAVqEXugtZ7A7-tv3ItZo,1115 matplotlib/backends/backend_gtk4.py,sha256=b6e1vmspBzR-Re51ntxUV7PuOv5iVNESGF2znndL3Zw,21559 -matplotlib/backends/backend_gtk4agg.py,sha256=lYjPDc2pt58mPYjimCdutcJtAFvkBtrC_xGCMmiOXBk,1114 -matplotlib/backends/backend_gtk4cairo.py,sha256=b-CR2mJBL8CJSa3ZC0t7fOPCLa74WGdHSfe8TfYZyYI,998 -matplotlib/backends/backend_macosx.py,sha256=rtfx1jcD38z_FG2OWOxEL4AVAYT4OJEDVbNdf66DxaY,8767 +matplotlib/backends/backend_gtk4agg.py,sha256=00i3qpIt9Tcf_S74GOWbeckiPlfVJoQ2pBbhXDMthF0,1262 +matplotlib/backends/backend_gtk4cairo.py,sha256=mvpGAnsJwl1ciOp5DFZ8cymkRLGSsO-phO5zFO0H6cA,1146 +matplotlib/backends/backend_macosx.py,sha256=V8QnC7O9_m1ChxEIhcLcEwdMhRBHfHwPGlaplMSJqKs,8643 matplotlib/backends/backend_mixed.py,sha256=PAYTjNuunpAa4-JkBguvyOjgDlB0eg9ARDAWidKfJpc,4698 matplotlib/backends/backend_nbagg.py,sha256=Au9RHfRufpI0ngT4R0K0CUVtAMFi9Bg-YhDunlj_Lko,8000 matplotlib/backends/backend_pdf.py,sha256=Ew5ddN29q2603Pc6Ct4PGJ78MGpWWZThZIMR8uyb7yk,106176 @@ -257,11 +257,11 @@ matplotlib/cbook.py,sha256=Lyr9N1BR2IfNkEAu4A18og5kGO94GjsDGquj2XFaWS4,76603 matplotlib/cbook.pyi,sha256=FUsaWhu2QbmGHV3uOiH6BjCpXonfDEATcfMyrfSfD6I,5749 matplotlib/cm.py,sha256=TqwZ5r81szWIjH_2xe7-p0912YmhDh1yMp_Xma2l5gE,26156 matplotlib/cm.pyi,sha256=bgZU7a6K512niO9Rf7VqijDXqewCZZ3PKgsualbKTz4,2079 -matplotlib/collections.py,sha256=pb_fcgmvZSbKDzcV8qsQ79iUx_pNDz7Obu_lun1W1Ek,89540 +matplotlib/collections.py,sha256=uvOw4Nhl-m8ujOPqI-5blpOfMyShrbNPe2PQQdweJgM,89549 matplotlib/collections.pyi,sha256=J3JeQIP245Q80X648AyjPEyN0oOex79d2NC-NOe0POc,10040 matplotlib/colorbar.py,sha256=oQ1pkXtYoJ4smXMZ7zG7U4KESnAXVVE2l0T_JztnKTM,60807 matplotlib/colorbar.pyi,sha256=lXMHYAvr9GnXcHgpy40WumUaNjX9TiHhpdWTpBwEl50,4800 -matplotlib/colors.py,sha256=Zk0-8Zhi4pBwA-rup2hOEOd2SkO-VWqBi5p9AoXR_BU,100572 +matplotlib/colors.py,sha256=4HLPX5-iTAbjUdmc0kExS7vwl7XbAWGlhkQffbU5v_U,100572 matplotlib/colors.pyi,sha256=TFUFx4N6ATggWmfVKvaX_-luUjVlqlu49226M6ilUIA,11156 matplotlib/container.py,sha256=LfE3vTumQknj-4RB_LHTg15XM3USXshSbDlrvaxABDo,4603 matplotlib/container.pyi,sha256=DIrGBN-5ZY0vt4mY6bEWH0n54wsJ7AFA9qNMMXCMspU,1757 @@ -274,7 +274,7 @@ matplotlib/figure.py,sha256=oINCw_2oLf2a8elwO9Y4S37rOIXVfoZSFLdt5keI8RE,137267 matplotlib/figure.pyi,sha256=Vy7SPXbU9zevRV8IJSkgYh9Cj8Bwme-2xTLrB6GeTuQ,14100 matplotlib/font_manager.py,sha256=WWFeCQBwVtvr7ihjnNcBJZiiouHJ-Mzuny5YXw_OdrA,55269 matplotlib/font_manager.pyi,sha256=Jse1IshOdjhXHdjcvTxtos3rgsuECbRJzc264A-ZGus,5052 -matplotlib/ft2font.cpython-312-x86_64-linux-gnu.so,sha256=DfpfDxB9u9bDsRZtYNuuaoe_WqXGMNHlttw823-RNl4,5705144 +matplotlib/ft2font.cpython-312-x86_64-linux-gnu.so,sha256=CqFGYor5hpgCKXLDca8JWfqVnMOiZxDSzjYzwYp329c,5701416 matplotlib/ft2font.pyi,sha256=4TEeRwvPFm2UyYdxx0z7fmJAdb7Jk_l7CFbP5FdqVms,7046 matplotlib/gridspec.py,sha256=o8JOzqjjdI5uNJtNr6ckqQjXQXS_ybpYDEUmNM0g-jY,27861 matplotlib/gridspec.pyi,sha256=ESc41LOG7Rke9ClBtWeO79ztHUweaupvFWO4PRdbJyk,4510 @@ -414,7 +414,7 @@ matplotlib/mpl-data/images/forward.svg,sha256=NnQDOenfjsn-o0aJMUfErrP320Zcx9XHZk matplotlib/mpl-data/images/forward_large.png,sha256=36h7m7DZDHql6kkdpNPckyi2LKCe_xhhyavWARz_2kQ,593 matplotlib/mpl-data/images/hand.pdf,sha256=hspwkNY915KPD7AMWnVQs7LFPOtlcj0VUiLu76dMabQ,4172 matplotlib/mpl-data/images/hand.png,sha256=2cchRETGKa0hYNKUxnJABwkyYXEBPqJy_VqSPlT0W2Q,979 -matplotlib/mpl-data/images/hand.svg,sha256=tsVIES_nINrAbH4FqdsCGOx0SVE37vcofSYBhnnaOP0,4888 +matplotlib/mpl-data/images/hand.svg,sha256=hxxBtakaVFA7mpZOGakvo0QUcb2x06rojeS5gnVmyuc,4906 matplotlib/mpl-data/images/help-symbolic.svg,sha256=KXabvQhqIWen_t2SvZuddFYa3S0iI3W8cAKm3s1fI8Q,1870 matplotlib/mpl-data/images/help.pdf,sha256=CeE978IMi0YWznWKjIT1R8IrP4KhZ0S7usPUvreSgcA,1813 matplotlib/mpl-data/images/help.png,sha256=s4pQrqaQ0py8I7vc9hv3BI3DO_tky-7YBMpaHuBDCBY,472 @@ -684,8 +684,8 @@ matplotlib/tests/test_backend_cairo.py,sha256=O2LTYjsfPn__bKtTz4MGGBodpSshoPkzu0 matplotlib/tests/test_backend_gtk3.py,sha256=cQjYQLyALMXgNGHDqucC1_-gPBxFwQGQJk-6Yh1SqrM,1800 matplotlib/tests/test_backend_macosx.py,sha256=EOWBfQMJxYlo0bHmXdY-AcBZRbC23dZYghxjRJskEXM,1541 matplotlib/tests/test_backend_nbagg.py,sha256=3IfwLcdSPRupcUMWvadOWEAJG5kLywphVH5EO-ZcMx0,973 -matplotlib/tests/test_backend_pdf.py,sha256=jMh8A74bMeLFiDfskQNTj3lgrZGiIMkKel0GH_Dob08,14517 -matplotlib/tests/test_backend_pgf.py,sha256=CqFswrGIDSlJIiMCTLwkRsFxn1iCVg9_RZAiLD04M4M,13188 +matplotlib/tests/test_backend_pdf.py,sha256=n1rTjCFcmfrK9dGgIIOsE7qI_Se4PsUhPVI_mCjfZho,14559 +matplotlib/tests/test_backend_pgf.py,sha256=ai6Pr61a4_Dx826wo_vJGXYxI1N7ZtzBbx0TIMnwHog,13230 matplotlib/tests/test_backend_ps.py,sha256=CCx6iTqcQS7KP4ygHFa9NlQfEmC_ysVLow9wAAsVIWU,12573 matplotlib/tests/test_backend_qt.py,sha256=9MkT2LvT-rC1yBLWzaVZiOh-WZJVhkwFdSm-vpebj2k,12175 matplotlib/tests/test_backend_svg.py,sha256=zChB85qffPQ9KmFQQ1OCZH0F3GhqVuZiu8Ac_MjXADw,21053 @@ -885,7 +885,7 @@ mpl_toolkits/mplot3d/__pycache__/axes3d.cpython-312.pyc,, mpl_toolkits/mplot3d/__pycache__/axis3d.cpython-312.pyc,, mpl_toolkits/mplot3d/__pycache__/proj3d.cpython-312.pyc,, mpl_toolkits/mplot3d/art3d.py,sha256=T15BprB7XRtHgIvNriItjvcD3adM-W2ri5YEMrDSYpA,42573 -mpl_toolkits/mplot3d/axes3d.py,sha256=4I19Ucq6N70IlLEzah3Wvekx3lNcgXEvqfdcl45SLe0,129991 +mpl_toolkits/mplot3d/axes3d.py,sha256=TeCysP3kpE4PQfCEfgcdS6Ados6ttawG3gVS-x34oD4,129874 mpl_toolkits/mplot3d/axis3d.py,sha256=oU7E45pHTAFI5t3cQ_ezni-0M5f6YL25GCVetLusZqg,29488 mpl_toolkits/mplot3d/proj3d.py,sha256=exvdG39Py5cXCzzfGnLJSvn5MZ-EE-MRRGejMdAW0Aw,6933 mpl_toolkits/mplot3d/tests/__init__.py,sha256=sKLxL9jEJBX7eh5OumtXSOnTriPrJUkujTHFtnJVFrM,365 @@ -896,6 +896,6 @@ mpl_toolkits/mplot3d/tests/__pycache__/test_axes3d.cpython-312.pyc,, mpl_toolkits/mplot3d/tests/__pycache__/test_legend3d.cpython-312.pyc,, mpl_toolkits/mplot3d/tests/conftest.py,sha256=zB61sy90X97YJ16mIGiuaEAaBIjBEzRAK_qfSCichQM,147 mpl_toolkits/mplot3d/tests/test_art3d.py,sha256=wpRhsMkGD8HdBCyIXM3SnydJWUlD6I5FRlZJM5xD_5w,1817 -mpl_toolkits/mplot3d/tests/test_axes3d.py,sha256=b6y24WXhStzQeTkcDLbTJwbINRsE2zLghygKN4CbVJU,76468 +mpl_toolkits/mplot3d/tests/test_axes3d.py,sha256=QuMjxKtP58qaZvzjSxgyWnP9vvquY372AgqhxxhSZf0,76935 mpl_toolkits/mplot3d/tests/test_legend3d.py,sha256=B8g2oyMdUvRCGiWZKtD5bOhPxu1l1KirYIZEugJ49Vg,4406 pylab.py,sha256=u_By3CHla-rBMg57egFXIxZ3P_J6zEkSu_dNpBcH5pw,90 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/WHEEL b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/WHEEL similarity index 78% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/WHEEL rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/WHEEL index bd099b744..db05d97df 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/WHEEL +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.42.0) +Generator: bdist_wheel (0.43.0) Root-Is-Purelib: false Tag: cp312-cp312-manylinux_2_17_x86_64 Tag: cp312-cp312-manylinux2014_x86_64 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/top_level.txt b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/top_level.txt similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.3.dist-info/top_level.txt rename to .CondaPkg/env/lib/python3.12/site-packages/matplotlib-3.8.4.dist-info/top_level.txt diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/__init__.cpython-312.pyc index 33aef598e..ed4d5f257 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_afm.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_afm.cpython-312.pyc index 24add22d4..5853aa8ad 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_afm.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_afm.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_animation_data.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_animation_data.cpython-312.pyc index d3c27c73e..8d0dc949a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_animation_data.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_animation_data.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_blocking_input.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_blocking_input.cpython-312.pyc index 95049aceb..908c2b12b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_blocking_input.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_blocking_input.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm.cpython-312.pyc index 725b53f5b..06f8a2f0d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm_listed.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm_listed.cpython-312.pyc index 8550674c7..912611f0b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm_listed.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_cm_listed.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_color_data.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_color_data.cpython-312.pyc index b637bc7f9..c330a458c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_color_data.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_color_data.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_constrained_layout.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_constrained_layout.cpython-312.pyc index 82e3e3c84..84e61a821 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_constrained_layout.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_constrained_layout.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_docstring.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_docstring.cpython-312.pyc index aed4fc6c7..a16213d81 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_docstring.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_docstring.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_enums.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_enums.cpython-312.pyc index b318d442e..2042f0564 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_enums.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_enums.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_fontconfig_pattern.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_fontconfig_pattern.cpython-312.pyc index 8f4e2759f..185076c10 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_fontconfig_pattern.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_fontconfig_pattern.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_internal_utils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_internal_utils.cpython-312.pyc index 482633e31..6316418c0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_internal_utils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_internal_utils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_layoutgrid.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_layoutgrid.cpython-312.pyc index 1ed43a17b..d57b9a715 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_layoutgrid.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_layoutgrid.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext.cpython-312.pyc index 387e810c2..a3adca337 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext_data.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext_data.cpython-312.pyc index 43a28960e..b0b698c3b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext_data.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_mathtext_data.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_pylab_helpers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_pylab_helpers.cpython-312.pyc index e56cbd182..848f30cc3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_pylab_helpers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_pylab_helpers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_text_helpers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_text_helpers.cpython-312.pyc index 17f666f0d..cc0f905ce 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_text_helpers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_text_helpers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_bbox.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_bbox.cpython-312.pyc index e73cec9b6..3d50a176a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_bbox.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_bbox.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_layout.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_layout.cpython-312.pyc index e74ff613f..0f62a454c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_layout.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_tight_layout.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_type1font.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_type1font.cpython-312.pyc index 88734e34a..f4defb08e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_type1font.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_type1font.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_version.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_version.cpython-312.pyc index e354a93e3..ab64e5b52 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_version.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/_version.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/animation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/animation.cpython-312.pyc index 7689543e9..852c51652 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/animation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/animation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/artist.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/artist.cpython-312.pyc index 9e85a7657..9eec4811f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/artist.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/artist.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/axis.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/axis.cpython-312.pyc index a5fda7f6d..be4a0c7a2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/axis.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/axis.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_bases.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_bases.cpython-312.pyc index ade6a2d59..da7cf7a4b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_bases.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_bases.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_managers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_managers.cpython-312.pyc index 7b8c58cd4..8edb1d9b4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_managers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_managers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_tools.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_tools.cpython-312.pyc index 78bfbf661..85d87faad 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_tools.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/backend_tools.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/bezier.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/bezier.cpython-312.pyc index 1b6ca5933..7d8959bad 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/bezier.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/bezier.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/category.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/category.cpython-312.pyc index af2d38474..156678171 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/category.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/category.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cbook.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cbook.cpython-312.pyc index 2fed47d1c..cb2d4e325 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cbook.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cbook.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cm.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cm.cpython-312.pyc index ad273545d..75fa46554 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cm.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/cm.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/collections.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/collections.cpython-312.pyc index c772371c7..4ff6f0889 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/collections.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/collections.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colorbar.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colorbar.cpython-312.pyc index d3de39d05..9a8607fc9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colorbar.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colorbar.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colors.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colors.cpython-312.pyc index c84a6094f..c574d5816 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colors.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/colors.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/container.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/container.cpython-312.pyc index 41e888bb2..18609a1c5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/container.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/container.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/contour.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/contour.cpython-312.pyc index bb5bd6681..774987071 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/contour.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/contour.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dates.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dates.cpython-312.pyc index 9dade928e..cf5f1db5b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dates.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dates.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dviread.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dviread.cpython-312.pyc index 0da3b76b0..82b34dc61 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dviread.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/dviread.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/figure.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/figure.cpython-312.pyc index db290a0b0..7cb8c37c6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/figure.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/figure.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/font_manager.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/font_manager.cpython-312.pyc index 2e5acabec..d0e598c48 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/font_manager.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/font_manager.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/gridspec.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/gridspec.cpython-312.pyc index 436b299c7..55234a76a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/gridspec.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/gridspec.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/hatch.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/hatch.cpython-312.pyc index d5186aa8c..0310bad7c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/hatch.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/hatch.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/image.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/image.cpython-312.pyc index f924ed360..1e6390ead 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/image.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/image.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/layout_engine.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/layout_engine.cpython-312.pyc index ddbf111ea..5e68fbbf7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/layout_engine.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/layout_engine.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend.cpython-312.pyc index 501267d06..e43011e50 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend_handler.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend_handler.cpython-312.pyc index cb5025908..4fd1c8324 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend_handler.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/legend_handler.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/lines.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/lines.cpython-312.pyc index 86c835667..b4e7648f0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/lines.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/lines.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/markers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/markers.cpython-312.pyc index c2bc179da..d4aec6848 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/markers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/markers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mathtext.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mathtext.cpython-312.pyc index 765c4cd0d..3cc0e8e68 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mathtext.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mathtext.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mlab.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mlab.cpython-312.pyc index 1919765bd..d8a9af60b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mlab.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/mlab.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/offsetbox.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/offsetbox.cpython-312.pyc index 0df9160ae..8e3d84821 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/offsetbox.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/offsetbox.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patches.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patches.cpython-312.pyc index 4698c171c..e24f0bec5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patches.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patches.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/path.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/path.cpython-312.pyc index a125f7db9..2fa131095 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/path.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/path.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patheffects.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patheffects.cpython-312.pyc index f6d1e5558..29365c3a5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patheffects.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/patheffects.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pylab.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pylab.cpython-312.pyc index 73c74abc4..8903a04a3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pylab.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pylab.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pyplot.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pyplot.cpython-312.pyc index fb971f2a4..ac801ff10 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pyplot.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/pyplot.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/quiver.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/quiver.cpython-312.pyc index 1a0befab3..512962c22 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/quiver.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/quiver.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/rcsetup.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/rcsetup.cpython-312.pyc index c9ac466a5..7f51c040c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/rcsetup.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/rcsetup.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/sankey.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/sankey.cpython-312.pyc index f8eac5bf9..7b2fe9ae3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/sankey.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/sankey.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/scale.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/scale.cpython-312.pyc index 477e27c09..38062b926 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/scale.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/scale.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/spines.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/spines.cpython-312.pyc index e3083780c..378d2f186 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/spines.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/spines.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/stackplot.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/stackplot.cpython-312.pyc index 14be88047..3a74247aa 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/stackplot.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/stackplot.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/streamplot.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/streamplot.cpython-312.pyc index 75f22642b..9e7d2ff38 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/streamplot.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/streamplot.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/table.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/table.cpython-312.pyc index ddc628ce8..011c8c839 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/table.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/table.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/texmanager.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/texmanager.cpython-312.pyc index 6e91fdf87..c36920e14 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/texmanager.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/texmanager.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/text.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/text.cpython-312.pyc index e12610381..0f433c1ba 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/text.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/text.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/textpath.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/textpath.cpython-312.pyc index 83476e82b..8c100751e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/textpath.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/textpath.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/ticker.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/ticker.cpython-312.pyc index a8d733875..50472a591 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/ticker.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/ticker.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/transforms.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/transforms.cpython-312.pyc index 829055b57..29a6d7d2b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/transforms.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/transforms.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/typing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/typing.cpython-312.pyc index 395a23306..6ae134c92 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/typing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/typing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/units.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/units.cpython-312.pyc index 0c057a865..ffe9e9ab3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/units.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/units.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/widgets.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/widgets.cpython-312.pyc index e2120edde..cd2ddffbf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/widgets.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/__pycache__/widgets.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/__init__.cpython-312.pyc index 95e8aa1e7..aa04b5ce5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/deprecation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/deprecation.cpython-312.pyc index a3dee455a..58b5591c2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/deprecation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_api/__pycache__/deprecation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_image.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_image.cpython-312-x86_64-linux-gnu.so index cee13a729..23c83381a 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_image.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_image.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_path.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_path.cpython-312-x86_64-linux-gnu.so index b267fc6ef..fd8b00cc4 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_path.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_path.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_qhull.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_qhull.cpython-312-x86_64-linux-gnu.so index 98487b634..bc671fca6 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_qhull.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_qhull.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_tri.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_tri.cpython-312-x86_64-linux-gnu.so index 4bbcd8d46..7cd172108 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_tri.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_tri.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_ttconv.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_ttconv.cpython-312-x86_64-linux-gnu.so index 3d41bba2f..7032de378 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_ttconv.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_ttconv.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_version.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_version.py index cc4f67848..29a8837f7 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_version.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/_version.py @@ -12,5 +12,5 @@ __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE -__version__ = version = '3.8.3' -__version_tuple__ = version_tuple = (3, 8, 3) +__version__ = version = '3.8.4' +__version_tuple__ = version_tuple = (3, 8, 4) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/__init__.cpython-312.pyc index 2104cde12..5d90e0500 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_axes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_axes.cpython-312.pyc index 7520ac93c..bc8258193 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_axes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_axes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_base.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_base.cpython-312.pyc index 60246136f..68e8ebee5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_base.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_base.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_secondary_axes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_secondary_axes.cpython-312.pyc index 8dc63a1fc..891e128f0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_secondary_axes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/__pycache__/_secondary_axes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/_axes.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/_axes.py index 3bd355bdc..0285ec6bd 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/_axes.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/axes/_axes.py @@ -2394,7 +2394,8 @@ def bar(self, x, height, width=0.8, bottom=None, *, align="center", # checking and processing will be left to the errorbar method. xerr = kwargs.pop('xerr', None) yerr = kwargs.pop('yerr', None) - error_kw = kwargs.pop('error_kw', {}) + error_kw = kwargs.pop('error_kw', None) + error_kw = {} if error_kw is None else error_kw.copy() ezorder = error_kw.pop('zorder', None) if ezorder is None: ezorder = kwargs.get('zorder', None) @@ -2550,9 +2551,8 @@ def bar(self, x, height, width=0.8, bottom=None, *, align="center", error_kw.setdefault("label", '_nolegend_') - errorbar = self.errorbar(ex, ey, - yerr=yerr, xerr=xerr, - fmt='none', **error_kw) + errorbar = self.errorbar(ex, ey, yerr=yerr, xerr=xerr, fmt='none', + **error_kw) else: errorbar = None diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/__init__.cpython-312.pyc index d5ccb81ad..ef7cf7597 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_gtk.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_gtk.cpython-312.pyc index 9a37d6dc2..7361cfa1d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_gtk.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_gtk.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_pdf_ps.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_pdf_ps.cpython-312.pyc index abe038303..e9df4ebdc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_pdf_ps.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_pdf_ps.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_tk.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_tk.cpython-312.pyc index 25f6f4537..4a493575b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_tk.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/_backend_tk.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_agg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_agg.cpython-312.pyc index 9122a5ba1..33efbac4b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_agg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_agg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_cairo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_cairo.cpython-312.pyc index b9c8d7b7f..8f7801433 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_cairo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_cairo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3.cpython-312.pyc index bdb549fb6..67dbaa434 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3agg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3agg.cpython-312.pyc index 4d9efee70..086723de2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3agg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3agg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3cairo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3cairo.cpython-312.pyc index 14b8806fc..d38e70b40 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3cairo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk3cairo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4.cpython-312.pyc index 80409f7e7..5d125607a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4agg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4agg.cpython-312.pyc index 9e6608df1..607cbd129 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4agg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4agg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4cairo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4cairo.cpython-312.pyc index cce925c1c..49f496862 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4cairo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_gtk4cairo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_macosx.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_macosx.cpython-312.pyc index b5cc78b0c..3338ec934 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_macosx.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_macosx.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_mixed.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_mixed.cpython-312.pyc index c9a718b80..0ef209ca1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_mixed.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_mixed.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_nbagg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_nbagg.cpython-312.pyc index 037479c62..2a7ee1ce0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_nbagg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_nbagg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pdf.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pdf.cpython-312.pyc index ad5a50891..d598a1779 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pdf.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pdf.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pgf.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pgf.cpython-312.pyc index b419c13a5..b32b8aca2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pgf.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_pgf.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_ps.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_ps.cpython-312.pyc index fbe3bb7ff..5fd6f0748 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_ps.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_ps.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt.cpython-312.pyc index 33de6120a..bb43503ff 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5.cpython-312.pyc index aaea037c1..206aac765 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5agg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5agg.cpython-312.pyc index a6e46c106..bc08af198 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5agg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5agg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5cairo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5cairo.cpython-312.pyc index a77d80cac..504ad1ba9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5cairo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qt5cairo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtagg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtagg.cpython-312.pyc index 8cfbdf590..1d0428d44 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtagg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtagg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtcairo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtcairo.cpython-312.pyc index 19f212197..5ab7e3ffc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtcairo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_qtcairo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_svg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_svg.cpython-312.pyc index 6dd5557d7..7ba7781d0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_svg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_svg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_template.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_template.cpython-312.pyc index ec4622839..c4af533a1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_template.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_template.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkagg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkagg.cpython-312.pyc index 8205bfbda..c82022685 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkagg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkagg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkcairo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkcairo.cpython-312.pyc index 8bcd6ad5e..357801a64 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkcairo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_tkcairo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg.cpython-312.pyc index 5c9c58421..bb7a90ad7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg_core.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg_core.cpython-312.pyc index 9fd1545ba..5890ea235 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg_core.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_webagg_core.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wx.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wx.cpython-312.pyc index f637dbabf..0c7235e0b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wx.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wx.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxagg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxagg.cpython-312.pyc index 6cbaf46d2..cae34b431 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxagg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxagg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxcairo.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxcairo.cpython-312.pyc index ca581daae..516e26887 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxcairo.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/backend_wxcairo.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/qt_compat.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/qt_compat.cpython-312.pyc index b8bc95452..9268c2b1b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/qt_compat.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/__pycache__/qt_compat.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/_backend_agg.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/_backend_agg.cpython-312-x86_64-linux-gnu.so index 1c0d49b02..ff4894b93 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/_backend_agg.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/_backend_agg.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3agg.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3agg.py index a006a4c6f..90b38ffa4 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3agg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3agg.py @@ -2,7 +2,7 @@ from .. import cbook, transforms from . import backend_agg, backend_gtk3 -from .backend_gtk3 import Gtk, _BackendGTK3 +from .backend_gtk3 import GLib, Gtk, _BackendGTK3 import cairo # Presence of cairo is already checked by _backend_gtk. @@ -14,6 +14,11 @@ def __init__(self, figure): self._bbox_queue = [] def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + scale = self.device_pixel_ratio allocation = self.get_allocation() w = allocation.width * scale diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3cairo.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3cairo.py index 1da8419e5..24a26111f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3cairo.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk3cairo.py @@ -1,11 +1,16 @@ from contextlib import nullcontext from .backend_cairo import FigureCanvasCairo -from .backend_gtk3 import Gtk, FigureCanvasGTK3, _BackendGTK3 +from .backend_gtk3 import GLib, Gtk, FigureCanvasGTK3, _BackendGTK3 class FigureCanvasGTK3Cairo(FigureCanvasCairo, FigureCanvasGTK3): def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + with (self.toolbar._wait_cursor_for_draw_cm() if self.toolbar else nullcontext()): self._renderer.set_context(ctx) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4agg.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4agg.py index efddfec56..0af07850a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4agg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4agg.py @@ -2,7 +2,7 @@ from .. import cbook from . import backend_agg, backend_gtk4 -from .backend_gtk4 import Gtk, _BackendGTK4 +from .backend_gtk4 import GLib, Gtk, _BackendGTK4 import cairo # Presence of cairo is already checked by _backend_gtk. @@ -11,6 +11,11 @@ class FigureCanvasGTK4Agg(backend_agg.FigureCanvasAgg, backend_gtk4.FigureCanvasGTK4): def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + scale = self.device_pixel_ratio allocation = self.get_allocation() diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4cairo.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4cairo.py index d57f53fb2..b1d543704 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4cairo.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_gtk4cairo.py @@ -1,13 +1,18 @@ from contextlib import nullcontext from .backend_cairo import FigureCanvasCairo -from .backend_gtk4 import Gtk, FigureCanvasGTK4, _BackendGTK4 +from .backend_gtk4 import GLib, Gtk, FigureCanvasGTK4, _BackendGTK4 class FigureCanvasGTK4Cairo(FigureCanvasCairo, FigureCanvasGTK4): _context_is_scaled = True def on_draw_event(self, widget, ctx): + if self._idle_draw_id: + GLib.source_remove(self._idle_draw_id) + self._idle_draw_id = 0 + self.draw() + with (self.toolbar._wait_cursor_for_draw_cm() if self.toolbar else nullcontext()): self._renderer.set_context(ctx) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_macosx.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_macosx.py index a39f5b5b1..66bc9bfc9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_macosx.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/backend_macosx.py @@ -64,13 +64,9 @@ def draw_idle(self): def _single_shot_timer(self, callback): """Add a single shot timer with the given callback""" - # We need to explicitly stop and remove the timer after - # firing, otherwise segfaults will occur when trying to deallocate - # the singleshot timers. def callback_func(callback, timer): callback() self._timers.remove(timer) - timer.stop() timer = self.new_timer(interval=0) timer.single_shot = True timer.add_callback(callback_func, callback, timer) @@ -183,6 +179,8 @@ def start_main_loop(cls): _macosx.show() def show(self): + if self.canvas.figure.stale: + self.canvas.draw_idle() if not self._shown: self._show() self._shown = True diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/__init__.cpython-312.pyc index 11b2d412e..0f4647b1f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/_formlayout.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/_formlayout.cpython-312.pyc index c2993f734..fe8004ccf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/_formlayout.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/_formlayout.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/figureoptions.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/figureoptions.cpython-312.pyc index 4e206669c..93901d826 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/figureoptions.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/qt_editor/__pycache__/figureoptions.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/collections.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/collections.py index 81db24d0c..81cd13567 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/collections.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/collections.py @@ -1038,12 +1038,12 @@ def legend_elements(self, prop="colors", num="auto", Create legend handles and labels for a PathCollection. Each legend handle is a `.Line2D` representing the Path that was drawn, - and each label is a string what each Path represents. + and each label is a string that represents the Path. This is useful for obtaining a legend for a `~.Axes.scatter` plot; e.g.:: - scatter = plt.scatter([1, 2, 3], [4, 5, 6], c=[7, 2, 3]) + scatter = plt.scatter([1, 2, 3], [4, 5, 6], c=[7, 2, 3], num=None) plt.legend(*scatter.legend_elements()) creates three legend elements, one for each color with the numerical diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/colors.py b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/colors.py index bd89e7004..81db16115 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/colors.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/colors.py @@ -127,8 +127,8 @@ class ColorSequenceRegistry(Mapping): 'Accent': _cm._Accent_data, 'Dark2': _cm._Dark2_data, 'Set1': _cm._Set1_data, - 'Set2': _cm._Set1_data, - 'Set3': _cm._Set1_data, + 'Set2': _cm._Set2_data, + 'Set3': _cm._Set3_data, } def __init__(self): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/ft2font.cpython-312-x86_64-linux-gnu.so b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/ft2font.cpython-312-x86_64-linux-gnu.so index fa707ed13..844e2e872 100755 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/ft2font.cpython-312-x86_64-linux-gnu.so and b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/ft2font.cpython-312-x86_64-linux-gnu.so differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/mpl-data/images/hand.svg b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/mpl-data/images/hand.svg index f246f51e5..28b96a2a9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/mpl-data/images/hand.svg +++ b/.CondaPkg/env/lib/python3.12/site-packages/matplotlib/mpl-data/images/hand.svg @@ -5,7 +5,7 @@ ]> - + 0 - XYZ = XYZ[mask] if normalize: - UVW = UVW[mask] / norm[mask].reshape((-1, 1)) - else: - UVW = UVW[mask] + norm = np.linalg.norm(UVW, axis=1) + norm[norm == 0] = 1 + UVW = UVW / norm.reshape((-1, 1)) if len(XYZ) > 0: # compute the shaft lines all at once with an outer product @@ -2749,7 +2744,7 @@ def calc_arrows(UVW): # transpose to get a list of lines heads = heads.swapaxes(0, 1) - lines = [*shafts, *heads] + lines = [*shafts, *heads[::2], *heads[1::2]] else: lines = [] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/__init__.cpython-312.pyc index 335f71f44..7c20f1c8c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/conftest.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/conftest.cpython-312.pyc index 6de7ead59..4287e31fa 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/conftest.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/conftest.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_art3d.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_art3d.cpython-312.pyc index c2bd4de41..85d343209 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_art3d.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_art3d.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_axes3d.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_axes3d.cpython-312.pyc index 73c857665..e12d675ed 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_axes3d.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_axes3d.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_legend3d.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_legend3d.cpython-312.pyc index 559b29393..c68daa712 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_legend3d.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/__pycache__/test_legend3d.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.py b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.py index 9cebc8a33..b3fcffcc6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/mpl_toolkits/mplot3d/tests/test_axes3d.py @@ -806,7 +806,8 @@ def test_mixedsamplesraises(): ax.plot_surface(X, Y, Z, cstride=50, rcount=10) -@mpl3d_image_comparison(['quiver3d.png'], style='mpl20') +# remove tolerance when regenerating the test image +@mpl3d_image_comparison(['quiver3d.png'], style='mpl20', tol=0.003) def test_quiver3d(): fig = plt.figure() ax = fig.add_subplot(projection='3d') @@ -853,6 +854,19 @@ def test_quiver3d_masked(): ax.quiver(x, y, z, u, v, w, length=0.1, pivot='tip', normalize=True) +@mpl3d_image_comparison(['quiver3d_colorcoded.png'], style='mpl20') +def test_quiver3d_colorcoded(): + fig = plt.figure() + ax = fig.add_subplot(projection='3d') + + x = y = dx = dz = np.zeros(10) + z = dy = np.arange(10.) + + color = plt.cm.Reds(dy/dy.max()) + ax.quiver(x, y, z, dx, dy, dz, colors=color) + ax.set_ylim(0, 10) + + def test_patch_modification(): fig = plt.figure() ax = fig.add_subplot(projection="3d") @@ -1519,7 +1533,8 @@ def test_minor_ticks(): ax.set_zticklabels(["half"], minor=True) -@mpl3d_image_comparison(['errorbar3d_errorevery.png'], style='mpl20') +# remove tolerance when regenerating the test image +@mpl3d_image_comparison(['errorbar3d_errorevery.png'], style='mpl20', tol=0.003) def test_errorbar3d_errorevery(): """Tests errorevery functionality for 3D errorbars.""" t = np.arange(0, 2*np.pi+.1, 0.01) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/INSTALLER b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/INSTALLER similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/INSTALLER rename to .CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/INSTALLER diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/LICENSE.txt b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/LICENSE.txt similarity index 97% rename from .CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/LICENSE.txt rename to .CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/LICENSE.txt index 42b6f17a6..100b4bffb 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/LICENSE.txt +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/LICENSE.txt @@ -2,7 +2,7 @@ NetworkX is distributed with the 3-clause BSD license. :: - Copyright (C) 2004-2023, NetworkX Developers + Copyright (C) 2004-2024, NetworkX Developers Aric Hagberg Dan Schult Pieter Swart diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/METADATA b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/METADATA similarity index 89% rename from .CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/METADATA rename to .CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/METADATA index ac51fe019..fa5e70540 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/METADATA +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: networkx -Version: 3.2.1 +Version: 3.3 Summary: Python package for creating and manipulating graphs and networks Author-email: Aric Hagberg Maintainer-email: NetworkX Developers @@ -19,7 +19,6 @@ Classifier: Intended Audience :: Science/Research Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 @@ -29,16 +28,16 @@ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics Classifier: Topic :: Scientific/Engineering :: Information Analysis Classifier: Topic :: Scientific/Engineering :: Mathematics Classifier: Topic :: Scientific/Engineering :: Physics -Requires-Python: >=3.9 +Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE.txt Provides-Extra: default -Requires-Dist: numpy >=1.22 ; extra == 'default' +Requires-Dist: numpy >=1.23 ; extra == 'default' Requires-Dist: scipy !=1.11.0,!=1.11.1,>=1.9 ; extra == 'default' -Requires-Dist: matplotlib >=3.5 ; extra == 'default' +Requires-Dist: matplotlib >=3.6 ; extra == 'default' Requires-Dist: pandas >=1.4 ; extra == 'default' Provides-Extra: developer -Requires-Dist: changelist ==0.4 ; extra == 'developer' +Requires-Dist: changelist ==0.5 ; extra == 'developer' Requires-Dist: pre-commit >=3.2 ; extra == 'developer' Requires-Dist: mypy >=1.1 ; extra == 'developer' Requires-Dist: rtoml ; extra == 'developer' @@ -46,15 +45,14 @@ Provides-Extra: doc Requires-Dist: sphinx >=7 ; extra == 'doc' Requires-Dist: pydata-sphinx-theme >=0.14 ; extra == 'doc' Requires-Dist: sphinx-gallery >=0.14 ; extra == 'doc' -Requires-Dist: numpydoc >=1.6 ; extra == 'doc' +Requires-Dist: numpydoc >=1.7 ; extra == 'doc' Requires-Dist: pillow >=9.4 ; extra == 'doc' -Requires-Dist: nb2plots >=0.7 ; extra == 'doc' Requires-Dist: texext >=0.6.7 ; extra == 'doc' -Requires-Dist: nbconvert <7.9 ; extra == 'doc' +Requires-Dist: myst-nb >=1.0 ; extra == 'doc' Provides-Extra: extra Requires-Dist: lxml >=4.6 ; extra == 'extra' -Requires-Dist: pygraphviz >=1.11 ; extra == 'extra' -Requires-Dist: pydot >=1.4.2 ; extra == 'extra' +Requires-Dist: pygraphviz >=1.12 ; extra == 'extra' +Requires-Dist: pydot >=2.0 ; extra == 'extra' Requires-Dist: sympy >=1.10 ; extra == 'extra' Provides-Extra: test Requires-Dist: pytest >=7.2 ; extra == 'test' @@ -129,7 +127,7 @@ License Released under the 3-Clause BSD license (see `LICENSE.txt`):: - Copyright (C) 2004-2023 NetworkX Developers + Copyright (C) 2004-2024 NetworkX Developers Aric Hagberg Dan Schult Pieter Swart diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/RECORD b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/RECORD similarity index 66% rename from .CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/RECORD rename to .CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/RECORD index fbef7fc66..357248ebb 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/RECORD +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/RECORD @@ -1,11 +1,11 @@ -networkx-3.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -networkx-3.2.1.dist-info/LICENSE.txt,sha256=ULWifLQ_eiDO3nqnuasgM1UuBBLJof3lHTiIXBQX6V8,1763 -networkx-3.2.1.dist-info/METADATA,sha256=tEByL1NhNlpdXiGfQDexQA_h5H6sFB1UMtQUJwDr3xQ,5232 -networkx-3.2.1.dist-info/RECORD,, -networkx-3.2.1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92 -networkx-3.2.1.dist-info/entry_points.txt,sha256=b0FW-zm-m9itB-Zkm7w_8c9yX9WGGTg-r_N_A32PAGs,87 -networkx-3.2.1.dist-info/top_level.txt,sha256=s3Mk-7KOlu-kD39w8Xg_KXoP5Z_MVvgB-upkyuOE4Hk,9 -networkx/__init__.py,sha256=WwK4KM7w30c5F2xUgs4N0ylwaixla1rJ-4qThcPnjho,1091 +networkx-3.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +networkx-3.3.dist-info/LICENSE.txt,sha256=W0M7kPdV65u9Bv7_HRpPXyMsUgihhWlBmeRfqV12J5I,1763 +networkx-3.3.dist-info/METADATA,sha256=YQezeWnohXGh2TPdJ8pc1uuJaJ0gu8Q6rifuJxSHL1A,5131 +networkx-3.3.dist-info/RECORD,, +networkx-3.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92 +networkx-3.3.dist-info/entry_points.txt,sha256=b0FW-zm-m9itB-Zkm7w_8c9yX9WGGTg-r_N_A32PAGs,87 +networkx-3.3.dist-info/top_level.txt,sha256=s3Mk-7KOlu-kD39w8Xg_KXoP5Z_MVvgB-upkyuOE4Hk,9 +networkx/__init__.py,sha256=gVLXWn6YmX68Cl9mmGpqPZLtiIIVUqGmUyztqRfhry4,1106 networkx/__pycache__/__init__.cpython-312.pyc,, networkx/__pycache__/conftest.cpython-312.pyc,, networkx/__pycache__/convert.cpython-312.pyc,, @@ -13,11 +13,12 @@ networkx/__pycache__/convert_matrix.cpython-312.pyc,, networkx/__pycache__/exception.cpython-312.pyc,, networkx/__pycache__/lazy_imports.cpython-312.pyc,, networkx/__pycache__/relabel.cpython-312.pyc,, -networkx/algorithms/__init__.py,sha256=Rz_AEhB6u0naGx7ejzbvXrMXixWM47ydmjnGOuofzqo,6512 +networkx/algorithms/__init__.py,sha256=oij1HDNcE7GhTPAtuHYT8eGZdH4K_vYaha51X5XoUCY,6559 networkx/algorithms/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/__pycache__/asteroidal.cpython-312.pyc,, networkx/algorithms/__pycache__/boundary.cpython-312.pyc,, networkx/algorithms/__pycache__/bridges.cpython-312.pyc,, +networkx/algorithms/__pycache__/broadcasting.cpython-312.pyc,, networkx/algorithms/__pycache__/chains.cpython-312.pyc,, networkx/algorithms/__pycache__/chordal.cpython-312.pyc,, networkx/algorithms/__pycache__/clique.cpython-312.pyc,, @@ -84,16 +85,16 @@ networkx/algorithms/approximation/__pycache__/steinertree.cpython-312.pyc,, networkx/algorithms/approximation/__pycache__/traveling_salesman.cpython-312.pyc,, networkx/algorithms/approximation/__pycache__/treewidth.cpython-312.pyc,, networkx/algorithms/approximation/__pycache__/vertex_cover.cpython-312.pyc,, -networkx/algorithms/approximation/clique.py,sha256=y4AeIvmGpMmM0kKRaFQKEORyUVmwakM_Vqz0Mdgnd94,7674 -networkx/algorithms/approximation/clustering_coefficient.py,sha256=jbWKI0fd79_vH4lHkzPXU1cyD8mb9MDej3v9OKQnv5s,2084 -networkx/algorithms/approximation/connectivity.py,sha256=PbGbwOk3dE4phai74vxz7pj1lK3q_gbYrNtMltu2MDw,13107 -networkx/algorithms/approximation/distance_measures.py,sha256=9MUKk23jP7klSgN718h7ttVM_xKPE4dMkxop7BvjkcU,5593 -networkx/algorithms/approximation/dominating_set.py,sha256=oGr5hRltwqd3JltGX-LIC7Sq7LGjltfdUGmBXWdAR7s,4214 -networkx/algorithms/approximation/kcomponents.py,sha256=AN9co8R7Lmgx5N_CbSrSmkQhfFbfbsJtwrUxSDBd284,13282 -networkx/algorithms/approximation/matching.py,sha256=1xfEMDlvcV8J78kgUhbC9FkaTnwC6mjYtNesGTYgmVg,1170 -networkx/algorithms/approximation/maxcut.py,sha256=rWHElMJvy5g4Yy_Tk11tlFFwQ16AV07K6rW1bIwWHTU,3664 -networkx/algorithms/approximation/ramsey.py,sha256=xOZDmJqCm-ya7utQhQOmVM_5LO-O_1e5UDw-YIWr9rY,1353 -networkx/algorithms/approximation/steinertree.py,sha256=tE-4_f1fPpR_hvCudJlzNzkYq_5kyT4OxxJBbfErWJ8,7487 +networkx/algorithms/approximation/clique.py,sha256=pkIg-cIgRxDHwGrQEwSsu_dca2ONdpwkw7heSALfOIg,7690 +networkx/algorithms/approximation/clustering_coefficient.py,sha256=SWpSLEhW3DJc1n2fHlSbJSGg3wdoJkN5Y4_tnntn0Ws,2164 +networkx/algorithms/approximation/connectivity.py,sha256=Zh0kx9Tc2fbcBgrJM33Ow8_v1rz4DVAR_d1sJbD2x4w,13119 +networkx/algorithms/approximation/distance_measures.py,sha256=UEkmKagNw9sj8kiUDdbAeYuzvZ31pgLMXqzliqMkG84,5805 +networkx/algorithms/approximation/dominating_set.py,sha256=HdwxBt82rilwaSzaCUXpgBvikv9qvCqcqnmpKiPNL40,4709 +networkx/algorithms/approximation/kcomponents.py,sha256=BJ1nNpQ9TbDqZTmSr0QZZa3i3uDAtiUK4CzPpMpJzyk,13286 +networkx/algorithms/approximation/matching.py,sha256=gwBVSGEgME38WLz_lSzt9ZKp-oWzXAo1ac1Kos98tB4,1174 +networkx/algorithms/approximation/maxcut.py,sha256=eTQZqsDQAAUaufni-aDJAY2UzIcajDhRMdj-AcqVkPs,4333 +networkx/algorithms/approximation/ramsey.py,sha256=UjY5DlkL7j6HagdcmF8T_w07JuSv5fylf9EI8BTmMDQ,1357 +networkx/algorithms/approximation/steinertree.py,sha256=GAHjv9KjzTGAERSOVHBBTgbd8g8mpz_ZifxtFtnTyGk,7414 networkx/algorithms/approximation/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/approximation/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/approximation/tests/__pycache__/test_approx_clust_coeff.cpython-312.pyc,, @@ -116,15 +117,15 @@ networkx/algorithms/approximation/tests/test_distance_measures.py,sha256=GSyupA_ networkx/algorithms/approximation/tests/test_dominating_set.py,sha256=l4pBDY7pK7Fxw-S4tOlNcxf-j2j5GpHPJ9f4TrMs1sI,2686 networkx/algorithms/approximation/tests/test_kcomponents.py,sha256=tTljP1FHzXrUwi-oBz5AQcibRw1NgR4N5UE0a2OrOUA,9346 networkx/algorithms/approximation/tests/test_matching.py,sha256=nitZncaM0605kaIu1NO6_5TFV2--nohUCO46XTD_lnM,186 -networkx/algorithms/approximation/tests/test_maxcut.py,sha256=HDFNx896WYi7do42P6C5tGTZsBpiqx7sUWm_2riE3nk,2426 +networkx/algorithms/approximation/tests/test_maxcut.py,sha256=U6CDZFSLfYDII-1nX9XB7avSz10kTx88vNazJFoLQ1k,2804 networkx/algorithms/approximation/tests/test_ramsey.py,sha256=h36Ol39csHbIoTDBxbxMgn4371iVUGZ3a2N6l7d56lI,1143 -networkx/algorithms/approximation/tests/test_steinertree.py,sha256=H6IKKl1kFeH96bJaI8CgSkXBJz34ceCft8DA7HNG-Mk,6901 -networkx/algorithms/approximation/tests/test_traveling_salesman.py,sha256=El7VoCuHfmb_DQxlQgo5k9L6lL6U4DBu70BgJ0REJyg,30697 +networkx/algorithms/approximation/tests/test_steinertree.py,sha256=HhYvosChxB-kTu9XtKcxVxJndxZkOjVMG5tKfjRC9mM,8368 +networkx/algorithms/approximation/tests/test_traveling_salesman.py,sha256=nr4KrhJfVR4S7TpCc6QMTDUJYZn1YGmDwprTXoFtlZ4,30928 networkx/algorithms/approximation/tests/test_treewidth.py,sha256=MWFFcmjO0QxM8FS8iXSCtfGnk6eqG2kFyv1u2qnSeUo,9096 networkx/algorithms/approximation/tests/test_vertex_cover.py,sha256=FobHNhG9CAMeB_AOEprUs-7XQdPoc1YvfmXhozDZ8pM,1942 -networkx/algorithms/approximation/traveling_salesman.py,sha256=FbysLItH41SzBjKIoByYqcvuqIboO8HwNYCO2DJjQ4g,54465 -networkx/algorithms/approximation/treewidth.py,sha256=MRGfLtAanCzDk1G6I6jTbC6MKn6lYreIe9XQdfRXGHE,8148 -networkx/algorithms/approximation/vertex_cover.py,sha256=s7s5v4TGqIlvgTAg2FVxRRUSA2BEp7szZg7FS_UpWAA,2798 +networkx/algorithms/approximation/traveling_salesman.py,sha256=tGw-gV5yfo6eqg7t3K_c_L2ClATjnxAB0hFsEma8dh0,55917 +networkx/algorithms/approximation/treewidth.py,sha256=Yu944jTE9MODBo1QiZjxbAGmHiC5MXZZTNV1YrLfz9o,8216 +networkx/algorithms/approximation/vertex_cover.py,sha256=85QvMQ7qJjv7WUclpwvaOKF_g6TQjW7OvfWTQJr8fXQ,2802 networkx/algorithms/assortativity/__init__.py,sha256=ov3HRRbeYB_6Qezvxp1OTl77GBpw-EWkWGUzgfT8G9c,294 networkx/algorithms/assortativity/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/assortativity/__pycache__/connectivity.cpython-312.pyc,, @@ -132,11 +133,11 @@ networkx/algorithms/assortativity/__pycache__/correlation.cpython-312.pyc,, networkx/algorithms/assortativity/__pycache__/mixing.cpython-312.pyc,, networkx/algorithms/assortativity/__pycache__/neighbor_degree.cpython-312.pyc,, networkx/algorithms/assortativity/__pycache__/pairs.cpython-312.pyc,, -networkx/algorithms/assortativity/connectivity.py,sha256=O1b3Iky0hlpdM6_QBmBNFfF4XeUsKDMj8fCid_bBRQE,4216 -networkx/algorithms/assortativity/correlation.py,sha256=6XUlbqlBgLyb8GDKsSvIrSgsL47Ti1jbLQoIdRVAj_k,8654 -networkx/algorithms/assortativity/mixing.py,sha256=adB-iqzA_lhjhnoOOZG9qK4ghRTZCjONYN9FePYqcj8,7551 -networkx/algorithms/assortativity/neighbor_degree.py,sha256=H1XQ9BenXxxHK_e6ZWtdIb3xYwYCrbtqEQ69Gasm7cA,5278 -networkx/algorithms/assortativity/pairs.py,sha256=qHALwEx_Q8N1B2ZszX8vs2BK2_0kc4lmbth4kMU6Nog,3393 +networkx/algorithms/assortativity/connectivity.py,sha256=-V0C5MTqtErl86N-gyrZ487MUyiG5x1QFEZKurOpIJA,4220 +networkx/algorithms/assortativity/correlation.py,sha256=gt5tpIWbtDCTIoi5FkkbZerwdKUSQ8trITiJ3A_qEok,8689 +networkx/algorithms/assortativity/mixing.py,sha256=hufm-t94FHlwLAqxJm-jcl_VygfVzMYtjn9PJ3qX8jQ,7585 +networkx/algorithms/assortativity/neighbor_degree.py,sha256=UMaQWKBkOZ0ZgC8xGt5fXEz8OL1rgwYjt2zKbKEqofI,5282 +networkx/algorithms/assortativity/pairs.py,sha256=IhFIelzVVKr0OHC1owPgdHasADbNuR89Y4DN0IeRVnM,3401 networkx/algorithms/assortativity/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/assortativity/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/assortativity/tests/__pycache__/base_test.cpython-312.pyc,, @@ -151,7 +152,7 @@ networkx/algorithms/assortativity/tests/test_correlation.py,sha256=1_D9GjLDnlT8U networkx/algorithms/assortativity/tests/test_mixing.py,sha256=u-LIccNn-TeIAM766UtzUJQlY7NAbxF4EsUoKINzmlo,6820 networkx/algorithms/assortativity/tests/test_neighbor_degree.py,sha256=ODP2M8jCaFr_l3ODwpwaz20-KqU2IFaEfJRBK53mpE8,3968 networkx/algorithms/assortativity/tests/test_pairs.py,sha256=t05qP_-gfkbiR6aTLtE1owYl9otBSsuJcRkuZsa63UQ,3008 -networkx/algorithms/asteroidal.py,sha256=ARFht3oQvn95xCaaBEhy42djMIx4BuqsNf8VVlwBCEI,5852 +networkx/algorithms/asteroidal.py,sha256=waDgHY2mHar0zqWMfaAF_3Wr8CwpdlNb3n6HhM6SkM4,5864 networkx/algorithms/bipartite/__init__.py,sha256=NQtAEpZ0IkjGVwfUbOzD7eoPLwulb_iZfh7-aDnyPWo,3826 networkx/algorithms/bipartite/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/bipartite/__pycache__/basic.cpython-312.pyc,, @@ -166,18 +167,18 @@ networkx/algorithms/bipartite/__pycache__/matrix.cpython-312.pyc,, networkx/algorithms/bipartite/__pycache__/projection.cpython-312.pyc,, networkx/algorithms/bipartite/__pycache__/redundancy.cpython-312.pyc,, networkx/algorithms/bipartite/__pycache__/spectral.cpython-312.pyc,, -networkx/algorithms/bipartite/basic.py,sha256=iqgNX-FUDwK2owu1APFTu6ldlw6QE2PaOuNiWEgHafQ,8350 -networkx/algorithms/bipartite/centrality.py,sha256=vkjnOLv5CQtfTOFpa2YhFZWRnMBFUCetGn1w7akAvq8,9144 -networkx/algorithms/bipartite/cluster.py,sha256=S9h8lu-usXFcXEJf6qUxZinf0LneqvKnEiUi9YKp7bo,6925 -networkx/algorithms/bipartite/covering.py,sha256=8pQEStjAGygcu83Cz88RfNAifUV7x8pC84LE2wWapsY,2160 -networkx/algorithms/bipartite/edgelist.py,sha256=aa5sHvwCLe0Lk7BK58tR5vMNjpnlfSaNSs6UY6G5vbc,11317 -networkx/algorithms/bipartite/extendability.py,sha256=CvF0zI__9899cMkq40vu_FfEcU-OeyCB4C2bHtMxxgE,3973 -networkx/algorithms/bipartite/generators.py,sha256=Hj-kPfih-bd74gHrZFpyeWtrMQbKS1uQyYiBqv5RxKQ,20231 -networkx/algorithms/bipartite/matching.py,sha256=kXgpv14FuL6k4KrKN68Z85dkKNgfBmxahTMn4N8aVoI,21620 -networkx/algorithms/bipartite/matrix.py,sha256=w9P7y4oS7vUFdv2dRQHAosuFDrH34YgMgUffQCSFRDE,6127 -networkx/algorithms/bipartite/projection.py,sha256=L9mkbufsE885rGhJ9t-7p-TqowBtUmrL8Zm95LeBygQ,17165 -networkx/algorithms/bipartite/redundancy.py,sha256=T2kDtj1xpSudwelE_ZnWFHnIXneZAMaXvv1m7pVF3Io,3397 -networkx/algorithms/bipartite/spectral.py,sha256=xxkLlaSByMJUP4Kz-XfuRhzTse_DqqsOtGzfiKIgdXc,1880 +networkx/algorithms/bipartite/basic.py,sha256=WT65q-pQLc6SN5OFIrK8zDHC43tsy2j0xp2ImSCVZpg,8374 +networkx/algorithms/bipartite/centrality.py,sha256=G280bAqeyXyCmes5NpRqUv2Tc-EHWrMshJ3_f4uqV9U,9156 +networkx/algorithms/bipartite/cluster.py,sha256=P_Oh89liMvxf-V-FSk6xqEtz4PGjcx4WVqeNOFOB1fg,6937 +networkx/algorithms/bipartite/covering.py,sha256=Gyy5JahsHit9ycf1CX6YhpsBAY3uXh9vrcWBW1V20go,2164 +networkx/algorithms/bipartite/edgelist.py,sha256=tZbZrCGNaBMkrombWLkqY93D_h0gxoiEe2oSS74QBP4,11358 +networkx/algorithms/bipartite/extendability.py,sha256=RBOONtAYNoDQRA-L8dOrztICGPcr6Ckc7gdB3RNIUjY,3991 +networkx/algorithms/bipartite/generators.py,sha256=jslxxmjzkTsSOzheHK5YQaOycCHgMjIM1FfBpJ5ySjM,20423 +networkx/algorithms/bipartite/matching.py,sha256=NLWosugOWc5K1vSlhoeD-UYC7UbkLnZAXGxzaS4h7uI,21636 +networkx/algorithms/bipartite/matrix.py,sha256=CpgbFU-Kr8RSyE5vYm0od4xhxmFv2a62xss8K4BdxKw,6155 +networkx/algorithms/bipartite/projection.py,sha256=y0FeeEkqRHwrYus4WMtEbcFYC9QLlr_q7mYtg0HDBgo,17207 +networkx/algorithms/bipartite/redundancy.py,sha256=YGaWS3aT-6FTIdMt159H7IdRhWudOuCp8_sdeZKHpyc,3401 +networkx/algorithms/bipartite/spectral.py,sha256=xm7TuqlZQDHGmlFzrjPM-uRNAdRi-6KKayabnf_YG4M,1901 networkx/algorithms/bipartite/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/bipartite/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/bipartite/tests/__pycache__/test_basic.cpython-312.pyc,, @@ -196,16 +197,17 @@ networkx/algorithms/bipartite/tests/test_basic.py,sha256=gzbtsQqPi85BznX5REdGBBJ networkx/algorithms/bipartite/tests/test_centrality.py,sha256=PABPbrIyoAziEEQKXsZLl2jT36N8DZpNRzEO-jeu89Y,6362 networkx/algorithms/bipartite/tests/test_cluster.py,sha256=O0VsPVt8vcY_E1FjjLJX2xaUbhVViI5MP6_gLTbEpos,2801 networkx/algorithms/bipartite/tests/test_covering.py,sha256=EGVxYQsyLXE5yY5N5u6D4wZq2NcZe9OwlYpEuY6DF3o,1221 -networkx/algorithms/bipartite/tests/test_edgelist.py,sha256=UE7vm3iZshnlzIrcupso48en0kncxGUPU7XTQskgowg,7996 -networkx/algorithms/bipartite/tests/test_extendability.py,sha256=MsiRLfldka3Cz_h21BwPxnEOuKChntuI6mVCnIFnSs0,6780 +networkx/algorithms/bipartite/tests/test_edgelist.py,sha256=nhA-SRF1iswNfrJpCNoDGjx3Se2Ukzs7r8TYhEldkeY,7764 +networkx/algorithms/bipartite/tests/test_extendability.py,sha256=XgPmg6bWiHAF1iQ75_r2NqUxExOQNZRUeYUPzlCa5-E,7043 networkx/algorithms/bipartite/tests/test_generators.py,sha256=GLMThTKIfZ96NwTxIL0P0o0OAESZFfnySRkRjtKhao8,12794 networkx/algorithms/bipartite/tests/test_matching.py,sha256=wFw095skCjW5YvQAnIie8mLacECVt0yUoeJFSj8ONAk,11972 -networkx/algorithms/bipartite/tests/test_matrix.py,sha256=EoqQKTMcPPPPUZYTzc-AAtl5F77qT0X3FI3E1tYppxM,2900 +networkx/algorithms/bipartite/tests/test_matrix.py,sha256=1MymSi1dCUqAhTt82O2nBzjriNQtFRk6TxWGJ2FBW4k,3094 networkx/algorithms/bipartite/tests/test_project.py,sha256=FBjkys3JYYzEG4aq_CsQrtm41edZibWI_uDAQ0b4wqM,15134 networkx/algorithms/bipartite/tests/test_redundancy.py,sha256=ddjUzOQ0gkiWBLtVwVFYTJydaIdW3qAc4BCVscxj7-Q,919 networkx/algorithms/bipartite/tests/test_spectral_bipartivity.py,sha256=1jGDgrIx3-TWOCNMSC4zxmZa7LHyMU69DXh3h12Bjag,2358 -networkx/algorithms/boundary.py,sha256=GNuNDL280F7RXMzgkhUqFx-Zcg1LtP_Q0bNCYbMWIYU,5330 -networkx/algorithms/bridges.py,sha256=MuH_zEBqeSuyou8wszhnEzjJrUZSN-PpNtaScqUmR6E,6075 +networkx/algorithms/boundary.py,sha256=Ryns8peL17sBJcBUOKO26GIaTTUeFAfm6iTX2VaYzsI,5338 +networkx/algorithms/bridges.py,sha256=-SN3YpgEXWle52K3omTtLHkWvYN_6yjiZGORQc0FVYo,6087 +networkx/algorithms/broadcasting.py,sha256=eqqZJ7oDQVCl7P3-PLm-gthzSc-kWnF2D1Yv42GXoGk,4890 networkx/algorithms/centrality/__init__.py,sha256=Er3YoYoj76UfY4P6I0L-0fCQkO7mMU0b3NLsTT2RGWI,558 networkx/algorithms/centrality/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/centrality/__pycache__/betweenness.cpython-312.pyc,, @@ -229,25 +231,25 @@ networkx/algorithms/centrality/__pycache__/second_order.cpython-312.pyc,, networkx/algorithms/centrality/__pycache__/subgraph_alg.cpython-312.pyc,, networkx/algorithms/centrality/__pycache__/trophic.cpython-312.pyc,, networkx/algorithms/centrality/__pycache__/voterank_alg.cpython-312.pyc,, -networkx/algorithms/centrality/betweenness.py,sha256=Uy9LCiUxzx1Jvgi7SgV-4AEG1BfvDy2ypWg6Xzfd0_8,14374 -networkx/algorithms/centrality/betweenness_subset.py,sha256=SW7uh0SyGhD_99gwAIGOHrJ9rlO3jXw7xHi-tOHmspE,9327 -networkx/algorithms/centrality/closeness.py,sha256=97qc3gCkitgyLh66sYcdpSRnl7cdUrDgRBP49jDlNNw,10252 -networkx/algorithms/centrality/current_flow_betweenness.py,sha256=eDoDGCVR1PIL5hIY07xRJ6Ze74S4v1HUGJGZ9DbfQW8,11871 -networkx/algorithms/centrality/current_flow_betweenness_subset.py,sha256=QAxgfH20BkeoGgjKPVHVRDrJ6kkGQ1MNmZIVV5baWaM,8046 -networkx/algorithms/centrality/current_flow_closeness.py,sha256=jId4MzTctT0NIJOrzTPsd_gomLSMAg_1SXuXGDZja18,3351 -networkx/algorithms/centrality/degree_alg.py,sha256=xwK263egt-sy-BBxVqL9CE7uF22UhJQls8NlVu3QfZU,3881 -networkx/algorithms/centrality/dispersion.py,sha256=Eld3WK97coVbsHjAJ3ewYI1vsJ0c4Nm3Yrznbec5G8c,3627 -networkx/algorithms/centrality/eigenvector.py,sha256=o0qmWOiMf18Hofdw0ACaAO3TASeJC89R1meCr3ILJi0,12738 -networkx/algorithms/centrality/flow_matrix.py,sha256=G7o6qTnkOlhUZ-DowDu5Xb0vQAiulXcP_veiuYpaPdU,3829 -networkx/algorithms/centrality/group.py,sha256=XBfaGSIgVc-an4Ecqvokd1smETuQ_lUTAtOduKA8YDg,27866 -networkx/algorithms/centrality/harmonic.py,sha256=0eFa5Kv-7Ff_TFuygH753cnQjDqeImkPgrKohtXhGFE,2626 -networkx/algorithms/centrality/katz.py,sha256=K3KVHs3RMGjywLa5tvwEk4xqoBedgytEXINcSjHzy4s,10941 -networkx/algorithms/centrality/laplacian.py,sha256=BHdSIiFBjqZGijThqYQHS3J2-KHnd8DdzQDwAXJwyt0,5403 -networkx/algorithms/centrality/load.py,sha256=6lFI7KqDsVit1QF1UXqrx5G_frELnG8UKOmqtETC5bs,6850 -networkx/algorithms/centrality/percolation.py,sha256=PcWtbDaXvTLeqr1PCbnIHjoD8XcfQTp1meff7FHU1As,4415 -networkx/algorithms/centrality/reaching.py,sha256=nMKAOEbpHajkGKIYxGYEhO70fI2KXeReVsJgaRplN0E,7017 -networkx/algorithms/centrality/second_order.py,sha256=hFk_RFwYpIRlh_iGPO-ZSNzp6Anb73jod_fLYTMvfYk,4966 -networkx/algorithms/centrality/subgraph_alg.py,sha256=BIxHyH7E3I1Ri2dDnnFPy9IOc65ouwk8Y_jc5JMEGRM,9472 +networkx/algorithms/centrality/betweenness.py,sha256=-dVKBg2CJOChZl2r_GakATkSGTQPvlSHky2oHv0fHdk,14382 +networkx/algorithms/centrality/betweenness_subset.py,sha256=iNUqXSGn07Wd_afFf4c8G2C4J8uT2UuJHJ9oGz_ZGBY,9335 +networkx/algorithms/centrality/closeness.py,sha256=MghxdMUR2s5JQER6339E7IX8Px1NPvyBNY-mP2pxL9c,10280 +networkx/algorithms/centrality/current_flow_betweenness.py,sha256=zRtaE6HycVWHz3u3DYs9XpP2ded7h63WJ-Ls71d52-M,11847 +networkx/algorithms/centrality/current_flow_betweenness_subset.py,sha256=xkCsv6noUVen4j8AWstjfIo09mkobG7VDawSrrYxzs4,8106 +networkx/algorithms/centrality/current_flow_closeness.py,sha256=2JJuPrZfDywjRxE-MAGqOS53HXhRb_LV19JRHzCcmE8,3326 +networkx/algorithms/centrality/degree_alg.py,sha256=PNvEQa7sZsTbbWjsE4f8NdpRoybPw83OuzAlqfQ5twk,3893 +networkx/algorithms/centrality/dispersion.py,sha256=M12L2KiVPrC2-SyCXMF0kvxLelgcmvXJkLT_cBHoCTw,3631 +networkx/algorithms/centrality/eigenvector.py,sha256=WTxH5lUPfzTjIcvKY8Jio0Vj_-8KT8HxWPzjLDy9pe0,12757 +networkx/algorithms/centrality/flow_matrix.py,sha256=TnGdY1mPvRprfI8IFMdpYQd4FsiP-6PoHhT4EQ5b0EM,3833 +networkx/algorithms/centrality/group.py,sha256=BdqFUfOpuubh-pN3qDDEQDz4II82xp71LBMiRITz1OI,27959 +networkx/algorithms/centrality/harmonic.py,sha256=OlklWOmsEXBxUzHpJePZFxE-yjszd8zEEeSsFQZAktk,2630 +networkx/algorithms/centrality/katz.py,sha256=x1Lg0VkQf3TzCRJEjTi--gQDb_UPSUFNXbW7XTyWl0k,11041 +networkx/algorithms/centrality/laplacian.py,sha256=1ceW7VkhT1QrKgU6lJIrbBBvVmLZoG_hUbxNh7OLXAI,5639 +networkx/algorithms/centrality/load.py,sha256=qz4ogD1_tMDDr2uXrIg7EQnEW2CIYpEOphKMk5n_R-c,6858 +networkx/algorithms/centrality/percolation.py,sha256=YJB8iYgbpjJ3EYK8pl26iSnjgfFsK31ufytRHnUTYYE,4419 +networkx/algorithms/centrality/reaching.py,sha256=aq9MQNBHEF_zJsxdNWAfuvztTwdrNfgMALCkoBOXu2Y,7025 +networkx/algorithms/centrality/second_order.py,sha256=4CTboP95B6gUtAtSKLfeeE4s9oq0_3hXsXczxL6c_g8,5012 +networkx/algorithms/centrality/subgraph_alg.py,sha256=8yhWUYqj0trBjH21ndYyxUQt6JcbPff7v9FNY8V7214,9512 networkx/algorithms/centrality/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/centrality/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality.cpython-312.pyc,, @@ -290,28 +292,29 @@ networkx/algorithms/centrality/tests/test_second_order_centrality.py,sha256=ce0w networkx/algorithms/centrality/tests/test_subgraph.py,sha256=vhE9Uh-_Hlk49k-ny6ORHCgqk7LWH8OHIYOEYM96uz0,3729 networkx/algorithms/centrality/tests/test_trophic.py,sha256=AzV6rwcTa4b4tcenoKh95o6VF-z7w75l81ZOdhhi6yE,8705 networkx/algorithms/centrality/tests/test_voterank.py,sha256=7Z9aQYKqEw_txBbWTz1FZWJzUmhjlMfDFSRIKHBdkOk,1692 -networkx/algorithms/centrality/trophic.py,sha256=ay_R2GtxxfP5muSoxSETt6wdqYka14J1f1Z9zafY790,4654 -networkx/algorithms/centrality/voterank_alg.py,sha256=UG71jAEm4b0vqj6ZQ-so8yqQtdxDoK8XI5CWTdjAyhg,3227 -networkx/algorithms/chains.py,sha256=wUNxO0v_nH9m5efeV0IXzog_5EbBl0PkVzgDJoCAJts,6964 -networkx/algorithms/chordal.py,sha256=H5fdhTaX5UzKWVj4mQQd7cjj_oj84R91rUGRiuug_Gk,13285 -networkx/algorithms/clique.py,sha256=gM-ksRAEX1eDr_Irk85uuUGVKRpFIYijeOo385mVsxs,25802 -networkx/algorithms/cluster.py,sha256=qkwVMieIgXyK2u01cYD9xrZtgpDAODmH3aggvUxxPVc,20281 +networkx/algorithms/centrality/trophic.py,sha256=WyBOsNO_vLb4fcpL_u6XuOoalKbjukpzsZxyZDxWJIE,4678 +networkx/algorithms/centrality/voterank_alg.py,sha256=cw9ZaWf6svnbtgzNgX34tJDevXt9iUE2Zraf5TGHDjs,3230 +networkx/algorithms/chains.py,sha256=PPiSq5-GsT1Lsf8fwtGwGDVf1hhv5ZLariWtfzkBbAw,6968 +networkx/algorithms/chordal.py,sha256=w-EPJNn0H4G_b8fItmtzrorm0dMmiP7YE41yEzn0RgU,13410 +networkx/algorithms/clique.py,sha256=qlccLOScGphxo4gYKO7OhFD9JmIcf1yiV0CclQOKnPE,25871 +networkx/algorithms/cluster.py,sha256=x7dIotmBaBU3yaIzphjAyA2B-FHS_iiQ5nF-FeinQlU,20359 networkx/algorithms/coloring/__init__.py,sha256=P1cmqrAjcaCdObkNZ1e6Hp__ZpxBAhQx0iIipOVW8jg,182 networkx/algorithms/coloring/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/coloring/__pycache__/equitable_coloring.cpython-312.pyc,, networkx/algorithms/coloring/__pycache__/greedy_coloring.cpython-312.pyc,, -networkx/algorithms/coloring/equitable_coloring.py,sha256=JnL_TM3sTewENSKkbHIOOfNoaqXYkoEjzmfgf3xD9C8,16279 -networkx/algorithms/coloring/greedy_coloring.py,sha256=Tuo215orZ6k7znMd9wkyv3irZNAl1dyEryi72mC_im4,20170 +networkx/algorithms/coloring/equitable_coloring.py,sha256=uDcza6PD9qbvwVPUX1MBZbopQdrAEKNk6DpCFkc02tU,16315 +networkx/algorithms/coloring/greedy_coloring.py,sha256=QHbXyBJ343vD2lY1ibXNYl-X8L-CMLkPOs3gNa7WEP0,20045 networkx/algorithms/coloring/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/coloring/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/coloring/tests/__pycache__/test_coloring.cpython-312.pyc,, -networkx/algorithms/coloring/tests/test_coloring.py,sha256=A2cAG--i7pTVolIK96mxNuCTtLvhbLVRqJ4MAfWUBEQ,23712 -networkx/algorithms/communicability_alg.py,sha256=8omQmig1RyfVYfB_bfX40AX3Vg4PD4D-cmjelQzzKFc,4536 -networkx/algorithms/community/__init__.py,sha256=gKUySRds_lxaCw0kEpPJ1vluQwN4cV3ayt4U_8fok_M,1125 +networkx/algorithms/coloring/tests/test_coloring.py,sha256=jbynPtdFLaJHKt77AR24gJT4B5C8h6pKQ90oyxepOYM,23699 +networkx/algorithms/communicability_alg.py,sha256=yRn0n_CyeSbNihMipwXG3aksli0ehlsYYHD_dULQ7U4,4544 +networkx/algorithms/community/__init__.py,sha256=0U-iJWeQttY972nar-qbwFFImqEOETQnKoBOlXHDpsE,1178 networkx/algorithms/community/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/community/__pycache__/asyn_fluid.cpython-312.pyc,, networkx/algorithms/community/__pycache__/centrality.cpython-312.pyc,, networkx/algorithms/community/__pycache__/community_utils.cpython-312.pyc,, +networkx/algorithms/community/__pycache__/divisive.cpython-312.pyc,, networkx/algorithms/community/__pycache__/kclique.cpython-312.pyc,, networkx/algorithms/community/__pycache__/kernighan_lin.cpython-312.pyc,, networkx/algorithms/community/__pycache__/label_propagation.cpython-312.pyc,, @@ -319,20 +322,22 @@ networkx/algorithms/community/__pycache__/louvain.cpython-312.pyc,, networkx/algorithms/community/__pycache__/lukes.cpython-312.pyc,, networkx/algorithms/community/__pycache__/modularity_max.cpython-312.pyc,, networkx/algorithms/community/__pycache__/quality.cpython-312.pyc,, -networkx/algorithms/community/asyn_fluid.py,sha256=Qn8tNzdrXA1DVVHuZi-YjvBsUSbj3J6WwekrSVXBs74,5912 -networkx/algorithms/community/centrality.py,sha256=AEuGeTP_vWSyWr4vC3r-63cTfQ7mV2vDTqv_vZUkoxQ,6631 -networkx/algorithms/community/community_utils.py,sha256=u4q9DSo_QyROG7Qci2-Cvphu4n_VM8AeYXYKkXQXxws,903 -networkx/algorithms/community/kclique.py,sha256=tG0GOot8kY-wnaGA0XdNo0VKKoa1hJprMqXszcA00Pc,2456 -networkx/algorithms/community/kernighan_lin.py,sha256=-pQEXeOBE6JnHqMo-5M6igzGcBNbeOWK8AQ51joeN-E,4345 -networkx/algorithms/community/label_propagation.py,sha256=pcGwq8qhZQPK7LSrmsL54lf0ljC4PzBQaE2s_vvsWmU,11846 -networkx/algorithms/community/louvain.py,sha256=smccDNEHuRC3aqBJJ7ijKTQQ8vy1c-zcSuPaeqoQqDw,14764 -networkx/algorithms/community/lukes.py,sha256=OxwTxVKYNEd4evk4htBNDw_IeNujUIvPuydAfT-ewZk,8086 -networkx/algorithms/community/modularity_max.py,sha256=mcQxD2iQduY8H2-Ep3Agg7BSb-UTUqzOEcHm-424sC8,18020 -networkx/algorithms/community/quality.py,sha256=G7ogU-CYh-78EWGUyPKKR55K0iFrZclHawzy9gvBW-4,11919 +networkx/algorithms/community/asyn_fluid.py,sha256=0ktsoOa4JKBKiuE3wmGDcBSUgPlFdGvzNheqINtWKbk,5935 +networkx/algorithms/community/centrality.py,sha256=Yyv5kyf1hf_L7iQ_ZbG8_FAkP638Sc_3N4tCSoB6J1w,6635 +networkx/algorithms/community/community_utils.py,sha256=YPPninS6Xf7L5ZH9tLYxaFYMDVyMED6IsfJqXCq5tHA,907 +networkx/algorithms/community/divisive.py,sha256=gH4DFsHLXSP8rJFn5Ied_vk0gV8T8k520D2w9t5nhrA,6416 +networkx/algorithms/community/kclique.py,sha256=DTr9iUT_XWv0S3Y79KQl6OXefjztNMc9SAHWhdFOxcU,2460 +networkx/algorithms/community/kernighan_lin.py,sha256=vPU8Mbpk7_NscMC-gorNoXhsQjkOhgK2YiKOo-u6DvY,4349 +networkx/algorithms/community/label_propagation.py,sha256=5s-_nRrZqT5hNv_kNOLh7pC_RYJR4R6ztBJaC6h-yuQ,11877 +networkx/algorithms/community/louvain.py,sha256=zh5h16hRWzgTv9IUqWiiJKFntZhQbB_EHNYIGViwPas,15365 +networkx/algorithms/community/lukes.py,sha256=gzqnup95RR2UzUiPpIt8qkepzZ9dCWqHGQSVPIJDMx8,8115 +networkx/algorithms/community/modularity_max.py,sha256=gzyZrGHNMtTZyqpLFcJHxgzzIsar1m5DktScODoUngk,18082 +networkx/algorithms/community/quality.py,sha256=dVIkV-CFKdAou0WjgIDmfhnpIIqReRaeL4odg39XAYk,11939 networkx/algorithms/community/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/community/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_asyn_fluid.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_centrality.cpython-312.pyc,, +networkx/algorithms/community/tests/__pycache__/test_divisive.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_kclique.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_kernighan_lin.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_label_propagation.cpython-312.pyc,, @@ -341,14 +346,15 @@ networkx/algorithms/community/tests/__pycache__/test_lukes.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_modularity_max.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_quality.cpython-312.pyc,, networkx/algorithms/community/tests/__pycache__/test_utils.cpython-312.pyc,, -networkx/algorithms/community/tests/test_asyn_fluid.py,sha256=5DDArgCUSRVXrlG21R5Yu6Gg96xsivqvEib17VGOZLM,3057 +networkx/algorithms/community/tests/test_asyn_fluid.py,sha256=UzAMxJzhN74qUinehR7B1rhU_vsigJ7-cRvcE6jdKyc,3332 networkx/algorithms/community/tests/test_centrality.py,sha256=ADU1mFn7yl9kTtQjOkfPtjpmkBR_i_6hwbVkWh5qZmw,2931 +networkx/algorithms/community/tests/test_divisive.py,sha256=-Ee40OR-mPDReTngTEhbpx4_uLtNI7cqFkt8cZT9t5Y,3441 networkx/algorithms/community/tests/test_kclique.py,sha256=iA0SBqwbDfaD2u7KM6ccs6LfgAQY_xxrnW05UIT_tFA,2413 networkx/algorithms/community/tests/test_kernighan_lin.py,sha256=s8bK53Y1a87zvlZ1AJE-QJ2vItnbscSOlHQSrMpetGI,2709 -networkx/algorithms/community/tests/test_label_propagation.py,sha256=uOyx9-rLQCNidVwJ5EcjAlAOubjkK6HooZff5CCYki4,7870 -networkx/algorithms/community/tests/test_louvain.py,sha256=m8TQDH3fX2ygvWVn-mtP3EEmi1F7JF-J_WYuSAxvGXs,7257 +networkx/algorithms/community/tests/test_label_propagation.py,sha256=IHidFEv7MI781zsdk7XT848rLvLwDk2wBK1FjL-CRv4,7985 +networkx/algorithms/community/tests/test_louvain.py,sha256=TwW1nlSKWGJeIKr9QOJ8xGehSY6R0Nz01xsnFqzt0Oo,8071 networkx/algorithms/community/tests/test_lukes.py,sha256=f_JU-EzY6PwXEkPN8kk5_3NVg6phlX0nrj1f57M49lk,3961 -networkx/algorithms/community/tests/test_modularity_max.py,sha256=mqtalSff4cmpAPyOExOolfICOE7YuOtHA3BqT84eZlg,10365 +networkx/algorithms/community/tests/test_modularity_max.py,sha256=XYyPuDkxL4CYFwnpTdU_qD4GydpqgiRAIJO3CHQN_m4,10617 networkx/algorithms/community/tests/test_quality.py,sha256=_kbOlYD1mpPduNQU1wJx58we6Z8CbmQ8wsDwOqTE4hg,5274 networkx/algorithms/community/tests/test_utils.py,sha256=r_YEdGUaGZo8B16FxzocmkgpRrWgqyN7ehvx_qFiYu4,706 networkx/algorithms/components/__init__.py,sha256=Dt74KZWp_cJ_j0lL5hd_S50_hia5DKcC2SjuRnubr6M,173 @@ -359,11 +365,11 @@ networkx/algorithms/components/__pycache__/connected.cpython-312.pyc,, networkx/algorithms/components/__pycache__/semiconnected.cpython-312.pyc,, networkx/algorithms/components/__pycache__/strongly_connected.cpython-312.pyc,, networkx/algorithms/components/__pycache__/weakly_connected.cpython-312.pyc,, -networkx/algorithms/components/attracting.py,sha256=DYv4WYi7o65w2gszDcNVPlxPYDESDA_r0Z4gDzfpEDA,2699 -networkx/algorithms/components/biconnected.py,sha256=6GRTNyPgwvboDpUdjA9GODDa9vtxTNELEirHkcDHuXs,12765 -networkx/algorithms/components/connected.py,sha256=CiwwhpZo_ppuSCm63cMkm64IJybY_OAOxewWCaGUU7s,4312 -networkx/algorithms/components/semiconnected.py,sha256=M_bCya75ayQONDqv4HCfV8fAXPITAQbP7pdOl7mt8BQ,2025 -networkx/algorithms/components/strongly_connected.py,sha256=EoxDU6BDAp11v57vQvsiQGmZ_1C9iszd4ZDutN4KWAc,11712 +networkx/algorithms/components/attracting.py,sha256=LZmBD3GnsP8k9CWeW98TqYxrGv0z4XOcFiWa08--gHw,2711 +networkx/algorithms/components/biconnected.py,sha256=TPx3H63C_a4Aur1n8pkaz7veiMO0oOOkrWapGMZ-YPs,12781 +networkx/algorithms/components/connected.py,sha256=JtInjl-bmIPZoZ2qe3TZCZyNWRR8y3QsGl44DH7Lh7E,4433 +networkx/algorithms/components/semiconnected.py,sha256=Lu0tzwL_TI_Sv-xAKubu5WtUXlcDaRix9ggDIBPc8M0,2029 +networkx/algorithms/components/strongly_connected.py,sha256=43XUcIJ-6iLDwd5qlJ9FWp7s-D70h57dhNKVB6XSPlY,11744 networkx/algorithms/components/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/components/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/components/tests/__pycache__/test_attracting.cpython-312.pyc,, @@ -374,11 +380,11 @@ networkx/algorithms/components/tests/__pycache__/test_strongly_connected.cpython networkx/algorithms/components/tests/__pycache__/test_weakly_connected.cpython-312.pyc,, networkx/algorithms/components/tests/test_attracting.py,sha256=b3N3ZR9E5gLSQWGgaqhcRfRs4KBW6GnnkVYeAjdxC_o,2243 networkx/algorithms/components/tests/test_biconnected.py,sha256=N-J-dgBgI77ytYUUrXjduLxtDydH7jS-af98fyPBkYc,6036 -networkx/algorithms/components/tests/test_connected.py,sha256=BTbxVcorGH8wKVXOO7D3bn0WR8lXK-Kijm-XDmQhiMY,3983 +networkx/algorithms/components/tests/test_connected.py,sha256=g4KIvumz-lFNpZi8C70vhWfUsp2X2_UNn7p7R92EOPU,3987 networkx/algorithms/components/tests/test_semiconnected.py,sha256=q860lIxZF5M2JmDwwdzy-SGSXnrillOefMx23GcJpw0,1792 -networkx/algorithms/components/tests/test_strongly_connected.py,sha256=66c4bPIdcl1hKEZAY5Wjpglk_mrcVCoDxaKBOaZz754,6639 -networkx/algorithms/components/tests/test_weakly_connected.py,sha256=yi23wxW2Vw6JOMqaWMEuqNRxnleriuAQrZ5JGWE48Jk,2887 -networkx/algorithms/components/weakly_connected.py,sha256=mDxdyU7oGqWTYWY0Rh_VRbR5hcMFhy6yXFb_W20LkxU,4366 +networkx/algorithms/components/tests/test_strongly_connected.py,sha256=GBuM8ie_etN6IyhnsZxqR5rnsgU2hejKlsKYwkBGx-4,6479 +networkx/algorithms/components/tests/test_weakly_connected.py,sha256=_eUx7226dxme_K2WNmvSIwZXQlKNoCuglWOOC3kFUW4,3083 +networkx/algorithms/components/weakly_connected.py,sha256=yHd0iyjdbT3_VaCTWx9dybeFQEnas2raa1MpQZEchOI,4344 networkx/algorithms/connectivity/__init__.py,sha256=VuUXTkagxX-tHjgmeYJ3K4Eq_luK6kSpv1nZwiwGFd8,281 networkx/algorithms/connectivity/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/connectivity/__pycache__/connectivity.cpython-312.pyc,, @@ -390,14 +396,14 @@ networkx/algorithms/connectivity/__pycache__/kcomponents.cpython-312.pyc,, networkx/algorithms/connectivity/__pycache__/kcutsets.cpython-312.pyc,, networkx/algorithms/connectivity/__pycache__/stoerwagner.cpython-312.pyc,, networkx/algorithms/connectivity/__pycache__/utils.cpython-312.pyc,, -networkx/algorithms/connectivity/connectivity.py,sha256=X5tB-FevO5B-514-zb3LoaSOHlcBX0ockB5fBdh2E58,29912 -networkx/algorithms/connectivity/cuts.py,sha256=vCr5z2lvAa4cYIAhmnL-cYr7jVRL5a0TbbrV3Qb_xtQ,23183 -networkx/algorithms/connectivity/disjoint_paths.py,sha256=rQ1qZepPW4j0RnzMefaFtFbd4hsnjZ6tpiUSQwEpDxE,14852 -networkx/algorithms/connectivity/edge_augmentation.py,sha256=IJmZg75CiEmpIE0tQyFzbd6ZKFKGH--hBs7yuYMLzAA,43988 -networkx/algorithms/connectivity/edge_kcomponents.py,sha256=8jQ-ba3qxdCRK8dFDTAAcqG55-vOfJ_smRXeQAIw6FU,20709 -networkx/algorithms/connectivity/kcomponents.py,sha256=Ax0v4yudKFbkuzmek2TUEh3UPFIPoy6gJ7N4ZtUiO-A,8166 -networkx/algorithms/connectivity/kcutsets.py,sha256=rtSXzS7uIaNewh7RT_-lukXvr48_Cdl56VKalb8bQ50,9423 -networkx/algorithms/connectivity/stoerwagner.py,sha256=RW_Zx4wsdikYH8UB34zLDVLBBfpPQ4UBSOh_oYwhkMI,5375 +networkx/algorithms/connectivity/connectivity.py,sha256=jubbwh9Ech4ft4UdZB0F7nhNGgTCVoeOJF4DZhLohBQ,29687 +networkx/algorithms/connectivity/cuts.py,sha256=p0jdkx6YN7SAoM5LFmn7wBFxmEdYjLR5b7mjm7vPFzA,23014 +networkx/algorithms/connectivity/disjoint_paths.py,sha256=0adHh-ZWZFWuTCJNjCk08i5UgmepcAvjr2QK8D8L_Ic,14648 +networkx/algorithms/connectivity/edge_augmentation.py,sha256=rnoH1M1T1aZIdGnddd10uBrd4XVTrJ-mYZFBTIdSbKw,44060 +networkx/algorithms/connectivity/edge_kcomponents.py,sha256=jPaG6-mx96-HRIF8PjQXV4QtClYJMWPysI6PT-vNoIc,20893 +networkx/algorithms/connectivity/kcomponents.py,sha256=ba9EytfQH5f75h5ljaFmepdXXBnQXajuUBqVVVvD1sk,8170 +networkx/algorithms/connectivity/kcutsets.py,sha256=b1MOmaycITjWno4axzIG5QLlijLfJInCu3mzXTReD4w,9370 +networkx/algorithms/connectivity/stoerwagner.py,sha256=HfO_S3-f7uIGRlxAFaWnNYHpYwLVFc8QOgSdOoQqTIs,5430 networkx/algorithms/connectivity/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/connectivity/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/connectivity/tests/__pycache__/test_connectivity.cpython-312.pyc,, @@ -414,21 +420,21 @@ networkx/algorithms/connectivity/tests/test_disjoint_paths.py,sha256=NLHReLoXSKo networkx/algorithms/connectivity/tests/test_edge_augmentation.py,sha256=d3ymFHyY2G4cpy1Y6wu4ze339qfF2LRp2HmGAIVjnMM,15731 networkx/algorithms/connectivity/tests/test_edge_kcomponents.py,sha256=CZ26Dy91WOUqhw1X73mqLGX-WHWzBBIeBCgrp6KK4Zo,16453 networkx/algorithms/connectivity/tests/test_kcomponents.py,sha256=ohoSX8GACeszRZdzTiNuWXSFitfU9DzP0hqllS2gvMU,8554 -networkx/algorithms/connectivity/tests/test_kcutsets.py,sha256=TU6vl9cVtl7GstL2OrPGwVX2PY1R_AGQ6lJ9QQX5UBQ,8458 +networkx/algorithms/connectivity/tests/test_kcutsets.py,sha256=sVKjwQt3FUqtnlY2xuHn6VGY9rvUkYoVp7v5fK-6aJw,8610 networkx/algorithms/connectivity/tests/test_stoer_wagner.py,sha256=A291C30_t2CI1erPCqN1W0DoAj3zqNA8fThPIj4Rku0,3011 -networkx/algorithms/connectivity/utils.py,sha256=8h29TgBEeaZbF_4OFNgtY2XLqURD_va_wezmz709Qfs,3168 -networkx/algorithms/core.py,sha256=mNKH8fwCgbCbaQAcIdZq8Dx9p_bsHiyQn4fAXOdR5K4,15990 -networkx/algorithms/covering.py,sha256=4SiBc9eJi4vQ0N5juRfw6atcyjH1xB_iSWwT6WOZhYk,5290 -networkx/algorithms/cuts.py,sha256=VSEhUHwqRFhfS70L-PzsUGEzN09uhC69B-5hwSixj7A,9960 -networkx/algorithms/cycles.py,sha256=eHduXG1NbfMOIT-RNDWHMyDeRiWC-3IAOokh0kyIDhs,43080 -networkx/algorithms/d_separation.py,sha256=2l6sRqNEldQQltIlVo7lK6ew115PYLT0OJcCjeQBnJY,15440 -networkx/algorithms/dag.py,sha256=1LkfG8kYN-dAjXk21Tmo7eCr9FaYpp4kMX37JCktlY4,39144 -networkx/algorithms/distance_measures.py,sha256=pMMLUutcc93wdbTfKkltEic7dcj5st95eEPpuxtHiNc,29136 -networkx/algorithms/distance_regular.py,sha256=KksQ9jiqigD5DzD63DXmxoeV8RAj1TF7hjyi9FLjbws,6914 -networkx/algorithms/dominance.py,sha256=wO5FnplVOSkPBdFSBcPQMgt-0bykxaEtXmdqRjGg3d8,3422 -networkx/algorithms/dominating.py,sha256=lA9lP6SXtjZsUPyKM58Uflgp58aSqfveTeoe9aQuy7Y,2675 -networkx/algorithms/efficiency_measures.py,sha256=OGkRnD5lrXUqr4TAPW9f_y2g89k9V_-L1EkvWy9Yibo,4786 -networkx/algorithms/euler.py,sha256=hf2HPmE6GkRm6DhG0-DD4wIJmvnAXy__ddXx2BGqsBU,14160 +networkx/algorithms/connectivity/utils.py,sha256=ynrrShW4QvxxOEsN_iBAgNPkcoMFZ7KBE4oetvT-cNc,3216 +networkx/algorithms/core.py,sha256=oIomkMWZvCCN_1t1keGcXpjUcnf3n4kM5t_dMwGU1UU,19183 +networkx/algorithms/covering.py,sha256=IEMNtzDkHTdN9wYn1Dw3yMN4920Qc4EY4PssMAhMtAU,5295 +networkx/algorithms/cuts.py,sha256=kOGGQ-ZGdRoiZDRhXj68Epa7tgJzI5826nJbESdX0d4,9992 +networkx/algorithms/cycles.py,sha256=ufAiKuQQup5p7PUdZtHiDsnyOEFUGWTAg1dgnchrZpw,43174 +networkx/algorithms/d_separation.py,sha256=3O_5RIWziPQ5xwRn-yAjH28xrkSaVIVbCFpw7K2Pa2A,27283 +networkx/algorithms/dag.py,sha256=I2HmgASMd83O3m5VtOTdXKQPO_IK2Ra_p96qHxJnEvY,39428 +networkx/algorithms/distance_measures.py,sha256=6A5bB4KtKdgJ31AGVqqOCLMAyhHMW3Qkn8PBxYzHxHg,31830 +networkx/algorithms/distance_regular.py,sha256=-1QCGLy7OPoNuV2bYJDY4jVot-0LGMobBQ0DubjbhGI,7053 +networkx/algorithms/dominance.py,sha256=Ox3nSj6dbIgFQxU1HlhUA4pB7hgHsXtV8aoo_5Tjesg,3430 +networkx/algorithms/dominating.py,sha256=m81MIzNsxuY4f8GRDqin6av-CZTD_7dVmO4Ce-fKhjA,2668 +networkx/algorithms/efficiency_measures.py,sha256=e_FdO7BvOBkf1HfbRKgdjaMtai67ZcRc2sFFVHWXadk,4798 +networkx/algorithms/euler.py,sha256=YWsDcDV8nN92iSAc6X_cg1XkeXGwuVPFmVRlC5A2hIc,14204 networkx/algorithms/flow/__init__.py,sha256=rVtMUy6dViPLewjDRntmn15QF0bQwiDdQbZZx9j7Drc,341 networkx/algorithms/flow/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/flow/__pycache__/boykovkolmogorov.cpython-312.pyc,, @@ -442,16 +448,16 @@ networkx/algorithms/flow/__pycache__/networksimplex.cpython-312.pyc,, networkx/algorithms/flow/__pycache__/preflowpush.cpython-312.pyc,, networkx/algorithms/flow/__pycache__/shortestaugmentingpath.cpython-312.pyc,, networkx/algorithms/flow/__pycache__/utils.cpython-312.pyc,, -networkx/algorithms/flow/boykovkolmogorov.py,sha256=gJFnK5qZMg8xMWs2-aGx5-LLM25C48x2IPy-_50V6_c,13435 -networkx/algorithms/flow/capacityscaling.py,sha256=G4wdqfhQ4Gf7Fx3Eoh5_DUnpzD_qOT-8yWfaZ1dbbWA,14459 -networkx/algorithms/flow/dinitz_alg.py,sha256=mtSov40Oay_kz2v381MkOp5OSpDhKiH2OSINkrImsE0,7310 -networkx/algorithms/flow/edmondskarp.py,sha256=iafmZIMPO8euDc7uJQ1dg84s4a9OzK4tKMthF2jQoeo,8292 -networkx/algorithms/flow/gomory_hu.py,sha256=5fEaPaTi9_ox7CarltPwqSEGnF3OyxJJfWf04g-Aa50,6320 -networkx/algorithms/flow/maxflow.py,sha256=xyVgIMRtxRSUHZb-4txwc78ZEIFixzCQffG5NxioR98,22809 -networkx/algorithms/flow/mincost.py,sha256=JA6lLUmQ-UyxrdWdzbS3x8oK3t4MaPPBf_44Pgor9yA,12248 -networkx/algorithms/flow/networksimplex.py,sha256=eimOUJ4n2-jRBN8LgPoeuFrU38O2JRCB1O0uEkG7wkg,25175 -networkx/algorithms/flow/preflowpush.py,sha256=wIl2b0MpnhunZb4HpShxMVy1NgPggsAGF7chP0crKKw,15823 -networkx/algorithms/flow/shortestaugmentingpath.py,sha256=7vfa73BxJ6cHfzTy6ibXoD8DuOjK2lgp-EshUeimvZA,10474 +networkx/algorithms/flow/boykovkolmogorov.py,sha256=jIzy7CgUG710E2XKGpA7N2yyM3hXmGK5RdrVbo7qFt8,13333 +networkx/algorithms/flow/capacityscaling.py,sha256=8rng2qO5kawNSxq2S8BNlUMmdvNSoC6R8ekiBGU8LxU,14469 +networkx/algorithms/flow/dinitz_alg.py,sha256=SEFw8s-KlRPvpZ9Rzhilgw66oKrWyKyw48ugsOUBQJg,8340 +networkx/algorithms/flow/edmondskarp.py,sha256=PEIwLftevS2VYHaTzzZMSOLPy7QSBPsWPedjx1lR6Cs,8056 +networkx/algorithms/flow/gomory_hu.py,sha256=R9W5V-LfQirf9ysckI5ty5anq-UyaMwasnoqcCrRaXc,6344 +networkx/algorithms/flow/maxflow.py,sha256=PXmPSNzXgxli6x769mNYCAbC4KwaT_znwvz0IxjCcyw,22759 +networkx/algorithms/flow/mincost.py,sha256=GzMYInS4QcNe0yImGrVXJ0bRd7t5TSSMa9jSeenIoOk,12853 +networkx/algorithms/flow/networksimplex.py,sha256=32uetoZWj-_7KPO2OJputP0FpTrsQ_qJxntC8XxIVr0,25185 +networkx/algorithms/flow/preflowpush.py,sha256=CUKZ0-7X9l7P7qH_2n2Immbf8mFm8vocH2SY0tIwjGo,15721 +networkx/algorithms/flow/shortestaugmentingpath.py,sha256=gXXdkY3nH4d0hXVn0P2-kzfC3DHcuCdrudFdxetflKI,10372 networkx/algorithms/flow/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/flow/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/flow/tests/__pycache__/test_gomory_hu.cpython-312.pyc,, @@ -468,12 +474,12 @@ networkx/algorithms/flow/tests/test_maxflow_large_graph.py,sha256=fMweTQ3MzsZWYI networkx/algorithms/flow/tests/test_mincost.py,sha256=n4fFLDwDLy7Tau-_ey1CoxZwKhFjk28GLGJjCyxhClk,17816 networkx/algorithms/flow/tests/test_networksimplex.py,sha256=bsVxlvHAD0K7aDevCcVaa9uRNNsWAevw6yUKlj2T8No,12103 networkx/algorithms/flow/tests/wlm3.gpickle.bz2,sha256=zKy6Hg-_swvsNh8OSOyIyZnTR0_Npd35O9RErOF8-g4,88132 -networkx/algorithms/flow/utils.py,sha256=TyckjUeH5qcBUSARpkuZDXaVirYGuo9xvJK8cno0T38,6001 -networkx/algorithms/graph_hashing.py,sha256=cOAW2XlFvuYokbmhEeKiX4KQgIHL6PjraBqsZizcj_A,11887 -networkx/algorithms/graphical.py,sha256=BYh1nXb2Kg1AYLJBz926QIKcHkAtXqInpsb7QSzykAQ,15807 -networkx/algorithms/hierarchy.py,sha256=jDj8Ld7InknG7OVLVSnT82cqzNvBQ4FT5Qso107kQVQ,1541 -networkx/algorithms/hybrid.py,sha256=fFfA7Ki4zKxm9r8VEvreUqyCvGeCygsBbJZPsvXUQ7A,6180 -networkx/algorithms/isolate.py,sha256=toiuRPi4qb06D_hREZWbAcDJ4c8yx8aKftWez22Efj0,2325 +networkx/algorithms/flow/utils.py,sha256=bCeiFAiyFe4-ptkCopo_PnQKF9xY5M8Br87hJT3fRWQ,6084 +networkx/algorithms/graph_hashing.py,sha256=duPonk1Bv9Lc8-bWY5wSkbkyi7yJuCJvR_eGiyRHxGg,12427 +networkx/algorithms/graphical.py,sha256=dt24mdupuU-6P3wwKWm2u0Mj5Wf3HntfJK9yNMJPKgY,15831 +networkx/algorithms/hierarchy.py,sha256=T8el6aWy8_cH74IHyhw3L4chNN2U_VIzTYE0IbCCJRQ,1545 +networkx/algorithms/hybrid.py,sha256=UV47QxghspuRhMCqQRjm-5Dt8maRgoGjqZ_XSt0oTcU,6208 +networkx/algorithms/isolate.py,sha256=g2YxL61zK9mGaT6mMxOe2qjnliUC5DVeH-VSYS8XYG4,2337 networkx/algorithms/isomorphism/__init__.py,sha256=gPRQ-_X6xN2lJZPQNw86IVj4NemGmbQYTejf5yJ32N4,406 networkx/algorithms/isomorphism/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/isomorphism/__pycache__/ismags.cpython-312.pyc,, @@ -484,11 +490,11 @@ networkx/algorithms/isomorphism/__pycache__/temporalisomorphvf2.cpython-312.pyc, networkx/algorithms/isomorphism/__pycache__/tree_isomorphism.cpython-312.pyc,, networkx/algorithms/isomorphism/__pycache__/vf2pp.cpython-312.pyc,, networkx/algorithms/isomorphism/__pycache__/vf2userfunc.cpython-312.pyc,, -networkx/algorithms/isomorphism/ismags.py,sha256=5KRimh6jxs7BIDqAo48d01i8_1WkkckV0xVWkQ64czs,43529 -networkx/algorithms/isomorphism/isomorph.py,sha256=PQONDdw4Mc6neaPhW7yVQxoxOrbOqYorgBse4OjYtBA,7097 -networkx/algorithms/isomorphism/isomorphvf2.py,sha256=1LWpe54aulfYukTS87DoS4l1reCpOqZEr-74MOQLrRc,40528 -networkx/algorithms/isomorphism/matchhelpers.py,sha256=b7A7SwbqXj8CKAw-vrISgBNhDcEXobPjljkOhyWn4aM,10891 -networkx/algorithms/isomorphism/temporalisomorphvf2.py,sha256=-1NW81l8kM9orQ2ni9tcNizQzEhOUE9BaBJXjUWqhiI,10948 +networkx/algorithms/isomorphism/ismags.py,sha256=TpZP5xDxLITCGOk8DT4EBVaWDbbjzEUT5ZOCDNGAho0,43239 +networkx/algorithms/isomorphism/isomorph.py,sha256=CzMKwPMlCBpGIbO8X8SzCg_cdWUMlHFUkUmnepcGfNg,7113 +networkx/algorithms/isomorphism/isomorphvf2.py,sha256=qAK4eCY_8adSnF6v5Yv6oRYuBluapgdlmCgJ7_MJKTk,40980 +networkx/algorithms/isomorphism/matchhelpers.py,sha256=iDPnAjTBCWNtt8J45TWZJ-oo0mHpRg2L7d2D-7fqYGk,10883 +networkx/algorithms/isomorphism/temporalisomorphvf2.py,sha256=yX-vOLLjV9_jycbpEy0MQbw8kfbA6vQieemlQz7OxSk,10888 networkx/algorithms/isomorphism/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/isomorphism/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/isomorphism/tests/__pycache__/test_ismags.cpython-312.pyc,, @@ -505,51 +511,51 @@ networkx/algorithms/isomorphism/tests/iso_r01_s80.B99,sha256=AHx_W2xG4JEcz1xKoN5 networkx/algorithms/isomorphism/tests/si2_b06_m200.A99,sha256=NVnPFA52amNl3qM55G1V9eL9ZlP9NwugBlPf-zekTFU,310 networkx/algorithms/isomorphism/tests/si2_b06_m200.B99,sha256=-clIDp05LFNRHA2BghhGTeyuXDqBBqA9XpEzpB7Ku7M,1602 networkx/algorithms/isomorphism/tests/test_ismags.py,sha256=2sOkbB7Aejnq4zDx9BhJyfavf5DLiKJaUPusb3fhGRk,10585 -networkx/algorithms/isomorphism/tests/test_isomorphism.py,sha256=1GZmmqNWk605Qq9h55V_5SfEKPM50Ceq6DSICdh6ufs,1663 +networkx/algorithms/isomorphism/tests/test_isomorphism.py,sha256=kF-o4dTjB7Ad0NOHnUGoiOCCNr3MWSmJm_YBc-Wvhgk,2022 networkx/algorithms/isomorphism/tests/test_isomorphvf2.py,sha256=s4yO4cHJk5qIpRemnSzD1MJEeSJPNpZcOU6LeWVhGXI,11751 networkx/algorithms/isomorphism/tests/test_match_helpers.py,sha256=uuTcvjgf2LPqSQzzECPIh0dezw8-a1IN0u42u8TxwAw,2483 networkx/algorithms/isomorphism/tests/test_temporalisomorphvf2.py,sha256=DZy2zAt74jiTAM-jGK5H9aGRn1ZsMgQl9K5UNsu178Y,7346 -networkx/algorithms/isomorphism/tests/test_tree_isomorphism.py,sha256=yj3C8ZBhi57I6kxetfneGpTse9hrYBvJQfGb0qks_G0,7066 +networkx/algorithms/isomorphism/tests/test_tree_isomorphism.py,sha256=0-7waJjupg8AWfQDqrcsJVOgTXk7HePr5kt87MgnPtM,7412 networkx/algorithms/isomorphism/tests/test_vf2pp.py,sha256=65RkN1mPWLoxirE7SlIvfaKMJk80b_ZwWG6HTJtlkPg,49924 -networkx/algorithms/isomorphism/tests/test_vf2pp_helpers.py,sha256=s4zz4IYYm2q8nHmkG0eRI2yJjcTx6zjRL7HTVIl1a-s,90080 +networkx/algorithms/isomorphism/tests/test_vf2pp_helpers.py,sha256=HnXcdy2LTBFX423nIdJ8CbwmfkHFmzf1XNa8-xld5jk,90125 networkx/algorithms/isomorphism/tests/test_vf2userfunc.py,sha256=yby-vt4sYxc1uzlnD-iETREbojgNkpQGbLkrPER_Sss,6629 -networkx/algorithms/isomorphism/tree_isomorphism.py,sha256=HKPUDU1oCYCfEgyNYN0e31K9PqE3hsqHZMX8Iuq7i1Q,9397 -networkx/algorithms/isomorphism/vf2pp.py,sha256=oKBYHbwS0j3UihEI7LgaUZ7sMhv3nLLFrnCk3jETxnw,36383 +networkx/algorithms/isomorphism/tree_isomorphism.py,sha256=fj1cUspSojUVwmAdWKGzXEHqOawUNJgzfO9QjCEnPLs,9454 +networkx/algorithms/isomorphism/vf2pp.py,sha256=4CykBmrp8RGZl5ZSdfW0jhsSdkK1EvdqoALVn1u4OF0,36375 networkx/algorithms/isomorphism/vf2userfunc.py,sha256=VVTNWEzHnRaZrjtinBnkStRNsvC9FVvivXWs-pqG6LM,7475 networkx/algorithms/link_analysis/__init__.py,sha256=UkcgTDdzsIu-jsJ4jBwP8sF2CsRPC1YcZZT-q5Wlj3I,118 networkx/algorithms/link_analysis/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/link_analysis/__pycache__/hits_alg.cpython-312.pyc,, networkx/algorithms/link_analysis/__pycache__/pagerank_alg.cpython-312.pyc,, -networkx/algorithms/link_analysis/hits_alg.py,sha256=5ntPDFZNGYbrw0Bq4WNvmoIWBxSa6PtIoBVHhHmv-8M,10244 -networkx/algorithms/link_analysis/pagerank_alg.py,sha256=0l7xABhW3Vkhx07y87NynTdYqcTql0UAVfCghURhZFk,17183 +networkx/algorithms/link_analysis/hits_alg.py,sha256=XlapG3wm5CHJ7Fg5spDo0vPnsgm_e05_2WQjmwyAK98,10421 +networkx/algorithms/link_analysis/pagerank_alg.py,sha256=MyKsd4GvcF1wfB-K_BJBHtUoYB-as4o_bxuhIm0CtN4,17191 networkx/algorithms/link_analysis/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/link_analysis/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/link_analysis/tests/__pycache__/test_hits.cpython-312.pyc,, networkx/algorithms/link_analysis/tests/__pycache__/test_pagerank.cpython-312.pyc,, -networkx/algorithms/link_analysis/tests/test_hits.py,sha256=BXMNyKv4OfRKXH9W8u8qCV3zaghDlEItRhYLN0TB-CM,2525 -networkx/algorithms/link_analysis/tests/test_pagerank.py,sha256=g0HyPn5HBXZeu-TQSWqqTzOfnzaejRfBuIIpKYSGecE,7530 -networkx/algorithms/link_prediction.py,sha256=z4abyN_TIEZiq6TN9YP7TYvrdiDhzgg-Irn9UW1IkYQ,19968 -networkx/algorithms/lowest_common_ancestors.py,sha256=popl_tFPaN5r4P1UQ47-qzEQ9EM0EQCeA7F_9th71Ek,9186 -networkx/algorithms/matching.py,sha256=ePjtahy-HIMke90HjmcgO1mJOUcG7WYJFfFKuAqQ8Jk,44530 +networkx/algorithms/link_analysis/tests/test_hits.py,sha256=QjSZZmrj3rBLNVpKOIHUvJNYM7OJ1b-yjiaglyVzNyw,2547 +networkx/algorithms/link_analysis/tests/test_pagerank.py,sha256=f5QWokpJEDf3d9SLfCcVKpsdEBMRi0vJgRTz8Oa1DuE,7534 +networkx/algorithms/link_prediction.py,sha256=KLmkEggJ6ltLUXPuisRiab7eH7pEsy3UaaxxIsT7crY,22256 +networkx/algorithms/lowest_common_ancestors.py,sha256=7BgNpBFP9PFkDQceeh7jf9NFYuLCboT0YReIsXLkItg,9197 +networkx/algorithms/matching.py,sha256=rPn3P_2xDAXwM8IqOrZ3asHx4jEJ9vv_83AK2ZBMsAQ,44549 networkx/algorithms/minors/__init__.py,sha256=ceeKdsZ6U1H40ED-KmtVGkbADxeWMTVG07Ja8P7N_Pg,587 networkx/algorithms/minors/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/minors/__pycache__/contraction.cpython-312.pyc,, -networkx/algorithms/minors/contraction.py,sha256=dS3lUcojiGydTV2IOrpyD3UxChG5ZYqHy74c-Euulns,22735 +networkx/algorithms/minors/contraction.py,sha256=qIFmtFQislTZfNQU3IPzQeoegecw0ST5sOJdO_GUi4E,22869 networkx/algorithms/minors/tests/__pycache__/test_contraction.cpython-312.pyc,, networkx/algorithms/minors/tests/test_contraction.py,sha256=rob7wHlt3xoXYxpcXQOwm7zP0TLyRqWV1JxsZlE8kfo,14212 -networkx/algorithms/mis.py,sha256=9ZdCuXXAlKOVHgWJMtillI1vLOXQGlRpSoz-rbnMU3I,2339 -networkx/algorithms/moral.py,sha256=k9uZGz0S6YK3U5hoiRLzR--PRQNktNdaI9-lrzsrgBg,1511 -networkx/algorithms/node_classification.py,sha256=ACq6C3i2p-f5E4UGHK8XQ6ng6ZVf6DxHdx4xR0x1zrA,6461 -networkx/algorithms/non_randomness.py,sha256=wEXsl0fat8w0SAROXT_mB0B4fidVD8N5Ue5rLDMcu7Q,2893 +networkx/algorithms/mis.py,sha256=kcmWs7F6Fxx0r4cRiasyWRU2UjVCIMEuW2xSIgcWux4,2343 +networkx/algorithms/moral.py,sha256=z5lp42k4kqYk7t_FfszVj5KAC7BxXe6Adik3T2qvA6o,1535 +networkx/algorithms/node_classification.py,sha256=FZItO-HeKsugbGGKU3crYVRyB2VXODjNc3jh_8VSvvY,6469 +networkx/algorithms/non_randomness.py,sha256=PpDcPqY5sjnxr4yO6VhS7nzx3THLNiKqE8oORU-4wPA,2904 networkx/algorithms/operators/__init__.py,sha256=dJ3xOXvHxSzzM3-YcfvjGTJ_ndxULF1TybkIRzUS87Y,201 networkx/algorithms/operators/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/operators/__pycache__/all.cpython-312.pyc,, networkx/algorithms/operators/__pycache__/binary.cpython-312.pyc,, networkx/algorithms/operators/__pycache__/product.cpython-312.pyc,, networkx/algorithms/operators/__pycache__/unary.cpython-312.pyc,, -networkx/algorithms/operators/all.py,sha256=_1em4J-Y6GQK0_UlkTIKZ7DNdTSzdXkZ748gAq9dxkg,9544 -networkx/algorithms/operators/binary.py,sha256=Un3NpZQxmGB3EhQY-_-qb-Kzr6lJy9RRVJZR0FOSrVI,12689 -networkx/algorithms/operators/product.py,sha256=3hm3Q1K3BaH6RYUTP369jGgFSVsyAF3crDS74PKlVDM,16115 +networkx/algorithms/operators/all.py,sha256=dAlalaC4KR4hXsRole255cAsDb4mXNN5p2hCYB2sWvw,9652 +networkx/algorithms/operators/binary.py,sha256=dVfq_I9MMRm1c-Xo26q_sDQ8sOgYEd2cY6qaOH7FUkA,12935 +networkx/algorithms/operators/product.py,sha256=RAMTwu8MxWjaD5SZO-VhPy0Dk1EmK7pXDrID5XuK1R4,19603 networkx/algorithms/operators/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/operators/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/operators/tests/__pycache__/test_all.cpython-312.pyc,, @@ -557,16 +563,16 @@ networkx/algorithms/operators/tests/__pycache__/test_binary.cpython-312.pyc,, networkx/algorithms/operators/tests/__pycache__/test_product.cpython-312.pyc,, networkx/algorithms/operators/tests/__pycache__/test_unary.cpython-312.pyc,, networkx/algorithms/operators/tests/test_all.py,sha256=Pqjv9QiA0875Yl9D5o6c5Ml0t4KHpH2a5jbpAoZQXFc,8250 -networkx/algorithms/operators/tests/test_binary.py,sha256=N_HEuvjUPneQK44rYo8AMhR7OdfQk76U9EqIXCt65X4,12795 -networkx/algorithms/operators/tests/test_product.py,sha256=hbnfR6gKXhl2BiEHKrgi4hMYIie95noooNmVBws1iLo,13402 +networkx/algorithms/operators/tests/test_binary.py,sha256=CvZpOXgXuHuzx7cB1f1ggfoOXqXQHelY5_Sp5Mr_6HE,12909 +networkx/algorithms/operators/tests/test_product.py,sha256=igu1MnYf0S02nXfTELaNIy9OGwrJbZ2C7DIbJcfH0a4,15156 networkx/algorithms/operators/tests/test_unary.py,sha256=UZdzbt5GI9hnflEizUWXihGqBWmSFJDkzjwVv6wziQE,1415 -networkx/algorithms/operators/unary.py,sha256=9cLxWpgt7aleGAgL608nW99s1gaw5kVGa-LybPt--qY,1745 -networkx/algorithms/planar_drawing.py,sha256=q9QJYn3PhDHzfNO1t5xAStN1XDzTPybFxtorb60KF5k,16289 -networkx/algorithms/planarity.py,sha256=j1SbhjE620Jda4PHALJh6PIwu_GHJKwACHnB6_q02aA,39476 -networkx/algorithms/polynomials.py,sha256=WNcCyqedQTPhhiwp9TJRqZXuo4KGTPjb85GF86XvDcU,11270 -networkx/algorithms/reciprocity.py,sha256=vKwcggMOSOz29-_j0R3do52qosaYFbfJJBXOkW-5jH8,2846 -networkx/algorithms/regular.py,sha256=0zEftUGLYqxeUEAV2cerg6bda98fQuqrDyKkNdkvvpo,6680 -networkx/algorithms/richclub.py,sha256=EP7v7VT6GhNAqFQ15I-WeDdksFISBArkS-guAPpdJoo,4166 +networkx/algorithms/operators/unary.py,sha256=LN5mU30rkKW7Wo5l6trQarrxwq1O0iHjHi81ABdxtTw,1794 +networkx/algorithms/planar_drawing.py,sha256=AXuoT3aFgEtCeMnAaUsRqjxCABdNYZ8Oo9sGOKBQto0,16254 +networkx/algorithms/planarity.py,sha256=PhIhnecPna-J_v7taoj-Ie175XWayVfcuMDHkj2bWLc,47249 +networkx/algorithms/polynomials.py,sha256=9nHrqjz7K1nlUbUV7bGao3Liru9dYH_KQt_EfVSVrBg,11278 +networkx/algorithms/reciprocity.py,sha256=qrHCIynxabOQXU7uK8olOxHI5Q7HacH3MUU9vDDnFMc,2854 +networkx/algorithms/regular.py,sha256=fqSEop3OtABqXti4b46sy_ti3RyJCsuU2Ww8QBFvIXA,6793 +networkx/algorithms/richclub.py,sha256=kARzso3M6wnUcAJo2g8ga_ZtigL2czDNzeUDzBtRfqo,4892 networkx/algorithms/shortest_paths/__init__.py,sha256=Rmxtsje-mPdQyeYhE8TP2NId-iZEOu4eAsWhVRm2Xqk,285 networkx/algorithms/shortest_paths/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/shortest_paths/__pycache__/astar.cpython-312.pyc,, @@ -574,9 +580,9 @@ networkx/algorithms/shortest_paths/__pycache__/dense.cpython-312.pyc,, networkx/algorithms/shortest_paths/__pycache__/generic.cpython-312.pyc,, networkx/algorithms/shortest_paths/__pycache__/unweighted.cpython-312.pyc,, networkx/algorithms/shortest_paths/__pycache__/weighted.cpython-312.pyc,, -networkx/algorithms/shortest_paths/astar.py,sha256=mb9Z0nmHJhTCuF_tAvS3oiNrpplCNQReunAwrLJcYME,7674 -networkx/algorithms/shortest_paths/dense.py,sha256=xBzv4NHJ-J2ehGnDEgjHJ6a3LidSKYBy2p36qBTdgfI,8151 -networkx/algorithms/shortest_paths/generic.py,sha256=uN1-eUXz6n9R0WWwCgpiynJTfyYyp5RYgCUeroeizWo,25321 +networkx/algorithms/shortest_paths/astar.py,sha256=W4zpRie8oxxQci_4v3wmCjMATbDZRPSIaXiSDTw6kLM,8943 +networkx/algorithms/shortest_paths/dense.py,sha256=854OX-Y9ezrJuAR_VNyCT6DXeG_b9IrvkJHwiMDEvvY,8167 +networkx/algorithms/shortest_paths/generic.py,sha256=dl3JJ-ByQheVSnkNNgcMDw0toFv-s1A-1EGwJ8hdkPY,25734 networkx/algorithms/shortest_paths/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/shortest_paths/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/shortest_paths/tests/__pycache__/test_astar.cpython-312.pyc,, @@ -585,27 +591,28 @@ networkx/algorithms/shortest_paths/tests/__pycache__/test_dense_numpy.cpython-31 networkx/algorithms/shortest_paths/tests/__pycache__/test_generic.cpython-312.pyc,, networkx/algorithms/shortest_paths/tests/__pycache__/test_unweighted.cpython-312.pyc,, networkx/algorithms/shortest_paths/tests/__pycache__/test_weighted.cpython-312.pyc,, -networkx/algorithms/shortest_paths/tests/test_astar.py,sha256=X9tLO2OVDrHjSy1-nNaNFIRngnOo-ITT5HAj6PAXafk,7176 +networkx/algorithms/shortest_paths/tests/test_astar.py,sha256=G9hrEo2U9c_kzaRTAXYbS1TpcJgF_uqj9249K2qbjAY,8941 networkx/algorithms/shortest_paths/tests/test_dense.py,sha256=ievl4gu3Exl_31hp4OKcsAGPb3g3_xFUM4t3NnvrG_A,6747 networkx/algorithms/shortest_paths/tests/test_dense_numpy.py,sha256=BNwXCe2wgNPE8o35-shPsFj8l19c_QG6Ye8tkIGphf8,2300 -networkx/algorithms/shortest_paths/tests/test_generic.py,sha256=aR3pUbMS-s3vBZJg7kauoY6rmZbjlx-DweCC1wyZQI4,18156 +networkx/algorithms/shortest_paths/tests/test_generic.py,sha256=oJBKCLIsMA1KTo8q-oG9JQmaxysc7_QSgbBqMImh23c,18456 networkx/algorithms/shortest_paths/tests/test_unweighted.py,sha256=fjpDkp38DmW8R2qpLRwRjcbYZp4an0f0yIq40XsFKJ8,5899 networkx/algorithms/shortest_paths/tests/test_weighted.py,sha256=dmzFBYN3QEDZoun7RAtSe_spsGSbvkDiJSgUf9e-1K8,35038 -networkx/algorithms/shortest_paths/unweighted.py,sha256=EuiZiHEQEOrFZpmUMm52ThANjyfWeWhKYFIrnvu9G_s,15494 -networkx/algorithms/shortest_paths/weighted.py,sha256=esTy6BYmWqBcCGN15Ld3jJCfjTNZtw4pyphEK4g2NqQ,82339 -networkx/algorithms/similarity.py,sha256=Y5GRl1NW-IFVqwogOdHJs-SAHmpv1SgfN7MIF7y8odQ,59062 -networkx/algorithms/simple_paths.py,sha256=cliV45VPZSKngEAEI6jQX5o8JD9G7Yhe_kFnCCvZP1k,30535 -networkx/algorithms/smallworld.py,sha256=sD1yv28XfqfwSi0Y88GOKXPzVwMJlWpNf8S14ZLOw_k,13494 -networkx/algorithms/smetric.py,sha256=jHdRFK7HyeFkhQWkKApa1MpAyi512pY4Ksulkh8joo8,1933 -networkx/algorithms/sparsifiers.py,sha256=InQAPhcRTI5O_l9ckBc2LAheONfBVx1Wn6yYY0NVOiA,10073 -networkx/algorithms/structuralholes.py,sha256=58c8f6hBwxhp5-GL1JPWnR5dRLZU3gNziddeFVIeXSE,9319 -networkx/algorithms/summarization.py,sha256=ymt635-uEH_uocXwF0_tU8EbGlW_1wf3ZM-v0CG7dH4,23251 -networkx/algorithms/swap.py,sha256=uYRzbxhEONmGQlWWDsDw_SJQgIWJfXzvSKYQAd50HfE,14579 +networkx/algorithms/shortest_paths/unweighted.py,sha256=pnRA7LPMl-vC2lELBHOU1kebRLtgFFsNazYoP1TNpkM,15617 +networkx/algorithms/shortest_paths/weighted.py,sha256=ZT1IFJvDrO4inPci8iVXTteEJBvv9D48lRQ2oEN2elc,82473 +networkx/algorithms/similarity.py,sha256=gPXADLC4HL48YJyzu_LFK9O_WQikZyIxLN_qmyC1h8c,60963 +networkx/algorithms/simple_paths.py,sha256=0kWc6qusbdXHklJyDxh6dj2-tuU9NRJuiO9DJN1vveg,29610 +networkx/algorithms/smallworld.py,sha256=ZQtiv1sBCTTyNUgOSH01gr9lTGXQ42WaotqjcsRWjjI,13564 +networkx/algorithms/smetric.py,sha256=NGq0LyAMOa2A4yuNTigrgaR7HDI8wThqNu0tK68hGs8,1937 +networkx/algorithms/sparsifiers.py,sha256=tL35uuBi8Wz52xAO3nScrzXn0HSZR2SRpDS6q7pLpe0,10047 +networkx/algorithms/structuralholes.py,sha256=CS89P45_m1JGFGnSGA-FlC2xnt0BYq3O5ky1zkjYEDI,9342 +networkx/algorithms/summarization.py,sha256=ARCsA8WC3SPgLwngVvlVsff5XfmuHAWIfscrnWtPQzY,23250 +networkx/algorithms/swap.py,sha256=9OEp1YlPz29AC22O6K51xVmqaYmT1chx0kCVpLg6ddM,14745 networkx/algorithms/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/tests/__pycache__/test_asteroidal.cpython-312.pyc,, networkx/algorithms/tests/__pycache__/test_boundary.cpython-312.pyc,, networkx/algorithms/tests/__pycache__/test_bridges.cpython-312.pyc,, +networkx/algorithms/tests/__pycache__/test_broadcasting.cpython-312.pyc,, networkx/algorithms/tests/__pycache__/test_chains.cpython-312.pyc,, networkx/algorithms/tests/__pycache__/test_chordal.cpython-312.pyc,, networkx/algorithms/tests/__pycache__/test_clique.cpython-312.pyc,, @@ -660,62 +667,63 @@ networkx/algorithms/tests/__pycache__/test_walks.cpython-312.pyc,, networkx/algorithms/tests/__pycache__/test_wiener.cpython-312.pyc,, networkx/algorithms/tests/test_asteroidal.py,sha256=DnWI5_jnaaZMxtG44XD0K690HZs8ez7HU_9dSR-p6eA,502 networkx/algorithms/tests/test_boundary.py,sha256=1OSJh32FYFhAVYB5zqxhZGEXZLS0HPp9kvfHZvWmD3o,6227 -networkx/algorithms/tests/test_bridges.py,sha256=FS34gA5cia8di_a2X4meeB7qI0JrsVtpQlL4fe_i1CA,4027 +networkx/algorithms/tests/test_bridges.py,sha256=jSCguECho0GNHnu0vpRh1twyfGP6tWFcaYL1rgvc8mU,4026 +networkx/algorithms/tests/test_broadcasting.py,sha256=HGllt9dPTZPE7okbmXdxkL_gr8wVqgbANj1AxeRNb5I,2020 networkx/algorithms/tests/test_chains.py,sha256=SofaAxDEJDf1gt5sIGVC_O8vT9YcTc8Jq1vfnwVPhkM,4363 networkx/algorithms/tests/test_chordal.py,sha256=DPdNPY7KtqCsCwYVb4xQfnIm-z35dUJIWxNHtAiQLAQ,4438 networkx/algorithms/tests/test_clique.py,sha256=FPIF2f8NLODsz-k_qrHt7DolClV_VdNWSh68oe8-ygI,9413 -networkx/algorithms/tests/test_cluster.py,sha256=AltwLWAblpSLa-24KvNuxYxM2IeVl5p2d-kozA9QJ-0,15595 +networkx/algorithms/tests/test_cluster.py,sha256=CzYPJm4QY5SL-amMNh2ItPgQ-FjePPG9EBfIKOZHp6s,15883 networkx/algorithms/tests/test_communicability.py,sha256=4KK9wU9gAUqHAAAyHwAKpq2dV9g415s_X0qd7Tt83gU,2938 -networkx/algorithms/tests/test_core.py,sha256=ZmLePvuK-Tv8aQ6tGCJd9965BHKUviNNVV7o3PzwfEE,7016 +networkx/algorithms/tests/test_core.py,sha256=CF7YPX3F2pUtBu2sp4ZEAGRldaBkdgr1ufk6UkrETuA,9555 networkx/algorithms/tests/test_covering.py,sha256=EeBjQ5mxcVctgavqXZ255T8ryFocuxjxdVpIxVUNFvw,2718 networkx/algorithms/tests/test_cuts.py,sha256=2Ir5xyIG4cTC4Dgg1cceLXaEFiOCJ60ZTDDn33vz0Ns,5377 -networkx/algorithms/tests/test_cycles.py,sha256=mrID4F3wdoZV1oBPETd8Ebx9UXasC2dWsccx8bq_5C8,34243 -networkx/algorithms/tests/test_d_separation.py,sha256=md90cCjC409qAolNGTFwGTu5N577GdgK2RYW83lxopk,6600 -networkx/algorithms/tests/test_dag.py,sha256=MMSD9Flgl_h2fCDIr7gPr9MACj-cU6Xnn5qK1-LeCSc,27722 -networkx/algorithms/tests/test_distance_measures.py,sha256=LdVbsbebvMZghK2gOgecNGxs7v_WjO8z2okG9uF8rAY,22327 -networkx/algorithms/tests/test_distance_regular.py,sha256=pPZ2CPKo4QLjhxlcJhBQZif6-_2qwfh1kpbrN_mu5tg,2312 +networkx/algorithms/tests/test_cycles.py,sha256=dr3IWIiJuhqDi3s8dcSv1PQn-nBh3I3RGHn6jOcRuos,34416 +networkx/algorithms/tests/test_d_separation.py,sha256=ZypzMVDpBZo_4qBlieFlj3RVU6vh7tejEZGlu7qcQbc,10929 +networkx/algorithms/tests/test_dag.py,sha256=oNkUci8iRFdxES3sD9HQe3oJBIGyyPfprWlQAtNfvYU,27930 +networkx/algorithms/tests/test_distance_measures.py,sha256=8d51TtvvlM1m4RDUsaXlrxOV1CnK35HGQVtMS0myxNU,25522 +networkx/algorithms/tests/test_distance_regular.py,sha256=w27OTUtAI0VQv7cikkOdJg4bo4q7xTNIVE8nbU_x7b8,2915 networkx/algorithms/tests/test_dominance.py,sha256=nPqRGSF1GEvUR16ryo-dOql6fLdTvzBmYk8Y3ML-ONc,9373 networkx/algorithms/tests/test_dominating.py,sha256=hyta7ln6BbHaGlpEUla6jVzh2PRuSjvujLSGXrmwZbc,1228 networkx/algorithms/tests/test_efficiency.py,sha256=QKWMvyjCG1Byt-oNp7Rz_qxnVeT77Zk27lrzI1qH0mA,1894 -networkx/algorithms/tests/test_euler.py,sha256=4ajCsO3PwKBaz8jTB_b_nHh_yOz9qSPTOhNBloIRAF8,10987 -networkx/algorithms/tests/test_graph_hashing.py,sha256=duR9DQLUpRuy9bv0ZKQPt9gy9WxiX_K0-BVMlnF-WHY,23517 +networkx/algorithms/tests/test_euler.py,sha256=L4L1ljHVxQxjQQludO2r6k3UZU7WAY_N6WYUjFx1fEk,11209 +networkx/algorithms/tests/test_graph_hashing.py,sha256=MqRwsNbyRWUy94V7UuDqEREuHxFTSn7-d0HzwSDI2As,24534 networkx/algorithms/tests/test_graphical.py,sha256=uhFjvs04odxABToY4IRig_CaUTpAC3SfZRu1p1T7FwY,5366 networkx/algorithms/tests/test_hierarchy.py,sha256=g3-0pNfzRo-RDW1BsiLXxyi2LwWIJukXx2i4JCpN2fg,941 networkx/algorithms/tests/test_hybrid.py,sha256=kQLzaMoqZcKFaJ3D7PKbY2O-FX59XDZ1pN5un8My-tk,720 networkx/algorithms/tests/test_isolate.py,sha256=LyR0YYHJDH5vppQzGzGiJK-aaIV17_Jmla8dMf93olg,555 -networkx/algorithms/tests/test_link_prediction.py,sha256=7c322xESYdH5WEA0TsMw4Jcc_-lqfIsj-SjXP6Y0TVc,19442 +networkx/algorithms/tests/test_link_prediction.py,sha256=Jah4vOGDYcWaPSl_iG-0fOXnhu5o8f6wcfakRmWuX7I,20004 networkx/algorithms/tests/test_lowest_common_ancestors.py,sha256=GvhYCQMnVYD9LHPCNFgWMAUmOV8V5gko0fe05zi1JwU,13153 networkx/algorithms/tests/test_matching.py,sha256=jhehNkApE5RuMPtbjWNeHn0tPqhVz65mL7QakfRA3Vw,20174 networkx/algorithms/tests/test_max_weight_clique.py,sha256=JWGZpbQfUaCklCGI170Gfpp3b5ICYwY7RH_DQ1mYQbc,6741 -networkx/algorithms/tests/test_mis.py,sha256=jusLniyKcNWs0994srLJxY3SVeAQqkkXf-h-qtlrfGw,1875 +networkx/algorithms/tests/test_mis.py,sha256=Z2tKoqbs-AFPzEBDYO7S8U-F7usLfZJ2l6j2DpZUts4,1865 networkx/algorithms/tests/test_moral.py,sha256=15PZgkx7O9aXQB1npQ2JNqBBkEqPPP2RfeZzKqY-GNU,452 networkx/algorithms/tests/test_node_classification.py,sha256=NgJJKUHH1GoD1GE3F4QRYBLM3fUo_En3RNtZvhqCjlg,4663 networkx/algorithms/tests/test_non_randomness.py,sha256=-8s-fJLYRxVNp7QpaMe5Dxrxi0kvewY78d4ja-nXNBk,782 -networkx/algorithms/tests/test_planar_drawing.py,sha256=CBJv6U9tT0BzYVrmEBlARBZSMxBwTsX3krACAnAPfHg,8771 -networkx/algorithms/tests/test_planarity.py,sha256=h9kUOsn0skbvYBcIYzKy5XDGmyP3sTwtvoXYKr_X230,13148 +networkx/algorithms/tests/test_planar_drawing.py,sha256=NN55y2cs9IdZYwUsG-RbI07aGSMx5gp5vnmGLC2vopo,8765 +networkx/algorithms/tests/test_planarity.py,sha256=rrIGX28JoG_DqINsuY4TSdDloxnz4dkCd3xeRo9Svqs,16386 networkx/algorithms/tests/test_polynomials.py,sha256=baI0Kua1pRngRC6Scm5gRRwi1bl0iET5_Xxo3AZTP3A,1983 networkx/algorithms/tests/test_reciprocity.py,sha256=X_PXWFOTzuEcyMWpRdwEJfm8lJOfNE_1rb9AAybf4is,1296 -networkx/algorithms/tests/test_regular.py,sha256=zGf7Mmh7XPtwunOoeTfgiICnfsVeCEbMop3NrDgIfqY,2457 -networkx/algorithms/tests/test_richclub.py,sha256=hhRGQGNQ2EINvmTF-XkJxGZXROvQJZuWwubCYq8Mx9U,2585 -networkx/algorithms/tests/test_similarity.py,sha256=JJYVUV-WtjswW-kDbY5tUuyjLI_3mVKOLUbaRz8wCM8,32216 -networkx/algorithms/tests/test_simple_paths.py,sha256=mmuKfi8t9iXLO8tSIuQGbupFe9c6X6cSiGKEWYiWiqM,24075 +networkx/algorithms/tests/test_regular.py,sha256=5KGvwhixanEigI0KgeUJ1hWPw7YRGZgNbrMkKcndd5M,2626 +networkx/algorithms/tests/test_richclub.py,sha256=ql_j69gIoph8d6oD2tzDqu3b-uW884nmEJZQmWANR6k,3965 +networkx/algorithms/tests/test_similarity.py,sha256=BV5f4DiSQHPsXkSosf29idxGQ_wLiTwEsiHtgDOLLw4,33189 +networkx/algorithms/tests/test_simple_paths.py,sha256=e750_1aTMNJ2NIHo83xfLDkK9UzmlYkTu9Rp54eDI2c,24839 networkx/algorithms/tests/test_smallworld.py,sha256=rfgNCRU6YF55f8sCuA5WmX6MmhDci89Tb4jaz4ALjcQ,2405 networkx/algorithms/tests/test_smetric.py,sha256=wihpgjZS4PaajOuE72RiDEbBWpQcoKPSAfjoAezuRxg,980 networkx/algorithms/tests/test_sparsifiers.py,sha256=A12V4ljWxvXaSFJ73mHSFK2YNO-k8ax6Me4yEWTsI4s,4043 -networkx/algorithms/tests/test_structuralholes.py,sha256=-48vhIVXcUlmLAi603FdBP6afbVu447JZ1piSCIpRTE,5536 +networkx/algorithms/tests/test_structuralholes.py,sha256=mxlgheGz-4HbnWm328pZynzIBJYIukXDp9AxmHqrsLE,5540 networkx/algorithms/tests/test_summarization.py,sha256=cGAep6r-v141uAdsPF9r8YTuT-nO7L7puOqPPv339wo,21313 -networkx/algorithms/tests/test_swap.py,sha256=YRpN79MNL1i5Hm2FVb-mNl9SRfHDWAuDnn2Wx95_UYY,5307 +networkx/algorithms/tests/test_swap.py,sha256=rrvKwedIuqq7Q2Ell-yYZKoYyq6IBkrG4Y-GOc2QFrQ,6121 networkx/algorithms/tests/test_threshold.py,sha256=RF_SM5tdMGJfEHETO19mFicnt69UIlvVeuCwI7rxb0M,9751 networkx/algorithms/tests/test_time_dependent.py,sha256=NmuV2kDo4nh2MeN0hwcJf0QSDtqMD0dfSeeKSsYBtQ8,13342 networkx/algorithms/tests/test_tournament.py,sha256=xxmLb9Lrmjkh9tKmyv2yYJrhB2PHWh-Bq71M-d1NjQo,4158 -networkx/algorithms/tests/test_triads.py,sha256=tPMzSQDVHZQOmDOKa9Hyem76UO1zh7wcdaM9X_BhxG4,9088 +networkx/algorithms/tests/test_triads.py,sha256=anSuYt1ZmV0_aGtSPLl5YxEQZHOuo0QndNADUdZKqdY,9383 networkx/algorithms/tests/test_vitality.py,sha256=p5lPWCtVMtbvxDw6TJUaf8vpb0zKPoz5pND722xiypQ,1380 networkx/algorithms/tests/test_voronoi.py,sha256=M4B6JtkJUw56ULEWRs1kyVEUsroNrnb5FBq9OioAyHM,3477 networkx/algorithms/tests/test_walks.py,sha256=X8cb-YvGHiiqbMEXuKMSdTAb9WtVtbHjIESNSqpJTmU,1499 -networkx/algorithms/tests/test_wiener.py,sha256=NJJbXZ9L5ZeFGQpCpvYVWFNqyX3amkbuDQEBL7wCixw,2080 -networkx/algorithms/threshold.py,sha256=1GUMnQQvN_6mR5oowUbgoykaWPyV4zO1mO1Dyb9NdAE,31088 -networkx/algorithms/time_dependent.py,sha256=73WgWETl4IP4qsOrSDkIEIU7MJM3qc_j-LKRZUJlC4c,5757 -networkx/algorithms/tournament.py,sha256=nTgdIzkkFhIyie_5jDh97USz2jQx9TgY34vHOPVXkN0,11676 +networkx/algorithms/tests/test_wiener.py,sha256=k9ld7wdPq5knS6cjo0hja8aWL-cdxYKGRpDU0z3cvNI,3209 +networkx/algorithms/threshold.py,sha256=JYMM4wrtdQpzw-_L9VYSr3ACVLI8Iu_1p-uK6dWdQ_w,31149 +networkx/algorithms/time_dependent.py,sha256=PAeJ7Yt8kUqbDgvBaz_ZfUFZg-w-vf1gPC0HO6go_TI,5762 +networkx/algorithms/tournament.py,sha256=khYrCbO5GfnRWYtCrEhmSA7ldGnUQC45RQxh6cJmhuk,11766 networkx/algorithms/traversal/__init__.py,sha256=YtFrfNjciqTOI6jGePQaJ01tRSEQXTHqTGGNhDEDb_8,142 networkx/algorithms/traversal/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/traversal/__pycache__/beamsearch.cpython-312.pyc,, @@ -723,11 +731,11 @@ networkx/algorithms/traversal/__pycache__/breadth_first_search.cpython-312.pyc,, networkx/algorithms/traversal/__pycache__/depth_first_search.cpython-312.pyc,, networkx/algorithms/traversal/__pycache__/edgebfs.cpython-312.pyc,, networkx/algorithms/traversal/__pycache__/edgedfs.cpython-312.pyc,, -networkx/algorithms/traversal/beamsearch.py,sha256=ABR8pOl4G3CbUyaHpR9F93jh3J0XjVKZe7DK5LetVWc,3424 -networkx/algorithms/traversal/breadth_first_search.py,sha256=2sIfMwqc2qjGW2W3UcGwGBSCcc-_FWWa_ZRYQjhfro8,18107 -networkx/algorithms/traversal/depth_first_search.py,sha256=aJ-3wtaLVLslz5dJD7nW3biDdXsjJi_rAJB8QQTg_8w,13730 -networkx/algorithms/traversal/edgebfs.py,sha256=2eUhaoP2__-QSkDu1ie6wPd1WjuK3u8pU8rf87iAtKc,6239 -networkx/algorithms/traversal/edgedfs.py,sha256=NaZfoYV5jl8mmo5UhgdQqM2YJ_PjZ--VKYF5T9qa6Ms,5952 +networkx/algorithms/traversal/beamsearch.py,sha256=dTsm_57uhq2NlScvJ-0j6lkQpS9wtwRd4tS2YU6_yzI,3472 +networkx/algorithms/traversal/breadth_first_search.py,sha256=1vo0kFbEDMkyVDDRMxiQ4TIIO5NjpnKbOu7dcFh_WGc,19241 +networkx/algorithms/traversal/depth_first_search.py,sha256=X6IvDAjIrtrNvCu3n8arkx3bqCeEaaUodCkXlGP9sa0,16794 +networkx/algorithms/traversal/edgebfs.py,sha256=zKqwV4s_mxa3Y4nTYaT9I_UiUAYLGk8ru34oCpnaatM,6243 +networkx/algorithms/traversal/edgedfs.py,sha256=g-aIZ7mEc88bI0FETnsL-50cW0lHSdNP7rz25j1oBIo,5956 networkx/algorithms/traversal/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/traversal/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/traversal/tests/__pycache__/test_beamsearch.cpython-312.pyc,, @@ -735,9 +743,9 @@ networkx/algorithms/traversal/tests/__pycache__/test_bfs.cpython-312.pyc,, networkx/algorithms/traversal/tests/__pycache__/test_dfs.cpython-312.pyc,, networkx/algorithms/traversal/tests/__pycache__/test_edgebfs.cpython-312.pyc,, networkx/algorithms/traversal/tests/__pycache__/test_edgedfs.cpython-312.pyc,, -networkx/algorithms/traversal/tests/test_beamsearch.py,sha256=b1fXCI0_BuWbnA536PZrXMMUfG1ejnHX1fpQGY-5hqI,1076 +networkx/algorithms/traversal/tests/test_beamsearch.py,sha256=cGXGwJU_9jxNtzU8EsOX6TyoA1rKM_CfczESIlG_K8c,899 networkx/algorithms/traversal/tests/test_bfs.py,sha256=fC6HUKzd5Jd9LerxgODpfvCRE15BU5PbMzEaMLoXPZs,6796 -networkx/algorithms/traversal/tests/test_dfs.py,sha256=4Gc1ACJQJ63rfOlPz0X0Tv6xW6k83ewMRVojBEnKMmk,8616 +networkx/algorithms/traversal/tests/test_dfs.py,sha256=EqLV_C-3frQ89C-SD0jtHvWEankNfPXm6M76JDdenq0,10604 networkx/algorithms/traversal/tests/test_edgebfs.py,sha256=8oplCu0fct3QipT0JB0-292EA2aOm8zWlMkPedfe6iY,4702 networkx/algorithms/traversal/tests/test_edgedfs.py,sha256=HGmC3GUYSn9XLMHQpdefdE6g-Uh3KqbmgEEXBcckdYc,4775 networkx/algorithms/tree/__init__.py,sha256=wm_FjX3G7hqJfyNmeEaJsRjZI-8Kkv0Nb5jAmQNXzSc,149 @@ -748,12 +756,12 @@ networkx/algorithms/tree/__pycache__/decomposition.cpython-312.pyc,, networkx/algorithms/tree/__pycache__/mst.cpython-312.pyc,, networkx/algorithms/tree/__pycache__/operations.cpython-312.pyc,, networkx/algorithms/tree/__pycache__/recognition.cpython-312.pyc,, -networkx/algorithms/tree/branchings.py,sha256=ZJmoLcn_rtQ9VKBwsFqdx1Rkh8edqjNGgYWBUezNpvE,56003 -networkx/algorithms/tree/coding.py,sha256=zB5ISLd1Jn-6wWfqrQaxYa2hbwchp59qzGKmCiuLVd8,13407 -networkx/algorithms/tree/decomposition.py,sha256=MFV3zHYOt8y7n3jNBxQCQvO60IFJ9rl5XIgvBqjT5RQ,3047 -networkx/algorithms/tree/mst.py,sha256=STCiAXhYmbt3x0yaqRQehwlp_GMJFoeU9vwdmzjFHNk,40276 -networkx/algorithms/tree/operations.py,sha256=46nnbX2qF_iyzeuzsIJXrlXiJOEQfo2KguFB4rP5Ttg,4702 -networkx/algorithms/tree/recognition.py,sha256=ZOdFP-cdG2Lv7jiX3M2nPi7g-e327wPN36_xbn4KiDs,7553 +networkx/algorithms/tree/branchings.py,sha256=xXTh3csPHe8su4hFeIHLNN_W1_Tg6cowZR5OjlgQr30,56350 +networkx/algorithms/tree/coding.py,sha256=RWBC-UzKt86RZ78jBuS-4qJkYPLB4oy-hgZGWcqjR_Q,13463 +networkx/algorithms/tree/decomposition.py,sha256=lY_rqx9JxnLEkp1wiAv0mX62PGPwGQ6SW4Jp48o8aiw,3071 +networkx/algorithms/tree/mst.py,sha256=t58j4OhKQvd-SMT5iraZs3p3qy-5xL-E8gwZtsRKB3Y,45918 +networkx/algorithms/tree/operations.py,sha256=WQRgFl8sYImezZHLHwwnp9cqrwHYh2-aiUy1VUUMzW8,4726 +networkx/algorithms/tree/recognition.py,sha256=bYnaDN0ZaIWTgq0tbPEHAcdxQBWZpDvWypZarBbA334,7569 networkx/algorithms/tree/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/algorithms/tree/tests/__pycache__/__init__.cpython-312.pyc,, networkx/algorithms/tree/tests/__pycache__/test_branchings.cpython-312.pyc,, @@ -762,17 +770,17 @@ networkx/algorithms/tree/tests/__pycache__/test_decomposition.cpython-312.pyc,, networkx/algorithms/tree/tests/__pycache__/test_mst.cpython-312.pyc,, networkx/algorithms/tree/tests/__pycache__/test_operations.cpython-312.pyc,, networkx/algorithms/tree/tests/__pycache__/test_recognition.cpython-312.pyc,, -networkx/algorithms/tree/tests/test_branchings.py,sha256=chEEI0evEkVVJSphcP_kIqhMEdv0nhBONYGP8ffW40s,18008 +networkx/algorithms/tree/tests/test_branchings.py,sha256=kcC49jNRncSPNAQhgHRYIAu207nScB-jObPq1WmaQeM,18999 networkx/algorithms/tree/tests/test_coding.py,sha256=f3A5dvfkWImC6Jp2qkuw2Sz3whOsabnaOfu6Eh9r65I,3954 networkx/algorithms/tree/tests/test_decomposition.py,sha256=vnl_xoQzi1LnlZL25vXOZWwvaWmon3-x222OKt4eDqE,1871 -networkx/algorithms/tree/tests/test_mst.py,sha256=NgvEi2kwn18HN8ywvj1V20pZS98JIuo9vJOv31DqW2w,24749 +networkx/algorithms/tree/tests/test_mst.py,sha256=_Nz7vPuQFetiPNZIHEZFuoFXPhVyr0wYbDdW_xtcMNQ,29544 networkx/algorithms/tree/tests/test_operations.py,sha256=ybU96kROTVJRTyjLG7JSJjYlPxaWmYjUVJqbXV5VGGI,1961 -networkx/algorithms/tree/tests/test_recognition.py,sha256=hbS6q1lbshRClWH7o8Zj7Osd-TZuk_YOomUdTczHs3s,4171 -networkx/algorithms/triads.py,sha256=4EF74EolTV1PJheA-J371tP_pTJA7-aGLnq4D8pac2E,15517 -networkx/algorithms/vitality.py,sha256=yBXiKzewpz40SK0UzFpeZZDvOXXDSt_vh4jGLrNgnHg,2331 -networkx/algorithms/voronoi.py,sha256=zCiFFQiklBS5afAEfln44GfiPsoAI9c7E6m0gbQ2Big,3178 -networkx/algorithms/walks.py,sha256=3ulDmITV-YN8yBTr2qmVEDsSe-Gi8yzrnGyLP5dXQbQ,2419 -networkx/algorithms/wiener.py,sha256=o8tYpFn-W9sneu3QMhpMZlCkqptgRo2ZdUFKfVCOL1s,2328 +networkx/algorithms/tree/tests/test_recognition.py,sha256=qeMEIvg-j2MqaU-TNIQhCcXxao8vTBy0wjpU7jr2iw8,4521 +networkx/algorithms/triads.py,sha256=Rtxi5G9YialRFPZ9IR-z0nuppcSyCulJVQmQany6oac,16852 +networkx/algorithms/vitality.py,sha256=D4DfvQ7Egise4wMwRVQB-vBvYPovVbgh9kFEOOhgkU0,2335 +networkx/algorithms/voronoi.py,sha256=aNt5XTrD8bEkaey1Tp88FopoDOXLWVN_RovT66U9EAM,3182 +networkx/algorithms/walks.py,sha256=_aCy0RmrK2i2vgpqG3ZZcg-MsK6j65DNFzUHz0hmXe8,2428 +networkx/algorithms/wiener.py,sha256=el5cD8ZO-wEjtcjMcgY6bSENIPd6JXEMtHLKb-z9h44,7640 networkx/classes/__init__.py,sha256=Q9oONJrnTFs874SGpwcbV_kyJTDcrLI69GFt99MiE6I,364 networkx/classes/__pycache__/__init__.cpython-312.pyc,, networkx/classes/__pycache__/coreviews.cpython-312.pyc,, @@ -784,20 +792,19 @@ networkx/classes/__pycache__/graphviews.cpython-312.pyc,, networkx/classes/__pycache__/multidigraph.cpython-312.pyc,, networkx/classes/__pycache__/multigraph.cpython-312.pyc,, networkx/classes/__pycache__/reportviews.cpython-312.pyc,, -networkx/classes/coreviews.py,sha256=jkbsDaqebCcFH952hAAAuXw3qZpi7xUdCHyKbUrFsc8,11010 -networkx/classes/digraph.py,sha256=CnnSfxWTjOkabNkSNhBfE2bgwgSG32ylDD3scWxaPP0,47159 -networkx/classes/filters.py,sha256=47OFApfkvvohVMoZ2v9sniM6sgv9rka869BDwmbdww4,1715 -networkx/classes/function.py,sha256=55dS0xS5p7oiyeJQ03mGcSo7NwJLbfZ54_kIhVOx-q0,36323 -networkx/classes/graph.py,sha256=DigVc4mmBx9v1ctgqhDYu8GZwT2wa4iyci85otpYZ6Q,70379 -networkx/classes/graphviews.py,sha256=7rSoE4Pkh8SjjsP2G6t0U0SRAwnkUp5QLSgnJPZgPUQ,8558 -networkx/classes/multidigraph.py,sha256=_5yJvVz99QMkp92iS2qONcahEBhsmS3C7bfaKrNNKoA,36283 -networkx/classes/multigraph.py,sha256=5X1_tB0LJgfif8f1HckiL1MTm9tPDJ4YTRe_H22WFbA,47127 -networkx/classes/reportviews.py,sha256=WQU6LBq2tXIohU6bDJALKeefFaeGMW46Ln8sUJoJ-yM,45606 +networkx/classes/coreviews.py,sha256=Qu6kupOVVBXKOUFBkXOh-4YQEuPL6d6VPyJEaZC5beE,12414 +networkx/classes/digraph.py,sha256=_8gYUKVISvFRxIifD8raxE_PoEtUxL3GrqepC2NM9kI,47496 +networkx/classes/filters.py,sha256=yVoFHVQ7O9895SzVbOgPMNTGH3vWg5apEueDHUXTi_k,2501 +networkx/classes/function.py,sha256=5Ir24Zoa7woLMDB00ux__mFm6I7x6FCH9QT6C0BmYFg,36945 +networkx/classes/graph.py,sha256=gV2zvjNakmTdLjjh3RgUaT64hFigJpEtzxGCCW9Udkw,70794 +networkx/classes/graphviews.py,sha256=xmSeUXcSPamE0GSr8VNm7NnyjDl2e34fJHs1AXUgNsc,8588 +networkx/classes/multidigraph.py,sha256=v5dSRzS8c1pWdrgf0ONaCnRCRLjUWLvNuT7sID0o-Bk,36350 +networkx/classes/multigraph.py,sha256=OFkma1MfIb5BgiIbn-USmUWs80rw_Esf4DtPSbS_saE,47247 +networkx/classes/reportviews.py,sha256=KLZ9v26LsxR17iKmcLhvLLbc3fLMnWcW1yu0UlntT3s,45859 networkx/classes/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/classes/tests/__pycache__/__init__.cpython-312.pyc,, networkx/classes/tests/__pycache__/dispatch_interface.cpython-312.pyc,, networkx/classes/tests/__pycache__/historical_tests.cpython-312.pyc,, -networkx/classes/tests/__pycache__/test_backends.cpython-312.pyc,, networkx/classes/tests/__pycache__/test_coreviews.cpython-312.pyc,, networkx/classes/tests/__pycache__/test_digraph.cpython-312.pyc,, networkx/classes/tests/__pycache__/test_digraph_historical.cpython-312.pyc,, @@ -811,25 +818,24 @@ networkx/classes/tests/__pycache__/test_multigraph.cpython-312.pyc,, networkx/classes/tests/__pycache__/test_reportviews.cpython-312.pyc,, networkx/classes/tests/__pycache__/test_special.cpython-312.pyc,, networkx/classes/tests/__pycache__/test_subgraphviews.cpython-312.pyc,, -networkx/classes/tests/dispatch_interface.py,sha256=bOQdru35uGmAMKHNZEok-UBAeiuA0rF20JZEeo4ePT4,6683 +networkx/classes/tests/dispatch_interface.py,sha256=eYzuKdfBifMDxcrxHeOLGZgkVghVZFr9SyW7QRdYcqI,6687 networkx/classes/tests/historical_tests.py,sha256=3lbZKaRvv8uodIEzSbBJDguTPpO2MhqBqh-Pk1soZBM,16173 -networkx/classes/tests/test_backends.py,sha256=IR8qFYv4cJX0y1q48lRV0zJEouj1sfSOmcwcm4FBxEg,2579 networkx/classes/tests/test_coreviews.py,sha256=qzdozzWK8vLag-CAUqrXAM2CZZwMFN5vMu6Tdrwdf-E,12128 networkx/classes/tests/test_digraph.py,sha256=uw0FuEu3y_YI-PSGuQCRytFpXLF7Eye2fqLJaKbXkBc,12283 networkx/classes/tests/test_digraph_historical.py,sha256=s9FpuIP81zIbGCiMfiDqB3OxqWU2p3GwWdhpGIOjD5Y,3683 networkx/classes/tests/test_filters.py,sha256=fBLig8z548gsBBlQw6VJdGZb4IcqJj7_0mi2Fd2ncEM,5851 -networkx/classes/tests/test_function.py,sha256=e5vg_SjtC8nHrMDemCcEVTHcudcSiWToMsZF655eQi4,25770 +networkx/classes/tests/test_function.py,sha256=b1XQeKUn9N-TbIHH92iFbvuz023CBfwFE6SBburJHBw,25842 networkx/classes/tests/test_graph.py,sha256=77t7pk1Pmz-txewyD2Dv19Vva6vWpWCtJSPtFx-EY_Y,30913 networkx/classes/tests/test_graph_historical.py,sha256=-jf961vQCuQLyly0ju50q9dbzWG5m2OAs9H6IVS670c,273 networkx/classes/tests/test_graphviews.py,sha256=i4x3ii8--PPg_pK4YA8aMR1axUQCdXZYpzmB05iEAOg,11466 networkx/classes/tests/test_multidigraph.py,sha256=ryTKegCoYixXbAqOn3mIt9vSMb5666Dv-pfMkXEjoUE,16342 networkx/classes/tests/test_multigraph.py,sha256=0vFQO3RCJaBpzXvnQzdWa_qYLHNo_I9DICYhPZJNUMk,18777 -networkx/classes/tests/test_reportviews.py,sha256=-4Vd42cOvTdZfsPiWuQuAAvVDafosjB47RosYglmXUw,41470 +networkx/classes/tests/test_reportviews.py,sha256=2bTAKetjhHvlca48GN-qYY1V_Rnz16wBi9UT7DeAcXo,41633 networkx/classes/tests/test_special.py,sha256=IJsmqCS9LrTDoZ11KPmo-UOI7xEskL7NyduEJNPMNqs,4103 networkx/classes/tests/test_subgraphviews.py,sha256=1dcJHq3F00LyoFSu6CTFPqS7DFIkWK1PyQu4QvJh5ko,13223 -networkx/conftest.py,sha256=v1f_RONRmJwf__rPjF4l-uFl2cyyF08mtst8WTnHXr4,7944 -networkx/convert.py,sha256=0EbsMbOgm8pdKpW4A6p5Ea4T_KGEcq-P1a0gCnM-jzY,15977 -networkx/convert_matrix.py,sha256=cnI56RdwsBke_XOz6dAbfgj_qVIwU2JeirRqMN9tM2w,41069 +networkx/conftest.py,sha256=ULCWJLM55y0zfP8maAi9rq-DnkFc7XCe5h_Y9QHI5yo,8819 +networkx/convert.py,sha256=YWmnP_BD6EH6BlqtARtQ1Zclv_pzLe_Ks4gp--CE9nY,16027 +networkx/convert_matrix.py,sha256=K3134LniasiPU0a9QqBnwMLMYP4kuHcM06zw2A9jQHE,41409 networkx/drawing/__init__.py,sha256=rnTFNzLc4fis1hTAEpnWTC80neAR88-llVQ-LObN-i4,160 networkx/drawing/__pycache__/__init__.cpython-312.pyc,, networkx/drawing/__pycache__/layout.cpython-312.pyc,, @@ -837,11 +843,11 @@ networkx/drawing/__pycache__/nx_agraph.cpython-312.pyc,, networkx/drawing/__pycache__/nx_latex.cpython-312.pyc,, networkx/drawing/__pycache__/nx_pydot.cpython-312.pyc,, networkx/drawing/__pycache__/nx_pylab.cpython-312.pyc,, -networkx/drawing/layout.py,sha256=fvfHjubEdZZoRexknTKF2j0zO_Xj2N1nhzfuNTKY5BQ,38829 -networkx/drawing/nx_agraph.py,sha256=9Q6bz0oT7u-iU2hDIjhjvQ3jmxWsyAHA5fMIr4BmhEE,14009 -networkx/drawing/nx_latex.py,sha256=EZWQ1GJ9SWS7ufyAz8ey30gG1EtnCUVMgbLJ4-tIjgY,24805 -networkx/drawing/nx_pydot.py,sha256=vS_lJC9ASmBPyXpecinbNs_OuhjgUNIj82CLks3SjPk,14135 -networkx/drawing/nx_pylab.py,sha256=LOTf6wOfOkB_t-ml5EY-6SEOfMYAxdDzE-4uGJAxBuo,51138 +networkx/drawing/layout.py,sha256=K0875d7Bp5Odi7tQh8sKRGKwWe-MLIgkm3pbzjoSmuw,40753 +networkx/drawing/nx_agraph.py,sha256=gn84HupOV7aD3VDlM2aIdJKubqWFCYdAz5L7Bsbv8fk,14004 +networkx/drawing/nx_latex.py,sha256=_WWVtu_dmBTZBlbzXzOUxhpgpduw6Zri9m-d2JAb7ys,24804 +networkx/drawing/nx_pydot.py,sha256=Kacu6HIuFMXggWOm-JwFSntJ5m3upxmvs9IIqxuc4KQ,12357 +networkx/drawing/nx_pylab.py,sha256=UopFL5Ct7SUtOT6me1pXd6NqhxbnLFv6rXRa_uqeafY,61617 networkx/drawing/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/drawing/tests/__pycache__/__init__.cpython-312.pyc,, networkx/drawing/tests/__pycache__/test_agraph.cpython-312.pyc,, @@ -850,13 +856,13 @@ networkx/drawing/tests/__pycache__/test_layout.cpython-312.pyc,, networkx/drawing/tests/__pycache__/test_pydot.cpython-312.pyc,, networkx/drawing/tests/__pycache__/test_pylab.cpython-312.pyc,, networkx/drawing/tests/baseline/test_house_with_colors.png,sha256=FQi9pIRFwjq4gvgB8cDdBHL5euQUJFw6sQlABf2kRVo,21918 -networkx/drawing/tests/test_agraph.py,sha256=7qDwr3AruwHxoSUGNRACyL5OTK7_2qDM5bkCANSMql4,9045 +networkx/drawing/tests/test_agraph.py,sha256=NvisvEgqusj1bY0CUXezpwnXrSxubpAe6GHTk2bAc1A,8788 networkx/drawing/tests/test_latex.py,sha256=_Wng73kMltC-_sUoxdo2uBL2bkEc7HMqkKhwo9ZDJGA,8710 -networkx/drawing/tests/test_layout.py,sha256=JUHMitAFs28rgYcEvk3-8-8Ri0Qui9ir3DjY24L6MfU,17841 -networkx/drawing/tests/test_pydot.py,sha256=-eRn39-HTFAZ1oVMR6ULSZxCS2531-HrlNjQaUa3i-8,6242 -networkx/drawing/tests/test_pylab.py,sha256=hlStKEitfl74u2wnEYlajmWHVd0IwHdyFfxDcgooUfc,27576 +networkx/drawing/tests/test_layout.py,sha256=C37dhOVDxUIabaWUyWp7q22EpdvmRC9-AjatAjomSyc,19801 +networkx/drawing/tests/test_pydot.py,sha256=ytsZ2iiAqXs8KETF2e19WPwQMMDtDLCurVS7s3L7TJg,6107 +networkx/drawing/tests/test_pylab.py,sha256=zKiVm4dQHIIHsnVnqLay2Tc4wF2UbB90-XRexpXnfpU,30412 networkx/exception.py,sha256=5v8tPTpYcuu3OFgSitgC8-wMUGNwfgxZog2gsBNeRPk,3537 -networkx/generators/__init__.py,sha256=tEbG2IO2NkxVzAFjeApCpATxhjRYopOXes6iffqC6DI,1318 +networkx/generators/__init__.py,sha256=3p86E_yn54BQYlDleuN9APncLNrPsX4F3IoyMeKJOtU,1365 networkx/generators/__pycache__/__init__.cpython-312.pyc,, networkx/generators/__pycache__/atlas.cpython-312.pyc,, networkx/generators/__pycache__/classic.cpython-312.pyc,, @@ -888,32 +894,32 @@ networkx/generators/__pycache__/time_series.cpython-312.pyc,, networkx/generators/__pycache__/trees.cpython-312.pyc,, networkx/generators/__pycache__/triads.cpython-312.pyc,, networkx/generators/atlas.dat.gz,sha256=c_xBbfAWSSNgd1HLdZ9K6B3rX2VQvyW-Wcht47dH5B0,8887 -networkx/generators/atlas.py,sha256=NG5jMwud76LrkzBCl9tNGrv0j3weSi4-A_wtPChdglY,5557 -networkx/generators/classic.py,sha256=hmHiIsSsld_DVY8lpULBF8bGRLYDnhCWDD-Y_8u4o-k,28395 -networkx/generators/cographs.py,sha256=oDJVZRiviNZOrHSGXxQNcXFbRvtB3DW0aFFEJ8bfQ_Y,1866 -networkx/generators/community.py,sha256=bgbD7UfKYXf9lSUe9WJeo20pioNJJMyh1ZpenYOex6E,34690 -networkx/generators/degree_seq.py,sha256=0Zpv4q5rYgrUepprOGaQFTw3PVg6EEWobo9i3Ira9ZI,30006 -networkx/generators/directed.py,sha256=qlm-ArjKbqnGWJi2Ax9HuqaUQm_IUFPuwwDYvAUW4o8,15554 -networkx/generators/duplication.py,sha256=1Ys4nb9suq49ooAVXSnkuKQjvW3H_llprd-xdp70wSs,5013 -networkx/generators/ego.py,sha256=V373eWi-qyJXxgsa49NdLyVqFVCpqC-CMY9ATwQYws8,1873 -networkx/generators/expanders.py,sha256=xDfzdnl2XYrVItnCiU_09szMKQB6S9xOaxWx6rFTHCE,6447 -networkx/generators/geometric.py,sha256=8slijaPVv36oTzU5EsKx0bqtLmgICpbV5zl0vh7MfM8,30858 -networkx/generators/harary_graph.py,sha256=-9SU_IDZklbmiz4bwyCOPbQ4DEnXHwKStim2fHbPz6A,6111 -networkx/generators/internet_as_graphs.py,sha256=tMXL8U9YCAerfYYOV0wpEjPL16HIAJpEOzL8GdZAjxw,14148 -networkx/generators/intersection.py,sha256=WW3yE7TbjDtjggrLU8UysmiY_ip6tLy_hggUYWXVRy8,4028 -networkx/generators/interval_graph.py,sha256=LuXcLfLiRToVhmwz6nz1yWKivzqujFOB1MNZ0WRgnmg,2213 -networkx/generators/joint_degree_seq.py,sha256=p49dvZCcda6NAEsz4zvbiogIw4deqT51HpgIb8rU2zY,24717 -networkx/generators/lattice.py,sha256=8yw3GgxEH2erK2xBCW3oMT2hT2R5eCJC9OcBKz-R-vs,13380 -networkx/generators/line.py,sha256=R5Nz58zz_Fq8LbbLPEDRrYbCGLlbaRj2htmRZJbEv3M,17500 -networkx/generators/mycielski.py,sha256=0f_XLLjdpKsV_VS31PESe6LGg4yJI7nyX4DUWtyMU0U,3266 -networkx/generators/nonisomorphic_trees.py,sha256=I6T3QaH-Asw1B5g0_jnQJO9tOydc4qEbSmNIFUvq6ik,5232 -networkx/generators/random_clustered.py,sha256=4msP74PFIQvmWCxIs7F9WqYWvOTqDXXSf1wSuExEXF8,4159 -networkx/generators/random_graphs.py,sha256=SSYM8SZWgRglwMI6vxBWukDnQDJEk_9lCFKWMm_NkjA,44729 -networkx/generators/small.py,sha256=ADc-LfX8aEg_UYkPVfZk9YN4Na2KxpZxHsSvnVhj5D8,27217 -networkx/generators/social.py,sha256=caDTR23cNv1nlA5j3OZvs3d4HuwExxNbjfO9Ijqv7qY,22867 -networkx/generators/spectral_graph_forge.py,sha256=PPU6w9Z0_6iKQODsXSCE4ftVMYNrECBeH1Q_Y5Ea95U,4217 -networkx/generators/stochastic.py,sha256=K_4B3xmc6EDTQkc53eaOK1wHzF6qijAogWmEMDIjwjc,1897 -networkx/generators/sudoku.py,sha256=l-j2mo0KLarWRvMmjncZZfxJzoYn9ZGuz_3rlGZ5CRM,4264 +networkx/generators/atlas.py,sha256=CL33scmzOqboyrume3Auxi_kxmpPoPWhlTIi5hOOUbc,5605 +networkx/generators/classic.py,sha256=GO6aoVotzUl4UwO9owgVUajYueq5tusMwXBDTZHK8fI,31576 +networkx/generators/cographs.py,sha256=BWbTZ7uW2LTsexUx6iDiwNAzq7iiyRu8FB4B74d0NZU,1890 +networkx/generators/community.py,sha256=7si2tkO75yBYyUHsJuKrF3D3-hT7BSdU9YHPOSfMvCY,34910 +networkx/generators/degree_seq.py,sha256=kuU3wy2J5UEkWzkXyyxxFxHvs7HMcBWiKZSS6TLPYZ4,30174 +networkx/generators/directed.py,sha256=Vcg0zeWFS2-F99bFmhXj4mzlCy_yoBuuqjnSx5I-Dco,15696 +networkx/generators/duplication.py,sha256=ltUICmWTEN0eYLN-TPx6x8mJSPgmIysoTIUaKeTPxI4,5051 +networkx/generators/ego.py,sha256=MXaJqqPVPWE8n9sTfeKePAmuqtS5u2pL1GvRQ2Gf8Y0,1899 +networkx/generators/expanders.py,sha256=FpUynvzKFmn4zxyhCIAuiX2cXPX2tcRA6GzjQi6KfRM,14456 +networkx/generators/geometric.py,sha256=7sna0Q9pfJdYkVhNAXBWMNkaU1sESn39y3CxSSCDtEQ,39589 +networkx/generators/harary_graph.py,sha256=N6vzXKrW-ZU-xDc2ZTF_Gf7kb0LRQVRfK2oLBQvyVO8,6159 +networkx/generators/internet_as_graphs.py,sha256=Y_pQaGhe183X6dXH4ocqIK3DzXRz0oXE-AKwsL1yCHk,14172 +networkx/generators/intersection.py,sha256=1dSnFp58EDbTVBFXHTvmJdeV3lhlO48XgxhkJf2TTF8,4100 +networkx/generators/interval_graph.py,sha256=EdPD9zonEWGTqpdlrlBRZ1OXzwo8ft9g_MdAfLxJ_ME,2203 +networkx/generators/joint_degree_seq.py,sha256=nyp86NC_4XvzvwpwwzKrrCSz1i_4bESSDtVjWvpkWFg,24773 +networkx/generators/lattice.py,sha256=kVCvTahWPQGNbok6maXfaqGzm88UuxhP7D9BkKhGW1o,13500 +networkx/generators/line.py,sha256=vQ0BnlCqeVf3p3CqZ4Et_GKsv__km4HyEYQtoD0Oaa8,17530 +networkx/generators/mycielski.py,sha256=xBX2m77sCzumoH5cAGitksvEEW-ocbCnbdaN7fKUtVk,3314 +networkx/generators/nonisomorphic_trees.py,sha256=gE7uPB-uaE6rEfaimmR9bqobso5yclcCG6u8zwZlS48,6453 +networkx/generators/random_clustered.py,sha256=6B-XK5BqDsfy11dMXb1H0mGhjpo-oePPHImSU-hJYxA,4183 +networkx/generators/random_graphs.py,sha256=6b6XqaqD7YOPEREdKAYFZuXUU-b0lEsrg8IUbqxZI7M,45097 +networkx/generators/small.py,sha256=Xs9JNTtoLiShg7fF7_VRJ-G18JGSt4JEMmhhtpS51r8,28171 +networkx/generators/social.py,sha256=UmMU8WRi0udN5pxvMctmCNZQtsF_k7Mavj4Bt3BQmfM,22963 +networkx/generators/spectral_graph_forge.py,sha256=kt1QgeZmZE2nWSxy_79FJVRGbzMsYSGVvMuCaAtY1tQ,4241 +networkx/generators/stochastic.py,sha256=Qg9vWm9EOug2OQVIHL_dZ5HrXc16lxnWyzX52KWNEPI,1981 +networkx/generators/sudoku.py,sha256=kLM2AP0H4966uYiNO1oAFEmv5qBftU_bOfYucRxexM0,4288 networkx/generators/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/generators/tests/__pycache__/__init__.cpython-312.pyc,, networkx/generators/tests/__pycache__/test_atlas.cpython-312.pyc,, @@ -945,15 +951,15 @@ networkx/generators/tests/__pycache__/test_time_series.cpython-312.pyc,, networkx/generators/tests/__pycache__/test_trees.cpython-312.pyc,, networkx/generators/tests/__pycache__/test_triads.cpython-312.pyc,, networkx/generators/tests/test_atlas.py,sha256=nwXJL4O5jUqhTwqhkPxHY8s3KXHQTDEdsfbg4MsSzVQ,2530 -networkx/generators/tests/test_classic.py,sha256=RAELDkMqAVYaIo1nhBbjDbmAfzSrn6RBqSSd--mWqvs,22495 +networkx/generators/tests/test_classic.py,sha256=o4EfLc7VqFw3NeWrZ5Ooy8FHZXHfZW0qX2p8Hs5xK4o,23413 networkx/generators/tests/test_cographs.py,sha256=DkiQzP69sjw3QtjWVX2XV0EXoOuEvR42dixPWwuawSE,460 networkx/generators/tests/test_community.py,sha256=FGcDo3Ajb-yYc5kUkFbVfOJVMG-YppbAtjgBPcVzjLc,11311 networkx/generators/tests/test_degree_seq.py,sha256=in6lg1pwcAg1N08MA3lQdr3lnm2-aoUy3BRm6Yj_OBQ,7093 networkx/generators/tests/test_directed.py,sha256=00widU8dJGkdnU_b6-ZxL8KGtx-gSh4sRG7cwbMHvjQ,5258 -networkx/generators/tests/test_duplication.py,sha256=IIzcHEfHp0NHsH7GTXSb4E4kgXAlt83q4IMibfx2FBw,1915 +networkx/generators/tests/test_duplication.py,sha256=USHcHajtfhh16W-6i2_e7rW6bi81YC6Dc562P-wxiTc,2350 networkx/generators/tests/test_ego.py,sha256=8v1Qjmkli9wIhhUuqzgqCzysr0C1Z2C3oJMCUoNvgY4,1327 -networkx/generators/tests/test_expanders.py,sha256=O6O68S5VFWycg-Ml-gvZXjX_vjwO0MBfaBcNYIBP9Io,2896 -networkx/generators/tests/test_geometric.py,sha256=1wzo-eTOP937aOEk8lQGrsW7u2BDfRhyYQ1HpHQqslQ,12512 +networkx/generators/tests/test_expanders.py,sha256=_dkrj2NFvZim9ZSZoehmfjJRfC0RsKUFSTDndXQM1sc,5604 +networkx/generators/tests/test_geometric.py,sha256=gnVm4dam_Er88YwaNpNZC6mjJjfgwMYhyLOtU9oPn1o,18087 networkx/generators/tests/test_harary_graph.py,sha256=U5GfsoekBwVwTGMvk33e2eFOzHEL4czRIWv57j3nt_g,4937 networkx/generators/tests/test_internet_as_graphs.py,sha256=QmzkOnWg9bcSrv31UcaD6Cko55AV-GPLLY5Aqb_Dmvs,6795 networkx/generators/tests/test_intersection.py,sha256=hcIit5fKfOn3VjMhz9KqovZK9tzxZfmC6ezvA7gZAvM,819 @@ -961,21 +967,21 @@ networkx/generators/tests/test_interval_graph.py,sha256=-1yXDZDW-ygmNva9Bu-TsS_S networkx/generators/tests/test_joint_degree_seq.py,sha256=8TXTZI3Um2gBXtP-4yhGKf9vCi78-NVmWZw9r9WG3F8,4270 networkx/generators/tests/test_lattice.py,sha256=q4Ri-dH9mKhfq0PNX9xMeYRUiP0JlPBr7piSruZlFlg,9290 networkx/generators/tests/test_line.py,sha256=vXncJuny2j5ulCJyT01Rt1tTwPib4XelS3dJDdJXjx0,10378 -networkx/generators/tests/test_mycielski.py,sha256=cAg2J6o_RrbwEdAc0vCuSF6zeS6w1KT4leTM0vkIeoA,822 -networkx/generators/tests/test_nonisomorphic_trees.py,sha256=Y_qWyj_qZU9O_DC4BHEVD9xnIEALCmfdmZAYJjTxUYE,2384 -networkx/generators/tests/test_random_clustered.py,sha256=LTfigb1swnYWS59OJoBmNcjFcUjsodnHVOwFxBXl7xg,979 +networkx/generators/tests/test_mycielski.py,sha256=fwZLO1ybcltRy6TzCel8tPBil1oZWv9QSXs779H6Xt0,946 +networkx/generators/tests/test_nonisomorphic_trees.py,sha256=nwATIcuBa2EVlR74koQMeEOA7MDPG8mpQIfDQ8LPxfs,2453 +networkx/generators/tests/test_random_clustered.py,sha256=SalHqWvpnXA3QrDRMjLx15dk2c4Us8Ck52clUERoUI8,1297 networkx/generators/tests/test_random_graphs.py,sha256=DKEPbvKiFzZQsuofuj_MphGX2KJ8Bvz6ofIttDGMANk,13121 -networkx/generators/tests/test_small.py,sha256=u_CTdGXfwnqvIYWjYv8VX_r_KB5Y1aCxXxQkxhx-WHs,6906 +networkx/generators/tests/test_small.py,sha256=K4-sSBZca3UMP1deUOWlkSzpanJBAT-vQdr11PMI_QY,7060 networkx/generators/tests/test_spectral_graph_forge.py,sha256=x4jyTiQiydaUPWYaGsNFsIB47PAzSSwQYCNXGa2B4SU,1594 networkx/generators/tests/test_stochastic.py,sha256=xdytPcz4ETnuqGtjMr0CI3zR4xWJqi91Zxbkly8Ijf8,2178 networkx/generators/tests/test_sudoku.py,sha256=dgOmk-B7MxCVkbHdZzsLZppQ61FAArVy4McSVL8Afzo,1968 networkx/generators/tests/test_time_series.py,sha256=74kHpcBfbed7zmd1Ofh2XoLIhIaEEFpEf51j1e2muMo,2229 networkx/generators/tests/test_trees.py,sha256=hv8oNYZOcYcaARXvaMQZptCVBvk-huk-nKI5mH9sB-8,7634 networkx/generators/tests/test_triads.py,sha256=mgpHFf0Z34CqtnXgkdf7gK1dC77ppYAqwviXsaU1HVs,332 -networkx/generators/time_series.py,sha256=Jz33n3mprkLrVbwLRLznQg_lDQvmIL2jWNoY4LCla80,2414 -networkx/generators/trees.py,sha256=xR9H01HkI1WR24KdSEv8inTz6rgbzjwt1vL0GfOImts,39067 -networkx/generators/triads.py,sha256=bXfoxFUH9CJaO7PMxjwiB9SvhPp4ZL3HxlUsL-67Yv4,2233 -networkx/lazy_imports.py,sha256=MDfQ4C99G30uYBmLJBGtGEcrOzHMUcxvOyZpN674DYw,5784 +networkx/generators/time_series.py,sha256=-fKclBUnbqzBh-zKKgo96sdLuuj6l8q3svHO7yZ9HHw,2438 +networkx/generators/trees.py,sha256=Wra3uSUolTS2ugQIE42XiFeIHKbiyBmsZfqAXtSkpKU,39283 +networkx/generators/triads.py,sha256=W7DCEbPpC6My82YkXztfmk874he0SwscndAG5QlBSgA,2451 +networkx/lazy_imports.py,sha256=tYxP13tZ3p8-Qh--Mey4ZXZqQhWgQAbI7xYBZRrBzw0,5764 networkx/linalg/__init__.py,sha256=7iyNZ_YYBnlsW8zSfhUgvEkywOrUWfpIuyS86ZOKlG8,568 networkx/linalg/__pycache__/__init__.cpython-312.pyc,, networkx/linalg/__pycache__/algebraicconnectivity.cpython-312.pyc,, @@ -985,13 +991,13 @@ networkx/linalg/__pycache__/graphmatrix.cpython-312.pyc,, networkx/linalg/__pycache__/laplacianmatrix.cpython-312.pyc,, networkx/linalg/__pycache__/modularitymatrix.cpython-312.pyc,, networkx/linalg/__pycache__/spectrum.cpython-312.pyc,, -networkx/linalg/algebraicconnectivity.py,sha256=CScaTuN7V1BfEBPA8LSSe1FLV7uE-Am8Iaf9Q9Crgtw,21106 -networkx/linalg/attrmatrix.py,sha256=93xWJq-tIvayQTEUp7UaHLmAQQpSPYMHKF4KqPEfSUE,15504 -networkx/linalg/bethehessianmatrix.py,sha256=sNCKJoRe9jidTrqdX5I8mwl1t08GKzaL14R4ujk42Vk,2692 -networkx/linalg/graphmatrix.py,sha256=TRbhk2cHeJtKW15Gl-lGD7Ih1M3eHkSOC7yoerb7WBU,5513 -networkx/linalg/laplacianmatrix.py,sha256=WQJnmPEVsDTL8kUfQmqg-GJEPeHx3HO4PQLTO-XUp44,13330 -networkx/linalg/modularitymatrix.py,sha256=gtFN_MajMpZlvfsUqzBygLS6l5hZKi2_g1YqzPPedJw,4698 -networkx/linalg/spectrum.py,sha256=oxo9HSRM6jP2g8hKT1lk54Yinhr38AcanSK6RwHnDG0,4194 +networkx/linalg/algebraicconnectivity.py,sha256=yQHSsXjJrD_6QqO9IYb2hKnfxE9HGOOLgwlqxDBWnWY,21148 +networkx/linalg/attrmatrix.py,sha256=AWZOBgLbTjpDA_l9YgAUF3Gt6mURWM7DtVLPLhM99S4,15512 +networkx/linalg/bethehessianmatrix.py,sha256=z-XEYIEQRh1tSuorPxrBGyqlT-6sgIMpGhaitU2BpAk,2696 +networkx/linalg/graphmatrix.py,sha256=HzparMcGmcXpIg1T5f7Y-dxPPkUydniTT4RGFrkxzSA,5521 +networkx/linalg/laplacianmatrix.py,sha256=ZPjZ66crPAdVQFuXq4rhwlCKDENf_JJZukAabac-fXs,20537 +networkx/linalg/modularitymatrix.py,sha256=dEbTSC-uQhPxqHcPGkY1SLKwRpz6XIW1Ln5jED_KBKs,4706 +networkx/linalg/spectrum.py,sha256=Cw0zOUMwbilsKO9EObTE6ABnOBQF-gPWIst-jIeHrXs,4214 networkx/linalg/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/linalg/tests/__pycache__/__init__.cpython-312.pyc,, networkx/linalg/tests/__pycache__/test_algebraic_connectivity.cpython-312.pyc,, @@ -1005,7 +1011,7 @@ networkx/linalg/tests/test_algebraic_connectivity.py,sha256=Kj2ct6gQ71xXFP7usAbF networkx/linalg/tests/test_attrmatrix.py,sha256=XD3YuPc5yXKWbhwVSI8YiV_wABWM-rLtwf1uwwWlnI0,2833 networkx/linalg/tests/test_bethehessian.py,sha256=0r-Do902ywV10TyqTlIJ2Ls3iMqM6sSs2PZbod7kWBM,1327 networkx/linalg/tests/test_graphmatrix.py,sha256=e5YSH9ih1VL64nnYgZFDvLyKbP3BFqpp0jY6t-8b2eY,8708 -networkx/linalg/tests/test_laplacian.py,sha256=K8p2upJTJLfNHfAf0B9ohPXBZ4k_2VMpSvIc-jXZ_rM,9934 +networkx/linalg/tests/test_laplacian.py,sha256=0AGJwezqohoQtrmTZ94Gvg5vISMCB7_G2QdJl7JFTXg,14081 networkx/linalg/tests/test_modularity.py,sha256=mfKUvwc3bj6Rud1aG4oK3Eu1qg12o6cB8-pv5ZFicYY,3115 networkx/linalg/tests/test_spectrum.py,sha256=agP2DsiEIvtkNUkT94mdPtJjwnobnjMTUOwjIQa4giA,2828 networkx/readwrite/__init__.py,sha256=iHycAh1rjr4bCPQMNiHiqm8cP3iu-g1v_uKiGZtkuXY,562 @@ -1022,21 +1028,21 @@ networkx/readwrite/__pycache__/p2g.cpython-312.pyc,, networkx/readwrite/__pycache__/pajek.cpython-312.pyc,, networkx/readwrite/__pycache__/sparse6.cpython-312.pyc,, networkx/readwrite/__pycache__/text.cpython-312.pyc,, -networkx/readwrite/adjlist.py,sha256=P8W_dQu-1NQCC8FX-Zpyta_b0L-NuruRE4X-GKSWNSQ,8386 -networkx/readwrite/edgelist.py,sha256=qkS9reBZWrSviBp2ZkUMt5gEo4FbFcBfQXhO14OSI-E,14160 -networkx/readwrite/gexf.py,sha256=UZPVSIlQNH_t0KNTEjclEcJ96FdeLWLVQ84f7u1NoDM,39668 -networkx/readwrite/gml.py,sha256=NK9jDDQhShmf70wrH2P2hNV59KdFUbC866vhvRc_qV8,31104 -networkx/readwrite/graph6.py,sha256=P2jrsgiX75XGMCK4wyIGpXo8snOJ--ZZ6r6N5m1jusE,11355 -networkx/readwrite/graphml.py,sha256=YIxHdP3zXFixYb_rVL051-yyfN9rJwFs_D1tB39NH8w,39183 +networkx/readwrite/adjlist.py,sha256=UiwcjwVSrN1X5BUWKmxHt4aNJpYbGzLNtmLApHRP89g,8430 +networkx/readwrite/edgelist.py,sha256=3p1w6TV2cWkruVuiFqZv7yEbeuMS-dqraBSbtlN8Iv8,14232 +networkx/readwrite/gexf.py,sha256=R8-4bCbitvx7uz4F9TR2-AGVik-DYuD3Ouyo-iLJKtk,39692 +networkx/readwrite/gml.py,sha256=xn8QIMTfHjMcWW1LQiS_13InIupJlYQcCkLZACJ9gWg,31150 +networkx/readwrite/graph6.py,sha256=wCc_RVfyEvkkg2vOfUXVNFzcolTUKilMp0fuTlYy7I0,11400 +networkx/readwrite/graphml.py,sha256=hwbvL1rRWA3Da0dKyASvXifi9bB8Qu9pxS5c_6a0-iA,39317 networkx/readwrite/json_graph/__init__.py,sha256=31_5zVLXYEZkjOB-TKXZ5bi83JybPWgpCaRKOXIGoOA,676 networkx/readwrite/json_graph/__pycache__/__init__.cpython-312.pyc,, networkx/readwrite/json_graph/__pycache__/adjacency.cpython-312.pyc,, networkx/readwrite/json_graph/__pycache__/cytoscape.cpython-312.pyc,, networkx/readwrite/json_graph/__pycache__/node_link.cpython-312.pyc,, networkx/readwrite/json_graph/__pycache__/tree.cpython-312.pyc,, -networkx/readwrite/json_graph/adjacency.py,sha256=QAUoN4LI5ehEjBv__T_hpmHA2n0eHuE3f3OwQv4kiqA,4692 -networkx/readwrite/json_graph/cytoscape.py,sha256=1UqpoAB-96c4sFGKqTjCziInavrHcFJRHFQo4_iits4,5234 -networkx/readwrite/json_graph/node_link.py,sha256=8ujpdgQapwClUautmCOF3Up3JoFiLgZRHu6PUxF1B7Q,7450 +networkx/readwrite/json_graph/adjacency.py,sha256=WM6fdncV87WDLPOfF-IbOlOOBMX0utUjJ09UsxtwRAo,4716 +networkx/readwrite/json_graph/cytoscape.py,sha256=kX6_p24F4CnDdT0D5lYrD0-jypyMdmqnGQEXKR1_kH4,5338 +networkx/readwrite/json_graph/node_link.py,sha256=iWlZX_Em_4mQbVXjXkikCtEWDLVxua7Bx0RmwwAzqkg,7473 networkx/readwrite/json_graph/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/readwrite/json_graph/tests/__pycache__/__init__.cpython-312.pyc,, networkx/readwrite/json_graph/tests/__pycache__/test_adjacency.cpython-312.pyc,, @@ -1047,12 +1053,12 @@ networkx/readwrite/json_graph/tests/test_adjacency.py,sha256=jueQE3Z_W5BZuCjr0hE networkx/readwrite/json_graph/tests/test_cytoscape.py,sha256=vFoDzcSRI9THlmp4Fu2HHhIF9AUmECWs5mftVWjaWWs,2044 networkx/readwrite/json_graph/tests/test_node_link.py,sha256=bDe2Vv1M4h0IDbKjS482p8ZE7SZtBfHDgZ1OEPibwoo,4536 networkx/readwrite/json_graph/tests/test_tree.py,sha256=zBXv3_db2XGxFs3XQ35btNf_ku52aLXXiHZmmX4ixAs,1352 -networkx/readwrite/json_graph/tree.py,sha256=ETjeYnUMyqZ0PbvSR97ar9rJnH8ncLI_Qd16qGFb-jw,3827 -networkx/readwrite/leda.py,sha256=No8DKw26vB2fzaDQNmfOEOuiUS9XGdvBXSKrctJhipg,2749 -networkx/readwrite/multiline_adjlist.py,sha256=Zo7K6gE-FpOBao4KiVaA-yRk4mbQzCJzIl4uUgrWYfM,11255 -networkx/readwrite/p2g.py,sha256=j8vNdr8KKD3o0d1zvfYUJnhe8J9vWxAHLzw3mW85apE,3043 -networkx/readwrite/pajek.py,sha256=aFKB04KvFuCqBawdjvR7U4N8BzPDDatqkf97s8zY_eI,8690 -networkx/readwrite/sparse6.py,sha256=sPL2NBYvB9blDaSJEEdYocHxaU7SmV1OVhYf8a_-LsI,10269 +networkx/readwrite/json_graph/tree.py,sha256=K4rF4Kds4g0JhgcPTrrR_I3Pswpze8yCVH4M-WF9nn0,3851 +networkx/readwrite/leda.py,sha256=VjpyUYeAWPD4TQSyvcC-ftcTeg6Pow9zJJqNuiGZ0zU,2797 +networkx/readwrite/multiline_adjlist.py,sha256=n6eLkGkp_rfiVTxLJzPSHm5ctiBc2zTshNDsbKprvcA,11291 +networkx/readwrite/p2g.py,sha256=_OVajlPGLynzYQMBp5QReAEMiQ_BXfEEATlV61sUYM4,3091 +networkx/readwrite/pajek.py,sha256=9j3sRjLzPQxqQFdEoTCOwICpdAf7G39cdls04dhErns,8738 +networkx/readwrite/sparse6.py,sha256=YY7gtCWuS0sxgueSB_lS9HkFRNW8hPvkMxchmfoPngw,10314 networkx/readwrite/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/readwrite/tests/__pycache__/__init__.cpython-312.pyc,, networkx/readwrite/tests/__pycache__/test_adjlist.cpython-312.pyc,, @@ -1066,19 +1072,19 @@ networkx/readwrite/tests/__pycache__/test_p2g.cpython-312.pyc,, networkx/readwrite/tests/__pycache__/test_pajek.cpython-312.pyc,, networkx/readwrite/tests/__pycache__/test_sparse6.cpython-312.pyc,, networkx/readwrite/tests/__pycache__/test_text.cpython-312.pyc,, -networkx/readwrite/tests/test_adjlist.py,sha256=dLEv3txnBrHYxajOYAQhA8CA7axiuPw1ECbaHL5p338,9922 -networkx/readwrite/tests/test_edgelist.py,sha256=atBg6Qjhk8boXs3gUZk4gmg-6GOT5rCosEf30sqOZO4,9969 +networkx/readwrite/tests/test_adjlist.py,sha256=ZGxGuM9AEV6xskWAJQmBndVJIemHVKBj02PpPnA6a-U,9430 +networkx/readwrite/tests/test_edgelist.py,sha256=dkc14_bCP8JD5cAFYza2mLHfirK-aNI6COl5i3hbHfc,9617 networkx/readwrite/tests/test_gexf.py,sha256=Tbqueeh0XRQ8vtmGwXcyy9K3tWPlnLu6Gop0Hy4cZcc,19405 -networkx/readwrite/tests/test_gml.py,sha256=GF8rfOj2M3tMtdQ65DMsXypXSFMeWzKEI1qYV-jd5xA,21334 -networkx/readwrite/tests/test_graph6.py,sha256=IjBpfTr-czBLHb8UT_JzvOTBROpnOf5TKKkfCnEeQT8,6069 -networkx/readwrite/tests/test_graphml.py,sha256=u4u-udRXPCXFUZ9oB0_X4UUx3MVULQjx9tkXUdwebhI,67149 +networkx/readwrite/tests/test_gml.py,sha256=8_2nBU6n8zLHkApiuKkZNH-xMRSdA1G8ZH3Lvjspizg,21391 +networkx/readwrite/tests/test_graph6.py,sha256=DAi58D_G3j2UGk6VpfGkLGzfSAl318TIbuXSKKZ102U,6067 +networkx/readwrite/tests/test_graphml.py,sha256=MrU3AkdqNQ6gVLtOQrZUx39pV7PjS_ETu5uuT5Ce6BI,67573 networkx/readwrite/tests/test_leda.py,sha256=_5F4nLLQ1oAZQMZtTQoFncZL0Oc-IsztFBglEdQeH3k,1392 networkx/readwrite/tests/test_p2g.py,sha256=drsdod5amV9TGCk-qE2RwsvAop78IKEI1WguVFfd9rs,1320 -networkx/readwrite/tests/test_pajek.py,sha256=XTsnaCaYjroysCHlTsYwMGGrDR0B1MRwWkA-WXbAXTg,4703 -networkx/readwrite/tests/test_sparse6.py,sha256=fLpTG0YgcptNOpUipcCcVlni5i8IyC21kkk3ZeD0XhM,5470 +networkx/readwrite/tests/test_pajek.py,sha256=nc8f70J-fmMCOpLY-fdtmbjyMb2abWgzRFxZNnM7Ajs,4628 +networkx/readwrite/tests/test_sparse6.py,sha256=cqFHWz4G_kMawaRqceofN4K-JlkmPx3BEaDXkU8DD0o,5284 networkx/readwrite/tests/test_text.py,sha256=w17FdFQ4vK3J8d2UKPZUEtIo5udp6UyilPXyIr8JfpE,56562 -networkx/readwrite/text.py,sha256=4rWNkDgtUSmqGUAIXPkOKU7u9PFQOlp5eBqn6yt9QKk,32132 -networkx/relabel.py,sha256=m8R1KovP9IBtzTE2_6NYgMRxB5AFDwZmUCOFYkDoNXI,10279 +networkx/readwrite/text.py,sha256=NdS9C0UU2DS8t49SbMnnkCtsOZF-ZPoSvuY4FpdZ82s,32126 +networkx/relabel.py,sha256=0HptAQOBToKhLZzxscd6FQpzVCNMlYmiHjHul69ct8o,10300 networkx/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/tests/__pycache__/__init__.cpython-312.pyc,, networkx/tests/__pycache__/test_all_random_functions.cpython-312.pyc,, @@ -1090,7 +1096,7 @@ networkx/tests/__pycache__/test_exceptions.cpython-312.pyc,, networkx/tests/__pycache__/test_import.cpython-312.pyc,, networkx/tests/__pycache__/test_lazy_imports.cpython-312.pyc,, networkx/tests/__pycache__/test_relabel.cpython-312.pyc,, -networkx/tests/test_all_random_functions.py,sha256=tbFGmaqLrF8lEp0Hn8sOuPzD5rzIpOVOeeBoBk3_W6g,8653 +networkx/tests/test_all_random_functions.py,sha256=DljfvNH8UTDiAORcrKrSbWwNPqouU8Ba0vjX5BqSG90,8713 networkx/tests/test_convert.py,sha256=SoIVrqJFF9Gu9Jff_apfbpqg8QhkfC6QW4qzoSM-ukM,12731 networkx/tests/test_convert_numpy.py,sha256=R4y5ud0hVZFSGrFjUHD6Anu_aaasy2O_Eke4FaOhPqU,14951 networkx/tests/test_convert_pandas.py,sha256=cZJEdV0jP8afRZMqJ8-aL9Ma5NdXSWMuj1hVbjGMR2g,12257 @@ -1099,9 +1105,10 @@ networkx/tests/test_exceptions.py,sha256=XYkpPzqMepSw3MPRUJN5LcFsUsy3YT_fiRDhm0O networkx/tests/test_import.py,sha256=Gm4ujfH9JkQtDrSjOlwXXXUuubI057wskKLCkF6Z92k,220 networkx/tests/test_lazy_imports.py,sha256=nKykNQPt_ZV8JxCH_EkwwcPNayAgZGQVf89e8I7uIlI,2680 networkx/tests/test_relabel.py,sha256=dffbjiW_VUAQe7iD8knFS_KepUITt0F6xuwf7daWwKw,14517 -networkx/utils/__init__.py,sha256=T8IdHaWU2MOGbU-1a7JZcAn5YFtO9iDQVt6ky-BRkJg,227 +networkx/utils/__init__.py,sha256=F0y3R6cWX8hjdLK9eeP-EQCMCpufjGJnclN1zsn7jas,302 networkx/utils/__pycache__/__init__.cpython-312.pyc,, networkx/utils/__pycache__/backends.cpython-312.pyc,, +networkx/utils/__pycache__/configs.cpython-312.pyc,, networkx/utils/__pycache__/decorators.cpython-312.pyc,, networkx/utils/__pycache__/heaps.cpython-312.pyc,, networkx/utils/__pycache__/mapped_queue.cpython-312.pyc,, @@ -1109,16 +1116,19 @@ networkx/utils/__pycache__/misc.cpython-312.pyc,, networkx/utils/__pycache__/random_sequence.cpython-312.pyc,, networkx/utils/__pycache__/rcm.cpython-312.pyc,, networkx/utils/__pycache__/union_find.cpython-312.pyc,, -networkx/utils/backends.py,sha256=5z_pQQrT3kGUCtihbDDqy3TvR9t82KxyMGAaAdsgKLs,40939 -networkx/utils/decorators.py,sha256=Z3U3-pXWD1OKa3cciHG_LSwwylVrpSXdP2rPALq_gZc,46464 +networkx/utils/backends.py,sha256=a7iJuTc2rk9fRraeWXfBWn4xd2pRUdj6vhhOys4BFaw,68527 +networkx/utils/configs.py,sha256=gNiGYGH2OrhM3O1jmOhjjMG6x8qdw0aWY1tb3_k-WDQ,9107 +networkx/utils/decorators.py,sha256=eMWcHFooCJ-OWtlfDHEevRFNY8DzihP4XA6mdqhsmoI,46829 networkx/utils/heaps.py,sha256=HUZuETHfELEqiXdMBPmD9fA2KiACVhp6iEahcrjFxYM,10391 -networkx/utils/mapped_queue.py,sha256=ywJN0Z32EAQ1dezF8ORXP_ca0n16sxQlcIrkQQn5i7I,10185 -networkx/utils/misc.py,sha256=pyN1TGuUFHFfPLubIL-wP-zl_Ybm_U_UWxVw37_tI3g,14351 +networkx/utils/mapped_queue.py,sha256=8hNMQtvXr7-fOzg-22xt3pWKrElkNGSSXspWgTcgdeQ,10185 +networkx/utils/misc.py,sha256=gyHBiNYDCJjYX1q59qC-DuWCopnN34T3wEd_enH98sk,19321 networkx/utils/random_sequence.py,sha256=KzKh0BRMri0MBZlzxHNMl3qRTy2DnBexW3eDzmxKab4,4237 networkx/utils/rcm.py,sha256=MeOhFkv91ALieKJtGHqkhxgO7KJBz53mB8tRcYCX3xk,4623 networkx/utils/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 networkx/utils/tests/__pycache__/__init__.cpython-312.pyc,, networkx/utils/tests/__pycache__/test__init.cpython-312.pyc,, +networkx/utils/tests/__pycache__/test_backends.cpython-312.pyc,, +networkx/utils/tests/__pycache__/test_config.cpython-312.pyc,, networkx/utils/tests/__pycache__/test_decorators.cpython-312.pyc,, networkx/utils/tests/__pycache__/test_heaps.cpython-312.pyc,, networkx/utils/tests/__pycache__/test_mapped_queue.cpython-312.pyc,, @@ -1127,10 +1137,12 @@ networkx/utils/tests/__pycache__/test_random_sequence.cpython-312.pyc,, networkx/utils/tests/__pycache__/test_rcm.cpython-312.pyc,, networkx/utils/tests/__pycache__/test_unionfind.cpython-312.pyc,, networkx/utils/tests/test__init.py,sha256=QE0i-lNE4pG2eYjB2mZ0uw7jPD-7TdL7Y9p73JoWQmo,363 -networkx/utils/tests/test_decorators.py,sha256=AfxQ_C4BcKG8q9wepyglzIebzD_pPpGRPR4dovl6JR4,13334 +networkx/utils/tests/test_backends.py,sha256=fs1176RB_1lecBFSE9hrsF2F6vlz40foIBUJvNAYf5M,2910 +networkx/utils/tests/test_config.py,sha256=Q3xZjdBQF4eM2nHg4lp3JXC873vch7U77pl0CCDFphA,5930 +networkx/utils/tests/test_decorators.py,sha256=dm3b5yiQPlnlT_4pSm0FwK-xBGV9dcnhv14Vh9Jiz1o,14050 networkx/utils/tests/test_heaps.py,sha256=qCuWMzpcMH1Gwu014CAams78o151QD5YL0mB1fz16Yw,3711 networkx/utils/tests/test_mapped_queue.py,sha256=l1Nguzz68Fv91FnAT7y7B0GXSoje9uoWiObHo7TliGM,7354 -networkx/utils/tests/test_misc.py,sha256=3oa6D5fnxm9VFODhEwM540hU4IBzEucOoD6DiGvP5gc,8218 +networkx/utils/tests/test_misc.py,sha256=zkD1pYO4xBuBxlGe-nU8okcX6hfDMgu0OJZGu4TMrN0,8671 networkx/utils/tests/test_random_sequence.py,sha256=Ou-IeCFybibZuycoin5gUQzzC-iy5yanZFmrqvdGt6Q,925 networkx/utils/tests/test_rcm.py,sha256=UvUAkgmQMGk_Nn94TJyQsle4A5SLQFqMQWld1tiQ2lk,1421 networkx/utils/tests/test_unionfind.py,sha256=j-DF5XyeJzq1hoeAgN5Nye2Au7EPD040t8oS4Aw2IwU,1579 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/WHEEL b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/WHEEL similarity index 65% rename from .CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/WHEEL rename to .CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/WHEEL index 7e688737d..bab98d675 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/WHEEL +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/WHEEL @@ -1,5 +1,5 @@ Wheel-Version: 1.0 -Generator: bdist_wheel (0.41.2) +Generator: bdist_wheel (0.43.0) Root-Is-Purelib: true Tag: py3-none-any diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/entry_points.txt b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/entry_points.txt similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/entry_points.txt rename to .CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/entry_points.txt diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/top_level.txt b/.CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/top_level.txt similarity index 100% rename from .CondaPkg/env/lib/python3.12/site-packages/networkx-3.2.1.dist-info/top_level.txt rename to .CondaPkg/env/lib/python3.12/site-packages/networkx-3.3.dist-info/top_level.txt diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__init__.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__init__.py index eda9418b9..54fdbd54b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__init__.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__init__.py @@ -8,7 +8,7 @@ See https://networkx.org for complete documentation. """ -__version__ = "3.2.1" +__version__ = "3.3" # These are imported in order as listed @@ -17,7 +17,7 @@ from networkx.exception import * from networkx import utils -from networkx.utils.backends import _dispatch +from networkx.utils import _clear_cache, _dispatchable, config from networkx import classes from networkx.classes import filters diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/__init__.cpython-312.pyc index 37cfdb68e..0a181ab2e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/conftest.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/conftest.cpython-312.pyc index 1457c8c28..1501e7e1b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/conftest.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/conftest.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert.cpython-312.pyc index 94f12d256..ef4c19c57 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert_matrix.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert_matrix.cpython-312.pyc index 8962b7d72..593c7766e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert_matrix.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/convert_matrix.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/exception.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/exception.cpython-312.pyc index 7c2ce1c6c..1bd69c3cf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/exception.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/exception.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/lazy_imports.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/lazy_imports.cpython-312.pyc index e87926d8f..66834cdac 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/lazy_imports.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/lazy_imports.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/relabel.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/relabel.cpython-312.pyc index f43a8d2b8..4b2c1155c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/relabel.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/__pycache__/relabel.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__init__.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__init__.py index db6d6cebb..56bfb14af 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__init__.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__init__.py @@ -1,6 +1,7 @@ from networkx.algorithms.assortativity import * from networkx.algorithms.asteroidal import * from networkx.algorithms.boundary import * +from networkx.algorithms.broadcasting import * from networkx.algorithms.bridges import * from networkx.algorithms.chains import * from networkx.algorithms.centrality import * @@ -37,6 +38,7 @@ from networkx.algorithms.operators import * from networkx.algorithms.planarity import * from networkx.algorithms.planar_drawing import * +from networkx.algorithms.polynomials import * from networkx.algorithms.reciprocity import * from networkx.algorithms.regular import * from networkx.algorithms.richclub import * @@ -57,7 +59,6 @@ from networkx.algorithms.voronoi import * from networkx.algorithms.walks import * from networkx.algorithms.wiener import * -from networkx.algorithms.polynomials import * # Make certain subpackages available to the user as direct imports from # the `networkx` namespace. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/__init__.cpython-312.pyc index 95e263a64..2ac24b2a0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/asteroidal.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/asteroidal.cpython-312.pyc index dcb1afa0e..58ebec786 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/asteroidal.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/asteroidal.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/boundary.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/boundary.cpython-312.pyc index 949a03c6b..c0299e5d9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/boundary.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/boundary.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/bridges.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/bridges.cpython-312.pyc index 7ccbf2c17..c5a1875fd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/bridges.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/bridges.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/broadcasting.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/broadcasting.cpython-312.pyc new file mode 100644 index 000000000..6fe1012ae Binary files /dev/null and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/broadcasting.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chains.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chains.cpython-312.pyc index 7501b1525..134bfe30f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chains.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chains.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chordal.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chordal.cpython-312.pyc index a38dd579b..7f346df86 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chordal.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/chordal.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/clique.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/clique.cpython-312.pyc index 730be6a9d..1095446a0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/clique.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/clique.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cluster.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cluster.cpython-312.pyc index 1ee6c031c..fc0de7bb8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cluster.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cluster.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/communicability_alg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/communicability_alg.cpython-312.pyc index d088830b9..ed51d5ec3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/communicability_alg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/communicability_alg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/core.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/core.cpython-312.pyc index c9b6055df..b3d1a672c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/core.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/core.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/covering.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/covering.cpython-312.pyc index c9dc09c5a..a197faa3f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/covering.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/covering.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cuts.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cuts.cpython-312.pyc index 66862e3f0..774d2b6a7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cuts.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cuts.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cycles.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cycles.cpython-312.pyc index 9130ef44f..7b5f18def 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cycles.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/cycles.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/d_separation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/d_separation.cpython-312.pyc index c9515a354..cc6efc290 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/d_separation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/d_separation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dag.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dag.cpython-312.pyc index 2d5ba2bf7..5ea14d043 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dag.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dag.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_measures.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_measures.cpython-312.pyc index 8ef22f1d6..9754d3d24 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_measures.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_measures.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_regular.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_regular.cpython-312.pyc index dfb66b34a..75c90f85e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_regular.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/distance_regular.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominance.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominance.cpython-312.pyc index d4b86deff..fa45f4980 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominance.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominance.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominating.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominating.cpython-312.pyc index 60b0f1784..4e535f71a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominating.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/dominating.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/efficiency_measures.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/efficiency_measures.cpython-312.pyc index be1466f72..d6d580a6a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/efficiency_measures.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/efficiency_measures.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/euler.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/euler.cpython-312.pyc index a79c99fec..0287388b7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/euler.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/euler.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graph_hashing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graph_hashing.cpython-312.pyc index 9b6f97a1d..f59111230 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graph_hashing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graph_hashing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graphical.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graphical.cpython-312.pyc index a0e4faac6..840f4655d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graphical.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/graphical.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hierarchy.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hierarchy.cpython-312.pyc index 4ab7d69df..a28619c73 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hierarchy.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hierarchy.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hybrid.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hybrid.cpython-312.pyc index 34ebee789..37dda0d10 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hybrid.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/hybrid.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/isolate.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/isolate.cpython-312.pyc index d2275f96b..94f8ae82f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/isolate.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/isolate.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/link_prediction.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/link_prediction.cpython-312.pyc index d05bde044..64c933d7e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/link_prediction.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/link_prediction.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/lowest_common_ancestors.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/lowest_common_ancestors.cpython-312.pyc index c059efbc8..7b478ecb6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/lowest_common_ancestors.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/lowest_common_ancestors.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/matching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/matching.cpython-312.pyc index 9b1119461..68545cf52 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/matching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/matching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/mis.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/mis.cpython-312.pyc index 78f00ca96..6d7a1a33f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/mis.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/mis.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/moral.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/moral.cpython-312.pyc index 6d31fe02d..044bbe653 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/moral.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/moral.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/node_classification.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/node_classification.cpython-312.pyc index 660c62f17..39a9ba413 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/node_classification.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/node_classification.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/non_randomness.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/non_randomness.cpython-312.pyc index 0e69c8be1..2c0eb21a7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/non_randomness.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/non_randomness.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planar_drawing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planar_drawing.cpython-312.pyc index 341db4aba..30804f115 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planar_drawing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planar_drawing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planarity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planarity.cpython-312.pyc index 5fe4a0ba9..4a181fb00 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planarity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/planarity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/polynomials.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/polynomials.cpython-312.pyc index 927d527e4..b06fde6c0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/polynomials.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/polynomials.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/reciprocity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/reciprocity.cpython-312.pyc index 06d3daed1..f3cead0f6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/reciprocity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/reciprocity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/regular.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/regular.cpython-312.pyc index e20c39b13..5efe51d5c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/regular.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/regular.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/richclub.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/richclub.cpython-312.pyc index 4977adaa8..8cc8da9d1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/richclub.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/richclub.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/similarity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/similarity.cpython-312.pyc index f8394f487..95081d875 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/similarity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/similarity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/simple_paths.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/simple_paths.cpython-312.pyc index 20554fb7d..8b2beb279 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/simple_paths.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/simple_paths.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smallworld.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smallworld.cpython-312.pyc index 2505e9353..6cafa251c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smallworld.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smallworld.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smetric.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smetric.cpython-312.pyc index a6a0fc773..e075dc5ad 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smetric.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/smetric.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/sparsifiers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/sparsifiers.cpython-312.pyc index 2dda01d0d..5b9efc11b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/sparsifiers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/sparsifiers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/structuralholes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/structuralholes.cpython-312.pyc index 82964a194..b1f02e858 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/structuralholes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/structuralholes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/summarization.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/summarization.cpython-312.pyc index aca12507d..ac5cf0083 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/summarization.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/summarization.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/swap.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/swap.cpython-312.pyc index a42a6154a..681d5fedf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/swap.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/swap.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/threshold.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/threshold.cpython-312.pyc index 68b1862c2..41cae6c2e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/threshold.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/threshold.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/time_dependent.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/time_dependent.cpython-312.pyc index 3ae2f2c5d..1278e2956 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/time_dependent.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/time_dependent.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/tournament.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/tournament.cpython-312.pyc index ba5f3a74b..99fff594b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/tournament.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/tournament.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/triads.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/triads.cpython-312.pyc index c5d0f0acd..1e805710a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/triads.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/triads.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/vitality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/vitality.cpython-312.pyc index 5162c39ca..491cd9a4e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/vitality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/vitality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/voronoi.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/voronoi.cpython-312.pyc index bb0e981ab..fb7117c50 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/voronoi.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/voronoi.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/walks.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/walks.cpython-312.pyc index 46f85b533..cb35d41c1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/walks.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/walks.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/wiener.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/wiener.cpython-312.pyc index b12a8d963..5f08ef650 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/wiener.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/__pycache__/wiener.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/__init__.cpython-312.pyc index 8f3eb1326..668006f28 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clique.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clique.cpython-312.pyc index fa7575d96..f6a748ab4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clique.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clique.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clustering_coefficient.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clustering_coefficient.cpython-312.pyc index b94a7bead..71d38bb87 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clustering_coefficient.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/clustering_coefficient.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/connectivity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/connectivity.cpython-312.pyc index 98648082f..8896e81db 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/connectivity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/connectivity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/distance_measures.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/distance_measures.cpython-312.pyc index a51a5dbab..4528af701 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/distance_measures.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/distance_measures.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/dominating_set.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/dominating_set.cpython-312.pyc index 1c046e003..87f5dab3a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/dominating_set.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/dominating_set.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/kcomponents.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/kcomponents.cpython-312.pyc index 184614872..2a099a808 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/kcomponents.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/kcomponents.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/matching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/matching.cpython-312.pyc index 3376eaf13..91b950261 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/matching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/matching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/maxcut.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/maxcut.cpython-312.pyc index 1c89d37d1..9103bdaea 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/maxcut.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/maxcut.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/ramsey.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/ramsey.cpython-312.pyc index 6e31d33ef..ef0954b27 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/ramsey.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/ramsey.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/steinertree.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/steinertree.cpython-312.pyc index ed8f4eaf4..d27d91c4b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/steinertree.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/steinertree.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/traveling_salesman.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/traveling_salesman.cpython-312.pyc index 901cf1747..af6e1be48 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/traveling_salesman.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/traveling_salesman.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/treewidth.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/treewidth.cpython-312.pyc index fc608b9b4..cf4ca08ba 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/treewidth.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/treewidth.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/vertex_cover.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/vertex_cover.cpython-312.pyc index d6a93ff25..fd65c2621 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/vertex_cover.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/__pycache__/vertex_cover.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clique.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clique.py index 4a3d8beba..564430686 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clique.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clique.py @@ -13,7 +13,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def maximum_independent_set(G): """Returns an approximate maximum independent set. @@ -70,7 +70,7 @@ def maximum_independent_set(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def max_clique(G): r"""Find the Maximum Clique @@ -129,7 +129,7 @@ def max_clique(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def clique_removal(G): r"""Repeatedly remove cliques from the graph. @@ -182,7 +182,7 @@ def clique_removal(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def large_clique_size(G): """Find the size of a large clique in a graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clustering_coefficient.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clustering_coefficient.py index e15ac6846..545fc6553 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clustering_coefficient.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/clustering_coefficient.py @@ -6,7 +6,7 @@ @not_implemented_for("directed") @py_random_state(2) -@nx._dispatch(name="approximate_average_clustering") +@nx._dispatchable(name="approximate_average_clustering") def average_clustering(G, trials=1000, seed=None): r"""Estimates the average clustering coefficient of G. @@ -45,6 +45,11 @@ def average_clustering(G, trials=1000, seed=None): >>> approximation.average_clustering(G, trials=1000, seed=10) 0.214 + Raises + ------ + NetworkXNotImplemented + If G is directed. + References ---------- .. [1] Schank, Thomas, and Dorothea Wagner. Approximating clustering diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/connectivity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/connectivity.py index bc5e71259..a2214ed12 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/connectivity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/connectivity.py @@ -12,7 +12,7 @@ ] -@nx._dispatch(name="approximate_local_node_connectivity") +@nx._dispatchable(name="approximate_local_node_connectivity") def local_node_connectivity(G, source, target, cutoff=None): """Compute node connectivity between source and target. @@ -108,7 +108,7 @@ def local_node_connectivity(G, source, target, cutoff=None): return K -@nx._dispatch(name="approximate_node_connectivity") +@nx._dispatchable(name="approximate_node_connectivity") def node_connectivity(G, s=None, t=None): r"""Returns an approximation for node connectivity for a graph or digraph G. @@ -214,7 +214,7 @@ def neighbors(v): return K -@nx._dispatch(name="approximate_all_pairs_node_connectivity") +@nx._dispatchable(name="approximate_all_pairs_node_connectivity") def all_pairs_node_connectivity(G, nbunch=None, cutoff=None): """Compute node connectivity between all pairs of nodes. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/distance_measures.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/distance_measures.py index 9b817b331..d5847e65a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/distance_measures.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/distance_measures.py @@ -7,7 +7,7 @@ @py_random_state(1) -@nx._dispatch(name="approximate_diameter") +@nx._dispatchable(name="approximate_diameter") def diameter(G, seed=None): """Returns a lower bound on the diameter of the graph G. @@ -40,6 +40,15 @@ def diameter(G, seed=None): d : integer Lower Bound on the Diameter of G + Examples + -------- + >>> G = nx.path_graph(10) # undirected graph + >>> nx.diameter(G) + 9 + >>> G = nx.cycle_graph(3, create_using=nx.DiGraph) # directed graph + >>> nx.diameter(G) + 2 + Raises ------ NetworkXError diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/dominating_set.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/dominating_set.py index 97edb172f..06ab97d97 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/dominating_set.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/dominating_set.py @@ -20,7 +20,7 @@ # TODO Why doesn't this algorithm work for directed graphs? @not_implemented_for("directed") -@nx._dispatch(node_attrs="weight") +@nx._dispatchable(node_attrs="weight") def min_weighted_dominating_set(G, weight=None): r"""Returns a dominating set that approximates the minimum weight node dominating set. @@ -43,6 +43,17 @@ def min_weighted_dominating_set(G, weight=None): each node in the graph and `w(V^*)` denotes the sum of the weights of each node in the minimum weight dominating set. + Examples + -------- + >>> G = nx.Graph([(0, 1), (0, 4), (1, 4), (1, 2), (2, 3), (3, 4), (2, 5)]) + >>> nx.approximation.min_weighted_dominating_set(G) + {1, 2, 4} + + Raises + ------ + NetworkXNotImplemented + If G is directed. + Notes ----- This algorithm computes an approximate minimum weighted dominating @@ -101,7 +112,7 @@ def _cost(node_and_neighborhood): return dom_set -@nx._dispatch +@nx._dispatchable def min_edge_dominating_set(G): r"""Returns minimum cardinality edge dominating set. @@ -115,6 +126,17 @@ def min_edge_dominating_set(G): min_edge_dominating_set : set Returns a set of dominating edges whose size is no more than 2 * OPT. + Examples + -------- + >>> G = nx.petersen_graph() + >>> nx.approximation.min_edge_dominating_set(G) + {(0, 1), (4, 9), (6, 8), (5, 7), (2, 3)} + + Raises + ------ + ValueError + If the input graph `G` is empty. + Notes ----- The algorithm computes an approximate solution to the edge dominating set diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/kcomponents.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/kcomponents.py index a5df6cc68..b540bd5f4 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/kcomponents.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/kcomponents.py @@ -14,7 +14,7 @@ @not_implemented_for("directed") -@nx._dispatch(name="approximate_k_components") +@nx._dispatchable(name="approximate_k_components") def k_components(G, min_density=0.95): r"""Returns the approximate k-component structure of a graph G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/matching.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/matching.py index 8f1c35016..3a7c8a39b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/matching.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/matching.py @@ -13,7 +13,7 @@ __all__ = ["min_maximal_matching"] -@nx._dispatch +@nx._dispatchable def min_maximal_matching(G): r"""Returns the minimum maximal matching of G. That is, out of all maximal matchings of the graph G, the smallest is returned. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/maxcut.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/maxcut.py index ec62b346b..f4e1da87c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/maxcut.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/maxcut.py @@ -4,9 +4,10 @@ __all__ = ["randomized_partitioning", "one_exchange"] -@not_implemented_for("directed", "multigraph") +@not_implemented_for("directed") +@not_implemented_for("multigraph") @py_random_state(1) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def randomized_partitioning(G, seed=None, p=0.5, weight=None): """Compute a random partitioning of the graph nodes and its cut value. @@ -38,6 +39,20 @@ def randomized_partitioning(G, seed=None, p=0.5, weight=None): partition : pair of node sets A partitioning of the nodes that defines a minimum cut. + + Examples + -------- + >>> G = nx.complete_graph(5) + >>> cut_size, partition = nx.approximation.randomized_partitioning(G, seed=1) + >>> cut_size + 6 + >>> partition + ({0, 3, 4}, {1, 2}) + + Raises + ------ + NetworkXNotImplemented + If the graph is directed or is a multigraph. """ cut = {node for node in G.nodes() if seed.random() < p} cut_size = nx.algorithms.cut_size(G, cut, weight=weight) @@ -49,9 +64,10 @@ def _swap_node_partition(cut, node): return cut - {node} if node in cut else cut.union({node}) -@not_implemented_for("directed", "multigraph") +@not_implemented_for("directed") +@not_implemented_for("multigraph") @py_random_state(2) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def one_exchange(G, initial_cut=None, seed=None, weight=None): """Compute a partitioning of the graphs nodes and the corresponding cut value. @@ -84,6 +100,20 @@ def one_exchange(G, initial_cut=None, seed=None, weight=None): partition : pair of node sets A partitioning of the nodes that defines a maximum cut. + + Examples + -------- + >>> G = nx.complete_graph(5) + >>> curr_cut_size, partition = nx.approximation.one_exchange(G, seed=1) + >>> curr_cut_size + 6 + >>> partition + ({0, 2}, {1, 3, 4}) + + Raises + ------ + NetworkXNotImplemented + If the graph is directed or is a multigraph. """ if initial_cut is None: initial_cut = set() diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/ramsey.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/ramsey.py index 6f45c4f49..5cb9fda04 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/ramsey.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/ramsey.py @@ -11,7 +11,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def ramsey_R2(G): r"""Compute the largest clique and largest independent set in `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/steinertree.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/steinertree.py index 50aea045f..c6c834f42 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/steinertree.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/steinertree.py @@ -7,7 +7,7 @@ @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight", returns_graph=True) def metric_closure(G, weight="weight"): """Return the metric closure of a graph. @@ -64,7 +64,7 @@ def _mehlhorn_steiner_tree(G, terminal_nodes, weight): if not G_1_prime.has_edge(su, sv): G_1_prime.add_edge(su, sv, weight=weight_here) else: - new_weight = min(weight_here, G_1_prime[su][sv][weight]) + new_weight = min(weight_here, G_1_prime[su][sv]["weight"]) G_1_prime.add_edge(su, sv, weight=new_weight) G_2 = nx.minimum_spanning_edges(G_1_prime, data=True) @@ -126,7 +126,7 @@ def _remove_nonterminal_leaves(G, terminals): @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def steiner_tree(G, terminal_nodes, weight="weight", method=None): r"""Return an approximation to the minimum Steiner tree of a graph. @@ -164,7 +164,7 @@ def steiner_tree(G, terminal_nodes, weight="weight", method=None): Use the edge attribute specified by this string as the edge weight. Any edge attribute not present defaults to 1. - method : string, optional (default = 'kou') + method : string, optional (default = 'mehlhorn') The algorithm to use to approximate the Steiner tree. Supported options: 'kou', 'mehlhorn'. Other inputs produce a ValueError. @@ -175,6 +175,14 @@ def steiner_tree(G, terminal_nodes, weight="weight", method=None): Approximation to the minimum steiner tree of `G` induced by `terminal_nodes` . + Raises + ------ + NetworkXNotImplemented + If `G` is directed. + + ValueError + If the specified `method` is not supported. + Notes ----- For multigraphs, the edge between two nodes with minimum weight is the @@ -195,20 +203,12 @@ def steiner_tree(G, terminal_nodes, weight="weight", method=None): https://doi.org/10.1016/0020-0190(88)90066-X. """ if method is None: - import warnings - - msg = ( - "steiner_tree will change default method from 'kou' to 'mehlhorn' " - "in version 3.2.\nSet the `method` kwarg to remove this warning." - ) - warnings.warn(msg, FutureWarning, stacklevel=4) - method = "kou" + method = "mehlhorn" try: algo = ALGORITHMS[method] except KeyError as e: - msg = f"{method} is not a valid choice for an algorithm." - raise ValueError(msg) from e + raise ValueError(f"{method} is not a valid choice for an algorithm.") from e edges = algo(G, terminal_nodes, weight) # For multigraph we should add the minimal weight edge keys diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/__init__.cpython-312.pyc index e9e12012c..5d7331f87 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_approx_clust_coeff.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_approx_clust_coeff.cpython-312.pyc index f8aa5c18b..1cd6a8ef7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_approx_clust_coeff.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_approx_clust_coeff.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_clique.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_clique.cpython-312.pyc index e83a4ce90..ddd8babd9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_clique.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_clique.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_connectivity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_connectivity.cpython-312.pyc index d27cbc52e..64e1a0df7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_connectivity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_connectivity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_distance_measures.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_distance_measures.cpython-312.pyc index 8645c7a33..09ee8fc8e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_distance_measures.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_distance_measures.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_dominating_set.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_dominating_set.cpython-312.pyc index a74883969..309f5eaa1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_dominating_set.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_dominating_set.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_kcomponents.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_kcomponents.cpython-312.pyc index 251dfe032..6dee15653 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_kcomponents.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_kcomponents.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_matching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_matching.cpython-312.pyc index 30bf34461..a39c0d6e7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_matching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_matching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_maxcut.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_maxcut.cpython-312.pyc index c138751f8..0b5a9dfce 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_maxcut.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_maxcut.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_ramsey.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_ramsey.cpython-312.pyc index 8f533d02a..10b908a0e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_ramsey.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_ramsey.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_steinertree.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_steinertree.cpython-312.pyc index 188c91051..604654f8b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_steinertree.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_steinertree.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_traveling_salesman.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_traveling_salesman.cpython-312.pyc index 48042df62..667d52a74 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_traveling_salesman.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_traveling_salesman.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_treewidth.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_treewidth.cpython-312.pyc index 881ebb4d7..95a9cfea2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_treewidth.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_treewidth.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_vertex_cover.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_vertex_cover.cpython-312.pyc index a6ecfe714..03da2d0f0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_vertex_cover.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/__pycache__/test_vertex_cover.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_maxcut.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_maxcut.py index 39291fbf1..ef0424401 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_maxcut.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_maxcut.py @@ -1,9 +1,21 @@ import random +import pytest + import networkx as nx from networkx.algorithms.approximation import maxcut +@pytest.mark.parametrize( + "f", (nx.approximation.randomized_partitioning, nx.approximation.one_exchange) +) +@pytest.mark.parametrize("graph_constructor", (nx.DiGraph, nx.MultiGraph)) +def test_raises_on_directed_and_multigraphs(f, graph_constructor): + G = graph_constructor([(0, 1), (1, 2)]) + with pytest.raises(nx.NetworkXNotImplemented): + f(G) + + def _is_valid_cut(G, set1, set2): union = set1.union(set2) assert union == set(G.nodes) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_steinertree.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_steinertree.py index d7af1a1af..23c3193e4 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_steinertree.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_steinertree.py @@ -189,3 +189,38 @@ def test_multigraph_steiner_tree(self): for method in self.methods: S = steiner_tree(G, terminal_nodes, method=method) assert edges_equal(S.edges(data=True, keys=True), expected_edges) + + +@pytest.mark.parametrize("method", ("kou", "mehlhorn")) +def test_steiner_tree_weight_attribute(method): + G = nx.star_graph(4) + # Add an edge attribute that is named something other than "weight" + nx.set_edge_attributes(G, {e: 10 for e in G.edges}, name="distance") + H = nx.approximation.steiner_tree(G, [1, 3], method=method, weight="distance") + assert nx.utils.edges_equal(H.edges, [(0, 1), (0, 3)]) + + +@pytest.mark.parametrize("method", ("kou", "mehlhorn")) +def test_steiner_tree_multigraph_weight_attribute(method): + G = nx.cycle_graph(3, create_using=nx.MultiGraph) + nx.set_edge_attributes(G, {e: 10 for e in G.edges}, name="distance") + G.add_edge(2, 0, distance=5) + H = nx.approximation.steiner_tree(G, list(G), method=method, weight="distance") + assert len(H.edges) == 2 and H.has_edge(2, 0, key=1) + assert sum(dist for *_, dist in H.edges(data="distance")) == 15 + + +@pytest.mark.parametrize("method", (None, "mehlhorn", "kou")) +def test_steiner_tree_methods(method): + G = nx.star_graph(4) + expected = nx.Graph([(0, 1), (0, 3)]) + st = nx.approximation.steiner_tree(G, [1, 3], method=method) + assert nx.utils.edges_equal(st.edges, expected.edges) + + +def test_steiner_tree_method_invalid(): + G = nx.star_graph(4) + with pytest.raises( + ValueError, match="invalid_method is not a valid choice for an algorithm." + ): + nx.approximation.steiner_tree(G, terminal_nodes=[1, 3], method="invalid_method") diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_traveling_salesman.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_traveling_salesman.py index ccb553e1c..445fe913a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_traveling_salesman.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/tests/test_traveling_salesman.py @@ -1,4 +1,5 @@ """Unit tests for the traveling_salesman module.""" + import random import pytest @@ -300,10 +301,16 @@ def test_TSP_method(): G = nx.cycle_graph(9) G[4][5]["weight"] = 10 - def my_tsp_method(G, weight): - return nx_app.simulated_annealing_tsp(G, "greedy", weight, source=4, seed=1) + # Test using the old currying method + sa_tsp = lambda G, weight: nx_app.simulated_annealing_tsp( + G, "greedy", weight, source=4, seed=1 + ) - path = nx_app.traveling_salesman_problem(G, method=my_tsp_method, cycle=False) + path = nx_app.traveling_salesman_problem( + G, + method=sa_tsp, + cycle=False, + ) print(path) assert path == [4, 3, 2, 1, 0, 8, 7, 6, 5] @@ -352,19 +359,27 @@ def test_TSP_weighted(): # Check all methods methods = [ - nx_app.christofides, - nx_app.greedy_tsp, - lambda G, wt: nx_app.simulated_annealing_tsp(G, "greedy", weight=wt), - lambda G, wt: nx_app.threshold_accepting_tsp(G, "greedy", weight=wt), + (nx_app.christofides, {}), + (nx_app.greedy_tsp, {}), + ( + nx_app.simulated_annealing_tsp, + {"init_cycle": "greedy"}, + ), + ( + nx_app.threshold_accepting_tsp, + {"init_cycle": "greedy"}, + ), ] - for method in methods: - cycle = tsp(G, nodes=[3, 6], weight="weight", method=method) + for method, kwargs in methods: + cycle = tsp(G, nodes=[3, 6], weight="weight", method=method, **kwargs) assert cycle in expected_cycles - path = tsp(G, nodes=[3, 6], weight="weight", method=method, cycle=False) + path = tsp( + G, nodes=[3, 6], weight="weight", method=method, cycle=False, **kwargs + ) assert path in expected_paths - tourpath = tsp(G, weight="weight", method=method, cycle=False) + tourpath = tsp(G, weight="weight", method=method, cycle=False, **kwargs) assert tourpath in expected_tourpaths @@ -738,10 +753,9 @@ def test_asadpour_tsp(): G = nx.DiGraph() G.add_weighted_edges_from(edge_list) - def fixed_asadpour(G, weight): - return nx_app.asadpour_atsp(G, weight, 19) - - tour = nx_app.traveling_salesman_problem(G, weight="weight", method=fixed_asadpour) + tour = nx_app.traveling_salesman_problem( + G, weight="weight", method=nx_app.asadpour_atsp, seed=19 + ) # Check that the returned list is a valid tour. Because this is an # incomplete graph, the conditions are not as strict. We need the tour to @@ -756,9 +770,15 @@ def fixed_asadpour(G, weight): # the shortest path between those vertices, allowing vertices to appear more # than once. # - # However, we are using a fixed random number generator so we know what the - # expected tour is. - expected_tours = [[1, 4, 5, 0, 2, 3, 2, 1], [3, 2, 0, 1, 4, 5, 3]] + # Even though we are using a fixed seed, multiple tours have been known to + # be returned. The first two are from the original delevopment of this test, + # and the third one from issue #5913 on GitHub. If other tours are returned, + # add it on the list of expected tours. + expected_tours = [ + [1, 4, 5, 0, 2, 3, 2, 1], + [3, 2, 0, 1, 4, 5, 3], + [3, 2, 1, 0, 5, 4, 3], + ] assert tour in expected_tours @@ -805,10 +825,9 @@ def test_asadpour_real_world(): G = nx.from_numpy_array(G_array, create_using=nx.DiGraph) nx.relabel_nodes(G, node_map, copy=False) - def fixed_asadpour(G, weight): - return nx_app.asadpour_atsp(G, weight, 37, source="JFK") - - tour = nx_app.traveling_salesman_problem(G, weight="weight", method=fixed_asadpour) + tour = nx_app.traveling_salesman_problem( + G, weight="weight", method=nx_app.asadpour_atsp, seed=37, source="JFK" + ) assert tour in expected_tours @@ -853,11 +872,8 @@ def test_asadpour_real_world_path(): G = nx.from_numpy_array(G_array, create_using=nx.DiGraph) nx.relabel_nodes(G, node_map, copy=False) - def fixed_asadpour(G, weight): - return nx_app.asadpour_atsp(G, weight, 56) - path = nx_app.traveling_salesman_problem( - G, weight="weight", cycle=False, method=fixed_asadpour + G, weight="weight", cycle=False, method=nx_app.asadpour_atsp, seed=56 ) assert path in expected_paths diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/traveling_salesman.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/traveling_salesman.py index cbc320486..2a31b7281 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/traveling_salesman.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/traveling_salesman.py @@ -124,7 +124,7 @@ def move_one_node(soln, seed): @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def christofides(G, weight="weight", tree=None): """Approximate a solution of the traveling salesman problem @@ -197,8 +197,10 @@ def _shortcutting(circuit): return nodes -@nx._dispatch(edge_attrs="weight") -def traveling_salesman_problem(G, weight="weight", nodes=None, cycle=True, method=None): +@nx._dispatchable(edge_attrs="weight") +def traveling_salesman_problem( + G, weight="weight", nodes=None, cycle=True, method=None, **kwargs +): """Find the shortest path in `G` connecting specified nodes This function allows approximate solution to the traveling salesman @@ -224,6 +226,10 @@ def traveling_salesman_problem(G, weight="weight", nodes=None, cycle=True, metho the biggest weight edge is removed to make a Hamiltonian path. Then each edge on the new complete graph used for that analysis is replaced by the shortest_path between those nodes on the original graph. + If the input graph `G` includes edges with weights that do not adhere to + the triangle inequality, such as when `G` is not a complete graph (i.e + length of non-existent edges is infinity), then the returned path may + contain some repeating nodes (other than the starting node). Parameters ---------- @@ -253,11 +259,10 @@ def traveling_salesman_problem(G, weight="weight", nodes=None, cycle=True, metho :func:`simulated_annealing_tsp` and :func:`threshold_accepting_tsp`. If `method is None`: use :func:`christofides` for undirected `G` and - :func:`threshold_accepting_tsp` for directed `G`. + :func:`asadpour_atsp` for directed `G`. - To specify parameters for these provided functions, construct lambda - functions that state the specific value. `method` must have 2 inputs. - (See examples). + **kwargs : dict + Other keyword arguments to be passed to the `method` function passed in. Returns ------- @@ -265,7 +270,6 @@ def traveling_salesman_problem(G, weight="weight", nodes=None, cycle=True, metho List of nodes in `G` along a path with an approximation of the minimal path through `nodes`. - Raises ------ NetworkXError @@ -283,14 +287,26 @@ def traveling_salesman_problem(G, weight="weight", nodes=None, cycle=True, metho >>> path in ([4, 3, 2, 1, 0, 8, 7, 6, 5], [5, 6, 7, 8, 0, 1, 2, 3, 4]) True - Build (curry) your own function to provide parameter values to the methods. + While no longer required, you can still build (curry) your own function + to provide parameter values to the methods. >>> SA_tsp = nx.approximation.simulated_annealing_tsp - >>> method = lambda G, wt: SA_tsp(G, "greedy", weight=wt, temp=500) + >>> method = lambda G, weight: SA_tsp(G, "greedy", weight=weight, temp=500) >>> path = tsp(G, cycle=False, method=method) >>> path in ([4, 3, 2, 1, 0, 8, 7, 6, 5], [5, 6, 7, 8, 0, 1, 2, 3, 4]) True + Otherwise, pass other keyword arguments directly into the tsp function. + + >>> path = tsp( + ... G, + ... cycle=False, + ... method=nx.approximation.simulated_annealing_tsp, + ... init_cycle="greedy", + ... temp=500, + ... ) + >>> path in ([4, 3, 2, 1, 0, 8, 7, 6, 5], [5, 6, 7, 8, 0, 1, 2, 3, 4]) + True """ if method is None: if G.is_directed(): @@ -318,7 +334,8 @@ def traveling_salesman_problem(G, weight="weight", nodes=None, cycle=True, metho if u == v: continue GG.add_edge(u, v, weight=dist[u][v]) - best_GG = method(GG, weight) + + best_GG = method(GG, weight=weight, **kwargs) if not cycle: # find and remove the biggest edge @@ -337,7 +354,7 @@ def traveling_salesman_problem(G, weight="weight", nodes=None, cycle=True, metho @not_implemented_for("undirected") @py_random_state(2) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight", mutates_input=True) def asadpour_atsp(G, weight="weight", seed=None, source=None): """ Returns an approximate solution to the traveling salesman problem. @@ -404,8 +421,10 @@ def asadpour_atsp(G, weight="weight", seed=None, source=None): >>> import networkx as nx >>> import networkx.algorithms.approximation as approx >>> G = nx.complete_graph(3, create_using=nx.DiGraph) - >>> nx.set_edge_attributes(G, {(0, 1): 2, (1, 2): 2, (2, 0): 2, (0, 2): 1, (2, 1): 1, (1, 0): 1}, "weight") - >>> tour = approx.asadpour_atsp(G,source=0) + >>> nx.set_edge_attributes( + ... G, {(0, 1): 2, (1, 2): 2, (2, 0): 2, (0, 2): 1, (2, 1): 1, (1, 0): 1}, "weight" + ... ) + >>> tour = approx.asadpour_atsp(G, source=0) >>> tour [0, 2, 1, 0] """ @@ -487,7 +506,7 @@ def asadpour_atsp(G, weight="weight", seed=None, source=None): return _shortcutting(circuit) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight", mutates_input=True, returns_graph=True) def held_karp_ascent(G, weight="weight"): """ Minimizes the Held-Karp relaxation of the TSP for `G` @@ -678,7 +697,9 @@ def direction_of_ascent(): a_eq[n_count][arb_count] = deg - 2 n_count -= 1 a_eq[len(G)][arb_count] = 1 - program_result = optimize.linprog(c, A_eq=a_eq, b_eq=b_eq) + program_result = optimize.linprog( + c, A_eq=a_eq, b_eq=b_eq, method="highs-ipm" + ) # If the constants exist, then the direction of ascent doesn't if program_result.success: # There is no direction of ascent @@ -760,6 +781,7 @@ def find_epsilon(k, d): for u, v, d in G.edges(data=True): d[weight] = original_edge_weights[(u, v)] + pi_dict[u] dir_ascent, k_d = direction_of_ascent() + nx._clear_cache(G) # k_d is no longer an individual 1-arborescence but rather a set of # minimal 1-arborescences at the maximum point of the polytope and should # be reflected as such @@ -770,6 +792,7 @@ def find_epsilon(k, d): for k in k_max: if len([n for n in k if k.degree(n) == 2]) == G.order(): # Tour found + # TODO: this branch does not restore original_edge_weights of G! return k.size(weight), k # Write the original edge weights back to G and every member of k_max at @@ -798,7 +821,7 @@ def find_epsilon(k, d): return next(k_max.__iter__()).size(weight), z_star -@nx._dispatch +@nx._dispatchable def spanning_tree_distribution(G, z): """ Find the asadpour exponential distribution of spanning trees. @@ -909,7 +932,7 @@ def q(e): return gamma -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def greedy_tsp(G, weight="weight", source=None): """Return a low cost cycle starting at `source` and its cost. @@ -948,11 +971,22 @@ def greedy_tsp(G, weight="weight", source=None): -------- >>> from networkx.algorithms import approximation as approx >>> G = nx.DiGraph() - >>> G.add_weighted_edges_from({ - ... ("A", "B", 3), ("A", "C", 17), ("A", "D", 14), ("B", "A", 3), - ... ("B", "C", 12), ("B", "D", 16), ("C", "A", 13),("C", "B", 12), - ... ("C", "D", 4), ("D", "A", 14), ("D", "B", 15), ("D", "C", 2) - ... }) + >>> G.add_weighted_edges_from( + ... { + ... ("A", "B", 3), + ... ("A", "C", 17), + ... ("A", "D", 14), + ... ("B", "A", 3), + ... ("B", "C", 12), + ... ("B", "D", 16), + ... ("C", "A", 13), + ... ("C", "B", 12), + ... ("C", "D", 4), + ... ("D", "A", 14), + ... ("D", "B", 15), + ... ("D", "C", 2), + ... } + ... ) >>> cycle = approx.greedy_tsp(G, source="D") >>> cost = sum(G[n][nbr]["weight"] for n, nbr in nx.utils.pairwise(cycle)) >>> cycle @@ -1002,7 +1036,7 @@ def greedy_tsp(G, weight="weight", source=None): @py_random_state(9) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def simulated_annealing_tsp( G, init_cycle, @@ -1111,11 +1145,22 @@ def simulated_annealing_tsp( -------- >>> from networkx.algorithms import approximation as approx >>> G = nx.DiGraph() - >>> G.add_weighted_edges_from({ - ... ("A", "B", 3), ("A", "C", 17), ("A", "D", 14), ("B", "A", 3), - ... ("B", "C", 12), ("B", "D", 16), ("C", "A", 13),("C", "B", 12), - ... ("C", "D", 4), ("D", "A", 14), ("D", "B", 15), ("D", "C", 2) - ... }) + >>> G.add_weighted_edges_from( + ... { + ... ("A", "B", 3), + ... ("A", "C", 17), + ... ("A", "D", 14), + ... ("B", "A", 3), + ... ("B", "C", 12), + ... ("B", "D", 16), + ... ("C", "A", 13), + ... ("C", "B", 12), + ... ("C", "D", 4), + ... ("D", "A", 14), + ... ("D", "B", 15), + ... ("D", "C", 2), + ... } + ... ) >>> cycle = approx.simulated_annealing_tsp(G, "greedy", source="D") >>> cost = sum(G[n][nbr]["weight"] for n, nbr in nx.utils.pairwise(cycle)) >>> cycle @@ -1221,7 +1266,7 @@ def simulated_annealing_tsp( @py_random_state(9) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def threshold_accepting_tsp( G, init_cycle, @@ -1328,11 +1373,22 @@ def threshold_accepting_tsp( -------- >>> from networkx.algorithms import approximation as approx >>> G = nx.DiGraph() - >>> G.add_weighted_edges_from({ - ... ("A", "B", 3), ("A", "C", 17), ("A", "D", 14), ("B", "A", 3), - ... ("B", "C", 12), ("B", "D", 16), ("C", "A", 13),("C", "B", 12), - ... ("C", "D", 4), ("D", "A", 14), ("D", "B", 15), ("D", "C", 2) - ... }) + >>> G.add_weighted_edges_from( + ... { + ... ("A", "B", 3), + ... ("A", "C", 17), + ... ("A", "D", 14), + ... ("B", "A", 3), + ... ("B", "C", 12), + ... ("B", "D", 16), + ... ("C", "A", 13), + ... ("C", "B", 12), + ... ("C", "D", 4), + ... ("D", "A", 14), + ... ("D", "B", 15), + ... ("D", "C", 2), + ... } + ... ) >>> cycle = approx.threshold_accepting_tsp(G, "greedy", source="D") >>> cost = sum(G[n][nbr]["weight"] for n, nbr in nx.utils.pairwise(cycle)) >>> cycle diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/treewidth.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/treewidth.py index ce673b6ed..31d73f636 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/treewidth.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/treewidth.py @@ -41,7 +41,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def treewidth_min_degree(G): """Returns a treewidth decomposition using the Minimum Degree heuristic. @@ -65,12 +65,12 @@ def treewidth_min_degree(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def treewidth_min_fill_in(G): """Returns a treewidth decomposition using the Minimum Fill-in heuristic. The heuristic chooses a node from the graph, where the number of edges - added turning the neighbourhood of the chosen node into clique is as + added turning the neighborhood of the chosen node into clique is as small as possible. Parameters @@ -89,7 +89,7 @@ class MinDegreeHeuristic: """Implements the Minimum Degree heuristic. The heuristic chooses the nodes according to their degree - (number of neighbours), i.e., first the node with the lowest degree is + (number of neighbors), i.e., first the node with the lowest degree is chosen, then the graph is updated and the corresponding node is removed. Next, a new node with the lowest degree is chosen, and so on. """ @@ -136,7 +136,7 @@ def min_fill_in_heuristic(graph): """Implements the Minimum Degree heuristic. Returns the node from the graph, where the number of edges added when - turning the neighbourhood of the chosen node into clique is as small as + turning the neighborhood of the chosen node into clique is as small as possible. This algorithm chooses the nodes using the Minimum Fill-In heuristic. The running time of the algorithm is :math:`O(V^3)` and it uses additional constant memory.""" @@ -177,7 +177,7 @@ def min_fill_in_heuristic(graph): return min_fill_in_node -@nx._dispatch +@nx._dispatchable(returns_graph=True) def treewidth_decomp(G, heuristic=min_fill_in_heuristic): """Returns a treewidth decomposition using the passed heuristic. @@ -201,7 +201,7 @@ def treewidth_decomp(G, heuristic=min_fill_in_heuristic): # get first node from heuristic elim_node = heuristic(graph) while elim_node is not None: - # connect all neighbours with each other + # connect all neighbors with each other nbrs = graph[elim_node] for u, v in itertools.permutations(nbrs, 2): if v not in graph[u]: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/vertex_cover.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/vertex_cover.py index dbd7a123d..c71399ebc 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/vertex_cover.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/approximation/vertex_cover.py @@ -12,7 +12,7 @@ __all__ = ["min_weighted_vertex_cover"] -@nx._dispatch(node_attrs="weight") +@nx._dispatchable(node_attrs="weight") def min_weighted_vertex_cover(G, weight=None): r"""Returns an approximate minimum weighted vertex cover. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/__init__.cpython-312.pyc index 1f588533f..506cdffb3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/connectivity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/connectivity.cpython-312.pyc index 919b401d5..57198c19b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/connectivity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/connectivity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/correlation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/correlation.cpython-312.pyc index cd8a5e38d..f67281b87 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/correlation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/correlation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/mixing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/mixing.cpython-312.pyc index 49ca11ae4..7d17e492e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/mixing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/mixing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/neighbor_degree.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/neighbor_degree.cpython-312.pyc index c7026a27e..5b77ee22a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/neighbor_degree.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/neighbor_degree.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/pairs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/pairs.cpython-312.pyc index d00e53f90..0ae3c4c18 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/pairs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/__pycache__/pairs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/connectivity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/connectivity.py index bd433ded5..c3fde0da6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/connectivity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/connectivity.py @@ -5,7 +5,7 @@ __all__ = ["average_degree_connectivity"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def average_degree_connectivity( G, source="in+out", target="in+out", nodes=None, weight=None ): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/correlation.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/correlation.py index 35ea78d6d..170d219a5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/correlation.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/correlation.py @@ -15,7 +15,7 @@ ] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def degree_assortativity_coefficient(G, x="out", y="in", weight=None, nodes=None): """Compute degree assortativity of graph. @@ -94,13 +94,13 @@ def degree_assortativity_coefficient(G, x="out", y="in", weight=None, nodes=None else: degrees = {d for _, d in G.degree(nodes, weight=weight)} - mapping = {d: i for i, d, in enumerate(degrees)} + mapping = {d: i for i, d in enumerate(degrees)} M = degree_mixing_matrix(G, x=x, y=y, nodes=nodes, weight=weight, mapping=mapping) return _numeric_ac(M, mapping=mapping) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def degree_pearson_correlation_coefficient(G, x="out", y="in", weight=None, nodes=None): """Compute degree assortativity of graph. @@ -156,10 +156,10 @@ def degree_pearson_correlation_coefficient(G, x="out", y="in", weight=None, node xy = node_degree_xy(G, x=x, y=y, nodes=nodes, weight=weight) x, y = zip(*xy) - return sp.stats.pearsonr(x, y)[0] + return float(sp.stats.pearsonr(x, y)[0]) -@nx._dispatch(node_attrs="attribute") +@nx._dispatchable(node_attrs="attribute") def attribute_assortativity_coefficient(G, attribute, nodes=None): """Compute assortativity for node attributes. @@ -206,7 +206,7 @@ def attribute_assortativity_coefficient(G, attribute, nodes=None): return attribute_ac(M) -@nx._dispatch(node_attrs="attribute") +@nx._dispatchable(node_attrs="attribute") def numeric_assortativity_coefficient(G, attribute, nodes=None): """Compute assortativity for numerical node attributes. @@ -251,7 +251,7 @@ def numeric_assortativity_coefficient(G, attribute, nodes=None): if nodes is None: nodes = G.nodes vals = {G.nodes[n][attribute] for n in nodes} - mapping = {d: i for i, d, in enumerate(vals)} + mapping = {d: i for i, d in enumerate(vals)} M = attribute_mixing_matrix(G, attribute, nodes, mapping) return _numeric_ac(M, mapping) @@ -280,7 +280,7 @@ def attribute_ac(M): s = (M @ M).sum() t = M.trace() r = (t - s) / (1 - s) - return r + return float(r) def _numeric_ac(M, mapping): @@ -299,4 +299,4 @@ def _numeric_ac(M, mapping): varb = (b[idx] * y**2).sum() - ((b[idx] * y).sum()) ** 2 xy = np.outer(x, y) ab = np.outer(a[idx], b[idx]) - return (xy * (M - ab)).sum() / np.sqrt(vara * varb) + return float((xy * (M - ab)).sum() / np.sqrt(vara * varb)) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/mixing.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/mixing.py index 66b98797e..852ad82a4 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/mixing.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/mixing.py @@ -14,7 +14,7 @@ ] -@nx._dispatch(node_attrs="attribute") +@nx._dispatchable(node_attrs="attribute") def attribute_mixing_dict(G, attribute, nodes=None, normalized=False): """Returns dictionary representation of mixing matrix for attribute. @@ -53,7 +53,7 @@ def attribute_mixing_dict(G, attribute, nodes=None, normalized=False): return mixing_dict(xy_iter, normalized=normalized) -@nx._dispatch(node_attrs="attribute") +@nx._dispatchable(node_attrs="attribute") def attribute_mixing_matrix(G, attribute, nodes=None, mapping=None, normalized=True): """Returns mixing matrix for attribute. @@ -98,13 +98,13 @@ def attribute_mixing_matrix(G, attribute, nodes=None, mapping=None, normalized=T Examples -------- >>> G = nx.path_graph(3) - >>> gender = {0: 'male', 1: 'female', 2: 'female'} - >>> nx.set_node_attributes(G, gender, 'gender') - >>> mapping = {'male': 0, 'female': 1} - >>> mix_mat = nx.attribute_mixing_matrix(G, 'gender', mapping=mapping) - >>> # mixing from male nodes to female nodes - >>> mix_mat[mapping['male'], mapping['female']] - 0.25 + >>> gender = {0: "male", 1: "female", 2: "female"} + >>> nx.set_node_attributes(G, gender, "gender") + >>> mapping = {"male": 0, "female": 1} + >>> mix_mat = nx.attribute_mixing_matrix(G, "gender", mapping=mapping) + >>> mix_mat + array([[0. , 0.25], + [0.25, 0.5 ]]) """ d = attribute_mixing_dict(G, attribute, nodes) a = dict_to_numpy_array(d, mapping=mapping) @@ -113,7 +113,7 @@ def attribute_mixing_matrix(G, attribute, nodes=None, mapping=None, normalized=T return a -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def degree_mixing_dict(G, x="out", y="in", weight=None, nodes=None, normalized=False): """Returns dictionary representation of mixing matrix for degree. @@ -145,7 +145,7 @@ def degree_mixing_dict(G, x="out", y="in", weight=None, nodes=None, normalized=F return mixing_dict(xy_iter, normalized=normalized) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def degree_mixing_matrix( G, x="out", y="in", weight=None, nodes=None, normalized=True, mapping=None ): @@ -194,17 +194,21 @@ def degree_mixing_matrix( -------- >>> G = nx.star_graph(3) >>> mix_mat = nx.degree_mixing_matrix(G) - >>> mix_mat[0, 1] # mixing from node degree 1 to node degree 3 - 0.5 + >>> mix_mat + array([[0. , 0.5], + [0.5, 0. ]]) If you want every possible degree to appear as a row, even if no nodes have that degree, use `mapping` as follows, >>> max_degree = max(deg for n, deg in G.degree) - >>> mapping = {x: x for x in range(max_degree + 1)} # identity mapping + >>> mapping = {x: x for x in range(max_degree + 1)} # identity mapping >>> mix_mat = nx.degree_mixing_matrix(G, mapping=mapping) - >>> mix_mat[3, 1] # mixing from node degree 3 to node degree 1 - 0.5 + >>> mix_mat + array([[0. , 0. , 0. , 0. ], + [0. , 0. , 0. , 0.5], + [0. , 0. , 0. , 0. ], + [0. , 0.5, 0. , 0. ]]) """ d = degree_mixing_dict(G, x=x, y=y, nodes=nodes, weight=weight) a = dict_to_numpy_array(d, mapping=mapping) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/neighbor_degree.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/neighbor_degree.py index a8980da76..6488d041a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/neighbor_degree.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/neighbor_degree.py @@ -3,7 +3,7 @@ __all__ = ["average_neighbor_degree"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def average_neighbor_degree(G, source="out", target="out", nodes=None, weight=None): r"""Returns the average degree of the neighborhood of each node. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/pairs.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/pairs.py index a3580d403..5a1d6f8e1 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/pairs.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/pairs.py @@ -4,7 +4,7 @@ __all__ = ["node_attribute_xy", "node_degree_xy"] -@nx._dispatch(node_attrs="attribute") +@nx._dispatchable(node_attrs="attribute") def node_attribute_xy(G, attribute, nodes=None): """Returns iterator of node-attribute pairs for all edges in G. @@ -59,7 +59,7 @@ def node_attribute_xy(G, attribute, nodes=None): yield (uattr, vattr) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def node_degree_xy(G, x="out", y="in", weight=None, nodes=None): """Generate node degree-degree pairs for edges in G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/__init__.cpython-312.pyc index 914a963d8..0a801cc1b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/base_test.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/base_test.cpython-312.pyc index 93e6d372a..45a817590 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/base_test.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/base_test.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_connectivity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_connectivity.cpython-312.pyc index 524048d2a..e1c9934a8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_connectivity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_connectivity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_correlation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_correlation.cpython-312.pyc index 8efa75e3c..129927aba 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_correlation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_correlation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_mixing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_mixing.cpython-312.pyc index 3e2abb699..87a8776e0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_mixing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_mixing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_neighbor_degree.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_neighbor_degree.cpython-312.pyc index 76eaf625a..9d1b95856 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_neighbor_degree.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_neighbor_degree.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_pairs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_pairs.cpython-312.pyc index 5637e7dbd..2ec8e2aac 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_pairs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/assortativity/tests/__pycache__/test_pairs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/asteroidal.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/asteroidal.py index 65355fe62..41e91390d 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/asteroidal.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/asteroidal.py @@ -18,7 +18,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def find_asteroidal_triple(G): r"""Find an asteroidal triple in the given graph. @@ -91,7 +91,7 @@ def find_asteroidal_triple(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def is_at_free(G): """Check if a graph is AT-free. @@ -125,7 +125,7 @@ def is_at_free(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def create_component_structure(G): r"""Create component structure for G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/__init__.cpython-312.pyc index 208fed2e6..6468bb5b1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/basic.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/basic.cpython-312.pyc index f3250c2d1..17c3a4375 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/basic.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/basic.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/centrality.cpython-312.pyc index 77eec78c4..ad4855e0d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/cluster.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/cluster.cpython-312.pyc index fe85bd3bd..775bfd23b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/cluster.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/cluster.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/covering.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/covering.cpython-312.pyc index 6f0a65b9d..36eee25ac 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/covering.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/covering.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/edgelist.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/edgelist.cpython-312.pyc index bf11e112b..5f8f55858 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/edgelist.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/edgelist.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/extendability.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/extendability.cpython-312.pyc index 34683a0a3..3c214a88e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/extendability.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/extendability.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/generators.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/generators.cpython-312.pyc index 90a1b437a..23185f29d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/generators.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/generators.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matching.cpython-312.pyc index e565f72a1..e40ed8c0a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matrix.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matrix.cpython-312.pyc index e86c44c4a..6dead2bdb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matrix.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/matrix.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/projection.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/projection.cpython-312.pyc index 92655dd31..2d776e7b5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/projection.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/projection.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/redundancy.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/redundancy.cpython-312.pyc index 86ea346d2..9e2d18bd8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/redundancy.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/redundancy.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/spectral.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/spectral.cpython-312.pyc index 71f748a57..93af867f7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/spectral.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/__pycache__/spectral.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/basic.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/basic.py index 8b9120e27..d0a63a10f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/basic.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/basic.py @@ -17,7 +17,7 @@ ] -@nx._dispatch +@nx._dispatchable def color(G): """Returns a two-coloring of the graph. @@ -83,7 +83,7 @@ def neighbors(v): return color -@nx._dispatch +@nx._dispatchable def is_bipartite(G): """Returns True if graph G is bipartite, False if not. @@ -109,7 +109,7 @@ def is_bipartite(G): return False -@nx._dispatch +@nx._dispatchable def is_bipartite_node_set(G, nodes): """Returns True if nodes and G/nodes are a bipartition of G. @@ -154,7 +154,7 @@ def is_bipartite_node_set(G, nodes): return True -@nx._dispatch +@nx._dispatchable def sets(G, top_nodes=None): """Returns bipartite node sets of graph G. @@ -221,7 +221,7 @@ def sets(G, top_nodes=None): return (X, Y) -@nx._dispatch(graphs="B") +@nx._dispatchable(graphs="B") def density(B, nodes): """Returns density of bipartite graph B. @@ -274,7 +274,7 @@ def density(B, nodes): return d -@nx._dispatch(graphs="B", edge_attrs="weight") +@nx._dispatchable(graphs="B", edge_attrs="weight") def degrees(B, nodes, weight=None): """Returns the degrees of the two node sets in the bipartite graph B. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/centrality.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/centrality.py index a904da352..42d7270ee 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/centrality.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/centrality.py @@ -3,7 +3,7 @@ __all__ = ["degree_centrality", "betweenness_centrality", "closeness_centrality"] -@nx._dispatch(name="bipartite_degree_centrality") +@nx._dispatchable(name="bipartite_degree_centrality") def degree_centrality(G, nodes): r"""Compute the degree centrality for nodes in a bipartite network. @@ -78,7 +78,7 @@ def degree_centrality(G, nodes): return centrality -@nx._dispatch(name="bipartite_betweenness_centrality") +@nx._dispatchable(name="bipartite_betweenness_centrality") def betweenness_centrality(G, nodes): r"""Compute betweenness centrality for nodes in a bipartite network. @@ -182,7 +182,7 @@ def betweenness_centrality(G, nodes): return betweenness -@nx._dispatch(name="bipartite_closeness_centrality") +@nx._dispatchable(name="bipartite_closeness_centrality") def closeness_centrality(G, nodes, normalized=True): r"""Compute the closeness centrality for nodes in a bipartite network. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/cluster.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/cluster.py index f10d7efd1..d96115277 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/cluster.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/cluster.py @@ -29,7 +29,7 @@ def cc_min(nu, nv): modes = {"dot": cc_dot, "min": cc_min, "max": cc_max} -@nx._dispatch +@nx._dispatchable def latapy_clustering(G, nodes=None, mode="dot"): r"""Compute a bipartite clustering coefficient for nodes. @@ -134,7 +134,7 @@ def latapy_clustering(G, nodes=None, mode="dot"): clustering = latapy_clustering -@nx._dispatch(name="bipartite_average_clustering") +@nx._dispatchable(name="bipartite_average_clustering") def average_clustering(G, nodes=None, mode="dot"): r"""Compute the average bipartite clustering coefficient. @@ -211,7 +211,7 @@ def average_clustering(G, nodes=None, mode="dot"): return sum(ccs[v] for v in nodes) / len(nodes) -@nx._dispatch +@nx._dispatchable def robins_alexander_clustering(G): r"""Compute the bipartite clustering of G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/covering.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/covering.py index 8669b4b16..720c63ac4 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/covering.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/covering.py @@ -10,7 +10,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(name="bipartite_min_edge_cover") +@nx._dispatchable(name="bipartite_min_edge_cover") def min_edge_cover(G, matching_algorithm=None): """Returns a set of edges which constitutes the minimum edge cover of the graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/edgelist.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/edgelist.py index 5305aca3b..70631ea0e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/edgelist.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/edgelist.py @@ -146,7 +146,7 @@ def generate_edgelist(G, delimiter=" ", data=True): yield delimiter.join(map(str, edge)) -@nx._dispatch(name="bipartite_parse_edgelist", graphs=None) +@nx._dispatchable(name="bipartite_parse_edgelist", graphs=None, returns_graph=True) def parse_edgelist( lines, comments="#", delimiter=None, create_using=None, nodetype=None, data=True ): @@ -231,7 +231,7 @@ def parse_edgelist( v = nodetype(v) except BaseException as err: raise TypeError( - f"Failed to convert nodes {u},{v} " f"to type {nodetype}." + f"Failed to convert nodes {u},{v} to type {nodetype}." ) from err if len(d) == 0 or data is False: @@ -243,7 +243,7 @@ def parse_edgelist( edgedata = dict(literal_eval(" ".join(d))) except BaseException as err: raise TypeError( - f"Failed to convert edge data ({d})" f"to dictionary." + f"Failed to convert edge data ({d}) to dictionary." ) from err else: # convert edge data to dictionary with specified keys and type @@ -268,7 +268,7 @@ def parse_edgelist( @open_file(0, mode="rb") -@nx._dispatch(name="bipartite_read_edgelist", graphs=None) +@nx._dispatchable(name="bipartite_read_edgelist", graphs=None, returns_graph=True) def read_edgelist( path, comments="#", diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/extendability.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/extendability.py index 10dd5473b..0764997ad 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/extendability.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/extendability.py @@ -10,6 +10,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") +@nx._dispatchable def maximal_extendability(G): """Computes the extendability of a graph. @@ -97,7 +98,7 @@ def maximal_extendability(G): # For node-pairs between V & U, keep min of max number of node-disjoint paths # Variable $k$ stands for the extendability of graph G - k = float("Inf") + k = float("inf") for u in U: for v in V: num_paths = sum(1 for _ in nx.node_disjoint_paths(residual_G, u, v)) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/generators.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/generators.py index 9cea59787..de6f07972 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/generators.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/generators.py @@ -20,8 +20,8 @@ ] +@nx._dispatchable(graphs=None, returns_graph=True) @nodes_or_number([0, 1]) -@nx._dispatch(graphs=None) def complete_bipartite_graph(n1, n2, create_using=None): """Returns the complete bipartite graph `K_{n_1,n_2}`. @@ -67,7 +67,7 @@ def complete_bipartite_graph(n1, n2, create_using=None): @py_random_state(3) -@nx._dispatch(name="bipartite_configuration_model", graphs=None) +@nx._dispatchable(name="bipartite_configuration_model", graphs=None, returns_graph=True) def configuration_model(aseq, bseq, create_using=None, seed=None): """Returns a random bipartite graph from two given degree sequences. @@ -138,7 +138,7 @@ def configuration_model(aseq, bseq, create_using=None, seed=None): return G -@nx._dispatch(name="bipartite_havel_hakimi_graph", graphs=None) +@nx._dispatchable(name="bipartite_havel_hakimi_graph", graphs=None, returns_graph=True) def havel_hakimi_graph(aseq, bseq, create_using=None): """Returns a bipartite graph from two given degree sequences using a Havel-Hakimi style construction. @@ -213,7 +213,7 @@ def havel_hakimi_graph(aseq, bseq, create_using=None): return G -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def reverse_havel_hakimi_graph(aseq, bseq, create_using=None): """Returns a bipartite graph from two given degree sequences using a Havel-Hakimi style construction. @@ -287,7 +287,7 @@ def reverse_havel_hakimi_graph(aseq, bseq, create_using=None): return G -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def alternating_havel_hakimi_graph(aseq, bseq, create_using=None): """Returns a bipartite graph from two given degree sequences using an alternating Havel-Hakimi style construction. @@ -366,7 +366,7 @@ def alternating_havel_hakimi_graph(aseq, bseq, create_using=None): @py_random_state(3) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def preferential_attachment_graph(aseq, p, create_using=None, seed=None): """Create a bipartite graph with a preferential attachment model from a given single degree sequence. @@ -438,7 +438,7 @@ def preferential_attachment_graph(aseq, p, create_using=None, seed=None): @py_random_state(3) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def random_graph(n, m, p, seed=None, directed=False): """Returns a bipartite random graph. @@ -525,7 +525,7 @@ def random_graph(n, m, p, seed=None, directed=False): @py_random_state(3) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def gnmk_random_graph(n, m, k, seed=None, directed=False): """Returns a random bipartite graph G_{n,m,k}. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matching.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matching.py index 17d55614b..48149ab9e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matching.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matching.py @@ -54,7 +54,7 @@ INFINITY = float("inf") -@nx._dispatch +@nx._dispatchable def hopcroft_karp_matching(G, top_nodes=None): """Returns the maximum cardinality matching of the bipartite graph `G`. @@ -181,7 +181,7 @@ def depth_first_search(v): return dict(itertools.chain(leftmatches.items(), rightmatches.items())) -@nx._dispatch +@nx._dispatchable def eppstein_matching(G, top_nodes=None): """Returns the maximum cardinality matching of the bipartite graph `G`. @@ -420,7 +420,7 @@ def _connected_by_alternating_paths(G, matching, targets): } -@nx._dispatch +@nx._dispatchable def to_vertex_cover(G, matching, top_nodes=None): """Returns the minimum vertex cover corresponding to the given maximum matching of the bipartite graph `G`. @@ -501,7 +501,7 @@ def to_vertex_cover(G, matching, top_nodes=None): maximum_matching = hopcroft_karp_matching -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def minimum_weight_full_matching(G, top_nodes=None, weight="weight"): r"""Returns a minimum weight full matching of the bipartite graph `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matrix.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matrix.py index e56796775..462ef8a13 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matrix.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/matrix.py @@ -11,7 +11,7 @@ __all__ = ["biadjacency_matrix", "from_biadjacency_matrix"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def biadjacency_matrix( G, row_order, column_order=None, dtype=None, weight="weight", format="csr" ): @@ -110,7 +110,7 @@ def biadjacency_matrix( raise nx.NetworkXError(f"Unknown sparse array format: {format}") from err -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_biadjacency_matrix(A, create_using=None, edge_attribute="weight"): r"""Creates a new bipartite graph from a biadjacency matrix given as a SciPy sparse array. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/projection.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/projection.py index 57f960e13..1eb71fa52 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/projection.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/projection.py @@ -12,7 +12,9 @@ ] -@nx._dispatch(graphs="B", preserve_node_attrs=True, preserve_graph_attrs=True) +@nx._dispatchable( + graphs="B", preserve_node_attrs=True, preserve_graph_attrs=True, returns_graph=True +) def projected_graph(B, nodes, multigraph=False): r"""Returns the projection of B onto one of its node sets. @@ -117,7 +119,7 @@ def projected_graph(B, nodes, multigraph=False): @not_implemented_for("multigraph") -@nx._dispatch(graphs="B") +@nx._dispatchable(graphs="B", returns_graph=True) def weighted_projected_graph(B, nodes, ratio=False): r"""Returns a weighted projection of B onto one of its node sets. @@ -218,7 +220,7 @@ def weighted_projected_graph(B, nodes, ratio=False): @not_implemented_for("multigraph") -@nx._dispatch(graphs="B") +@nx._dispatchable(graphs="B", returns_graph=True) def collaboration_weighted_projected_graph(B, nodes): r"""Newman's weighted projection of B onto one of its node sets. @@ -263,7 +265,6 @@ def collaboration_weighted_projected_graph(B, nodes): [0, 2, 4, 5] >>> for edge in sorted(G.edges(data=True)): ... print(edge) - ... (0, 2, {'weight': 0.5}) (0, 5, {'weight': 0.5}) (2, 4, {'weight': 1.0}) @@ -313,7 +314,7 @@ def collaboration_weighted_projected_graph(B, nodes): @not_implemented_for("multigraph") -@nx._dispatch(graphs="B") +@nx._dispatchable(graphs="B", returns_graph=True) def overlap_weighted_projected_graph(B, nodes, jaccard=True): r"""Overlap weighted projection of B onto one of its node sets. @@ -413,7 +414,7 @@ def overlap_weighted_projected_graph(B, nodes, jaccard=True): @not_implemented_for("multigraph") -@nx._dispatch(graphs="B", preserve_all_attrs=True) +@nx._dispatchable(graphs="B", preserve_all_attrs=True, returns_graph=True) def generic_weighted_projected_graph(B, nodes, weight_function=None): r"""Weighted projection of B with a user-specified weight function. @@ -451,22 +452,18 @@ def generic_weighted_projected_graph(B, nodes, weight_function=None): ... unbrs = set(G[u]) ... vnbrs = set(G[v]) ... return float(len(unbrs & vnbrs)) / len(unbrs | vnbrs) - ... >>> def my_weight(G, u, v, weight="weight"): ... w = 0 ... for nbr in set(G[u]) & set(G[v]): ... w += G[u][nbr].get(weight, 1) + G[v][nbr].get(weight, 1) ... return w - ... >>> # A complete bipartite graph with 4 nodes and 4 edges >>> B = nx.complete_bipartite_graph(2, 2) >>> # Add some arbitrary weight to the edges >>> for i, (u, v) in enumerate(B.edges()): ... B.edges[u, v]["weight"] = i + 1 - ... >>> for edge in B.edges(data=True): ... print(edge) - ... (0, 2, {'weight': 1}) (0, 3, {'weight': 2}) (1, 2, {'weight': 3}) @@ -476,14 +473,10 @@ def generic_weighted_projected_graph(B, nodes, weight_function=None): >>> print(list(G.edges(data=True))) [(0, 1, {'weight': 2})] >>> # To specify a custom weight function use the weight_function parameter - >>> G = bipartite.generic_weighted_projected_graph( - ... B, [0, 1], weight_function=jaccard - ... ) + >>> G = bipartite.generic_weighted_projected_graph(B, [0, 1], weight_function=jaccard) >>> print(list(G.edges(data=True))) [(0, 1, {'weight': 1.0})] - >>> G = bipartite.generic_weighted_projected_graph( - ... B, [0, 1], weight_function=my_weight - ... ) + >>> G = bipartite.generic_weighted_projected_graph(B, [0, 1], weight_function=my_weight) >>> print(list(G.edges(data=True))) [(0, 1, {'weight': 10})] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/redundancy.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/redundancy.py index 04b3ae9ca..7a44d2128 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/redundancy.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/redundancy.py @@ -7,7 +7,7 @@ __all__ = ["node_redundancy"] -@nx._dispatch +@nx._dispatchable def node_redundancy(G, nodes=None): r"""Computes the node redundancy coefficients for the nodes in the bipartite graph `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/spectral.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/spectral.py index f4b414243..61a56dd2c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/spectral.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/spectral.py @@ -6,7 +6,7 @@ __all__ = ["spectral_bipartivity"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def spectral_bipartivity(G, nodes=None, weight="weight"): """Returns the spectral bipartivity. @@ -57,12 +57,12 @@ def spectral_bipartivity(G, nodes=None, weight="weight"): coshA = 0.5 * (expA + expmA) if nodes is None: # return single number for entire graph - return coshA.diagonal().sum() / expA.diagonal().sum() + return float(coshA.diagonal().sum() / expA.diagonal().sum()) else: # contribution for individual nodes index = dict(zip(nodelist, range(len(nodelist)))) sb = {} for n in nodes: i = index[n] - sb[n] = coshA[i, i] / expA[i, i] + sb[n] = coshA.item(i, i) / expA.item(i, i) return sb diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/__init__.cpython-312.pyc index 79f456a43..5e72679e5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_basic.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_basic.cpython-312.pyc index e7723ab27..e822e801b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_basic.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_basic.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_centrality.cpython-312.pyc index 86e4c504e..f2616ac72 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_cluster.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_cluster.cpython-312.pyc index 854dfe229..52119f3c0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_cluster.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_cluster.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_covering.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_covering.cpython-312.pyc index 176896fcc..649a57946 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_covering.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_covering.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_edgelist.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_edgelist.cpython-312.pyc index 06cb0c666..165179c00 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_edgelist.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_edgelist.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_extendability.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_extendability.cpython-312.pyc index e418bd56c..f5864cde6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_extendability.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_extendability.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_generators.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_generators.cpython-312.pyc index e46ab9c23..f831ec2b6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_generators.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_generators.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matching.cpython-312.pyc index 0f7f4e9e9..b498230ae 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matrix.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matrix.cpython-312.pyc index 84a9f159c..154630dc4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matrix.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_matrix.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_project.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_project.cpython-312.pyc index d16398507..66618173b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_project.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_project.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_redundancy.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_redundancy.cpython-312.pyc index 1882d07c8..43b672ead 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_redundancy.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_redundancy.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_spectral_bipartivity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_spectral_bipartivity.cpython-312.pyc index e6210441e..4fe4818ea 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_spectral_bipartivity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/__pycache__/test_spectral_bipartivity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_edgelist.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_edgelist.py index b388465ef..74035b35e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_edgelist.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_edgelist.py @@ -2,8 +2,6 @@ Unit tests for bipartite edgelists. """ import io -import os -import tempfile import pytest @@ -101,51 +99,47 @@ def test_write_edgelist_4(self): fh.seek(0) assert fh.read() == b"1 2 2.0\n3 2 3.0\n" - def test_unicode(self): + def test_unicode(self, tmp_path): G = nx.Graph() name1 = chr(2344) + chr(123) + chr(6543) name2 = chr(5543) + chr(1543) + chr(324) G.add_edge(name1, "Radiohead", **{name2: 3}) G.add_node(name1, bipartite=0) G.add_node("Radiohead", bipartite=1) - fd, fname = tempfile.mkstemp() + + fname = tmp_path / "edgelist.txt" bipartite.write_edgelist(G, fname) H = bipartite.read_edgelist(fname) assert graphs_equal(G, H) - os.close(fd) - os.unlink(fname) - def test_latin1_issue(self): + def test_latin1_issue(self, tmp_path): G = nx.Graph() name1 = chr(2344) + chr(123) + chr(6543) name2 = chr(5543) + chr(1543) + chr(324) G.add_edge(name1, "Radiohead", **{name2: 3}) G.add_node(name1, bipartite=0) G.add_node("Radiohead", bipartite=1) - fd, fname = tempfile.mkstemp() - pytest.raises( - UnicodeEncodeError, bipartite.write_edgelist, G, fname, encoding="latin-1" - ) - os.close(fd) - os.unlink(fname) - def test_latin1(self): + fname = tmp_path / "edgelist.txt" + with pytest.raises(UnicodeEncodeError): + bipartite.write_edgelist(G, fname, encoding="latin-1") + + def test_latin1(self, tmp_path): G = nx.Graph() name1 = "Bj" + chr(246) + "rk" name2 = chr(220) + "ber" G.add_edge(name1, "Radiohead", **{name2: 3}) G.add_node(name1, bipartite=0) G.add_node("Radiohead", bipartite=1) - fd, fname = tempfile.mkstemp() + + fname = tmp_path / "edgelist.txt" bipartite.write_edgelist(G, fname, encoding="latin-1") H = bipartite.read_edgelist(fname, encoding="latin-1") assert graphs_equal(G, H) - os.close(fd) - os.unlink(fname) - def test_edgelist_graph(self): + def test_edgelist_graph(self, tmp_path): G = self.G - (fd, fname) = tempfile.mkstemp() + fname = tmp_path / "edgelist.txt" bipartite.write_edgelist(G, fname) H = bipartite.read_edgelist(fname) H2 = bipartite.read_edgelist(fname) @@ -153,32 +147,26 @@ def test_edgelist_graph(self): G.remove_node("g") # isolated nodes are not written in edgelist assert nodes_equal(list(H), list(G)) assert edges_equal(list(H.edges()), list(G.edges())) - os.close(fd) - os.unlink(fname) - def test_edgelist_integers(self): + def test_edgelist_integers(self, tmp_path): G = nx.convert_node_labels_to_integers(self.G) - (fd, fname) = tempfile.mkstemp() + fname = tmp_path / "edgelist.txt" bipartite.write_edgelist(G, fname) H = bipartite.read_edgelist(fname, nodetype=int) # isolated nodes are not written in edgelist G.remove_nodes_from(list(nx.isolates(G))) assert nodes_equal(list(H), list(G)) assert edges_equal(list(H.edges()), list(G.edges())) - os.close(fd) - os.unlink(fname) - def test_edgelist_multigraph(self): + def test_edgelist_multigraph(self, tmp_path): G = self.MG - (fd, fname) = tempfile.mkstemp() + fname = tmp_path / "edgelist.txt" bipartite.write_edgelist(G, fname) H = bipartite.read_edgelist(fname, nodetype=int, create_using=nx.MultiGraph()) H2 = bipartite.read_edgelist(fname, nodetype=int, create_using=nx.MultiGraph()) assert H is not H2 # they should be different graphs assert nodes_equal(list(H), list(G)) assert edges_equal(list(H.edges()), list(G.edges())) - os.close(fd) - os.unlink(fname) def test_empty_digraph(self): with pytest.raises(nx.NetworkXNotImplemented): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_extendability.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_extendability.py index d7ae34e4c..17b712434 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_extendability.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_extendability.py @@ -29,6 +29,14 @@ def test_no_perfect_matching_raises(): nx.bipartite.maximal_extendability(G) +def test_residual_graph_not_strongly_connected_raises(): + G = nx.Graph([(1, 2), (2, 3), (3, 4)]) + with pytest.raises( + nx.NetworkXError, match="The residual graph of G is not strongly connected" + ): + nx.bipartite.maximal_extendability(G) + + def test_ladder_graph_is_1(): G = nx.ladder_graph(3) assert nx.bipartite.maximal_extendability(G) == 1 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_matrix.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_matrix.py index 393b71e7c..53d831151 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_matrix.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bipartite/tests/test_matrix.py @@ -39,6 +39,11 @@ def test_biadjacency_matrix_order(self): M = bipartite.biadjacency_matrix(G, X, Y, weight="weight") assert M[1, 2] == 2 + def test_biadjacency_matrix_empty_graph(self): + G = nx.empty_graph(2) + M = nx.bipartite.biadjacency_matrix(G, [0]) + assert np.array_equal(M.toarray(), np.array([[0]])) + def test_null_graph(self): with pytest.raises(nx.NetworkXError): bipartite.biadjacency_matrix(nx.Graph(), []) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/boundary.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/boundary.py index ea97cee6e..fef9ba223 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/boundary.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/boundary.py @@ -15,7 +15,7 @@ __all__ = ["edge_boundary", "node_boundary"] -@nx._dispatch(edge_attrs={"data": "default"}, preserve_edge_attrs="data") +@nx._dispatchable(edge_attrs={"data": "default"}, preserve_edge_attrs="data") def edge_boundary(G, nbunch1, nbunch2=None, data=False, keys=False, default=None): """Returns the edge boundary of `nbunch1`. @@ -106,7 +106,7 @@ def edge_boundary(G, nbunch1, nbunch2=None, data=False, keys=False, default=None ) -@nx._dispatch +@nx._dispatchable def node_boundary(G, nbunch1, nbunch2=None): """Returns the node boundary of `nbunch1`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bridges.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bridges.py index 106120e2f..e076a256c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bridges.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/bridges.py @@ -8,7 +8,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def bridges(G, root=None): """Generate all bridges in a graph. @@ -81,7 +81,7 @@ def bridges(G, root=None): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def has_bridges(G, root=None): """Decide whether a graph has any bridges. @@ -142,7 +142,7 @@ def has_bridges(G, root=None): @not_implemented_for("multigraph") @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def local_bridges(G, with_span=True, weight=None): """Iterate over local bridges of `G` optionally computing the span diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/broadcasting.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/broadcasting.py new file mode 100644 index 000000000..9b362a0e1 --- /dev/null +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/broadcasting.py @@ -0,0 +1,155 @@ +"""Routines to calculate the broadcast time of certain graphs. + +Broadcasting is an information dissemination problem in which a node in a graph, +called the originator, must distribute a message to all other nodes by placing +a series of calls along the edges of the graph. Once informed, other nodes aid +the originator in distributing the message. + +The broadcasting must be completed as quickly as possible subject to the +following constraints: +- Each call requires one unit of time. +- A node can only participate in one call per unit of time. +- Each call only involves two adjacent nodes: a sender and a receiver. +""" + +import networkx as nx +from networkx import NetworkXError +from networkx.utils import not_implemented_for + +__all__ = [ + "tree_broadcast_center", + "tree_broadcast_time", +] + + +def _get_max_broadcast_value(G, U, v, values): + adj = sorted(set(G.neighbors(v)) & U, key=values.get, reverse=True) + return max(values[u] + i for i, u in enumerate(adj, start=1)) + + +def _get_broadcast_centers(G, v, values, target): + adj = sorted(G.neighbors(v), key=values.get, reverse=True) + j = next(i for i, u in enumerate(adj, start=1) if values[u] + i == target) + return set([v] + adj[:j]) + + +@not_implemented_for("directed") +@not_implemented_for("multigraph") +@nx._dispatchable +def tree_broadcast_center(G): + """Return the Broadcast Center of the tree `G`. + + The broadcast center of a graph G denotes the set of nodes having + minimum broadcast time [1]_. This is a linear algorithm for determining + the broadcast center of a tree with ``N`` nodes, as a by-product it also + determines the broadcast time from the broadcast center. + + Parameters + ---------- + G : undirected graph + The graph should be an undirected tree + + Returns + ------- + BC : (int, set) tuple + minimum broadcast number of the tree, set of broadcast centers + + Raises + ------ + NetworkXNotImplemented + If the graph is directed or is a multigraph. + + References + ---------- + .. [1] Slater, P.J., Cockayne, E.J., Hedetniemi, S.T, + Information dissemination in trees. SIAM J.Comput. 10(4), 692–701 (1981) + """ + # Assert that the graph G is a tree + if not nx.is_tree(G): + NetworkXError("Input graph is not a tree") + # step 0 + if G.number_of_nodes() == 2: + return 1, set(G.nodes()) + if G.number_of_nodes() == 1: + return 0, set(G.nodes()) + + # step 1 + U = {node for node, deg in G.degree if deg == 1} + values = {n: 0 for n in U} + T = G.copy() + T.remove_nodes_from(U) + + # step 2 + W = {node for node, deg in T.degree if deg == 1} + values.update((w, G.degree[w] - 1) for w in W) + + # step 3 + while T.number_of_nodes() >= 2: + # step 4 + w = min(W, key=lambda n: values[n]) + v = next(T.neighbors(w)) + + # step 5 + U.add(w) + W.remove(w) + T.remove_node(w) + + # step 6 + if T.degree(v) == 1: + # update t(v) + values.update({v: _get_max_broadcast_value(G, U, v, values)}) + W.add(v) + + # step 7 + v = nx.utils.arbitrary_element(T) + b_T = _get_max_broadcast_value(G, U, v, values) + return b_T, _get_broadcast_centers(G, v, values, b_T) + + +@not_implemented_for("directed") +@not_implemented_for("multigraph") +@nx._dispatchable +def tree_broadcast_time(G, node=None): + """Return the Broadcast Time of the tree `G`. + + The minimum broadcast time of a node is defined as the minimum amount + of time required to complete broadcasting starting from the + originator. The broadcast time of a graph is the maximum over + all nodes of the minimum broadcast time from that node [1]_. + This function returns the minimum broadcast time of `node`. + If `node` is None the broadcast time for the graph is returned. + + Parameters + ---------- + G : undirected graph + The graph should be an undirected tree + node: int, optional + index of starting node. If `None`, the algorithm returns the broadcast + time of the tree. + + Returns + ------- + BT : int + Broadcast Time of a node in a tree + + Raises + ------ + NetworkXNotImplemented + If the graph is directed or is a multigraph. + + References + ---------- + .. [1] Harutyunyan, H. A. and Li, Z. + "A Simple Construction of Broadcast Graphs." + In Computing and Combinatorics. COCOON 2019 + (Ed. D. Z. Du and C. Tian.) Springer, pp. 240-253, 2019. + """ + b_T, b_C = tree_broadcast_center(G) + if node is not None: + return b_T + min(nx.shortest_path_length(G, node, u) for u in b_C) + dist_from_center = dict.fromkeys(G, len(G)) + for u in b_C: + for v, dist in nx.shortest_path_length(G, u).items(): + if dist < dist_from_center[v]: + dist_from_center[v] = dist + return b_T + max(dist_from_center.values()) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/__init__.cpython-312.pyc index 475a34ad9..2d5b85311 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness.cpython-312.pyc index 46ff81e3e..ef24598c6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness_subset.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness_subset.cpython-312.pyc index d40be1e81..c6304a276 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness_subset.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/betweenness_subset.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/closeness.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/closeness.cpython-312.pyc index e14e3213f..f257adb91 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/closeness.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/closeness.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness.cpython-312.pyc index dac529c57..46ff607b8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness_subset.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness_subset.cpython-312.pyc index c31e3ca9e..a456856f4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness_subset.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_betweenness_subset.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_closeness.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_closeness.cpython-312.pyc index fcc5ad610..069b06de8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_closeness.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/current_flow_closeness.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/degree_alg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/degree_alg.cpython-312.pyc index f3db99af4..d3c47279e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/degree_alg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/degree_alg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/dispersion.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/dispersion.cpython-312.pyc index 108beabea..009a3b12e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/dispersion.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/dispersion.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/eigenvector.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/eigenvector.cpython-312.pyc index 07b8a3e9a..98c48733f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/eigenvector.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/eigenvector.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/flow_matrix.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/flow_matrix.cpython-312.pyc index 5146f40fd..f310792de 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/flow_matrix.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/flow_matrix.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/group.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/group.cpython-312.pyc index 5df17e181..0e8c02995 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/group.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/group.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/harmonic.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/harmonic.cpython-312.pyc index 5bb175ecc..2f478dbe2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/harmonic.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/harmonic.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/katz.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/katz.cpython-312.pyc index 344af0278..202c249c4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/katz.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/katz.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/laplacian.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/laplacian.cpython-312.pyc index 4fcf79816..f01e9bd73 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/laplacian.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/laplacian.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/load.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/load.cpython-312.pyc index 39672729a..2b82ab395 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/load.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/load.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/percolation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/percolation.cpython-312.pyc index c8af857f7..198af1770 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/percolation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/percolation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/reaching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/reaching.cpython-312.pyc index 11b53bc5c..6338c6d74 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/reaching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/reaching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/second_order.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/second_order.cpython-312.pyc index 831be05b9..0668e25df 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/second_order.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/second_order.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/subgraph_alg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/subgraph_alg.cpython-312.pyc index 1a1e92f0e..7f31370eb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/subgraph_alg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/subgraph_alg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/trophic.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/trophic.cpython-312.pyc index 445fbe145..6a07f5a40 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/trophic.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/trophic.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/voterank_alg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/voterank_alg.cpython-312.pyc index 6e6646e67..e39b6e991 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/voterank_alg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/__pycache__/voterank_alg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness.py index b4b1f3963..4f44fb19b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness.py @@ -12,7 +12,7 @@ @py_random_state(5) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def betweenness_centrality( G, k=None, normalized=True, weight=None, endpoints=False, seed=None ): @@ -154,7 +154,7 @@ def betweenness_centrality( @py_random_state(4) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def edge_betweenness_centrality(G, k=None, normalized=True, weight=None, seed=None): r"""Compute betweenness centrality for edges. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness_subset.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness_subset.py index e6c1acdf4..7f9967e96 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness_subset.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/betweenness_subset.py @@ -16,7 +16,7 @@ ] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def betweenness_centrality_subset(G, sources, targets, normalized=False, weight=None): r"""Compute betweenness centrality for a subset of nodes. @@ -114,7 +114,7 @@ def betweenness_centrality_subset(G, sources, targets, normalized=False, weight= return b -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def edge_betweenness_centrality_subset( G, sources, targets, normalized=False, weight=None ): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/closeness.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/closeness.py index 6a95ac14e..1c1722d4e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/closeness.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/closeness.py @@ -10,7 +10,7 @@ __all__ = ["closeness_centrality", "incremental_closeness_centrality"] -@nx._dispatch(edge_attrs="distance") +@nx._dispatchable(edge_attrs="distance") def closeness_centrality(G, u=None, distance=None, wf_improved=True): r"""Compute closeness centrality for nodes. @@ -137,7 +137,7 @@ def closeness_centrality(G, u=None, distance=None, wf_improved=True): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable(mutates_input=True) def incremental_closeness_centrality( G, edge, prev_cc=None, insertion=True, wf_improved=True ): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness.py index ea1b2c8f2..b79a4c801 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness.py @@ -21,7 +21,7 @@ @not_implemented_for("directed") @py_random_state(7) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def approximate_current_flow_betweenness_centrality( G, normalized=True, @@ -134,7 +134,7 @@ def approximate_current_flow_betweenness_centrality( continue for nbr in H[v]: w = H[v][nbr].get(weight, 1.0) - betweenness[v] += w * np.abs(p[v] - p[nbr]) * cstar2k + betweenness[v] += float(w * np.abs(p[v] - p[nbr]) * cstar2k) if normalized: factor = 1.0 else: @@ -144,7 +144,7 @@ def approximate_current_flow_betweenness_centrality( @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def current_flow_betweenness_centrality( G, normalized=True, weight=None, dtype=float, solver="full" ): @@ -220,28 +220,26 @@ def current_flow_betweenness_centrality( """ if not nx.is_connected(G): raise nx.NetworkXError("Graph not connected.") - n = G.number_of_nodes() + N = G.number_of_nodes() ordering = list(reverse_cuthill_mckee_ordering(G)) # make a copy with integer labels according to rcm ordering # this could be done without a copy if we really wanted to - H = nx.relabel_nodes(G, dict(zip(ordering, range(n)))) - betweenness = dict.fromkeys(H, 0.0) # b[v]=0 for v in H + H = nx.relabel_nodes(G, dict(zip(ordering, range(N)))) + betweenness = dict.fromkeys(H, 0.0) # b[n]=0 for n in H for row, (s, t) in flow_matrix_row(H, weight=weight, dtype=dtype, solver=solver): - pos = dict(zip(row.argsort()[::-1], range(n))) - for i in range(n): - betweenness[s] += (i - pos[i]) * row[i] - betweenness[t] += (n - i - 1 - pos[i]) * row[i] + pos = dict(zip(row.argsort()[::-1], range(N))) + for i in range(N): + betweenness[s] += (i - pos[i]) * row.item(i) + betweenness[t] += (N - i - 1 - pos[i]) * row.item(i) if normalized: - nb = (n - 1.0) * (n - 2.0) # normalization factor + nb = (N - 1.0) * (N - 2.0) # normalization factor else: nb = 2.0 - for v in H: - betweenness[v] = float((betweenness[v] - v) * 2.0 / nb) - return {ordering[k]: v for k, v in betweenness.items()} + return {ordering[n]: (b - n) * 2.0 / nb for n, b in betweenness.items()} @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def edge_current_flow_betweenness_centrality( G, normalized=True, weight=None, dtype=float, solver="full" ): @@ -323,21 +321,21 @@ def edge_current_flow_betweenness_centrality( """ if not nx.is_connected(G): raise nx.NetworkXError("Graph not connected.") - n = G.number_of_nodes() + N = G.number_of_nodes() ordering = list(reverse_cuthill_mckee_ordering(G)) # make a copy with integer labels according to rcm ordering # this could be done without a copy if we really wanted to - H = nx.relabel_nodes(G, dict(zip(ordering, range(n)))) + H = nx.relabel_nodes(G, dict(zip(ordering, range(N)))) edges = (tuple(sorted((u, v))) for u, v in H.edges()) betweenness = dict.fromkeys(edges, 0.0) if normalized: - nb = (n - 1.0) * (n - 2.0) # normalization factor + nb = (N - 1.0) * (N - 2.0) # normalization factor else: nb = 2.0 for row, (e) in flow_matrix_row(H, weight=weight, dtype=dtype, solver=solver): - pos = dict(zip(row.argsort()[::-1], range(1, n + 1))) - for i in range(n): - betweenness[e] += (i + 1 - pos[i]) * row[i] - betweenness[e] += (n - i - pos[i]) * row[i] + pos = dict(zip(row.argsort()[::-1], range(1, N + 1))) + for i in range(N): + betweenness[e] += (i + 1 - pos[i]) * row.item(i) + betweenness[e] += (N - i - pos[i]) * row.item(i) betweenness[e] /= nb - return {(ordering[s], ordering[t]): v for (s, t), v in betweenness.items()} + return {(ordering[s], ordering[t]): b for (s, t), b in betweenness.items()} diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness_subset.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness_subset.py index debfca27f..c6790b218 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness_subset.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_betweenness_subset.py @@ -10,7 +10,7 @@ @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def current_flow_betweenness_centrality_subset( G, sources, targets, normalized=True, weight=None, dtype=float, solver="lu" ): @@ -96,31 +96,31 @@ def current_flow_betweenness_centrality_subset( if not nx.is_connected(G): raise nx.NetworkXError("Graph not connected.") - n = G.number_of_nodes() + N = G.number_of_nodes() ordering = list(reverse_cuthill_mckee_ordering(G)) # make a copy with integer labels according to rcm ordering # this could be done without a copy if we really wanted to - mapping = dict(zip(ordering, range(n))) + mapping = dict(zip(ordering, range(N))) H = nx.relabel_nodes(G, mapping) - betweenness = dict.fromkeys(H, 0.0) # b[v]=0 for v in H + betweenness = dict.fromkeys(H, 0.0) # b[n]=0 for n in H for row, (s, t) in flow_matrix_row(H, weight=weight, dtype=dtype, solver=solver): for ss in sources: i = mapping[ss] for tt in targets: j = mapping[tt] - betweenness[s] += 0.5 * np.abs(row[i] - row[j]) - betweenness[t] += 0.5 * np.abs(row[i] - row[j]) + betweenness[s] += 0.5 * abs(row.item(i) - row.item(j)) + betweenness[t] += 0.5 * abs(row.item(i) - row.item(j)) if normalized: - nb = (n - 1.0) * (n - 2.0) # normalization factor + nb = (N - 1.0) * (N - 2.0) # normalization factor else: nb = 2.0 - for v in H: - betweenness[v] = betweenness[v] / nb + 1.0 / (2 - n) - return {ordering[k]: v for k, v in betweenness.items()} + for node in H: + betweenness[node] = betweenness[node] / nb + 1.0 / (2 - N) + return {ordering[node]: value for node, value in betweenness.items()} @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def edge_current_flow_betweenness_centrality_subset( G, sources, targets, normalized=True, weight=None, dtype=float, solver="lu" ): @@ -204,16 +204,16 @@ def edge_current_flow_betweenness_centrality_subset( if not nx.is_connected(G): raise nx.NetworkXError("Graph not connected.") - n = G.number_of_nodes() + N = G.number_of_nodes() ordering = list(reverse_cuthill_mckee_ordering(G)) # make a copy with integer labels according to rcm ordering # this could be done without a copy if we really wanted to - mapping = dict(zip(ordering, range(n))) + mapping = dict(zip(ordering, range(N))) H = nx.relabel_nodes(G, mapping) edges = (tuple(sorted((u, v))) for u, v in H.edges()) betweenness = dict.fromkeys(edges, 0.0) if normalized: - nb = (n - 1.0) * (n - 2.0) # normalization factor + nb = (N - 1.0) * (N - 2.0) # normalization factor else: nb = 2.0 for row, (e) in flow_matrix_row(H, weight=weight, dtype=dtype, solver=solver): @@ -221,6 +221,6 @@ def edge_current_flow_betweenness_centrality_subset( i = mapping[ss] for tt in targets: j = mapping[tt] - betweenness[e] += 0.5 * np.abs(row[i] - row[j]) + betweenness[e] += 0.5 * abs(row.item(i) - row.item(j)) betweenness[e] /= nb - return {(ordering[s], ordering[t]): v for (s, t), v in betweenness.items()} + return {(ordering[s], ordering[t]): value for (s, t), value in betweenness.items()} diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_closeness.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_closeness.py index daefbae90..92c892f74 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_closeness.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/current_flow_closeness.py @@ -11,7 +11,7 @@ @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def current_flow_closeness_centrality(G, weight=None, dtype=float, solver="lu"): """Compute current-flow closeness centrality for nodes. @@ -74,24 +74,22 @@ def current_flow_closeness_centrality(G, weight=None, dtype=float, solver="lu"): "lu": SuperLUInverseLaplacian, "cg": CGInverseLaplacian, } - n = G.number_of_nodes() + N = G.number_of_nodes() ordering = list(reverse_cuthill_mckee_ordering(G)) # make a copy with integer labels according to rcm ordering # this could be done without a copy if we really wanted to - H = nx.relabel_nodes(G, dict(zip(ordering, range(n)))) - betweenness = dict.fromkeys(H, 0.0) # b[v]=0 for v in H - n = H.number_of_nodes() - L = nx.laplacian_matrix(H, nodelist=range(n), weight=weight).asformat("csc") + H = nx.relabel_nodes(G, dict(zip(ordering, range(N)))) + betweenness = dict.fromkeys(H, 0.0) # b[n]=0 for n in H + N = H.number_of_nodes() + L = nx.laplacian_matrix(H, nodelist=range(N), weight=weight).asformat("csc") L = L.astype(dtype) C2 = solvername[solver](L, width=1, dtype=dtype) # initialize solver for v in H: col = C2.get_row(v) for w in H: - betweenness[v] += col[v] - 2 * col[w] - betweenness[w] += col[v] - for v in H: - betweenness[v] = 1 / (betweenness[v]) - return {ordering[k]: v for k, v in betweenness.items()} + betweenness[v] += col.item(v) - 2 * col.item(w) + betweenness[w] += col.item(v) + return {ordering[node]: 1 / value for node, value in betweenness.items()} information_centrality = current_flow_closeness_centrality diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/degree_alg.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/degree_alg.py index 2631730db..ea53f41ea 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/degree_alg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/degree_alg.py @@ -5,7 +5,7 @@ __all__ = ["degree_centrality", "in_degree_centrality", "out_degree_centrality"] -@nx._dispatch +@nx._dispatchable def degree_centrality(G): """Compute the degree centrality for nodes. @@ -50,7 +50,7 @@ def degree_centrality(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def in_degree_centrality(G): """Compute the in-degree centrality for nodes. @@ -100,7 +100,7 @@ def in_degree_centrality(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def out_degree_centrality(G): """Compute the out-degree centrality for nodes. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/dispersion.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/dispersion.py index a551c387d..a3fa68583 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/dispersion.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/dispersion.py @@ -5,7 +5,7 @@ __all__ = ["dispersion"] -@nx._dispatch +@nx._dispatchable def dispersion(G, u=None, v=None, normalized=True, alpha=1.0, b=0.0, c=0.0): r"""Calculate dispersion between `u` and `v` in `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/eigenvector.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/eigenvector.py index 267e7b510..ed57b2aeb 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/eigenvector.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/eigenvector.py @@ -8,7 +8,7 @@ @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def eigenvector_centrality(G, max_iter=100, tol=1.0e-6, nstart=None, weight=None): r"""Compute the eigenvector centrality for the graph G. @@ -193,7 +193,7 @@ def eigenvector_centrality(G, max_iter=100, tol=1.0e-6, nstart=None, weight=None raise nx.PowerIterationFailedConvergence(max_iter) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def eigenvector_centrality_numpy(G, weight=None, max_iter=50, tol=0): r"""Compute the eigenvector centrality for the graph G. @@ -338,4 +338,4 @@ def eigenvector_centrality_numpy(G, weight=None, max_iter=50, tol=0): ) largest = eigenvector.flatten().real norm = np.sign(largest.sum()) * sp.linalg.norm(largest) - return dict(zip(G, largest / norm)) + return dict(zip(G, (largest / norm).tolist())) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/flow_matrix.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/flow_matrix.py index e9cd7e260..3874f6b2f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/flow_matrix.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/flow_matrix.py @@ -3,7 +3,7 @@ import networkx as nx -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def flow_matrix_row(G, weight=None, dtype=float, solver="lu"): # Generate a row of the current-flow matrix import numpy as np diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/group.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/group.py index 8207a71a5..66fd309ff 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/group.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/group.py @@ -19,7 +19,7 @@ ] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def group_betweenness_centrality(G, C, normalized=True, weight=None, endpoints=False): r"""Compute the group betweenness centrality for a group of nodes. @@ -236,7 +236,7 @@ def _group_preprocessing(G, set_v, weight): return PB, sigma, D -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def prominent_group( G, k, weight=None, C=None, endpoints=False, normalized=True, greedy=False ): @@ -350,6 +350,7 @@ def prominent_group( else: nodes = list(G.nodes) DF_tree = nx.Graph() + DF_tree.__networkx_cache__ = None # Disable caching PB, sigma, D = _group_preprocessing(G, nodes, weight) betweenness = pd.DataFrame.from_dict(PB) if C is not None: @@ -498,15 +499,15 @@ def _heuristic(k, root, DF_tree, D, nodes, greedy): / root_node["sigma"][added_node][y] ) DF_tree.nodes[node_p]["sigma"][x][y] = root_node["sigma"][x][y] * (1 - dxvy) - DF_tree.nodes[node_p]["betweenness"][x][y] = ( + DF_tree.nodes[node_p]["betweenness"].loc[y, x] = ( root_node["betweenness"][x][y] - root_node["betweenness"][x][y] * dxvy ) if y != added_node: - DF_tree.nodes[node_p]["betweenness"][x][y] -= ( + DF_tree.nodes[node_p]["betweenness"].loc[y, x] -= ( root_node["betweenness"][x][added_node] * dxyv ) if x != added_node: - DF_tree.nodes[node_p]["betweenness"][x][y] -= ( + DF_tree.nodes[node_p]["betweenness"].loc[y, x] -= ( root_node["betweenness"][added_node][y] * dvxy ) @@ -543,7 +544,7 @@ def _heuristic(k, root, DF_tree, D, nodes, greedy): return node_p, node_m, DF_tree -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def group_closeness_centrality(G, S, weight=None): r"""Compute the group closeness centrality for a group of nodes. @@ -640,7 +641,7 @@ def group_closeness_centrality(G, S, weight=None): return closeness -@nx._dispatch +@nx._dispatchable def group_degree_centrality(G, S): """Compute the group degree centrality for a group of nodes. @@ -692,7 +693,7 @@ def group_degree_centrality(G, S): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def group_in_degree_centrality(G, S): """Compute the group in-degree centrality for a group of nodes. @@ -739,7 +740,7 @@ def group_in_degree_centrality(G, S): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def group_out_degree_centrality(G, S): """Compute the group out-degree centrality for a group of nodes. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/harmonic.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/harmonic.py index 86b5020f9..9cd9f7f08 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/harmonic.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/harmonic.py @@ -6,7 +6,7 @@ __all__ = ["harmonic_centrality"] -@nx._dispatch(edge_attrs="distance") +@nx._dispatchable(edge_attrs="distance") def harmonic_centrality(G, nbunch=None, distance=None, sources=None): r"""Compute harmonic centrality for nodes. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/katz.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/katz.py index 3c18e5aa2..d85ffd2dc 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/katz.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/katz.py @@ -8,7 +8,7 @@ @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def katz_centrality( G, alpha=0.1, @@ -59,7 +59,7 @@ def katz_centrality( beta : scalar or dictionary, optional (default=1.0) Weight attributed to the immediate neighborhood. If not a scalar, the - dictionary must have an value for every node. + dictionary must have a value for every node. max_iter : integer, optional (default=1000) Maximum number of iterations in power method. @@ -128,11 +128,11 @@ def katz_centrality( The iteration will stop after ``max_iter`` iterations or an error tolerance of ``number_of_nodes(G) * tol`` has been reached. - When $\alpha = 1/\lambda_{\max}$ and $\beta=0$, Katz centrality is the same - as eigenvector centrality. + For strongly connected graphs, as $\alpha \to 1/\lambda_{\max}$, and $\beta > 0$, + Katz centrality approaches the results for eigenvector centrality. For directed graphs this finds "left" eigenvectors which corresponds - to the in-edges in the graph. For out-edges Katz centrality + to the in-edges in the graph. For out-edges Katz centrality, first reverse the graph with ``G.reverse()``. References @@ -162,7 +162,7 @@ def katz_centrality( b = beta if set(beta) != set(G): raise nx.NetworkXError( - "beta dictionary " "must have a value for every node" + "beta dictionary must have a value for every node" ) from err # make up to max_iter iterations @@ -183,7 +183,6 @@ def katz_centrality( # normalize vector try: s = 1.0 / math.hypot(*x.values()) - # this should never be zero? except ZeroDivisionError: s = 1.0 else: @@ -195,7 +194,7 @@ def katz_centrality( @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def katz_centrality_numpy(G, alpha=0.1, beta=1.0, normalized=True, weight=None): r"""Compute the Katz centrality for the graph G. @@ -289,11 +288,11 @@ def katz_centrality_numpy(G, alpha=0.1, beta=1.0, normalized=True, weight=None): You can use ``max(nx.adjacency_spectrum(G))`` to get $\lambda_{\max}$ the largest eigenvalue of the adjacency matrix. - When $\alpha = 1/\lambda_{\max}$ and $\beta=0$, Katz centrality is the same - as eigenvector centrality. + For strongly connected graphs, as $\alpha \to 1/\lambda_{\max}$, and $\beta > 0$, + Katz centrality approaches the results for eigenvector centrality. For directed graphs this finds "left" eigenvectors which corresponds - to the in-edges in the graph. For out-edges Katz centrality + to the in-edges in the graph. For out-edges Katz centrality, first reverse the graph with ``G.reverse()``. References @@ -326,6 +325,6 @@ def katz_centrality_numpy(G, alpha=0.1, beta=1.0, normalized=True, weight=None): n = A.shape[0] centrality = np.linalg.solve(np.eye(n, n) - (alpha * A), b).squeeze() - # Normalize: rely on truediv to cast to float + # Normalize: rely on truediv to cast to float, then tolist to make Python numbers norm = np.sign(sum(centrality)) * np.linalg.norm(centrality) if normalized else 1 - return dict(zip(nodelist, centrality / norm)) + return dict(zip(nodelist, (centrality / norm).tolist())) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/laplacian.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/laplacian.py index e0a9a6d51..66207ed21 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/laplacian.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/laplacian.py @@ -6,7 +6,7 @@ __all__ = ["laplacian_centrality"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def laplacian_centrality( G, normalized=True, nodelist=None, weight="weight", walk_type=None, alpha=0.95 ): @@ -50,8 +50,11 @@ def laplacian_centrality( walk_type : string or None, optional (default=None) Optional parameter `walk_type` used when calling :func:`directed_laplacian_matrix `. - If None, the transition matrix is selected depending on the properties - of the graph. Otherwise can be `random`, `lazy`, or `pagerank`. + One of ``"random"``, ``"lazy"``, or ``"pagerank"``. If ``walk_type=None`` + (the default), then a value is selected according to the properties of `G`: + - ``walk_type="random"`` if `G` is strongly connected and aperiodic + - ``walk_type="lazy"`` if `G` is strongly connected but not aperiodic + - ``walk_type="pagerank"`` for all other cases. alpha : real (default = 0.95) Optional parameter `alpha` used when calling @@ -141,6 +144,6 @@ def laplacian_centrality( if normalized: lapl_cent = lapl_cent / full_energy - laplace_centralities_dict[node] = lapl_cent + laplace_centralities_dict[node] = float(lapl_cent) return laplace_centralities_dict diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/load.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/load.py index 9a81cc432..50bc6210b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/load.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/load.py @@ -6,7 +6,7 @@ __all__ = ["load_centrality", "edge_load_centrality"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def newman_betweenness_centrality(G, v=None, cutoff=None, normalized=True, weight=None): """Compute load centrality for nodes. @@ -136,7 +136,7 @@ def _node_betweenness(G, source, cutoff=False, normalized=True, weight=None): load_centrality = newman_betweenness_centrality -@nx._dispatch +@nx._dispatchable def edge_load_centrality(G, cutoff=False): """Compute edge load. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/percolation.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/percolation.py index cc5d5ce6d..0d4c87132 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/percolation.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/percolation.py @@ -11,7 +11,7 @@ __all__ = ["percolation_centrality"] -@nx._dispatch(node_attrs="attribute", edge_attrs="weight") +@nx._dispatchable(node_attrs="attribute", edge_attrs="weight") def percolation_centrality(G, attribute="percolation", states=None, weight=None): r"""Compute the percolation centrality for nodes. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/reaching.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/reaching.py index 7b9eac564..93cb75a96 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/reaching.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/reaching.py @@ -31,7 +31,7 @@ def _average_weight(G, path, weight=None): return total_weight / path_length -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def global_reaching_centrality(G, weight=None, normalized=True): """Returns the global reaching centrality of a directed graph. @@ -119,7 +119,7 @@ def as_distance(u, v, d): return sum(max_lrc - c for c in lrc) / (len(G) - 1) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def local_reaching_centrality(G, v, paths=None, weight=None, normalized=True): """Returns the local reaching centrality of a node in a directed graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/second_order.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/second_order.py index 4bdb1f521..35583cd63 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/second_order.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/second_order.py @@ -39,7 +39,7 @@ @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def second_order_centrality(G, weight="weight"): """Compute the second order centrality for nodes of G. @@ -134,5 +134,8 @@ def _Qj(P, j): ) # eq 3 return dict( - zip(G.nodes, [np.sqrt(2 * np.sum(M[:, i]) - n * (n + 1)) for i in range(n)]) + zip( + G.nodes, + (float(np.sqrt(2 * np.sum(M[:, i]) - n * (n + 1))) for i in range(n)), + ) ) # eq 6 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/subgraph_alg.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/subgraph_alg.py index c615b4892..29a284c54 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/subgraph_alg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/subgraph_alg.py @@ -14,7 +14,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def subgraph_centrality_exp(G): r"""Returns the subgraph centrality for each node of G. @@ -98,7 +98,7 @@ def subgraph_centrality_exp(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def subgraph_centrality(G): r"""Returns subgraph centrality for each node in G. @@ -189,7 +189,7 @@ def subgraph_centrality(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def communicability_betweenness_centrality(G): r"""Returns subgraph communicability for all pairs of nodes in G. @@ -278,7 +278,7 @@ def communicability_betweenness_centrality(G): B[i, :] = 0 B[:, i] = 0 B -= np.diag(np.diag(B)) - cbc[v] = B.sum() + cbc[v] = float(B.sum()) # put row and col back A[i, :] = row A[:, i] = col @@ -286,12 +286,11 @@ def communicability_betweenness_centrality(G): order = len(cbc) if order > 2: scale = 1.0 / ((order - 1.0) ** 2 - (order - 1.0)) - for v in cbc: - cbc[v] *= scale + cbc = {node: value * scale for node, value in cbc.items()} return cbc -@nx._dispatch +@nx._dispatchable def estrada_index(G): r"""Returns the Estrada index of a the graph G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/__init__.cpython-312.pyc index 5dbb1a082..45b2b64dd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality.cpython-312.pyc index 499854e0d..c4a3a2647 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality_subset.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality_subset.cpython-312.pyc index 102f03903..2385e0f52 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality_subset.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_betweenness_centrality_subset.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_closeness_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_closeness_centrality.cpython-312.pyc index e6c0e550d..93c0acd72 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_closeness_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_closeness_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality.cpython-312.pyc index 992af0c30..8fd6c5033 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality_subset.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality_subset.cpython-312.pyc index cd8fb0cd1..908c0707a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality_subset.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_betweenness_centrality_subset.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_closeness.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_closeness.cpython-312.pyc index bf185e8ef..31c06d0f8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_closeness.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_current_flow_closeness.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_degree_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_degree_centrality.cpython-312.pyc index 823af4886..58566ff0e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_degree_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_degree_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_dispersion.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_dispersion.cpython-312.pyc index 3453ee976..da51caa39 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_dispersion.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_dispersion.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_eigenvector_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_eigenvector_centrality.cpython-312.pyc index cf4ae30bc..d95939364 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_eigenvector_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_eigenvector_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_group.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_group.cpython-312.pyc index 8ef648de9..a93324d64 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_group.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_group.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_harmonic_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_harmonic_centrality.cpython-312.pyc index 51f3b6aea..d85b8ae6e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_harmonic_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_harmonic_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_katz_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_katz_centrality.cpython-312.pyc index 7fc0b9249..9c6e11b94 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_katz_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_katz_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_laplacian_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_laplacian_centrality.cpython-312.pyc index 00b7ba5db..14728956d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_laplacian_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_laplacian_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_load_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_load_centrality.cpython-312.pyc index f1859802a..b62760264 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_load_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_load_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_percolation_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_percolation_centrality.cpython-312.pyc index 9b77f7085..e102c6b85 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_percolation_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_percolation_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_reaching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_reaching.cpython-312.pyc index b7af77f99..309ebde13 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_reaching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_reaching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_second_order_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_second_order_centrality.cpython-312.pyc index 0fbc7ef17..5cf8002b2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_second_order_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_second_order_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_subgraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_subgraph.cpython-312.pyc index c74353888..94569b8e1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_subgraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_subgraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_trophic.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_trophic.cpython-312.pyc index 1f85d4814..fd300955d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_trophic.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_trophic.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_voterank.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_voterank.cpython-312.pyc index 0e3225197..a3738317a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_voterank.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/tests/__pycache__/test_voterank.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/trophic.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/trophic.py index cfc7ea4f2..6d1ba960b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/trophic.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/trophic.py @@ -6,7 +6,7 @@ @not_implemented_for("undirected") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def trophic_levels(G, weight="weight"): r"""Compute the trophic levels of nodes. @@ -76,13 +76,13 @@ def trophic_levels(G, weight="weight"): # all other nodes have levels as calculated nonzero_node_ids = (node_id for node_id, degree in G.in_degree if degree != 0) for i, node_id in enumerate(nonzero_node_ids): - levels[node_id] = y[i] + levels[node_id] = y.item(i) return levels @not_implemented_for("undirected") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def trophic_differences(G, weight="weight"): r"""Compute the trophic differences of the edges of a directed graph. @@ -117,7 +117,7 @@ def trophic_differences(G, weight="weight"): @not_implemented_for("undirected") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def trophic_incoherence_parameter(G, weight="weight", cannibalism=False): r"""Compute the trophic incoherence parameter of a graph. @@ -159,4 +159,4 @@ def trophic_incoherence_parameter(G, weight="weight", cannibalism=False): # Avoid copy otherwise G_2 = G diffs = trophic_differences(G_2, weight=weight) - return np.std(list(diffs.values())) + return float(np.std(list(diffs.values()))) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/voterank_alg.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/voterank_alg.py index f9cf43c78..063dfdd64 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/voterank_alg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/centrality/voterank_alg.py @@ -4,12 +4,12 @@ __all__ = ["voterank"] -@nx._dispatch +@nx._dispatchable def voterank(G, number_of_nodes=None): """Select a list of influential nodes in a graph using VoteRank algorithm VoteRank [1]_ computes a ranking of the nodes in a graph G based on a - voting scheme. With VoteRank, all nodes vote for each of its in-neighbours + voting scheme. With VoteRank, all nodes vote for each of its in-neighbors and the node with the highest votes is elected iteratively. The voting ability of out-neighbors of elected nodes is decreased in subsequent turns. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chains.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chains.py index 289bc1c3d..ae342d9c8 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chains.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chains.py @@ -8,7 +8,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def chain_decomposition(G, root=None): """Returns the chain decomposition of a graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chordal.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chordal.py index 2aa567983..6bd3ccd2e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chordal.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/chordal.py @@ -28,7 +28,7 @@ class NetworkXTreewidthBoundExceeded(nx.NetworkXException): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def is_chordal(G): """Checks whether G is a chordal graph. @@ -88,7 +88,7 @@ def is_chordal(G): return len(_find_chordality_breaker(G)) == 0 -@nx._dispatch +@nx._dispatchable def find_induced_nodes(G, s, t, treewidth_bound=sys.maxsize): """Returns the set of induced nodes in the path from s to t. @@ -168,7 +168,7 @@ def find_induced_nodes(G, s, t, treewidth_bound=sys.maxsize): return induced_nodes -@nx._dispatch +@nx._dispatchable def chordal_graph_cliques(G): """Returns all maximal cliques of a chordal graph. @@ -241,7 +241,7 @@ def chordal_graph_cliques(G): yield frozenset(clique_wanna_be) -@nx._dispatch +@nx._dispatchable def chordal_graph_treewidth(G): """Returns the treewidth of the chordal graph G. @@ -339,6 +339,8 @@ def _find_chordality_breaker(G, s=None, treewidth_bound=sys.maxsize): It ignores any self loops. """ + if len(G) == 0: + raise nx.NetworkXPointlessConcept("Graph has no nodes.") unnumbered = set(G) if s is None: s = arbitrary_element(G) @@ -367,7 +369,7 @@ def _find_chordality_breaker(G, s=None, treewidth_bound=sys.maxsize): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def complete_to_chordal_graph(G): """Return a copy of G completed to a chordal graph diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/clique.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/clique.py index 7fd7e8166..5f959dd46 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/clique.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/clique.py @@ -26,7 +26,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def enumerate_all_cliques(G): """Returns all cliques in an undirected graph. @@ -98,7 +98,7 @@ def enumerate_all_cliques(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def find_cliques(G, nodes=None): """Returns all maximal cliques in an undirected graph. @@ -294,7 +294,7 @@ def find_cliques(G, nodes=None): # TODO Should this also be not implemented for directed graphs? -@nx._dispatch +@nx._dispatchable def find_cliques_recursive(G, nodes=None): """Returns all maximal cliques in a graph. @@ -412,7 +412,7 @@ def expand(subg, cand): return expand(subg_init, cand_init) -@nx._dispatch +@nx._dispatchable(returns_graph=True) def make_max_clique_graph(G, create_using=None): """Returns the maximal clique graph of the given graph. @@ -437,8 +437,9 @@ def make_max_clique_graph(G, create_using=None): This function behaves like the following code:: import networkx as nx + G = nx.make_clique_bipartite(G) - cliques = [v for v in G.nodes() if G.nodes[v]['bipartite'] == 0] + cliques = [v for v in G.nodes() if G.nodes[v]["bipartite"] == 0] G = nx.bipartite.projected_graph(G, cliques) G = nx.relabel_nodes(G, {-v: v - 1 for v in G}) @@ -459,7 +460,7 @@ def make_max_clique_graph(G, create_using=None): return B -@nx._dispatch +@nx._dispatchable(returns_graph=True) def make_clique_bipartite(G, fpos=None, create_using=None, name=None): """Returns the bipartite clique graph corresponding to `G`. @@ -508,7 +509,7 @@ def make_clique_bipartite(G, fpos=None, create_using=None, name=None): return B -@nx._dispatch +@nx._dispatchable def node_clique_number(G, nodes=None, cliques=None, separate_nodes=False): """Returns the size of the largest maximal clique containing each given node. @@ -698,7 +699,7 @@ def find_max_weight_clique(self): @not_implemented_for("directed") -@nx._dispatch(node_attrs="weight") +@nx._dispatchable(node_attrs="weight") def max_weight_clique(G, weight="weight"): """Find a maximum weight clique in G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cluster.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cluster.py index 0500852a7..6c91ad281 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cluster.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cluster.py @@ -17,7 +17,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def triangles(G, nodes=None): """Compute the number of triangles. @@ -67,20 +67,18 @@ def triangles(G, nodes=None): # dict used to avoid visiting the same nodes twice # this allows calculating/counting each triangle only once - later_neighbors = {} + later_nbrs = {} # iterate over the nodes in a graph for node, neighbors in G.adjacency(): - later_neighbors[node] = { - n for n in neighbors if n not in later_neighbors and n != node - } + later_nbrs[node] = {n for n in neighbors if n not in later_nbrs and n != node} # instantiate Counter for each node to include isolated nodes # add 1 to the count if a nodes neighbor's neighbor is also a neighbor triangle_counts = Counter(dict.fromkeys(G, 0)) - for node1, neighbors in later_neighbors.items(): + for node1, neighbors in later_nbrs.items(): for node2 in neighbors: - third_nodes = neighbors & later_neighbors[node2] + third_nodes = neighbors & later_nbrs[node2] m = len(third_nodes) triangle_counts[node1] += m triangle_counts[node2] += m @@ -145,10 +143,10 @@ def wt(u, v): # Only compute the edge weight once, before the inner inner # loop. wij = wt(i, j) - weighted_triangles += sum( - np.cbrt([(wij * wt(j, k) * wt(k, i)) for k in inbrs & jnbrs]) - ) - yield (i, len(inbrs), 2 * weighted_triangles) + weighted_triangles += np.cbrt( + [(wij * wt(j, k) * wt(k, i)) for k in inbrs & jnbrs] + ).sum() + yield (i, len(inbrs), 2 * float(weighted_triangles)) @not_implemented_for("multigraph") @@ -215,41 +213,41 @@ def wt(u, v): for j in ipreds: jpreds = set(G._pred[j]) - {j} jsuccs = set(G._succ[j]) - {j} - directed_triangles += sum( - np.cbrt([(wt(j, i) * wt(k, i) * wt(k, j)) for k in ipreds & jpreds]) - ) - directed_triangles += sum( - np.cbrt([(wt(j, i) * wt(k, i) * wt(j, k)) for k in ipreds & jsuccs]) - ) - directed_triangles += sum( - np.cbrt([(wt(j, i) * wt(i, k) * wt(k, j)) for k in isuccs & jpreds]) - ) - directed_triangles += sum( - np.cbrt([(wt(j, i) * wt(i, k) * wt(j, k)) for k in isuccs & jsuccs]) - ) + directed_triangles += np.cbrt( + [(wt(j, i) * wt(k, i) * wt(k, j)) for k in ipreds & jpreds] + ).sum() + directed_triangles += np.cbrt( + [(wt(j, i) * wt(k, i) * wt(j, k)) for k in ipreds & jsuccs] + ).sum() + directed_triangles += np.cbrt( + [(wt(j, i) * wt(i, k) * wt(k, j)) for k in isuccs & jpreds] + ).sum() + directed_triangles += np.cbrt( + [(wt(j, i) * wt(i, k) * wt(j, k)) for k in isuccs & jsuccs] + ).sum() for j in isuccs: jpreds = set(G._pred[j]) - {j} jsuccs = set(G._succ[j]) - {j} - directed_triangles += sum( - np.cbrt([(wt(i, j) * wt(k, i) * wt(k, j)) for k in ipreds & jpreds]) - ) - directed_triangles += sum( - np.cbrt([(wt(i, j) * wt(k, i) * wt(j, k)) for k in ipreds & jsuccs]) - ) - directed_triangles += sum( - np.cbrt([(wt(i, j) * wt(i, k) * wt(k, j)) for k in isuccs & jpreds]) - ) - directed_triangles += sum( - np.cbrt([(wt(i, j) * wt(i, k) * wt(j, k)) for k in isuccs & jsuccs]) - ) + directed_triangles += np.cbrt( + [(wt(i, j) * wt(k, i) * wt(k, j)) for k in ipreds & jpreds] + ).sum() + directed_triangles += np.cbrt( + [(wt(i, j) * wt(k, i) * wt(j, k)) for k in ipreds & jsuccs] + ).sum() + directed_triangles += np.cbrt( + [(wt(i, j) * wt(i, k) * wt(k, j)) for k in isuccs & jpreds] + ).sum() + directed_triangles += np.cbrt( + [(wt(i, j) * wt(i, k) * wt(j, k)) for k in isuccs & jsuccs] + ).sum() dtotal = len(ipreds) + len(isuccs) dbidirectional = len(ipreds & isuccs) - yield (i, dtotal, dbidirectional, directed_triangles) + yield (i, dtotal, dbidirectional, float(directed_triangles)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def average_clustering(G, nodes=None, weight=None, count_zeros=True): r"""Compute the average clustering coefficient for the graph G. @@ -309,7 +307,7 @@ def average_clustering(G, nodes=None, weight=None, count_zeros=True): return sum(c) / len(c) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def clustering(G, nodes=None, weight=None): r"""Compute the clustering coefficient for nodes. @@ -424,7 +422,7 @@ def clustering(G, nodes=None, weight=None): return clusterc -@nx._dispatch +@nx._dispatchable def transitivity(G): r"""Compute graph transitivity, the fraction of all possible triangles present in G. @@ -447,6 +445,10 @@ def transitivity(G): out : float Transitivity + Notes + ----- + Self loops are ignored. + Examples -------- >>> G = nx.complete_graph(5) @@ -463,7 +465,7 @@ def transitivity(G): return 0 if triangles == 0 else triangles / contri -@nx._dispatch +@nx._dispatchable def square_clustering(G, nodes=None): r"""Compute the squares clustering coefficient for nodes. @@ -542,7 +544,7 @@ def square_clustering(G, nodes=None): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def generalized_degree(G, nodes=None): r"""Compute the generalized degree for nodes. @@ -583,6 +585,8 @@ def generalized_degree(G, nodes=None): Notes ----- + Self loops are ignored. + In a network of N nodes, the highest triangle multiplicity an edge can have is N-2. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/__init__.cpython-312.pyc index 1eee84ffd..f8b03f549 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/equitable_coloring.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/equitable_coloring.cpython-312.pyc index d12bbcade..733d0efc1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/equitable_coloring.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/equitable_coloring.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/greedy_coloring.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/greedy_coloring.cpython-312.pyc index b55bd63d8..766a462af 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/greedy_coloring.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/__pycache__/greedy_coloring.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/equitable_coloring.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/equitable_coloring.py index af1fb5a7e..e464a0744 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/equitable_coloring.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/equitable_coloring.py @@ -9,14 +9,14 @@ __all__ = ["equitable_color"] -@nx._dispatch +@nx._dispatchable def is_coloring(G, coloring): """Determine if the coloring is a valid coloring for the graph G.""" # Verify that the coloring is valid. return all(coloring[s] != coloring[d] for s, d in G.edges) -@nx._dispatch +@nx._dispatchable def is_equitable(G, coloring, num_colors=None): """Determines if the coloring is valid and equitable for the graph G.""" @@ -112,7 +112,7 @@ def move_witnesses(src_color, dst_color, N, H, F, C, T_cal, L): X = Y -@nx._dispatch +@nx._dispatchable(mutates_input=True) def pad_graph(G, num_colors): """Add a disconnected complete clique K_p such that the number of nodes in the graph becomes a multiple of `num_colors`. @@ -386,7 +386,7 @@ def procedure_P(V_minus, V_plus, N, H, F, C, L, excluded_colors=None): break -@nx._dispatch +@nx._dispatchable def equitable_color(G, num_colors): """Provides an equitable coloring for nodes of `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/greedy_coloring.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/greedy_coloring.py index 170b2275d..61bc95367 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/greedy_coloring.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/greedy_coloring.py @@ -20,7 +20,6 @@ ] -@nx._dispatch def strategy_largest_first(G, colors): """Returns a list of the nodes of ``G`` in decreasing order by degree. @@ -32,7 +31,6 @@ def strategy_largest_first(G, colors): @py_random_state(2) -@nx._dispatch def strategy_random_sequential(G, colors, seed=None): """Returns a random permutation of the nodes of ``G`` as a list. @@ -47,7 +45,6 @@ def strategy_random_sequential(G, colors, seed=None): return nodes -@nx._dispatch def strategy_smallest_last(G, colors): """Returns a deque of the nodes of ``G``, "smallest" last. @@ -121,7 +118,6 @@ def _maximal_independent_set(G): return result -@nx._dispatch def strategy_independent_set(G, colors): """Uses a greedy independent set removal strategy to determine the colors. @@ -146,7 +142,6 @@ def strategy_independent_set(G, colors): yield from nodes -@nx._dispatch def strategy_connected_sequential_bfs(G, colors): """Returns an iterable over nodes in ``G`` in the order given by a breadth-first traversal. @@ -160,7 +155,6 @@ def strategy_connected_sequential_bfs(G, colors): return strategy_connected_sequential(G, colors, "bfs") -@nx._dispatch def strategy_connected_sequential_dfs(G, colors): """Returns an iterable over nodes in ``G`` in the order given by a depth-first traversal. @@ -174,7 +168,6 @@ def strategy_connected_sequential_dfs(G, colors): return strategy_connected_sequential(G, colors, "dfs") -@nx._dispatch def strategy_connected_sequential(G, colors, traversal="bfs"): """Returns an iterable over nodes in ``G`` in the order given by a breadth-first or depth-first traversal. @@ -207,7 +200,6 @@ def strategy_connected_sequential(G, colors, traversal="bfs"): yield end -@nx._dispatch def strategy_saturation_largest_first(G, colors): """Iterates over all the nodes of ``G`` in "saturation order" (also known as "DSATUR"). @@ -269,12 +261,12 @@ def strategy_saturation_largest_first(G, colors): } -@nx._dispatch +@nx._dispatchable def greedy_color(G, strategy="largest_first", interchange=False): """Color a graph using various strategies of greedy graph coloring. Attempts to color a graph using as few colors as possible, where no - neighbours of a node can have same color as the node itself. The + neighbors of a node can have same color as the node itself. The given strategy determines the order in which nodes are colored. The strategies are described in [1]_, and smallest-last is based on @@ -355,7 +347,7 @@ def greedy_color(G, strategy="largest_first", interchange=False): strategy = STRATEGIES.get(strategy, strategy) if not callable(strategy): raise nx.NetworkXError( - "strategy must be callable or a valid string. " f"{strategy} not valid." + f"strategy must be callable or a valid string. {strategy} not valid." ) # Perform some validation on the arguments before executing any # strategy functions. @@ -371,11 +363,11 @@ def greedy_color(G, strategy="largest_first", interchange=False): if interchange: return _greedy_coloring_with_interchange(G, nodes) for u in nodes: - # Set to keep track of colors of neighbours - neighbour_colors = {colors[v] for v in G[u] if v in colors} + # Set to keep track of colors of neighbors + nbr_colors = {colors[v] for v in G[u] if v in colors} # Find the first unused color. for color in itertools.count(): - if color not in neighbour_colors: + if color not in nbr_colors: break # Assign the new color to the current node. colors[u] = color diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/__init__.cpython-312.pyc index fcc03334d..529861b8b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/test_coloring.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/test_coloring.cpython-312.pyc index 941d1665a..f52086c70 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/test_coloring.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/__pycache__/test_coloring.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/test_coloring.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/test_coloring.py index a2a4e3958..dd2842d54 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/test_coloring.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/coloring/tests/test_coloring.py @@ -446,13 +446,13 @@ def color_remaining_nodes( ) for u in node_iterator: - # Set to keep track of colors of neighbours - neighbour_colors = { + # Set to keep track of colors of neighbors + nbr_colors = { aux_colored_nodes[v] for v in G[u] if v in aux_colored_nodes } # Find the first unused color. for color in itertools.count(): - if color not in neighbour_colors: + if color not in nbr_colors: break aux_colored_nodes[u] = color color_assignments.append((u, color)) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/communicability_alg.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/communicability_alg.py index c9144a7b8..07316dc3a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/communicability_alg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/communicability_alg.py @@ -9,7 +9,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def communicability(G): r"""Returns communicability between all pairs of nodes in G. @@ -91,7 +91,7 @@ def communicability(G): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def communicability_exp(G): r"""Returns communicability between all pairs of nodes in G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__init__.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__init__.py index fa782201d..40549aff2 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__init__.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__init__.py @@ -14,6 +14,7 @@ """ from networkx.algorithms.community.asyn_fluid import * from networkx.algorithms.community.centrality import * +from networkx.algorithms.community.divisive import * from networkx.algorithms.community.kclique import * from networkx.algorithms.community.kernighan_lin import * from networkx.algorithms.community.label_propagation import * diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/__init__.cpython-312.pyc index 38ede4be9..5b8f64dbc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/asyn_fluid.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/asyn_fluid.cpython-312.pyc index b8845111e..f4d8c4643 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/asyn_fluid.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/asyn_fluid.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/centrality.cpython-312.pyc index d6f038d87..b9fee83c4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/community_utils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/community_utils.cpython-312.pyc index 0ffab41fd..8c2fd6253 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/community_utils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/community_utils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/divisive.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/divisive.cpython-312.pyc new file mode 100644 index 000000000..a01c7b49f Binary files /dev/null and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/divisive.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kclique.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kclique.cpython-312.pyc index 726d1942d..9aee70088 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kclique.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kclique.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kernighan_lin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kernighan_lin.cpython-312.pyc index 16775fc51..e8ed7890f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kernighan_lin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/kernighan_lin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/label_propagation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/label_propagation.cpython-312.pyc index b8b5a8576..32f713908 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/label_propagation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/label_propagation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/louvain.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/louvain.cpython-312.pyc index f7da63ddb..a08dc020f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/louvain.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/louvain.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/lukes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/lukes.cpython-312.pyc index c861796a7..64d439eec 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/lukes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/lukes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/modularity_max.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/modularity_max.cpython-312.pyc index 02c1b9f4e..cc20a45fa 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/modularity_max.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/modularity_max.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/quality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/quality.cpython-312.pyc index 73d9b45ef..e88f2214f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/quality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/__pycache__/quality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/asyn_fluid.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/asyn_fluid.py index 1a0029ae7..fea72c1bf 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/asyn_fluid.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/asyn_fluid.py @@ -10,9 +10,10 @@ __all__ = ["asyn_fluidc"] -@not_implemented_for("directed", "multigraph") +@not_implemented_for("directed") +@not_implemented_for("multigraph") @py_random_state(3) -@nx._dispatch +@nx._dispatchable def asyn_fluidc(G, k, max_iter=100, seed=None): """Returns communities in `G` as detected by Fluid Communities algorithm. @@ -24,7 +25,7 @@ def asyn_fluidc(G, k, max_iter=100, seed=None): The algorithm proceeds as follows. First each of the initial k communities is initialized in a random vertex in the graph. Then the algorithm iterates over all vertices in a random order, updating the community of each vertex - based on its own community and the communities of its neighbours. This + based on its own community and the communities of its neighbors. This process is performed several times until convergence. At all times, each community has a total density of 1, which is equally distributed among the vertices it contains. If a vertex changes of @@ -102,7 +103,7 @@ def asyn_fluidc(G, k, max_iter=100, seed=None): com_counter.update({communities[vertex]: density[communities[vertex]]}) except KeyError: pass - # Gather neighbour vertex communities + # Gather neighbor vertex communities for v in G[vertex]: try: com_counter.update({communities[v]: density[communities[v]]}) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/centrality.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/centrality.py index efdc98460..43281701d 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/centrality.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/centrality.py @@ -5,7 +5,7 @@ __all__ = ["girvan_newman"] -@nx._dispatch(preserve_edge_attrs="most_valuable_edge") +@nx._dispatchable(preserve_edge_attrs="most_valuable_edge") def girvan_newman(G, most_valuable_edge=None): """Finds communities in a graph using the Girvan–Newman method. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/community_utils.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/community_utils.py index 5e4727eec..b57cd9881 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/community_utils.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/community_utils.py @@ -4,7 +4,7 @@ __all__ = ["is_partition"] -@nx._dispatch +@nx._dispatchable def is_partition(G, communities): """Returns *True* if `communities` is a partition of the nodes of `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/divisive.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/divisive.py new file mode 100644 index 000000000..1fc395946 --- /dev/null +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/divisive.py @@ -0,0 +1,196 @@ +import functools + +import networkx as nx + +__all__ = [ + "edge_betweenness_partition", + "edge_current_flow_betweenness_partition", +] + + +@nx._dispatchable(edge_attrs="weight") +def edge_betweenness_partition(G, number_of_sets, *, weight=None): + """Partition created by iteratively removing the highest edge betweenness edge. + + This algorithm works by calculating the edge betweenness for all + edges and removing the edge with the highest value. It is then + determined whether the graph has been broken into at least + `number_of_sets` connected components. + If not the process is repeated. + + Parameters + ---------- + G : NetworkX Graph, DiGraph or MultiGraph + Graph to be partitioned + + number_of_sets : int + Number of sets in the desired partition of the graph + + weight : key, optional, default=None + The key to use if using weights for edge betweenness calculation + + Returns + ------- + C : list of sets + Partition of the nodes of G + + Raises + ------ + NetworkXError + If number_of_sets is <= 0 or if number_of_sets > len(G) + + Examples + -------- + >>> G = nx.karate_club_graph() + >>> part = nx.community.edge_betweenness_partition(G, 2) + >>> {0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 16, 17, 19, 21} in part + True + >>> {2, 8, 9, 14, 15, 18, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33} in part + True + + See Also + -------- + edge_current_flow_betweenness_partition + + Notes + ----- + This algorithm is fairly slow, as both the calculation of connected + components and edge betweenness relies on all pairs shortest + path algorithms. They could potentially be combined to cut down + on overall computation time. + + References + ---------- + .. [1] Santo Fortunato 'Community Detection in Graphs' Physical Reports + Volume 486, Issue 3-5 p. 75-174 + http://arxiv.org/abs/0906.0612 + """ + if number_of_sets <= 0: + raise nx.NetworkXError("number_of_sets must be >0") + if number_of_sets == 1: + return [set(G)] + if number_of_sets == len(G): + return [{n} for n in G] + if number_of_sets > len(G): + raise nx.NetworkXError("number_of_sets must be <= len(G)") + + H = G.copy() + partition = list(nx.connected_components(H)) + while len(partition) < number_of_sets: + ranking = nx.edge_betweenness_centrality(H, weight=weight) + edge = max(ranking, key=ranking.get) + H.remove_edge(*edge) + partition = list(nx.connected_components(H)) + return partition + + +@nx._dispatchable(edge_attrs="weight") +def edge_current_flow_betweenness_partition(G, number_of_sets, *, weight=None): + """Partition created by removing the highest edge current flow betweenness edge. + + This algorithm works by calculating the edge current flow + betweenness for all edges and removing the edge with the + highest value. It is then determined whether the graph has + been broken into at least `number_of_sets` connected + components. If not the process is repeated. + + Parameters + ---------- + G : NetworkX Graph, DiGraph or MultiGraph + Graph to be partitioned + + number_of_sets : int + Number of sets in the desired partition of the graph + + weight : key, optional (default=None) + The edge attribute key to use as weights for + edge current flow betweenness calculations + + Returns + ------- + C : list of sets + Partition of G + + Raises + ------ + NetworkXError + If number_of_sets is <= 0 or number_of_sets > len(G) + + Examples + -------- + >>> G = nx.karate_club_graph() + >>> part = nx.community.edge_current_flow_betweenness_partition(G, 2) + >>> {0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 16, 17, 19, 21} in part + True + >>> {8, 14, 15, 18, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33} in part + True + + + See Also + -------- + edge_betweenness_partition + + Notes + ----- + This algorithm is extremely slow, as the recalculation of the edge + current flow betweenness is extremely slow. + + References + ---------- + .. [1] Santo Fortunato 'Community Detection in Graphs' Physical Reports + Volume 486, Issue 3-5 p. 75-174 + http://arxiv.org/abs/0906.0612 + """ + if number_of_sets <= 0: + raise nx.NetworkXError("number_of_sets must be >0") + elif number_of_sets == 1: + return [set(G)] + elif number_of_sets == len(G): + return [{n} for n in G] + elif number_of_sets > len(G): + raise nx.NetworkXError("number_of_sets must be <= len(G)") + + rank = functools.partial( + nx.edge_current_flow_betweenness_centrality, normalized=False, weight=weight + ) + + # current flow requires a connected network so we track the components explicitly + H = G.copy() + partition = list(nx.connected_components(H)) + if len(partition) > 1: + Hcc_subgraphs = [H.subgraph(cc).copy() for cc in partition] + else: + Hcc_subgraphs = [H] + + ranking = {} + for Hcc in Hcc_subgraphs: + ranking.update(rank(Hcc)) + + while len(partition) < number_of_sets: + edge = max(ranking, key=ranking.get) + for cc, Hcc in zip(partition, Hcc_subgraphs): + if edge[0] in cc: + Hcc.remove_edge(*edge) + del ranking[edge] + splitcc_list = list(nx.connected_components(Hcc)) + if len(splitcc_list) > 1: + # there are 2 connected components. split off smaller one + cc_new = min(splitcc_list, key=len) + Hcc_new = Hcc.subgraph(cc_new).copy() + # update edge rankings for Hcc_new + newranks = rank(Hcc_new) + for e, r in newranks.items(): + ranking[e if e in ranking else e[::-1]] = r + # append new cc and Hcc to their lists. + partition.append(cc_new) + Hcc_subgraphs.append(Hcc_new) + + # leave existing cc and Hcc in their lists, but shrink them + Hcc.remove_nodes_from(cc_new) + cc.difference_update(cc_new) + # update edge rankings for Hcc whether it was split or not + newranks = rank(Hcc) + for e, r in newranks.items(): + ranking[e if e in ranking else e[::-1]] = r + break + return partition diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kclique.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kclique.py index 60433669c..c72491042 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kclique.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kclique.py @@ -5,7 +5,7 @@ __all__ = ["k_clique_communities"] -@nx._dispatch +@nx._dispatchable def k_clique_communities(G, k, cliques=None): """Find k-clique communities in graph using the percolation method. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kernighan_lin.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kernighan_lin.py index a18c7779b..f6397d82b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kernighan_lin.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/kernighan_lin.py @@ -42,7 +42,7 @@ def _update_costs(costs_x, x): @not_implemented_for("directed") @py_random_state(4) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def kernighan_lin_bisection(G, partition=None, max_iter=10, weight="weight", seed=None): """Partition a graph into two blocks using the Kernighan–Lin algorithm. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/label_propagation.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/label_propagation.py index c10938d62..869085576 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/label_propagation.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/label_propagation.py @@ -14,7 +14,7 @@ @py_random_state("seed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def fast_label_propagation_communities(G, *, weight=None, seed=None): """Returns communities in `G` as detected by fast label propagation. @@ -35,21 +35,21 @@ def fast_label_propagation_communities(G, *, weight=None, seed=None): Parameters ---------- G : Graph, DiGraph, MultiGraph, or MultiDiGraph - Any NetworkX graph. + Any NetworkX graph. weight : string, or None (default) - The edge attribute representing a non-negative weight of an edge. If None, - each edge is assumed to have weight one. The weight of an edge is used in - determining the frequency with which a label appears among the neighbors of - a node (edge with weight `w` is equivalent to `w` unweighted edges). + The edge attribute representing a non-negative weight of an edge. If None, + each edge is assumed to have weight one. The weight of an edge is used in + determining the frequency with which a label appears among the neighbors of + a node (edge with weight `w` is equivalent to `w` unweighted edges). seed : integer, random_state, or None (default) - Indicator of random number generation state. See :ref:`Randomness`. + Indicator of random number generation state. See :ref:`Randomness`. Returns ------- communities : iterable - Iterable of communities given as sets of nodes. + Iterable of communities given as sets of nodes. Notes ----- @@ -59,8 +59,8 @@ def fast_label_propagation_communities(G, *, weight=None, seed=None): References ---------- .. [1] Vincent A. Traag & Lovro Šubelj. "Large network community detection by - fast label propagation." Scientific Reports 13 (2023): 2701. - https://doi.org/10.1038/s41598-023-29610-z + fast label propagation." Scientific Reports 13 (2023): 2701. + https://doi.org/10.1038/s41598-023-29610-z """ # Queue of nodes to be processed. @@ -137,7 +137,7 @@ def _fast_label_count(G, comms, node, weight=None): @py_random_state(2) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def asyn_lpa_communities(G, weight=None, seed=None): """Returns communities in `G` as detected by asynchronous label propagation. @@ -233,7 +233,7 @@ def asyn_lpa_communities(G, weight=None, seed=None): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def label_propagation_communities(G): """Generates community sets determined by label propagation @@ -316,7 +316,7 @@ def _most_frequent_labels(node, labeling, G): # accordingly, hence the immediate if statement. return {labeling[node]} - # Compute the frequencies of all neighbours of node + # Compute the frequencies of all neighbors of node freqs = Counter(labeling[q] for q in G[node]) max_freq = max(freqs.values()) return {label for label, freq in freqs.items() if freq == max_freq} diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/louvain.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/louvain.py index 772f4d79d..959c93a51 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/louvain.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/louvain.py @@ -1,6 +1,7 @@ """Function for detecting communities based on Louvain Community Detection Algorithm""" +import itertools from collections import defaultdict, deque import networkx as nx @@ -11,9 +12,9 @@ @py_random_state("seed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def louvain_communities( - G, weight="weight", resolution=1, threshold=0.0000001, seed=None + G, weight="weight", resolution=1, threshold=0.0000001, max_level=None, seed=None ): r"""Find the best partition of a graph using the Louvain Community Detection Algorithm. @@ -56,7 +57,7 @@ def louvain_communities( increased modularity. The above two phases are executed until no modularity gain is achieved (or is less than - the `threshold`). + the `threshold`, or until `max_levels` is reached). Be careful with self-loops in the input graph. These are treated as previously reduced communities -- as if the process had been started @@ -79,6 +80,10 @@ def louvain_communities( Modularity gain threshold for each level. If the gain of modularity between 2 levels of the algorithm is less than the given threshold then the algorithm stops and returns the resulting communities. + max_level : int or None, optional (default=None) + The maximum number of levels (steps of the algorithm) to compute. + Must be a positive integer or None. If None, then there is no max + level and the threshold parameter determines the stopping condition. seed : integer, random_state, or None (default) Indicator of random number generation state. See :ref:`Randomness`. @@ -115,13 +120,17 @@ def louvain_communities( louvain_partitions """ - d = louvain_partitions(G, weight, resolution, threshold, seed) - q = deque(d, maxlen=1) - return q.pop() + partitions = louvain_partitions(G, weight, resolution, threshold, seed) + if max_level is not None: + if max_level <= 0: + raise ValueError("max_level argument must be a positive integer or None") + partitions = itertools.islice(partitions, max_level) + final_partition = deque(partitions, maxlen=1) + return final_partition.pop() @py_random_state("seed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def louvain_partitions( G, weight="weight", resolution=1, threshold=0.0000001, seed=None ): @@ -240,7 +249,7 @@ def _one_level(G, m, partition, resolution=1, is_directed=False, seed=None): out_degrees = dict(G.out_degree(weight="weight")) Stot_in = list(in_degrees.values()) Stot_out = list(out_degrees.values()) - # Calculate weights for both in and out neighbours without considering self-loops + # Calculate weights for both in and out neighbors without considering self-loops nbrs = {} for u in G: nbrs[u] = defaultdict(float) @@ -327,7 +336,7 @@ def _neighbor_weights(nbrs, node2com): Parameters ---------- nbrs : dictionary - Dictionary with nodes' neighbours as keys and their edge weight as value. + Dictionary with nodes' neighbors as keys and their edge weight as value. node2com : dictionary Dictionary with all graph's nodes as keys and their community index as value. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/lukes.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/lukes.py index 600a4db63..08dd7cd52 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/lukes.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/lukes.py @@ -25,7 +25,7 @@ def _split_n_from(n, min_size_of_first_part): yield p1, n - p1 -@nx._dispatch(node_attrs="node_weight", edge_attrs="edge_weight") +@nx._dispatchable(node_attrs="node_weight", edge_attrs="edge_weight") def lukes_partitioning(G, max_size, node_weight=None, edge_weight=None): """Optimal partitioning of a weighted tree using the Lukes algorithm. @@ -175,6 +175,7 @@ def _concatenate_or_merge(partition_1, partition_2, x, i, ref_weight): t_G.nodes[inner][PKEY] = {} slot = safe_G.nodes[inner][node_weight] t_G.nodes[inner][PKEY][slot] = [{inner}] + nx._clear_cache(t_G) # CORE ALGORITHM ----------------------- while True: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/modularity_max.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/modularity_max.py index aba3267c3..f465e01c6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/modularity_max.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/modularity_max.py @@ -223,7 +223,7 @@ def _greedy_modularity_communities_generator(G, weight=None, resolution=1): yield communities.values() -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def greedy_modularity_communities( G, weight=None, @@ -309,6 +309,9 @@ def greedy_modularity_communities( .. [4] Newman, M. E. J."Analysis of weighted networks" Physical Review E 70(5 Pt 2):056131, 2004. """ + if not G.size(): + return [{n} for n in G] + if (cutoff < 1) or (cutoff > G.number_of_nodes()): raise ValueError(f"cutoff must be between 1 and {len(G)}. Got {cutoff}.") if best_n is not None: @@ -353,7 +356,7 @@ def greedy_modularity_communities( @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def naive_greedy_modularity_communities(G, resolution=1, weight=None): r"""Find communities in G using greedy modularity maximization. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/quality.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/quality.py index ab86b0911..f09a6d454 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/quality.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/quality.py @@ -58,7 +58,7 @@ def _require_partition(G, partition): require_partition = argmap(_require_partition, (0, 1)) -@nx._dispatch +@nx._dispatchable def intra_community_edges(G, partition): """Returns the number of intra-community edges for a partition of `G`. @@ -76,7 +76,7 @@ def intra_community_edges(G, partition): return sum(G.subgraph(block).size() for block in partition) -@nx._dispatch +@nx._dispatchable def inter_community_edges(G, partition): """Returns the number of inter-community edges for a partition of `G`. according to the given @@ -108,7 +108,7 @@ def inter_community_edges(G, partition): return nx.quotient_graph(G, partition, create_using=MG).size() -@nx._dispatch +@nx._dispatchable def inter_community_non_edges(G, partition): """Returns the number of inter-community non-edges according to the given partition of the nodes of `G`. @@ -141,7 +141,7 @@ def inter_community_non_edges(G, partition): return inter_community_edges(nx.complement(G), partition) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def modularity(G, communities, weight="weight", resolution=1): r"""Returns the modularity of the given partition of the graph. @@ -256,7 +256,7 @@ def community_contribution(community): @require_partition -@nx._dispatch +@nx._dispatchable def partition_quality(G, partition): """Returns the coverage and performance of a partition of G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/__init__.cpython-312.pyc index 65e93c721..aa5a938dd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_asyn_fluid.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_asyn_fluid.cpython-312.pyc index c8e895b64..0e710add5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_asyn_fluid.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_asyn_fluid.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_centrality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_centrality.cpython-312.pyc index 3d2ef5bc1..7e92ad342 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_centrality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_centrality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_divisive.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_divisive.cpython-312.pyc new file mode 100644 index 000000000..56858b293 Binary files /dev/null and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_divisive.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kclique.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kclique.cpython-312.pyc index b894e2756..8a52c8511 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kclique.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kclique.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kernighan_lin.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kernighan_lin.cpython-312.pyc index cab127f44..730859ba8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kernighan_lin.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_kernighan_lin.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_label_propagation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_label_propagation.cpython-312.pyc index 9c3821d92..5d06281ee 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_label_propagation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_label_propagation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_louvain.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_louvain.cpython-312.pyc index 3b0db207b..d8353bebe 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_louvain.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_louvain.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_lukes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_lukes.cpython-312.pyc index d3d268f0e..230097a85 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_lukes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_lukes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_modularity_max.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_modularity_max.cpython-312.pyc index 51a86e65f..51f39de89 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_modularity_max.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_modularity_max.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_quality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_quality.cpython-312.pyc index e6b59462f..01d9e84c6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_quality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_quality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_utils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_utils.cpython-312.pyc index 9f20a222d..e9b88b109 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_utils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/__pycache__/test_utils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_asyn_fluid.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_asyn_fluid.py index cd108dda3..6c023be77 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_asyn_fluid.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_asyn_fluid.py @@ -5,6 +5,13 @@ from networkx.algorithms.community import asyn_fluidc +@pytest.mark.parametrize("graph_constructor", (nx.DiGraph, nx.MultiGraph)) +def test_raises_on_directed_and_multigraphs(graph_constructor): + G = graph_constructor([(0, 1), (1, 2)]) + with pytest.raises(nx.NetworkXNotImplemented): + nx.community.asyn_fluidc(G, 1) + + def test_exceptions(): test = Graph() test.add_node("a") diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_divisive.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_divisive.py new file mode 100644 index 000000000..6331503f9 --- /dev/null +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_divisive.py @@ -0,0 +1,106 @@ +import pytest + +import networkx as nx + + +def test_edge_betweenness_partition(): + G = nx.barbell_graph(3, 0) + C = nx.community.edge_betweenness_partition(G, 2) + answer = [{0, 1, 2}, {3, 4, 5}] + assert len(C) == len(answer) + for s in answer: + assert s in C + + G = nx.barbell_graph(3, 1) + C = nx.community.edge_betweenness_partition(G, 3) + answer = [{0, 1, 2}, {4, 5, 6}, {3}] + assert len(C) == len(answer) + for s in answer: + assert s in C + + C = nx.community.edge_betweenness_partition(G, 7) + answer = [{n} for n in G] + assert len(C) == len(answer) + for s in answer: + assert s in C + + C = nx.community.edge_betweenness_partition(G, 1) + assert C == [set(G)] + + C = nx.community.edge_betweenness_partition(G, 1, weight="weight") + assert C == [set(G)] + + with pytest.raises(nx.NetworkXError): + nx.community.edge_betweenness_partition(G, 0) + + with pytest.raises(nx.NetworkXError): + nx.community.edge_betweenness_partition(G, -1) + + with pytest.raises(nx.NetworkXError): + nx.community.edge_betweenness_partition(G, 10) + + +def test_edge_current_flow_betweenness_partition(): + pytest.importorskip("scipy") + + G = nx.barbell_graph(3, 0) + C = nx.community.edge_current_flow_betweenness_partition(G, 2) + answer = [{0, 1, 2}, {3, 4, 5}] + assert len(C) == len(answer) + for s in answer: + assert s in C + + G = nx.barbell_graph(3, 1) + C = nx.community.edge_current_flow_betweenness_partition(G, 2) + answers = [[{0, 1, 2, 3}, {4, 5, 6}], [{0, 1, 2}, {3, 4, 5, 6}]] + assert len(C) == len(answers[0]) + assert any(all(s in answer for s in C) for answer in answers) + + C = nx.community.edge_current_flow_betweenness_partition(G, 3) + answer = [{0, 1, 2}, {4, 5, 6}, {3}] + assert len(C) == len(answer) + for s in answer: + assert s in C + + C = nx.community.edge_current_flow_betweenness_partition(G, 4) + answers = [[{1, 2}, {4, 5, 6}, {3}, {0}], [{0, 1, 2}, {5, 6}, {3}, {4}]] + assert len(C) == len(answers[0]) + assert any(all(s in answer for s in C) for answer in answers) + + C = nx.community.edge_current_flow_betweenness_partition(G, 5) + answer = [{1, 2}, {5, 6}, {3}, {0}, {4}] + assert len(C) == len(answer) + for s in answer: + assert s in C + + C = nx.community.edge_current_flow_betweenness_partition(G, 6) + answers = [[{2}, {5, 6}, {3}, {0}, {4}, {1}], [{1, 2}, {6}, {3}, {0}, {4}, {5}]] + assert len(C) == len(answers[0]) + assert any(all(s in answer for s in C) for answer in answers) + + C = nx.community.edge_current_flow_betweenness_partition(G, 7) + answer = [{n} for n in G] + assert len(C) == len(answer) + for s in answer: + assert s in C + + C = nx.community.edge_current_flow_betweenness_partition(G, 1) + assert C == [set(G)] + + C = nx.community.edge_current_flow_betweenness_partition(G, 1, weight="weight") + assert C == [set(G)] + + with pytest.raises(nx.NetworkXError): + nx.community.edge_current_flow_betweenness_partition(G, 0) + + with pytest.raises(nx.NetworkXError): + nx.community.edge_current_flow_betweenness_partition(G, -1) + + with pytest.raises(nx.NetworkXError): + nx.community.edge_current_flow_betweenness_partition(G, 10) + + N = 10 + G = nx.empty_graph(N) + for i in range(2, N - 1): + C = nx.community.edge_current_flow_betweenness_partition(G, i) + assert C == [{n} for n in G] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_label_propagation.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_label_propagation.py index 9a0b3d89b..4be72dbf2 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_label_propagation.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_label_propagation.py @@ -163,7 +163,7 @@ class TestFastLabelPropagationCommunities: N = 100 # number of nodes K = 15 # average node degree - def _check_communities(self, G, truth, weight=None, seed=None): + def _check_communities(self, G, truth, weight=None, seed=42): C = nx.community.fast_label_propagation_communities(G, weight=weight, seed=seed) assert {frozenset(c) for c in C} == truth @@ -193,7 +193,7 @@ def test_bipartite_graph(self): self._check_communities(G, truth) def test_random_graph(self): - G = nx.gnm_random_graph(self.N, self.N * self.K // 2) + G = nx.gnm_random_graph(self.N, self.N * self.K // 2, seed=42) truth = {frozenset(G)} self._check_communities(G, truth) @@ -203,14 +203,13 @@ def test_disjoin_cliques(self): self._check_communities(G, truth) def test_ring_of_cliques(self): - G = nx.ring_of_cliques(self.N, self.K) - truth = { - frozenset([self.K * i + k for k in range(self.K)]) for i in range(self.N) - } + N, K = self.N, self.K + G = nx.ring_of_cliques(N, K) + truth = {frozenset([K * i + k for k in range(K)]) for i in range(N)} self._check_communities(G, truth) def test_larger_graph(self): - G = nx.gnm_random_graph(100 * self.N, 50 * self.N * self.K) + G = nx.gnm_random_graph(100 * self.N, 50 * self.N * self.K, seed=42) nx.community.fast_label_propagation_communities(G) def test_graph_type(self): @@ -238,3 +237,5 @@ def test_seed_argument(self): C = nx.community.fast_label_propagation_communities(G, seed=2023) truth = {frozenset(c) for c in C} self._check_communities(G, truth, seed=2023) + # smoke test that seed=None works + C = nx.community.fast_label_propagation_communities(G, seed=None) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_louvain.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_louvain.py index 60b95d377..816e6f143 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_louvain.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_louvain.py @@ -1,3 +1,5 @@ +import pytest + import networkx as nx @@ -234,7 +236,7 @@ def test_threshold(): mod1 = nx.community.modularity(G, partition1) mod2 = nx.community.modularity(G, partition2) - assert mod1 < mod2 + assert mod1 <= mod2 def test_empty_graph(): @@ -242,3 +244,21 @@ def test_empty_graph(): G.add_nodes_from(range(5)) expected = [{0}, {1}, {2}, {3}, {4}] assert nx.community.louvain_communities(G) == expected + + +def test_max_level(): + G = nx.LFR_benchmark_graph( + 250, 3, 1.5, 0.009, average_degree=5, min_community=20, seed=10 + ) + parts_iter = nx.community.louvain_partitions(G, seed=42) + for max_level, expected in enumerate(parts_iter, 1): + partition = nx.community.louvain_communities(G, max_level=max_level, seed=42) + assert partition == expected + assert max_level > 1 # Ensure we are actually testing max_level + # max_level is an upper limit; it's okay if we stop before it's hit. + partition = nx.community.louvain_communities(G, max_level=max_level + 1, seed=42) + assert partition == expected + with pytest.raises( + ValueError, match="max_level argument must be a positive integer" + ): + nx.community.louvain_communities(G, max_level=0) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_modularity_max.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_modularity_max.py index 2757f3515..0121367fc 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_modularity_max.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/community/tests/test_modularity_max.py @@ -331,3 +331,10 @@ def test_best_n(): best_n = 1 expected = [frozenset(range(13))] assert greedy_modularity_communities(G, best_n=best_n) == expected + + +def test_greedy_modularity_communities_corner_cases(): + G = nx.empty_graph() + assert nx.community.greedy_modularity_communities(G) == [] + G.add_nodes_from(range(3)) + assert nx.community.greedy_modularity_communities(G) == [{0}, {1}, {2}] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/__init__.cpython-312.pyc index cfa72086e..4181596d9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/attracting.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/attracting.cpython-312.pyc index dc9a1fc05..ae8e9df97 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/attracting.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/attracting.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/biconnected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/biconnected.cpython-312.pyc index c6660a08e..f948f1671 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/biconnected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/biconnected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/connected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/connected.cpython-312.pyc index d1feec71a..07a525519 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/connected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/connected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/semiconnected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/semiconnected.cpython-312.pyc index 33bcb1650..f9f8b51e8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/semiconnected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/semiconnected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/strongly_connected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/strongly_connected.cpython-312.pyc index f76dc385c..19001317b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/strongly_connected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/strongly_connected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/weakly_connected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/weakly_connected.cpython-312.pyc index 3d34030a5..db025e3f8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/weakly_connected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/__pycache__/weakly_connected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/attracting.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/attracting.py index 1cc2e1561..305c69635 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/attracting.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/attracting.py @@ -10,7 +10,7 @@ @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def attracting_components(G): """Generates the attracting components in `G`. @@ -54,7 +54,7 @@ def attracting_components(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def number_attracting_components(G): """Returns the number of attracting components in `G`. @@ -83,7 +83,7 @@ def number_attracting_components(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def is_attracting_component(G): """Returns True if `G` consists of a single attracting component. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/biconnected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/biconnected.py index 632b2d598..0d2f06975 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/biconnected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/biconnected.py @@ -13,7 +13,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def is_biconnected(G): """Returns True if the graph is biconnected, False otherwise. @@ -94,7 +94,7 @@ def is_biconnected(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def biconnected_component_edges(G): """Returns a generator of lists of edges, one list for each biconnected component of the input graph. @@ -167,7 +167,7 @@ def biconnected_component_edges(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def biconnected_components(G): """Returns a generator of sets of nodes, one set for each biconnected component of the graph @@ -260,7 +260,7 @@ def biconnected_components(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def articulation_points(G): """Yield the articulation points, or cut vertices, of a graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/connected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/connected.py index ff4fca5d0..ad3e0155a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/connected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/connected.py @@ -13,7 +13,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def connected_components(G): """Generate connected components. @@ -68,7 +68,8 @@ def connected_components(G): yield c -@nx._dispatch +@not_implemented_for("directed") +@nx._dispatchable def number_connected_components(G): """Returns the number of connected components. @@ -82,6 +83,11 @@ def number_connected_components(G): n : integer Number of connected components + Raises + ------ + NetworkXNotImplemented + If G is directed. + Examples -------- >>> G = nx.Graph([(0, 1), (1, 2), (5, 6), (3, 4)]) @@ -103,7 +109,7 @@ def number_connected_components(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def is_connected(G): """Returns True if the graph is connected, False otherwise. @@ -143,13 +149,13 @@ def is_connected(G): """ if len(G) == 0: raise nx.NetworkXPointlessConcept( - "Connectivity is undefined ", "for the null graph." + "Connectivity is undefined for the null graph." ) return sum(1 for node in _plain_bfs(G, arbitrary_element(G))) == len(G) @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def node_connected_component(G, n): """Returns the set of nodes in the component of graph containing node n. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/semiconnected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/semiconnected.py index 24a89f34d..13cfa988a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/semiconnected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/semiconnected.py @@ -6,7 +6,7 @@ @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def is_semiconnected(G): r"""Returns True if the graph is semiconnected, False otherwise. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/strongly_connected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/strongly_connected.py index 5bf5b9947..febd1b9b5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/strongly_connected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/strongly_connected.py @@ -13,7 +13,7 @@ @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def strongly_connected_components(G): """Generate nodes in strongly connected components of graph. @@ -39,10 +39,7 @@ def strongly_connected_components(G): >>> G = nx.cycle_graph(4, create_using=nx.DiGraph()) >>> nx.add_cycle(G, [10, 11, 12]) - >>> [ - ... len(c) - ... for c in sorted(nx.strongly_connected_components(G), key=len, reverse=True) - ... ] + >>> [len(c) for c in sorted(nx.strongly_connected_components(G), key=len, reverse=True)] [4, 3] If you only want the largest component, it's more efficient to @@ -112,7 +109,7 @@ def strongly_connected_components(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def kosaraju_strongly_connected_components(G, source=None): """Generate nodes in strongly connected components of graph. @@ -174,7 +171,7 @@ def kosaraju_strongly_connected_components(G, source=None): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def strongly_connected_components_recursive(G): """Generate nodes in strongly connected components of graph. @@ -256,7 +253,7 @@ def strongly_connected_components_recursive(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def number_strongly_connected_components(G): """Returns number of strongly connected components in graph. @@ -277,7 +274,9 @@ def number_strongly_connected_components(G): Examples -------- - >>> G = nx.DiGraph([(0, 1), (1, 2), (2, 0), (2, 3), (4, 5), (3, 4), (5, 6), (6, 3), (6, 7)]) + >>> G = nx.DiGraph( + ... [(0, 1), (1, 2), (2, 0), (2, 3), (4, 5), (3, 4), (5, 6), (6, 3), (6, 7)] + ... ) >>> nx.number_strongly_connected_components(G) 3 @@ -295,7 +294,7 @@ def number_strongly_connected_components(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def is_strongly_connected(G): """Test directed graph for strong connectivity. @@ -347,7 +346,7 @@ def is_strongly_connected(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def condensation(G, scc=None): """Returns the condensation of G. @@ -391,7 +390,7 @@ def condensation(G, scc=None): >>> H = nx.condensation(G) >>> H.nodes.data() NodeDataView({0: {'members': {0, 1, 2, 3}}, 1: {'members': {4, 5, 6, 7}}}) - >>> H.graph['mapping'] + >>> H.graph["mapping"] {0: 0, 1: 0, 2: 0, 3: 0, 4: 1, 5: 1, 6: 1, 7: 1} Contracting a complete graph into one single SCC. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/__init__.cpython-312.pyc index 65fe36453..8a9bcfaa6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_attracting.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_attracting.cpython-312.pyc index af4cc1ceb..74ebeb030 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_attracting.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_attracting.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_biconnected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_biconnected.cpython-312.pyc index 70566010d..fd4bdc62f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_biconnected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_biconnected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_connected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_connected.cpython-312.pyc index b755951c5..6c18490ff 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_connected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_connected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_semiconnected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_semiconnected.cpython-312.pyc index d359c859a..d6ede189d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_semiconnected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_semiconnected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_strongly_connected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_strongly_connected.cpython-312.pyc index 9ca6468ff..edeff45e9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_strongly_connected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_strongly_connected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_weakly_connected.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_weakly_connected.cpython-312.pyc index 075a25650..7adb7c303 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_weakly_connected.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/__pycache__/test_weakly_connected.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_connected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_connected.py index 4c9b8d28f..cd08640b3 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_connected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_connected.py @@ -61,7 +61,7 @@ def setup_class(cls): C = [] cls.gc.append((G, C)) - # This additionally tests the @nx._dispatch mechanism, treating + # This additionally tests the @nx._dispatchable mechanism, treating # nx.connected_components as if it were a re-implementation from another package @pytest.mark.parametrize("wrapper", [lambda x: x, dispatch_interface.convert]) def test_connected_components(self, wrapper): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_strongly_connected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_strongly_connected.py index f1c773026..21d9e6718 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_strongly_connected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_strongly_connected.py @@ -183,12 +183,8 @@ def test_connected_raise(self): with pytest.raises(NetworkXNotImplemented): next(nx.kosaraju_strongly_connected_components(G)) with pytest.raises(NetworkXNotImplemented): - with pytest.deprecated_call(): - next(nx.strongly_connected_components_recursive(G)) + next(nx.strongly_connected_components_recursive(G)) pytest.raises(NetworkXNotImplemented, nx.is_strongly_connected, G) - pytest.raises( - nx.NetworkXPointlessConcept, nx.is_strongly_connected, nx.DiGraph() - ) pytest.raises(NetworkXNotImplemented, nx.condensation, G) strong_cc_methods = ( diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_weakly_connected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_weakly_connected.py index e31326366..f01447893 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_weakly_connected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/tests/test_weakly_connected.py @@ -88,3 +88,9 @@ def test_connected_mutability(self): assert len(seen & component) == 0 seen.update(component) component.clear() + + +def test_is_weakly_connected_empty_graph_raises(): + G = nx.DiGraph() + with pytest.raises(nx.NetworkXPointlessConcept, match="Connectivity is undefined"): + nx.is_weakly_connected(G) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/weakly_connected.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/weakly_connected.py index c8dc2350e..499c2ba74 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/weakly_connected.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/components/weakly_connected.py @@ -10,7 +10,7 @@ @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def weakly_connected_components(G): """Generate weakly connected components of G. @@ -36,10 +36,7 @@ def weakly_connected_components(G): >>> G = nx.path_graph(4, create_using=nx.DiGraph()) >>> nx.add_path(G, [10, 11, 12]) - >>> [ - ... len(c) - ... for c in sorted(nx.weakly_connected_components(G), key=len, reverse=True) - ... ] + >>> [len(c) for c in sorted(nx.weakly_connected_components(G), key=len, reverse=True)] [4, 3] If you only want the largest component, it's more efficient to @@ -66,7 +63,7 @@ def weakly_connected_components(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def number_weakly_connected_components(G): """Returns the number of weakly connected components in G. @@ -106,7 +103,7 @@ def number_weakly_connected_components(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def is_weakly_connected(G): """Test directed graph for weak connectivity. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/__init__.cpython-312.pyc index 56d56ad96..e62f8fbf1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/connectivity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/connectivity.cpython-312.pyc index 67e47ef13..aa74a3cd8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/connectivity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/connectivity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/cuts.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/cuts.cpython-312.pyc index eeaa325c7..42e88f0ea 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/cuts.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/cuts.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/disjoint_paths.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/disjoint_paths.cpython-312.pyc index 5a93f8b6e..e6744a064 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/disjoint_paths.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/disjoint_paths.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_augmentation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_augmentation.cpython-312.pyc index 5f63832ee..ea9b44a85 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_augmentation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_augmentation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_kcomponents.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_kcomponents.cpython-312.pyc index 06a0145ca..d786f41be 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_kcomponents.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/edge_kcomponents.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcomponents.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcomponents.cpython-312.pyc index 3768b168b..a17f32c60 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcomponents.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcomponents.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcutsets.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcutsets.cpython-312.pyc index 0668a0716..90da54d79 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcutsets.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/kcutsets.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/stoerwagner.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/stoerwagner.cpython-312.pyc index 980efe881..44b3367d8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/stoerwagner.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/stoerwagner.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/utils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/utils.cpython-312.pyc index 3e8c484a6..016227b15 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/utils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/__pycache__/utils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/connectivity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/connectivity.py index cbb34152b..8ccca88d2 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/connectivity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/connectivity.py @@ -31,11 +31,7 @@ ] -@nx._dispatch( - graphs={"G": 0, "auxiliary?": 4, "residual?": 5}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, - preserve_graph_attrs={"auxiliary", "residual"}, -) +@nx._dispatchable(graphs={"G": 0, "auxiliary?": 4}, preserve_graph_attrs={"auxiliary"}) def local_node_connectivity( G, s, t, flow_func=None, auxiliary=None, residual=None, cutoff=None ): @@ -118,7 +114,6 @@ def local_node_connectivity( >>> # You also have to explicitly import the function for >>> # building the auxiliary digraph from the connectivity package >>> from networkx.algorithms.connectivity import build_auxiliary_node_connectivity - ... >>> H = build_auxiliary_node_connectivity(G) >>> # And the function for building the residual network from the >>> # flow package @@ -131,7 +126,6 @@ def local_node_connectivity( >>> for u, v in itertools.combinations(G, 2): ... k = local_node_connectivity(G, u, v, auxiliary=H, residual=R) ... result[u][v] = k - ... >>> all(result[u][v] == 5 for u, v in itertools.combinations(G, 2)) True @@ -214,7 +208,7 @@ def local_node_connectivity( return nx.maximum_flow_value(H, f"{mapping[s]}B", f"{mapping[t]}A", **kwargs) -@nx._dispatch +@nx._dispatchable def node_connectivity(G, s=None, t=None, flow_func=None): r"""Returns node connectivity for a graph or digraph G. @@ -355,7 +349,7 @@ def neighbors(v): return K -@nx._dispatch +@nx._dispatchable def average_node_connectivity(G, flow_func=None): r"""Returns the average connectivity of a graph G. @@ -424,7 +418,7 @@ def average_node_connectivity(G, flow_func=None): return num / den -@nx._dispatch +@nx._dispatchable def all_pairs_node_connectivity(G, nbunch=None, flow_func=None): """Compute node connectivity between all pairs of nodes of G. @@ -492,11 +486,7 @@ def all_pairs_node_connectivity(G, nbunch=None, flow_func=None): return all_pairs -@nx._dispatch( - graphs={"G": 0, "auxiliary?": 4, "residual?": 5}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, - preserve_graph_attrs={"residual"}, -) +@nx._dispatchable(graphs={"G": 0, "auxiliary?": 4}) def local_edge_connectivity( G, s, t, flow_func=None, auxiliary=None, residual=None, cutoff=None ): @@ -658,7 +648,7 @@ def local_edge_connectivity( return nx.maximum_flow_value(H, s, t, **kwargs) -@nx._dispatch +@nx._dispatchable def edge_connectivity(G, s=None, t=None, flow_func=None, cutoff=None): r"""Returns the edge connectivity of the graph or digraph G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/cuts.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/cuts.py index d5883ba8f..117004406 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/cuts.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/cuts.py @@ -21,13 +21,10 @@ ] -@nx._dispatch( - graphs={"G": 0, "auxiliary?": 4, "residual?": 5}, - preserve_edge_attrs={ - "auxiliary": {"capacity": float("inf")}, - "residual": {"capacity": float("inf")}, - }, - preserve_graph_attrs={"auxiliary", "residual"}, +@nx._dispatchable( + graphs={"G": 0, "auxiliary?": 4}, + preserve_edge_attrs={"auxiliary": {"capacity": float("inf")}}, + preserve_graph_attrs={"auxiliary"}, ) def minimum_st_edge_cut(G, s, t, flow_func=None, auxiliary=None, residual=None): """Returns the edges of the cut-set of a minimum (s, t)-cut. @@ -161,11 +158,10 @@ def minimum_st_edge_cut(G, s, t, flow_func=None, auxiliary=None, residual=None): return cutset -@nx._dispatch( - graphs={"G": 0, "auxiliary?": 4, "residual?": 5}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, +@nx._dispatchable( + graphs={"G": 0, "auxiliary?": 4}, preserve_node_attrs={"auxiliary": {"id": None}}, - preserve_graph_attrs={"auxiliary", "residual"}, + preserve_graph_attrs={"auxiliary"}, ) def minimum_st_node_cut(G, s, t, flow_func=None, auxiliary=None, residual=None): r"""Returns a set of nodes of minimum cardinality that disconnect source @@ -305,7 +301,7 @@ def minimum_st_node_cut(G, s, t, flow_func=None, auxiliary=None, residual=None): return node_cut - {s, t} -@nx._dispatch +@nx._dispatchable def minimum_node_cut(G, s=None, t=None, flow_func=None): r"""Returns a set of nodes of minimum cardinality that disconnects G. @@ -451,7 +447,7 @@ def neighbors(v): return min_cut -@nx._dispatch +@nx._dispatchable def minimum_edge_cut(G, s=None, t=None, flow_func=None): r"""Returns a set of edges of minimum cardinality that disconnects G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/disjoint_paths.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/disjoint_paths.py index 3fe450517..e4634e7dd 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/disjoint_paths.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/disjoint_paths.py @@ -19,13 +19,9 @@ __all__ = ["edge_disjoint_paths", "node_disjoint_paths"] -@nx._dispatch( - graphs={"G": 0, "auxiliary?": 5, "residual?": 6}, - preserve_edge_attrs={ - "auxiliary": {"capacity": float("inf")}, - "residual": {"capacity": float("inf")}, - }, - preserve_graph_attrs={"residual"}, +@nx._dispatchable( + graphs={"G": 0, "auxiliary?": 5}, + preserve_edge_attrs={"auxiliary": {"capacity": float("inf")}}, ) def edge_disjoint_paths( G, s, t, flow_func=None, cutoff=None, auxiliary=None, residual=None @@ -234,11 +230,10 @@ def edge_disjoint_paths( paths_found += 1 -@nx._dispatch( - graphs={"G": 0, "auxiliary?": 5, "residual?": 6}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, +@nx._dispatchable( + graphs={"G": 0, "auxiliary?": 5}, preserve_node_attrs={"auxiliary": {"id": None}}, - preserve_graph_attrs={"auxiliary", "residual"}, + preserve_graph_attrs={"auxiliary"}, ) def node_disjoint_paths( G, s, t, flow_func=None, cutoff=None, auxiliary=None, residual=None diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_augmentation.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_augmentation.py index c1215509e..d095ed519 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_augmentation.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_augmentation.py @@ -24,7 +24,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def is_k_edge_connected(G, k): """Tests to see if a graph is k-edge-connected. @@ -75,7 +75,7 @@ def is_k_edge_connected(G, k): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def is_locally_k_edge_connected(G, s, t, k): """Tests to see if an edge in a graph is locally k-edge-connected. @@ -133,7 +133,7 @@ def is_locally_k_edge_connected(G, s, t, k): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def k_edge_augmentation(G, k, avail=None, weight=None, partial=False): """Finds set of edges to k-edge-connect G. @@ -284,7 +284,7 @@ def k_edge_augmentation(G, k, avail=None, weight=None, partial=False): raise -@nx._dispatch +@nx._dispatchable def partial_k_edge_augmentation(G, k, avail, weight=None): """Finds augmentation that k-edge-connects as much of the graph as possible. @@ -387,7 +387,7 @@ def _edges_between_disjoint(H, only1, only2): @not_implemented_for("multigraph") @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def one_edge_augmentation(G, avail=None, weight=None, partial=False): """Finds minimum weight set of edges to connect G. @@ -442,7 +442,7 @@ def one_edge_augmentation(G, avail=None, weight=None, partial=False): @not_implemented_for("multigraph") @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def bridge_augmentation(G, avail=None, weight=None): """Finds the a set of edges that bridge connects G. @@ -578,7 +578,7 @@ def _lightest_meta_edges(mapping, avail_uv, avail_w): yield MetaEdge((mu, mv), (u, v), w) -@nx._dispatch +@nx._dispatchable def unconstrained_one_edge_augmentation(G): """Finds the smallest set of edges to connect G. @@ -621,7 +621,7 @@ def unconstrained_one_edge_augmentation(G): yield (inverse[mu][0], inverse[mv][0]) -@nx._dispatch +@nx._dispatchable def weighted_one_edge_augmentation(G, avail, weight=None, partial=False): """Finds the minimum weight set of edges to connect G if one exists. @@ -690,7 +690,7 @@ def weighted_one_edge_augmentation(G, avail, weight=None, partial=False): yield edge -@nx._dispatch +@nx._dispatchable def unconstrained_bridge_augmentation(G): """Finds an optimal 2-edge-augmentation of G using the fewest edges. @@ -845,7 +845,7 @@ def unconstrained_bridge_augmentation(G): break -@nx._dispatch +@nx._dispatchable def weighted_bridge_augmentation(G, avail, weight=None): """Finds an approximate min-weight 2-edge-augmentation of G. @@ -1040,7 +1040,7 @@ def _minimum_rooted_branching(D, root): return A -@nx._dispatch +@nx._dispatchable(returns_graph=True) def collapse(G, grouped_nodes): """Collapses each group of nodes into a single node. @@ -1112,7 +1112,7 @@ def collapse(G, grouped_nodes): return C -@nx._dispatch +@nx._dispatchable def complement_edges(G): """Returns only the edges in the complement of G @@ -1158,7 +1158,7 @@ def _compat_shuffle(rng, input): @not_implemented_for("multigraph") @not_implemented_for("directed") @py_random_state(4) -@nx._dispatch +@nx._dispatchable def greedy_k_edge_augmentation(G, k, avail=None, weight=None, seed=None): """Greedy algorithm for finding a k-edge-augmentation diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_kcomponents.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_kcomponents.py index e602c33aa..e071f4d3d 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_kcomponents.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/edge_kcomponents.py @@ -23,7 +23,7 @@ @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def k_edge_components(G, k): """Generates nodes in each maximal k-edge-connected component in G. @@ -107,7 +107,7 @@ def k_edge_components(G, k): @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def k_edge_subgraphs(G, k): """Generates nodes in each maximal k-edge-connected subgraph in G. @@ -196,7 +196,7 @@ def _k_edge_subgraphs_nodes(G, k): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def bridge_components(G): """Finds all bridge-connected components G. @@ -503,19 +503,26 @@ def _high_degree_components(G, k): yield from nx.connected_components(H) -@nx._dispatch +@nx._dispatchable(returns_graph=True) def general_k_edge_subgraphs(G, k): - """General algorithm to find all maximal k-edge-connected subgraphs in G. + """General algorithm to find all maximal k-edge-connected subgraphs in `G`. - Returns - ------- - k_edge_subgraphs : a generator of nx.Graphs that are k-edge-subgraphs - Each k-edge-subgraph is a maximal set of nodes that defines a subgraph - of G that is k-edge-connected. + Parameters + ---------- + G : nx.Graph + Graph in which all maximal k-edge-connected subgraphs will be found. + + k : int + + Yields + ------ + k_edge_subgraphs : Graph instances that are k-edge-subgraphs + Each k-edge-subgraph contains a maximal set of nodes that defines a + subgraph of `G` that is k-edge-connected. Notes ----- - Implementation of the basic algorithm from _[1]. The basic idea is to find + Implementation of the basic algorithm from [1]_. The basic idea is to find a global minimum cut of the graph. If the cut value is at least k, then the graph is a k-edge-connected subgraph and can be added to the results. Otherwise, the cut is used to split the graph in two and the procedure is @@ -524,7 +531,7 @@ def general_k_edge_subgraphs(G, k): a single node or a subgraph of G that is k-edge-connected. This implementation contains optimizations for reducing the number of calls - to max-flow, but there are other optimizations in _[1] that could be + to max-flow, but there are other optimizations in [1]_ that could be implemented. References @@ -547,7 +554,7 @@ def general_k_edge_subgraphs(G, k): ... (14, 101, 24), ... ] >>> G = nx.Graph(it.chain(*[pairwise(path) for path in paths])) - >>> sorted(map(len, k_edge_subgraphs(G, k=3))) + >>> sorted(len(k_sg) for k_sg in k_edge_subgraphs(G, k=3)) [1, 1, 1, 4, 4] """ if k < 1: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcomponents.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcomponents.py index 19a6e486b..50d5c8f41 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcomponents.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcomponents.py @@ -17,7 +17,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def k_components(G, flow_func=None): r"""Returns the k-component structure of a graph G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcutsets.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcutsets.py index bc04ed185..53f8d3b8f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcutsets.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/kcutsets.py @@ -21,7 +21,7 @@ __all__ = ["all_node_cuts"] -@nx._dispatch +@nx._dispatchable def all_node_cuts(G, k=None, flow_func=None): r"""Returns all minimum k cutsets of an undirected graph G. @@ -93,10 +93,11 @@ def all_node_cuts(G, k=None, flow_func=None): # Address some corner cases first. # For complete Graphs + if nx.density(G) == 1: - for cut_set in combinations(G, len(G) - 1): - yield set(cut_set) + yield from () return + # Initialize data structures. # Keep track of the cuts already computed so we do not repeat them. seen = [] @@ -130,7 +131,7 @@ def all_node_cuts(G, k=None, flow_func=None): for x in X: # step 3: Compute local connectivity flow of x with all other # non adjacent nodes in G - non_adjacent = set(G) - X - set(G[x]) + non_adjacent = set(G) - {x} - set(G[x]) for v in non_adjacent: # step 4: compute maximum flow in an Even-Tarjan reduction H of G # and step 5: build the associated residual network R diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/stoerwagner.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/stoerwagner.py index dc95877e2..f6814b003 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/stoerwagner.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/stoerwagner.py @@ -12,7 +12,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def stoer_wagner(G, weight="weight", heap=BinaryHeap): r"""Returns the weighted minimum edge cut using the Stoer-Wagner algorithm. @@ -94,6 +94,7 @@ def stoer_wagner(G, weight="weight", heap=BinaryHeap): G = nx.Graph( (u, v, {"weight": e.get(weight, 1)}) for u, v, e in G.edges(data=True) if u != v ) + G.__networkx_cache__ = None # Disable caching for u, v, e in G.edges(data=True): if e["weight"] < 0: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/__init__.cpython-312.pyc index afb7c79e3..ed4c346cb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_connectivity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_connectivity.cpython-312.pyc index a64cecd43..db7040b15 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_connectivity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_connectivity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_cuts.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_cuts.cpython-312.pyc index 8313ed08d..b7e4359f7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_cuts.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_cuts.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_disjoint_paths.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_disjoint_paths.cpython-312.pyc index 5ca4d8bbc..8a1aee9c7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_disjoint_paths.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_disjoint_paths.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_augmentation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_augmentation.cpython-312.pyc index ac18490b3..036a911ab 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_augmentation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_augmentation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_kcomponents.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_kcomponents.cpython-312.pyc index 3eedac282..e7adb4a70 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_kcomponents.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_edge_kcomponents.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcomponents.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcomponents.cpython-312.pyc index 153358295..bbc4ab0e0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcomponents.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcomponents.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcutsets.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcutsets.cpython-312.pyc index 9d0f86694..3022edbc8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcutsets.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_kcutsets.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_stoer_wagner.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_stoer_wagner.cpython-312.pyc index 7f035fc14..0ae901aa1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_stoer_wagner.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/__pycache__/test_stoer_wagner.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/test_kcutsets.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/test_kcutsets.py index d5b3b089e..4b4b5494a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/test_kcutsets.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/tests/test_kcutsets.py @@ -259,8 +259,15 @@ def test_cycle_graph(): def test_complete_graph(): G = nx.complete_graph(5) - solution = [{0, 1, 2, 3}, {0, 1, 2, 4}, {0, 1, 3, 4}, {0, 2, 3, 4}, {1, 2, 3, 4}] - cuts = list(nx.all_node_cuts(G)) - assert len(solution) == len(cuts) - for cut in cuts: - assert cut in solution + assert nx.node_connectivity(G) == 4 + assert list(nx.all_node_cuts(G)) == [] + + +def test_all_node_cuts_simple_case(): + G = nx.complete_graph(5) + G.remove_edges_from([(0, 1), (3, 4)]) + expected = [{0, 1, 2}, {2, 3, 4}] + actual = list(nx.all_node_cuts(G)) + assert len(actual) == len(expected) + for cut in actual: + assert cut in expected diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/utils.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/utils.py index bf6860a20..a4d822ae5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/utils.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/connectivity/utils.py @@ -6,7 +6,7 @@ __all__ = ["build_auxiliary_node_connectivity", "build_auxiliary_edge_connectivity"] -@nx._dispatch +@nx._dispatchable(returns_graph=True) def build_auxiliary_node_connectivity(G): r"""Creates a directed graph D from an undirected graph G to compute flow based node connectivity. @@ -59,7 +59,7 @@ def build_auxiliary_node_connectivity(G): return H -@nx._dispatch +@nx._dispatchable(returns_graph=True) def build_auxiliary_edge_connectivity(G): """Auxiliary digraph for computing flow based edge connectivity diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/core.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/core.py index 09a1275c7..511e6d9d0 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/core.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/core.py @@ -29,8 +29,6 @@ """ import networkx as nx -from networkx.exception import NetworkXError -from networkx.utils import not_implemented_for __all__ = [ "core_number", @@ -43,10 +41,10 @@ ] -@not_implemented_for("multigraph") -@nx._dispatch +@nx.utils.not_implemented_for("multigraph") +@nx._dispatchable def core_number(G): - """Returns the core number for each vertex. + """Returns the core number for each node. A k-core is a maximal subgraph that contains nodes of degree k or more. @@ -56,7 +54,7 @@ def core_number(G): Parameters ---------- G : NetworkX graph - A graph or directed graph + An undirected or directed graph Returns ------- @@ -65,17 +63,25 @@ def core_number(G): Raises ------ - NetworkXError - The k-core is not implemented for graphs with self loops - or parallel edges. + NetworkXNotImplemented + If `G` is a multigraph or contains self loops. Notes ----- - Not implemented for graphs with parallel edges or self loops. - For directed graphs the node degree is defined to be the in-degree + out-degree. + Examples + -------- + >>> degrees = [0, 1, 2, 2, 2, 2, 3] + >>> H = nx.havel_hakimi_graph(degrees) + >>> nx.core_number(H) + {0: 1, 1: 2, 2: 2, 3: 2, 4: 1, 5: 2, 6: 0} + >>> G = nx.DiGraph() + >>> G.add_edges_from([(1, 2), (2, 1), (2, 3), (2, 4), (3, 4), (4, 3)]) + >>> nx.core_number(G) + {1: 2, 2: 2, 3: 2, 4: 2} + References ---------- .. [1] An O(m) Algorithm for Cores Decomposition of Networks @@ -87,7 +93,7 @@ def core_number(G): "Input graph has self loops which is not permitted; " "Consider using G.remove_edges_from(nx.selfloop_edges(G))." ) - raise NetworkXError(msg) + raise nx.NetworkXNotImplemented(msg) degrees = dict(G.degree()) # Sort nodes by degree. nodes = sorted(degrees, key=degrees.get) @@ -142,18 +148,21 @@ def _core_subgraph(G, k_filter, k=None, core=None): return G.subgraph(nodes).copy() -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def k_core(G, k=None, core_number=None): """Returns the k-core of G. - A k-core is a maximal subgraph that contains nodes of degree k or more. + A k-core is a maximal subgraph that contains nodes of degree `k` or more. + + .. deprecated:: 3.3 + `k_core` will not accept `MultiGraph` objects in version 3.5. Parameters ---------- G : NetworkX graph A graph or directed graph k : int, optional - The order of the core. If not specified return the main core. + The order of the core. If not specified return the main core. core_number : dictionary, optional Precomputed core numbers for the graph G. @@ -164,20 +173,27 @@ def k_core(G, k=None, core_number=None): Raises ------ - NetworkXError - The k-core is not defined for graphs with self loops or parallel edges. + NetworkXNotImplemented + The k-core is not defined for multigraphs or graphs with self loops. Notes ----- - The main core is the core with the largest degree. - - Not implemented for graphs with parallel edges or self loops. + The main core is the core with `k` as the largest core_number. For directed graphs the node degree is defined to be the in-degree + out-degree. Graph, node, and edge attributes are copied to the subgraph. + Examples + -------- + >>> degrees = [0, 1, 2, 2, 2, 2, 3] + >>> H = nx.havel_hakimi_graph(degrees) + >>> H.degree + DegreeView({0: 1, 1: 2, 2: 2, 3: 2, 4: 2, 5: 3, 6: 0}) + >>> nx.k_core(H).nodes + NodeView((1, 2, 3, 5)) + See Also -------- core_number @@ -189,19 +205,35 @@ def k_core(G, k=None, core_number=None): https://arxiv.org/abs/cs.DS/0310049 """ + import warnings + + if G.is_multigraph(): + warnings.warn( + ( + "\n\n`k_core` will not accept `MultiGraph` objects in version 3.5.\n" + "Convert it to an undirected graph instead, using::\n\n" + "\tG = nx.Graph(G)\n" + ), + category=DeprecationWarning, + stacklevel=5, + ) + def k_filter(v, k, c): return c[v] >= k return _core_subgraph(G, k_filter, k, core_number) -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def k_shell(G, k=None, core_number=None): """Returns the k-shell of G. The k-shell is the subgraph induced by nodes with core number k. That is, nodes in the k-core that are not in the (k+1)-core. + .. deprecated:: 3.3 + `k_shell` will not accept `MultiGraph` objects in version 3.5. + Parameters ---------- G : NetworkX graph @@ -219,22 +251,28 @@ def k_shell(G, k=None, core_number=None): Raises ------ - NetworkXError - The k-shell is not implemented for graphs with self loops - or parallel edges. + NetworkXNotImplemented + The k-shell is not implemented for multigraphs or graphs with self loops. Notes ----- This is similar to k_corona but in that case only neighbors in the k-core are considered. - Not implemented for graphs with parallel edges or self loops. - For directed graphs the node degree is defined to be the in-degree + out-degree. Graph, node, and edge attributes are copied to the subgraph. + Examples + -------- + >>> degrees = [0, 1, 2, 2, 2, 2, 3] + >>> H = nx.havel_hakimi_graph(degrees) + >>> H.degree + DegreeView({0: 1, 1: 2, 2: 2, 3: 2, 4: 2, 5: 3, 6: 0}) + >>> nx.k_shell(H, k=1).nodes + NodeView((0, 4)) + See Also -------- core_number @@ -249,25 +287,41 @@ def k_shell(G, k=None, core_number=None): http://www.pnas.org/content/104/27/11150.full """ + import warnings + + if G.is_multigraph(): + warnings.warn( + ( + "\n\n`k_shell` will not accept `MultiGraph` objects in version 3.5.\n" + "Convert it to an undirected graph instead, using::\n\n" + "\tG = nx.Graph(G)\n" + ), + category=DeprecationWarning, + stacklevel=5, + ) + def k_filter(v, k, c): return c[v] == k return _core_subgraph(G, k_filter, k, core_number) -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def k_crust(G, k=None, core_number=None): """Returns the k-crust of G. The k-crust is the graph G with the edges of the k-core removed and isolated nodes found after the removal of edges are also removed. + .. deprecated:: 3.3 + `k_crust` will not accept `MultiGraph` objects in version 3.5. + Parameters ---------- G : NetworkX graph A graph or directed graph. k : int, optional - The order of the shell. If not specified return the main crust. + The order of the shell. If not specified return the main crust. core_number : dictionary, optional Precomputed core numbers for the graph G. @@ -278,22 +332,28 @@ def k_crust(G, k=None, core_number=None): Raises ------ - NetworkXError - The k-crust is not implemented for graphs with self loops - or parallel edges. + NetworkXNotImplemented + The k-crust is not implemented for multigraphs or graphs with self loops. Notes ----- This definition of k-crust is different than the definition in [1]_. The k-crust in [1]_ is equivalent to the k+1 crust of this algorithm. - Not implemented for graphs with parallel edges or self loops. - For directed graphs the node degree is defined to be the in-degree + out-degree. Graph, node, and edge attributes are copied to the subgraph. + Examples + -------- + >>> degrees = [0, 1, 2, 2, 2, 2, 3] + >>> H = nx.havel_hakimi_graph(degrees) + >>> H.degree + DegreeView({0: 1, 1: 2, 2: 2, 3: 2, 4: 2, 5: 3, 6: 0}) + >>> nx.k_crust(H, k=1).nodes + NodeView((0, 4, 6)) + See Also -------- core_number @@ -305,6 +365,20 @@ def k_crust(G, k=None, core_number=None): and Eran Shir, PNAS July 3, 2007 vol. 104 no. 27 11150-11154 http://www.pnas.org/content/104/27/11150.full """ + + import warnings + + if G.is_multigraph(): + warnings.warn( + ( + "\n\n`k_crust` will not accept `MultiGraph` objects in version 3.5.\n" + "Convert it to an undirected graph instead, using::\n\n" + "\tG = nx.Graph(G)\n" + ), + category=DeprecationWarning, + stacklevel=5, + ) + # Default for k is one less than in _core_subgraph, so just inline. # Filter is c[v] <= k if core_number is None: @@ -315,12 +389,15 @@ def k_crust(G, k=None, core_number=None): return G.subgraph(nodes).copy() -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def k_corona(G, k, core_number=None): """Returns the k-corona of G. The k-corona is the subgraph of nodes in the k-core which have - exactly k neighbours in the k-core. + exactly k neighbors in the k-core. + + .. deprecated:: 3.3 + `k_corona` will not accept `MultiGraph` objects in version 3.5. Parameters ---------- @@ -338,19 +415,25 @@ def k_corona(G, k, core_number=None): Raises ------ - NetworkXError - The k-corona is not defined for graphs with self loops or - parallel edges. + NetworkXNotImplemented + The k-corona is not defined for multigraphs or graphs with self loops. Notes ----- - Not implemented for graphs with parallel edges or self loops. - For directed graphs the node degree is defined to be the in-degree + out-degree. Graph, node, and edge attributes are copied to the subgraph. + Examples + -------- + >>> degrees = [0, 1, 2, 2, 2, 2, 3] + >>> H = nx.havel_hakimi_graph(degrees) + >>> H.degree + DegreeView({0: 1, 1: 2, 2: 2, 3: 2, 4: 2, 5: 3, 6: 0}) + >>> nx.k_corona(H, k=2).nodes + NodeView((1, 2, 3, 5)) + See Also -------- core_number @@ -364,15 +447,28 @@ def k_corona(G, k, core_number=None): http://link.aps.org/doi/10.1103/PhysRevE.73.056101 """ + import warnings + + if G.is_multigraph(): + warnings.warn( + ( + "\n\n`k_corona` will not accept `MultiGraph` objects in version 3.5.\n" + "Convert it to an undirected graph instead, using::\n\n" + "\tG = nx.Graph(G)\n" + ), + category=DeprecationWarning, + stacklevel=5, + ) + def func(v, k, c): return c[v] == k and k == sum(1 for w in G[v] if c[w] >= k) return _core_subgraph(G, func, k, core_number) -@not_implemented_for("directed") -@not_implemented_for("multigraph") -@nx._dispatch(preserve_all_attrs=True) +@nx.utils.not_implemented_for("directed") +@nx.utils.not_implemented_for("multigraph") +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def k_truss(G, k): """Returns the k-truss of `G`. @@ -393,17 +489,13 @@ def k_truss(G, k): Raises ------ - NetworkXError - - The k-truss is not defined for graphs with self loops, directed graphs - and multigraphs. + NetworkXNotImplemented + If `G` is a multigraph or directed graph or if it contains self loops. Notes ----- A k-clique is a (k-2)-truss and a k-truss is a (k+1)-core. - Not implemented for digraphs or graphs with parallel edges or self loops. - Graph, node, and edge attributes are copied to the subgraph. K-trusses were originally defined in [2] which states that the k-truss @@ -412,6 +504,15 @@ def k_truss(G, k): definition requiring that each edge belong to at least `k` triangles. This implementation uses the original definition of `k-2` triangles. + Examples + -------- + >>> degrees = [0, 1, 2, 2, 2, 2, 3] + >>> H = nx.havel_hakimi_graph(degrees) + >>> H.degree + DegreeView({0: 1, 1: 2, 2: 2, 3: 2, 4: 2, 5: 3, 6: 0}) + >>> nx.k_truss(H, k=2).nodes + NodeView((0, 1, 2, 3, 4, 5)) + References ---------- .. [1] Bounds and Algorithms for k-truss. Paul Burkhardt, Vance Faber, @@ -424,7 +525,7 @@ def k_truss(G, k): "Input graph has self loops which is not permitted; " "Consider using G.remove_edges_from(nx.selfloop_edges(G))." ) - raise NetworkXError(msg) + raise nx.NetworkXNotImplemented(msg) H = G.copy() @@ -447,9 +548,9 @@ def k_truss(G, k): return H -@not_implemented_for("multigraph") -@not_implemented_for("directed") -@nx._dispatch +@nx.utils.not_implemented_for("multigraph") +@nx.utils.not_implemented_for("directed") +@nx._dispatchable def onion_layers(G): """Returns the layer of each vertex in an onion decomposition of the graph. @@ -460,25 +561,27 @@ def onion_layers(G): Parameters ---------- G : NetworkX graph - A simple graph without self loops or parallel edges + An undirected graph without self loops. Returns ------- od_layers : dictionary - A dictionary keyed by vertex to the onion layer. The layers are + A dictionary keyed by node to the onion layer. The layers are contiguous integers starting at 1. Raises ------ - NetworkXError - The onion decomposition is not implemented for graphs with self loops - or parallel edges or for directed graphs. + NetworkXNotImplemented + If `G` is a multigraph or directed graph or if it contains self loops. - Notes - ----- - Not implemented for graphs with parallel edges or self loops. - - Not implemented for directed graphs. + Examples + -------- + >>> degrees = [0, 1, 2, 2, 2, 2, 3] + >>> H = nx.havel_hakimi_graph(degrees) + >>> H.degree + DegreeView({0: 1, 1: 2, 2: 2, 3: 2, 4: 2, 5: 3, 6: 0}) + >>> nx.onion_layers(H) + {6: 1, 0: 2, 4: 3, 1: 4, 2: 4, 3: 4, 5: 4} See Also -------- @@ -501,7 +604,7 @@ def onion_layers(G): "Input graph contains self loops which is not permitted; " "Consider using G.remove_edges_from(nx.selfloop_edges(G))." ) - raise NetworkXError(msg) + raise nx.NetworkXNotImplemented(msg) # Dictionaries to register the k-core/onion decompositions. od_layers = {} # Adjacency list diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/covering.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/covering.py index f4b44985a..bed482bc4 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/covering.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/covering.py @@ -11,7 +11,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def min_edge_cover(G, matching_algorithm=None): """Returns the min cardinality edge cover of the graph as a set of edges. @@ -76,7 +76,7 @@ def min_edge_cover(G, matching_algorithm=None): if nx.number_of_isolates(G) > 0: # ``min_cover`` does not exist as there is an isolated node raise nx.NetworkXException( - "Graph has a node with no edge incident on it, " "so no edge cover exists." + "Graph has a node with no edge incident on it, so no edge cover exists." ) if matching_algorithm is None: matching_algorithm = partial(nx.max_weight_matching, maxcardinality=True) @@ -106,7 +106,7 @@ def min_edge_cover(G, matching_algorithm=None): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def is_edge_cover(G, cover): """Decides whether a set of edges is a valid edge cover of the graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cuts.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cuts.py index ce455eb47..d7d54e7bb 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cuts.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cuts.py @@ -21,7 +21,7 @@ # TODO STILL NEED TO UPDATE ALL THE DOCUMENTATION! -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def cut_size(G, S, T=None, weight=None): """Returns the size of the cut between two sets of nodes. @@ -84,7 +84,7 @@ def cut_size(G, S, T=None, weight=None): return sum(weight for u, v, weight in edges) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def volume(G, S, weight=None): """Returns the volume of a set of nodes. @@ -127,7 +127,7 @@ def volume(G, S, weight=None): return sum(d for v, d in degree(S, weight=weight)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def normalized_cut_size(G, S, T=None, weight=None): """Returns the normalized size of the cut between two sets of nodes. @@ -180,7 +180,7 @@ def normalized_cut_size(G, S, T=None, weight=None): return num_cut_edges * ((1 / volume_S) + (1 / volume_T)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def conductance(G, S, T=None, weight=None): """Returns the conductance of two sets of nodes. @@ -228,7 +228,7 @@ def conductance(G, S, T=None, weight=None): return num_cut_edges / min(volume_S, volume_T) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def edge_expansion(G, S, T=None, weight=None): """Returns the edge expansion between two node sets. @@ -275,7 +275,7 @@ def edge_expansion(G, S, T=None, weight=None): return num_cut_edges / min(len(S), len(T)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def mixing_expansion(G, S, T=None, weight=None): """Returns the mixing expansion between two node sets. @@ -323,7 +323,7 @@ def mixing_expansion(G, S, T=None, weight=None): # TODO What is the generalization to two arguments, S and T? Does the # denominator become `min(len(S), len(T))`? -@nx._dispatch +@nx._dispatchable def node_expansion(G, S): """Returns the node expansion of the set `S`. @@ -363,7 +363,7 @@ def node_expansion(G, S): # TODO What is the generalization to two arguments, S and T? Does the # denominator become `min(len(S), len(T))`? -@nx._dispatch +@nx._dispatchable def boundary_expansion(G, S): """Returns the boundary expansion of the set `S`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cycles.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cycles.py index 9149e9eb1..14660ed52 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cycles.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/cycles.py @@ -24,7 +24,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def cycle_basis(G, root=None): """Returns a list of cycles which form a basis for cycles of G. @@ -66,6 +66,7 @@ def cycle_basis(G, root=None): See Also -------- simple_cycles + minimum_cycle_basis """ gnodes = dict.fromkeys(G) # set-like object that maintains node order cycles = [] @@ -101,7 +102,7 @@ def cycle_basis(G, root=None): return cycles -@nx._dispatch +@nx._dispatchable def simple_cycles(G, length_bound=None): """Find simple cycles (elementary circuits) of a graph. @@ -474,7 +475,7 @@ def _bounded_cycle_search(G, path, length_bound): B[w].add(v) -@nx._dispatch +@nx._dispatchable def chordless_cycles(G, length_bound=None): """Find simple chordless cycles of a graph. @@ -763,7 +764,7 @@ def _chordless_cycle_search(F, B, path, length_bound): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable(mutates_input=True) def recursive_simple_cycles(G): """Find simple cycles (elementary circuits) of a directed graph. @@ -873,7 +874,7 @@ def circuit(thisnode, startnode, component): return result -@nx._dispatch +@nx._dispatchable def find_cycle(G, source=None, orientation=None): """Returns a cycle found via depth-first traversal. @@ -1035,7 +1036,7 @@ def tailhead(edge): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def minimum_cycle_basis(G, weight=None): """Returns a minimum weight cycle basis for G @@ -1165,7 +1166,7 @@ def _min_cycle(G, orth, weight): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def girth(G): """Returns the girth of the graph. @@ -1202,7 +1203,7 @@ def girth(G): References ---------- - .. [1] https://en.wikipedia.org/wiki/Girth_(graph_theory) + .. [1] `Wikipedia: Girth `_ """ girth = depth_limit = inf diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/d_separation.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/d_separation.py index 4322b0958..a688eca40 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/d_separation.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/d_separation.py @@ -11,88 +11,183 @@ algorithm presented in [2]_. Refer to [3]_, [4]_ for a couple of alternative algorithms. -Here, we provide a brief overview of d-separation and related concepts that -are relevant for understanding it: - -Blocking paths --------------- +The functional interface in NetworkX consists of three functions: -Before we overview, we introduce the following terminology to describe paths: +- `find_minimal_d_separator` returns a minimal d-separator set ``z``. + That is, removing any node or nodes from it makes it no longer a d-separator. +- `is_d_separator` checks if a given set is a d-separator. +- `is_minimal_d_separator` checks if a given set is a minimal d-separator. -- "open" path: A path between two nodes that can be traversed -- "blocked" path: A path between two nodes that cannot be traversed +D-separators +------------ -A **collider** is a triplet of nodes along a path that is like the following: -``... u -> c <- v ...``), where 'c' is a common successor of ``u`` and ``v``. A path -through a collider is considered "blocked". When -a node that is a collider, or a descendant of a collider is included in -the d-separating set, then the path through that collider node is "open". If the -path through the collider node is open, then we will call this node an open collider. +Here, we provide a brief overview of d-separation and related concepts that +are relevant for understanding it: -The d-separation set blocks the paths between ``u`` and ``v``. If you include colliders, -or their descendant nodes in the d-separation set, then those colliders will open up, -enabling a path to be traversed if it is not blocked some other way. +The ideas of d-separation and d-connection relate to paths being open or blocked. + +- A "path" is a sequence of nodes connected in order by edges. Unlike for most + graph theory analysis, the direction of the edges is ignored. Thus the path + can be thought of as a traditional path on the undirected version of the graph. +- A "candidate d-separator" ``z`` is a set of nodes being considered as + possibly blocking all paths between two prescribed sets ``x`` and ``y`` of nodes. + We refer to each node in the candidate d-separator as "known". +- A "collider" node on a path is a node that is a successor of its two neighbor + nodes on the path. That is, ``c`` is a collider if the edge directions + along the path look like ``... u -> c <- v ...``. +- If a collider node or any of its descendants are "known", the collider + is called an "open collider". Otherwise it is a "blocking collider". +- Any path can be "blocked" in two ways. If the path contains a "known" node + that is not a collider, the path is blocked. Also, if the path contains a + collider that is not a "known" node, the path is blocked. +- A path is "open" if it is not blocked. That is, it is open if every node is + either an open collider or not a "known". Said another way, every + "known" in the path is a collider and every collider is open (has a + "known" as a inclusive descendant). The concept of "open path" is meant to + demonstrate a probabilistic conditional dependence between two nodes given + prescribed knowledge ("known" nodes). +- Two sets ``x`` and ``y`` of nodes are "d-separated" by a set of nodes ``z`` + if all paths between nodes in ``x`` and nodes in ``y`` are blocked. That is, + if there are no open paths from any node in ``x`` to any node in ``y``. + Such a set ``z`` is a "d-separator" of ``x`` and ``y``. +- A "minimal d-separator" is a d-separator ``z`` for which no node or subset + of nodes can be removed with it still being a d-separator. + +The d-separator blocks some paths between ``x`` and ``y`` but opens others. +Nodes in the d-separator block paths if the nodes are not colliders. +But if a collider or its descendant nodes are in the d-separation set, the +colliders are open, allowing a path through that collider. Illustration of D-separation with examples ------------------------------------------ -For a pair of two nodes, ``u`` and ``v``, all paths are considered open if -there is a path between ``u`` and ``v`` that is not blocked. That means, there is an open -path between ``u`` and ``v`` that does not encounter a collider, or a variable in the -d-separating set. +A pair of two nodes, ``u`` and ``v``, are d-connected if there is a path +from ``u`` to ``v`` that is not blocked. That means, there is an open +path from ``u`` to ``v``. For example, if the d-separating set is the empty set, then the following paths are -unblocked between ``u`` and ``v``: +open between ``u`` and ``v``: -- u <- z -> v -- u -> w -> ... -> z -> v +- u <- n -> v +- u -> w -> ... -> n -> v -If for example, 'z' is in the d-separating set, then 'z' blocks those paths -between ``u`` and ``v``. +If on the other hand, ``n`` is in the d-separating set, then ``n`` blocks +those paths between ``u`` and ``v``. -Colliders block a path by default if they and their descendants are not included -in the d-separating set. An example of a path that is blocked when the d-separating -set is empty is: +Colliders block a path if they and their descendants are not included +in the d-separating set. An example of a path that is blocked when the +d-separating set is empty is: -- u -> w -> ... -> z <- v +- u -> w -> ... -> n <- v -because 'z' is a collider in this path and 'z' is not in the d-separating set. However, -if 'z' or a descendant of 'z' is included in the d-separating set, then the path through -the collider at 'z' (... -> z <- ...) is now "open". +The node ``n`` is a collider in this path and is not in the d-separating set. +So ``n`` blocks this path. However, if ``n`` or a descendant of ``n`` is +included in the d-separating set, then the path through the collider +at ``n`` (... -> n <- ...) is "open". -D-separation is concerned with blocking all paths between u and v. Therefore, a -d-separating set between ``u`` and ``v`` is one where all paths are blocked. +D-separation is concerned with blocking all paths between nodes from ``x`` to ``y``. +A d-separating set between ``x`` and ``y`` is one where all paths are blocked. D-separation and its applications in probability ------------------------------------------------ -D-separation is commonly used in probabilistic graphical models. D-separation +D-separation is commonly used in probabilistic causal-graph models. D-separation connects the idea of probabilistic "dependence" with separation in a graph. If -one assumes the causal Markov condition [5]_, then d-separation implies conditional -independence in probability distributions. +one assumes the causal Markov condition [5]_, (every node is conditionally +independent of its non-descendants, given its parents) then d-separation implies +conditional independence in probability distributions. +Symmetrically, d-connection implies dependence. + +The intuition is as follows. The edges on a causal graph indicate which nodes +influence the outcome of other nodes directly. An edge from u to v +implies that the outcome of event ``u`` influences the probabilities for +the outcome of event ``v``. Certainly knowing ``u`` changes predictions for ``v``. +But also knowing ``v`` changes predictions for ``u``. The outcomes are dependent. +Furthermore, an edge from ``v`` to ``w`` would mean that ``w`` and ``v`` are dependent +and thus that ``u`` could indirectly influence ``w``. + +Without any knowledge about the system (candidate d-separating set is empty) +a causal graph ``u -> v -> w`` allows all three nodes to be dependent. But +if we know the outcome of ``v``, the conditional probabilities of outcomes for +``u`` and ``w`` are independent of each other. That is, once we know the outcome +for ```v`, the probabilities for ``w`` do not depend on the outcome for ``u``. +This is the idea behind ``v`` blocking the path if it is "known" (in the candidate +d-separating set). + +The same argument works whether the direction of the edges are both +left-going and when both arrows head out from the middle. Having a "known" +node on a path blocks the collider-free path because those relationships +make the conditional probabilities independent. + +The direction of the causal edges does impact dependence precisely in the +case of a collider e.g. ``u -> v <- w``. In that situation, both ``u`` and ``w`` +influence ``v```. But they do not directly influence each other. So without any +knowledge of any outcomes, ``u`` and ``w`` are independent. That is the idea behind +colliders blocking the path. But, if ``v`` is known, the conditional probabilities +of ``u`` and ``w`` can be dependent. This is the heart of Berkson's Paradox [6]_. +For example, suppose ``u`` and ``w`` are boolean events (they either happen or do not) +and ``v`` represents the outcome "at least one of ``u`` and ``w`` occur". Then knowing +``v`` is true makes the conditional probabilities of ``u`` and ``w`` dependent. +Essentially, knowing that at least one of them is true raises the probability of +each. But further knowledge that ``w`` is true (or false) change the conditional +probability of ``u`` to either the original value or 1. So the conditional +probability of ``u`` depends on the outcome of ``w`` even though there is no +causal relationship between them. When a collider is known, dependence can +occur across paths through that collider. This is the reason open colliders +do not block paths. + +Furthermore, even if ``v`` is not "known", if one of its descendants is "known" +we can use that information to know more about ``v`` which again makes +``u`` and ``w`` potentially dependent. Suppose the chance of ``n`` occurring +is much higher when ``v`` occurs ("at least one of ``u`` and ``w`` occur"). +Then if we know ``n`` occurred, it is more likely that ``v`` occurred and that +makes the chance of ``u`` and ``w`` dependent. This is the idea behind why +a collider does no block a path if any descendant of the collider is "known". + +When two sets of nodes ``x`` and ``y`` are d-separated by a set ``z``, +it means that given the outcomes of the nodes in ``z``, the probabilities +of outcomes of the nodes in ``x`` are independent of the outcomes of the +nodes in ``y`` and vice versa. Examples -------- - ->>> ->>> # HMM graph with five states and observation nodes -... g = nx.DiGraph() ->>> g.add_edges_from( +A Hidden Markov Model with 5 observed states and 5 hidden states +where the hidden states have causal relationships resulting in +a path results in the following causal network. We check that +early states along the path are separated from late state in +the path by the d-separator of the middle hidden state. +Thus if we condition on the middle hidden state, the early +state probabilities are independent of the late state outcomes. + +>>> G = nx.DiGraph() +>>> G.add_edges_from( ... [ -... ("S1", "S2"), -... ("S2", "S3"), -... ("S3", "S4"), -... ("S4", "S5"), -... ("S1", "O1"), -... ("S2", "O2"), -... ("S3", "O3"), -... ("S4", "O4"), -... ("S5", "O5"), +... ("H1", "H2"), +... ("H2", "H3"), +... ("H3", "H4"), +... ("H4", "H5"), +... ("H1", "O1"), +... ("H2", "O2"), +... ("H3", "O3"), +... ("H4", "O4"), +... ("H5", "O5"), ... ] ... ) ->>> ->>> # states/obs before 'S3' are d-separated from states/obs after 'S3' -... nx.d_separated(g, {"S1", "S2", "O1", "O2"}, {"S4", "S5", "O4", "O5"}, {"S3"}) +>>> x, y, z = ({"H1", "O1"}, {"H5", "O5"}, {"H3"}) +>>> nx.is_d_separator(G, x, y, z) +True +>>> nx.is_minimal_d_separator(G, x, y, z) +True +>>> nx.is_minimal_d_separator(G, x, y, z | {"O3"}) +False +>>> z = nx.find_minimal_d_separator(G, x | y, {"O2", "O3", "O4"}) +>>> z == {"H2", "H4"} +True + +If no minimal_d_separator exists, `None` is returned + +>>> other_z = nx.find_minimal_d_separator(G, x | y, {"H2", "H3"}) +>>> other_z is None True @@ -101,142 +196,192 @@ .. [1] Pearl, J. (2009). Causality. Cambridge: Cambridge University Press. -.. [2] Darwiche, A. (2009). Modeling and reasoning with Bayesian networks. +.. [2] Darwiche, A. (2009). Modeling and reasoning with Bayesian networks. Cambridge: Cambridge University Press. -.. [3] Shachter, R. D. (1998). - Bayes-ball: rational pastime (for determining irrelevance and requisite - information in belief networks and influence diagrams). - In , Proceedings of the Fourteenth Conference on Uncertainty in Artificial - Intelligence (pp. 480–487). - San Francisco, CA, USA: Morgan Kaufmann Publishers Inc. +.. [3] Shachter, Ross D. "Bayes-ball: The rational pastime (for + determining irrelevance and requisite information in belief networks + and influence diagrams)." In Proceedings of the Fourteenth Conference + on Uncertainty in Artificial Intelligence (UAI), (pp. 480–487). 1998. .. [4] Koller, D., & Friedman, N. (2009). Probabilistic graphical models: principles and techniques. The MIT Press. .. [5] https://en.wikipedia.org/wiki/Causal_Markov_condition +.. [6] https://en.wikipedia.org/wiki/Berkson%27s_paradox + """ from collections import deque +from itertools import chain import networkx as nx from networkx.utils import UnionFind, not_implemented_for -__all__ = ["d_separated", "minimal_d_separator", "is_minimal_d_separator"] +__all__ = [ + "is_d_separator", + "is_minimal_d_separator", + "find_minimal_d_separator", + "d_separated", + "minimal_d_separator", +] @not_implemented_for("undirected") -@nx._dispatch -def d_separated(G, x, y, z): - """ - Return whether node sets ``x`` and ``y`` are d-separated by ``z``. +@nx._dispatchable +def is_d_separator(G, x, y, z): + """Return whether node sets `x` and `y` are d-separated by `z`. Parameters ---------- - G : graph + G : nx.DiGraph A NetworkX DAG. - x : set - First set of nodes in ``G``. + x : node or set of nodes + First node or set of nodes in `G`. - y : set - Second set of nodes in ``G``. + y : node or set of nodes + Second node or set of nodes in `G`. - z : set - Set of conditioning nodes in ``G``. Can be empty set. + z : node or set of nodes + Potential separator (set of conditioning nodes in `G`). Can be empty set. Returns ------- b : bool - A boolean that is true if ``x`` is d-separated from ``y`` given ``z`` in ``G``. + A boolean that is true if `x` is d-separated from `y` given `z` in `G`. Raises ------ NetworkXError - The *d-separation* test is commonly used with directed - graphical models which are acyclic. Accordingly, the algorithm - raises a :exc:`NetworkXError` if the input graph is not a DAG. + The *d-separation* test is commonly used on disjoint sets of + nodes in acyclic directed graphs. Accordingly, the algorithm + raises a :exc:`NetworkXError` if the node sets are not + disjoint or if the input graph is not a DAG. NodeNotFound If any of the input nodes are not found in the graph, - a :exc:`NodeNotFound` exception is raised. + a :exc:`NodeNotFound` exception is raised Notes ----- A d-separating set in a DAG is a set of nodes that blocks all paths between the two sets. Nodes in `z` block a path if they are part of the path and are not a collider, - or a descendant of a collider. A collider structure along a path + or a descendant of a collider. Also colliders that are not in `z` + block a path. A collider structure along a path is ``... -> c <- ...`` where ``c`` is the collider node. https://en.wikipedia.org/wiki/Bayesian_network#d-separation """ + try: + x = {x} if x in G else x + y = {y} if y in G else y + z = {z} if z in G else z + + intersection = x & y or x & z or y & z + if intersection: + raise nx.NetworkXError( + f"The sets are not disjoint, with intersection {intersection}" + ) + + set_v = x | y | z + if set_v - G.nodes: + raise nx.NodeNotFound(f"The node(s) {set_v - G.nodes} are not found in G") + except TypeError: + raise nx.NodeNotFound("One of x, y, or z is not a node or a set of nodes in G") if not nx.is_directed_acyclic_graph(G): raise nx.NetworkXError("graph should be directed acyclic") - union_xyz = x.union(y).union(z) - - if any(n not in G.nodes for n in union_xyz): - raise nx.NodeNotFound("one or more specified nodes not found in the graph") - - G_copy = G.copy() - - # transform the graph by removing leaves that are not in x | y | z - # until no more leaves can be removed. - leaves = deque([n for n in G_copy.nodes if G_copy.out_degree[n] == 0]) - while len(leaves) > 0: - leaf = leaves.popleft() - if leaf not in union_xyz: - for p in G_copy.predecessors(leaf): - if G_copy.out_degree[p] == 1: - leaves.append(p) - G_copy.remove_node(leaf) - - # transform the graph by removing outgoing edges from the - # conditioning set. - edges_to_remove = list(G_copy.out_edges(z)) - G_copy.remove_edges_from(edges_to_remove) - - # use disjoint-set data structure to check if any node in `x` - # occurs in the same weakly connected component as a node in `y`. - disjoint_set = UnionFind(G_copy.nodes()) - for component in nx.weakly_connected_components(G_copy): - disjoint_set.union(*component) - disjoint_set.union(*x) - disjoint_set.union(*y) - - if x and y and disjoint_set[next(iter(x))] == disjoint_set[next(iter(y))]: - return False - else: - return True + # contains -> and <-> edges from starting node T + forward_deque = deque([]) + forward_visited = set() + + # contains <- and - edges from starting node T + backward_deque = deque(x) + backward_visited = set() + + ancestors_or_z = set().union(*[nx.ancestors(G, node) for node in x]) | z | x + + while forward_deque or backward_deque: + if backward_deque: + node = backward_deque.popleft() + backward_visited.add(node) + if node in y: + return False + if node in z: + continue + + # add <- edges to backward deque + backward_deque.extend(G.pred[node].keys() - backward_visited) + # add -> edges to forward deque + forward_deque.extend(G.succ[node].keys() - forward_visited) + + if forward_deque: + node = forward_deque.popleft() + forward_visited.add(node) + if node in y: + return False + + # Consider if -> node <- is opened due to ancestor of node in z + if node in ancestors_or_z: + # add <- edges to backward deque + backward_deque.extend(G.pred[node].keys() - backward_visited) + if node not in z: + # add -> edges to forward deque + forward_deque.extend(G.succ[node].keys() - forward_visited) + + return True @not_implemented_for("undirected") -@nx._dispatch -def minimal_d_separator(G, u, v): - """Compute a minimal d-separating set between 'u' and 'v'. +@nx._dispatchable +def find_minimal_d_separator(G, x, y, *, included=None, restricted=None): + """Returns a minimal d-separating set between `x` and `y` if possible - A d-separating set in a DAG is a set of nodes that blocks all paths - between the two nodes, 'u' and 'v'. This function - constructs a d-separating set that is "minimal", meaning it is the smallest - d-separating set for 'u' and 'v'. This is not necessarily - unique. For more details, see Notes. + A d-separating set in a DAG is a set of nodes that blocks all + paths between the two sets of nodes, `x` and `y`. This function + constructs a d-separating set that is "minimal", meaning no nodes can + be removed without it losing the d-separating property for `x` and `y`. + If no d-separating sets exist for `x` and `y`, this returns `None`. + + In a DAG there may be more than one minimal d-separator between two + sets of nodes. Minimal d-separators are not always unique. This function + returns one minimal d-separator, or `None` if no d-separator exists. + + Uses the algorithm presented in [1]_. The complexity of the algorithm + is :math:`O(m)`, where :math:`m` stands for the number of edges in + the subgraph of G consisting of only the ancestors of `x` and `y`. + For full details, see [1]_. Parameters ---------- G : graph A networkx DAG. - u : node - A node in the graph, G. - v : node - A node in the graph, G. + x : set | node + A node or set of nodes in the graph. + y : set | node + A node or set of nodes in the graph. + included : set | node | None + A node or set of nodes which must be included in the found separating set, + default is None, which means the empty set. + restricted : set | node | None + Restricted node or set of nodes to consider. Only these nodes can be in + the found separating set, default is None meaning all nodes in ``G``. + + Returns + ------- + z : set | None + The minimal d-separating set, if at least one d-separating set exists, + otherwise None. Raises ------ NetworkXError - Raises a :exc:`NetworkXError` if the input graph is not a DAG. + Raises a :exc:`NetworkXError` if the input graph is not a DAG + or if node sets `x`, `y`, and `included` are not disjoint. NodeNotFound If any of the input nodes are not found in the graph, @@ -244,89 +389,98 @@ def minimal_d_separator(G, u, v): References ---------- - .. [1] Tian, J., & Paz, A. (1998). Finding Minimal D-separators. - - Notes - ----- - This function only finds ``a`` minimal d-separator. It does not guarantee - uniqueness, since in a DAG there may be more than one minimal d-separator - between two nodes. Moreover, this only checks for minimal separators - between two nodes, not two sets. Finding minimal d-separators between - two sets of nodes is not supported. - - Uses the algorithm presented in [1]_. The complexity of the algorithm - is :math:`O(|E_{An}^m|)`, where :math:`|E_{An}^m|` stands for the - number of edges in the moralized graph of the sub-graph consisting - of only the ancestors of 'u' and 'v'. For full details, see [1]_. - - The algorithm works by constructing the moral graph consisting of just - the ancestors of `u` and `v`. Then it constructs a candidate for - a separating set ``Z'`` from the predecessors of `u` and `v`. - Then BFS is run starting from `u` and marking nodes - found from ``Z'`` and calling those nodes ``Z''``. - Then BFS is run again starting from `v` and marking nodes if they are - present in ``Z''``. Those marked nodes are the returned minimal - d-separating set. - - https://en.wikipedia.org/wiki/Bayesian_network#d-separation + .. [1] van der Zander, Benito, and Maciej Liśkiewicz. "Finding + minimal d-separators in linear time and applications." In + Uncertainty in Artificial Intelligence, pp. 637-647. PMLR, 2020. """ if not nx.is_directed_acyclic_graph(G): raise nx.NetworkXError("graph should be directed acyclic") - union_uv = {u, v} + try: + x = {x} if x in G else x + y = {y} if y in G else y - if any(n not in G.nodes for n in union_uv): - raise nx.NodeNotFound("one or more specified nodes not found in the graph") + if included is None: + included = set() + elif included in G: + included = {included} - # first construct the set of ancestors of X and Y - x_anc = nx.ancestors(G, u) - y_anc = nx.ancestors(G, v) - D_anc_xy = x_anc.union(y_anc) - D_anc_xy.update((u, v)) + if restricted is None: + restricted = set(G) + elif restricted in G: + restricted = {restricted} - # second, construct the moralization of the subgraph of Anc(X,Y) - moral_G = nx.moral_graph(G.subgraph(D_anc_xy)) + set_y = x | y | included | restricted + if set_y - G.nodes: + raise nx.NodeNotFound(f"The node(s) {set_y - G.nodes} are not found in G") + except TypeError: + raise nx.NodeNotFound( + "One of x, y, included or restricted is not a node or set of nodes in G" + ) - # find a separating set Z' in moral_G - Z_prime = set(G.predecessors(u)).union(set(G.predecessors(v))) + if not included <= restricted: + raise nx.NetworkXError( + f"Included nodes {included} must be in restricted nodes {restricted}" + ) - # perform BFS on the graph from 'x' to mark - Z_dprime = _bfs_with_marks(moral_G, u, Z_prime) - Z = _bfs_with_marks(moral_G, v, Z_dprime) - return Z + intersection = x & y or x & included or y & included + if intersection: + raise nx.NetworkXError( + f"The sets x, y, included are not disjoint. Overlap: {intersection}" + ) + + nodeset = x | y | included + ancestors_x_y_included = nodeset.union(*[nx.ancestors(G, node) for node in nodeset]) + + z_init = restricted & (ancestors_x_y_included - (x | y)) + + x_closure = _reachable(G, x, ancestors_x_y_included, z_init) + if x_closure & y: + return None + + z_updated = z_init & (x_closure | included) + y_closure = _reachable(G, y, ancestors_x_y_included, z_updated) + return z_updated & (y_closure | included) @not_implemented_for("undirected") -@nx._dispatch -def is_minimal_d_separator(G, u, v, z): - """Determine if a d-separating set is minimal. +@nx._dispatchable +def is_minimal_d_separator(G, x, y, z, *, included=None, restricted=None): + """Determine if `z` is a minimal d-separator for `x` and `y`. - A d-separating set, `z`, in a DAG is a set of nodes that blocks - all paths between the two nodes, `u` and `v`. This function - verifies that a set is "minimal", meaning there is no smaller - d-separating set between the two nodes. + A d-separator, `z`, in a DAG is a set of nodes that blocks + all paths from nodes in set `x` to nodes in set `y`. + A minimal d-separator is a d-separator `z` such that removing + any subset of nodes makes it no longer a d-separator. - Note: This function checks whether `z` is a d-separator AND is minimal. - One can use the function `d_separated` to only check if `z` is a d-separator. - See examples below. + Note: This function checks whether `z` is a d-separator AND is + minimal. One can use the function `is_d_separator` to only check if + `z` is a d-separator. See examples below. Parameters ---------- G : nx.DiGraph - The graph. - u : node - A node in the graph. - v : node - A node in the graph. - z : Set of nodes - The set of nodes to check if it is a minimal d-separating set. - The function :func:`d_separated` is called inside this function + A NetworkX DAG. + x : node | set + A node or set of nodes in the graph. + y : node | set + A node or set of nodes in the graph. + z : node | set + The node or set of nodes to check if it is a minimal d-separating set. + The function :func:`is_d_separator` is called inside this function to verify that `z` is in fact a d-separator. + included : set | node | None + A node or set of nodes which must be included in the found separating set, + default is ``None``, which means the empty set. + restricted : set | node | None + Restricted node or set of nodes to consider. Only these nodes can be in + the found separating set, default is ``None`` meaning all nodes in ``G``. Returns ------- bool - Whether or not the set `z` is a d-separator and is also minimal. + Whether or not the set `z` is a minimal d-separator subject to + `restricted` nodes and `included` node constraints. Examples -------- @@ -338,7 +492,7 @@ def is_minimal_d_separator(G, u, v, z): >>> nx.is_minimal_d_separator(G, 0, 2, {1, 3, 4}) False >>> # alternatively, if we only want to check that {1, 3, 4} is a d-separator - >>> nx.d_separated(G, {0}, {4}, {1, 3, 4}) + >>> nx.is_d_separator(G, 0, 2, {1, 3, 4}) True Raises @@ -352,106 +506,217 @@ def is_minimal_d_separator(G, u, v, z): References ---------- - .. [1] Tian, J., & Paz, A. (1998). Finding Minimal D-separators. + .. [1] van der Zander, Benito, and Maciej Liśkiewicz. "Finding + minimal d-separators in linear time and applications." In + Uncertainty in Artificial Intelligence, pp. 637-647. PMLR, 2020. Notes ----- - This function only works on verifying a d-separating set is minimal - between two nodes. To verify that a d-separating set is minimal between - two sets of nodes is not supported. - - Uses algorithm 2 presented in [1]_. The complexity of the algorithm - is :math:`O(|E_{An}^m|)`, where :math:`|E_{An}^m|` stands for the - number of edges in the moralized graph of the sub-graph consisting - of only the ancestors of ``u`` and ``v``. - - The algorithm works by constructing the moral graph consisting of just - the ancestors of `u` and `v`. First, it performs BFS on the moral graph - starting from `u` and marking any nodes it encounters that are part of - the separating set, `z`. If a node is marked, then it does not continue - along that path. In the second stage, BFS with markings is repeated on the - moral graph starting from `v`. If at any stage, any node in `z` is - not marked, then `z` is considered not minimal. If the end of the algorithm - is reached, then `z` is minimal. + This function works on verifying that a set is minimal and + d-separating between two nodes. Uses criterion (a), (b), (c) on + page 4 of [1]_. a) closure(`x`) and `y` are disjoint. b) `z` contains + all nodes from `included` and is contained in the `restricted` + nodes and in the union of ancestors of `x`, `y`, and `included`. + c) the nodes in `z` not in `included` are contained in both + closure(x) and closure(y). The closure of a set is the set of nodes + connected to the set by a directed path in G. + + The complexity is :math:`O(m)`, where :math:`m` stands for the + number of edges in the subgraph of G consisting of only the + ancestors of `x` and `y`. For full details, see [1]_. - - https://en.wikipedia.org/wiki/Bayesian_network#d-separation """ - if not nx.d_separated(G, {u}, {v}, z): - return False - - x_anc = nx.ancestors(G, u) - y_anc = nx.ancestors(G, v) - xy_anc = x_anc.union(y_anc) + if not nx.is_directed_acyclic_graph(G): + raise nx.NetworkXError("graph should be directed acyclic") - # if Z contains any node which is not in ancestors of X or Y - # then it is definitely not minimal - if any(node not in xy_anc for node in z): + try: + x = {x} if x in G else x + y = {y} if y in G else y + z = {z} if z in G else z + + if included is None: + included = set() + elif included in G: + included = {included} + + if restricted is None: + restricted = set(G) + elif restricted in G: + restricted = {restricted} + + set_y = x | y | included | restricted + if set_y - G.nodes: + raise nx.NodeNotFound(f"The node(s) {set_y - G.nodes} are not found in G") + except TypeError: + raise nx.NodeNotFound( + "One of x, y, z, included or restricted is not a node or set of nodes in G" + ) + + if not included <= z: + raise nx.NetworkXError( + f"Included nodes {included} must be in proposed separating set z {x}" + ) + if not z <= restricted: + raise nx.NetworkXError( + f"Separating set {z} must be contained in restricted set {restricted}" + ) + + intersection = x.intersection(y) or x.intersection(z) or y.intersection(z) + if intersection: + raise nx.NetworkXError( + f"The sets are not disjoint, with intersection {intersection}" + ) + + nodeset = x | y | included + ancestors_x_y_included = nodeset.union(*[nx.ancestors(G, n) for n in nodeset]) + + # criterion (a) -- check that z is actually a separator + x_closure = _reachable(G, x, ancestors_x_y_included, z) + if x_closure & y: return False - D_anc_xy = x_anc.union(y_anc) - D_anc_xy.update((u, v)) - - # second, construct the moralization of the subgraph - moral_G = nx.moral_graph(G.subgraph(D_anc_xy)) - - # start BFS from X - marks = _bfs_with_marks(moral_G, u, z) - - # if not all the Z is marked, then the set is not minimal - if any(node not in marks for node in z): + # criterion (b) -- basic constraint; included and restricted already checked above + if not (z <= ancestors_x_y_included): return False - # similarly, start BFS from Y and check the marks - marks = _bfs_with_marks(moral_G, v, z) - # if not all the Z is marked, then the set is not minimal - if any(node not in marks for node in z): + # criterion (c) -- check that z is minimal + y_closure = _reachable(G, y, ancestors_x_y_included, z) + if not ((z - included) <= (x_closure & y_closure)): return False - return True -@not_implemented_for("directed") -def _bfs_with_marks(G, start_node, check_set): - """Breadth-first-search with markings. +@not_implemented_for("undirected") +def _reachable(G, x, a, z): + """Modified Bayes-Ball algorithm for finding d-connected nodes. - Performs BFS starting from ``start_node`` and whenever a node - inside ``check_set`` is met, it is "marked". Once a node is marked, - BFS does not continue along that path. The resulting marked nodes - are returned. + Find all nodes in `a` that are d-connected to those in `x` by + those in `z`. This is an implementation of the function + `REACHABLE` in [1]_ (which is itself a modification of the + Bayes-Ball algorithm [2]_) when restricted to DAGs. Parameters ---------- - G : nx.Graph - An undirected graph. - start_node : node - The start of the BFS. - check_set : set - The set of nodes to check against. + G : nx.DiGraph + A NetworkX DAG. + x : node | set + A node in the DAG, or a set of nodes. + a : node | set + A (set of) node(s) in the DAG containing the ancestors of `x`. + z : node | set + The node or set of nodes conditioned on when checking d-connectedness. Returns ------- - marked : set - A set of nodes that were marked. + w : set + The closure of `x` in `a` with respect to d-connectedness + given `z`. + + References + ---------- + .. [1] van der Zander, Benito, and Maciej Liśkiewicz. "Finding + minimal d-separators in linear time and applications." In + Uncertainty in Artificial Intelligence, pp. 637-647. PMLR, 2020. + + .. [2] Shachter, Ross D. "Bayes-ball: The rational pastime + (for determining irrelevance and requisite information in + belief networks and influence diagrams)." In Proceedings of the + Fourteenth Conference on Uncertainty in Artificial Intelligence + (UAI), (pp. 480–487). 1998. + """ + + def _pass(e, v, f, n): + """Whether a ball entering node `v` along edge `e` passes to `n` along `f`. + + Boolean function defined on page 6 of [1]_. + + Parameters + ---------- + e : bool + Directed edge by which the ball got to node `v`; `True` iff directed into `v`. + v : node + Node where the ball is. + f : bool + Directed edge connecting nodes `v` and `n`; `True` iff directed `n`. + n : node + Checking whether the ball passes to this node. + + Returns + ------- + b : bool + Whether the ball passes or not. + + References + ---------- + .. [1] van der Zander, Benito, and Maciej Liśkiewicz. "Finding + minimal d-separators in linear time and applications." In + Uncertainty in Artificial Intelligence, pp. 637-647. PMLR, 2020. + """ + is_element_of_A = n in a + # almost_definite_status = True # always true for DAGs; not so for RCGs + collider_if_in_Z = v not in z or (e and not f) + return is_element_of_A and collider_if_in_Z # and almost_definite_status + + queue = deque([]) + for node in x: + if bool(G.pred[node]): + queue.append((True, node)) + if bool(G.succ[node]): + queue.append((False, node)) + processed = queue.copy() + + while any(queue): + e, v = queue.popleft() + preds = ((False, n) for n in G.pred[v]) + succs = ((True, n) for n in G.succ[v]) + f_n_pairs = chain(preds, succs) + for f, n in f_n_pairs: + if (f, n) not in processed and _pass(e, v, f, n): + queue.append((f, n)) + processed.append((f, n)) + + return {w for (_, w) in processed} + + +# Deprecated functions: +def d_separated(G, x, y, z): + """Return whether nodes sets ``x`` and ``y`` are d-separated by ``z``. + + .. deprecated:: 3.3 + + This function is deprecated and will be removed in NetworkX v3.5. + Please use `is_d_separator(G, x, y, z)`. + + """ + import warnings + + warnings.warn( + "d_separated is deprecated and will be removed in NetworkX v3.5." + "Please use `is_d_separator(G, x, y, z)`.", + category=DeprecationWarning, + stacklevel=2, + ) + return nx.is_d_separator(G, x, y, z) + + +def minimal_d_separator(G, u, v): + """Returns a minimal_d-separating set between `x` and `y` if possible + + .. deprecated:: 3.3 + + minimal_d_separator is deprecated and will be removed in NetworkX v3.5. + Please use `find_minimal_d_separator(G, x, y)`. + """ - visited = {} - marked = set() - queue = [] - - visited[start_node] = None - queue.append(start_node) - while queue: - m = queue.pop(0) - - for nbr in G.neighbors(m): - if nbr not in visited: - # memoize where we visited so far - visited[nbr] = None - - # mark the node in Z' and do not continue along that path - if nbr in check_set: - marked.add(nbr) - else: - queue.append(nbr) - return marked + import warnings + + warnings.warn( + ( + "This function is deprecated and will be removed in NetworkX v3.5." + "Please use `is_d_separator(G, x, y)`." + ), + category=DeprecationWarning, + stacklevel=2, + ) + return nx.find_minimal_d_separator(G, u, v) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dag.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dag.py index fb74df81c..a70e2c5ef 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dag.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dag.py @@ -36,7 +36,7 @@ chaini = chain.from_iterable -@nx._dispatch +@nx._dispatchable def descendants(G, source): """Returns all nodes reachable from `source` in `G`. @@ -73,7 +73,7 @@ def descendants(G, source): return {child for parent, child in nx.bfs_edges(G, source)} -@nx._dispatch +@nx._dispatchable def ancestors(G, source): """Returns all nodes having a path to `source` in `G`. @@ -110,7 +110,7 @@ def ancestors(G, source): return {child for parent, child in nx.bfs_edges(G, source, reverse=True)} -@nx._dispatch +@nx._dispatchable def has_cycle(G): """Decides whether the directed graph has a cycle.""" try: @@ -122,7 +122,7 @@ def has_cycle(G): return False -@nx._dispatch +@nx._dispatchable def is_directed_acyclic_graph(G): """Returns True if the graph `G` is a directed acyclic graph (DAG) or False if not. @@ -163,7 +163,7 @@ def is_directed_acyclic_graph(G): return G.is_directed() and not has_cycle(G) -@nx._dispatch +@nx._dispatchable def topological_generations(G): """Stratifies a DAG into generations. @@ -241,7 +241,7 @@ def topological_generations(G): ) -@nx._dispatch +@nx._dispatchable def topological_sort(G): """Returns a generator of nodes in topologically sorted order. @@ -310,7 +310,7 @@ def topological_sort(G): yield from generation -@nx._dispatch +@nx._dispatchable def lexicographical_topological_sort(G, key=None): """Generate the nodes in the unique lexicographical topological sort order. @@ -377,7 +377,7 @@ def lexicographical_topological_sort(G, key=None): The sort will fail for any graph with integer and string nodes. Comparison of integer to strings is not defined in python. Is 3 greater or less than 'red'? - >>> DG = nx.DiGraph([(1, 'red'), (3, 'red'), (1, 'green'), (2, 'blue')]) + >>> DG = nx.DiGraph([(1, "red"), (3, "red"), (1, "green"), (2, "blue")]) >>> list(nx.lexicographical_topological_sort(DG)) Traceback (most recent call last): ... @@ -453,7 +453,7 @@ def create_tuple(node): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def all_topological_sorts(G): """Returns a generator of _all_ topological sorts of the directed graph G. @@ -572,7 +572,7 @@ def all_topological_sorts(G): break -@nx._dispatch +@nx._dispatchable def is_aperiodic(G): """Returns True if `G` is aperiodic. @@ -641,7 +641,8 @@ def is_aperiodic(G): """ if not G.is_directed(): raise nx.NetworkXError("is_aperiodic not defined for undirected graphs") - + if len(G) == 0: + raise nx.NetworkXPointlessConcept("Graph has no nodes.") s = arbitrary_element(G) levels = {s: 0} this_level = [s] @@ -664,7 +665,7 @@ def is_aperiodic(G): return g == 1 and nx.is_aperiodic(G.subgraph(set(G) - set(levels))) -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def transitive_closure(G, reflexive=False): """Returns transitive closure of a graph @@ -757,7 +758,7 @@ def transitive_closure(G, reflexive=False): @not_implemented_for("undirected") -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def transitive_closure_dag(G, topo_order=None): """Returns the transitive closure of a directed acyclic graph. @@ -814,7 +815,7 @@ def transitive_closure_dag(G, topo_order=None): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def transitive_reduction(G): """Returns transitive reduction of a directed graph @@ -852,7 +853,7 @@ def transitive_reduction(G): To perform transitive reduction on a DiGraph and transfer node/edge data: >>> DG = nx.DiGraph() - >>> DG.add_edges_from([(1, 2), (2, 3), (1, 3)], color='red') + >>> DG.add_edges_from([(1, 2), (2, 3), (1, 3)], color="red") >>> TR = nx.transitive_reduction(DG) >>> TR.add_nodes_from(DG.nodes(data=True)) >>> TR.add_edges_from((u, v, DG.edges[u, v]) for u, v in TR.edges) @@ -887,7 +888,7 @@ def transitive_reduction(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def antichains(G, topo_order=None): """Generates antichains from a directed acyclic graph (DAG). @@ -954,7 +955,7 @@ def antichains(G, topo_order=None): @not_implemented_for("undirected") -@nx._dispatch(edge_attrs={"weight": "default_weight"}) +@nx._dispatchable(edge_attrs={"weight": "default_weight"}) def dag_longest_path(G, weight="weight", default_weight=1, topo_order=None): """Returns the longest path in a directed acyclic graph (DAG). @@ -987,7 +988,7 @@ def dag_longest_path(G, weight="weight", default_weight=1, topo_order=None): Examples -------- - >>> DG = nx.DiGraph([(0, 1, {'cost':1}), (1, 2, {'cost':1}), (0, 2, {'cost':42})]) + >>> DG = nx.DiGraph([(0, 1, {"cost": 1}), (1, 2, {"cost": 1}), (0, 2, {"cost": 42})]) >>> list(nx.all_simple_paths(DG, 0, 2)) [[0, 1, 2], [0, 2]] >>> nx.dag_longest_path(DG) @@ -1050,7 +1051,7 @@ def dag_longest_path(G, weight="weight", default_weight=1, topo_order=None): @not_implemented_for("undirected") -@nx._dispatch(edge_attrs={"weight": "default_weight"}) +@nx._dispatchable(edge_attrs={"weight": "default_weight"}) def dag_longest_path_length(G, weight="weight", default_weight=1): """Returns the longest path length in a DAG @@ -1077,7 +1078,7 @@ def dag_longest_path_length(G, weight="weight", default_weight=1): Examples -------- - >>> DG = nx.DiGraph([(0, 1, {'cost':1}), (1, 2, {'cost':1}), (0, 2, {'cost':42})]) + >>> DG = nx.DiGraph([(0, 1, {"cost": 1}), (1, 2, {"cost": 1}), (0, 2, {"cost": 42})]) >>> list(nx.all_simple_paths(DG, 0, 2)) [[0, 1, 2], [0, 2]] >>> nx.dag_longest_path_length(DG) @@ -1102,7 +1103,7 @@ def dag_longest_path_length(G, weight="weight", default_weight=1): return path_length -@nx._dispatch +@nx._dispatchable def root_to_leaf_paths(G): """Yields root-to-leaf paths in a directed acyclic graph. @@ -1123,7 +1124,7 @@ def root_to_leaf_paths(G): @not_implemented_for("multigraph") @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def dag_to_branching(G): """Returns a branching representing all (overlapping) paths from root nodes to leaf nodes in the given directed acyclic graph. @@ -1221,7 +1222,7 @@ def dag_to_branching(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def compute_v_structures(G): """Iterate through the graph to compute all v-structures. @@ -1249,7 +1250,7 @@ def compute_v_structures(G): Notes ----- - https://en.wikipedia.org/wiki/Collider_(statistics) + `Wikipedia: Collider in causal graphs `_ """ for collider, preds in G.pred.items(): for common_parents in combinations(preds, r=2): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_measures.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_measures.py index 17e264821..20c1086d6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_measures.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_measures.py @@ -12,6 +12,7 @@ "barycenter", "resistance_distance", "kemeny_constant", + "effective_graph_resistance", ] @@ -236,7 +237,7 @@ def _extrema_bounding(G, compute="diameter", weight=None): return None -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def eccentricity(G, v=None, sp=None, weight=None): """Returns the eccentricity of nodes in G. @@ -325,7 +326,7 @@ def eccentricity(G, v=None, sp=None, weight=None): return e -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def diameter(G, e=None, usebounds=False, weight=None): """Returns the diameter of the graph G. @@ -381,7 +382,7 @@ def diameter(G, e=None, usebounds=False, weight=None): return max(e.values()) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def periphery(G, e=None, usebounds=False, weight=None): """Returns the periphery of the graph G. @@ -440,7 +441,7 @@ def periphery(G, e=None, usebounds=False, weight=None): return p -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def radius(G, e=None, usebounds=False, weight=None): """Returns the radius of the graph G. @@ -493,7 +494,7 @@ def radius(G, e=None, usebounds=False, weight=None): return min(e.values()) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def center(G, e=None, usebounds=False, weight=None): """Returns the center of the graph G. @@ -552,7 +553,7 @@ def center(G, e=None, usebounds=False, weight=None): return p -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight", mutates_input={"attr": 2}) def barycenter(G, weight=None, attr=None, sp=None): r"""Calculate barycenter of a connected graph, optionally with edge weights. @@ -628,27 +629,15 @@ def barycenter(G, weight=None, attr=None, sp=None): barycenter_vertices = [v] elif barycentricity == smallest: barycenter_vertices.append(v) + if attr is not None: + nx._clear_cache(G) return barycenter_vertices -def _count_lu_permutations(perm_array): - """Counts the number of permutations in SuperLU perm_c or perm_r""" - perm_cnt = 0 - arr = perm_array.tolist() - for i in range(len(arr)): - if i != arr[i]: - perm_cnt += 1 - n = arr.index(i) - arr[n] = arr[i] - arr[i] = i - - return perm_cnt - - @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def resistance_distance(G, nodeA=None, nodeB=None, weight=None, invert_weight=True): - """Returns the resistance distance between every pair of nodes on graph G. + """Returns the resistance distance between pairs of nodes in graph G. The resistance distance between two nodes of a graph is akin to treating the graph as a grid of resistors with a resistance equal to the provided @@ -748,14 +737,14 @@ def resistance_distance(G, nodeA=None, nodeB=None, weight=None, invert_weight=Tr if nodeA is not None and nodeB is not None: i = node_list.index(nodeA) j = node_list.index(nodeB) - return Linv[i, i] + Linv[j, j] - Linv[i, j] - Linv[j, i] + return Linv.item(i, i) + Linv.item(j, j) - Linv.item(i, j) - Linv.item(j, i) elif nodeA is not None: i = node_list.index(nodeA) d = {} for n in G: j = node_list.index(n) - d[n] = Linv[i, i] + Linv[j, j] - Linv[i, j] - Linv[j, i] + d[n] = Linv.item(i, i) + Linv.item(j, j) - Linv.item(i, j) - Linv.item(j, i) return d elif nodeB is not None: @@ -763,7 +752,7 @@ def resistance_distance(G, nodeA=None, nodeB=None, weight=None, invert_weight=Tr d = {} for n in G: i = node_list.index(n) - d[n] = Linv[i, i] + Linv[j, j] - Linv[i, j] - Linv[j, i] + d[n] = Linv.item(i, i) + Linv.item(j, j) - Linv.item(i, j) - Linv.item(j, i) return d else: @@ -773,12 +762,105 @@ def resistance_distance(G, nodeA=None, nodeB=None, weight=None, invert_weight=Tr d[n] = {} for n2 in G: j = node_list.index(n2) - d[n][n2] = Linv[i, i] + Linv[j, j] - Linv[i, j] - Linv[j, i] + d[n][n2] = ( + Linv.item(i, i) + + Linv.item(j, j) + - Linv.item(i, j) + - Linv.item(j, i) + ) return d +@not_implemented_for("directed") +@nx._dispatchable(edge_attrs="weight") +def effective_graph_resistance(G, weight=None, invert_weight=True): + """Returns the Effective graph resistance of G. + + Also known as the Kirchhoff index. + + The effective graph resistance is defined as the sum + of the resistance distance of every node pair in G [1]_. + + If weight is not provided, then a weight of 1 is used for all edges. + + The effective graph resistance of a disconnected graph is infinite. + + Parameters + ---------- + G : NetworkX graph + A graph + + weight : string or None, optional (default=None) + The edge data key used to compute the effective graph resistance. + If None, then each edge has weight 1. + + invert_weight : boolean (default=True) + Proper calculation of resistance distance requires building the + Laplacian matrix with the reciprocal of the weight. Not required + if the weight is already inverted. Weight cannot be zero. + + Returns + ------- + RG : float + The effective graph resistance of `G`. + + Raises + ------ + NetworkXNotImplemented + If `G` is a directed graph. + + NetworkXError + If `G` does not contain any nodes. + + Examples + -------- + >>> G = nx.Graph([(1, 2), (1, 3), (1, 4), (3, 4), (3, 5), (4, 5)]) + >>> round(nx.effective_graph_resistance(G), 10) + 10.25 + + Notes + ----- + The implementation is based on Theorem 2.2 in [2]_. Self-loops are ignored. + Multi-edges are contracted in one edge with weight equal to the harmonic sum of the weights. + + References + ---------- + .. [1] Wolfram + "Kirchhoff Index." + https://mathworld.wolfram.com/KirchhoffIndex.html + .. [2] W. Ellens, F. M. Spieksma, P. Van Mieghem, A. Jamakovic, R. E. Kooij. + Effective graph resistance. + Lin. Alg. Appl. 435:2491-2506, 2011. + """ + import numpy as np + + if len(G) == 0: + raise nx.NetworkXError("Graph G must contain at least one node.") + + # Disconnected graphs have infinite Effective graph resistance + if not nx.is_connected(G): + return float("inf") + + # Invert weights + G = G.copy() + if invert_weight and weight is not None: + if G.is_multigraph(): + for u, v, k, d in G.edges(keys=True, data=True): + d[weight] = 1 / d[weight] + else: + for u, v, d in G.edges(data=True): + d[weight] = 1 / d[weight] + + # Get Laplacian eigenvalues + mu = np.sort(nx.laplacian_spectrum(G, weight=weight)) + + # Compute Effective graph resistance based on spectrum of the Laplacian + # Self-loops are ignored + return float(np.sum(1 / mu[1:]) * G.number_of_nodes()) + + @nx.utils.not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def kemeny_constant(G, *, weight=None): """Returns the Kemeny constant of the given graph. @@ -807,7 +889,7 @@ def kemeny_constant(G, *, weight=None): Returns ------- - K : float + float The Kemeny constant of the graph `G`. Raises @@ -866,4 +948,4 @@ def kemeny_constant(G, *, weight=None): eig = np.sort(sp.linalg.eigvalsh(H.todense())) # Compute the Kemeny constant - return np.sum(1 / (1 - eig[:-1])) + return float(np.sum(1 / (1 - eig[:-1]))) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_regular.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_regular.py index 18c19ee00..27b4d0216 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_regular.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/distance_regular.py @@ -17,7 +17,7 @@ ] -@nx._dispatch +@nx._dispatchable def is_distance_regular(G): """Returns True if the graph is distance regular, False otherwise. @@ -109,8 +109,9 @@ def global_parameters(b, c): return ((y, b[0] - x - y, x) for x, y in zip(b + [0], [0] + c)) -@not_implemented_for("directed", "multigraph") -@nx._dispatch +@not_implemented_for("directed") +@not_implemented_for("multigraph") +@nx._dispatchable def intersection_array(G): """Returns the intersection array of a distance-regular graph. @@ -147,6 +148,8 @@ def intersection_array(G): global_parameters """ # test for regular graph (all degrees must be equal) + if len(G) == 0: + raise nx.NetworkXPointlessConcept("Graph has no nodes.") degree = iter(G.degree()) (_, k) = next(degree) for _, knext in degree: @@ -179,8 +182,9 @@ def intersection_array(G): # TODO There is a definition for directed strongly regular graphs. -@not_implemented_for("directed", "multigraph") -@nx._dispatch +@not_implemented_for("directed") +@not_implemented_for("multigraph") +@nx._dispatchable def is_strongly_regular(G): """Returns True if and only if the given graph is strongly regular. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominance.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominance.py index ffdbe7d21..ab841fe21 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominance.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominance.py @@ -11,7 +11,7 @@ @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def immediate_dominators(G, start): """Returns the immediate dominators of all nodes of a directed graph. @@ -84,7 +84,7 @@ def intersect(u, v): return idom -@nx._dispatch +@nx._dispatchable def dominance_frontiers(G, start): """Returns the dominance frontiers of all nodes of a directed graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominating.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominating.py index 97408ab43..8e9a458f8 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominating.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/dominating.py @@ -7,7 +7,7 @@ __all__ = ["dominating_set", "is_dominating_set"] -@nx._dispatch +@nx._dispatchable def dominating_set(G, start_with=None): r"""Finds a dominating set for the graph G. @@ -55,17 +55,17 @@ def dominating_set(G, start_with=None): while remaining_nodes: # Choose an arbitrary node and determine its undominated neighbors. v = remaining_nodes.pop() - undominated_neighbors = set(G[v]) - dominating_set + undominated_nbrs = set(G[v]) - dominating_set # Add the node to the dominating set and the neighbors to the # dominated set. Finally, remove all of those nodes from the set # of remaining nodes. dominating_set.add(v) - dominated_nodes |= undominated_neighbors - remaining_nodes -= undominated_neighbors + dominated_nodes |= undominated_nbrs + remaining_nodes -= undominated_nbrs return dominating_set -@nx._dispatch +@nx._dispatchable def is_dominating_set(G, nbunch): """Checks if `nbunch` is a dominating set for `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/efficiency_measures.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/efficiency_measures.py index 3beea38b0..2c99b0114 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/efficiency_measures.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/efficiency_measures.py @@ -9,7 +9,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def efficiency(G, u, v): """Returns the efficiency of a pair of nodes in a graph. @@ -60,7 +60,7 @@ def efficiency(G, u, v): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def global_efficiency(G): """Returns the average global efficiency of the graph. @@ -121,7 +121,7 @@ def global_efficiency(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def local_efficiency(G): """Returns the average local efficiency of the graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/euler.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/euler.py index 9d61b5e41..2e0e57358 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/euler.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/euler.py @@ -17,7 +17,7 @@ ] -@nx._dispatch +@nx._dispatchable def is_eulerian(G): """Returns True if and only if `G` is Eulerian. @@ -69,7 +69,7 @@ def is_eulerian(G): return all(d % 2 == 0 for v, d in G.degree()) and nx.is_connected(G) -@nx._dispatch +@nx._dispatchable def is_semieulerian(G): """Return True iff `G` is semi-Eulerian. @@ -154,7 +154,7 @@ def _multigraph_eulerian_circuit(G, source): G.remove_edge(current_vertex, next_vertex, next_key) -@nx._dispatch +@nx._dispatchable def eulerian_circuit(G, source=None, keys=False): """Returns an iterator over the edges of an Eulerian circuit in `G`. @@ -235,7 +235,7 @@ def eulerian_circuit(G, source=None, keys=False): yield from _simplegraph_eulerian_circuit(G, source) -@nx._dispatch +@nx._dispatchable def has_eulerian_path(G, source=None): """Return True iff `G` has an Eulerian path. @@ -330,7 +330,7 @@ def has_eulerian_path(G, source=None): return sum(d % 2 == 1 for v, d in G.degree()) == 2 and nx.is_connected(G) -@nx._dispatch +@nx._dispatchable def eulerian_path(G, source=None, keys=False): """Return an iterator over the edges of an Eulerian path in `G`. @@ -386,7 +386,7 @@ def eulerian_path(G, source=None, keys=False): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def eulerize(G): """Transforms a graph into an Eulerian graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/__init__.cpython-312.pyc index 6e33ffdaa..253408a89 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/boykovkolmogorov.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/boykovkolmogorov.cpython-312.pyc index f757c1d7f..b6ddab8da 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/boykovkolmogorov.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/boykovkolmogorov.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/capacityscaling.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/capacityscaling.cpython-312.pyc index 11cabdf7a..1aec36875 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/capacityscaling.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/capacityscaling.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/dinitz_alg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/dinitz_alg.cpython-312.pyc index b2e8439a9..77ca4a160 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/dinitz_alg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/dinitz_alg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/edmondskarp.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/edmondskarp.cpython-312.pyc index e47a1975e..2ae9fe832 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/edmondskarp.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/edmondskarp.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/gomory_hu.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/gomory_hu.cpython-312.pyc index 42f443b4b..1da743955 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/gomory_hu.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/gomory_hu.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/maxflow.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/maxflow.cpython-312.pyc index 04031db65..471010db1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/maxflow.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/maxflow.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/mincost.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/mincost.cpython-312.pyc index 4adeb682f..d170c5801 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/mincost.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/mincost.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/networksimplex.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/networksimplex.cpython-312.pyc index f00efc02e..00b5154d1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/networksimplex.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/networksimplex.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/preflowpush.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/preflowpush.cpython-312.pyc index ccf7de904..8055c2f3d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/preflowpush.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/preflowpush.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/shortestaugmentingpath.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/shortestaugmentingpath.cpython-312.pyc index e0f77dd85..a506ed9eb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/shortestaugmentingpath.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/shortestaugmentingpath.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/utils.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/utils.cpython-312.pyc index b4f14eb26..67d6f0d98 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/utils.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/__pycache__/utils.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/boykovkolmogorov.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/boykovkolmogorov.py index f571c98ae..87290a928 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/boykovkolmogorov.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/boykovkolmogorov.py @@ -10,12 +10,7 @@ __all__ = ["boykov_kolmogorov"] -@nx._dispatch( - graphs={"G": 0, "residual?": 4}, - edge_attrs={"capacity": float("inf")}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, - preserve_graph_attrs={"residual"}, -) +@nx._dispatchable(edge_attrs={"capacity": float("inf")}, returns_graph=True) def boykov_kolmogorov( G, s, t, capacity="capacity", residual=None, value_only=False, cutoff=None ): @@ -161,6 +156,7 @@ def boykov_kolmogorov( """ R = boykov_kolmogorov_impl(G, s, t, capacity, residual, cutoff) R.graph["algorithm"] = "boykov_kolmogorov" + nx._clear_cache(R) return R diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/capacityscaling.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/capacityscaling.py index 2c0002d86..bf68565c5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/capacityscaling.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/capacityscaling.py @@ -149,7 +149,9 @@ def _build_flow_dict(G, R, capacity, weight): return flow_dict -@nx._dispatch(node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0}) +@nx._dispatchable( + node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0} +) def capacity_scaling( G, demand="demand", capacity="capacity", weight="weight", heap=BinaryHeap ): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/dinitz_alg.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/dinitz_alg.py index b33e0ea28..bcc08fe48 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/dinitz_alg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/dinitz_alg.py @@ -10,12 +10,7 @@ __all__ = ["dinitz"] -@nx._dispatch( - graphs={"G": 0, "residual?": 4}, - edge_attrs={"capacity": float("inf")}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, - preserve_graph_attrs={"residual"}, -) +@nx._dispatchable(edge_attrs={"capacity": float("inf")}, returns_graph=True) def dinitz(G, s, t, capacity="capacity", residual=None, value_only=False, cutoff=None): """Find a maximum single-commodity flow using Dinitz' algorithm. @@ -140,6 +135,7 @@ def dinitz(G, s, t, capacity="capacity", residual=None, value_only=False, cutoff """ R = dinitz_impl(G, s, t, capacity, residual, cutoff) R.graph["algorithm"] = "dinitz" + nx._clear_cache(R) return R @@ -173,35 +169,59 @@ def dinitz_impl(G, s, t, capacity, residual, cutoff): def breath_first_search(): parents = {} - queue = deque([s]) + vertex_dist = {s: 0} + queue = deque([(s, 0)]) + # Record all the potential edges of shortest augmenting paths while queue: if t in parents: break - u = queue.popleft() - for v in R_succ[u]: - attr = R_succ[u][v] - if v not in parents and attr["capacity"] - attr["flow"] > 0: - parents[v] = u - queue.append(v) + u, dist = queue.popleft() + for v, attr in R_succ[u].items(): + if attr["capacity"] - attr["flow"] > 0: + if v in parents: + if vertex_dist[v] == dist + 1: + parents[v].append(u) + else: + parents[v] = deque([u]) + vertex_dist[v] = dist + 1 + queue.append((v, dist + 1)) return parents def depth_first_search(parents): + # DFS to find all the shortest augmenting paths """Build a path using DFS starting from the sink""" - path = [] + total_flow = 0 u = t - flow = INF - while u != s: - path.append(u) - v = parents[u] - flow = min(flow, R_pred[u][v]["capacity"] - R_pred[u][v]["flow"]) + # path also functions as a stack + path = [u] + # The loop ends with no augmenting path left in the layered graph + while True: + if len(parents[u]) > 0: + v = parents[u][0] + path.append(v) + else: + path.pop() + if len(path) == 0: + break + v = path[-1] + parents[v].popleft() + # Augment the flow along the path found + if v == s: + flow = INF + for u, v in pairwise(path): + flow = min(flow, R_pred[u][v]["capacity"] - R_pred[u][v]["flow"]) + for u, v in pairwise(reversed(path)): + R_pred[v][u]["flow"] += flow + R_pred[u][v]["flow"] -= flow + # Find the proper node to continue the search + if R_pred[v][u]["capacity"] - R_pred[v][u]["flow"] == 0: + parents[v].popleft() + while path[-1] != v: + path.pop() + total_flow += flow + v = path[-1] u = v - path.append(s) - # Augment the flow along the path found - if flow > 0: - for u, v in pairwise(path): - R_pred[u][v]["flow"] += flow - R_pred[v][u]["flow"] -= flow - return flow + return total_flow flow_value = 0 while flow_value < cutoff: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/edmondskarp.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/edmondskarp.py index 7c8440a45..500632683 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/edmondskarp.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/edmondskarp.py @@ -8,11 +8,6 @@ __all__ = ["edmonds_karp"] -@nx._dispatch( - graphs="R", - preserve_edge_attrs={"R": {"capacity": float("inf"), "flow": 0}}, - preserve_graph_attrs=True, -) def edmonds_karp_core(R, s, t, cutoff): """Implementation of the Edmonds-Karp algorithm.""" R_nodes = R.nodes @@ -122,12 +117,7 @@ def edmonds_karp_impl(G, s, t, capacity, residual, cutoff): return R -@nx._dispatch( - graphs={"G": 0, "residual?": 4}, - edge_attrs={"capacity": float("inf")}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, - preserve_graph_attrs={"residual"}, -) +@nx._dispatchable(edge_attrs={"capacity": float("inf")}, returns_graph=True) def edmonds_karp( G, s, t, capacity="capacity", residual=None, value_only=False, cutoff=None ): @@ -247,4 +237,5 @@ def edmonds_karp( """ R = edmonds_karp_impl(G, s, t, capacity, residual, cutoff) R.graph["algorithm"] = "edmonds_karp" + nx._clear_cache(R) return R diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/gomory_hu.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/gomory_hu.py index 0be27d564..951abaeb5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/gomory_hu.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/gomory_hu.py @@ -13,7 +13,7 @@ @not_implemented_for("directed") -@nx._dispatch(edge_attrs={"capacity": float("inf")}) +@nx._dispatchable(edge_attrs={"capacity": float("inf")}, returns_graph=True) def gomory_hu_tree(G, capacity="capacity", flow_func=None): r"""Returns the Gomory-Hu tree of an undirected graph G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/maxflow.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/maxflow.py index 35f359ee3..96bca029f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/maxflow.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/maxflow.py @@ -16,7 +16,7 @@ __all__ = ["maximum_flow", "maximum_flow_value", "minimum_cut", "minimum_cut_value"] -@nx._dispatch(graphs="flowG", edge_attrs={"capacity": float("inf")}) +@nx._dispatchable(graphs="flowG", edge_attrs={"capacity": float("inf")}) def maximum_flow(flowG, _s, _t, capacity="capacity", flow_func=None, **kwargs): """Find a maximum single-commodity flow. @@ -140,9 +140,7 @@ def maximum_flow(flowG, _s, _t, capacity="capacity", flow_func=None, **kwargs): maximum flow by using the flow_func parameter. >>> from networkx.algorithms.flow import shortest_augmenting_path - >>> flow_value == nx.maximum_flow(G, "x", "y", flow_func=shortest_augmenting_path)[ - ... 0 - ... ] + >>> flow_value == nx.maximum_flow(G, "x", "y", flow_func=shortest_augmenting_path)[0] True """ @@ -163,7 +161,7 @@ def maximum_flow(flowG, _s, _t, capacity="capacity", flow_func=None, **kwargs): return (R.graph["flow_value"], flow_dict) -@nx._dispatch(graphs="flowG", edge_attrs={"capacity": float("inf")}) +@nx._dispatchable(graphs="flowG", edge_attrs={"capacity": float("inf")}) def maximum_flow_value(flowG, _s, _t, capacity="capacity", flow_func=None, **kwargs): """Find the value of maximum single-commodity flow. @@ -281,9 +279,7 @@ def maximum_flow_value(flowG, _s, _t, capacity="capacity", flow_func=None, **kwa maximum flow by using the flow_func parameter. >>> from networkx.algorithms.flow import shortest_augmenting_path - >>> flow_value == nx.maximum_flow_value( - ... G, "x", "y", flow_func=shortest_augmenting_path - ... ) + >>> flow_value == nx.maximum_flow_value(G, "x", "y", flow_func=shortest_augmenting_path) True """ @@ -303,7 +299,7 @@ def maximum_flow_value(flowG, _s, _t, capacity="capacity", flow_func=None, **kwa return R.graph["flow_value"] -@nx._dispatch(graphs="flowG", edge_attrs={"capacity": float("inf")}) +@nx._dispatchable(graphs="flowG", edge_attrs={"capacity": float("inf")}) def minimum_cut(flowG, _s, _t, capacity="capacity", flow_func=None, **kwargs): """Compute the value and the node partition of a minimum (s, t)-cut. @@ -467,7 +463,7 @@ def minimum_cut(flowG, _s, _t, capacity="capacity", flow_func=None, **kwargs): return (R.graph["flow_value"], partition) -@nx._dispatch(graphs="flowG", edge_attrs={"capacity": float("inf")}) +@nx._dispatchable(graphs="flowG", edge_attrs={"capacity": float("inf")}) def minimum_cut_value(flowG, _s, _t, capacity="capacity", flow_func=None, **kwargs): """Compute the value of a minimum (s, t)-cut. @@ -582,9 +578,7 @@ def minimum_cut_value(flowG, _s, _t, capacity="capacity", flow_func=None, **kwar minimum cut by using the flow_func parameter. >>> from networkx.algorithms.flow import shortest_augmenting_path - >>> cut_value == nx.minimum_cut_value( - ... G, "x", "y", flow_func=shortest_augmenting_path - ... ) + >>> cut_value == nx.minimum_cut_value(G, "x", "y", flow_func=shortest_augmenting_path) True """ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/mincost.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/mincost.py index cc8626c7c..2f9390d7a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/mincost.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/mincost.py @@ -7,7 +7,9 @@ import networkx as nx -@nx._dispatch(node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0}) +@nx._dispatchable( + node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0} +) def min_cost_flow_cost(G, demand="demand", capacity="capacity", weight="weight"): r"""Find the cost of a minimum cost flow satisfying all demands in digraph G. @@ -97,7 +99,9 @@ def min_cost_flow_cost(G, demand="demand", capacity="capacity", weight="weight") return nx.network_simplex(G, demand=demand, capacity=capacity, weight=weight)[0] -@nx._dispatch(node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0}) +@nx._dispatchable( + node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0} +) def min_cost_flow(G, demand="demand", capacity="capacity", weight="weight"): r"""Returns a minimum cost flow satisfying all demands in digraph G. @@ -182,11 +186,13 @@ def min_cost_flow(G, demand="demand", capacity="capacity", weight="weight"): >>> G.add_edge("b", "d", weight=1, capacity=9) >>> G.add_edge("c", "d", weight=2, capacity=5) >>> flowDict = nx.min_cost_flow(G) + >>> flowDict + {'a': {'b': 4, 'c': 1}, 'd': {}, 'b': {'d': 4}, 'c': {'d': 1}} """ return nx.network_simplex(G, demand=demand, capacity=capacity, weight=weight)[1] -@nx._dispatch(edge_attrs={"weight": 0}) +@nx._dispatchable(edge_attrs={"weight": 0}) def cost_of_flow(G, flowDict, weight="weight"): """Compute the cost of the flow given by flowDict on graph G. @@ -227,11 +233,26 @@ def cost_of_flow(G, flowDict, weight="weight"): cause problems). As a workaround you can use integer numbers by multiplying the relevant edge attributes by a convenient constant factor (eg 100). + + Examples + -------- + >>> G = nx.DiGraph() + >>> G.add_node("a", demand=-5) + >>> G.add_node("d", demand=5) + >>> G.add_edge("a", "b", weight=3, capacity=4) + >>> G.add_edge("a", "c", weight=6, capacity=10) + >>> G.add_edge("b", "d", weight=1, capacity=9) + >>> G.add_edge("c", "d", weight=2, capacity=5) + >>> flowDict = nx.min_cost_flow(G) + >>> flowDict + {'a': {'b': 4, 'c': 1}, 'd': {}, 'b': {'d': 4}, 'c': {'d': 1}} + >>> nx.cost_of_flow(G, flowDict) + 24 """ return sum((flowDict[u][v] * d.get(weight, 0) for u, v, d in G.edges(data=True))) -@nx._dispatch(edge_attrs={"capacity": float("inf"), "weight": 0}) +@nx._dispatchable(edge_attrs={"capacity": float("inf"), "weight": 0}) def max_flow_min_cost(G, s, t, capacity="capacity", weight="weight"): """Returns a maximum (s, t)-flow of minimum cost. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/networksimplex.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/networksimplex.py index 9fa3589a0..a9822d968 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/networksimplex.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/networksimplex.py @@ -326,7 +326,9 @@ def find_leaving_edge(self, Wn, We): @not_implemented_for("undirected") -@nx._dispatch(node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0}) +@nx._dispatchable( + node_attrs="demand", edge_attrs={"capacity": float("inf"), "weight": 0} +) def network_simplex(G, demand="demand", capacity="capacity", weight="weight"): r"""Find a minimum cost flow satisfying all demands in digraph G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/preflowpush.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/preflowpush.py index 05b982ba1..42cadc2e2 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/preflowpush.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/preflowpush.py @@ -288,12 +288,7 @@ def global_relabel(from_sink): return R -@nx._dispatch( - graphs={"G": 0, "residual?": 4}, - edge_attrs={"capacity": float("inf")}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, - preserve_graph_attrs={"residual"}, -) +@nx._dispatchable(edge_attrs={"capacity": float("inf")}, returns_graph=True) def preflow_push( G, s, t, capacity="capacity", residual=None, global_relabel_freq=1, value_only=False ): @@ -426,4 +421,5 @@ def preflow_push( """ R = preflow_push_impl(G, s, t, capacity, residual, global_relabel_freq, value_only) R.graph["algorithm"] = "preflow_push" + nx._clear_cache(R) return R diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/shortestaugmentingpath.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/shortestaugmentingpath.py index d06a88b7b..9f1193f1c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/shortestaugmentingpath.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/shortestaugmentingpath.py @@ -163,12 +163,7 @@ def relabel(u): return R -@nx._dispatch( - graphs={"G": 0, "residual?": 4}, - edge_attrs={"capacity": float("inf")}, - preserve_edge_attrs={"residual": {"capacity": float("inf")}}, - preserve_graph_attrs={"residual"}, -) +@nx._dispatchable(edge_attrs={"capacity": float("inf")}, returns_graph=True) def shortest_augmenting_path( G, s, @@ -301,4 +296,5 @@ def shortest_augmenting_path( """ R = shortest_augmenting_path_impl(G, s, t, capacity, residual, two_phase, cutoff) R.graph["algorithm"] = "shortest_augmenting_path" + nx._clear_cache(R) return R diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/__init__.cpython-312.pyc index 0ea0deadd..8cdd65dea 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_gomory_hu.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_gomory_hu.cpython-312.pyc index 7c504eb3f..5e48ec868 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_gomory_hu.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_gomory_hu.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow.cpython-312.pyc index cd79f0efb..0347de90d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow_large_graph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow_large_graph.cpython-312.pyc index dda29cebe..5651af7b1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow_large_graph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_maxflow_large_graph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_mincost.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_mincost.cpython-312.pyc index 28dd829d0..156b5db00 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_mincost.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_mincost.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_networksimplex.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_networksimplex.cpython-312.pyc index 85c648348..2635f02f2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_networksimplex.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/tests/__pycache__/test_networksimplex.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/utils.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/utils.py index 349be4b30..03f1d10f7 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/utils.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/flow/utils.py @@ -72,7 +72,7 @@ def clear_work(self): self._work = 0 -@nx._dispatch(edge_attrs={"capacity": float("inf")}) +@nx._dispatchable(edge_attrs={"capacity": float("inf")}, returns_graph=True) def build_residual_network(G, capacity): """Build a residual network and initialize a zero flow. @@ -102,6 +102,7 @@ def build_residual_network(G, capacity): raise nx.NetworkXError("MultiGraph and MultiDiGraph not supported (yet).") R = nx.DiGraph() + R.__networkx_cache__ = None # Disable caching R.add_nodes_from(G) inf = float("inf") @@ -154,7 +155,7 @@ def build_residual_network(G, capacity): return R -@nx._dispatch( +@nx._dispatchable( graphs="R", preserve_edge_attrs={"R": {"capacity": float("inf")}}, preserve_graph_attrs=True, @@ -176,7 +177,7 @@ def detect_unboundedness(R, s, t): q.append(v) -@nx._dispatch(graphs={"G": 0, "R": 1}, preserve_edge_attrs={"R": {"flow": None}}) +@nx._dispatchable(graphs={"G": 0, "R": 1}, preserve_edge_attrs={"R": {"flow": None}}) def build_flow_dict(G, R): """Build a flow dictionary from a residual network.""" flow_dict = {} diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graph_hashing.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graph_hashing.py index d85a44a36..b3761bf57 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graph_hashing.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graph_hashing.py @@ -37,13 +37,13 @@ def _neighborhood_aggregate(G, node, node_labels, edge_attr=None): return node_labels[node] + "".join(sorted(label_list)) -@nx._dispatch(edge_attrs={"edge_attr": None}, node_attrs="node_attr") +@nx._dispatchable(edge_attrs={"edge_attr": None}, node_attrs="node_attr") def weisfeiler_lehman_graph_hash( G, edge_attr=None, node_attr=None, iterations=3, digest_size=16 ): """Return Weisfeiler Lehman (WL) graph hash. - The function iteratively aggregates and hashes neighbourhoods of each node. + The function iteratively aggregates and hashes neighborhoods of each node. After each node's neighbors are hashed to obtain updated node labels, a hashed histogram of resulting labels is returned as the final hash. @@ -56,19 +56,19 @@ def weisfeiler_lehman_graph_hash( Parameters ---------- - G: graph + G : graph The graph to be hashed. Can have node and/or edge attributes. Can also have no attributes. - edge_attr: string, default=None + edge_attr : string, optional (default=None) The key in edge attribute dictionary to be used for hashing. If None, edge labels are ignored. - node_attr: string, default=None + node_attr: string, optional (default=None) The key in node attribute dictionary to be used for hashing. If None, and no edge_attr given, use the degrees of the nodes as labels. - iterations: int, default=3 + iterations: int, optional (default=3) Number of neighbor aggregations to perform. Should be larger for larger graphs. - digest_size: int, default=16 + digest_size: int, optional (default=16) Size (in bits) of blake2b hash digest to use for hashing node labels. Returns @@ -160,9 +160,14 @@ def weisfeiler_lehman_step(G, labels, edge_attr=None): return _hash_label(str(tuple(subgraph_hash_counts)), digest_size) -@nx._dispatch(edge_attrs={"edge_attr": None}, node_attrs="node_attr") +@nx._dispatchable(edge_attrs={"edge_attr": None}, node_attrs="node_attr") def weisfeiler_lehman_subgraph_hashes( - G, edge_attr=None, node_attr=None, iterations=3, digest_size=16 + G, + edge_attr=None, + node_attr=None, + iterations=3, + digest_size=16, + include_initial_labels=False, ): """ Return a dictionary of subgraph hashes by node. @@ -172,25 +177,26 @@ def weisfeiler_lehman_subgraph_hashes( Lists of subgraph hashes are sorted in increasing order of depth from their root node, with the hash at index i corresponding to a subgraph of nodes at most i edges distance from u. Thus, each list will contain - ``iterations + 1`` elements - a hash for a subgraph at each depth, and - additionally a hash of the initial node label (or equivalently a - subgraph of depth 0) + `iterations` elements - a hash for a subgraph at each depth. If + `include_initial_labels` is set to `True`, each list will additionally + have contain a hash of the initial node label (or equivalently a + subgraph of depth 0) prepended, totalling ``iterations + 1`` elements. - The function iteratively aggregates and hashes neighbourhoods of each node. + The function iteratively aggregates and hashes neighborhoods of each node. This is achieved for each step by replacing for each node its label from the previous iteration with its hashed 1-hop neighborhood aggregate. The new node label is then appended to a list of node labels for each node. - To aggregate neighborhoods at each step for a node $n$, all labels of - nodes adjacent to $n$ are concatenated. If the `edge_attr` parameter is set, + To aggregate neighborhoods for a node $u$ at each step, all labels of + nodes adjacent to $u$ are concatenated. If the `edge_attr` parameter is set, labels for each neighboring node are prefixed with the value of this attribute - along the connecting edge from this neighbor to node $n$. The resulting string + along the connecting edge from this neighbor to node $u$. The resulting string is then hashed to compress this information into a fixed digest size. Thus, at the $i$-th iteration, nodes within $i$ hops influence any given - hashed node label. We can therefore say that at depth $i$ for node $n$ - we have a hash for a subgraph induced by the $2i$-hop neighborhood of $n$. + hashed node label. We can therefore say that at depth $i$ for node $u$ + we have a hash for a subgraph induced by the $i$-hop neighborhood of $u$. The output can be used to to create general Weisfeiler-Lehman graph kernels, or generate features for graphs or nodes - for example to generate 'words' in @@ -207,21 +213,25 @@ def weisfeiler_lehman_subgraph_hashes( Parameters ---------- - G: graph + G : graph The graph to be hashed. Can have node and/or edge attributes. Can also have no attributes. - edge_attr: string, default=None + edge_attr : string, optional (default=None) The key in edge attribute dictionary to be used for hashing. If None, edge labels are ignored. - node_attr: string, default=None + node_attr : string, optional (default=None) The key in node attribute dictionary to be used for hashing. If None, and no edge_attr given, use the degrees of the nodes as labels. - iterations: int, default=3 + If None, and edge_attr is given, each node starts with an identical label. + iterations : int, optional (default=3) Number of neighbor aggregations to perform. Should be larger for larger graphs. - digest_size: int, default=16 + digest_size : int, optional (default=16) Size (in bits) of blake2b hash digest to use for hashing node labels. - The default size is 16 bits + The default size is 16 bits. + include_initial_labels : bool, optional (default=False) + If True, include the hashed initial node label as the first subgraph + hash for each node. Returns ------- @@ -234,13 +244,9 @@ def weisfeiler_lehman_subgraph_hashes( Finding similar nodes in different graphs: >>> G1 = nx.Graph() - >>> G1.add_edges_from([ - ... (1, 2), (2, 3), (2, 4), (3, 5), (4, 6), (5, 7), (6, 7) - ... ]) + >>> G1.add_edges_from([(1, 2), (2, 3), (2, 4), (3, 5), (4, 6), (5, 7), (6, 7)]) >>> G2 = nx.Graph() - >>> G2.add_edges_from([ - ... (1, 3), (2, 3), (1, 6), (1, 5), (4, 6) - ... ]) + >>> G2.add_edges_from([(1, 3), (2, 3), (1, 6), (1, 5), (4, 6)]) >>> g1_hashes = nx.weisfeiler_lehman_subgraph_hashes(G1, iterations=3, digest_size=8) >>> g2_hashes = nx.weisfeiler_lehman_subgraph_hashes(G2, iterations=3, digest_size=8) @@ -253,12 +259,10 @@ def weisfeiler_lehman_subgraph_hashes( ['a93b64973cfc8897', 'db1b43ae35a1878f', '1716d2a4012fa4bc'] The first 2 WL subgraph hashes match. From this we can conclude that it's very - likely the neighborhood of 4 hops around these nodes are isomorphic: each - iteration aggregates 1-hop neighbourhoods meaning hashes at depth $n$ are influenced - by every node within $2n$ hops. + likely the neighborhood of 2 hops around these nodes are isomorphic. - However the neighborhood of 6 hops is no longer isomorphic since their 3rd hash does - not match. + However the 3-hop neighborhoods of ``G1`` and ``G2`` are not isomorphic since the + 3rd hashes in the lists above are not equal. These nodes may be candidates to be classified together since their local topology is similar. @@ -303,8 +307,13 @@ def weisfeiler_lehman_step(G, labels, node_subgraph_hashes, edge_attr=None): return new_labels node_labels = _init_node_labels(G, edge_attr, node_attr) + if include_initial_labels: + node_subgraph_hashes = { + k: [_hash_label(v, digest_size)] for k, v in node_labels.items() + } + else: + node_subgraph_hashes = defaultdict(list) - node_subgraph_hashes = defaultdict(list) for _ in range(iterations): node_labels = weisfeiler_lehman_step( G, node_labels, node_subgraph_hashes, edge_attr diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graphical.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graphical.py index cb1664427..b2ce6c33a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graphical.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/graphical.py @@ -14,7 +14,7 @@ ] -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None) def is_graphical(sequence, method="eg"): """Returns True if sequence is a valid degree sequence. @@ -93,7 +93,7 @@ def _basic_graphical_tests(deg_sequence): return dmax, dmin, dsum, n, num_degs -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None) def is_valid_degree_sequence_havel_hakimi(deg_sequence): r"""Returns True if deg_sequence can be realized by a simple graph. @@ -183,7 +183,7 @@ def is_valid_degree_sequence_havel_hakimi(deg_sequence): return True -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None) def is_valid_degree_sequence_erdos_gallai(deg_sequence): r"""Returns True if deg_sequence can be realized by a simple graph. @@ -274,7 +274,7 @@ def is_valid_degree_sequence_erdos_gallai(deg_sequence): return True -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None) def is_multigraphical(sequence): """Returns True if some multigraph can realize the sequence. @@ -325,7 +325,7 @@ def is_multigraphical(sequence): return True -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None) def is_pseudographical(sequence): """Returns True if some pseudograph can realize the sequence. @@ -372,7 +372,7 @@ def is_pseudographical(sequence): return sum(deg_sequence) % 2 == 0 and min(deg_sequence) >= 0 -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None) def is_digraphical(in_sequence, out_sequence): r"""Returns True if some directed graph can realize the in- and out-degree sequences. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hierarchy.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hierarchy.py index 6dc63a741..4bb01cb45 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hierarchy.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hierarchy.py @@ -6,7 +6,7 @@ __all__ = ["flow_hierarchy"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def flow_hierarchy(G, weight=None): """Returns the flow hierarchy of a directed network. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hybrid.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hybrid.py index 347f5c2f1..4d0e5c36e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hybrid.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/hybrid.py @@ -10,7 +10,7 @@ __all__ = ["kl_connected_subgraph", "is_kl_connected"] -@nx._dispatch +@nx._dispatchable(returns_graph=True) def kl_connected_subgraph(G, k, l, low_memory=False, same_as_graph=False): """Returns the maximum locally `(k, l)`-connected subgraph of `G`. @@ -115,7 +115,7 @@ def kl_connected_subgraph(G, k, l, low_memory=False, same_as_graph=False): return H -@nx._dispatch +@nx._dispatchable def is_kl_connected(G, k, l, low_memory=False): """Returns True if and only if `G` is locally `(k, l)`-connected. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isolate.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isolate.py index f9983282a..23ac23875 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isolate.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isolate.py @@ -6,7 +6,7 @@ __all__ = ["is_isolate", "isolates", "number_of_isolates"] -@nx._dispatch +@nx._dispatchable def is_isolate(G, n): """Determines whether a node is an isolate. @@ -39,7 +39,7 @@ def is_isolate(G, n): return G.degree(n) == 0 -@nx._dispatch +@nx._dispatchable def isolates(G): """Iterator over isolates in the graph. @@ -85,7 +85,7 @@ def isolates(G): return (n for n, d in G.degree() if d == 0) -@nx._dispatch +@nx._dispatchable def number_of_isolates(G): """Returns the number of isolates in the graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/__init__.cpython-312.pyc index d0faa9e07..0ec8eb278 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/ismags.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/ismags.cpython-312.pyc index 00d635c99..c3227730e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/ismags.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/ismags.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorph.cpython-312.pyc index a90f2e36a..3eb6fabe1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorphvf2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorphvf2.cpython-312.pyc index f2fa78d64..9d1907b29 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorphvf2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/isomorphvf2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/matchhelpers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/matchhelpers.cpython-312.pyc index 9dd1a7399..ab566e5d5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/matchhelpers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/matchhelpers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/temporalisomorphvf2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/temporalisomorphvf2.cpython-312.pyc index 4656d0392..f3c714a17 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/temporalisomorphvf2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/temporalisomorphvf2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/tree_isomorphism.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/tree_isomorphism.cpython-312.pyc index 57ce19041..9533b0c2f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/tree_isomorphism.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/tree_isomorphism.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2pp.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2pp.cpython-312.pyc index 46fed21f8..061fb3658 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2pp.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2pp.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2userfunc.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2userfunc.cpython-312.pyc index df1c249da..e95cd3d96 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2userfunc.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/__pycache__/vf2userfunc.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/ismags.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/ismags.py index 25ce94c87..24819faf9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/ismags.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/ismags.py @@ -848,11 +848,11 @@ def _map_nodes(self, sgn, candidates, constraints, mapping=None, to_be_mapped=No left_to_map = to_be_mapped - set(mapping.keys()) new_candidates = candidates.copy() - sgn_neighbours = set(self.subgraph[sgn]) - not_gn_neighbours = set(self.graph.nodes) - set(self.graph[gn]) + sgn_nbrs = set(self.subgraph[sgn]) + not_gn_nbrs = set(self.graph.nodes) - set(self.graph[gn]) for sgn2 in left_to_map: - if sgn2 not in sgn_neighbours: - gn2_options = not_gn_neighbours + if sgn2 not in sgn_nbrs: + gn2_options = not_gn_nbrs else: # Get all edges to gn of the right color: g_edges = self._edges_of_same_color(sgn, sgn2) @@ -882,10 +882,7 @@ def _map_nodes(self, sgn, candidates, constraints, mapping=None, to_be_mapped=No # The next node is the one that is unmapped and has fewest # candidates - # Pylint disables because it's a one-shot function. - next_sgn = min( - left_to_map, key=lambda n: min(new_candidates[n], key=len) - ) # pylint: disable=cell-var-from-loop + next_sgn = min(left_to_map, key=lambda n: min(new_candidates[n], key=len)) yield from self._map_nodes( next_sgn, new_candidates, @@ -909,10 +906,7 @@ def _largest_common_subgraph(self, candidates, constraints, to_be_mapped=None): # "part of" the subgraph in to_be_mapped, and we make it a little # smaller every iteration. - # pylint disable because it's guarded against by default value - current_size = len( - next(iter(to_be_mapped), []) - ) # pylint: disable=stop-iteration-return + current_size = len(next(iter(to_be_mapped), [])) found_iso = False if current_size <= len(self.graph): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorph.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorph.py index 6f562400a..00395b71c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorph.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorph.py @@ -12,7 +12,7 @@ ] -@nx._dispatch(graphs={"G1": 0, "G2": 1}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}) def could_be_isomorphic(G1, G2): """Returns False if graphs are definitely not isomorphic. True does NOT guarantee isomorphism. @@ -60,7 +60,7 @@ def could_be_isomorphic(G1, G2): graph_could_be_isomorphic = could_be_isomorphic -@nx._dispatch(graphs={"G1": 0, "G2": 1}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}) def fast_could_be_isomorphic(G1, G2): """Returns False if graphs are definitely not isomorphic. @@ -101,7 +101,7 @@ def fast_could_be_isomorphic(G1, G2): fast_graph_could_be_isomorphic = fast_could_be_isomorphic -@nx._dispatch(graphs={"G1": 0, "G2": 1}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}) def faster_could_be_isomorphic(G1, G2): """Returns False if graphs are definitely not isomorphic. @@ -134,7 +134,7 @@ def faster_could_be_isomorphic(G1, G2): faster_graph_could_be_isomorphic = faster_could_be_isomorphic -@nx._dispatch( +@nx._dispatchable( graphs={"G1": 0, "G2": 1}, preserve_edge_attrs="edge_match", preserve_node_attrs="node_match", diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorphvf2.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorphvf2.py index 3e4bcc4dc..1b6cc7d75 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorphvf2.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/isomorphvf2.py @@ -5,7 +5,9 @@ An implementation of VF2 algorithm for graph isomorphism testing. -The simplest interface to use this module is to call networkx.is_isomorphic(). +The simplest interface to use this module is to call the +:func:`is_isomorphic ` +function. Introduction ------------ @@ -21,9 +23,10 @@ as the logical AND of the two functions. To include a semantic check, the (Di)GraphMatcher class should be -subclassed, and the semantic_feasibility() function should be -redefined. By default, the semantic feasibility function always -returns True. The effect of this is that semantics are not +subclassed, and the +:meth:`semantic_feasibility ` +function should be redefined. By default, the semantic feasibility function always +returns ``True``. The effect of this is that semantics are not considered in the matching of G1 and G2. Examples @@ -65,43 +68,44 @@ Graph theory literature can be ambiguous about the meaning of the above statement, and we seek to clarify it now. -In the VF2 literature, a mapping M is said to be a graph-subgraph -isomorphism iff M is an isomorphism between G2 and a subgraph of G1. -Thus, to say that G1 and G2 are graph-subgraph isomorphic is to say -that a subgraph of G1 is isomorphic to G2. +In the VF2 literature, a mapping `M` is said to be a graph-subgraph +isomorphism iff `M` is an isomorphism between `G2` and a subgraph of `G1`. +Thus, to say that `G1` and `G2` are graph-subgraph isomorphic is to say +that a subgraph of `G1` is isomorphic to `G2`. -Other literature uses the phrase 'subgraph isomorphic' as in 'G1 does -not have a subgraph isomorphic to G2'. Another use is as an in adverb -for isomorphic. Thus, to say that G1 and G2 are subgraph isomorphic -is to say that a subgraph of G1 is isomorphic to G2. +Other literature uses the phrase 'subgraph isomorphic' as in '`G1` does +not have a subgraph isomorphic to `G2`'. Another use is as an in adverb +for isomorphic. Thus, to say that `G1` and `G2` are subgraph isomorphic +is to say that a subgraph of `G1` is isomorphic to `G2`. Finally, the term 'subgraph' can have multiple meanings. In this context, 'subgraph' always means a 'node-induced subgraph'. Edge-induced subgraph isomorphisms are not directly supported, but one should be -able to perform the check by making use of nx.line_graph(). For +able to perform the check by making use of +:func:`line_graph `. For subgraphs which are not induced, the term 'monomorphism' is preferred over 'isomorphism'. -Let G=(N,E) be a graph with a set of nodes N and set of edges E. +Let ``G = (N, E)`` be a graph with a set of nodes `N` and set of edges `E`. -If G'=(N',E') is a subgraph, then: - N' is a subset of N - E' is a subset of E +If ``G' = (N', E')`` is a subgraph, then: + `N'` is a subset of `N` and + `E'` is a subset of `E`. -If G'=(N',E') is a node-induced subgraph, then: - N' is a subset of N - E' is the subset of edges in E relating nodes in N' +If ``G' = (N', E')`` is a node-induced subgraph, then: + `N'` is a subset of `N` and + `E'` is the subset of edges in `E` relating nodes in `N'`. -If G'=(N',E') is an edge-induced subgraph, then: - N' is the subset of nodes in N related by edges in E' - E' is a subset of E +If `G' = (N', E')` is an edge-induced subgraph, then: + `N'` is the subset of nodes in `N` related by edges in `E'` and + `E'` is a subset of `E`. -If G'=(N',E') is a monomorphism, then: - N' is a subset of N - E' is a subset of the set of edges in E relating nodes in N' +If `G' = (N', E')` is a monomorphism, then: + `N'` is a subset of `N` and + `E'` is a subset of the set of edges in `E` relating nodes in `N'`. -Note that if G' is a node-induced subgraph of G, then it is always a -subgraph monomorphism of G, but the opposite is not always true, as a +Note that if `G'` is a node-induced subgraph of `G`, then it is always a +subgraph monomorphism of `G`, but the opposite is not always true, as a monomorphism can have fewer edges. References @@ -120,7 +124,8 @@ See Also -------- -syntactic_feasibility(), semantic_feasibility() +:meth:`semantic_feasibility ` +:meth:`syntactic_feasibility ` Notes ----- diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/matchhelpers.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/matchhelpers.py index 5239ed77e..8185f34eb 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/matchhelpers.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/matchhelpers.py @@ -311,7 +311,6 @@ def generic_multiedge_match(attr, default, op): >>> nm = generic_node_match("weight", 1.0, isclose) >>> nm = generic_node_match("color", "red", eq) >>> nm = generic_node_match(["weight", "color"], [1.0, "red"], [isclose, eq]) - ... """ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/temporalisomorphvf2.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/temporalisomorphvf2.py index 62cacc778..b78ecf149 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/temporalisomorphvf2.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/temporalisomorphvf2.py @@ -89,9 +89,7 @@ def __init__(self, G1, G2, temporal_attribute_name, delta): >>> G2 = nx.Graph(nx.path_graph(4, create_using=nx.Graph())) - >>> GM = isomorphism.TimeRespectingGraphMatcher( - ... G1, G2, "date", timedelta(days=1) - ... ) + >>> GM = isomorphism.TimeRespectingGraphMatcher(G1, G2, "date", timedelta(days=1)) """ self.temporal_attribute_name = temporal_attribute_name self.delta = delta @@ -158,9 +156,7 @@ def __init__(self, G1, G2, temporal_attribute_name, delta): >>> G2 = nx.DiGraph(nx.path_graph(4, create_using=nx.DiGraph())) - >>> GM = isomorphism.TimeRespectingDiGraphMatcher( - ... G1, G2, "date", timedelta(days=1) - ... ) + >>> GM = isomorphism.TimeRespectingDiGraphMatcher(G1, G2, "date", timedelta(days=1)) """ self.temporal_attribute_name = temporal_attribute_name self.delta = delta diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/__init__.cpython-312.pyc index a3d474b73..d808ca4a1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_ismags.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_ismags.cpython-312.pyc index 170f68d7f..1bc35f40e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_ismags.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_ismags.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphism.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphism.cpython-312.pyc index 0b2808375..0211008dc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphism.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphism.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphvf2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphvf2.cpython-312.pyc index ae1f7b8cc..145542b47 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphvf2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_isomorphvf2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_match_helpers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_match_helpers.cpython-312.pyc index 4c1072289..f55ed471f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_match_helpers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_match_helpers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_temporalisomorphvf2.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_temporalisomorphvf2.cpython-312.pyc index e767bc2f4..10c996be8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_temporalisomorphvf2.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_temporalisomorphvf2.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_tree_isomorphism.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_tree_isomorphism.cpython-312.pyc index 75ab575b9..b55060636 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_tree_isomorphism.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_tree_isomorphism.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp.cpython-312.pyc index 1b0f9fa3b..2b67df937 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp_helpers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp_helpers.cpython-312.pyc index e9b19e793..3be6dc326 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp_helpers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2pp_helpers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2userfunc.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2userfunc.cpython-312.pyc index b2a3cdc8e..fb3830d34 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2userfunc.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/__pycache__/test_vf2userfunc.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_isomorphism.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_isomorphism.py index c66904039..548af808f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_isomorphism.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_isomorphism.py @@ -1,3 +1,5 @@ +import pytest + import networkx as nx from networkx.algorithms import isomorphism as iso @@ -38,3 +40,9 @@ def test_faster_could_be_isomorphic(self): def test_is_isomorphic(self): assert iso.is_isomorphic(self.G1, self.G2) assert not iso.is_isomorphic(self.G1, self.G4) + assert iso.is_isomorphic(self.G1.to_directed(), self.G2.to_directed()) + assert not iso.is_isomorphic(self.G1.to_directed(), self.G4.to_directed()) + with pytest.raises( + nx.NetworkXError, match="Graphs G1 and G2 are not of the same type." + ): + iso.is_isomorphic(self.G1.to_directed(), self.G1) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_tree_isomorphism.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_tree_isomorphism.py index 95e5fec87..fa1ab9bba 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_tree_isomorphism.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_tree_isomorphism.py @@ -1,6 +1,8 @@ import random import time +import pytest + import networkx as nx from networkx.algorithms.isomorphism.tree_isomorphism import ( rooted_tree_isomorphism, @@ -9,6 +11,14 @@ from networkx.classes.function import is_directed +@pytest.mark.parametrize("graph_constructor", (nx.DiGraph, nx.MultiGraph)) +def test_tree_isomorphism_raises_on_directed_and_multigraphs(graph_constructor): + t1 = graph_constructor([(0, 1)]) + t2 = graph_constructor([(1, 2)]) + with pytest.raises(nx.NetworkXNotImplemented): + nx.isomorphism.tree_isomorphism(t1, t2) + + # have this work for graph # given two trees (either the directed or undirected) # transform t2 according to the isomorphism diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_vf2pp_helpers.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_vf2pp_helpers.py index 1a46c38f5..0e29b1be6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_vf2pp_helpers.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tests/test_vf2pp_helpers.py @@ -57,8 +57,9 @@ def test_single_node(self): dict(zip(G2, it.cycle(labels_many))), "label", ) - l1, l2 = nx.get_node_attributes(G1, "label"), nx.get_node_attributes( - G2, "label" + l1, l2 = ( + nx.get_node_attributes(G1, "label"), + nx.get_node_attributes(G2, "label"), ) gparams = _GraphParameters( @@ -118,8 +119,9 @@ def test_matching_order(self): dict(zip(G2, it.cycle(labels))), "label", ) - l1, l2 = nx.get_node_attributes(G1, "label"), nx.get_node_attributes( - G2, "label" + l1, l2 = ( + nx.get_node_attributes(G1, "label"), + nx.get_node_attributes(G2, "label"), ) gparams = _GraphParameters( G1, @@ -155,8 +157,9 @@ def test_matching_order_all_branches(self): G2.nodes[4]["label"] = "red" G2.nodes[5]["label"] = "blue" - l1, l2 = nx.get_node_attributes(G1, "label"), nx.get_node_attributes( - G2, "label" + l1, l2 = ( + nx.get_node_attributes(G1, "label"), + nx.get_node_attributes(G2, "label"), ) gparams = _GraphParameters( G1, diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tree_isomorphism.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tree_isomorphism.py index 6e9350633..e409d515f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tree_isomorphism.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/tree_isomorphism.py @@ -24,7 +24,7 @@ __all__ = ["rooted_tree_isomorphism", "tree_isomorphism"] -@nx._dispatch(graphs={"t1": 0, "t2": 2}) +@nx._dispatchable(graphs={"t1": 0, "t2": 2}, returns_graph=True) def root_trees(t1, root1, t2, root2): """Create a single digraph dT of free trees t1 and t2 # with roots root1 and root2 respectively @@ -72,7 +72,7 @@ def root_trees(t1, root1, t2, root2): # figure out the level of each node, with 0 at root -@nx._dispatch +@nx._dispatchable def assign_levels(G, root): level = {} level[root] = 0 @@ -102,7 +102,7 @@ def generate_isomorphism(v, w, M, ordered_children): generate_isomorphism(x, y, M, ordered_children) -@nx._dispatch(graphs={"t1": 0, "t2": 2}) +@nx._dispatchable(graphs={"t1": 0, "t2": 2}) def rooted_tree_isomorphism(t1, root1, t2, root2): """ Given two rooted trees `t1` and `t2`, @@ -209,8 +209,9 @@ def rooted_tree_isomorphism(t1, root1, t2, root2): return isomorphism -@not_implemented_for("directed", "multigraph") -@nx._dispatch(graphs={"t1": 0, "t2": 1}) +@not_implemented_for("directed") +@not_implemented_for("multigraph") +@nx._dispatchable(graphs={"t1": 0, "t2": 1}) def tree_isomorphism(t1, t2): """ Given two undirected (or free) trees `t1` and `t2`, diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/vf2pp.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/vf2pp.py index 953204f66..589e06447 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/vf2pp.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/isomorphism/vf2pp.py @@ -97,7 +97,7 @@ ) -@nx._dispatch(graphs={"G1": 0, "G2": 1}, node_attrs={"node_label": "default_label"}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}, node_attrs={"node_label": "default_label"}) def vf2pp_isomorphism(G1, G2, node_label=None, default_label=None): """Return an isomorphic mapping between `G1` and `G2` if it exists. @@ -128,7 +128,7 @@ def vf2pp_isomorphism(G1, G2, node_label=None, default_label=None): return None -@nx._dispatch(graphs={"G1": 0, "G2": 1}, node_attrs={"node_label": "default_label"}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}, node_attrs={"node_label": "default_label"}) def vf2pp_is_isomorphic(G1, G2, node_label=None, default_label=None): """Examines whether G1 and G2 are isomorphic. @@ -157,7 +157,7 @@ def vf2pp_is_isomorphic(G1, G2, node_label=None, default_label=None): return False -@nx._dispatch(graphs={"G1": 0, "G2": 1}, node_attrs={"node_label": "default_label"}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}, node_attrs={"node_label": "default_label"}) def vf2pp_all_isomorphisms(G1, G2, node_label=None, default_label=None): """Yields all the possible mappings between G1 and G2. @@ -476,8 +476,8 @@ def _find_candidates( G1, G2, G1_labels, _, _, nodes_of_G2Labels, G2_nodes_of_degree = graph_params mapping, reverse_mapping, _, _, _, _, _, _, T2_tilde, _ = state_params - covered_neighbors = [nbr for nbr in G1[u] if nbr in mapping] - if not covered_neighbors: + covered_nbrs = [nbr for nbr in G1[u] if nbr in mapping] + if not covered_nbrs: candidates = set(nodes_of_G2Labels[G1_labels[u]]) candidates.intersection_update(G2_nodes_of_degree[G1_degree[u]]) candidates.intersection_update(T2_tilde) @@ -492,10 +492,10 @@ def _find_candidates( ) return candidates - nbr1 = covered_neighbors[0] + nbr1 = covered_nbrs[0] common_nodes = set(G2[mapping[nbr1]]) - for nbr1 in covered_neighbors[1:]: + for nbr1 in covered_nbrs[1:]: common_nodes.intersection_update(G2[mapping[nbr1]]) common_nodes.difference_update(reverse_mapping) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/__init__.cpython-312.pyc index f81964eb3..cc7167a5e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/hits_alg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/hits_alg.cpython-312.pyc index de65609db..0d37acef4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/hits_alg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/hits_alg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/pagerank_alg.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/pagerank_alg.cpython-312.pyc index 889fea6bb..4c9dea9b5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/pagerank_alg.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/__pycache__/pagerank_alg.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/hits_alg.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/hits_alg.py index 6d557f522..e7b5141aa 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/hits_alg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/hits_alg.py @@ -5,7 +5,7 @@ __all__ = ["hits"] -@nx._dispatch +@nx._dispatchable(preserve_edge_attrs={"G": {"weight": 1}}) def hits(G, max_iter=100, tol=1.0e-8, nstart=None, normalized=True): """Returns HITS hubs and authorities values for nodes. @@ -77,11 +77,14 @@ def hits(G, max_iter=100, tol=1.0e-8, nstart=None, normalized=True): return {}, {} A = nx.adjacency_matrix(G, nodelist=list(G), dtype=float) - if nstart is None: - _, _, vt = sp.sparse.linalg.svds(A, k=1, maxiter=max_iter, tol=tol) - else: + if nstart is not None: nstart = np.array(list(nstart.values())) + if max_iter <= 0: + raise nx.PowerIterationFailedConvergence(max_iter) + try: _, _, vt = sp.sparse.linalg.svds(A, k=1, v0=nstart, maxiter=max_iter, tol=tol) + except sp.sparse.linalg.ArpackNoConvergence as exc: + raise nx.PowerIterationFailedConvergence(max_iter) from exc a = vt.flatten().real h = A @ a @@ -94,7 +97,7 @@ def hits(G, max_iter=100, tol=1.0e-8, nstart=None, normalized=True): def _hits_python(G, max_iter=100, tol=1.0e-8, nstart=None, normalized=True): - if isinstance(G, (nx.MultiGraph, nx.MultiDiGraph)): + if isinstance(G, nx.MultiGraph | nx.MultiDiGraph): raise Exception("hits() not defined for graphs with multiedges.") if len(G) == 0: return {}, {} diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/pagerank_alg.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/pagerank_alg.py index 371dd60ed..2a4af6e5f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/pagerank_alg.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/pagerank_alg.py @@ -6,7 +6,7 @@ __all__ = ["pagerank", "google_matrix"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def pagerank( G, alpha=0.85, @@ -172,7 +172,7 @@ def _pagerank_python( raise nx.PowerIterationFailedConvergence(max_iter) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def google_matrix( G, alpha=0.85, personalization=None, nodelist=None, weight="weight", dangling=None ): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/__init__.cpython-312.pyc index 0052a45ea..9a2130beb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_hits.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_hits.cpython-312.pyc index 6b72c3137..d4477b200 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_hits.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_hits.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_pagerank.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_pagerank.cpython-312.pyc index 9fc920f3f..933c60dee 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_pagerank.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/__pycache__/test_pagerank.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_hits.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_hits.py index 880803d89..54713eb4e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_hits.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_hits.py @@ -72,7 +72,7 @@ def test_hits_not_convergent(self): _hits_scipy(G, max_iter=0) with pytest.raises(nx.PowerIterationFailedConvergence): _hits_python(G, max_iter=0) - with pytest.raises(ValueError): + with pytest.raises(nx.PowerIterationFailedConvergence): nx.hits(G, max_iter=0) - with pytest.raises(sp.sparse.linalg.ArpackNoConvergence): + with pytest.raises(nx.PowerIterationFailedConvergence): nx.hits(G, max_iter=1) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_pagerank.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_pagerank.py index 6a30f0cd1..db0f8c8d5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_pagerank.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_analysis/tests/test_pagerank.py @@ -83,7 +83,7 @@ def test_numpy_pagerank(self): for n in G: assert p[n] == pytest.approx(G.pagerank[n], abs=1e-4) - # This additionally tests the @nx._dispatch mechanism, treating + # This additionally tests the @nx._dispatchable mechanism, treating # nx.google_matrix as if it were a re-implementation from another package @pytest.mark.parametrize("wrapper", [lambda x: x, dispatch_interface.convert]) def test_google_matrix(self, wrapper): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_prediction.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_prediction.py index 7335a77f5..1fb24243a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_prediction.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/link_prediction.py @@ -37,12 +37,18 @@ def _apply_prediction(G, func, ebunch=None): """ if ebunch is None: ebunch = nx.non_edges(G) + else: + for u, v in ebunch: + if u not in G: + raise nx.NodeNotFound(f"Node {u} not in G.") + if v not in G: + raise nx.NodeNotFound(f"Node {v} not in G.") return ((u, v, func(u, v)) for u, v in ebunch) @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def resource_allocation_index(G, ebunch=None): r"""Compute the resource allocation index of all node pairs in ebunch. @@ -72,6 +78,14 @@ def resource_allocation_index(G, ebunch=None): An iterator of 3-tuples in the form (u, v, p) where (u, v) is a pair of nodes and p is their resource allocation index. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.complete_graph(5) @@ -97,7 +111,7 @@ def predict(u, v): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def jaccard_coefficient(G, ebunch=None): r"""Compute the Jaccard coefficient of all node pairs in ebunch. @@ -127,6 +141,14 @@ def jaccard_coefficient(G, ebunch=None): An iterator of 3-tuples in the form (u, v, p) where (u, v) is a pair of nodes and p is their Jaccard coefficient. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.complete_graph(5) @@ -147,14 +169,14 @@ def predict(u, v): union_size = len(set(G[u]) | set(G[v])) if union_size == 0: return 0 - return len(list(nx.common_neighbors(G, u, v))) / union_size + return len(nx.common_neighbors(G, u, v)) / union_size return _apply_prediction(G, predict, ebunch) @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def adamic_adar_index(G, ebunch=None): r"""Compute the Adamic-Adar index of all node pairs in ebunch. @@ -186,6 +208,14 @@ def adamic_adar_index(G, ebunch=None): An iterator of 3-tuples in the form (u, v, p) where (u, v) is a pair of nodes and p is their Adamic-Adar index. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.complete_graph(5) @@ -210,7 +240,7 @@ def predict(u, v): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def common_neighbor_centrality(G, ebunch=None, alpha=0.8): r"""Return the CCPA score for each pair of nodes. @@ -264,6 +294,17 @@ def common_neighbor_centrality(G, ebunch=None, alpha=0.8): pair of nodes and p is their Common Neighbor and Centrality based Parameterized Algorithm(CCPA) score. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NetworkXAlgorithmError + If self loops exsists in `ebunch` or in `G` (if `ebunch` is `None`). + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.complete_graph(5) @@ -286,9 +327,9 @@ def common_neighbor_centrality(G, ebunch=None, alpha=0.8): def predict(u, v): if u == v: - raise nx.NetworkXAlgorithmError("Self links are not supported") + raise nx.NetworkXAlgorithmError("Self loops are not supported") - return sum(1 for _ in nx.common_neighbors(G, u, v)) + return len(nx.common_neighbors(G, u, v)) else: spl = dict(nx.shortest_path_length(G)) @@ -296,19 +337,18 @@ def predict(u, v): def predict(u, v): if u == v: - raise nx.NetworkXAlgorithmError("Self links are not supported") + raise nx.NetworkXAlgorithmError("Self loops are not supported") path_len = spl[u].get(v, inf) - return alpha * sum(1 for _ in nx.common_neighbors(G, u, v)) + ( - 1 - alpha - ) * (G.number_of_nodes() / path_len) + n_nbrs = len(nx.common_neighbors(G, u, v)) + return alpha * n_nbrs + (1 - alpha) * len(G) / path_len return _apply_prediction(G, predict, ebunch) @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def preferential_attachment(G, ebunch=None): r"""Compute the preferential attachment score of all node pairs in ebunch. @@ -338,6 +378,14 @@ def preferential_attachment(G, ebunch=None): An iterator of 3-tuples in the form (u, v, p) where (u, v) is a pair of nodes and p is their preferential attachment score. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.complete_graph(5) @@ -362,7 +410,7 @@ def predict(u, v): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(node_attrs="community") +@nx._dispatchable(node_attrs="community") def cn_soundarajan_hopcroft(G, ebunch=None, community="community"): r"""Count the number of common neighbors of all node pairs in ebunch using community information. @@ -402,6 +450,17 @@ def cn_soundarajan_hopcroft(G, ebunch=None, community="community"): An iterator of 3-tuples in the form (u, v, p) where (u, v) is a pair of nodes and p is their score. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NetworkXAlgorithmError + If no community information is available for a node in `ebunch` or in `G` (if `ebunch` is `None`). + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.path_graph(3) @@ -426,7 +485,7 @@ def cn_soundarajan_hopcroft(G, ebunch=None, community="community"): def predict(u, v): Cu = _community(G, u, community) Cv = _community(G, v, community) - cnbors = list(nx.common_neighbors(G, u, v)) + cnbors = nx.common_neighbors(G, u, v) neighbors = ( sum(_community(G, w, community) == Cu for w in cnbors) if Cu == Cv else 0 ) @@ -437,7 +496,7 @@ def predict(u, v): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(node_attrs="community") +@nx._dispatchable(node_attrs="community") def ra_index_soundarajan_hopcroft(G, ebunch=None, community="community"): r"""Compute the resource allocation index of all node pairs in ebunch using community information. @@ -477,6 +536,17 @@ def ra_index_soundarajan_hopcroft(G, ebunch=None, community="community"): An iterator of 3-tuples in the form (u, v, p) where (u, v) is a pair of nodes and p is their score. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NetworkXAlgorithmError + If no community information is available for a node in `ebunch` or in `G` (if `ebunch` is `None`). + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.Graph() @@ -513,7 +583,7 @@ def predict(u, v): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(node_attrs="community") +@nx._dispatchable(node_attrs="community") def within_inter_cluster(G, ebunch=None, delta=0.001, community="community"): """Compute the ratio of within- and inter-cluster common neighbors of all node pairs in ebunch. @@ -553,6 +623,18 @@ def within_inter_cluster(G, ebunch=None, delta=0.001, community="community"): An iterator of 3-tuples in the form (u, v, p) where (u, v) is a pair of nodes and p is their WIC measure. + Raises + ------ + NetworkXNotImplemented + If `G` is a `DiGraph`, a `Multigraph` or a `MultiDiGraph`. + + NetworkXAlgorithmError + - If `delta` is less than or equal to zero. + - If no community information is available for a node in `ebunch` or in `G` (if `ebunch` is `None`). + + NodeNotFound + If `ebunch` has a node that is not in `G`. + Examples -------- >>> G = nx.Graph() @@ -587,7 +669,7 @@ def predict(u, v): Cv = _community(G, v, community) if Cu != Cv: return 0 - cnbors = set(nx.common_neighbors(G, u, v)) + cnbors = nx.common_neighbors(G, u, v) within = {w for w in cnbors if _community(G, w, community) == Cu} inter = cnbors - within return len(within) / (len(inter) + delta) @@ -601,4 +683,6 @@ def _community(G, u, community): try: return node_u[community] except KeyError as err: - raise nx.NetworkXAlgorithmError("No community information") from err + raise nx.NetworkXAlgorithmError( + f"No community information available for Node {u}" + ) from err diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/lowest_common_ancestors.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/lowest_common_ancestors.py index ca21d7376..f695ec208 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/lowest_common_ancestors.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/lowest_common_ancestors.py @@ -14,7 +14,7 @@ @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def all_pairs_lowest_common_ancestor(G, pairs=None): """Return the lowest common ancestor of all pairs or the provided pairs @@ -112,7 +112,7 @@ def generate_lca_from_pairs(G, pairs): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def lowest_common_ancestor(G, node1, node2, default=None): """Compute the lowest common ancestor of the given pair of nodes. @@ -150,7 +150,7 @@ def lowest_common_ancestor(G, node1, node2, default=None): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def tree_all_pairs_lowest_common_ancestor(G, root=None, pairs=None): r"""Yield the lowest common ancestor for sets of pairs in a tree. @@ -216,7 +216,7 @@ def tree_all_pairs_lowest_common_ancestor(G, root=None, pairs=None): if pairs is not None: pair_dict = defaultdict(set) # See note on all_pairs_lowest_common_ancestor. - if not isinstance(pairs, (Mapping, Set)): + if not isinstance(pairs, Mapping | Set): pairs = set(pairs) for u, v in pairs: for n in (u, v): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/matching.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/matching.py index b20d7f697..f346c2e05 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/matching.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/matching.py @@ -17,7 +17,7 @@ @not_implemented_for("multigraph") @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def maximal_matching(G): r"""Find a maximal matching in the graph. @@ -82,7 +82,7 @@ def matching_dict_to_set(matching): return edges -@nx._dispatch +@nx._dispatchable def is_matching(G, matching): """Return True if ``matching`` is a valid matching of ``G`` @@ -143,7 +143,7 @@ def is_matching(G, matching): return True -@nx._dispatch +@nx._dispatchable def is_maximal_matching(G, matching): """Return True if ``matching`` is a maximal matching of ``G`` @@ -205,7 +205,7 @@ def is_maximal_matching(G, matching): return True -@nx._dispatch +@nx._dispatchable def is_perfect_matching(G, matching): """Return True if ``matching`` is a perfect matching for ``G`` @@ -259,7 +259,7 @@ def is_perfect_matching(G, matching): @not_implemented_for("multigraph") @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def min_weight_matching(G, weight="weight"): """Computing a minimum-weight maximal matching of G. @@ -320,7 +320,7 @@ def min_weight_matching(G, weight="weight"): @not_implemented_for("multigraph") @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def max_weight_matching(G, maxcardinality=False, weight="weight"): """Compute a maximum-weighted matching of G. @@ -410,7 +410,7 @@ class Blossom: # and w is a vertex in b.childs[wrap(i+1)]. # If b is a top-level S-blossom, - # b.mybestedges is a list of least-slack edges to neighbouring + # b.mybestedges is a list of least-slack edges to neighboring # S-blossoms, or None if no such list has been computed yet. # This is used for efficient computation of delta3. @@ -738,12 +738,12 @@ def _recurse(b, endstage): j += jstep while b.childs[j] != entrychild: # Examine the vertices of the sub-blossom to see whether - # it is reachable from a neighbouring S-vertex outside the + # it is reachable from a neighboring S-vertex outside the # expanding blossom. bv = b.childs[j] if label.get(bv) == 1: # This sub-blossom just got label S through one of its - # neighbours; leave it be. + # neighbors; leave it be. j += jstep continue if isinstance(bv, Blossom): @@ -972,11 +972,11 @@ def verifyOptimum(): v = queue.pop() assert label[inblossom[v]] == 1 - # Scan its neighbours: + # Scan its neighbors: for w in G.neighbors(v): if w == v: continue # ignore self-loops - # w is a neighbour to v + # w is a neighbor to v bv = inblossom[v] bw = inblossom[w] if bv == bw: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/__init__.cpython-312.pyc index 2a3b529d4..909422c3b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/contraction.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/contraction.cpython-312.pyc index 2ba488ce9..fb57f4454 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/contraction.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/__pycache__/contraction.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/contraction.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/contraction.py index 1b4da3522..9f4d89fa8 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/contraction.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/contraction.py @@ -68,8 +68,9 @@ def equivalence_classes(iterable, relation): `X` and a function implementation of `R`. >>> X = set(range(10)) - >>> def mod3(x, y): return (x - y) % 3 == 0 - >>> equivalence_classes(X, mod3) # doctest: +SKIP + >>> def mod3(x, y): + ... return (x - y) % 3 == 0 + >>> equivalence_classes(X, mod3) # doctest: +SKIP {frozenset({1, 4, 7}), frozenset({8, 2, 5}), frozenset({0, 9, 3, 6})} """ # For simplicity of implementation, we initialize the return value as a @@ -94,7 +95,7 @@ def equivalence_classes(iterable, relation): return {frozenset(block) for block in blocks} -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight", returns_graph=True) def quotient_graph( G, partition, @@ -202,9 +203,7 @@ def quotient_graph( are equivalent if they are not adjacent but have the same neighbor set. >>> G = nx.complete_bipartite_graph(2, 3) - >>> same_neighbors = lambda u, v: ( - ... u not in G[v] and v not in G[u] and G[u] == G[v] - ... ) + >>> same_neighbors = lambda u, v: (u not in G[v] and v not in G[u] and G[u] == G[v]) >>> Q = nx.quotient_graph(G, same_neighbors) >>> K2 = nx.complete_graph(2) >>> nx.is_isomorphic(Q, K2) @@ -425,7 +424,9 @@ def edge_data(b, c): return H -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable( + preserve_all_attrs=True, mutates_input={"not copy": 4}, returns_graph=True +) def contracted_nodes(G, u, v, self_loops=True, copy=True): """Returns the graph that results from contracting `u` and `v`. @@ -560,7 +561,9 @@ def contracted_nodes(G, u, v, self_loops=True, copy=True): identified_nodes = contracted_nodes -@nx._dispatch(preserve_edge_attrs=True) +@nx._dispatchable( + preserve_edge_attrs=True, mutates_input={"not copy": 3}, returns_graph=True +) def contracted_edge(G, edge, self_loops=True, copy=True): """Returns the graph that results from contracting the specified edge. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/tests/__pycache__/test_contraction.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/tests/__pycache__/test_contraction.cpython-312.pyc index 02f4a87a6..040533b09 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/tests/__pycache__/test_contraction.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/minors/tests/__pycache__/test_contraction.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/mis.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/mis.py index 00d101c52..fc70514d9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/mis.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/mis.py @@ -10,7 +10,7 @@ @not_implemented_for("directed") @py_random_state(2) -@nx._dispatch +@nx._dispatchable def maximal_independent_set(G, nodes=None, seed=None): """Returns a random maximal independent set guaranteed to contain a given set of nodes. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/moral.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/moral.py index af1872592..e2acf80f6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/moral.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/moral.py @@ -9,7 +9,7 @@ @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def moral_graph(G): r"""Return the Moral Graph diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/node_classification.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/node_classification.py index c1b46545a..42e7e6ba2 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/node_classification.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/node_classification.py @@ -28,7 +28,7 @@ @nx.utils.not_implemented_for("directed") -@nx._dispatch(node_attrs="label_name") +@nx._dispatchable(node_attrs="label_name") def harmonic_function(G, max_iter=30, label_name="label"): """Node classification by Harmonic function @@ -105,7 +105,7 @@ def harmonic_function(G, max_iter=30, label_name="label"): @nx.utils.not_implemented_for("directed") -@nx._dispatch(node_attrs="label_name") +@nx._dispatchable(node_attrs="label_name") def local_and_global_consistency(G, alpha=0.99, max_iter=30, label_name="label"): """Node classification by Local and Global Consistency diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/non_randomness.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/non_randomness.py index 777cecbc9..85483d330 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/non_randomness.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/non_randomness.py @@ -11,7 +11,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def non_randomness(G, k=None, weight="weight"): """Compute the non-randomness of graph G. @@ -57,7 +57,7 @@ def non_randomness(G, k=None, weight="weight"): -------- >>> G = nx.karate_club_graph() >>> nr, nr_rd = nx.non_randomness(G, 2) - >>> nr, nr_rd = nx.non_randomness(G, 2, 'weight') + >>> nr, nr_rd = nx.non_randomness(G, 2, "weight") Notes ----- @@ -84,7 +84,7 @@ def non_randomness(G, k=None, weight="weight"): # eq. 4.4 eigenvalues = np.linalg.eigvals(nx.to_numpy_array(G, weight=weight)) - nr = np.real(np.sum(eigenvalues[:k])) + nr = float(np.real(np.sum(eigenvalues[:k]))) n = G.number_of_nodes() m = G.number_of_edges() diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/__init__.cpython-312.pyc index d02997d2a..a7d8dc69d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/all.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/all.cpython-312.pyc index dc9390a71..03133a6d2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/all.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/all.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/binary.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/binary.cpython-312.pyc index 2e4ad0183..02b5be68e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/binary.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/binary.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/product.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/product.cpython-312.pyc index 2a12b086d..e7a81d57a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/product.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/product.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/unary.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/unary.cpython-312.pyc index e47f454e9..ee5954eb7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/unary.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/__pycache__/unary.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/all.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/all.py index c9498c0a3..ba1304b6c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/all.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/all.py @@ -7,7 +7,7 @@ __all__ = ["union_all", "compose_all", "disjoint_union_all", "intersection_all"] -@nx._dispatch(graphs="[graphs]", preserve_all_attrs=True) +@nx._dispatchable(graphs="[graphs]", preserve_all_attrs=True, returns_graph=True) def union_all(graphs, rename=()): """Returns the union of all graphs. @@ -92,10 +92,9 @@ def label(x): raise nx.NetworkXError("All graphs must be graphs or multigraphs.") elif not seen_nodes.isdisjoint(G_nodes_set): raise nx.NetworkXError( - "The node sets of the graphs are not disjoint.", - "Use appropriate rename" - "=(G1prefix,G2prefix,...,GNprefix)" - "or use disjoint_union(G1,G2,...,GN).", + "The node sets of the graphs are not disjoint.\n" + "Use `rename` to specify prefixes for the graphs or use\n" + "disjoint_union(G1, G2, ..., GN)." ) seen_nodes |= G_nodes_set @@ -111,7 +110,7 @@ def label(x): return R -@nx._dispatch(graphs="[graphs]", preserve_all_attrs=True) +@nx._dispatchable(graphs="[graphs]", preserve_all_attrs=True, returns_graph=True) def disjoint_union_all(graphs): """Returns the disjoint union of all graphs. @@ -165,7 +164,7 @@ def yield_relabeled(graphs): return R -@nx._dispatch(graphs="[graphs]", preserve_all_attrs=True) +@nx._dispatchable(graphs="[graphs]", preserve_all_attrs=True, returns_graph=True) def compose_all(graphs): """Returns the composition of all graphs. @@ -231,7 +230,7 @@ def compose_all(graphs): return R -@nx._dispatch(graphs="[graphs]") +@nx._dispatchable(graphs="[graphs]", returns_graph=True) def intersection_all(graphs): """Returns a new graph that contains only the nodes and the edges that exist in all graphs. @@ -271,8 +270,11 @@ def intersection_all(graphs): >>> gh = nx.intersection_all([g, h]) - >>> new_node_attr = {n: min(*(anyG.nodes[n].get('capacity', float('inf')) for anyG in [g, h])) for n in gh} - >>> nx.set_node_attributes(gh, new_node_attr, 'new_capacity') + >>> new_node_attr = { + ... n: min(*(anyG.nodes[n].get("capacity", float("inf")) for anyG in [g, h])) + ... for n in gh + ... } + >>> nx.set_node_attributes(gh, new_node_attr, "new_capacity") >>> gh.nodes(data=True) NodeDataView({0: {'new_capacity': 2}, 1: {'new_capacity': 3}}) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/binary.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/binary.py index 1979e80b6..0ca3a7b6b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/binary.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/binary.py @@ -15,7 +15,7 @@ _G_H = {"G": 0, "H": 1} -@nx._dispatch(graphs=_G_H, preserve_all_attrs=True) +@nx._dispatchable(graphs=_G_H, preserve_all_attrs=True, returns_graph=True) def union(G, H, rename=()): """Combine graphs G and H. The names of nodes must be unique. @@ -71,7 +71,7 @@ def union(G, H, rename=()): return nx.union_all([G, H], rename) -@nx._dispatch(graphs=_G_H, preserve_all_attrs=True) +@nx._dispatchable(graphs=_G_H, preserve_all_attrs=True, returns_graph=True) def disjoint_union(G, H): """Combine graphs G and H. The nodes are assumed to be unique (disjoint). @@ -125,7 +125,7 @@ def disjoint_union(G, H): return nx.disjoint_union_all([G, H]) -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, returns_graph=True) def intersection(G, H): """Returns a new graph that contains only the nodes and the edges that exist in both G and H. @@ -170,7 +170,7 @@ def intersection(G, H): return nx.intersection_all([G, H]) -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, returns_graph=True) def difference(G, H): """Returns a new graph that contains the edges that exist in G but not in H. @@ -210,7 +210,7 @@ def difference(G, H): # create new graph if not G.is_multigraph() == H.is_multigraph(): raise nx.NetworkXError("G and H must both be graphs or multigraphs.") - R = nx.create_empty_copy(G) + R = nx.create_empty_copy(G, with_data=False) if set(G) != set(H): raise nx.NetworkXError("Node sets of graphs not equal") @@ -225,7 +225,7 @@ def difference(G, H): return R -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, returns_graph=True) def symmetric_difference(G, H): """Returns new graph with edges that exist in either G or H but not both. @@ -258,7 +258,7 @@ def symmetric_difference(G, H): # create new graph if not G.is_multigraph() == H.is_multigraph(): raise nx.NetworkXError("G and H must both be graphs or multigraphs.") - R = nx.create_empty_copy(G) + R = nx.create_empty_copy(G, with_data=False) if set(G) != set(H): raise nx.NetworkXError("Node sets of graphs not equal") @@ -288,7 +288,7 @@ def symmetric_difference(G, H): return R -@nx._dispatch(graphs=_G_H, preserve_all_attrs=True) +@nx._dispatchable(graphs=_G_H, preserve_all_attrs=True, returns_graph=True) def compose(G, H): """Compose graph G with H by combining nodes and edges into a single graph. @@ -336,36 +336,40 @@ def compose(G, H): By default, the attributes from `H` take precedent over attributes from `G`. If you prefer another way of combining attributes, you can update them after the compose operation: - >>> G = nx.Graph([(0, 1, {'weight': 2.0}), (3, 0, {'weight': 100.0})]) - >>> H = nx.Graph([(0, 1, {'weight': 10.0}), (1, 2, {'weight': -1.0})]) - >>> nx.set_node_attributes(G, {0: 'dark', 1: 'light', 3: 'black'}, name='color') - >>> nx.set_node_attributes(H, {0: 'green', 1: 'orange', 2: 'yellow'}, name='color') + >>> G = nx.Graph([(0, 1, {"weight": 2.0}), (3, 0, {"weight": 100.0})]) + >>> H = nx.Graph([(0, 1, {"weight": 10.0}), (1, 2, {"weight": -1.0})]) + >>> nx.set_node_attributes(G, {0: "dark", 1: "light", 3: "black"}, name="color") + >>> nx.set_node_attributes(H, {0: "green", 1: "orange", 2: "yellow"}, name="color") >>> GcomposeH = nx.compose(G, H) Normally, color attribute values of nodes of GcomposeH come from H. We can workaround this as follows: - >>> node_data = {n: G.nodes[n]['color'] + " " + H.nodes[n]['color'] for n in G.nodes & H.nodes} - >>> nx.set_node_attributes(GcomposeH, node_data, 'color') - >>> print(GcomposeH.nodes[0]['color']) + >>> node_data = { + ... n: G.nodes[n]["color"] + " " + H.nodes[n]["color"] for n in G.nodes & H.nodes + ... } + >>> nx.set_node_attributes(GcomposeH, node_data, "color") + >>> print(GcomposeH.nodes[0]["color"]) dark green - >>> print(GcomposeH.nodes[3]['color']) + >>> print(GcomposeH.nodes[3]["color"]) black Similarly, we can update edge attributes after the compose operation in a way we prefer: - >>> edge_data = {e: G.edges[e]['weight'] * H.edges[e]['weight'] for e in G.edges & H.edges} - >>> nx.set_edge_attributes(GcomposeH, edge_data, 'weight') - >>> print(GcomposeH.edges[(0, 1)]['weight']) + >>> edge_data = { + ... e: G.edges[e]["weight"] * H.edges[e]["weight"] for e in G.edges & H.edges + ... } + >>> nx.set_edge_attributes(GcomposeH, edge_data, "weight") + >>> print(GcomposeH.edges[(0, 1)]["weight"]) 20.0 - >>> print(GcomposeH.edges[(3, 0)]['weight']) + >>> print(GcomposeH.edges[(3, 0)]["weight"]) 100.0 """ return nx.compose_all([G, H]) -@nx._dispatch(graphs=_G_H, preserve_all_attrs=True) +@nx._dispatchable(graphs=_G_H, preserve_all_attrs=True, returns_graph=True) def full_join(G, H, rename=(None, None)): """Returns the full join of graphs G and H. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/product.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/product.py index 639cec390..dc3427004 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/product.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/product.py @@ -14,6 +14,7 @@ "power", "rooted_product", "corona_product", + "modular_product", ] _G_H = {"G": 0, "H": 1} @@ -123,12 +124,12 @@ def _init_product_graph(G, H): return GH -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, preserve_node_attrs=True, returns_graph=True) def tensor_product(G, H): r"""Returns the tensor product of G and H. The tensor product $P$ of the graphs $G$ and $H$ has a node set that - is the tensor product of the node sets, $V(P)=V(G) \times V(H)$. + is the Cartesian product of the node sets, $V(P)=V(G) \times V(H)$. $P$ has an edge $((u,v), (x,y))$ if and only if $(u,x)$ is an edge in $G$ and $(v,y)$ is an edge in $H$. @@ -179,7 +180,7 @@ def tensor_product(G, H): return GH -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, preserve_node_attrs=True, returns_graph=True) def cartesian_product(G, H): r"""Returns the Cartesian product of G and H. @@ -231,7 +232,7 @@ def cartesian_product(G, H): return GH -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, preserve_node_attrs=True, returns_graph=True) def lexicographic_product(G, H): r"""Returns the lexicographic product of G and H. @@ -284,7 +285,7 @@ def lexicographic_product(G, H): return GH -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, preserve_node_attrs=True, returns_graph=True) def strong_product(G, H): r"""Returns the strong product of G and H. @@ -342,7 +343,7 @@ def strong_product(G, H): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def power(G, k): """Returns the specified power of a graph. @@ -431,7 +432,7 @@ def power(G, k): @not_implemented_for("multigraph") -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, returns_graph=True) def rooted_product(G, H, root): """Return the rooted product of graphs G and H rooted at root in H. @@ -471,7 +472,7 @@ def rooted_product(G, H, root): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(graphs=_G_H) +@nx._dispatchable(graphs=_G_H, returns_graph=True) def corona_product(G, H): r"""Returns the Corona product of G and H. @@ -532,3 +533,98 @@ def corona_product(G, H): GH.add_edges_from((G_node, (G_node, H_node)) for H_node in H) return GH + + +@nx._dispatchable( + graphs=_G_H, preserve_edge_attrs=True, preserve_node_attrs=True, returns_graph=True +) +def modular_product(G, H): + r"""Returns the Modular product of G and H. + + The modular product of `G` and `H` is the graph $M = G \nabla H$, + consisting of the node set $V(M) = V(G) \times V(H)$ that is the Cartesian + product of the node sets of `G` and `H`. Further, M contains an edge ((u, v), (x, y)): + + - if u is adjacent to x in `G` and v is adjacent to y in `H`, or + - if u is not adjacent to x in `G` and v is not adjacent to y in `H`. + + More formally:: + + E(M) = {((u, v), (x, y)) | ((u, x) in E(G) and (v, y) in E(H)) or + ((u, x) not in E(G) and (v, y) not in E(H))} + + Parameters + ---------- + G, H: NetworkX graphs + The graphs to take the modular product of. + + Returns + ------- + M: NetworkX graph + The Modular product of `G` and `H`. + + Raises + ------ + NetworkXNotImplemented + If `G` is not a simple graph. + + Examples + -------- + >>> G = nx.cycle_graph(4) + >>> H = nx.path_graph(2) + >>> M = nx.modular_product(G, H) + >>> list(M) + [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 0), (3, 1)] + >>> print(M) + Graph with 8 nodes and 8 edges + + Notes + ----- + The *modular product* is defined in [1]_ and was first + introduced as the *weak modular product*. + + The modular product reduces the problem of counting isomorphic subgraphs + in `G` and `H` to the problem of counting cliques in M. The subgraphs of + `G` and `H` that are induced by the nodes of a clique in M are + isomorphic [2]_ [3]_. + + References + ---------- + .. [1] R. Hammack, W. Imrich, and S. Klavžar, + "Handbook of Product Graphs", CRC Press, 2011. + + .. [2] H. G. Barrow and R. M. Burstall, + "Subgraph isomorphism, matching relational structures and maximal + cliques", Information Processing Letters, vol. 4, issue 4, pp. 83-84, + 1976, https://doi.org/10.1016/0020-0190(76)90049-1. + + .. [3] V. G. Vizing, "Reduction of the problem of isomorphism and isomorphic + entrance to the task of finding the nondensity of a graph." Proc. Third + All-Union Conference on Problems of Theoretical Cybernetics. 1974. + """ + if G.is_directed() or H.is_directed(): + raise nx.NetworkXNotImplemented( + "Modular product not implemented for directed graphs" + ) + if G.is_multigraph() or H.is_multigraph(): + raise nx.NetworkXNotImplemented( + "Modular product not implemented for multigraphs" + ) + + GH = _init_product_graph(G, H) + GH.add_nodes_from(_node_product(G, H)) + + for u, v, c in G.edges(data=True): + for x, y, d in H.edges(data=True): + GH.add_edge((u, x), (v, y), **_dict_product(c, d)) + GH.add_edge((v, x), (u, y), **_dict_product(c, d)) + + G = nx.complement(G) + H = nx.complement(H) + + for u, v, c in G.edges(data=True): + for x, y, d in H.edges(data=True): + GH.add_edge((u, x), (v, y), **_dict_product(c, d)) + GH.add_edge((v, x), (u, y), **_dict_product(c, d)) + + return GH diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/__init__.cpython-312.pyc index b868785fa..e192462e8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_all.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_all.cpython-312.pyc index 6707dd212..e1b1dc1c9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_all.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_all.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_binary.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_binary.cpython-312.pyc index 3fc7d0e5b..02fb56739 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_binary.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_binary.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_product.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_product.cpython-312.pyc index 9af41d554..cae5c24fb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_product.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_product.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_unary.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_unary.cpython-312.pyc index 7b84921fd..6158a9501 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_unary.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/__pycache__/test_unary.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_binary.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_binary.py index 97743822d..c2e9a0045 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_binary.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_binary.py @@ -43,7 +43,7 @@ def test_intersection(): assert sorted(I.edges()) == [(2, 3)] ################## - # Tests for @nx._dispatch mechanism with multiple graph arguments + # Tests for @nx._dispatchable mechanism with multiple graph arguments # nx.intersection is called as if it were a re-implementation # from another package. ################### @@ -53,7 +53,7 @@ def test_intersection(): assert set(I2.nodes()) == {1, 2, 3, 4} assert sorted(I2.edges()) == [(2, 3)] # Only test if not performing auto convert testing of backend implementations - if not nx.utils.backends._dispatch._automatic_backends: + if not nx.config["backend_priority"]: with pytest.raises(TypeError): nx.intersection(G2, H) with pytest.raises(TypeError): @@ -199,6 +199,9 @@ def test_difference_attributes(): assert set(gh.nodes()) == set(g.nodes()) assert set(gh.nodes()) == set(h.nodes()) assert sorted(gh.edges()) == [] + # node and graph data should not be copied over + assert gh.nodes.data() != g.nodes.data() + assert gh.graph != g.graph def test_difference_multigraph_attributes(): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_product.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_product.py index 50bc7b7e5..2eb788bc3 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_product.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/tests/test_product.py @@ -433,3 +433,59 @@ def test_corona_product(): C = nx.corona_product(G, H) assert len(C) == (len(G) * len(H)) + len(G) assert C.size() == G.size() + len(G) * H.size() + len(G) * len(H) + + +def test_modular_product(): + G = nx.path_graph(3) + H = nx.path_graph(4) + M = nx.modular_product(G, H) + assert len(M) == len(G) * len(H) + + assert edges_equal( + list(M.edges()), + [ + ((0, 0), (1, 1)), + ((0, 0), (2, 2)), + ((0, 0), (2, 3)), + ((0, 1), (1, 0)), + ((0, 1), (1, 2)), + ((0, 1), (2, 3)), + ((0, 2), (1, 1)), + ((0, 2), (1, 3)), + ((0, 2), (2, 0)), + ((0, 3), (1, 2)), + ((0, 3), (2, 0)), + ((0, 3), (2, 1)), + ((1, 0), (2, 1)), + ((1, 1), (2, 0)), + ((1, 1), (2, 2)), + ((1, 2), (2, 1)), + ((1, 2), (2, 3)), + ((1, 3), (2, 2)), + ], + ) + + +def test_modular_product_raises(): + G = nx.Graph([(0, 1), (1, 2), (2, 0)]) + H = nx.Graph([(0, 1), (1, 2), (2, 0)]) + DG = nx.DiGraph([(0, 1), (1, 2), (2, 0)]) + DH = nx.DiGraph([(0, 1), (1, 2), (2, 0)]) + with pytest.raises(nx.NetworkXNotImplemented): + nx.modular_product(G, DH) + with pytest.raises(nx.NetworkXNotImplemented): + nx.modular_product(DG, H) + with pytest.raises(nx.NetworkXNotImplemented): + nx.modular_product(DG, DH) + + MG = nx.MultiGraph([(0, 1), (1, 2), (2, 0), (0, 1)]) + MH = nx.MultiGraph([(0, 1), (1, 2), (2, 0), (0, 1)]) + with pytest.raises(nx.NetworkXNotImplemented): + nx.modular_product(G, MH) + with pytest.raises(nx.NetworkXNotImplemented): + nx.modular_product(MG, H) + with pytest.raises(nx.NetworkXNotImplemented): + nx.modular_product(MG, MH) + with pytest.raises(nx.NetworkXNotImplemented): + # check multigraph with no multiedges + nx.modular_product(nx.MultiGraph(G), H) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/unary.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/unary.py index ce6d9be90..64be249f6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/unary.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/operators/unary.py @@ -4,7 +4,7 @@ __all__ = ["complement", "reverse"] -@nx._dispatch +@nx._dispatchable(returns_graph=True) def complement(G): """Returns the graph complement of G. @@ -28,7 +28,7 @@ def complement(G): -------- >>> G = nx.Graph([(1, 2), (1, 3), (2, 3), (3, 4), (3, 5)]) >>> G_complement = nx.complement(G) - >>> G_complement.edges() # This shows the edges of the complemented graph + >>> G_complement.edges() # This shows the edges of the complemented graph EdgeView([(1, 4), (1, 5), (2, 4), (2, 5), (4, 5)]) """ @@ -40,7 +40,7 @@ def complement(G): return R -@nx._dispatch +@nx._dispatchable(returns_graph=True) def reverse(G, copy=True): """Returns the reverse directed graph of G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planar_drawing.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planar_drawing.py index 47f94f172..ea25809b6 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planar_drawing.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planar_drawing.py @@ -78,18 +78,18 @@ def combinatorial_embedding_to_pos(embedding, fully_triangulate=False): left_t_child[v3] = None for k in range(3, len(node_list)): - vk, contour_neighbors = node_list[k] - wp = contour_neighbors[0] - wp1 = contour_neighbors[1] - wq = contour_neighbors[-1] - wq1 = contour_neighbors[-2] - adds_mult_tri = len(contour_neighbors) > 2 + vk, contour_nbrs = node_list[k] + wp = contour_nbrs[0] + wp1 = contour_nbrs[1] + wq = contour_nbrs[-1] + wq1 = contour_nbrs[-2] + adds_mult_tri = len(contour_nbrs) > 2 # Stretch gaps: delta_x[wp1] += 1 delta_x[wq] += 1 - delta_x_wp_wq = sum(delta_x[x] for x in contour_neighbors[1:]) + delta_x_wp_wq = sum(delta_x[x] for x in contour_nbrs[1:]) # Adjust offsets delta_x[vk] = (-y_coordinate[wp] + delta_x_wp_wq + y_coordinate[wq]) // 2 @@ -326,8 +326,8 @@ def triangulate_face(embedding, v1, v2): v1, v2, v3 = v2, v3, v4 else: # Add edge for triangulation - embedding.add_half_edge_cw(v1, v3, v2) - embedding.add_half_edge_ccw(v3, v1, v2) + embedding.add_half_edge(v1, v3, ccw=v2) + embedding.add_half_edge(v3, v1, cw=v2) v1, v2, v3 = v1, v3, v4 # Get next node _, v4 = embedding.next_face_half_edge(v2, v3) @@ -445,8 +445,8 @@ def make_bi_connected(embedding, starting_node, outgoing_node, edges_counted): # cycle is not completed yet if v2 in face_set: # v2 encountered twice: Add edge to ensure 2-connectedness - embedding.add_half_edge_cw(v1, v3, v2) - embedding.add_half_edge_ccw(v3, v1, v2) + embedding.add_half_edge(v1, v3, ccw=v2) + embedding.add_half_edge(v3, v1, cw=v2) edges_counted.add((v2, v3)) edges_counted.add((v3, v1)) v2 = v1 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planarity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planarity.py index ad46f4739..17d0bec5a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planarity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/planarity.py @@ -5,7 +5,7 @@ __all__ = ["check_planarity", "is_planar", "PlanarEmbedding"] -@nx._dispatch +@nx._dispatchable def is_planar(G): """Returns True if and only if `G` is planar. @@ -38,7 +38,7 @@ def is_planar(G): return check_planarity(G, counterexample=False)[0] -@nx._dispatch +@nx._dispatchable(returns_graph=True) def check_planarity(G, counterexample=False): """Check if a graph is planar and return a counterexample or an embedding. @@ -114,7 +114,7 @@ def check_planarity(G, counterexample=False): return True, embedding -@nx._dispatch +@nx._dispatchable(returns_graph=True) def check_planarity_recursive(G, counterexample=False): """Recursive version of :meth:`check_planarity`.""" planarity_state = LRPlanarity(G) @@ -130,7 +130,7 @@ def check_planarity_recursive(G, counterexample=False): return True, embedding -@nx._dispatch +@nx._dispatchable(returns_graph=True) def get_counterexample(G): """Obtains a Kuratowski subgraph. @@ -169,7 +169,7 @@ def get_counterexample(G): return subgraph -@nx._dispatch +@nx._dispatchable(returns_graph=True) def get_counterexample_recursive(G): """Recursive version of :meth:`get_counterexample`.""" @@ -376,7 +376,7 @@ def lr_planarity(self): # initialize the embedding previous_node = None for w in self.ordered_adjs[v]: - self.embedding.add_half_edge_cw(v, w, previous_node) + self.embedding.add_half_edge(v, w, ccw=previous_node) previous_node = w # Free no longer used variables @@ -436,7 +436,7 @@ def lr_planarity_recursive(self): # initialize the embedding previous_node = None for w in self.ordered_adjs[v]: - self.embedding.add_half_edge_cw(v, w, previous_node) + self.embedding.add_half_edge(v, w, ccw=previous_node) previous_node = w # compute the complete embedding @@ -714,9 +714,9 @@ def dfs_embedding(self, v): break # handle next node in dfs_stack (i.e. w) else: # back edge if self.side[ei] == 1: - self.embedding.add_half_edge_cw(w, v, self.right_ref[w]) + self.embedding.add_half_edge(w, v, ccw=self.right_ref[w]) else: - self.embedding.add_half_edge_ccw(w, v, self.left_ref[w]) + self.embedding.add_half_edge(w, v, cw=self.left_ref[w]) self.left_ref[w] = v def dfs_embedding_recursive(self, v): @@ -731,10 +731,10 @@ def dfs_embedding_recursive(self, v): else: # back edge if self.side[ei] == 1: # place v directly after right_ref[w] in embed. list of w - self.embedding.add_half_edge_cw(w, v, self.right_ref[w]) + self.embedding.add_half_edge(w, v, ccw=self.right_ref[w]) else: # place v directly before left_ref[w] in embed. list of w - self.embedding.add_half_edge_ccw(w, v, self.left_ref[w]) + self.embedding.add_half_edge(w, v, cw=self.left_ref[w]) self.left_ref[w] = v def sign(self, e): @@ -791,15 +791,12 @@ class PlanarEmbedding(nx.DiGraph): * Edges must go in both directions (because the edge attributes differ) * Every edge must have a 'cw' and 'ccw' attribute which corresponds to a correct planar embedding. - * A node with non zero degree must have a node attribute 'first_nbr'. As long as a PlanarEmbedding is invalid only the following methods should be called: - * :meth:`add_half_edge_ccw` - * :meth:`add_half_edge_cw` + * :meth:`add_half_edge` * :meth:`connect_components` - * :meth:`add_half_edge_first` Even though the graph is a subclass of nx.DiGraph, it can still be used for algorithms that require undirected graphs, because the method @@ -808,14 +805,14 @@ class PlanarEmbedding(nx.DiGraph): **Half edges:** - In methods like `add_half_edge_ccw` the term "half-edge" is used, which is + In methods like `add_half_edge` the term "half-edge" is used, which is a term that is used in `doubly connected edge lists `_. It is used to emphasize that the edge is only in one direction and there exists another half-edge in the opposite direction. While conventional edges always have two faces (including outer face) next to them, it is possible to assign each half-edge *exactly one* face. - For a half-edge (u, v) that is orientated such that u is below v then the + For a half-edge (u, v) that is oriented such that u is below v then the face that belongs to (u, v) is to the right of this half-edge. See Also @@ -833,23 +830,23 @@ class PlanarEmbedding(nx.DiGraph): Create an embedding of a star graph (compare `nx.star_graph(3)`): >>> G = nx.PlanarEmbedding() - >>> G.add_half_edge_cw(0, 1, None) - >>> G.add_half_edge_cw(0, 2, 1) - >>> G.add_half_edge_cw(0, 3, 2) - >>> G.add_half_edge_cw(1, 0, None) - >>> G.add_half_edge_cw(2, 0, None) - >>> G.add_half_edge_cw(3, 0, None) + >>> G.add_half_edge(0, 1) + >>> G.add_half_edge(0, 2, ccw=1) + >>> G.add_half_edge(0, 3, ccw=2) + >>> G.add_half_edge(1, 0) + >>> G.add_half_edge(2, 0) + >>> G.add_half_edge(3, 0) Alternatively the same embedding can also be defined in counterclockwise orientation. The following results in exactly the same PlanarEmbedding: >>> G = nx.PlanarEmbedding() - >>> G.add_half_edge_ccw(0, 1, None) - >>> G.add_half_edge_ccw(0, 3, 1) - >>> G.add_half_edge_ccw(0, 2, 3) - >>> G.add_half_edge_ccw(1, 0, None) - >>> G.add_half_edge_ccw(2, 0, None) - >>> G.add_half_edge_ccw(3, 0, None) + >>> G.add_half_edge(0, 1) + >>> G.add_half_edge(0, 3, cw=1) + >>> G.add_half_edge(0, 2, cw=3) + >>> G.add_half_edge(1, 0) + >>> G.add_half_edge(2, 0) + >>> G.add_half_edge(3, 0) After creating a graph, it is possible to validate that the PlanarEmbedding object is correct: @@ -858,6 +855,22 @@ class PlanarEmbedding(nx.DiGraph): """ + def __init__(self, incoming_graph_data=None, **attr): + super().__init__(incoming_graph_data=incoming_graph_data, **attr) + self.add_edge = self.__forbidden + self.add_edges_from = self.__forbidden + self.add_weighted_edges_from = self.__forbidden + + def __forbidden(self, *args, **kwargs): + """Forbidden operation + + Any edge additions to a PlanarEmbedding should be done using + method `add_half_edge`. + """ + raise NotImplementedError( + "Use `add_half_edge` method to add edges to a PlanarEmbedding." + ) + def get_data(self): """Converts the adjacency structure into a better readable structure. @@ -894,8 +907,80 @@ def set_data(self, data): """ for v in data: + ref = None for w in reversed(data[v]): - self.add_half_edge_first(v, w) + self.add_half_edge(v, w, cw=ref) + ref = w + + def remove_node(self, n): + """Remove node n. + + Removes the node n and all adjacent edges, updating the + PlanarEmbedding to account for any resulting edge removal. + Attempting to remove a non-existent node will raise an exception. + + Parameters + ---------- + n : node + A node in the graph + + Raises + ------ + NetworkXError + If n is not in the graph. + + See Also + -------- + remove_nodes_from + + """ + try: + for u in self._pred[n]: + succs_u = self._succ[u] + un_cw = succs_u[n]["cw"] + un_ccw = succs_u[n]["ccw"] + del succs_u[n] + del self._pred[u][n] + if n != un_cw: + succs_u[un_cw]["ccw"] = un_ccw + succs_u[un_ccw]["cw"] = un_cw + del self._node[n] + del self._succ[n] + del self._pred[n] + except KeyError as err: # NetworkXError if n not in self + raise nx.NetworkXError( + f"The node {n} is not in the planar embedding." + ) from err + nx._clear_cache(self) + + def remove_nodes_from(self, nodes): + """Remove multiple nodes. + + Parameters + ---------- + nodes : iterable container + A container of nodes (list, dict, set, etc.). If a node + in the container is not in the graph it is silently ignored. + + See Also + -------- + remove_node + + Notes + ----- + When removing nodes from an iterator over the graph you are changing, + a `RuntimeError` will be raised with message: + `RuntimeError: dictionary changed size during iteration`. This + happens when the graph's underlying dictionary is modified during + iteration. To avoid this error, evaluate the iterator into a separate + object, e.g. by using `list(iterator_of_nodes)`, and pass this + object to `G.remove_nodes_from`. + + """ + for n in nodes: + if n in self._node: + self.remove_node(n) + # silently skip non-existing nodes def neighbors_cw_order(self, v): """Generator for the neighbors of v in clockwise order. @@ -909,15 +994,91 @@ def neighbors_cw_order(self, v): node """ - if len(self[v]) == 0: + succs = self._succ[v] + if not succs: # v has no neighbors return - start_node = self.nodes[v]["first_nbr"] + start_node = next(reversed(succs)) yield start_node - current_node = self[v][start_node]["cw"] + current_node = succs[start_node]["cw"] while start_node != current_node: yield current_node - current_node = self[v][current_node]["cw"] + current_node = succs[current_node]["cw"] + + def add_half_edge(self, start_node, end_node, *, cw=None, ccw=None): + """Adds a half-edge from `start_node` to `end_node`. + + If the half-edge is not the first one out of `start_node`, a reference + node must be provided either in the clockwise (parameter `cw`) or in + the counterclockwise (parameter `ccw`) direction. Only one of `cw`/`ccw` + can be specified (or neither in the case of the first edge). + Note that specifying a reference in the clockwise (`cw`) direction means + inserting the new edge in the first counterclockwise position with + respect to the reference (and vice-versa). + + Parameters + ---------- + start_node : node + Start node of inserted edge. + end_node : node + End node of inserted edge. + cw, ccw: node + End node of reference edge. + Omit or pass `None` if adding the first out-half-edge of `start_node`. + + + Raises + ------ + NetworkXException + If the `cw` or `ccw` node is not a successor of `start_node`. + If `start_node` has successors, but neither `cw` or `ccw` is provided. + If both `cw` and `ccw` are specified. + + See Also + -------- + connect_components + """ + + succs = self._succ.get(start_node) + if succs: + # there is already some edge out of start_node + leftmost_nbr = next(reversed(self._succ[start_node])) + if cw is not None: + if cw not in succs: + raise nx.NetworkXError("Invalid clockwise reference node.") + if ccw is not None: + raise nx.NetworkXError("Only one of cw/ccw can be specified.") + ref_ccw = succs[cw]["ccw"] + super().add_edge(start_node, end_node, cw=cw, ccw=ref_ccw) + succs[ref_ccw]["cw"] = end_node + succs[cw]["ccw"] = end_node + # when (cw == leftmost_nbr), the newly added neighbor is + # already at the end of dict self._succ[start_node] and + # takes the place of the former leftmost_nbr + move_leftmost_nbr_to_end = cw != leftmost_nbr + elif ccw is not None: + if ccw not in succs: + raise nx.NetworkXError("Invalid counterclockwise reference node.") + ref_cw = succs[ccw]["cw"] + super().add_edge(start_node, end_node, cw=ref_cw, ccw=ccw) + succs[ref_cw]["ccw"] = end_node + succs[ccw]["cw"] = end_node + move_leftmost_nbr_to_end = True + else: + raise nx.NetworkXError( + "Node already has out-half-edge(s), either cw or ccw reference node required." + ) + if move_leftmost_nbr_to_end: + # LRPlanarity (via self.add_half_edge_first()) requires that + # we keep track of the leftmost neighbor, which we accomplish + # by keeping it as the last key in dict self._succ[start_node] + succs[leftmost_nbr] = succs.pop(leftmost_nbr) + + else: + if cw is not None or ccw is not None: + raise nx.NetworkXError("Invalid reference node.") + # adding the first edge out of start_node + super().add_edge(start_node, end_node, ccw=end_node, cw=end_node) def check_structure(self): """Runs without exceptions if this object is valid. @@ -927,7 +1088,6 @@ def check_structure(self): * Edges go in both directions (because the edge attributes differ). * Every edge has a 'cw' and 'ccw' attribute which corresponds to a correct planar embedding. - * A node with a degree larger than 0 has a node attribute 'first_nbr'. Running this method verifies that the underlying Graph must be planar. @@ -1000,24 +1160,12 @@ def add_half_edge_ccw(self, start_node, end_node, reference_neighbor): See Also -------- + add_half_edge add_half_edge_cw connect_components - add_half_edge_first """ - if reference_neighbor is None: - # The start node has no neighbors - self.add_edge(start_node, end_node) # Add edge to graph - self[start_node][end_node]["cw"] = end_node - self[start_node][end_node]["ccw"] = end_node - self.nodes[start_node]["first_nbr"] = end_node - else: - ccw_reference = self[start_node][reference_neighbor]["ccw"] - self.add_half_edge_cw(start_node, end_node, ccw_reference) - - if reference_neighbor == self.nodes[start_node].get("first_nbr", None): - # Update first neighbor - self.nodes[start_node]["first_nbr"] = end_node + self.add_half_edge(start_node, end_node, cw=reference_neighbor) def add_half_edge_cw(self, start_node, end_node, reference_neighbor): """Adds a half-edge from start_node to end_node. @@ -1041,31 +1189,85 @@ def add_half_edge_cw(self, start_node, end_node, reference_neighbor): See Also -------- + add_half_edge add_half_edge_ccw connect_components - add_half_edge_first """ - self.add_edge(start_node, end_node) # Add edge to graph + self.add_half_edge(start_node, end_node, ccw=reference_neighbor) - if reference_neighbor is None: - # The start node has no neighbors - self[start_node][end_node]["cw"] = end_node - self[start_node][end_node]["ccw"] = end_node - self.nodes[start_node]["first_nbr"] = end_node - return + def remove_edge(self, u, v): + """Remove the edge between u and v. - if reference_neighbor not in self[start_node]: - raise nx.NetworkXException( - "Cannot add edge. Reference neighbor does not exist" - ) + Parameters + ---------- + u, v : nodes + Remove the half-edges (u, v) and (v, u) and update the + edge ordering around the removed edge. + + Raises + ------ + NetworkXError + If there is not an edge between u and v. - # Get half-edge at the other side - cw_reference = self[start_node][reference_neighbor]["cw"] - # Alter half-edge data structures - self[start_node][reference_neighbor]["cw"] = end_node - self[start_node][end_node]["cw"] = cw_reference - self[start_node][cw_reference]["ccw"] = end_node - self[start_node][end_node]["ccw"] = reference_neighbor + See Also + -------- + remove_edges_from : remove a collection of edges + """ + try: + succs_u = self._succ[u] + succs_v = self._succ[v] + uv_cw = succs_u[v]["cw"] + uv_ccw = succs_u[v]["ccw"] + vu_cw = succs_v[u]["cw"] + vu_ccw = succs_v[u]["ccw"] + del succs_u[v] + del self._pred[v][u] + del succs_v[u] + del self._pred[u][v] + if v != uv_cw: + succs_u[uv_cw]["ccw"] = uv_ccw + succs_u[uv_ccw]["cw"] = uv_cw + if u != vu_cw: + succs_v[vu_cw]["ccw"] = vu_ccw + succs_v[vu_ccw]["cw"] = vu_cw + except KeyError as err: + raise nx.NetworkXError( + f"The edge {u}-{v} is not in the planar embedding." + ) from err + nx._clear_cache(self) + + def remove_edges_from(self, ebunch): + """Remove all edges specified in ebunch. + + Parameters + ---------- + ebunch: list or container of edge tuples + Each pair of half-edges between the nodes given in the tuples + will be removed from the graph. The nodes can be passed as: + + - 2-tuples (u, v) half-edges (u, v) and (v, u). + - 3-tuples (u, v, k) where k is ignored. + + See Also + -------- + remove_edge : remove a single edge + + Notes + ----- + Will fail silently if an edge in ebunch is not in the graph. + + Examples + -------- + >>> G = nx.path_graph(4) # or DiGraph, MultiGraph, MultiDiGraph, etc + >>> ebunch = [(1, 2), (2, 3)] + >>> G.remove_edges_from(ebunch) + """ + for e in ebunch: + u, v = e[:2] # ignore edge data + # assuming that the PlanarEmbedding is valid, if the half_edge + # (u, v) is in the graph, then so is half_edge (v, u) + if u in self._succ and v in self._succ[u]: + self.remove_edge(u, v) def connect_components(self, v, w): """Adds half-edges for (v, w) and (w, v) at some position. @@ -1084,15 +1286,24 @@ def connect_components(self, v, w): See Also -------- - add_half_edge_ccw - add_half_edge_cw - add_half_edge_first + add_half_edge """ - self.add_half_edge_first(v, w) - self.add_half_edge_first(w, v) + if v in self._succ and self._succ[v]: + ref = next(reversed(self._succ[v])) + else: + ref = None + self.add_half_edge(v, w, cw=ref) + if w in self._succ and self._succ[w]: + ref = next(reversed(self._succ[w])) + else: + ref = None + self.add_half_edge(w, v, cw=ref) def add_half_edge_first(self, start_node, end_node): - """The added half-edge is inserted at the first position in the order. + """Add a half-edge and set end_node as start_node's leftmost neighbor. + + The new edge is inserted counterclockwise with respect to the current + leftmost neighbor, if there is one. Parameters ---------- @@ -1101,15 +1312,14 @@ def add_half_edge_first(self, start_node, end_node): See Also -------- - add_half_edge_ccw - add_half_edge_cw + add_half_edge connect_components """ - if start_node in self and "first_nbr" in self.nodes[start_node]: - reference = self.nodes[start_node]["first_nbr"] - else: - reference = None - self.add_half_edge_ccw(start_node, end_node, reference) + succs = self._succ.get(start_node) + # the leftmost neighbor is the last entry in the + # self._succ[start_node] dict + leftmost_nbr = next(reversed(succs)) if succs else None + self.add_half_edge(start_node, end_node, cw=leftmost_nbr) def next_face_half_edge(self, v, w): """Returns the following half-edge left of a face. @@ -1177,3 +1387,16 @@ def is_directed(self): contained. """ return False + + def copy(self, as_view=False): + if as_view is True: + return nx.graphviews.generic_graph_view(self) + G = self.__class__() + G.graph.update(self.graph) + G.add_nodes_from((n, d.copy()) for n, d in self._node.items()) + super(self.__class__, G).add_edges_from( + (u, v, datadict.copy()) + for u, nbrs in self._adj.items() + for v, datadict in nbrs.items() + ) + return G diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/polynomials.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/polynomials.py index 57ecf0d09..217c7dbe3 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/polynomials.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/polynomials.py @@ -30,7 +30,7 @@ @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def tutte_polynomial(G): r"""Returns the Tutte polynomial of `G` @@ -180,7 +180,7 @@ def tutte_polynomial(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def chromatic_polynomial(G): r"""Returns the chromatic polynomial of `G` diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/reciprocity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/reciprocity.py index cb36ae9d5..25b0fa1ba 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/reciprocity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/reciprocity.py @@ -8,7 +8,7 @@ @not_implemented_for("undirected", "multigraph") -@nx._dispatch +@nx._dispatchable def reciprocity(G, nodes=None): r"""Compute the reciprocity in a directed graph. @@ -76,7 +76,7 @@ def _reciprocity_iter(G, nodes): @not_implemented_for("undirected", "multigraph") -@nx._dispatch +@nx._dispatchable def overall_reciprocity(G): """Compute the reciprocity for the whole graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/regular.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/regular.py index f9397fab2..058ad3654 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/regular.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/regular.py @@ -5,7 +5,7 @@ __all__ = ["is_regular", "is_k_regular", "k_factor"] -@nx._dispatch +@nx._dispatchable def is_regular(G): """Determines whether the graph ``G`` is a regular graph. @@ -29,6 +29,8 @@ def is_regular(G): True """ + if len(G) == 0: + raise nx.NetworkXPointlessConcept("Graph has no nodes.") n1 = nx.utils.arbitrary_element(G) if not G.is_directed(): d1 = G.degree(n1) @@ -42,7 +44,7 @@ def is_regular(G): @not_implemented_for("directed") -@nx._dispatch +@nx._dispatchable def is_k_regular(G, k): """Determines whether the graph ``G`` is a k-regular graph. @@ -69,7 +71,7 @@ def is_k_regular(G, k): @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="matching_weight") +@nx._dispatchable(preserve_edge_attrs=True, returns_graph=True) def k_factor(G, k, matching_weight="weight"): """Compute a k-factor of G diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/richclub.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/richclub.py index e9980f034..445b27d14 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/richclub.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/richclub.py @@ -10,7 +10,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def rich_club_coefficient(G, normalized=True, Q=100, seed=None): r"""Returns the rich-club coefficient of the graph `G`. @@ -44,6 +44,12 @@ def rich_club_coefficient(G, normalized=True, Q=100, seed=None): rc : dictionary A dictionary, keyed by degree, with rich-club coefficient values. + Raises + ------ + NetworkXError + If `G` has fewer than four nodes and ``normalized=True``. + A randomly sampled graph for normalization cannot be generated in this case. + Examples -------- >>> G = nx.Graph([(0, 1), (0, 2), (1, 2), (1, 3), (1, 4), (4, 5)]) @@ -57,6 +63,14 @@ def rich_club_coefficient(G, normalized=True, Q=100, seed=None): algorithm ignores any edge weights and is not defined for directed graphs or graphs with parallel edges or self loops. + Normalization is done by computing the rich club coefficient for a randomly + sampled graph with the same degree distribution as `G` by + repeatedly swapping the endpoints of existing edges. For graphs with fewer than 4 + nodes, it is not possible to generate a random graph with a prescribed + degree distribution, as the degree distribution fully determines the graph + (hence making the coefficients trivially normalized to 1). + This function raises an exception in this case. + Estimates for appropriate values of `Q` are found in [2]_. References @@ -72,7 +86,7 @@ def rich_club_coefficient(G, normalized=True, Q=100, seed=None): """ if nx.number_of_selfloops(G) > 0: raise Exception( - "rich_club_coefficient is not implemented for " "graphs with self loops." + "rich_club_coefficient is not implemented for graphs with self loops." ) rc = _compute_rc(G) if normalized: @@ -108,6 +122,9 @@ def _compute_rc(G): # side of the list, which would have a linear time cost. edge_degrees = sorted((sorted(map(G.degree, e)) for e in G.edges()), reverse=True) ek = G.number_of_edges() + if ek == 0: + return {} + k1, k2 = edge_degrees.pop() rc = {} for d, nk in enumerate(nks): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/__init__.cpython-312.pyc index 17b72edd8..ada60b184 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/astar.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/astar.cpython-312.pyc index ac0b8b821..b5aec47cb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/astar.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/astar.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/dense.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/dense.cpython-312.pyc index 6981ccb74..8850583bb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/dense.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/dense.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/generic.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/generic.cpython-312.pyc index 984685479..07bca7d27 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/generic.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/generic.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/unweighted.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/unweighted.cpython-312.pyc index bd093c76e..0b0d4a539 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/unweighted.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/unweighted.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/weighted.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/weighted.cpython-312.pyc index 32e5225ef..a458aeb20 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/weighted.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/__pycache__/weighted.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/astar.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/astar.py index 8f17a0c2a..1a36561fe 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/astar.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/astar.py @@ -9,8 +9,8 @@ __all__ = ["astar_path", "astar_path_length"] -@nx._dispatch(edge_attrs="weight", preserve_node_attrs="heuristic") -def astar_path(G, source, target, heuristic=None, weight="weight"): +@nx._dispatchable(edge_attrs="weight", preserve_node_attrs="heuristic") +def astar_path(G, source, target, heuristic=None, weight="weight", *, cutoff=None): """Returns a list of nodes in a shortest path between source and target using the A* ("A-star") algorithm. @@ -49,6 +49,15 @@ def astar_path(G, source, target, heuristic=None, weight="weight"): dictionary of edge attributes for that edge. The function must return a number or None to indicate a hidden edge. + cutoff : float, optional + If this is provided, the search will be bounded to this value. I.e. if + the evaluation function surpasses this value for a node n, the node will not + be expanded further and will be ignored. More formally, let h'(n) be the + heuristic function, and g(n) be the cost of reaching n from the source node. Then, + if g(n) + h'(n) > cutoff, the node will not be explored further. + Note that if the heuristic is inadmissible, it is possible that paths + are ignored even though they satisfy the cutoff. + Raises ------ NetworkXNoPath @@ -152,14 +161,20 @@ def heuristic(u, v): continue else: h = heuristic(neighbor, target) + + if cutoff and ncost + h > cutoff: + continue + enqueued[neighbor] = ncost, h push(queue, (ncost + h, next(c), neighbor, ncost, curnode)) raise nx.NetworkXNoPath(f"Node {target} not reachable from {source}") -@nx._dispatch(edge_attrs="weight", preserve_node_attrs="heuristic") -def astar_path_length(G, source, target, heuristic=None, weight="weight"): +@nx._dispatchable(edge_attrs="weight", preserve_node_attrs="heuristic") +def astar_path_length( + G, source, target, heuristic=None, weight="weight", *, cutoff=None +): """Returns the length of the shortest path between source and target using the A* ("A-star") algorithm. @@ -195,6 +210,16 @@ def astar_path_length(G, source, target, heuristic=None, weight="weight"): positional arguments: the two endpoints of an edge and the dictionary of edge attributes for that edge. The function must return a number or None to indicate a hidden edge. + + cutoff : float, optional + If this is provided, the search will be bounded to this value. I.e. if + the evaluation function surpasses this value for a node n, the node will not + be expanded further and will be ignored. More formally, let h'(n) be the + heuristic function, and g(n) be the cost of reaching n from the source node. Then, + if g(n) + h'(n) > cutoff, the node will not be explored further. + Note that if the heuristic is inadmissible, it is possible that paths + are ignored even though they satisfy the cutoff. + Raises ------ NetworkXNoPath @@ -210,5 +235,5 @@ def astar_path_length(G, source, target, heuristic=None, weight="weight"): raise nx.NodeNotFound(msg) weight = _weight_function(G, weight) - path = astar_path(G, source, target, heuristic, weight) + path = astar_path(G, source, target, heuristic, weight, cutoff=cutoff) return sum(weight(u, v, G[u][v]) for u, v in zip(path[:-1], path[1:])) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/dense.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/dense.py index 08339b189..26e5503d7 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/dense.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/dense.py @@ -10,7 +10,7 @@ ] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def floyd_warshall_numpy(G, nodelist=None, weight="weight"): """Find all-pairs shortest path lengths using Floyd's algorithm. @@ -84,7 +84,7 @@ def floyd_warshall_numpy(G, nodelist=None, weight="weight"): return A -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def floyd_warshall_predecessor_and_distance(G, weight="weight"): """Find all-pairs shortest path lengths using Floyd's algorithm. @@ -167,7 +167,7 @@ def floyd_warshall_predecessor_and_distance(G, weight="weight"): return dict(pred), dict(dist) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None) def reconstruct_path(source, target, predecessors): """Reconstruct a path from source to target using the predecessors dict as returned by floyd_warshall_predecessor_and_distance @@ -211,7 +211,7 @@ def reconstruct_path(source, target, predecessors): return list(reversed(path)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def floyd_warshall(G, weight="weight"): """Find all-pairs shortest path lengths using Floyd's algorithm. @@ -233,7 +233,7 @@ def floyd_warshall(G, weight="weight"): -------- >>> G = nx.DiGraph() >>> G.add_weighted_edges_from([(0, 1, 5), (1, 2, 2), (2, 3, -3), (1, 3, 10), (3, 2, 8)]) - >>> fw = nx.floyd_warshall(G, weight='weight') + >>> fw = nx.floyd_warshall(G, weight="weight") >>> results = {a: dict(b) for a, b in fw.items()} >>> print(results) {0: {0: 0, 1: 5, 2: 7, 3: 4}, 1: {1: 0, 2: 2, 3: -1, 0: inf}, 2: {2: 0, 3: -3, 0: inf, 1: inf}, 3: {3: 0, 2: 8, 0: inf, 1: inf}} diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/generic.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/generic.py index e47c4b4f5..c1ed69808 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/generic.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/generic.py @@ -19,7 +19,7 @@ ] -@nx._dispatch +@nx._dispatchable def has_path(G, source, target): """Returns *True* if *G* has a path from *source* to *target*. @@ -40,7 +40,7 @@ def has_path(G, source, target): return True -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def shortest_path(G, source=None, target=None, weight=None, method="dijkstra"): """Compute shortest paths in the graph. @@ -106,13 +106,13 @@ def shortest_path(G, source=None, target=None, weight=None, method="dijkstra"): >>> print(nx.shortest_path(G, source=0, target=4)) [0, 1, 2, 3, 4] >>> p = nx.shortest_path(G, source=0) # target not specified - >>> p[3] # shortest path from source=0 to target=3 + >>> p[3] # shortest path from source=0 to target=3 [0, 1, 2, 3] >>> p = nx.shortest_path(G, target=4) # source not specified - >>> p[1] # shortest path from source=1 to target=4 + >>> p[1] # shortest path from source=1 to target=4 [1, 2, 3, 4] - >>> p = nx.shortest_path(G) # source, target not specified - >>> p[2][4] # shortest path from source=2 to target=4 + >>> p = dict(nx.shortest_path(G)) # source, target not specified + >>> p[2][4] # shortest path from source=2 to target=4 [2, 3, 4] Notes @@ -135,8 +135,17 @@ def shortest_path(G, source=None, target=None, weight=None, method="dijkstra"): method = "unweighted" if weight is None else method if source is None: if target is None: - msg = "shortest_path for all_pairs will return an iterator in v3.3" - warnings.warn(msg, DeprecationWarning) + warnings.warn( + ( + "\n\nshortest_path will return an iterator that yields\n" + "(node, path) pairs instead of a dictionary when source\n" + "and target are unspecified beginning in version 3.5\n\n" + "To keep the current behavior, use:\n\n" + "\tdict(nx.shortest_path(G))" + ), + FutureWarning, + stacklevel=3, + ) # Find paths between all pairs. if method == "unweighted": @@ -178,7 +187,7 @@ def shortest_path(G, source=None, target=None, weight=None, method="dijkstra"): return paths -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def shortest_path_length(G, source=None, target=None, weight=None, method="dijkstra"): """Compute shortest path lengths in the graph. @@ -322,7 +331,7 @@ def shortest_path_length(G, source=None, target=None, weight=None, method="dijks return paths -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def average_shortest_path_length(G, weight=None, method=None): r"""Returns the average shortest path length. @@ -435,11 +444,11 @@ def path_length(v): all_pairs = nx.floyd_warshall(G, weight=weight) s = sum(sum(t.values()) for t in all_pairs.values()) elif method == "floyd-warshall-numpy": - s = nx.floyd_warshall_numpy(G, weight=weight).sum() + s = float(nx.floyd_warshall_numpy(G, weight=weight).sum()) return s / (n * (n - 1)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def all_shortest_paths(G, source, target, weight=None, method="dijkstra"): """Compute all shortest simple paths in the graph. @@ -517,7 +526,7 @@ def all_shortest_paths(G, source, target, weight=None, method="dijkstra"): return _build_paths_from_predecessors({source}, target, pred) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def single_source_all_shortest_paths(G, source, weight=None, method="dijkstra"): """Compute all shortest simple paths from the given source in the graph. @@ -593,7 +602,7 @@ def single_source_all_shortest_paths(G, source, weight=None, method="dijkstra"): pass -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def all_pairs_all_shortest_paths(G, weight=None, method="dijkstra"): """Compute all shortest paths between all nodes. @@ -647,8 +656,9 @@ def all_pairs_all_shortest_paths(G, weight=None, method="dijkstra"): single_source_all_shortest_paths """ for n in G: - yield n, dict( - single_source_all_shortest_paths(G, n, weight=weight, method=method) + yield ( + n, + dict(single_source_all_shortest_paths(G, n, weight=weight, method=method)), ) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/__init__.cpython-312.pyc index 87ae041d5..20b7cd95d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_astar.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_astar.cpython-312.pyc index 2fe0a0bf0..99e545e85 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_astar.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_astar.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense.cpython-312.pyc index cc5b1e386..105337d71 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense_numpy.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense_numpy.cpython-312.pyc index 7cdd9944e..3bc58ba58 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense_numpy.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_dense_numpy.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_generic.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_generic.cpython-312.pyc index 5ef4fab37..434d22d03 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_generic.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_generic.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_unweighted.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_unweighted.cpython-312.pyc index 4cf206920..046b14eee 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_unweighted.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_unweighted.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_weighted.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_weighted.cpython-312.pyc index 8e50e9c8d..6510b53cf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_weighted.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/__pycache__/test_weighted.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_astar.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_astar.py index 680f76efb..40a7d4e86 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_astar.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_astar.py @@ -176,6 +176,44 @@ def test_astar_nopath(self): with pytest.raises(nx.NodeNotFound): nx.astar_path(self.XG, "s", "moon") + def test_astar_cutoff(self): + with pytest.raises(nx.NetworkXNoPath): + # optimal path_length in XG is 9 + nx.astar_path(self.XG, "s", "v", cutoff=8.0) + with pytest.raises(nx.NetworkXNoPath): + nx.astar_path_length(self.XG, "s", "v", cutoff=8.0) + + def test_astar_admissible_heuristic_with_cutoff(self): + heuristic_values = {"s": 36, "y": 4, "x": 0, "u": 0, "v": 0} + + def h(u, v): + return heuristic_values[u] + + assert nx.astar_path_length(self.XG, "s", "v") == 9 + assert nx.astar_path_length(self.XG, "s", "v", heuristic=h) == 9 + assert nx.astar_path_length(self.XG, "s", "v", heuristic=h, cutoff=12) == 9 + assert nx.astar_path_length(self.XG, "s", "v", heuristic=h, cutoff=9) == 9 + with pytest.raises(nx.NetworkXNoPath): + nx.astar_path_length(self.XG, "s", "v", heuristic=h, cutoff=8) + + def test_astar_inadmissible_heuristic_with_cutoff(self): + heuristic_values = {"s": 36, "y": 14, "x": 10, "u": 10, "v": 0} + + def h(u, v): + return heuristic_values[u] + + # optimal path_length in XG is 9. This heuristic gives over-estimate. + assert nx.astar_path_length(self.XG, "s", "v", heuristic=h) == 10 + assert nx.astar_path_length(self.XG, "s", "v", heuristic=h, cutoff=15) == 10 + with pytest.raises(nx.NetworkXNoPath): + nx.astar_path_length(self.XG, "s", "v", heuristic=h, cutoff=9) + with pytest.raises(nx.NetworkXNoPath): + nx.astar_path_length(self.XG, "s", "v", heuristic=h, cutoff=12) + + def test_astar_cutoff2(self): + assert nx.astar_path(self.XG, "s", "v", cutoff=10.0) == ["s", "x", "u", "v"] + assert nx.astar_path_length(self.XG, "s", "v") == 9 + def test_cycle(self): C = nx.cycle_graph(7) assert nx.astar_path(C, 0, 3) == [0, 1, 2, 3] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_generic.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_generic.py index 9cf7e7a50..e30de5177 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_generic.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/tests/test_generic.py @@ -212,22 +212,24 @@ def test_single_source_all_shortest_paths(self): assert sorted(ans[4]) == [[4]] def test_all_pairs_shortest_path(self): + # shortest_path w/o source and target will return a generator instead of + # a dict beginning in version 3.5. Only the first call needs changed here. p = nx.shortest_path(self.cycle) assert p[0][3] == [0, 1, 2, 3] assert p == dict(nx.all_pairs_shortest_path(self.cycle)) - p = nx.shortest_path(self.grid) + p = dict(nx.shortest_path(self.grid)) validate_grid_path(4, 4, 1, 12, p[1][12]) # now with weights - p = nx.shortest_path(self.cycle, weight="weight") + p = dict(nx.shortest_path(self.cycle, weight="weight")) assert p[0][3] == [0, 1, 2, 3] assert p == dict(nx.all_pairs_dijkstra_path(self.cycle)) - p = nx.shortest_path(self.grid, weight="weight") + p = dict(nx.shortest_path(self.grid, weight="weight")) validate_grid_path(4, 4, 1, 12, p[1][12]) # weights and method specified - p = nx.shortest_path(self.cycle, weight="weight", method="dijkstra") + p = dict(nx.shortest_path(self.cycle, weight="weight", method="dijkstra")) assert p[0][3] == [0, 1, 2, 3] assert p == dict(nx.all_pairs_dijkstra_path(self.cycle)) - p = nx.shortest_path(self.cycle, weight="weight", method="bellman-ford") + p = dict(nx.shortest_path(self.cycle, weight="weight", method="bellman-ford")) assert p[0][3] == [0, 1, 2, 3] assert p == dict(nx.all_pairs_bellman_ford_path(self.cycle)) @@ -278,6 +280,10 @@ def test_has_path(self): assert nx.has_path(G, 0, 2) assert not nx.has_path(G, 0, 4) + def test_has_path_singleton(self): + G = nx.empty_graph(1) + assert nx.has_path(G, 0, 0) + def test_all_shortest_paths(self): G = nx.Graph() nx.add_path(G, [0, 1, 2, 3]) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/unweighted.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/unweighted.py index 1503ba747..bb587bba9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/unweighted.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/unweighted.py @@ -17,7 +17,7 @@ ] -@nx._dispatch +@nx._dispatchable def single_source_shortest_path_length(G, source, cutoff=None): """Compute the shortest path lengths from source to all reachable nodes. @@ -95,7 +95,7 @@ def _single_shortest_path_length(adj, firstlevel, cutoff): return -@nx._dispatch +@nx._dispatchable def single_target_shortest_path_length(G, target, cutoff=None): """Compute the shortest path lengths to target from all reachable nodes. @@ -135,8 +135,14 @@ def single_target_shortest_path_length(G, target, cutoff=None): if target not in G: raise nx.NodeNotFound(f"Target {target} is not in G") - msg = "single_target_shortest_path_length will return a dict starting in v3.3" - warnings.warn(msg, DeprecationWarning) + warnings.warn( + ( + "\n\nsingle_target_shortest_path_length will return a dict instead of" + "\nan iterator in version 3.5" + ), + FutureWarning, + stacklevel=3, + ) if cutoff is None: cutoff = float("inf") @@ -148,7 +154,7 @@ def single_target_shortest_path_length(G, target, cutoff=None): return _single_shortest_path_length(adj, nextlevel, cutoff) -@nx._dispatch +@nx._dispatchable def all_pairs_shortest_path_length(G, cutoff=None): """Computes the shortest path lengths between all nodes in `G`. @@ -193,7 +199,7 @@ def all_pairs_shortest_path_length(G, cutoff=None): yield (n, length(G, n, cutoff=cutoff)) -@nx._dispatch +@nx._dispatchable def bidirectional_shortest_path(G, source, target): """Returns a list of nodes in a shortest path between source and target. @@ -309,7 +315,7 @@ def _bidirectional_pred_succ(G, source, target): raise nx.NetworkXNoPath(f"No path between {source} and {target}.") -@nx._dispatch +@nx._dispatchable def single_source_shortest_path(G, source, cutoff=None): """Compute shortest path between source and all other nodes reachable from source. @@ -393,7 +399,7 @@ def _single_shortest_path(adj, firstlevel, paths, cutoff, join): return paths -@nx._dispatch +@nx._dispatchable def single_target_shortest_path(G, target, cutoff=None): """Compute shortest path to target from all nodes that reach target. @@ -445,7 +451,7 @@ def join(p1, p2): return dict(_single_shortest_path(adj, nextlevel, paths, cutoff, join)) -@nx._dispatch +@nx._dispatchable def all_pairs_shortest_path(G, cutoff=None): """Compute shortest paths between all nodes. @@ -485,7 +491,7 @@ def all_pairs_shortest_path(G, cutoff=None): yield (n, single_source_shortest_path(G, n, cutoff=cutoff)) -@nx._dispatch +@nx._dispatchable def predecessor(G, source, target=None, cutoff=None, return_seen=None): """Returns dict of predecessors for the path from source to all nodes in G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/weighted.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/weighted.py index bbbb03d9e..6299d276c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/weighted.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/shortest_paths/weighted.py @@ -78,7 +78,7 @@ def _weight_function(G, weight): return lambda u, v, data: data.get(weight, 1) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def dijkstra_path(G, source, target, weight="weight"): """Returns the shortest weighted path from source to target in G. @@ -133,7 +133,10 @@ def dijkstra_path(G, source, target, weight="weight"): >>> G.add_weighted_edges_from([(1, 2, 0.75), (1, 2, 0.5), (2, 3, 0.5), (1, 3, 1.5)]) >>> nodes = nx.dijkstra_path(G, 1, 3) >>> edges = nx.utils.pairwise(nodes) - >>> list((u, v, min(G[u][v], key=lambda k: G[u][v][k].get('weight', 1))) for u, v in edges) + >>> list( + ... (u, v, min(G[u][v], key=lambda k: G[u][v][k].get("weight", 1))) + ... for u, v in edges + ... ) [(1, 2, 1), (2, 3, 0)] Notes @@ -169,7 +172,7 @@ def dijkstra_path(G, source, target, weight="weight"): return path -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def dijkstra_path_length(G, source, target, weight="weight"): """Returns the shortest weighted path length in G from source to target. @@ -249,7 +252,7 @@ def dijkstra_path_length(G, source, target, weight="weight"): raise nx.NetworkXNoPath(f"Node {target} not reachable from {source}") from err -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def single_source_dijkstra_path(G, source, cutoff=None, weight="weight"): """Find shortest weighted paths in G from a source node. @@ -314,7 +317,7 @@ def single_source_dijkstra_path(G, source, cutoff=None, weight="weight"): return multi_source_dijkstra_path(G, {source}, cutoff=cutoff, weight=weight) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def single_source_dijkstra_path_length(G, source, cutoff=None, weight="weight"): """Find shortest weighted path lengths in G from a source node. @@ -386,7 +389,7 @@ def single_source_dijkstra_path_length(G, source, cutoff=None, weight="weight"): return multi_source_dijkstra_path_length(G, {source}, cutoff=cutoff, weight=weight) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def single_source_dijkstra(G, source, target=None, cutoff=None, weight="weight"): """Find shortest weighted paths and lengths from a source node. @@ -488,7 +491,7 @@ def single_source_dijkstra(G, source, target=None, cutoff=None, weight="weight") ) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def multi_source_dijkstra_path(G, sources, cutoff=None, weight="weight"): """Find shortest weighted paths in G from a given set of source nodes. @@ -562,7 +565,7 @@ def multi_source_dijkstra_path(G, sources, cutoff=None, weight="weight"): return path -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def multi_source_dijkstra_path_length(G, sources, cutoff=None, weight="weight"): """Find shortest weighted path lengths in G from a given set of source nodes. @@ -644,7 +647,7 @@ def multi_source_dijkstra_path_length(G, sources, cutoff=None, weight="weight"): return _dijkstra_multisource(G, sources, weight, cutoff=cutoff) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def multi_source_dijkstra(G, sources, target=None, cutoff=None, weight="weight"): """Find shortest weighted paths and lengths from a given set of source nodes. @@ -881,7 +884,7 @@ def _dijkstra_multisource( return dist -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def dijkstra_predecessor_and_distance(G, source, cutoff=None, weight="weight"): """Compute weighted shortest path length and predecessors. @@ -954,7 +957,7 @@ def dijkstra_predecessor_and_distance(G, source, cutoff=None, weight="weight"): return (pred, _dijkstra(G, source, weight, pred=pred, cutoff=cutoff)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def all_pairs_dijkstra(G, cutoff=None, weight="weight"): """Find shortest weighted paths and lengths between all nodes. @@ -1023,7 +1026,7 @@ def all_pairs_dijkstra(G, cutoff=None, weight="weight"): yield (n, (dist, path)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def all_pairs_dijkstra_path_length(G, cutoff=None, weight="weight"): """Compute shortest path lengths between all nodes in a weighted graph. @@ -1082,7 +1085,7 @@ def all_pairs_dijkstra_path_length(G, cutoff=None, weight="weight"): yield (n, length(G, n, cutoff=cutoff, weight=weight)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def all_pairs_dijkstra_path(G, cutoff=None, weight="weight"): """Compute shortest paths between all nodes in a weighted graph. @@ -1136,7 +1139,7 @@ def all_pairs_dijkstra_path(G, cutoff=None, weight="weight"): yield (n, path(G, n, cutoff=cutoff, weight=weight)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def bellman_ford_predecessor_and_distance( G, source, target=None, weight="weight", heuristic=False ): @@ -1484,7 +1487,7 @@ def _inner_bellman_ford( return None -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def bellman_ford_path(G, source, target, weight="weight"): """Returns the shortest path from source to target in a weighted graph G. @@ -1543,7 +1546,7 @@ def bellman_ford_path(G, source, target, weight="weight"): return path -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def bellman_ford_path_length(G, source, target, weight="weight"): """Returns the shortest path length from source to target in a weighted graph. @@ -1614,7 +1617,7 @@ def bellman_ford_path_length(G, source, target, weight="weight"): raise nx.NetworkXNoPath(f"node {target} not reachable from {source}") from err -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def single_source_bellman_ford_path(G, source, weight="weight"): """Compute shortest path between source and all other reachable nodes for a weighted graph. @@ -1670,7 +1673,7 @@ def single_source_bellman_ford_path(G, source, weight="weight"): return path -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def single_source_bellman_ford_path_length(G, source, weight="weight"): """Compute the shortest path length between source and all other reachable nodes for a weighted graph. @@ -1733,7 +1736,7 @@ def single_source_bellman_ford_path_length(G, source, weight="weight"): return _bellman_ford(G, [source], weight) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def single_source_bellman_ford(G, source, target=None, weight="weight"): """Compute shortest paths and lengths in a weighted graph G. @@ -1827,7 +1830,7 @@ def single_source_bellman_ford(G, source, target=None, weight="weight"): raise nx.NetworkXNoPath(msg) from err -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def all_pairs_bellman_ford_path_length(G, weight="weight"): """Compute shortest path lengths between all nodes in a weighted graph. @@ -1882,7 +1885,7 @@ def all_pairs_bellman_ford_path_length(G, weight="weight"): yield (n, dict(length(G, n, weight=weight))) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def all_pairs_bellman_ford_path(G, weight="weight"): """Compute shortest paths between all nodes in a weighted graph. @@ -1932,7 +1935,7 @@ def all_pairs_bellman_ford_path(G, weight="weight"): yield (n, path(G, n, weight=weight)) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def goldberg_radzik(G, source, weight="weight"): """Compute shortest path lengths and predecessors on shortest paths in weighted graphs. @@ -2119,7 +2122,7 @@ def relax(to_scan): return pred, d -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def negative_edge_cycle(G, weight="weight", heuristic=True): """Returns True if there exists a negative edge cycle anywhere in G. @@ -2190,7 +2193,7 @@ def negative_edge_cycle(G, weight="weight", heuristic=True): return False -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def find_negative_cycle(G, source, weight="weight"): """Returns a cycle with negative total weight if it exists. @@ -2283,7 +2286,7 @@ def find_negative_cycle(G, source, weight="weight"): raise nx.NetworkXUnbounded(msg) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def bidirectional_dijkstra(G, source, target, weight="weight"): r"""Dijkstra's algorithm for shortest paths using bidirectional search. @@ -2431,7 +2434,7 @@ def bidirectional_dijkstra(G, source, target, weight="weight"): raise nx.NetworkXNoPath(f"No path between {source} and {target}.") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def johnson(G, weight="weight"): r"""Uses Johnson's Algorithm to compute shortest paths. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/similarity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/similarity.py index 3d943c20d..7af9c8980 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/similarity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/similarity.py @@ -20,6 +20,7 @@ from itertools import product import networkx as nx +from networkx.utils import np_random_state __all__ = [ "graph_edit_distance", @@ -36,7 +37,7 @@ def debug_print(*args, **kwargs): print(*args, **kwargs) -@nx._dispatch( +@nx._dispatchable( graphs={"G1": 0, "G2": 1}, preserve_edge_attrs=True, preserve_node_attrs=True ) def graph_edit_distance( @@ -210,7 +211,7 @@ def graph_edit_distance( return bestcost -@nx._dispatch(graphs={"G1": 0, "G2": 1}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}) def optimal_edit_paths( G1, G2, @@ -322,7 +323,8 @@ def optimal_edit_paths( edge_edit_path : list of tuples ((u1, v1), (u2, v2)) cost : numeric - Optimal edit path cost (graph edit distance). + Optimal edit path cost (graph edit distance). When the cost + is zero, it indicates that `G1` and `G2` are isomorphic. Examples -------- @@ -334,6 +336,14 @@ def optimal_edit_paths( >>> cost 5.0 + Notes + ----- + To transform `G1` into a graph isomorphic to `G2`, apply the node + and edge edits in the returned ``edit_paths``. + In the case of isomorphic graphs, the cost is zero, and the paths + represent different isomorphic mappings (isomorphisms). That is, the + edits involve renaming nodes and edges to match the structure of `G2`. + See Also -------- graph_edit_distance, optimize_edit_paths @@ -373,7 +383,7 @@ def optimal_edit_paths( return paths, bestcost -@nx._dispatch(graphs={"G1": 0, "G2": 1}) +@nx._dispatchable(graphs={"G1": 0, "G2": 1}) def optimize_graph_edit_distance( G1, G2, @@ -524,7 +534,7 @@ def optimize_graph_edit_distance( yield cost -@nx._dispatch( +@nx._dispatchable( graphs={"G1": 0, "G2": 1}, preserve_edge_attrs=True, preserve_node_attrs=True ) def optimize_edit_paths( @@ -1200,10 +1210,10 @@ def prune(cost): # assert sorted(G2.edges) == sorted(h for g, h in edge_path if h is not None) # print(vertex_path, edge_path, cost, file = sys.stderr) # assert cost == maxcost_value - yield list(vertex_path), list(edge_path), cost + yield list(vertex_path), list(edge_path), float(cost) -@nx._dispatch +@nx._dispatchable def simrank_similarity( G, source=None, @@ -1223,9 +1233,9 @@ def simrank(G, u, v): in_neighbors_u = G.predecessors(u) in_neighbors_v = G.predecessors(v) scale = C / (len(in_neighbors_u) * len(in_neighbors_v)) - return scale * sum(simrank(G, w, x) - for w, x in product(in_neighbors_u, - in_neighbors_v)) + return scale * sum( + simrank(G, w, x) for w, x in product(in_neighbors_u, in_neighbors_v) + ) where ``G`` is the graph, ``u`` is the source, ``v`` is the target, and ``C`` is a float decay or importance factor between 0 and 1. @@ -1275,6 +1285,14 @@ def simrank(G, u, v): If neither ``source`` nor ``target`` is ``None``, this returns the similarity value for the given pair of nodes. + Raises + ------ + ExceededMaxIterations + If the algorithm does not converge within ``max_iterations``. + + NodeNotFound + If either ``source`` or ``target`` is not in `G`. + Examples -------- >>> G = nx.cycle_graph(2) @@ -1311,8 +1329,21 @@ def simrank(G, u, v): import numpy as np nodelist = list(G) - s_indx = None if source is None else nodelist.index(source) - t_indx = None if target is None else nodelist.index(target) + if source is not None: + if source not in nodelist: + raise nx.NodeNotFound(f"Source node {source} not in G") + else: + s_indx = nodelist.index(source) + else: + s_indx = None + + if target is not None: + if target not in nodelist: + raise nx.NodeNotFound(f"Target node {target} not in G") + else: + t_indx = nodelist.index(target) + else: + t_indx = None x = _simrank_similarity_numpy( G, s_indx, t_indx, importance_factor, max_iterations, tolerance @@ -1320,10 +1351,10 @@ def simrank(G, u, v): if isinstance(x, np.ndarray): if x.ndim == 1: - return dict(zip(G, x)) + return dict(zip(G, x.tolist())) # else x.ndim == 2 - return {u: dict(zip(G, row)) for u, row in zip(G, x)} - return x + return {u: dict(zip(G, row)) for u, row in zip(G, x.tolist())} + return float(x) def _simrank_similarity_python( @@ -1489,13 +1520,13 @@ def _simrank_similarity_numpy( ) if source is not None and target is not None: - return newsim[source, target] + return float(newsim[source, target]) if source is not None: return newsim[source] return newsim -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def panther_similarity( G, source, k=5, path_length=5, c=0.5, delta=0.1, eps=None, weight="weight" ): @@ -1511,7 +1542,7 @@ def panther_similarity( source : node Source node for which to find the top `k` similar other nodes k : int (default = 5) - The number of most similar nodes to return + The number of most similar nodes to return. path_length : int (default = 5) How long the randomly generated paths should be (``T`` in [1]_) c : float (default = 0.5) @@ -1533,7 +1564,20 @@ def panther_similarity( similarity : dictionary Dictionary of nodes to similarity scores (as floats). Note: the self-similarity (i.e., ``v``) will not be included in - the returned dictionary. + the returned dictionary. So, for ``k = 5``, a dictionary of + top 4 nodes and their similarity scores will be returned. + + Raises + ------ + NetworkXUnfeasible + If `source` is an isolated node. + + NodeNotFound + If `source` is not in `G`. + + Notes + ----- + The isolated nodes in `G` are ignored. Examples -------- @@ -1550,6 +1594,18 @@ def panther_similarity( """ import numpy as np + if source not in G: + raise nx.NodeNotFound(f"Source node {source} not in G") + + isolates = set(nx.isolates(G)) + + if source in isolates: + raise nx.NetworkXUnfeasible( + f"Panther similarity is not defined for the isolated source node {source}." + ) + + G = G.subgraph([node for node in G.nodes if node not in isolates]).copy() + num_nodes = G.number_of_nodes() if num_nodes < k: warnings.warn( @@ -1598,17 +1654,19 @@ def panther_similarity( top_k_sorted = top_k_unsorted[np.argsort(S[top_k_unsorted])][::-1] # Add back the similarity scores - top_k_sorted_names = (node_map[n] for n in top_k_sorted) - top_k_with_val = dict(zip(top_k_sorted_names, S[top_k_sorted])) + top_k_with_val = dict( + zip(node_map[top_k_sorted].tolist(), S[top_k_sorted].tolist()) + ) # Remove the self-similarity top_k_with_val.pop(source, None) return top_k_with_val -@nx._dispatch(edge_attrs="weight") +@np_random_state(5) +@nx._dispatchable(edge_attrs="weight") def generate_random_paths( - G, sample_size, path_length=5, index_map=None, weight="weight" + G, sample_size, path_length=5, index_map=None, weight="weight", seed=None ): """Randomly generate `sample_size` paths of length `path_length`. @@ -1629,6 +1687,9 @@ def generate_random_paths( weight : string or None, optional (default="weight") The name of an edge attribute that holds the numerical value used as a weight. If None then each edge has weight 1. + seed : integer, random_state, or None (default) + Indicator of random number generation state. + See :ref:`Randomness`. Returns ------- @@ -1648,7 +1709,9 @@ def generate_random_paths( >>> G = nx.star_graph(3) >>> index_map = {} >>> random_path = nx.generate_random_paths(G, 3, index_map=index_map) - >>> paths_containing_node_0 = [random_path[path_idx] for path_idx in index_map.get(0, [])] + >>> paths_containing_node_0 = [ + ... random_path[path_idx] for path_idx in index_map.get(0, []) + ... ] References ---------- @@ -1660,18 +1723,22 @@ def generate_random_paths( """ import numpy as np + randint_fn = ( + seed.integers if isinstance(seed, np.random.Generator) else seed.randint + ) + # Calculate transition probabilities between # every pair of vertices according to Eq. (3) adj_mat = nx.to_numpy_array(G, weight=weight) inv_row_sums = np.reciprocal(adj_mat.sum(axis=1)).reshape(-1, 1) transition_probabilities = adj_mat * inv_row_sums - node_map = np.array(G) + node_map = list(G) num_nodes = G.number_of_nodes() for path_index in range(sample_size): # Sample current vertex v = v_i uniformly at random - node_index = np.random.randint(0, high=num_nodes) + node_index = randint_fn(num_nodes) node = node_map[node_index] # Add v into p_r and add p_r into the path set @@ -1689,22 +1756,22 @@ def generate_random_paths( for _ in range(path_length): # Randomly sample a neighbor (v_j) according # to transition probabilities from ``node`` (v) to its neighbors - neighbor_index = np.random.choice( + nbr_index = seed.choice( num_nodes, p=transition_probabilities[starting_index] ) # Set current vertex (v = v_j) - starting_index = neighbor_index + starting_index = nbr_index # Add v into p_r - neighbor_node = node_map[neighbor_index] - path.append(neighbor_node) + nbr_node = node_map[nbr_index] + path.append(nbr_node) # Add p_r into P_v if index_map is not None: - if neighbor_node in index_map: - index_map[neighbor_node].add(path_index) + if nbr_node in index_map: + index_map[nbr_node].add(path_index) else: - index_map[neighbor_node] = {path_index} + index_map[nbr_node] = {path_index} yield path diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/simple_paths.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/simple_paths.py index cb288a67c..1bd2feb70 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/simple_paths.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/simple_paths.py @@ -13,7 +13,7 @@ ] -@nx._dispatch +@nx._dispatchable def is_simple_path(G, nodes): """Returns True if and only if `nodes` form a simple path in `G`. @@ -91,7 +91,7 @@ def is_simple_path(G, nodes): return all(v in G[u] for u, v in pairwise(nodes)) -@nx._dispatch +@nx._dispatchable def all_simple_paths(G, source, target, cutoff=None): """Generate all simple paths in the graph G from source to target. @@ -169,6 +169,17 @@ def all_simple_paths(G, source, target, cutoff=None): [0, 3, 1, 2] [0, 3, 2] + The singleton path from ``source`` to itself is considered a simple path and is + included in the results: + + >>> G = nx.empty_graph(5) + >>> list(nx.all_simple_paths(G, source=0, target=0)) + [[0]] + + >>> G = nx.path_graph(3) + >>> list(nx.all_simple_paths(G, source=0, target={0, 1, 2})) + [[0], [0, 1], [0, 1, 2]] + Iterate over each path from the root nodes to the leaf nodes in a directed acyclic graph using a functional programming approach:: @@ -242,86 +253,11 @@ def all_simple_paths(G, source, target, cutoff=None): all_shortest_paths, shortest_path, has_path """ - if source not in G: - raise nx.NodeNotFound(f"source node {source} not in graph") - if target in G: - targets = {target} - else: - try: - targets = set(target) - except TypeError as err: - raise nx.NodeNotFound(f"target node {target} not in graph") from err - if source in targets: - return _empty_generator() - if cutoff is None: - cutoff = len(G) - 1 - if cutoff < 1: - return _empty_generator() - if G.is_multigraph(): - return _all_simple_paths_multigraph(G, source, targets, cutoff) - else: - return _all_simple_paths_graph(G, source, targets, cutoff) - - -def _empty_generator(): - yield from () - + for edge_path in all_simple_edge_paths(G, source, target, cutoff): + yield [source] + [edge[1] for edge in edge_path] -def _all_simple_paths_graph(G, source, targets, cutoff): - visited = {source: True} - stack = [iter(G[source])] - while stack: - children = stack[-1] - child = next(children, None) - if child is None: - stack.pop() - visited.popitem() - elif len(visited) < cutoff: - if child in visited: - continue - if child in targets: - yield list(visited) + [child] - visited[child] = True - if targets - set(visited.keys()): # expand stack until find all targets - stack.append(iter(G[child])) - else: - visited.popitem() # maybe other ways to child - else: # len(visited) == cutoff: - for target in (targets & (set(children) | {child})) - set(visited.keys()): - yield list(visited) + [target] - stack.pop() - visited.popitem() - -def _all_simple_paths_multigraph(G, source, targets, cutoff): - visited = {source: True} - stack = [(v for u, v in G.edges(source))] - while stack: - children = stack[-1] - child = next(children, None) - if child is None: - stack.pop() - visited.popitem() - elif len(visited) < cutoff: - if child in visited: - continue - if child in targets: - yield list(visited) + [child] - visited[child] = True - if targets - set(visited.keys()): - stack.append((v for u, v in G.edges(child))) - else: - visited.popitem() - else: # len(visited) == cutoff: - for target in targets - set(visited.keys()): - count = ([child] + list(children)).count(target) - for i in range(count): - yield list(visited) + [target] - stack.pop() - visited.popitem() - - -@nx._dispatch +@nx._dispatchable def all_simple_edge_paths(G, source, target, cutoff=None): """Generate lists of edges for all simple paths in G from source to target. @@ -375,6 +311,19 @@ def all_simple_edge_paths(G, source, target, cutoff=None): [(1, 2, 'k0'), (2, 3, 'k0')] [(1, 2, 'k1'), (2, 3, 'k0')] + When ``source`` is one of the targets, the empty path starting and ending at + ``source`` without traversing any edge is considered a valid simple edge path + and is included in the results: + + >>> G = nx.Graph() + >>> G.add_node(0) + >>> paths = list(nx.all_simple_edge_paths(G, 0, 0)) + >>> for path in paths: + ... print(path) + [] + >>> len(paths) + 1 + Notes ----- @@ -394,56 +343,66 @@ def all_simple_edge_paths(G, source, target, cutoff=None): """ if source not in G: - raise nx.NodeNotFound("source node %s not in graph" % source) + raise nx.NodeNotFound(f"source node {source} not in graph") + if target in G: targets = {target} else: try: targets = set(target) - except TypeError: - raise nx.NodeNotFound("target node %s not in graph" % target) - if source in targets: - return [] - if cutoff is None: - cutoff = len(G) - 1 - if cutoff < 1: - return [] - if G.is_multigraph(): - for simp_path in _all_simple_edge_paths_multigraph(G, source, targets, cutoff): - yield simp_path - else: - for simp_path in _all_simple_paths_graph(G, source, targets, cutoff): - yield list(zip(simp_path[:-1], simp_path[1:])) + except TypeError as err: + raise nx.NodeNotFound(f"target node {target} not in graph") from err + + cutoff = cutoff if cutoff is not None else len(G) - 1 + + if cutoff >= 0 and targets: + yield from _all_simple_edge_paths(G, source, targets, cutoff) + +def _all_simple_edge_paths(G, source, targets, cutoff): + # We simulate recursion with a stack, keeping the current path being explored + # and the outgoing edge iterators at each point in the stack. + # To avoid unnecessary checks, the loop is structured in a way such that a path + # is considered for yielding only after a new node/edge is added. + # We bootstrap the search by adding a dummy iterator to the stack that only yields + # a dummy edge to source (so that the trivial path has a chance of being included). -def _all_simple_edge_paths_multigraph(G, source, targets, cutoff): - if not cutoff or cutoff < 1: - return [] - visited = [source] - stack = [iter(G.edges(source, keys=True))] + get_edges = ( + (lambda node: G.edges(node, keys=True)) + if G.is_multigraph() + else (lambda node: G.edges(node)) + ) + + # The current_path is a dictionary that maps nodes in the path to the edge that was + # used to enter that node (instead of a list of edges) because we want both a fast + # membership test for nodes in the path and the preservation of insertion order. + current_path = {None: None} + stack = [iter([(None, source)])] while stack: - children = stack[-1] - child = next(children, None) - if child is None: - stack.pop() - visited.pop() - elif len(visited) < cutoff: - if child[1] in targets: - yield visited[1:] + [child] - elif child[1] not in [v[0] for v in visited[1:]]: - visited.append(child) - stack.append(iter(G.edges(child[1], keys=True))) - else: # len(visited) == cutoff: - for u, v, k in [child] + list(children): - if v in targets: - yield visited[1:] + [(u, v, k)] + # 1. Try to extend the current path. + next_edge = next((e for e in stack[-1] if e[1] not in current_path), None) + if next_edge is None: + # All edges of the last node in the current path have been explored. stack.pop() - visited.pop() + current_path.popitem() + continue + previous_node, next_node, *_ = next_edge + + # 2. Check if we've reached a target. + if next_node in targets: + yield (list(current_path.values()) + [next_edge])[2:] # remove dummy edge + + # 3. Only expand the search through the next node if it makes sense. + if len(current_path) - 1 < cutoff and ( + targets - current_path.keys() - {next_node} + ): + current_path[next_node] = next_edge + stack.append(iter(get_edges(next_node))) @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def shortest_simple_paths(G, source, target, weight=None): """Generate all simple paths in the graph G from source to target, starting from shortest ones. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smallworld.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smallworld.py index 172c4f9a8..05ae17082 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smallworld.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smallworld.py @@ -23,7 +23,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") @py_random_state(3) -@nx._dispatch +@nx._dispatchable(returns_graph=True) def random_reference(G, niter=1, connectivity=True, seed=None): """Compute a random graph by swapping edges of a given graph. @@ -121,7 +121,7 @@ def random_reference(G, niter=1, connectivity=True, seed=None): @not_implemented_for("directed") @not_implemented_for("multigraph") @py_random_state(4) -@nx._dispatch +@nx._dispatchable(returns_graph=True) def lattice_reference(G, niter=5, D=None, connectivity=True, seed=None): """Latticize the given graph by swapping edges. @@ -245,7 +245,7 @@ def lattice_reference(G, niter=5, D=None, connectivity=True, seed=None): @not_implemented_for("directed") @not_implemented_for("multigraph") @py_random_state(3) -@nx._dispatch +@nx._dispatchable def sigma(G, niter=100, nrand=10, seed=None): """Returns the small-world coefficient (sigma) of the given graph. @@ -308,13 +308,13 @@ def sigma(G, niter=100, nrand=10, seed=None): sigma = (C / Cr) / (L / Lr) - return sigma + return float(sigma) @not_implemented_for("directed") @not_implemented_for("multigraph") @py_random_state(3) -@nx._dispatch +@nx._dispatchable def omega(G, niter=5, nrand=10, seed=None): """Returns the small-world coefficient (omega) of a graph @@ -400,4 +400,4 @@ def omega(G, niter=5, nrand=10, seed=None): omega = (Lr / L) - (C / Cl) - return omega + return float(omega) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smetric.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smetric.py index 80ae314bb..5a27014ee 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smetric.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/smetric.py @@ -3,7 +3,7 @@ __all__ = ["s_metric"] -@nx._dispatch +@nx._dispatchable def s_metric(G, **kwargs): """Returns the s-metric [1]_ of graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/sparsifiers.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/sparsifiers.py index a94aee0d0..870b7ba6f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/sparsifiers.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/sparsifiers.py @@ -10,7 +10,7 @@ @not_implemented_for("directed") @not_implemented_for("multigraph") @py_random_state(3) -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight", returns_graph=True) def spanner(G, stretch, weight=None, seed=None): """Returns a spanner of the given graph with the given stretch. @@ -136,11 +136,11 @@ def spanner(G, stretch, weight=None, seed=None): # remove edges to centers with edge weight less than # closest_center_weight for neighbor in residual_graph.adj[v]: - neighbor_cluster = clustering[neighbor] - neighbor_weight = lightest_edge_weight[neighbor_cluster] + nbr_cluster = clustering[neighbor] + nbr_weight = lightest_edge_weight[nbr_cluster] if ( - neighbor_cluster == closest_center - or neighbor_weight < closest_center_weight + nbr_cluster == closest_center + or nbr_weight < closest_center_weight ): edges_to_remove.add((v, neighbor)) @@ -257,14 +257,14 @@ def _lightest_edge_dicts(residual_graph, clustering, node): lightest_edge_neighbor = {} lightest_edge_weight = {} for neighbor in residual_graph.adj[node]: - neighbor_center = clustering[neighbor] + nbr_center = clustering[neighbor] weight = residual_graph[node][neighbor]["weight"] if ( - neighbor_center not in lightest_edge_weight - or weight < lightest_edge_weight[neighbor_center] + nbr_center not in lightest_edge_weight + or weight < lightest_edge_weight[nbr_center] ): - lightest_edge_neighbor[neighbor_center] = neighbor - lightest_edge_weight[neighbor_center] = weight + lightest_edge_neighbor[nbr_center] = neighbor + lightest_edge_weight[nbr_center] = weight return lightest_edge_neighbor, lightest_edge_weight diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/structuralholes.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/structuralholes.py index c676177b3..bae42d060 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/structuralholes.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/structuralholes.py @@ -5,7 +5,7 @@ __all__ = ["constraint", "local_constraint", "effective_size"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def mutual_weight(G, u, v, weight=None): """Returns the sum of the weights of the edge from `u` to `v` and the edge from `v` to `u` in `G`. @@ -28,7 +28,7 @@ def mutual_weight(G, u, v, weight=None): return a_uv + a_vu -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def normalized_mutual_weight(G, u, v, norm=sum, weight=None): """Returns normalized mutual weight of the edges from `u` to `v` with respect to the mutual weights of the neighbors of `u` in `G`. @@ -49,7 +49,7 @@ def normalized_mutual_weight(G, u, v, norm=sum, weight=None): return 0 if scale == 0 else mutual_weight(G, u, v, weight) / scale -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def effective_size(G, nodes=None, weight=None): r"""Returns the effective size of all nodes in the graph ``G``. @@ -162,7 +162,7 @@ def redundancy(G, u, v, weight=None): return effective_size -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def constraint(G, nodes=None, weight=None): r"""Returns the constraint on all nodes in the graph ``G``. @@ -223,13 +223,13 @@ def constraint(G, nodes=None, weight=None): return constraint -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def local_constraint(G, u, v, weight=None): r"""Returns the local constraint on the node ``u`` with respect to the node ``v`` in the graph ``G``. Formally, the *local constraint on u with respect to v*, denoted - $\ell(v)$, is defined by + $\ell(u, v)$, is defined by .. math:: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/summarization.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/summarization.py index 26665e09b..794a77ab3 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/summarization.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/summarization.py @@ -65,7 +65,7 @@ __all__ = ["dedensify", "snap_aggregation"] -@nx._dispatch +@nx._dispatchable(mutates_input={"not copy": 3}, returns_graph=True) def dedensify(G, threshold, prefix=None, copy=True): """Compresses neighborhoods around high-degree nodes @@ -180,12 +180,12 @@ def dedensify(G, threshold, prefix=None, copy=True): auxiliary = {} for node in G: - high_degree_neighbors = frozenset(high_degree_nodes & set(G[node])) - if high_degree_neighbors: - if high_degree_neighbors in auxiliary: - auxiliary[high_degree_neighbors].add(node) + high_degree_nbrs = frozenset(high_degree_nodes & set(G[node])) + if high_degree_nbrs: + if high_degree_nbrs in auxiliary: + auxiliary[high_degree_nbrs].add(node) else: - auxiliary[high_degree_neighbors] = {node} + auxiliary[high_degree_nbrs] = {node} if copy: G = G.copy() @@ -326,33 +326,33 @@ def _snap_eligible_group(G, groups, group_lookup, edge_types): ------- tuple: group ID to split, and neighbor-groups participation_counts data structure """ - neighbor_info = {node: {gid: Counter() for gid in groups} for node in group_lookup} + nbr_info = {node: {gid: Counter() for gid in groups} for node in group_lookup} for group_id in groups: current_group = groups[group_id] - # build neighbor_info for nodes in group + # build nbr_info for nodes in group for node in current_group: - neighbor_info[node] = {group_id: Counter() for group_id in groups} + nbr_info[node] = {group_id: Counter() for group_id in groups} edges = G.edges(node, keys=True) if G.is_multigraph() else G.edges(node) for edge in edges: neighbor = edge[1] edge_type = edge_types[edge] neighbor_group_id = group_lookup[neighbor] - neighbor_info[node][neighbor_group_id][edge_type] += 1 + nbr_info[node][neighbor_group_id][edge_type] += 1 # check if group_id is eligible to be split group_size = len(current_group) for other_group_id in groups: edge_counts = Counter() for node in current_group: - edge_counts.update(neighbor_info[node][other_group_id].keys()) + edge_counts.update(nbr_info[node][other_group_id].keys()) if not all(count == group_size for count in edge_counts.values()): - # only the neighbor_info of the returned group_id is required for handling group splits - return group_id, neighbor_info + # only the nbr_info of the returned group_id is required for handling group splits + return group_id, nbr_info - # if no eligible groups, complete neighbor_info is calculated - return None, neighbor_info + # if no eligible groups, complete nbr_info is calculated + return None, nbr_info def _snap_split(groups, neighbor_info, group_lookup, group_id): @@ -404,7 +404,9 @@ def _snap_split(groups, neighbor_info, group_lookup, group_id): return groups -@nx._dispatch(node_attrs="[node_attributes]", edge_attrs="[edge_attributes]") +@nx._dispatchable( + node_attrs="[node_attributes]", edge_attrs="[edge_attributes]", returns_graph=True +) def snap_aggregation( G, node_attributes, @@ -492,13 +494,13 @@ def snap_aggregation( >>> for node in nodes: ... attributes = nodes[node] ... G.add_node(node, **attributes) - ... >>> for source, target, type in edges: ... G.add_edge(source, target, type=type) - ... - >>> node_attributes = ('color', ) - >>> edge_attributes = ('type', ) - >>> summary_graph = nx.snap_aggregation(G, node_attributes=node_attributes, edge_attributes=edge_attributes) + >>> node_attributes = ("color",) + >>> edge_attributes = ("type",) + >>> summary_graph = nx.snap_aggregation( + ... G, node_attributes=node_attributes, edge_attributes=edge_attributes + ... ) Notes ----- @@ -540,12 +542,12 @@ def snap_aggregation( for node, node_type in group_lookup.items(): groups[node_type].add(node) - eligible_group_id, neighbor_info = _snap_eligible_group( + eligible_group_id, nbr_info = _snap_eligible_group( G, groups, group_lookup, edge_types ) while eligible_group_id: - groups = _snap_split(groups, neighbor_info, group_lookup, eligible_group_id) - eligible_group_id, neighbor_info = _snap_eligible_group( + groups = _snap_split(groups, nbr_info, group_lookup, eligible_group_id) + eligible_group_id, nbr_info = _snap_eligible_group( G, groups, group_lookup, edge_types ) return _snap_build_graph( @@ -553,7 +555,7 @@ def snap_aggregation( groups, node_attributes, edge_attributes, - neighbor_info, + nbr_info, edge_types, prefix, supernode_attribute, diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/swap.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/swap.py index 926be4983..c190f970b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/swap.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/swap.py @@ -11,7 +11,7 @@ @nx.utils.not_implemented_for("undirected") @py_random_state(3) -@nx._dispatch +@nx._dispatchable(mutates_input=True, returns_graph=True) def directed_edge_swap(G, *, nswap=1, max_tries=100, seed=None): """Swap three edges in a directed graph while keeping the node degrees fixed. @@ -57,6 +57,8 @@ def directed_edge_swap(G, *, nswap=1, max_tries=100, seed=None): The graph G is modified in place. + A later swap is allowed to undo a previous swap. + References ---------- .. [1] Erdős, Péter L., et al. “A Simple Havel-Hakimi Type Algorithm to Realize @@ -131,7 +133,7 @@ def directed_edge_swap(G, *, nswap=1, max_tries=100, seed=None): @py_random_state(3) -@nx._dispatch +@nx._dispatchable(mutates_input=True, returns_graph=True) def double_edge_swap(G, nswap=1, max_tries=100, seed=None): """Swap two edges in the graph while keeping the node degrees fixed. @@ -229,7 +231,7 @@ def double_edge_swap(G, nswap=1, max_tries=100, seed=None): @py_random_state(3) -@nx._dispatch +@nx._dispatchable(mutates_input=True) def connected_double_edge_swap(G, nswap=1, _window_threshold=3, seed=None): """Attempts the specified number of double-edge swaps in the graph `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/__init__.cpython-312.pyc index 543a527bc..58a9adbab 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_asteroidal.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_asteroidal.cpython-312.pyc index 91926356e..bf0658c73 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_asteroidal.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_asteroidal.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_boundary.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_boundary.cpython-312.pyc index 5b6371853..3f5b9d601 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_boundary.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_boundary.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_bridges.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_bridges.cpython-312.pyc index b8eb94180..e384667a5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_bridges.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_bridges.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_broadcasting.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_broadcasting.cpython-312.pyc new file mode 100644 index 000000000..a97bf96ac Binary files /dev/null and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_broadcasting.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chains.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chains.cpython-312.pyc index 3aed69bfe..4d20b8ed8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chains.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chains.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chordal.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chordal.cpython-312.pyc index b84f281e5..556e195c5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chordal.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_chordal.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_clique.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_clique.cpython-312.pyc index a1de70a72..ff016baae 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_clique.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_clique.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cluster.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cluster.cpython-312.pyc index 1a0b64336..49cfe8d2a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cluster.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cluster.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_communicability.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_communicability.cpython-312.pyc index c6b0983f2..de551db5d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_communicability.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_communicability.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_core.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_core.cpython-312.pyc index d259d68d3..06f77b421 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_core.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_core.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_covering.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_covering.cpython-312.pyc index a9beb9956..f6712eb35 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_covering.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_covering.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cuts.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cuts.cpython-312.pyc index b29522f75..fc0214753 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cuts.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cuts.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cycles.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cycles.cpython-312.pyc index 7218b24f5..03620b297 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cycles.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_cycles.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_d_separation.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_d_separation.cpython-312.pyc index 96c9d023b..d539ea173 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_d_separation.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_d_separation.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dag.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dag.cpython-312.pyc index 40c55723e..8871ffb37 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dag.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dag.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_measures.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_measures.cpython-312.pyc index 3a903d0cb..c4e4217e0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_measures.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_measures.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_regular.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_regular.cpython-312.pyc index 43079e486..aa7f324fc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_regular.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_distance_regular.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominance.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominance.cpython-312.pyc index 034c17c97..b7c907ec0 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominance.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominance.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominating.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominating.cpython-312.pyc index 62c179e0a..a47fcaf9e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominating.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_dominating.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_efficiency.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_efficiency.cpython-312.pyc index ca4c5bb1d..49af44061 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_efficiency.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_efficiency.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_euler.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_euler.cpython-312.pyc index a79d93e3c..bab50c9ce 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_euler.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_euler.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graph_hashing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graph_hashing.cpython-312.pyc index 7e56e3e4e..c5b6d7925 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graph_hashing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graph_hashing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graphical.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graphical.cpython-312.pyc index 187f0ea8f..9b44d0268 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graphical.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_graphical.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hierarchy.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hierarchy.cpython-312.pyc index 6fffdfa4f..c338cf9bf 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hierarchy.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hierarchy.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hybrid.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hybrid.cpython-312.pyc index f6b34a230..edd6a0896 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hybrid.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_hybrid.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_isolate.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_isolate.cpython-312.pyc index bfd410208..679929330 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_isolate.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_isolate.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_link_prediction.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_link_prediction.cpython-312.pyc index 8f320b62c..b7a75db09 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_link_prediction.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_link_prediction.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_lowest_common_ancestors.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_lowest_common_ancestors.cpython-312.pyc index 9ec394a91..c2afc4b23 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_lowest_common_ancestors.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_lowest_common_ancestors.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_matching.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_matching.cpython-312.pyc index 4731bbe29..1f1848e29 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_matching.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_matching.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_max_weight_clique.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_max_weight_clique.cpython-312.pyc index 60bc3ff99..38c91089f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_max_weight_clique.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_max_weight_clique.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_mis.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_mis.cpython-312.pyc index 1206423c3..04349dde9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_mis.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_mis.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_moral.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_moral.cpython-312.pyc index 2d8969d5e..69b91910b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_moral.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_moral.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_node_classification.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_node_classification.cpython-312.pyc index 847676f4c..4bd54ce5f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_node_classification.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_node_classification.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_non_randomness.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_non_randomness.cpython-312.pyc index 8f9ea1e7d..f8462645c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_non_randomness.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_non_randomness.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planar_drawing.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planar_drawing.cpython-312.pyc index 05a0ced26..206abe98d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planar_drawing.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planar_drawing.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planarity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planarity.cpython-312.pyc index 59656f706..5cb104b47 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planarity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_planarity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_polynomials.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_polynomials.cpython-312.pyc index dbe602d90..ce99b733f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_polynomials.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_polynomials.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_reciprocity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_reciprocity.cpython-312.pyc index 9315da014..d537fe998 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_reciprocity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_reciprocity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_regular.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_regular.cpython-312.pyc index b9a812705..00801d35b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_regular.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_regular.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_richclub.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_richclub.cpython-312.pyc index 8c08b2b65..6eebdeb21 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_richclub.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_richclub.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_similarity.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_similarity.cpython-312.pyc index 320d05dea..f3686b7dc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_similarity.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_similarity.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_simple_paths.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_simple_paths.cpython-312.pyc index 4a6c36719..f3362d606 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_simple_paths.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_simple_paths.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smallworld.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smallworld.cpython-312.pyc index c62bd28cd..9587fc00e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smallworld.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smallworld.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smetric.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smetric.cpython-312.pyc index dd9194264..e4a07d5a7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smetric.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_smetric.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_sparsifiers.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_sparsifiers.cpython-312.pyc index f9d1d21a8..29d845395 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_sparsifiers.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_sparsifiers.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_structuralholes.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_structuralholes.cpython-312.pyc index 2100f7b20..6acda3b07 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_structuralholes.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_structuralholes.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_summarization.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_summarization.cpython-312.pyc index 087e8bc33..849982619 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_summarization.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_summarization.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_swap.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_swap.cpython-312.pyc index 255b31753..3e7d4a69c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_swap.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_swap.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_threshold.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_threshold.cpython-312.pyc index 4e401ee61..b5cfc3353 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_threshold.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_threshold.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_time_dependent.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_time_dependent.cpython-312.pyc index db069cda1..69da0f1fc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_time_dependent.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_time_dependent.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_tournament.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_tournament.cpython-312.pyc index 6722ac9bf..191770061 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_tournament.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_tournament.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_triads.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_triads.cpython-312.pyc index 26fb30736..f091642d4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_triads.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_triads.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_vitality.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_vitality.cpython-312.pyc index afbb6cd84..1aedd5bea 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_vitality.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_vitality.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_voronoi.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_voronoi.cpython-312.pyc index 5f02e604f..e7708ef16 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_voronoi.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_voronoi.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_walks.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_walks.cpython-312.pyc index a92ccdb33..641763f96 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_walks.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_walks.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_wiener.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_wiener.cpython-312.pyc index 4e3cdcf5c..9ff6b1f99 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_wiener.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/__pycache__/test_wiener.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_bridges.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_bridges.py index 9c3ceba60..b47f58600 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_bridges.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_bridges.py @@ -127,7 +127,7 @@ def test_no_weight(self): inf = float("inf") expected = {(3, 4, inf), (4, 3, inf)} assert next(nx.local_bridges(self.BB)) in expected - expected = {(u, v, 3) for u, v, in self.square.edges} + expected = {(u, v, 3) for u, v in self.square.edges} assert set(nx.local_bridges(self.square)) == expected assert list(nx.local_bridges(self.tri)) == [] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_broadcasting.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_broadcasting.py new file mode 100644 index 000000000..8ce34cf2b --- /dev/null +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_broadcasting.py @@ -0,0 +1,81 @@ +"""Unit tests for the broadcasting module.""" +import math + +import networkx as nx + + +def test_example_tree_broadcast(): + """ + Test the BROADCAST algorithm on the example in the paper titled: "Information Dissemination in Trees" + """ + edge_list = [ + (0, 1), + (1, 2), + (2, 7), + (3, 4), + (5, 4), + (4, 7), + (6, 7), + (7, 9), + (8, 9), + (9, 13), + (13, 14), + (14, 15), + (14, 16), + (14, 17), + (13, 11), + (11, 10), + (11, 12), + (13, 18), + (18, 19), + (18, 20), + ] + G = nx.Graph(edge_list) + b_T, b_C = nx.tree_broadcast_center(G) + assert b_T == 6 + assert b_C == {13, 9} + # test broadcast time from specific vertex + assert nx.tree_broadcast_time(G, 17) == 8 + assert nx.tree_broadcast_time(G, 3) == 9 + # test broadcast time of entire tree + assert nx.tree_broadcast_time(G) == 10 + + +def test_path_broadcast(): + for i in range(2, 12): + G = nx.path_graph(i) + b_T, b_C = nx.tree_broadcast_center(G) + assert b_T == math.ceil(i / 2) + assert b_C == { + math.ceil(i / 2), + math.floor(i / 2), + math.ceil(i / 2 - 1), + math.floor(i / 2 - 1), + } + assert nx.tree_broadcast_time(G) == i - 1 + + +def test_empty_graph_broadcast(): + H = nx.empty_graph(1) + b_T, b_C = nx.tree_broadcast_center(H) + assert b_T == 0 + assert b_C == {0} + assert nx.tree_broadcast_time(H) == 0 + + +def test_star_broadcast(): + for i in range(4, 12): + G = nx.star_graph(i) + b_T, b_C = nx.tree_broadcast_center(G) + assert b_T == i + assert b_C == set(G.nodes()) + assert nx.tree_broadcast_time(G) == b_T + + +def test_binomial_tree_broadcast(): + for i in range(2, 8): + G = nx.binomial_tree(i) + b_T, b_C = nx.tree_broadcast_center(G) + assert b_T == i + assert b_C == {0, 2 ** (i - 1)} + assert nx.tree_broadcast_time(G) == 2 * i - 1 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cluster.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cluster.py index d69f036ff..b656ba815 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cluster.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cluster.py @@ -457,6 +457,12 @@ def test_peng_square_clustering(self): G = nx.Graph([(1, 2), (1, 3), (2, 4), (3, 4), (3, 5), (3, 6)]) assert nx.square_clustering(G, [1])[1] == 1 / 3 + def test_self_loops_square_clustering(self): + G = nx.path_graph(5) + assert nx.square_clustering(G) == {0: 0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0} + G.add_edges_from([(0, 0), (1, 1), (2, 2)]) + assert nx.square_clustering(G) == {0: 1, 1: 0.5, 2: 0.2, 3: 0.0, 4: 0} + class TestAverageClustering: @classmethod diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_core.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_core.py index 535af31b6..726e98a70 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_core.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_core.py @@ -69,10 +69,21 @@ def test_core_number2(self): assert nodes_equal(nodes_by_core[1], [1, 3]) assert nodes_equal(nodes_by_core[2], [2, 4, 5, 6]) + def test_core_number_multigraph(self): + G = nx.complete_graph(3) + G = nx.MultiGraph(G) + G.add_edge(1, 2) + with pytest.raises( + nx.NetworkXNotImplemented, match="not implemented for multigraph type" + ): + nx.core_number(G) + def test_core_number_self_loop(self): G = nx.cycle_graph(3) G.add_edge(0, 0) - with pytest.raises(nx.NetworkXError, match="Input graph has self loops"): + with pytest.raises( + nx.NetworkXNotImplemented, match="Input graph has self loops" + ): nx.core_number(G) def test_directed_core_number(self): @@ -102,6 +113,12 @@ def test_k_core(self): k_core_subgraph = nx.k_core(self.H, k=2) assert sorted(k_core_subgraph.nodes()) == [2, 4, 5, 6] + def test_k_core_multigraph(self): + core_number = nx.core_number(self.H) + H = nx.MultiGraph(self.H) + with pytest.deprecated_call(): + nx.k_core(H, k=0, core_number=core_number) + def test_main_crust(self): main_crust_subgraph = nx.k_crust(self.H) assert sorted(main_crust_subgraph.nodes()) == [0, 1, 3] @@ -117,6 +134,12 @@ def test_k_crust(self): k_crust_subgraph = nx.k_crust(self.H, k=0) assert sorted(k_crust_subgraph.nodes()) == [0] + def test_k_crust_multigraph(self): + core_number = nx.core_number(self.H) + H = nx.MultiGraph(self.H) + with pytest.deprecated_call(): + nx.k_crust(H, k=0, core_number=core_number) + def test_main_shell(self): main_shell_subgraph = nx.k_shell(self.H) assert sorted(main_shell_subgraph.nodes()) == [2, 4, 5, 6] @@ -132,6 +155,12 @@ def test_k_shell(self): k_shell_subgraph = nx.k_shell(self.H, k=0) assert sorted(k_shell_subgraph.nodes()) == [0] + def test_k_shell_multigraph(self): + core_number = nx.core_number(self.H) + H = nx.MultiGraph(self.H) + with pytest.deprecated_call(): + nx.k_shell(H, k=0, core_number=core_number) + def test_k_corona(self): # k=0 k_corona_subgraph = nx.k_corona(self.H, k=2) @@ -143,6 +172,12 @@ def test_k_corona(self): k_corona_subgraph = nx.k_corona(self.H, k=0) assert sorted(k_corona_subgraph.nodes()) == [0] + def test_k_corona_multigraph(self): + core_number = nx.core_number(self.H) + H = nx.MultiGraph(self.H) + with pytest.deprecated_call(): + nx.k_corona(H, k=0, core_number=core_number) + def test_k_truss(self): # k=-1 k_truss_subgraph = nx.k_truss(self.G, -1) @@ -166,6 +201,32 @@ def test_k_truss(self): k_truss_subgraph = nx.k_truss(self.G, 5) assert sorted(k_truss_subgraph.nodes()) == [] + def test_k_truss_digraph(self): + G = nx.complete_graph(3) + G = nx.DiGraph(G) + G.add_edge(2, 1) + with pytest.raises( + nx.NetworkXNotImplemented, match="not implemented for directed type" + ): + nx.k_truss(G, k=1) + + def test_k_truss_multigraph(self): + G = nx.complete_graph(3) + G = nx.MultiGraph(G) + G.add_edge(1, 2) + with pytest.raises( + nx.NetworkXNotImplemented, match="not implemented for multigraph type" + ): + nx.k_truss(G, k=1) + + def test_k_truss_self_loop(self): + G = nx.cycle_graph(3) + G.add_edge(0, 0) + with pytest.raises( + nx.NetworkXNotImplemented, match="Input graph has self loops" + ): + nx.k_truss(G, k=1) + def test_onion_layers(self): layers = nx.onion_layers(self.G) nodes_by_layer = [ @@ -178,8 +239,28 @@ def test_onion_layers(self): assert nodes_equal(nodes_by_layer[4], [1, 2, 4, 5, 6, 8]) assert nodes_equal(nodes_by_layer[5], [3, 7]) + def test_onion_digraph(self): + G = nx.complete_graph(3) + G = nx.DiGraph(G) + G.add_edge(2, 1) + with pytest.raises( + nx.NetworkXNotImplemented, match="not implemented for directed type" + ): + nx.onion_layers(G) + + def test_onion_multigraph(self): + G = nx.complete_graph(3) + G = nx.MultiGraph(G) + G.add_edge(1, 2) + with pytest.raises( + nx.NetworkXNotImplemented, match="not implemented for multigraph type" + ): + nx.onion_layers(G) + def test_onion_self_loop(self): G = nx.cycle_graph(3) G.add_edge(0, 0) - with pytest.raises(nx.NetworkXError, match="Input graph contains self loops"): + with pytest.raises( + nx.NetworkXNotImplemented, match="Input graph contains self loops" + ): nx.onion_layers(G) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cycles.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cycles.py index 230f51351..402948bac 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cycles.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_cycles.py @@ -11,10 +11,9 @@ def check_independent(basis): if len(basis) == 0: return - try: - import numpy as np - except ImportError: - return + + np = pytest.importorskip("numpy") + sp = pytest.importorskip("scipy") # Required by incidence_matrix H = nx.Graph() for b in basis: @@ -97,6 +96,10 @@ def test_simple_cycles(self): for c in cc: assert any(self.is_cyclic_permutation(c, rc) for rc in ca) + def test_simple_cycles_singleton(self): + G = nx.Graph([(0, 0)]) # self-loop + assert list(nx.simple_cycles(G)) == [[0]] + def test_unsortable(self): # this test ensures that graphs whose nodes without an intrinsic # ordering do not cause issues diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_d_separation.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_d_separation.py index a94d4dd4c..6f6297130 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_d_separation.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_d_separation.py @@ -81,6 +81,41 @@ def asia_graph_fixture(): return asia_graph() +@pytest.fixture() +def large_collider_graph(): + edge_list = [("A", "B"), ("C", "B"), ("B", "D"), ("D", "E"), ("B", "F"), ("G", "E")] + G = nx.DiGraph(edge_list) + return G + + +@pytest.fixture() +def chain_and_fork_graph(): + edge_list = [("A", "B"), ("B", "C"), ("B", "D"), ("D", "C")] + G = nx.DiGraph(edge_list) + return G + + +@pytest.fixture() +def no_separating_set_graph(): + edge_list = [("A", "B")] + G = nx.DiGraph(edge_list) + return G + + +@pytest.fixture() +def large_no_separating_set_graph(): + edge_list = [("A", "B"), ("C", "A"), ("C", "B")] + G = nx.DiGraph(edge_list) + return G + + +@pytest.fixture() +def collider_trek_graph(): + edge_list = [("A", "B"), ("C", "B"), ("C", "D")] + G = nx.DiGraph(edge_list) + return G + + @pytest.mark.parametrize( "graph", [path_graph(), fork_graph(), collider_graph(), naive_bayes_graph(), asia_graph()], @@ -90,40 +125,40 @@ def test_markov_condition(graph): for node in graph.nodes: parents = set(graph.predecessors(node)) non_descendants = graph.nodes - nx.descendants(graph, node) - {node} - parents - assert nx.d_separated(graph, {node}, non_descendants, parents) + assert nx.is_d_separator(graph, {node}, non_descendants, parents) def test_path_graph_dsep(path_graph): """Example-based test of d-separation for path_graph.""" - assert nx.d_separated(path_graph, {0}, {2}, {1}) - assert not nx.d_separated(path_graph, {0}, {2}, {}) + assert nx.is_d_separator(path_graph, {0}, {2}, {1}) + assert not nx.is_d_separator(path_graph, {0}, {2}, set()) def test_fork_graph_dsep(fork_graph): """Example-based test of d-separation for fork_graph.""" - assert nx.d_separated(fork_graph, {1}, {2}, {0}) - assert not nx.d_separated(fork_graph, {1}, {2}, {}) + assert nx.is_d_separator(fork_graph, {1}, {2}, {0}) + assert not nx.is_d_separator(fork_graph, {1}, {2}, set()) def test_collider_graph_dsep(collider_graph): """Example-based test of d-separation for collider_graph.""" - assert nx.d_separated(collider_graph, {0}, {1}, {}) - assert not nx.d_separated(collider_graph, {0}, {1}, {2}) + assert nx.is_d_separator(collider_graph, {0}, {1}, set()) + assert not nx.is_d_separator(collider_graph, {0}, {1}, {2}) def test_naive_bayes_dsep(naive_bayes_graph): """Example-based test of d-separation for naive_bayes_graph.""" for u, v in combinations(range(1, 5), 2): - assert nx.d_separated(naive_bayes_graph, {u}, {v}, {0}) - assert not nx.d_separated(naive_bayes_graph, {u}, {v}, {}) + assert nx.is_d_separator(naive_bayes_graph, {u}, {v}, {0}) + assert not nx.is_d_separator(naive_bayes_graph, {u}, {v}, set()) def test_asia_graph_dsep(asia_graph): """Example-based test of d-separation for asia_graph.""" - assert nx.d_separated( + assert nx.is_d_separator( asia_graph, {"asia", "smoking"}, {"dyspnea", "xray"}, {"bronchitis", "either"} ) - assert nx.d_separated( + assert nx.is_d_separator( asia_graph, {"tuberculosis", "cancer"}, {"bronchitis"}, {"smoking", "xray"} ) @@ -137,11 +172,11 @@ def test_undirected_graphs_are_not_supported(): """ g = nx.path_graph(3, nx.Graph) with pytest.raises(nx.NetworkXNotImplemented): - nx.d_separated(g, {0}, {1}, {2}) + nx.is_d_separator(g, {0}, {1}, {2}) with pytest.raises(nx.NetworkXNotImplemented): nx.is_minimal_d_separator(g, {0}, {1}, {2}) with pytest.raises(nx.NetworkXNotImplemented): - nx.minimal_d_separator(g, {0}, {1}) + nx.find_minimal_d_separator(g, {0}, {1}) def test_cyclic_graphs_raise_error(): @@ -152,60 +187,128 @@ def test_cyclic_graphs_raise_error(): """ g = nx.cycle_graph(3, nx.DiGraph) with pytest.raises(nx.NetworkXError): - nx.d_separated(g, {0}, {1}, {2}) + nx.is_d_separator(g, {0}, {1}, {2}) with pytest.raises(nx.NetworkXError): - nx.minimal_d_separator(g, 0, 1) + nx.find_minimal_d_separator(g, {0}, {1}) with pytest.raises(nx.NetworkXError): - nx.is_minimal_d_separator(g, 0, 1, {2}) + nx.is_minimal_d_separator(g, {0}, {1}, {2}) def test_invalid_nodes_raise_error(asia_graph): """ Test that graphs that have invalid nodes passed in raise errors. """ + # Check both set and node arguments + with pytest.raises(nx.NodeNotFound): + nx.is_d_separator(asia_graph, {0}, {1}, {2}) + with pytest.raises(nx.NodeNotFound): + nx.is_d_separator(asia_graph, 0, 1, 2) + with pytest.raises(nx.NodeNotFound): + nx.is_minimal_d_separator(asia_graph, {0}, {1}, {2}) with pytest.raises(nx.NodeNotFound): - nx.d_separated(asia_graph, {0}, {1}, {2}) + nx.is_minimal_d_separator(asia_graph, 0, 1, 2) with pytest.raises(nx.NodeNotFound): - nx.is_minimal_d_separator(asia_graph, 0, 1, {2}) + nx.find_minimal_d_separator(asia_graph, {0}, {1}) with pytest.raises(nx.NodeNotFound): - nx.minimal_d_separator(asia_graph, 0, 1) + nx.find_minimal_d_separator(asia_graph, 0, 1) -def test_minimal_d_separator(): +def test_nondisjoint_node_sets_raise_error(collider_graph): + """ + Test that error is raised when node sets aren't disjoint. + """ + with pytest.raises(nx.NetworkXError): + nx.is_d_separator(collider_graph, 0, 1, 0) + with pytest.raises(nx.NetworkXError): + nx.is_d_separator(collider_graph, 0, 2, 0) + with pytest.raises(nx.NetworkXError): + nx.is_d_separator(collider_graph, 0, 0, 1) + with pytest.raises(nx.NetworkXError): + nx.is_d_separator(collider_graph, 1, 0, 0) + with pytest.raises(nx.NetworkXError): + nx.find_minimal_d_separator(collider_graph, 0, 0) + with pytest.raises(nx.NetworkXError): + nx.find_minimal_d_separator(collider_graph, 0, 1, included=0) + with pytest.raises(nx.NetworkXError): + nx.find_minimal_d_separator(collider_graph, 1, 0, included=0) + with pytest.raises(nx.NetworkXError): + nx.is_minimal_d_separator(collider_graph, 0, 0, set()) + with pytest.raises(nx.NetworkXError): + nx.is_minimal_d_separator(collider_graph, 0, 1, set(), included=0) + with pytest.raises(nx.NetworkXError): + nx.is_minimal_d_separator(collider_graph, 1, 0, set(), included=0) + + +def test_is_minimal_d_separator( + large_collider_graph, + chain_and_fork_graph, + no_separating_set_graph, + large_no_separating_set_graph, + collider_trek_graph, +): # Case 1: # create a graph A -> B <- C # B -> D -> E; # B -> F; # G -> E; - edge_list = [("A", "B"), ("C", "B"), ("B", "D"), ("D", "E"), ("B", "F"), ("G", "E")] - G = nx.DiGraph(edge_list) - assert not nx.d_separated(G, {"B"}, {"E"}, set()) + assert not nx.is_d_separator(large_collider_graph, {"B"}, {"E"}, set()) # minimal set of the corresponding graph # for B and E should be (D,) - Zmin = nx.minimal_d_separator(G, "B", "E") - - # the minimal separating set should pass the test for minimality - assert nx.is_minimal_d_separator(G, "B", "E", Zmin) + Zmin = nx.find_minimal_d_separator(large_collider_graph, "B", "E") + # check that the minimal d-separator is a d-separating set + assert nx.is_d_separator(large_collider_graph, "B", "E", Zmin) + # the minimal separating set should also pass the test for minimality + assert nx.is_minimal_d_separator(large_collider_graph, "B", "E", Zmin) + # function should also work with set arguments + assert nx.is_minimal_d_separator(large_collider_graph, {"A", "B"}, {"G", "E"}, Zmin) assert Zmin == {"D"} # Case 2: # create a graph A -> B -> C # B -> D -> C; - edge_list = [("A", "B"), ("B", "C"), ("B", "D"), ("D", "C")] - G = nx.DiGraph(edge_list) - assert not nx.d_separated(G, {"A"}, {"C"}, set()) - Zmin = nx.minimal_d_separator(G, "A", "C") + assert not nx.is_d_separator(chain_and_fork_graph, {"A"}, {"C"}, set()) + Zmin = nx.find_minimal_d_separator(chain_and_fork_graph, "A", "C") # the minimal separating set should pass the test for minimality - assert nx.is_minimal_d_separator(G, "A", "C", Zmin) + assert nx.is_minimal_d_separator(chain_and_fork_graph, "A", "C", Zmin) assert Zmin == {"B"} - Znotmin = Zmin.union({"D"}) - assert not nx.is_minimal_d_separator(G, "A", "C", Znotmin) + assert not nx.is_minimal_d_separator(chain_and_fork_graph, "A", "C", Znotmin) + + # Case 3: + # create a graph A -> B + + # there is no m-separating set between A and B at all, so + # no minimal m-separating set can exist + assert not nx.is_d_separator(no_separating_set_graph, {"A"}, {"B"}, set()) + assert nx.find_minimal_d_separator(no_separating_set_graph, "A", "B") is None + + # Case 4: + # create a graph A -> B with A <- C -> B + + # there is no m-separating set between A and B at all, so + # no minimal m-separating set can exist + # however, the algorithm will initially propose C as a + # minimal (but invalid) separating set + assert not nx.is_d_separator(large_no_separating_set_graph, {"A"}, {"B"}, {"C"}) + assert nx.find_minimal_d_separator(large_no_separating_set_graph, "A", "B") is None + + # Test `included` and `excluded` args + # create graph A -> B <- C -> D + assert nx.find_minimal_d_separator(collider_trek_graph, "A", "D", included="B") == { + "B", + "C", + } + assert ( + nx.find_minimal_d_separator( + collider_trek_graph, "A", "D", included="B", restricted="B" + ) + is None + ) -def test_minimal_d_separator_checks_dsep(): +def test_is_minimal_d_separator_checks_dsep(): """Test that is_minimal_d_separator checks for d-separation as well.""" g = nx.DiGraph() g.add_edges_from( @@ -221,8 +324,25 @@ def test_minimal_d_separator_checks_dsep(): ] ) - assert not nx.d_separated(g, {"C"}, {"F"}, {"D"}) + assert not nx.is_d_separator(g, {"C"}, {"F"}, {"D"}) # since {'D'} and {} are not d-separators, we return false assert not nx.is_minimal_d_separator(g, "C", "F", {"D"}) - assert not nx.is_minimal_d_separator(g, "C", "F", {}) + assert not nx.is_minimal_d_separator(g, "C", "F", set()) + + +def test__reachable(large_collider_graph): + reachable = nx.algorithms.d_separation._reachable + g = large_collider_graph + x = {"F", "D"} + ancestors = {"A", "B", "C", "D", "F"} + assert reachable(g, x, ancestors, {"B"}) == {"B", "F", "D"} + assert reachable(g, x, ancestors, set()) == ancestors + + +def test_deprecations(): + G = nx.DiGraph([(0, 1), (1, 2)]) + with pytest.deprecated_call(): + nx.d_separated(G, 0, 2, {1}) + with pytest.deprecated_call(): + z = nx.minimal_d_separator(G, 0, 2) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_dag.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_dag.py index 540c0c55e..d26c9fd3b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_dag.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_dag.py @@ -618,11 +618,17 @@ def test_is_aperiodic_selfloop(): assert nx.is_aperiodic(G) -def test_is_aperiodic_raise(): +def test_is_aperiodic_undirected_raises(): G = nx.Graph() pytest.raises(nx.NetworkXError, nx.is_aperiodic, G) +def test_is_aperiodic_empty_graph(): + G = nx.empty_graph(create_using=nx.DiGraph) + with pytest.raises(nx.NetworkXPointlessConcept, match="Graph has no nodes."): + nx.is_aperiodic(G) + + def test_is_aperiodic_bipartite(): # Bipartite graph G = nx.DiGraph(nx.davis_southern_women_graph()) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_measures.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_measures.py index d4b5cf2f1..97c3547f9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_measures.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_measures.py @@ -324,6 +324,7 @@ class TestResistanceDistance: def setup_class(cls): global np np = pytest.importorskip("numpy") + sp = pytest.importorskip("scipy") def setup_method(self): G = nx.Graph() @@ -423,6 +424,92 @@ def test_resistance_distance_all(self): assert round(rd[1][3], 5) == 1 +class TestEffectiveGraphResistance: + @classmethod + def setup_class(cls): + global np + np = pytest.importorskip("numpy") + sp = pytest.importorskip("scipy") + + def setup_method(self): + G = nx.Graph() + G.add_edge(1, 2, weight=2) + G.add_edge(1, 3, weight=1) + G.add_edge(2, 3, weight=4) + self.G = G + + def test_effective_graph_resistance_directed_graph(self): + G = nx.DiGraph() + with pytest.raises(nx.NetworkXNotImplemented): + nx.effective_graph_resistance(G) + + def test_effective_graph_resistance_empty(self): + G = nx.Graph() + with pytest.raises(nx.NetworkXError): + nx.effective_graph_resistance(G) + + def test_effective_graph_resistance_not_connected(self): + G = nx.Graph([(1, 2), (3, 4)]) + RG = nx.effective_graph_resistance(G) + assert np.isinf(RG) + + def test_effective_graph_resistance(self): + RG = nx.effective_graph_resistance(self.G, "weight", True) + rd12 = 1 / (1 / (1 + 4) + 1 / 2) + rd13 = 1 / (1 / (1 + 2) + 1 / 4) + rd23 = 1 / (1 / (2 + 4) + 1 / 1) + assert np.isclose(RG, rd12 + rd13 + rd23) + + def test_effective_graph_resistance_noinv(self): + RG = nx.effective_graph_resistance(self.G, "weight", False) + rd12 = 1 / (1 / (1 / 1 + 1 / 4) + 1 / (1 / 2)) + rd13 = 1 / (1 / (1 / 1 + 1 / 2) + 1 / (1 / 4)) + rd23 = 1 / (1 / (1 / 2 + 1 / 4) + 1 / (1 / 1)) + assert np.isclose(RG, rd12 + rd13 + rd23) + + def test_effective_graph_resistance_no_weight(self): + RG = nx.effective_graph_resistance(self.G) + assert np.isclose(RG, 2) + + def test_effective_graph_resistance_neg_weight(self): + self.G[2][3]["weight"] = -4 + RG = nx.effective_graph_resistance(self.G, "weight", True) + rd12 = 1 / (1 / (1 + -4) + 1 / 2) + rd13 = 1 / (1 / (1 + 2) + 1 / (-4)) + rd23 = 1 / (1 / (2 + -4) + 1 / 1) + assert np.isclose(RG, rd12 + rd13 + rd23) + + def test_effective_graph_resistance_multigraph(self): + G = nx.MultiGraph() + G.add_edge(1, 2, weight=2) + G.add_edge(1, 3, weight=1) + G.add_edge(2, 3, weight=1) + G.add_edge(2, 3, weight=3) + RG = nx.effective_graph_resistance(G, "weight", True) + edge23 = 1 / (1 / 1 + 1 / 3) + rd12 = 1 / (1 / (1 + edge23) + 1 / 2) + rd13 = 1 / (1 / (1 + 2) + 1 / edge23) + rd23 = 1 / (1 / (2 + edge23) + 1 / 1) + assert np.isclose(RG, rd12 + rd13 + rd23) + + def test_effective_graph_resistance_div0(self): + with pytest.raises(ZeroDivisionError): + self.G[1][2]["weight"] = 0 + nx.effective_graph_resistance(self.G, "weight") + + def test_effective_graph_resistance_complete_graph(self): + N = 10 + G = nx.complete_graph(N) + RG = nx.effective_graph_resistance(G) + assert np.isclose(RG, N - 1) + + def test_effective_graph_resistance_path_graph(self): + N = 10 + G = nx.path_graph(N) + RG = nx.effective_graph_resistance(G) + assert np.isclose(RG, (N - 1) * N * (N + 1) // 6) + + class TestBarycenter: """Test :func:`networkx.algorithms.distance_measures.barycenter`.""" @@ -515,6 +602,7 @@ class TestKemenyConstant: def setup_class(cls): global np np = pytest.importorskip("numpy") + sp = pytest.importorskip("scipy") def setup_method(self): G = nx.Graph() diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_regular.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_regular.py index d336b1882..545fb6dee 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_regular.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_distance_regular.py @@ -1,7 +1,19 @@ +import pytest + import networkx as nx from networkx import is_strongly_regular +@pytest.mark.parametrize( + "f", (nx.is_distance_regular, nx.intersection_array, nx.is_strongly_regular) +) +@pytest.mark.parametrize("graph_constructor", (nx.DiGraph, nx.MultiGraph)) +def test_raises_on_directed_and_multigraphs(f, graph_constructor): + G = graph_constructor([(0, 1), (1, 2)]) + with pytest.raises(nx.NetworkXNotImplemented): + f(G) + + class TestDistanceRegular: def test_is_distance_regular(self): assert nx.is_distance_regular(nx.icosahedral_graph()) @@ -41,6 +53,13 @@ def test_intersection_array(self): assert c == [1, 2, 5] +@pytest.mark.parametrize("f", (nx.is_distance_regular, nx.is_strongly_regular)) +def test_empty_graph_raises(f): + G = nx.Graph() + with pytest.raises(nx.NetworkXPointlessConcept, match="Graph has no nodes"): + f(G) + + class TestStronglyRegular: """Unit tests for the :func:`~networkx.is_strongly_regular` function. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_euler.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_euler.py index 08eaf7fcc..b5871f09b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_euler.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_euler.py @@ -5,6 +5,13 @@ import networkx as nx +@pytest.mark.parametrize("f", (nx.is_eulerian, nx.is_semieulerian)) +def test_empty_graph_raises(f): + G = nx.Graph() + with pytest.raises(nx.NetworkXPointlessConcept, match="Connectivity is undefined"): + f(G) + + class TestIsEulerian: def test_is_eulerian(self): assert nx.is_eulerian(nx.complete_graph(5)) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_graph_hashing.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_graph_hashing.py index cffa8bb22..0828069d1 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_graph_hashing.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_graph_hashing.py @@ -655,3 +655,32 @@ def test_digest_size_subgraph_hash(): assert hexdigest_sizes_correct(digest_size16_hashes, 16) assert hexdigest_sizes_correct(digest_size32_hashes, 32) + + +def test_initial_node_labels_subgraph_hash(): + """ + Including the hashed initial label prepends an extra hash to the lists + """ + G = nx.path_graph(5) + nx.set_node_attributes(G, {i: int(0 < i < 4) for i in G}, "label") + # initial node labels: + # 0--1--1--1--0 + + without_initial_label = nx.weisfeiler_lehman_subgraph_hashes(G, node_attr="label") + assert all(len(v) == 3 for v in without_initial_label.values()) + # 3 different 1 hop nhds + assert len({v[0] for v in without_initial_label.values()}) == 3 + + with_initial_label = nx.weisfeiler_lehman_subgraph_hashes( + G, node_attr="label", include_initial_labels=True + ) + assert all(len(v) == 4 for v in with_initial_label.values()) + # 2 different initial labels + assert len({v[0] for v in with_initial_label.values()}) == 2 + + # check hashes match otherwise + for u in G: + for a, b in zip( + with_initial_label[u][1:], without_initial_label[u], strict=True + ): + assert a == b diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_link_prediction.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_link_prediction.py index 7fc04d206..0878496bc 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_link_prediction.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_link_prediction.py @@ -34,23 +34,17 @@ def test_S4(self): G = nx.star_graph(4) self.test(G, [(1, 2)], [(1, 2, 0.25)]) - def test_notimplemented(self): - assert pytest.raises( - nx.NetworkXNotImplemented, self.func, nx.DiGraph([(0, 1), (1, 2)]), [(0, 2)] - ) - assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiGraph([(0, 1), (1, 2)]), - [(0, 2)], - ) + @pytest.mark.parametrize("graph_type", (nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph)) + def test_notimplemented(self, graph_type): assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiDiGraph([(0, 1), (1, 2)]), - [(0, 2)], + nx.NetworkXNotImplemented, self.func, graph_type([(0, 1), (1, 2)]), [(0, 2)] ) + def test_node_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_no_common_neighbor(self): G = nx.Graph() G.add_nodes_from([0, 1]) @@ -80,23 +74,17 @@ def test_P4(self): G = nx.path_graph(4) self.test(G, [(0, 2)], [(0, 2, 0.5)]) - def test_notimplemented(self): - assert pytest.raises( - nx.NetworkXNotImplemented, self.func, nx.DiGraph([(0, 1), (1, 2)]), [(0, 2)] - ) - assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiGraph([(0, 1), (1, 2)]), - [(0, 2)], - ) + @pytest.mark.parametrize("graph_type", (nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph)) + def test_notimplemented(self, graph_type): assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiDiGraph([(0, 1), (1, 2)]), - [(0, 2)], + nx.NetworkXNotImplemented, self.func, graph_type([(0, 1), (1, 2)]), [(0, 2)] ) + def test_node_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_no_common_neighbor(self): G = nx.Graph() G.add_edges_from([(0, 1), (2, 3)]) @@ -131,23 +119,17 @@ def test_S4(self): G = nx.star_graph(4) self.test(G, [(1, 2)], [(1, 2, 1 / math.log(4))]) - def test_notimplemented(self): - assert pytest.raises( - nx.NetworkXNotImplemented, self.func, nx.DiGraph([(0, 1), (1, 2)]), [(0, 2)] - ) - assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiGraph([(0, 1), (1, 2)]), - [(0, 2)], - ) + @pytest.mark.parametrize("graph_type", (nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph)) + def test_notimplemented(self, graph_type): assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiDiGraph([(0, 1), (1, 2)]), - [(0, 2)], + nx.NetworkXNotImplemented, self.func, graph_type([(0, 1), (1, 2)]), [(0, 2)] ) + def test_node_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_no_common_neighbor(self): G = nx.Graph() G.add_nodes_from([0, 1]) @@ -190,6 +172,16 @@ def test_notimplemented(self, graph_type): nx.NetworkXNotImplemented, self.func, graph_type([(0, 1), (1, 2)]), [(0, 2)] ) + def test_node_u_not_found(self): + G = nx.Graph() + G.add_edges_from([(1, 3), (2, 3)]) + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 1)]) + + def test_node_v_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_no_common_neighbor(self): G = nx.Graph() G.add_nodes_from([0, 1]) @@ -199,6 +191,12 @@ def test_equal_nodes(self): G = nx.complete_graph(4) assert pytest.raises(nx.NetworkXAlgorithmError, self.test, G, [(0, 0)], []) + def test_equal_nodes_with_alpha_one_raises_error(self): + G = nx.complete_graph(4) + assert pytest.raises( + nx.NetworkXAlgorithmError, self.test, G, [(0, 0)], [], alpha=1.0 + ) + def test_all_nonexistent_edges(self): G = nx.Graph() G.add_edges_from([(0, 1), (0, 2), (2, 3)]) @@ -223,23 +221,17 @@ def test_S4(self): G = nx.star_graph(4) self.test(G, [(0, 2)], [(0, 2, 4)]) - def test_notimplemented(self): - assert pytest.raises( - nx.NetworkXNotImplemented, self.func, nx.DiGraph([(0, 1), (1, 2)]), [(0, 2)] - ) - assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiGraph([(0, 1), (1, 2)]), - [(0, 2)], - ) + @pytest.mark.parametrize("graph_type", (nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph)) + def test_notimplemented(self, graph_type): assert pytest.raises( - nx.NetworkXNotImplemented, - self.func, - nx.MultiDiGraph([(0, 1), (1, 2)]), - [(0, 2)], + nx.NetworkXNotImplemented, self.func, graph_type([(0, 1), (1, 2)]), [(0, 2)] ) + def test_node_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_zero_degrees(self): G = nx.Graph() G.add_nodes_from([0, 1]) @@ -282,17 +274,21 @@ def test_S4(self): G.nodes[4]["community"] = 0 self.test(G, [(1, 2)], [(1, 2, 2)]) - def test_notimplemented(self): - G = nx.DiGraph([(0, 1), (1, 2)]) - G.add_nodes_from([0, 1, 2], community=0) - assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) - G = nx.MultiGraph([(0, 1), (1, 2)]) - G.add_nodes_from([0, 1, 2], community=0) - assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) - G = nx.MultiDiGraph([(0, 1), (1, 2)]) + @pytest.mark.parametrize("graph_type", (nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph)) + def test_notimplemented(self, graph_type): + G = graph_type([(0, 1), (1, 2)]) G.add_nodes_from([0, 1, 2], community=0) assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) + def test_node_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + G.nodes[0]["community"] = 0 + G.nodes[1]["community"] = 1 + G.nodes[2]["community"] = 0 + G.nodes[3]["community"] = 0 + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_no_common_neighbor(self): G = nx.Graph() G.add_nodes_from([0, 1]) @@ -387,17 +383,21 @@ def test_S4(self): G.nodes[4]["community"] = 0 self.test(G, [(1, 2)], [(1, 2, 0.25)]) - def test_notimplemented(self): - G = nx.DiGraph([(0, 1), (1, 2)]) - G.add_nodes_from([0, 1, 2], community=0) - assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) - G = nx.MultiGraph([(0, 1), (1, 2)]) - G.add_nodes_from([0, 1, 2], community=0) - assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) - G = nx.MultiDiGraph([(0, 1), (1, 2)]) + @pytest.mark.parametrize("graph_type", (nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph)) + def test_notimplemented(self, graph_type): + G = graph_type([(0, 1), (1, 2)]) G.add_nodes_from([0, 1, 2], community=0) assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) + def test_node_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + G.nodes[0]["community"] = 0 + G.nodes[1]["community"] = 1 + G.nodes[2]["community"] = 0 + G.nodes[3]["community"] = 0 + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_no_common_neighbor(self): G = nx.Graph() G.add_nodes_from([0, 1]) @@ -495,17 +495,21 @@ def test_S4(self): G.nodes[4]["community"] = 0 self.test(G, [(1, 2)], [(1, 2, 1 / self.delta)]) - def test_notimplemented(self): - G = nx.DiGraph([(0, 1), (1, 2)]) - G.add_nodes_from([0, 1, 2], community=0) - assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) - G = nx.MultiGraph([(0, 1), (1, 2)]) - G.add_nodes_from([0, 1, 2], community=0) - assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) - G = nx.MultiDiGraph([(0, 1), (1, 2)]) + @pytest.mark.parametrize("graph_type", (nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph)) + def test_notimplemented(self, graph_type): + G = graph_type([(0, 1), (1, 2)]) G.add_nodes_from([0, 1, 2], community=0) assert pytest.raises(nx.NetworkXNotImplemented, self.func, G, [(0, 2)]) + def test_node_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (2, 3)]) + G.nodes[0]["community"] = 0 + G.nodes[1]["community"] = 1 + G.nodes[2]["community"] = 0 + G.nodes[3]["community"] = 0 + assert pytest.raises(nx.NodeNotFound, self.func, G, [(0, 4)]) + def test_no_common_neighbor(self): G = nx.Graph() G.add_nodes_from([0, 1]) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_mis.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_mis.py index 379c5c07c..02be02d4c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_mis.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_mis.py @@ -58,5 +58,5 @@ def test_random_graphs(): G = nx.erdos_renyi_graph(i * 10 + 1, random.random()) IS = nx.maximal_independent_set(G) assert G.subgraph(IS).number_of_edges() == 0 - neighbors_of_MIS = set.union(*(set(G.neighbors(v)) for v in IS)) - assert all(v in neighbors_of_MIS for v in set(G.nodes()).difference(IS)) + nbrs_of_MIS = set.union(*(set(G.neighbors(v)) for v in IS)) + assert all(v in nbrs_of_MIS for v in set(G.nodes()).difference(IS)) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planar_drawing.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planar_drawing.py index c1c45ece9..a5de0e032 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planar_drawing.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planar_drawing.py @@ -121,11 +121,11 @@ def check_embedding_data(embedding_data): embedding = nx.PlanarEmbedding() embedding.set_data(embedding_data) pos_fully = nx.combinatorial_embedding_to_pos(embedding, False) - msg = "Planar drawing does not conform to the embedding (fully " "triangulation)" + msg = "Planar drawing does not conform to the embedding (fully triangulation)" assert planar_drawing_conforms_to_embedding(embedding, pos_fully), msg check_edge_intersections(embedding, pos_fully) pos_internally = nx.combinatorial_embedding_to_pos(embedding, True) - msg = "Planar drawing does not conform to the embedding (internal " "triangulation)" + msg = "Planar drawing does not conform to the embedding (internal triangulation)" assert planar_drawing_conforms_to_embedding(embedding, pos_internally), msg check_edge_intersections(embedding, pos_internally) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planarity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planarity.py index 470b1d23b..99bcff418 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planarity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_planarity.py @@ -277,6 +277,20 @@ def test_counterexample_planar_recursive(self): G.add_node(1) get_counterexample_recursive(G) + def test_edge_removal_from_planar_embedding(self): + # PlanarEmbedding.check_structure() must succeed after edge removal + edges = ((0, 1), (1, 2), (2, 3), (3, 4), (4, 0), (0, 2), (0, 3)) + G = nx.Graph(edges) + cert, P = nx.check_planarity(G) + assert cert is True + P.remove_edge(0, 2) + self.check_graph(P, is_planar=True) + P.add_half_edge_ccw(1, 3, 2) + P.add_half_edge_cw(3, 1, 2) + self.check_graph(P, is_planar=True) + P.remove_edges_from(((0, 3), (1, 3))) + self.check_graph(P, is_planar=True) + def check_embedding(G, embedding): """Raises an exception if the combinatorial embedding is not correct @@ -372,48 +386,114 @@ def check_counterexample(G, sub_graph): class TestPlanarEmbeddingClass: + def test_add_half_edge(self): + embedding = nx.PlanarEmbedding() + embedding.add_half_edge(0, 1) + with pytest.raises( + nx.NetworkXException, match="Invalid clockwise reference node." + ): + embedding.add_half_edge(0, 2, cw=3) + with pytest.raises( + nx.NetworkXException, match="Invalid counterclockwise reference node." + ): + embedding.add_half_edge(0, 2, ccw=3) + with pytest.raises( + nx.NetworkXException, match="Only one of cw/ccw can be specified." + ): + embedding.add_half_edge(0, 2, cw=1, ccw=1) + with pytest.raises( + nx.NetworkXException, + match=( + r"Node already has out-half-edge\(s\), either" + " cw or ccw reference node required." + ), + ): + embedding.add_half_edge(0, 2) + # these should work + embedding.add_half_edge(0, 2, cw=1) + embedding.add_half_edge(0, 3, ccw=1) + assert sorted(embedding.edges(data=True)) == [ + (0, 1, {"ccw": 2, "cw": 3}), + (0, 2, {"cw": 1, "ccw": 3}), + (0, 3, {"cw": 2, "ccw": 1}), + ] + def test_get_data(self): - embedding = self.get_star_embedding(3) + embedding = self.get_star_embedding(4) data = embedding.get_data() - data_cmp = {0: [2, 1], 1: [0], 2: [0]} + data_cmp = {0: [3, 2, 1], 1: [0], 2: [0], 3: [0]} assert data == data_cmp + def test_edge_removal(self): + embedding = nx.PlanarEmbedding() + embedding.set_data( + { + 1: [2, 5, 7], + 2: [1, 3, 4, 5], + 3: [2, 4], + 4: [3, 6, 5, 2], + 5: [7, 1, 2, 4], + 6: [4, 7], + 7: [6, 1, 5], + } + ) + # remove_edges_from() calls remove_edge(), so both are tested here + embedding.remove_edges_from(((5, 4), (1, 5))) + embedding.check_structure() + embedding_expected = nx.PlanarEmbedding() + embedding_expected.set_data( + { + 1: [2, 7], + 2: [1, 3, 4, 5], + 3: [2, 4], + 4: [3, 6, 2], + 5: [7, 2], + 6: [4, 7], + 7: [6, 1, 5], + } + ) + assert nx.utils.graphs_equal(embedding, embedding_expected) + def test_missing_edge_orientation(self): + embedding = nx.PlanarEmbedding({1: {2: {}}, 2: {1: {}}}) with pytest.raises(nx.NetworkXException): - embedding = nx.PlanarEmbedding() - embedding.add_edge(1, 2) - embedding.add_edge(2, 1) # Invalid structure because the orientation of the edge was not set embedding.check_structure() def test_invalid_edge_orientation(self): + embedding = nx.PlanarEmbedding( + { + 1: {2: {"cw": 2, "ccw": 2}}, + 2: {1: {"cw": 1, "ccw": 1}}, + 1: {3: {}}, + 3: {1: {}}, + } + ) with pytest.raises(nx.NetworkXException): - embedding = nx.PlanarEmbedding() - embedding.add_half_edge_first(1, 2) - embedding.add_half_edge_first(2, 1) - embedding.add_edge(1, 3) embedding.check_structure() def test_missing_half_edge(self): + embedding = nx.PlanarEmbedding() + embedding.add_half_edge(1, 2) with pytest.raises(nx.NetworkXException): - embedding = nx.PlanarEmbedding() - embedding.add_half_edge_first(1, 2) # Invalid structure because other half edge is missing embedding.check_structure() def test_not_fulfilling_euler_formula(self): + embedding = nx.PlanarEmbedding() + for i in range(5): + ref = None + for j in range(5): + if i != j: + embedding.add_half_edge(i, j, cw=ref) + ref = j with pytest.raises(nx.NetworkXException): - embedding = nx.PlanarEmbedding() - for i in range(5): - for j in range(5): - if i != j: - embedding.add_half_edge_first(i, j) embedding.check_structure() def test_missing_reference(self): - with pytest.raises(nx.NetworkXException): - embedding = nx.PlanarEmbedding() - embedding.add_half_edge_cw(1, 2, 3) + embedding = nx.PlanarEmbedding() + with pytest.raises(nx.NetworkXException, match="Invalid reference node."): + embedding.add_half_edge(1, 2, ccw=3) def test_connect_components(self): embedding = nx.PlanarEmbedding() @@ -421,22 +501,35 @@ def test_connect_components(self): def test_successful_face_traversal(self): embedding = nx.PlanarEmbedding() - embedding.add_half_edge_first(1, 2) - embedding.add_half_edge_first(2, 1) + embedding.add_half_edge(1, 2) + embedding.add_half_edge(2, 1) face = embedding.traverse_face(1, 2) assert face == [1, 2] def test_unsuccessful_face_traversal(self): + embedding = nx.PlanarEmbedding( + {1: {2: {"cw": 3, "ccw": 2}}, 2: {1: {"cw": 3, "ccw": 1}}} + ) with pytest.raises(nx.NetworkXException): - embedding = nx.PlanarEmbedding() - embedding.add_edge(1, 2, ccw=2, cw=3) - embedding.add_edge(2, 1, ccw=1, cw=3) embedding.traverse_face(1, 2) + def test_forbidden_methods(self): + embedding = nx.PlanarEmbedding() + embedding.add_node(42) # no exception + embedding.add_nodes_from([(23, 24)]) # no exception + with pytest.raises(NotImplementedError): + embedding.add_edge(1, 3) + with pytest.raises(NotImplementedError): + embedding.add_edges_from([(0, 2), (1, 4)]) + with pytest.raises(NotImplementedError): + embedding.add_weighted_edges_from([(0, 2, 350), (1, 4, 125)]) + @staticmethod def get_star_embedding(n): embedding = nx.PlanarEmbedding() + ref = None for i in range(1, n): - embedding.add_half_edge_first(0, i) - embedding.add_half_edge_first(i, 0) + embedding.add_half_edge(0, i, cw=ref) + ref = i + embedding.add_half_edge(i, 0) return embedding diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_regular.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_regular.py index 0c8e4e465..a8b4c3a30 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_regular.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_regular.py @@ -68,6 +68,12 @@ def test_is_regular4(self): assert reg.is_regular(g) +def test_is_regular_empty_graph_raises(): + G = nx.Graph() + with pytest.raises(nx.NetworkXPointlessConcept, match="Graph has no nodes"): + nx.is_regular(G) + + class TestIsKRegular: def test_is_k_regular1(self): g = gen.cycle_graph(4) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_richclub.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_richclub.py index 5638ddbf0..1bdb66847 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_richclub.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_richclub.py @@ -21,7 +21,7 @@ def test_richclub_seed(): def test_richclub_normalized(): G = nx.Graph([(0, 1), (0, 2), (1, 2), (1, 3), (1, 4), (4, 5)]) - rcNorm = nx.richclub.rich_club_coefficient(G, Q=2) + rcNorm = nx.richclub.rich_club_coefficient(G, Q=2, seed=42) assert rcNorm == {0: 1.0, 1: 1.0} @@ -91,6 +91,58 @@ def test_rich_club_selfloop(): nx.rich_club_coefficient(G) +def test_rich_club_leq_3_nodes_unnormalized(): + # edgeless graphs upto 3 nodes + G = nx.Graph() + rc = nx.rich_club_coefficient(G, normalized=False) + assert rc == {} + + for i in range(3): + G.add_node(i) + rc = nx.rich_club_coefficient(G, normalized=False) + assert rc == {} + + # 2 nodes, single edge + G = nx.Graph() + G.add_edge(0, 1) + rc = nx.rich_club_coefficient(G, normalized=False) + assert rc == {0: 1} + + # 3 nodes, single edge + G = nx.Graph() + G.add_nodes_from([0, 1, 2]) + G.add_edge(0, 1) + rc = nx.rich_club_coefficient(G, normalized=False) + assert rc == {0: 1} + + # 3 nodes, 2 edges + G.add_edge(1, 2) + rc = nx.rich_club_coefficient(G, normalized=False) + assert rc == {0: 2 / 3} + + # 3 nodes, 3 edges + G.add_edge(0, 2) + rc = nx.rich_club_coefficient(G, normalized=False) + assert rc == {0: 1, 1: 1} + + +def test_rich_club_leq_3_nodes_normalized(): + G = nx.Graph() + with pytest.raises( + nx.exception.NetworkXError, + match="Graph has fewer than four nodes", + ): + rc = nx.rich_club_coefficient(G, normalized=True) + + for i in range(3): + G.add_node(i) + with pytest.raises( + nx.exception.NetworkXError, + match="Graph has fewer than four nodes", + ): + rc = nx.rich_club_coefficient(G, normalized=True) + + # def test_richclub2_normalized(): # T = nx.balanced_tree(2,10) # rcNorm = nx.richclub.rich_club_coefficient(T,Q=2) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_similarity.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_similarity.py index b7fcf90fa..3836ccfe1 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_similarity.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_similarity.py @@ -699,6 +699,16 @@ def test_simrank_max_iterations(self, alg): G = nx.cycle_graph(5) pytest.raises(nx.ExceededMaxIterations, alg, G, max_iterations=10) + def test_simrank_source_not_found(self): + G = nx.cycle_graph(5) + with pytest.raises(nx.NodeNotFound, match="Source node 10 not in G"): + nx.simrank_similarity(G, source=10) + + def test_simrank_target_not_found(self): + G = nx.cycle_graph(5) + with pytest.raises(nx.NodeNotFound, match="Target node 10 not in G"): + nx.simrank_similarity(G, target=10) + def test_simrank_between_versions(self): G = nx.cycle_graph(5) # _python tolerance 1e-4 @@ -819,9 +829,22 @@ def test_panther_similarity_weighted(self): sim = nx.panther_similarity(G, "v1", path_length=2, weight="w") assert sim == expected - def test_generate_random_paths_unweighted(self): - np.random.seed(42) + def test_panther_similarity_source_not_found(self): + G = nx.Graph() + G.add_edges_from([(0, 1), (0, 2), (0, 3), (1, 2), (2, 4)]) + with pytest.raises(nx.NodeNotFound, match="Source node 10 not in G"): + nx.panther_similarity(G, source=10) + + def test_panther_similarity_isolated(self): + G = nx.Graph() + G.add_nodes_from(range(5)) + with pytest.raises( + nx.NetworkXUnfeasible, + match="Panther similarity is not defined for the isolated source node 1.", + ): + nx.panther_similarity(G, source=1) + def test_generate_random_paths_unweighted(self): index_map = {} num_paths = 10 path_length = 2 @@ -832,7 +855,7 @@ def test_generate_random_paths_unweighted(self): G.add_edge(1, 2) G.add_edge(2, 4) paths = nx.generate_random_paths( - G, num_paths, path_length=path_length, index_map=index_map + G, num_paths, path_length=path_length, index_map=index_map, seed=42 ) expected_paths = [ [3, 0, 3], diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_simple_paths.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_simple_paths.py index ef9506c22..d54f21a38 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_simple_paths.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_simple_paths.py @@ -140,8 +140,7 @@ def test_all_simple_paths_with_two_targets_inside_cycle_emits_two_paths(): def test_all_simple_paths_source_target(): G = nx.path_graph(4) - paths = nx.all_simple_paths(G, 1, 1) - assert list(paths) == [] + assert list(nx.all_simple_paths(G, 1, 1)) == [[1]] def test_all_simple_paths_cutoff(): @@ -181,8 +180,7 @@ def test_all_simple_paths_on_non_trivial_graph(): def test_all_simple_paths_multigraph(): G = nx.MultiGraph([(1, 2), (1, 2)]) - paths = nx.all_simple_paths(G, 1, 1) - assert list(paths) == [] + assert list(nx.all_simple_paths(G, 1, 1)) == [[1]] nx.add_path(G, [3, 1, 10, 2]) paths = list(nx.all_simple_paths(G, 1, 2)) assert len(paths) == 3 @@ -195,6 +193,10 @@ def test_all_simple_paths_multigraph_with_cutoff(): assert len(paths) == 2 assert {tuple(p) for p in paths} == {(1, 2), (1, 2)} + # See GitHub issue #6732. + G = nx.MultiGraph([(0, 1), (0, 2)]) + assert list(nx.all_simple_paths(G, 0, {1, 2}, cutoff=1)) == [[0, 1], [0, 2]] + def test_all_simple_paths_directed(): G = nx.DiGraph() @@ -211,11 +213,17 @@ def test_all_simple_paths_empty(): def test_all_simple_paths_corner_cases(): - assert list(nx.all_simple_paths(nx.empty_graph(2), 0, 0)) == [] + assert list(nx.all_simple_paths(nx.empty_graph(2), 0, 0)) == [[0]] assert list(nx.all_simple_paths(nx.empty_graph(2), 0, 1)) == [] assert list(nx.all_simple_paths(nx.path_graph(9), 0, 8, 0)) == [] +def test_all_simple_paths_source_in_targets(): + # See GitHub issue #6690. + G = nx.path_graph(3) + assert list(nx.all_simple_paths(G, 0, {0, 1, 2})) == [[0], [0, 1], [0, 1, 2]] + + def hamiltonian_path(G, source): source = arbitrary_element(G) neighbors = set(G[source]) - {source} @@ -264,6 +272,11 @@ def test_all_simple_edge_paths(): assert {tuple(p) for p in paths} == {((0, 1), (1, 2), (2, 3))} +def test_all_simple_edge_paths_empty_path(): + G = nx.empty_graph(1) + assert list(nx.all_simple_edge_paths(G, 0, 0)) == [[]] + + def test_all_simple_edge_paths_with_two_targets_emits_two_paths(): G = nx.path_graph(4) G.add_edge(2, 4) @@ -327,7 +340,7 @@ def test_all_simple_edge_paths_with_two_targets_inside_cycle_emits_two_paths(): def test_all_simple_edge_paths_source_target(): G = nx.path_graph(4) paths = nx.all_simple_edge_paths(G, 1, 1) - assert list(paths) == [] + assert list(paths) == [[]] def test_all_simple_edge_paths_cutoff(): @@ -368,7 +381,7 @@ def test_all_simple_edge_paths_on_non_trivial_graph(): def test_all_simple_edge_paths_multigraph(): G = nx.MultiGraph([(1, 2), (1, 2)]) paths = nx.all_simple_edge_paths(G, 1, 1) - assert list(paths) == [] + assert list(paths) == [[]] nx.add_path(G, [3, 1, 10, 2]) paths = list(nx.all_simple_edge_paths(G, 1, 2)) assert len(paths) == 3 @@ -401,11 +414,16 @@ def test_all_simple_edge_paths_empty(): def test_all_simple_edge_paths_corner_cases(): - assert list(nx.all_simple_edge_paths(nx.empty_graph(2), 0, 0)) == [] + assert list(nx.all_simple_edge_paths(nx.empty_graph(2), 0, 0)) == [[]] assert list(nx.all_simple_edge_paths(nx.empty_graph(2), 0, 1)) == [] assert list(nx.all_simple_edge_paths(nx.path_graph(9), 0, 8, 0)) == [] +def test_all_simple_edge_paths_ignores_self_loop(): + G = nx.Graph([(0, 0), (0, 1), (1, 1), (1, 2)]) + assert list(nx.all_simple_edge_paths(G, 0, 2)) == [[(0, 1), (1, 2)]] + + def hamiltonian_edge_path(G, source): source = arbitrary_element(G) neighbors = set(G[source]) - {source} @@ -458,6 +476,11 @@ def test_shortest_simple_paths(): ) +def test_shortest_simple_paths_singleton_path(): + G = nx.empty_graph(3) + assert list(nx.shortest_simple_paths(G, 0, 0)) == [[0]] + + def test_shortest_simple_paths_directed(): G = nx.cycle_graph(7, create_using=nx.DiGraph()) paths = nx.shortest_simple_paths(G, 0, 3) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_structuralholes.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_structuralholes.py index 6f92baa4f..215ce4530 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_structuralholes.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_structuralholes.py @@ -52,7 +52,7 @@ def setup_method(self): ("G", "C"): 10, } - # This additionally tests the @nx._dispatch mechanism, treating + # This additionally tests the @nx._dispatchable mechanism, treating # nx.mutual_weight as if it were a re-implementation from another package @pytest.mark.parametrize("wrapper", [lambda x: x, dispatch_interface.convert]) def test_constraint_directed(self, wrapper): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_swap.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_swap.py index 49dd5f8e8..c4aeb0682 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_swap.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_swap.py @@ -2,14 +2,36 @@ import networkx as nx - -def test_directed_edge_swap(): - graph = nx.path_graph(200, create_using=nx.DiGraph) - in_degrees = sorted((n, d) for n, d in graph.in_degree()) - out_degrees = sorted((n, d) for n, d in graph.out_degree()) - G = nx.directed_edge_swap(graph, nswap=40, max_tries=500, seed=1) - assert in_degrees == sorted((n, d) for n, d in G.in_degree()) - assert out_degrees == sorted((n, d) for n, d in G.out_degree()) +cycle = nx.cycle_graph(5, create_using=nx.DiGraph) +tree = nx.random_tree(10, create_using=nx.DiGraph, seed=42) +path = nx.path_graph(5, create_using=nx.DiGraph) +binomial = nx.binomial_tree(3, create_using=nx.DiGraph) +HH = nx.directed_havel_hakimi_graph([1, 2, 1, 2, 2, 2], [3, 1, 0, 1, 2, 3]) +balanced_tree = nx.balanced_tree(2, 3, create_using=nx.DiGraph) + + +@pytest.mark.parametrize("G", [path, binomial, HH, cycle, tree, balanced_tree]) +def test_directed_edge_swap(G): + in_degree = set(G.in_degree) + out_degree = set(G.out_degree) + edges = set(G.edges) + nx.directed_edge_swap(G, nswap=1, max_tries=100, seed=1) + assert in_degree == set(G.in_degree) + assert out_degree == set(G.out_degree) + assert edges != set(G.edges) + assert 3 == sum(e not in edges for e in G.edges) + + +def test_directed_edge_swap_undo_previous_swap(): + G = nx.DiGraph(nx.path_graph(4).edges) # only 1 swap possible + edges = set(G.edges) + nx.directed_edge_swap(G, nswap=2, max_tries=100) + assert edges == set(G.edges) + + nx.directed_edge_swap(G, nswap=1, max_tries=100, seed=1) + assert {(0, 2), (1, 3), (2, 1)} == set(G.edges) + nx.directed_edge_swap(G, nswap=1, max_tries=100, seed=1) + assert edges == set(G.edges) def test_edge_cases_directed_edge_swap(): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_triads.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_triads.py index 66dedb758..62670351e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_triads.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_triads.py @@ -9,6 +9,18 @@ import networkx as nx +def test_all_triplets_deprecated(): + G = nx.DiGraph([(1, 2), (2, 3), (3, 4)]) + with pytest.deprecated_call(): + nx.all_triplets(G) + + +def test_random_triad_deprecated(): + G = nx.path_graph(3, create_using=nx.DiGraph) + with pytest.deprecated_call(): + nx.random_triad(G) + + def test_triadic_census(): """Tests the triadic_census function.""" G = nx.DiGraph() diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_wiener.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_wiener.py index 1cb404064..aded95143 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_wiener.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tests/test_wiener.py @@ -1,66 +1,123 @@ -"""Unit tests for the :mod:`networkx.algorithms.wiener` module.""" - - -from networkx import DiGraph, complete_graph, empty_graph, path_graph, wiener_index - - -class TestWienerIndex: - """Unit tests for computing the Wiener index of a graph.""" - - def test_disconnected_graph(self): - """Tests that the Wiener index of a disconnected graph is - positive infinity. - - """ - assert wiener_index(empty_graph(2)) == float("inf") - - def test_directed(self): - """Tests that each pair of nodes in the directed graph is - counted once when computing the Wiener index. - - """ - G = complete_graph(3) - H = DiGraph(G) - assert (2 * wiener_index(G)) == wiener_index(H) - - def test_complete_graph(self): - """Tests that the Wiener index of the complete graph is simply - the number of edges. - - """ - n = 10 - G = complete_graph(n) - assert wiener_index(G) == (n * (n - 1) / 2) - - def test_path_graph(self): - """Tests that the Wiener index of the path graph is correctly - computed. - - """ - # In P_n, there are n - 1 pairs of vertices at distance one, n - - # 2 pairs at distance two, n - 3 at distance three, ..., 1 at - # distance n - 1, so the Wiener index should be - # - # 1 * (n - 1) + 2 * (n - 2) + ... + (n - 2) * 2 + (n - 1) * 1 - # - # For example, in P_5, - # - # 1 * 4 + 2 * 3 + 3 * 2 + 4 * 1 = 2 (1 * 4 + 2 * 3) - # - # and in P_6, - # - # 1 * 5 + 2 * 4 + 3 * 3 + 4 * 2 + 5 * 1 = 2 (1 * 5 + 2 * 4) + 3 * 3 - # - # assuming n is *odd*, this gives the formula - # - # 2 \sum_{i = 1}^{(n - 1) / 2} [i * (n - i)] - # - # assuming n is *even*, this gives the formula - # - # 2 \sum_{i = 1}^{n / 2} [i * (n - i)] - (n / 2) ** 2 - # - n = 9 - G = path_graph(n) - expected = 2 * sum(i * (n - i) for i in range(1, (n // 2) + 1)) - actual = wiener_index(G) - assert expected == actual +import networkx as nx + + +def test_wiener_index_of_disconnected_graph(): + assert nx.wiener_index(nx.empty_graph(2)) == float("inf") + + +def test_wiener_index_of_directed_graph(): + G = nx.complete_graph(3) + H = nx.DiGraph(G) + assert (2 * nx.wiener_index(G)) == nx.wiener_index(H) + + +def test_wiener_index_of_complete_graph(): + n = 10 + G = nx.complete_graph(n) + assert nx.wiener_index(G) == (n * (n - 1) / 2) + + +def test_wiener_index_of_path_graph(): + # In P_n, there are n - 1 pairs of vertices at distance one, n - + # 2 pairs at distance two, n - 3 at distance three, ..., 1 at + # distance n - 1, so the Wiener index should be + # + # 1 * (n - 1) + 2 * (n - 2) + ... + (n - 2) * 2 + (n - 1) * 1 + # + # For example, in P_5, + # + # 1 * 4 + 2 * 3 + 3 * 2 + 4 * 1 = 2 (1 * 4 + 2 * 3) + # + # and in P_6, + # + # 1 * 5 + 2 * 4 + 3 * 3 + 4 * 2 + 5 * 1 = 2 (1 * 5 + 2 * 4) + 3 * 3 + # + # assuming n is *odd*, this gives the formula + # + # 2 \sum_{i = 1}^{(n - 1) / 2} [i * (n - i)] + # + # assuming n is *even*, this gives the formula + # + # 2 \sum_{i = 1}^{n / 2} [i * (n - i)] - (n / 2) ** 2 + # + n = 9 + G = nx.path_graph(n) + expected = 2 * sum(i * (n - i) for i in range(1, (n // 2) + 1)) + actual = nx.wiener_index(G) + assert expected == actual + + +def test_schultz_and_gutman_index_of_disconnected_graph(): + n = 4 + G = nx.Graph() + G.add_nodes_from(list(range(1, n + 1))) + expected = float("inf") + + G.add_edge(1, 2) + G.add_edge(3, 4) + + actual_1 = nx.schultz_index(G) + actual_2 = nx.gutman_index(G) + + assert expected == actual_1 + assert expected == actual_2 + + +def test_schultz_and_gutman_index_of_complete_bipartite_graph_1(): + n = 3 + m = 3 + cbg = nx.complete_bipartite_graph(n, m) + + expected_1 = n * m * (n + m) + 2 * n * (n - 1) * m + 2 * m * (m - 1) * n + actual_1 = nx.schultz_index(cbg) + + expected_2 = n * m * (n * m) + n * (n - 1) * m * m + m * (m - 1) * n * n + actual_2 = nx.gutman_index(cbg) + + assert expected_1 == actual_1 + assert expected_2 == actual_2 + + +def test_schultz_and_gutman_index_of_complete_bipartite_graph_2(): + n = 2 + m = 5 + cbg = nx.complete_bipartite_graph(n, m) + + expected_1 = n * m * (n + m) + 2 * n * (n - 1) * m + 2 * m * (m - 1) * n + actual_1 = nx.schultz_index(cbg) + + expected_2 = n * m * (n * m) + n * (n - 1) * m * m + m * (m - 1) * n * n + actual_2 = nx.gutman_index(cbg) + + assert expected_1 == actual_1 + assert expected_2 == actual_2 + + +def test_schultz_and_gutman_index_of_complete_graph(): + n = 5 + cg = nx.complete_graph(n) + + expected_1 = n * (n - 1) * (n - 1) + actual_1 = nx.schultz_index(cg) + + assert expected_1 == actual_1 + + expected_2 = n * (n - 1) * (n - 1) * (n - 1) / 2 + actual_2 = nx.gutman_index(cg) + + assert expected_2 == actual_2 + + +def test_schultz_and_gutman_index_of_odd_cycle_graph(): + k = 5 + n = 2 * k + 1 + ocg = nx.cycle_graph(n) + + expected_1 = 2 * n * k * (k + 1) + actual_1 = nx.schultz_index(ocg) + + expected_2 = 2 * n * k * (k + 1) + actual_2 = nx.gutman_index(ocg) + + assert expected_1 == actual_1 + assert expected_2 == actual_2 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/threshold.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/threshold.py index 0839321de..bcc03d106 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/threshold.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/threshold.py @@ -9,7 +9,7 @@ __all__ = ["is_threshold_graph", "find_threshold_graph"] -@nx._dispatch +@nx._dispatchable def is_threshold_graph(G): """ Returns `True` if `G` is a threshold graph. @@ -301,7 +301,7 @@ def weights_to_creation_sequence( # Manipulating NetworkX.Graphs in context of threshold graphs -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def threshold_graph(creation_sequence, create_using=None): """ Create a threshold graph from the creation sequence or compact @@ -353,7 +353,7 @@ def threshold_graph(creation_sequence, create_using=None): return G -@nx._dispatch +@nx._dispatchable def find_alternating_4_cycle(G): """ Returns False if there aren't any alternating 4 cycles. @@ -369,7 +369,7 @@ def find_alternating_4_cycle(G): return False -@nx._dispatch +@nx._dispatchable(returns_graph=True) def find_threshold_graph(G, create_using=None): """ Returns a threshold subgraph that is close to largest in `G`. @@ -394,7 +394,7 @@ def find_threshold_graph(G, create_using=None): >>> from networkx.algorithms.threshold import find_threshold_graph >>> G = nx.barbell_graph(3, 3) >>> T = find_threshold_graph(G) - >>> T.nodes # may vary + >>> T.nodes # may vary NodeView((7, 8, 5, 6)) References @@ -404,7 +404,7 @@ def find_threshold_graph(G, create_using=None): return threshold_graph(find_creation_sequence(G), create_using) -@nx._dispatch +@nx._dispatchable def find_creation_sequence(G): """ Find a threshold subgraph that is close to largest in G. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/time_dependent.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/time_dependent.py index e83f42ad9..d67cdcf0b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/time_dependent.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/time_dependent.py @@ -8,7 +8,7 @@ @not_implemented_for("undirected") @not_implemented_for("multigraph") -@nx._dispatch(node_attrs={"time": None, "weight": 1}) +@nx._dispatchable(node_attrs={"time": None, "weight": 1}) def cd_index(G, node, time_delta, *, time="time", weight=None): r"""Compute the CD index for `node` within the graph `G`. @@ -55,10 +55,10 @@ def cd_index(G, node, time_delta, *, time="time", weight=None): >>> G = nx.DiGraph() >>> nodes = { ... 1: {"time": datetime(2015, 1, 1)}, - ... 2: {"time": datetime(2012, 1, 1), 'weight': 4}, + ... 2: {"time": datetime(2012, 1, 1), "weight": 4}, ... 3: {"time": datetime(2010, 1, 1)}, ... 4: {"time": datetime(2008, 1, 1)}, - ... 5: {"time": datetime(2014, 1, 1)} + ... 5: {"time": datetime(2014, 1, 1)}, ... } >>> G.add_nodes_from([(n, nodes[n]) for n in nodes]) >>> edges = [(1, 3), (1, 4), (2, 3), (3, 4), (3, 5)] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tournament.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tournament.py index 0b164cb3b..43a71faa7 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tournament.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tournament.py @@ -65,7 +65,7 @@ def index_satisfying(iterable, condition): @not_implemented_for("undirected") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def is_tournament(G): """Returns True if and only if `G` is a tournament. @@ -104,7 +104,7 @@ def is_tournament(G): @not_implemented_for("undirected") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def hamiltonian_path(G): """Returns a Hamiltonian path in the given tournament graph. @@ -151,7 +151,7 @@ def hamiltonian_path(G): @py_random_state(1) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def random_tournament(n, seed=None): r"""Returns a random tournament graph on `n` nodes. @@ -186,7 +186,7 @@ def random_tournament(n, seed=None): @not_implemented_for("undirected") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def score_sequence(G): """Returns the score sequence for the given tournament graph. @@ -217,7 +217,7 @@ def score_sequence(G): @not_implemented_for("undirected") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable(preserve_edge_attrs={"G": {"weight": 1}}) def tournament_matrix(G): r"""Returns the tournament matrix for the given tournament graph. @@ -260,7 +260,7 @@ def tournament_matrix(G): @not_implemented_for("undirected") @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable def is_reachable(G, s, t): """Decides whether there is a path from `s` to `t` in the tournament. @@ -349,7 +349,7 @@ def is_closed(G, nodes): @not_implemented_for("undirected") @not_implemented_for("multigraph") -@nx._dispatch(name="tournament_is_strongly_connected") +@nx._dispatchable(name="tournament_is_strongly_connected") def is_strongly_connected(G): """Decides whether the given tournament is strongly connected. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/__init__.cpython-312.pyc index b106c08c7..1f0b89b8a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/beamsearch.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/beamsearch.cpython-312.pyc index f16b24c85..e5ed67997 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/beamsearch.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/beamsearch.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/breadth_first_search.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/breadth_first_search.cpython-312.pyc index fb148c879..88502c273 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/breadth_first_search.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/breadth_first_search.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/depth_first_search.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/depth_first_search.cpython-312.pyc index d0e517c76..ece0546d2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/depth_first_search.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/depth_first_search.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgebfs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgebfs.cpython-312.pyc index 751e10ac1..47aed204f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgebfs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgebfs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgedfs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgedfs.cpython-312.pyc index b078cd618..116c7c99d 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgedfs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/__pycache__/edgedfs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/beamsearch.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/beamsearch.py index 7fe93669a..ab90f44ae 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/beamsearch.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/beamsearch.py @@ -1,12 +1,10 @@ """Basic algorithms for breadth-first searching the nodes of a graph.""" import networkx as nx -from .breadth_first_search import generic_bfs_edges - __all__ = ["bfs_beam_edges"] -@nx._dispatch +@nx._dispatchable def bfs_beam_edges(G, source, value, width=None): """Iterates over edges in a beam search. @@ -16,6 +14,15 @@ def bfs_beam_edges(G, source, value, width=None): heuristic. In general, a beam search with a small beam width might not visit each node in the graph. + .. note:: + + With the default value of ``width=None`` or `width` greater than the + maximum degree of the graph, this function equates to a slower + version of `~networkx.algorithms.traversal.breadth_first_search.bfs_edges`. + All nodes will be visited, though the order of the reported edges may + vary. In such cases, `value` has no effect - consider using `bfs_edges` + directly instead. + Parameters ---------- G : NetworkX graph @@ -50,28 +57,8 @@ def bfs_beam_edges(G, source, value, width=None): >>> G = nx.karate_club_graph() >>> centrality = nx.eigenvector_centrality(G) - >>> source = 0 - >>> width = 5 - >>> for u, v in nx.bfs_beam_edges(G, source, centrality.get, width): - ... print((u, v)) - ... - (0, 2) - (0, 1) - (0, 8) - (0, 13) - (0, 3) - (2, 32) - (1, 30) - (8, 33) - (3, 7) - (32, 31) - (31, 28) - (31, 25) - (25, 23) - (25, 24) - (23, 29) - (23, 27) - (29, 26) + >>> list(nx.bfs_beam_edges(G, source=0, value=centrality.get, width=3)) + [(0, 2), (0, 1), (0, 8), (2, 32), (1, 13), (8, 33)] """ if width is None: @@ -85,10 +72,6 @@ def successors(v): The "best" neighbors are chosen according to the `value` function (higher is better). Only the `width` best neighbors of `v` are returned. - - The list returned by this function is in decreasing value as - measured by the `value` function. - """ # TODO The Python documentation states that for small values, it # is better to use `heapq.nlargest`. We should determine the @@ -103,4 +86,4 @@ def successors(v): # `bfs_edges(G, source)` but with a sorted enqueue step. return iter(sorted(G.neighbors(v), key=value, reverse=True)[:width]) - yield from generic_bfs_edges(G, source, successors) + yield from nx.generic_bfs_edges(G, source, successors) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/breadth_first_search.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/breadth_first_search.py index 33b0df8e1..b87cca124 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/breadth_first_search.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/breadth_first_search.py @@ -1,5 +1,4 @@ """Basic algorithms for breadth-first searching the nodes of a graph.""" -import math from collections import deque import networkx as nx @@ -16,7 +15,7 @@ ] -@nx._dispatch +@nx._dispatchable def generic_bfs_edges(G, source, neighbors=None, depth_limit=None, sort_neighbors=None): """Iterate over edges in a breadth-first search. @@ -37,14 +36,14 @@ def generic_bfs_edges(G, source, neighbors=None, depth_limit=None, sort_neighbor A function that takes a newly visited node of the graph as input and returns an *iterator* (not just a list) of nodes that are neighbors of that node with custom ordering. If not specified, this is - just the``G.neighbors`` method, but in general it can be any function + just the ``G.neighbors`` method, but in general it can be any function that returns an iterator over some or all of the neighbors of a given node, in any order. depth_limit : int, optional(default=len(G)) Specify the maximum search depth. - sort_neighbors : Callable + sort_neighbors : Callable (default=None) .. deprecated:: 3.2 @@ -52,9 +51,9 @@ def generic_bfs_edges(G, source, neighbors=None, depth_limit=None, sort_neighbor version 3.4. A custom (e.g. sorted) ordering of neighbors can be specified with the `neighbors` parameter. - A function that takes the list of neighbors of a given node as input, - and returns an iterator over these neighbors but with a custom - ordering. + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. Yields ------ @@ -63,11 +62,26 @@ def generic_bfs_edges(G, source, neighbors=None, depth_limit=None, sort_neighbor Examples -------- - >>> G = nx.path_graph(3) - >>> list(nx.bfs_edges(G, 0)) - [(0, 1), (1, 2)] - >>> list(nx.bfs_edges(G, source=0, depth_limit=1)) - [(0, 1)] + >>> G = nx.path_graph(7) + >>> list(nx.generic_bfs_edges(G, source=0)) + [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)] + >>> list(nx.generic_bfs_edges(G, source=2)) + [(2, 1), (2, 3), (1, 0), (3, 4), (4, 5), (5, 6)] + >>> list(nx.generic_bfs_edges(G, source=2, depth_limit=2)) + [(2, 1), (2, 3), (1, 0), (3, 4)] + + The `neighbors` param can be used to specify the visitation order of each + node's neighbors generically. In the following example, we modify the default + neighbor to return *odd* nodes first: + + >>> def odd_first(n): + ... return sorted(G.neighbors(n), key=lambda x: x % 2, reverse=True) + + >>> G = nx.star_graph(5) + >>> list(nx.generic_bfs_edges(G, source=0)) # Default neighbor ordering + [(0, 1), (0, 2), (0, 3), (0, 4), (0, 5)] + >>> list(nx.generic_bfs_edges(G, source=0, neighbors=odd_first)) + [(0, 1), (0, 3), (0, 5), (0, 2), (0, 4)] Notes ----- @@ -115,7 +129,7 @@ def generic_bfs_edges(G, source, neighbors=None, depth_limit=None, sort_neighbor depth += 1 -@nx._dispatch +@nx._dispatchable def bfs_edges(G, source, reverse=False, depth_limit=None, sort_neighbors=None): """Iterate over edges in a breadth-first-search starting at source. @@ -134,9 +148,10 @@ def bfs_edges(G, source, reverse=False, depth_limit=None, sort_neighbors=None): depth_limit : int, optional(default=len(G)) Specify the maximum search depth - sort_neighbors : function - A function that takes the list of neighbors of given node as input, and - returns an *iterator* over these neighbors but with custom ordering. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. Yields ------ @@ -195,7 +210,7 @@ def bfs_edges(G, source, reverse=False, depth_limit=None, sort_neighbors=None): else: successors = G.neighbors - if callable(sort_neighbors): + if sort_neighbors is not None: yield from generic_bfs_edges( G, source, lambda node: iter(sort_neighbors(successors(node))), depth_limit ) @@ -203,7 +218,7 @@ def bfs_edges(G, source, reverse=False, depth_limit=None, sort_neighbors=None): yield from generic_bfs_edges(G, source, successors, depth_limit) -@nx._dispatch +@nx._dispatchable(returns_graph=True) def bfs_tree(G, source, reverse=False, depth_limit=None, sort_neighbors=None): """Returns an oriented tree constructed from of a breadth-first-search starting at source. @@ -221,9 +236,10 @@ def bfs_tree(G, source, reverse=False, depth_limit=None, sort_neighbors=None): depth_limit : int, optional(default=len(G)) Specify the maximum search depth - sort_neighbors : function - A function that takes the list of neighbors of given node as input, and - returns an *iterator* over these neighbors but with custom ordering. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. Returns ------- @@ -270,7 +286,7 @@ def bfs_tree(G, source, reverse=False, depth_limit=None, sort_neighbors=None): return T -@nx._dispatch +@nx._dispatchable def bfs_predecessors(G, source, depth_limit=None, sort_neighbors=None): """Returns an iterator of predecessors in breadth-first-search from source. @@ -284,9 +300,10 @@ def bfs_predecessors(G, source, depth_limit=None, sort_neighbors=None): depth_limit : int, optional(default=len(G)) Specify the maximum search depth - sort_neighbors : function - A function that takes the list of neighbors of given node as input, and - returns an *iterator* over these neighbors but with custom ordering. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. Returns ------- @@ -335,7 +352,7 @@ def bfs_predecessors(G, source, depth_limit=None, sort_neighbors=None): yield (t, s) -@nx._dispatch +@nx._dispatchable def bfs_successors(G, source, depth_limit=None, sort_neighbors=None): """Returns an iterator of successors in breadth-first-search from source. @@ -349,9 +366,10 @@ def bfs_successors(G, source, depth_limit=None, sort_neighbors=None): depth_limit : int, optional(default=len(G)) Specify the maximum search depth - sort_neighbors : function - A function that takes the list of neighbors of given node as input, and - returns an *iterator* over these neighbors but with custom ordering. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. Returns ------- @@ -408,7 +426,7 @@ def bfs_successors(G, source, depth_limit=None, sort_neighbors=None): yield (parent, children) -@nx._dispatch +@nx._dispatchable def bfs_layers(G, sources): """Returns an iterator of all the layers in breadth-first search traversal. @@ -466,7 +484,7 @@ def bfs_layers(G, sources): LEVEL_EDGE = "level" -@nx._dispatch +@nx._dispatchable def bfs_labeled_edges(G, sources): """Iterate over edges in a breadth-first search (BFS) labeled by type. @@ -498,7 +516,7 @@ def bfs_labeled_edges(G, sources): Examples -------- - >>> G = nx.cycle_graph(4, create_using = nx.DiGraph) + >>> G = nx.cycle_graph(4, create_using=nx.DiGraph) >>> list(nx.bfs_labeled_edges(G, 0)) [(0, 1, 'tree'), (1, 2, 'tree'), (2, 3, 'tree'), (3, 0, 'reverse')] >>> G = nx.complete_graph(3) @@ -541,7 +559,7 @@ def bfs_labeled_edges(G, sources): visit(u) -@nx._dispatch +@nx._dispatchable def descendants_at_distance(G, source, distance): """Returns all nodes at a fixed `distance` from `source` in `G`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/depth_first_search.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/depth_first_search.py index 185a99c3d..3ca0f91d9 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/depth_first_search.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/depth_first_search.py @@ -14,8 +14,8 @@ ] -@nx._dispatch -def dfs_edges(G, source=None, depth_limit=None): +@nx._dispatchable +def dfs_edges(G, source=None, depth_limit=None, *, sort_neighbors=None): """Iterate over edges in a depth-first-search (DFS). Perform a depth-first-search over the nodes of `G` and yield @@ -33,6 +33,11 @@ def dfs_edges(G, source=None, depth_limit=None): depth_limit : int, optional (default=len(G)) Specify the maximum search depth. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. + Yields ------ edge: 2-tuple of nodes @@ -78,12 +83,18 @@ def dfs_edges(G, source=None, depth_limit=None): if depth_limit is None: depth_limit = len(G) + get_children = ( + G.neighbors + if sort_neighbors is None + else lambda n: iter(sort_neighbors(G.neighbors(n))) + ) + visited = set() for start in nodes: if start in visited: continue visited.add(start) - stack = [(start, iter(G[start]))] + stack = [(start, get_children(start))] depth_now = 1 while stack: parent, children = stack[-1] @@ -92,7 +103,7 @@ def dfs_edges(G, source=None, depth_limit=None): yield parent, child visited.add(child) if depth_now < depth_limit: - stack.append((child, iter(G[child]))) + stack.append((child, get_children(child))) depth_now += 1 break else: @@ -100,8 +111,8 @@ def dfs_edges(G, source=None, depth_limit=None): depth_now -= 1 -@nx._dispatch -def dfs_tree(G, source=None, depth_limit=None): +@nx._dispatchable(returns_graph=True) +def dfs_tree(G, source=None, depth_limit=None, *, sort_neighbors=None): """Returns oriented tree constructed from a depth-first-search from source. Parameters @@ -114,6 +125,11 @@ def dfs_tree(G, source=None, depth_limit=None): depth_limit : int, optional (default=len(G)) Specify the maximum search depth. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. + Returns ------- T : NetworkX DiGraph @@ -134,20 +150,20 @@ def dfs_tree(G, source=None, depth_limit=None): dfs_preorder_nodes dfs_postorder_nodes dfs_labeled_edges - edge_dfs - bfs_tree + :func:`~networkx.algorithms.traversal.edgedfs.edge_dfs` + :func:`~networkx.algorithms.traversal.breadth_first_search.bfs_tree` """ T = nx.DiGraph() if source is None: T.add_nodes_from(G) else: T.add_node(source) - T.add_edges_from(dfs_edges(G, source, depth_limit)) + T.add_edges_from(dfs_edges(G, source, depth_limit, sort_neighbors=sort_neighbors)) return T -@nx._dispatch -def dfs_predecessors(G, source=None, depth_limit=None): +@nx._dispatchable +def dfs_predecessors(G, source=None, depth_limit=None, *, sort_neighbors=None): """Returns dictionary of predecessors in depth-first-search from source. Parameters @@ -163,6 +179,11 @@ def dfs_predecessors(G, source=None, depth_limit=None): depth_limit : int, optional (default=len(G)) Specify the maximum search depth. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. + Returns ------- pred: dict @@ -194,14 +215,17 @@ def dfs_predecessors(G, source=None, depth_limit=None): dfs_preorder_nodes dfs_postorder_nodes dfs_labeled_edges - edge_dfs - bfs_tree + :func:`~networkx.algorithms.traversal.edgedfs.edge_dfs` + :func:`~networkx.algorithms.traversal.breadth_first_search.bfs_tree` """ - return {t: s for s, t in dfs_edges(G, source, depth_limit)} + return { + t: s + for s, t in dfs_edges(G, source, depth_limit, sort_neighbors=sort_neighbors) + } -@nx._dispatch -def dfs_successors(G, source=None, depth_limit=None): +@nx._dispatchable +def dfs_successors(G, source=None, depth_limit=None, *, sort_neighbors=None): """Returns dictionary of successors in depth-first-search from source. Parameters @@ -217,6 +241,11 @@ def dfs_successors(G, source=None, depth_limit=None): depth_limit : int, optional (default=len(G)) Specify the maximum search depth. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. + Returns ------- succ: dict @@ -248,17 +277,22 @@ def dfs_successors(G, source=None, depth_limit=None): dfs_preorder_nodes dfs_postorder_nodes dfs_labeled_edges - edge_dfs - bfs_tree + :func:`~networkx.algorithms.traversal.edgedfs.edge_dfs` + :func:`~networkx.algorithms.traversal.breadth_first_search.bfs_tree` """ d = defaultdict(list) - for s, t in dfs_edges(G, source=source, depth_limit=depth_limit): + for s, t in dfs_edges( + G, + source=source, + depth_limit=depth_limit, + sort_neighbors=sort_neighbors, + ): d[s].append(t) return dict(d) -@nx._dispatch -def dfs_postorder_nodes(G, source=None, depth_limit=None): +@nx._dispatchable +def dfs_postorder_nodes(G, source=None, depth_limit=None, *, sort_neighbors=None): """Generate nodes in a depth-first-search post-ordering starting at source. Parameters @@ -271,6 +305,11 @@ def dfs_postorder_nodes(G, source=None, depth_limit=None): depth_limit : int, optional (default=len(G)) Specify the maximum search depth. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. + Returns ------- nodes: generator @@ -302,15 +341,17 @@ def dfs_postorder_nodes(G, source=None, depth_limit=None): dfs_edges dfs_preorder_nodes dfs_labeled_edges - edge_dfs - bfs_tree + :func:`~networkx.algorithms.traversal.edgedfs.edge_dfs` + :func:`~networkx.algorithms.traversal.breadth_first_search.bfs_tree` """ - edges = nx.dfs_labeled_edges(G, source=source, depth_limit=depth_limit) + edges = nx.dfs_labeled_edges( + G, source=source, depth_limit=depth_limit, sort_neighbors=sort_neighbors + ) return (v for u, v, d in edges if d == "reverse") -@nx._dispatch -def dfs_preorder_nodes(G, source=None, depth_limit=None): +@nx._dispatchable +def dfs_preorder_nodes(G, source=None, depth_limit=None, *, sort_neighbors=None): """Generate nodes in a depth-first-search pre-ordering starting at source. Parameters @@ -324,6 +365,11 @@ def dfs_preorder_nodes(G, source=None, depth_limit=None): depth_limit : int, optional (default=len(G)) Specify the maximum search depth. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. + Returns ------- nodes: generator @@ -355,14 +401,16 @@ def dfs_preorder_nodes(G, source=None, depth_limit=None): dfs_edges dfs_postorder_nodes dfs_labeled_edges - bfs_edges + :func:`~networkx.algorithms.traversal.breadth_first_search.bfs_edges` """ - edges = nx.dfs_labeled_edges(G, source=source, depth_limit=depth_limit) + edges = nx.dfs_labeled_edges( + G, source=source, depth_limit=depth_limit, sort_neighbors=sort_neighbors + ) return (v for u, v, d in edges if d == "forward") -@nx._dispatch -def dfs_labeled_edges(G, source=None, depth_limit=None): +@nx._dispatchable +def dfs_labeled_edges(G, source=None, depth_limit=None, *, sort_neighbors=None): """Iterate over edges in a depth-first-search (DFS) labeled by type. Parameters @@ -376,6 +424,11 @@ def dfs_labeled_edges(G, source=None, depth_limit=None): depth_limit : int, optional (default=len(G)) Specify the maximum search depth. + sort_neighbors : function (default=None) + A function that takes an iterator over nodes as the input, and + returns an iterable of the same nodes with a custom ordering. + For example, `sorted` will sort the nodes in increasing order. + Returns ------- edges: generator @@ -439,13 +492,19 @@ def dfs_labeled_edges(G, source=None, depth_limit=None): if depth_limit is None: depth_limit = len(G) + get_children = ( + G.neighbors + if sort_neighbors is None + else lambda n: iter(sort_neighbors(G.neighbors(n))) + ) + visited = set() for start in nodes: if start in visited: continue yield start, start, "forward" visited.add(start) - stack = [(start, iter(G[start]))] + stack = [(start, get_children(start))] depth_now = 1 while stack: parent, children = stack[-1] @@ -456,7 +515,7 @@ def dfs_labeled_edges(G, source=None, depth_limit=None): yield parent, child, "forward" visited.add(child) if depth_now < depth_limit: - stack.append((child, iter(G[child]))) + stack.append((child, iter(get_children(child)))) depth_now += 1 break else: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgebfs.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgebfs.py index c29ef5e02..484ae12b5 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgebfs.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgebfs.py @@ -16,7 +16,7 @@ __all__ = ["edge_bfs"] -@nx._dispatch +@nx._dispatchable def edge_bfs(G, source=None, orientation=None): """A directed, breadth-first-search of edges in `G`, beginning at `source`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgedfs.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgedfs.py index 1e583de6e..010f68246 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgedfs.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/edgedfs.py @@ -14,7 +14,7 @@ __all__ = ["edge_dfs"] -@nx._dispatch +@nx._dispatchable def edge_dfs(G, source=None, orientation=None): """A directed, depth-first-search of edges in `G`, beginning at `source`. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/__init__.cpython-312.pyc index 8edac5059..b95dbd692 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_beamsearch.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_beamsearch.cpython-312.pyc index adb8d2a33..3e48824df 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_beamsearch.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_beamsearch.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_bfs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_bfs.cpython-312.pyc index 8f3f5493d..f611ca71f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_bfs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_bfs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_dfs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_dfs.cpython-312.pyc index 4c7393a3a..1785b1ff4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_dfs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_dfs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgebfs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgebfs.cpython-312.pyc index d4585ebb5..f0b1ad5a4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgebfs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgebfs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgedfs.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgedfs.cpython-312.pyc index 34e86792c..b44b493b7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgedfs.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/__pycache__/test_edgedfs.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_beamsearch.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_beamsearch.py index 8945b4184..38404717c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_beamsearch.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_beamsearch.py @@ -1,32 +1,24 @@ """Unit tests for the beam search functions.""" +import pytest import networkx as nx -def identity(x): - return x - - -class TestBeamSearch: - """Unit tests for the beam search function.""" - - def test_narrow(self): - """Tests that a narrow beam width may cause an incomplete search.""" - # In this search, we enqueue only the neighbor 3 at the first - # step, then only the neighbor 2 at the second step. Once at - # node 2, the search chooses node 3, since it has a higher value - # that node 1, but node 3 has already been visited, so the - # search terminates. - G = nx.cycle_graph(4) - edges = nx.bfs_beam_edges(G, 0, identity, width=1) - assert list(edges) == [(0, 3), (3, 2)] - - def test_wide(self): - G = nx.cycle_graph(4) - edges = nx.bfs_beam_edges(G, 0, identity, width=2) - assert list(edges) == [(0, 3), (0, 1), (3, 2)] - - def test_width_none(self): - G = nx.cycle_graph(4) - edges = nx.bfs_beam_edges(G, 0, identity, width=None) - assert list(edges) == [(0, 3), (0, 1), (3, 2)] +def test_narrow(): + """Tests that a narrow beam width may cause an incomplete search.""" + # In this search, we enqueue only the neighbor 3 at the first + # step, then only the neighbor 2 at the second step. Once at + # node 2, the search chooses node 3, since it has a higher value + # than node 1, but node 3 has already been visited, so the + # search terminates. + G = nx.cycle_graph(4) + edges = nx.bfs_beam_edges(G, source=0, value=lambda n: n, width=1) + assert list(edges) == [(0, 3), (3, 2)] + + +@pytest.mark.parametrize("width", (2, None)) +def test_wide(width): + """All nodes are searched when `width` is None or >= max degree""" + G = nx.cycle_graph(4) + edges = nx.bfs_beam_edges(G, source=0, value=lambda n: n, width=width) + assert list(edges) == [(0, 3), (0, 1), (3, 2)] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_dfs.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_dfs.py index 0eb698b0f..e43d7d616 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_dfs.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/traversal/tests/test_dfs.py @@ -55,6 +55,14 @@ def test_dfs_edges(self): edges = nx.dfs_edges(self.D) assert list(edges) == [(0, 1), (2, 3)] + def test_dfs_edges_sorting(self): + G = nx.Graph([(0, 1), (1, 2), (1, 3), (2, 4), (3, 0), (0, 4)]) + edges_asc = nx.dfs_edges(G, source=0, sort_neighbors=sorted) + sorted_desc = lambda x: sorted(x, reverse=True) + edges_desc = nx.dfs_edges(G, source=0, sort_neighbors=sorted_desc) + assert list(edges_asc) == [(0, 1), (1, 2), (2, 4), (1, 3)] + assert list(edges_desc) == [(0, 4), (4, 2), (2, 1), (1, 3)] + def test_dfs_labeled_edges(self): edges = list(nx.dfs_labeled_edges(self.G, source=0)) forward = [(u, v) for (u, v, d) in edges if d == "forward"] @@ -80,6 +88,52 @@ def test_dfs_labeled_edges(self): (0, 0, "reverse"), ] + def test_dfs_labeled_edges_sorting(self): + G = nx.Graph([(0, 1), (1, 2), (1, 3), (2, 4), (3, 0), (0, 4)]) + edges_asc = nx.dfs_labeled_edges(G, source=0, sort_neighbors=sorted) + sorted_desc = lambda x: sorted(x, reverse=True) + edges_desc = nx.dfs_labeled_edges(G, source=0, sort_neighbors=sorted_desc) + assert list(edges_asc) == [ + (0, 0, "forward"), + (0, 1, "forward"), + (1, 0, "nontree"), + (1, 2, "forward"), + (2, 1, "nontree"), + (2, 4, "forward"), + (4, 0, "nontree"), + (4, 2, "nontree"), + (2, 4, "reverse"), + (1, 2, "reverse"), + (1, 3, "forward"), + (3, 0, "nontree"), + (3, 1, "nontree"), + (1, 3, "reverse"), + (0, 1, "reverse"), + (0, 3, "nontree"), + (0, 4, "nontree"), + (0, 0, "reverse"), + ] + assert list(edges_desc) == [ + (0, 0, "forward"), + (0, 4, "forward"), + (4, 2, "forward"), + (2, 4, "nontree"), + (2, 1, "forward"), + (1, 3, "forward"), + (3, 1, "nontree"), + (3, 0, "nontree"), + (1, 3, "reverse"), + (1, 2, "nontree"), + (1, 0, "nontree"), + (2, 1, "reverse"), + (4, 2, "reverse"), + (4, 0, "nontree"), + (0, 4, "reverse"), + (0, 3, "nontree"), + (0, 1, "nontree"), + (0, 0, "reverse"), + ] + def test_dfs_labeled_disconnected_edges(self): edges = list(nx.dfs_labeled_edges(self.D)) forward = [(u, v) for (u, v, d) in edges if d == "forward"] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/__init__.cpython-312.pyc index 9e32e2887..476d085b3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/branchings.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/branchings.cpython-312.pyc index 69aed8410..cc3712f86 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/branchings.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/branchings.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/coding.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/coding.cpython-312.pyc index 9a583d074..6af3c6af7 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/coding.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/coding.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/decomposition.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/decomposition.cpython-312.pyc index 43cdf6812..a407d0610 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/decomposition.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/decomposition.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/mst.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/mst.cpython-312.pyc index 8d9b38211..c58aa9cca 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/mst.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/mst.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/operations.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/operations.cpython-312.pyc index 728d1aa22..9f1d31b17 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/operations.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/operations.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/recognition.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/recognition.cpython-312.pyc index f682770c6..1c6d0a6d4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/recognition.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/__pycache__/recognition.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/branchings.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/branchings.py index 653266915..6c0e34906 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/branchings.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/branchings.py @@ -28,7 +28,6 @@ # } import string from dataclasses import dataclass, field -from enum import Enum from operator import itemgetter from queue import PriorityQueue @@ -73,7 +72,7 @@ def _max_weight(weight): return weight -@nx._dispatch(edge_attrs={"attr": "default"}) +@nx._dispatchable(edge_attrs={"attr": "default"}) def branching_weight(G, attr="weight", default=1): """ Returns the total weight of a branching. @@ -108,7 +107,7 @@ def branching_weight(G, attr="weight", default=1): @py_random_state(4) -@nx._dispatch(edge_attrs={"attr": "default"}) +@nx._dispatchable(edge_attrs={"attr": "default"}, returns_graph=True) def greedy_branching(G, attr="weight", default=1, kind="max", seed=None): """ Returns a branching obtained through a greedy algorithm. @@ -370,6 +369,7 @@ def _init(self, attr, default, kind, style, preserve_attrs, seed, partition): # The object we manipulate at each step is a multidigraph. self.G = G = MultiDiGraph_EdgeKey() + self.G.__networkx_cache__ = None # Disable caching for key, (u, v, data) in enumerate(self.G_original.edges(data=True)): d = {attr: trans(data.get(attr, default))} @@ -470,7 +470,6 @@ def find_optimum( D = set() nodes = iter(list(G.nodes())) attr = self._attr - G_pred = G.pred def desired_edge(v): """ @@ -745,10 +744,7 @@ def is_root(G, u, edgekeys): return H -@nx._dispatch( - edge_attrs={"attr": "default", "partition": 0}, - preserve_edge_attrs="preserve_attrs", -) +@nx._dispatchable(preserve_edge_attrs=True, returns_graph=True) def maximum_branching( G, attr="weight", @@ -827,6 +823,8 @@ def edmonds_remove_node(G, edge_index, n): G_original = G G = nx.MultiDiGraph() + G.__networkx_cache__ = None # Disable caching + # A dict to reliably track mutations to the edges using the key of the edge. G_edge_index = {} # Each edge is given an arbitrary numerical key @@ -1173,31 +1171,28 @@ def is_root(G, u, edgekeys): return H -@nx._dispatch( - edge_attrs={"attr": "default", "partition": None}, - preserve_edge_attrs="preserve_attrs", -) +@nx._dispatchable(preserve_edge_attrs=True, mutates_input=True, returns_graph=True) def minimum_branching( G, attr="weight", default=1, preserve_attrs=False, partition=None ): for _, _, d in G.edges(data=True): - d[attr] = -d[attr] + d[attr] = -d.get(attr, default) + nx._clear_cache(G) B = maximum_branching(G, attr, default, preserve_attrs, partition) for _, _, d in G.edges(data=True): - d[attr] = -d[attr] + d[attr] = -d.get(attr, default) + nx._clear_cache(G) for _, _, d in B.edges(data=True): - d[attr] = -d[attr] + d[attr] = -d.get(attr, default) + nx._clear_cache(B) return B -@nx._dispatch( - edge_attrs={"attr": "default", "partition": None}, - preserve_edge_attrs="preserve_attrs", -) +@nx._dispatchable(preserve_edge_attrs=True, mutates_input=True, returns_graph=True) def minimal_branching( G, /, *, attr="weight", default=1, preserve_attrs=False, partition=None ): @@ -1233,7 +1228,7 @@ def minimal_branching( """ max_weight = -INF min_weight = INF - for _, _, w in G.edges(data=attr): + for _, _, w in G.edges(data=attr, default=default): if w > max_weight: max_weight = w if w < min_weight: @@ -1244,24 +1239,24 @@ def minimal_branching( # the difference between the max and min weights. This is important # in order to prevent the edge weights from becoming negative during # computation - d[attr] = max_weight + 1 + (max_weight - min_weight) - d[attr] + d[attr] = max_weight + 1 + (max_weight - min_weight) - d.get(attr, default) + nx._clear_cache(G) B = maximum_branching(G, attr, default, preserve_attrs, partition) # Reverse the weight transformations for _, _, d in G.edges(data=True): - d[attr] = max_weight + 1 + (max_weight - min_weight) - d[attr] + d[attr] = max_weight + 1 + (max_weight - min_weight) - d.get(attr, default) + nx._clear_cache(G) for _, _, d in B.edges(data=True): - d[attr] = max_weight + 1 + (max_weight - min_weight) - d[attr] + d[attr] = max_weight + 1 + (max_weight - min_weight) - d.get(attr, default) + nx._clear_cache(B) return B -@nx._dispatch( - edge_attrs={"attr": "default", "partition": None}, - preserve_edge_attrs="preserve_attrs", -) +@nx._dispatchable(preserve_edge_attrs=True, mutates_input=True, returns_graph=True) def maximum_spanning_arborescence( G, attr="weight", default=1, preserve_attrs=False, partition=None ): @@ -1277,22 +1272,25 @@ def maximum_spanning_arborescence( min_weight = INF max_weight = -INF - for _, _, w in G.edges(data=attr): + for _, _, w in G.edges(data=attr, default=default): if w < min_weight: min_weight = w if w > max_weight: max_weight = w for _, _, d in G.edges(data=True): - d[attr] = d[attr] - min_weight + 1 - (min_weight - max_weight) + d[attr] = d.get(attr, default) - min_weight + 1 - (min_weight - max_weight) + nx._clear_cache(G) B = maximum_branching(G, attr, default, preserve_attrs, partition) for _, _, d in G.edges(data=True): - d[attr] = d[attr] + min_weight - 1 + (min_weight - max_weight) + d[attr] = d.get(attr, default) + min_weight - 1 + (min_weight - max_weight) + nx._clear_cache(G) for _, _, d in B.edges(data=True): - d[attr] = d[attr] + min_weight - 1 + (min_weight - max_weight) + d[attr] = d.get(attr, default) + min_weight - 1 + (min_weight - max_weight) + nx._clear_cache(B) if not is_arborescence(B): raise nx.exception.NetworkXException("No maximum spanning arborescence in G.") @@ -1300,10 +1298,7 @@ def maximum_spanning_arborescence( return B -@nx._dispatch( - edge_attrs={"attr": "default", "partition": None}, - preserve_edge_attrs="preserve_attrs", -) +@nx._dispatchable(preserve_edge_attrs=True, mutates_input=True, returns_graph=True) def minimum_spanning_arborescence( G, attr="weight", default=1, preserve_attrs=False, partition=None ): @@ -1365,8 +1360,8 @@ def minimum_spanning_arborescence( minimum_branching.__doc__ = ( docstring_branching.format(kind="minimum", style="branching") + """ -See Also --------- +See Also +-------- minimal_branching """ ) @@ -1575,6 +1570,7 @@ def _write_partition(self, partition): d[self.partition_key] = partition.partition_dict[(u, v)] else: d[self.partition_key] = nx.EdgePartition.OPEN + nx._clear_cache(self.G) for n in self.G: included_count = 0 @@ -1598,3 +1594,4 @@ def _clear_partition(self, G): for u, v, d in G.edges(data=True): if self.partition_key in d: del d[self.partition_key] + nx._clear_cache(self.G) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/coding.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/coding.py index a74fd48cf..8cec023c2 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/coding.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/coding.py @@ -32,7 +32,7 @@ class NotATree(nx.NetworkXException): @not_implemented_for("directed") -@nx._dispatch(graphs="T") +@nx._dispatchable(graphs="T") def to_nested_tuple(T, root, canonical_form=False): """Returns a nested tuple representation of the given tree. @@ -128,7 +128,7 @@ def _make_tuple(T, root, _parent): return _make_tuple(T, root, None) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_nested_tuple(sequence, sensible_relabeling=False): """Returns the rooted tree corresponding to the given nested tuple. @@ -213,7 +213,7 @@ def _make_tree(sequence): @not_implemented_for("directed") -@nx._dispatch(graphs="T") +@nx._dispatchable(graphs="T") def to_prufer_sequence(T): r"""Returns the Prüfer sequence of the given tree. @@ -314,7 +314,7 @@ def parents(u): return result -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_prufer_sequence(sequence): r"""Returns the tree corresponding to the given Prüfer sequence. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/decomposition.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/decomposition.py index 051710001..c8b8f2477 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/decomposition.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/decomposition.py @@ -10,7 +10,7 @@ @not_implemented_for("multigraph") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def junction_tree(G): r"""Returns a junction tree of a given graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/mst.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/mst.py index f4cec03dc..9e8ea3843 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/mst.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/mst.py @@ -18,6 +18,7 @@ "maximum_spanning_edges", "minimum_spanning_tree", "maximum_spanning_tree", + "number_of_spanning_trees", "random_spanning_tree", "partition_spanning_tree", "EdgePartition", @@ -41,7 +42,7 @@ class EdgePartition(Enum): @not_implemented_for("multigraph") -@nx._dispatch(edge_attrs="weight", preserve_edge_attrs="data") +@nx._dispatchable(edge_attrs="weight", preserve_edge_attrs="data") def boruvka_mst_edges( G, minimum=True, weight="weight", keys=False, data=True, ignore_nan=False ): @@ -138,7 +139,7 @@ def best_edge(component): forest.union(u, v) -@nx._dispatch( +@nx._dispatchable( edge_attrs={"weight": None, "partition": None}, preserve_edge_attrs="data" ) def kruskal_mst_edges( @@ -251,7 +252,7 @@ def kruskal_mst_edges( subtrees.union(u, v) -@nx._dispatch(edge_attrs="weight", preserve_edge_attrs="data") +@nx._dispatchable(edge_attrs="weight", preserve_edge_attrs="data") def prim_mst_edges(G, minimum, weight="weight", keys=True, data=True, ignore_nan=False): """Iterate over edges of Prim's algorithm min/max spanning tree. @@ -367,7 +368,7 @@ def prim_mst_edges(G, minimum, weight="weight", keys=True, data=True, ignore_nan @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight", preserve_edge_attrs="data") +@nx._dispatchable(edge_attrs="weight", preserve_edge_attrs="data") def minimum_spanning_edges( G, algorithm="kruskal", weight="weight", keys=True, data=True, ignore_nan=False ): @@ -462,7 +463,7 @@ def minimum_spanning_edges( @not_implemented_for("directed") -@nx._dispatch(edge_attrs="weight", preserve_edge_attrs="data") +@nx._dispatchable(edge_attrs="weight", preserve_edge_attrs="data") def maximum_spanning_edges( G, algorithm="kruskal", weight="weight", keys=True, data=True, ignore_nan=False ): @@ -555,7 +556,7 @@ def maximum_spanning_edges( ) -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def minimum_spanning_tree(G, weight="weight", algorithm="kruskal", ignore_nan=False): """Returns a minimum spanning tree or forest on an undirected graph `G`. @@ -615,7 +616,7 @@ def minimum_spanning_tree(G, weight="weight", algorithm="kruskal", ignore_nan=Fa return T -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def partition_spanning_tree( G, minimum=True, weight="weight", partition="partition", ignore_nan=False ): @@ -679,7 +680,7 @@ def partition_spanning_tree( return T -@nx._dispatch(preserve_all_attrs=True) +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def maximum_spanning_tree(G, weight="weight", algorithm="kruskal", ignore_nan=False): """Returns a maximum spanning tree or forest on an undirected graph `G`. @@ -743,7 +744,7 @@ def maximum_spanning_tree(G, weight="weight", algorithm="kruskal", ignore_nan=Fa @py_random_state(3) -@nx._dispatch(preserve_edge_attrs=True) +@nx._dispatchable(preserve_edge_attrs=True, returns_graph=True) def random_spanning_tree(G, weight=None, *, multiplicative=True, seed=None): """ Sample a random spanning tree using the edges weights of `G`. @@ -897,14 +898,15 @@ def spanning_tree_total_weight(G, weight): # itself. if G.number_of_edges() == 1: return G.edges(data=weight).__iter__().__next__()[2] - # 2. There are more than two edges in the graph. Then, we can find the + # 2. There are no edges or two or more edges in the graph. Then, we find the # total weight of the spanning trees using the formula in the - # reference paper: take the weight of that edge and multiple it by - # the number of spanning trees which have to include that edge. This + # reference paper: take the weight of each edge and multiply it by + # the number of spanning trees which include that edge. This # can be accomplished by contracting the edge and finding the # multiplicative total spanning tree weight if the weight of each edge # is assumed to be 1, which is conveniently built into networkx already, - # by calling total_spanning_tree_weight with weight=None + # by calling total_spanning_tree_weight with weight=None. + # Note that with no edges the returned value is just zero. else: total = 0 for u, v, w in G.edges(data=weight): @@ -913,6 +915,10 @@ def spanning_tree_total_weight(G, weight): ) return total + if G.number_of_nodes() < 2: + # no edges in the spanning tree + return nx.empty_graph(G.nodes) + U = set() st_cached_value = 0 V = set(G.edges()) @@ -1021,6 +1027,7 @@ def __init__(self, G, weight="weight", minimum=True, ignore_nan=False): If `ignore_nan is True` then that edge is ignored instead. """ self.G = G.copy() + self.G.__networkx_cache__ = None # Disable caching self.weight = weight self.minimum = minimum self.ignore_nan = ignore_nan @@ -1131,3 +1138,137 @@ def _clear_partition(self, G): for u, v, d in G.edges(data=True): if self.partition_key in d: del d[self.partition_key] + + +@nx._dispatchable(edge_attrs="weight") +def number_of_spanning_trees(G, *, root=None, weight=None): + """Returns the number of spanning trees in `G`. + + A spanning tree for an undirected graph is a tree that connects + all nodes in the graph. For a directed graph, the analog of a + spanning tree is called a (spanning) arborescence. The arborescence + includes a unique directed path from the `root` node to each other node. + The graph must be weakly connected, and the root must be a node + that includes all nodes as successors [3]_. Note that to avoid + discussing sink-roots and reverse-arborescences, we have reversed + the edge orientation from [3]_ and use the in-degree laplacian. + + This function (when `weight` is `None`) returns the number of + spanning trees for an undirected graph and the number of + arborescences from a single root node for a directed graph. + When `weight` is the name of an edge attribute which holds the + weight value of each edge, the function returns the sum over + all trees of the multiplicative weight of each tree. That is, + the weight of the tree is the product of its edge weights. + + Kirchoff's Tree Matrix Theorem states that any cofactor of the + Laplacian matrix of a graph is the number of spanning trees in the + graph. (Here we use cofactors for a diagonal entry so that the + cofactor becomes the determinant of the matrix with one row + and its matching column removed.) For a weighted Laplacian matrix, + the cofactor is the sum across all spanning trees of the + multiplicative weight of each tree. That is, the weight of each + tree is the product of its edge weights. The theorem is also + known as Kirchhoff's theorem [1]_ and the Matrix-Tree theorem [2]_. + + For directed graphs, a similar theorem (Tutte's Theorem) holds with + the cofactor chosen to be the one with row and column removed that + correspond to the root. The cofactor is the number of arborescences + with the specified node as root. And the weighted version gives the + sum of the arborescence weights with root `root`. The arborescence + weight is the product of its edge weights. + + Parameters + ---------- + G : NetworkX graph + + root : node + A node in the directed graph `G` that has all nodes as descendants. + (This is ignored for undirected graphs.) + + weight : string or None, optional (default=None) + The name of the edge attribute holding the edge weight. + If `None`, then each edge is assumed to have a weight of 1. + + Returns + ------- + Number + Undirected graphs: + The number of spanning trees of the graph `G`. + Or the sum of all spanning tree weights of the graph `G` + where the weight of a tree is the product of its edge weights. + Directed graphs: + The number of arborescences of `G` rooted at node `root`. + Or the sum of all arborescence weights of the graph `G` with + specified root where the weight of an arborescence is the product + of its edge weights. + + Raises + ------ + NetworkXPointlessConcept + If `G` does not contain any nodes. + + NetworkXError + If the graph `G` is directed and the root node + is not specified or is not in G. + + Examples + -------- + >>> G = nx.complete_graph(5) + >>> round(nx.number_of_spanning_trees(G)) + 125 + + >>> G = nx.Graph() + >>> G.add_edge(1, 2, weight=2) + >>> G.add_edge(1, 3, weight=1) + >>> G.add_edge(2, 3, weight=1) + >>> round(nx.number_of_spanning_trees(G, weight="weight")) + 5 + + Notes + ----- + Self-loops are excluded. Multi-edges are contracted in one edge + equal to the sum of the weights. + + References + ---------- + .. [1] Wikipedia + "Kirchhoff's theorem." + https://en.wikipedia.org/wiki/Kirchhoff%27s_theorem + .. [2] Kirchhoff, G. R. + Über die Auflösung der Gleichungen, auf welche man + bei der Untersuchung der linearen Vertheilung + Galvanischer Ströme geführt wird + Annalen der Physik und Chemie, vol. 72, pp. 497-508, 1847. + .. [3] Margoliash, J. + "Matrix-Tree Theorem for Directed Graphs" + https://www.math.uchicago.edu/~may/VIGRE/VIGRE2010/REUPapers/Margoliash.pdf + """ + import numpy as np + + if len(G) == 0: + raise nx.NetworkXPointlessConcept("Graph G must contain at least one node.") + + # undirected G + if not nx.is_directed(G): + if not nx.is_connected(G): + return 0 + G_laplacian = nx.laplacian_matrix(G, weight=weight).toarray() + return float(np.linalg.det(G_laplacian[1:, 1:])) + + # directed G + if root is None: + raise nx.NetworkXError("Input `root` must be provided when G is directed") + if root not in G: + raise nx.NetworkXError("The node root is not in the graph G.") + if not nx.is_weakly_connected(G): + return 0 + + # Compute directed Laplacian matrix + nodelist = [root] + [n for n in G if n != root] + A = nx.adjacency_matrix(G, nodelist=nodelist, weight=weight) + D = np.diag(A.sum(axis=0)) + G_laplacian = D - A + + # Compute number of spanning trees + return float(np.linalg.det(G_laplacian[1:, 1:])) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/operations.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/operations.py index df1b4e7be..f4368d6a3 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/operations.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/operations.py @@ -32,7 +32,7 @@ def join(rooted_trees, label_attribute=None): # Argument types don't match dispatching, but allow manual selection of backend -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def join_trees(rooted_trees, *, label_attribute=None, first_label=0): """Returns a new rooted tree made by joining `rooted_trees` diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/recognition.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/recognition.py index 15bbdf7d8..a9eae9870 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/recognition.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/recognition.py @@ -79,7 +79,7 @@ @nx.utils.not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def is_arborescence(G): """ Returns True if `G` is an arborescence. @@ -119,7 +119,7 @@ def is_arborescence(G): @nx.utils.not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def is_branching(G): """ Returns True if `G` is a branching. @@ -158,7 +158,7 @@ def is_branching(G): return is_forest(G) and max(d for n, d in G.in_degree()) <= 1 -@nx._dispatch +@nx._dispatchable def is_forest(G): """ Returns True if `G` is a forest. @@ -215,7 +215,7 @@ def is_forest(G): return all(len(c) - 1 == c.number_of_edges() for c in components) -@nx._dispatch +@nx._dispatchable def is_tree(G): """ Returns True if `G` is a tree. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/__init__.cpython-312.pyc index b8455942b..ed1bb7d34 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_branchings.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_branchings.cpython-312.pyc index 1c493c1bb..3fa02f6d1 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_branchings.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_branchings.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_coding.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_coding.cpython-312.pyc index c23cc1b26..a47063350 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_coding.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_coding.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_decomposition.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_decomposition.cpython-312.pyc index 6831b9c08..e4ef0d554 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_decomposition.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_decomposition.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_mst.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_mst.cpython-312.pyc index 270ca5486..d6cbe1be3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_mst.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_mst.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_operations.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_operations.cpython-312.pyc index 53c6baab2..6ae4a4cc6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_operations.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_operations.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_recognition.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_recognition.cpython-312.pyc index 744f9ddff..ffb2622bc 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_recognition.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/__pycache__/test_recognition.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_branchings.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_branchings.py index ad1cc33b9..905860671 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_branchings.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_branchings.py @@ -630,3 +630,29 @@ def test_arborescence_iterator_initial_partition(): for e in excluded_edges: assert e not in B.edges assert arborescence_count == 16 + + +def test_branchings_with_default_weights(): + """ + Tests that various brancing algorithms work on graphs without weights. + For more information, see issue #7279. + """ + graph = nx.erdos_renyi_graph(10, p=0.2, directed=True, seed=123) + + assert all( + "weight" not in d for (u, v, d) in graph.edges(data=True) + ), "test is for graphs without a weight attribute" + + # Calling these functions will modify graph inplace to add weights + # copy the graph to avoid this. + nx.minimum_spanning_arborescence(graph.copy()) + nx.maximum_spanning_arborescence(graph.copy()) + nx.minimum_branching(graph.copy()) + nx.maximum_branching(graph.copy()) + nx.algorithms.tree.minimal_branching(graph.copy()) + nx.algorithms.tree.branching_weight(graph.copy()) + nx.algorithms.tree.greedy_branching(graph.copy()) + + assert all( + "weight" not in d for (u, v, d) in graph.edges(data=True) + ), "The above calls should not modify the initial graph in-place" diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_mst.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_mst.py index 373f16cf7..65000c425 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_mst.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_mst.py @@ -706,3 +706,151 @@ def test_random_spanning_tree_additive_large(): # Assert that p is greater than the significance level so that we do not # reject the null hypothesis assert not p < 0.05 + + +def test_random_spanning_tree_empty_graph(): + G = nx.Graph() + rst = nx.tree.random_spanning_tree(G) + assert len(rst.nodes) == 0 + assert len(rst.edges) == 0 + + +def test_random_spanning_tree_single_node_graph(): + G = nx.Graph() + G.add_node(0) + rst = nx.tree.random_spanning_tree(G) + assert len(rst.nodes) == 1 + assert len(rst.edges) == 0 + + +def test_random_spanning_tree_single_node_loop(): + G = nx.Graph() + G.add_node(0) + G.add_edge(0, 0) + rst = nx.tree.random_spanning_tree(G) + assert len(rst.nodes) == 1 + assert len(rst.edges) == 0 + + +class TestNumberSpanningTrees: + @classmethod + def setup_class(cls): + global np + np = pytest.importorskip("numpy") + sp = pytest.importorskip("scipy") + + def test_nst_disconnected(self): + G = nx.empty_graph(2) + assert np.isclose(nx.number_of_spanning_trees(G), 0) + + def test_nst_no_nodes(self): + G = nx.Graph() + with pytest.raises(nx.NetworkXPointlessConcept): + nx.number_of_spanning_trees(G) + + def test_nst_weight(self): + G = nx.Graph() + G.add_edge(1, 2, weight=1) + G.add_edge(1, 3, weight=1) + G.add_edge(2, 3, weight=2) + # weights are ignored + assert np.isclose(nx.number_of_spanning_trees(G), 3) + # including weight + assert np.isclose(nx.number_of_spanning_trees(G, weight="weight"), 5) + + def test_nst_negative_weight(self): + G = nx.Graph() + G.add_edge(1, 2, weight=1) + G.add_edge(1, 3, weight=-1) + G.add_edge(2, 3, weight=-2) + # weights are ignored + assert np.isclose(nx.number_of_spanning_trees(G), 3) + # including weight + assert np.isclose(nx.number_of_spanning_trees(G, weight="weight"), -1) + + def test_nst_selfloop(self): + # self-loops are ignored + G = nx.complete_graph(3) + G.add_edge(1, 1) + assert np.isclose(nx.number_of_spanning_trees(G), 3) + + def test_nst_multigraph(self): + G = nx.MultiGraph() + G.add_edge(1, 2) + G.add_edge(1, 2) + G.add_edge(1, 3) + G.add_edge(2, 3) + assert np.isclose(nx.number_of_spanning_trees(G), 5) + + def test_nst_complete_graph(self): + # this is known as Cayley's formula + N = 5 + G = nx.complete_graph(N) + assert np.isclose(nx.number_of_spanning_trees(G), N ** (N - 2)) + + def test_nst_path_graph(self): + G = nx.path_graph(5) + assert np.isclose(nx.number_of_spanning_trees(G), 1) + + def test_nst_cycle_graph(self): + G = nx.cycle_graph(5) + assert np.isclose(nx.number_of_spanning_trees(G), 5) + + def test_nst_directed_noroot(self): + G = nx.empty_graph(3, create_using=nx.MultiDiGraph) + with pytest.raises(nx.NetworkXError): + nx.number_of_spanning_trees(G) + + def test_nst_directed_root_not_exist(self): + G = nx.empty_graph(3, create_using=nx.MultiDiGraph) + with pytest.raises(nx.NetworkXError): + nx.number_of_spanning_trees(G, root=42) + + def test_nst_directed_not_weak_connected(self): + G = nx.DiGraph() + G.add_edge(1, 2) + G.add_edge(3, 4) + assert np.isclose(nx.number_of_spanning_trees(G, root=1), 0) + + def test_nst_directed_cycle_graph(self): + G = nx.DiGraph() + G = nx.cycle_graph(7, G) + assert np.isclose(nx.number_of_spanning_trees(G, root=0), 1) + + def test_nst_directed_complete_graph(self): + G = nx.DiGraph() + G = nx.complete_graph(7, G) + assert np.isclose(nx.number_of_spanning_trees(G, root=0), 7**5) + + def test_nst_directed_multi(self): + G = nx.MultiDiGraph() + G = nx.cycle_graph(3, G) + G.add_edge(1, 2) + assert np.isclose(nx.number_of_spanning_trees(G, root=0), 2) + + def test_nst_directed_selfloop(self): + G = nx.MultiDiGraph() + G = nx.cycle_graph(3, G) + G.add_edge(1, 1) + assert np.isclose(nx.number_of_spanning_trees(G, root=0), 1) + + def test_nst_directed_weak_connected(self): + G = nx.MultiDiGraph() + G = nx.cycle_graph(3, G) + G.remove_edge(1, 2) + assert np.isclose(nx.number_of_spanning_trees(G, root=0), 0) + + def test_nst_directed_weighted(self): + # from root=1: + # arborescence 1: 1->2, 1->3, weight=2*1 + # arborescence 2: 1->2, 2->3, weight=2*3 + G = nx.DiGraph() + G.add_edge(1, 2, weight=2) + G.add_edge(1, 3, weight=1) + G.add_edge(2, 3, weight=3) + Nst = nx.number_of_spanning_trees(G, root=1, weight="weight") + assert np.isclose(Nst, 8) + Nst = nx.number_of_spanning_trees(G, root=2, weight="weight") + assert np.isclose(Nst, 0) + Nst = nx.number_of_spanning_trees(G, root=3, weight="weight") + assert np.isclose(Nst, 0) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_recognition.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_recognition.py index a9c6c5aad..105f5a89e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_recognition.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/tree/tests/test_recognition.py @@ -119,6 +119,12 @@ def test_emptybranch(): assert not nx.is_arborescence(G) +def test_is_branching_empty_graph_raises(): + G = nx.DiGraph() + with pytest.raises(nx.NetworkXPointlessConcept, match="G has no nodes."): + nx.is_branching(G) + + def test_path(): G = nx.DiGraph() nx.add_path(G, range(5)) @@ -160,3 +166,9 @@ def test_notarborescence2(): G.add_edge(6, 4) assert not nx.is_branching(G) assert not nx.is_arborescence(G) + + +def test_is_arborescense_empty_graph_raises(): + G = nx.DiGraph() + with pytest.raises(nx.NetworkXPointlessConcept, match="G has no nodes."): + nx.is_arborescence(G) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/triads.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/triads.py index 0041b83d8..1e67c1453 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/triads.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/triads.py @@ -129,7 +129,7 @@ def _tricode(G, v, u, w): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def triadic_census(G, nodelist=None): """Determines the triadic census of a directed graph. @@ -155,7 +155,6 @@ def triadic_census(G, nodelist=None): >>> triadic_census = nx.triadic_census(G) >>> for key, value in triadic_census.items(): ... print(f"{key}: {value}") - ... 003: 0 012: 0 102: 0 @@ -178,6 +177,11 @@ def triadic_census(G, nodelist=None): This algorithm has complexity $O(m)$ where $m$ is the number of edges in the graph. + For undirected graphs, the triadic census can be computed by first converting + the graph into a directed graph using the ``G.to_directed()`` method. + After this conversion, only the triad types 003, 102, 201 and 300 will be + present in the undirected scenario. + Raises ------ ValueError @@ -276,7 +280,7 @@ def triadic_census(G, nodelist=None): return census -@nx._dispatch +@nx._dispatchable def is_triad(G): """Returns True if the graph G is a triad, else False. @@ -307,10 +311,17 @@ def is_triad(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def all_triplets(G): """Returns a generator of all possible sets of 3 nodes in a DiGraph. + .. deprecated:: 3.3 + + all_triplets is deprecated and will be removed in NetworkX version 3.5. + Use `itertools.combinations` instead:: + + all_triplets = itertools.combinations(G, 3) + Parameters ---------- G : digraph @@ -328,12 +339,22 @@ def all_triplets(G): [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)] """ + import warnings + + warnings.warn( + ( + "\n\nall_triplets is deprecated and will be rmoved in v3.5.\n" + "Use `itertools.combinations(G, 3)` instead." + ), + category=DeprecationWarning, + stacklevel=4, + ) triplets = combinations(G.nodes(), 3) return triplets @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable(returns_graph=True) def all_triads(G): """A generator of all possible triads in G. @@ -364,7 +385,7 @@ def all_triads(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def triads_by_type(G): """Returns a list of all triads for each triad type in a directed graph. There are exactly 16 different types of triads possible. Suppose 1, 2, 3 are three @@ -405,9 +426,9 @@ def triads_by_type(G): -------- >>> G = nx.DiGraph([(1, 2), (1, 3), (2, 3), (3, 1), (5, 6), (5, 4), (6, 7)]) >>> dict = nx.triads_by_type(G) - >>> dict['120C'][0].edges() + >>> dict["120C"][0].edges() OutEdgeView([(1, 2), (1, 3), (2, 3), (3, 1)]) - >>> dict['012'][0].edges() + >>> dict["012"][0].edges() OutEdgeView([(1, 2)]) References @@ -427,7 +448,7 @@ def triads_by_type(G): @not_implemented_for("undirected") -@nx._dispatch +@nx._dispatchable def triad_type(G): """Returns the sociological triad type for a triad. @@ -526,10 +547,17 @@ def triad_type(G): @not_implemented_for("undirected") @py_random_state(1) -@nx._dispatch +@nx._dispatchable(preserve_all_attrs=True, returns_graph=True) def random_triad(G, seed=None): """Returns a random triad from a directed graph. + .. deprecated:: 3.3 + + random_triad is deprecated and will be removed in version 3.5. + Use random sampling directly instead:: + + G.subgraph(random.sample(list(G), 3)) + Parameters ---------- G : digraph @@ -556,6 +584,17 @@ def random_triad(G, seed=None): OutEdgeView([(1, 2)]) """ + import warnings + + warnings.warn( + ( + "\n\nrandom_triad is deprecated and will be removed in NetworkX v3.5.\n" + "Use random.sample instead, e.g.::\n\n" + "\tG.subgraph(random.sample(list(G), 3))\n" + ), + category=DeprecationWarning, + stacklevel=5, + ) if len(G) < 3: raise nx.NetworkXError( f"G needs at least 3 nodes to form a triad; (it has {len(G)} nodes)" diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/vitality.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/vitality.py index c41efd13f..29f98fd1b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/vitality.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/vitality.py @@ -8,7 +8,7 @@ __all__ = ["closeness_vitality"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def closeness_vitality(G, node=None, weight=None, wiener_index=None): """Returns the closeness vitality for nodes in the graph. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/voronoi.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/voronoi.py index af17f013e..60c453323 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/voronoi.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/voronoi.py @@ -5,7 +5,7 @@ __all__ = ["voronoi_cells"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def voronoi_cells(G, center_nodes, weight="weight"): """Returns the Voronoi cells centered at `center_nodes` with respect to the shortest-path distance metric. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/walks.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/walks.py index 6f357ce1d..fe3417577 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/walks.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/walks.py @@ -6,7 +6,7 @@ __all__ = ["number_of_walks"] -@nx._dispatch +@nx._dispatchable def number_of_walks(G, walk_length): """Returns the number of walks connecting each pair of nodes in `G` @@ -74,7 +74,7 @@ def number_of_walks(G, walk_length): # power = sp.sparse.linalg.matrix_power(A, walk_length) power = np.linalg.matrix_power(A.toarray(), walk_length) result = { - u: {v: power[u_idx, v_idx] for v_idx, v in enumerate(G)} + u: {v: power.item(u_idx, v_idx) for v_idx, v in enumerate(G)} for u_idx, u in enumerate(G) } return result diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/wiener.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/wiener.py index 9e81cdc72..cb55d609f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/wiener.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/algorithms/wiener.py @@ -1,39 +1,49 @@ -"""Functions related to the Wiener index of a graph.""" +"""Functions related to the Wiener Index of a graph. -from itertools import chain +The Wiener Index is a topological measure of a graph +related to the distance between nodes and their degree. +The Schultz Index and Gutman Index are similar measures. +They are used categorize molecules via the network of +atoms connected by chemical bonds. The indices are +correlated with functional aspects of the molecules. -import networkx as nx +References +---------- +.. [1] `Wikipedia: Wiener Index `_ +.. [2] M.V. Diudeaa and I. Gutman, Wiener-Type Topological Indices, + Croatica Chemica Acta, 71 (1998), 21-51. + https://hrcak.srce.hr/132323 +""" -from .components import is_connected, is_strongly_connected -from .shortest_paths import shortest_path_length as spl +import itertools as it -__all__ = ["wiener_index"] +import networkx as nx -#: Rename the :func:`chain.from_iterable` function for the sake of -#: brevity. -chaini = chain.from_iterable +__all__ = ["wiener_index", "schultz_index", "gutman_index"] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def wiener_index(G, weight=None): """Returns the Wiener index of the given graph. The *Wiener index* of a graph is the sum of the shortest-path - distances between each pair of reachable nodes. For pairs of nodes - in undirected graphs, only one orientation of the pair is counted. + (weighted) distances between each pair of reachable nodes. + For pairs of nodes in undirected graphs, only one orientation + of the pair is counted. Parameters ---------- G : NetworkX graph - weight : object - The edge attribute to use as distance when computing - shortest-path distances. This is passed directly to the - :func:`networkx.shortest_path_length` function. + weight : string or None, optional (default: None) + If None, every edge has weight 1. + If a string, use this edge attribute as the edge weight. + Any edge attribute not present defaults to 1. + The edge weights are used to computing shortest-path distances. Returns ------- - float + number The Wiener index of the graph `G`. Raises @@ -68,12 +78,149 @@ def wiener_index(G, weight=None): >>> nx.wiener_index(G) inf + References + ---------- + .. [1] `Wikipedia: Wiener Index `_ """ - is_directed = G.is_directed() - if (is_directed and not is_strongly_connected(G)) or ( - not is_directed and not is_connected(G) - ): + connected = nx.is_strongly_connected(G) if G.is_directed() else nx.is_connected(G) + if not connected: return float("inf") - total = sum(chaini(p.values() for v, p in spl(G, weight=weight))) + + spl = nx.shortest_path_length(G, weight=weight) + total = sum(it.chain.from_iterable(nbrs.values() for node, nbrs in spl)) # Need to account for double counting pairs of nodes in undirected graphs. - return total if is_directed else total / 2 + return total if G.is_directed() else total / 2 + + +@nx.utils.not_implemented_for("directed") +@nx.utils.not_implemented_for("multigraph") +@nx._dispatchable(edge_attrs="weight") +def schultz_index(G, weight=None): + r"""Returns the Schultz Index (of the first kind) of `G` + + The *Schultz Index* [3]_ of a graph is the sum over all node pairs of + distances times the sum of degrees. Consider an undirected graph `G`. + For each node pair ``(u, v)`` compute ``dist(u, v) * (deg(u) + deg(v)`` + where ``dist`` is the shortest path length between two nodes and ``deg`` + is the degree of a node. + + The Schultz Index is the sum of these quantities over all (unordered) + pairs of nodes. + + Parameters + ---------- + G : NetworkX graph + The undirected graph of interest. + weight : string or None, optional (default: None) + If None, every edge has weight 1. + If a string, use this edge attribute as the edge weight. + Any edge attribute not present defaults to 1. + The edge weights are used to computing shortest-path distances. + + Returns + ------- + number + The first kind of Schultz Index of the graph `G`. + + Examples + -------- + The Schultz Index of the (unweighted) complete graph on *n* nodes + equals the number of pairs of the *n* nodes times ``2 * (n - 1)``, + since each pair of nodes is at distance one and the sum of degree + of two nodes is ``2 * (n - 1)``. + + >>> n = 10 + >>> G = nx.complete_graph(n) + >>> nx.schultz_index(G) == (n * (n - 1) / 2) * (2 * (n - 1)) + True + + Graph that is disconnected + + >>> nx.schultz_index(nx.empty_graph(2)) + inf + + References + ---------- + .. [1] I. Gutman, Selected properties of the Schultz molecular topological index, + J. Chem. Inf. Comput. Sci. 34 (1994), 1087–1089. + https://doi.org/10.1021/ci00021a009 + .. [2] M.V. Diudeaa and I. Gutman, Wiener-Type Topological Indices, + Croatica Chemica Acta, 71 (1998), 21-51. + https://hrcak.srce.hr/132323 + .. [3] H. P. Schultz, Topological organic chemistry. 1. + Graph theory and topological indices of alkanes,i + J. Chem. Inf. Comput. Sci. 29 (1989), 239–257. + + """ + if not nx.is_connected(G): + return float("inf") + + spl = nx.shortest_path_length(G, weight=weight) + d = dict(G.degree, weight=weight) + return sum(dist * (d[u] + d[v]) for u, info in spl for v, dist in info.items()) / 2 + + +@nx.utils.not_implemented_for("directed") +@nx.utils.not_implemented_for("multigraph") +@nx._dispatchable(edge_attrs="weight") +def gutman_index(G, weight=None): + r"""Returns the Gutman Index for the graph `G`. + + The *Gutman Index* measures the topology of networks, especially for molecule + networks of atoms connected by bonds [1]_. It is also called the Schultz Index + of the second kind [2]_. + + Consider an undirected graph `G` with node set ``V``. + The Gutman Index of a graph is the sum over all (unordered) pairs of nodes + of nodes ``(u, v)``, with distance ``dist(u, v)`` and degrees ``deg(u)`` + and ``deg(v)``, of ``dist(u, v) * deg(u) * deg(v)`` + + Parameters + ---------- + G : NetworkX graph + + weight : string or None, optional (default: None) + If None, every edge has weight 1. + If a string, use this edge attribute as the edge weight. + Any edge attribute not present defaults to 1. + The edge weights are used to computing shortest-path distances. + + Returns + ------- + number + The Gutman Index of the graph `G`. + + Examples + -------- + The Gutman Index of the (unweighted) complete graph on *n* nodes + equals the number of pairs of the *n* nodes times ``(n - 1) * (n - 1)``, + since each pair of nodes is at distance one and the product of degree of two + vertices is ``(n - 1) * (n - 1)``. + + >>> n = 10 + >>> G = nx.complete_graph(n) + >>> nx.gutman_index(G) == (n * (n - 1) / 2) * ((n - 1) * (n - 1)) + True + + Graphs that are disconnected + + >>> G = nx.empty_graph(2) + >>> nx.gutman_index(G) + inf + + References + ---------- + .. [1] M.V. Diudeaa and I. Gutman, Wiener-Type Topological Indices, + Croatica Chemica Acta, 71 (1998), 21-51. + https://hrcak.srce.hr/132323 + .. [2] I. Gutman, Selected properties of the Schultz molecular topological index, + J. Chem. Inf. Comput. Sci. 34 (1994), 1087–1089. + https://doi.org/10.1021/ci00021a009 + + """ + if not nx.is_connected(G): + return float("inf") + + spl = nx.shortest_path_length(G, weight=weight) + d = dict(G.degree, weight=weight) + return sum(dist * d[u] * d[v] for u, vinfo in spl for v, dist in vinfo.items()) / 2 diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/__init__.cpython-312.pyc index 9d15f82b7..69406e748 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/coreviews.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/coreviews.cpython-312.pyc index 1a52f5226..b390c4d70 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/coreviews.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/coreviews.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/digraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/digraph.cpython-312.pyc index 7f7b30f34..83e0c1c6a 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/digraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/digraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/filters.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/filters.cpython-312.pyc index 023578f09..e4f431201 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/filters.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/filters.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/function.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/function.cpython-312.pyc index df3c0c360..cfea2cccb 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/function.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/function.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graph.cpython-312.pyc index 9227c4593..9c67ff8f2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graphviews.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graphviews.cpython-312.pyc index 097cfaa27..7d53a0625 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graphviews.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/graphviews.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multidigraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multidigraph.cpython-312.pyc index 20eaec706..4ac64edda 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multidigraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multidigraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multigraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multigraph.cpython-312.pyc index e52c2ef74..474b9b3f3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multigraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/multigraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/reportviews.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/reportviews.cpython-312.pyc index 51a574327..39b0fd12f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/reportviews.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/__pycache__/reportviews.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/coreviews.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/coreviews.py index 5c4defe94..f4b54c7b7 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/coreviews.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/coreviews.py @@ -264,6 +264,18 @@ def __getitem__(self, node): class FilterAtlas(Mapping): # nodedict, nbrdict, keydict + """A read-only Mapping of Mappings with filtering criteria for nodes. + + It is a view into a dict-of-dict data structure, and it selects only + nodes that meet the criteria defined by ``NODE_OK``. + + See Also + ======== + FilterAdjacency + FilterMultiInner + FilterMultiAdjacency + """ + def __init__(self, d, NODE_OK): self._atlas = d self.NODE_OK = NODE_OK @@ -293,6 +305,19 @@ def __repr__(self): class FilterAdjacency(Mapping): # edgedict + """A read-only Mapping of Mappings with filtering criteria for nodes and edges. + + It is a view into a dict-of-dict-of-dict data structure, and it selects nodes + and edges that satisfy specific criteria defined by ``NODE_OK`` and ``EDGE_OK``, + respectively. + + See Also + ======== + FilterAtlas + FilterMultiInner + FilterMultiAdjacency + """ + def __init__(self, d, NODE_OK, EDGE_OK): self._atlas = d self.NODE_OK = NODE_OK @@ -328,6 +353,18 @@ def __repr__(self): class FilterMultiInner(FilterAdjacency): # muliedge_seconddict + """A read-only Mapping of Mappings with filtering criteria for nodes and edges. + + It is a view into a dict-of-dict-of-dict-of-dict data structure, and it selects nodes + and edges that meet specific criteria defined by ``NODE_OK`` and ``EDGE_OK``. + + See Also + ======== + FilterAtlas + FilterAdjacency + FilterMultiAdjacency + """ + def __iter__(self): try: # check that NODE_OK has attr 'nodes' node_ok_shorter = 2 * len(self.NODE_OK.nodes) < len(self._atlas) @@ -357,6 +394,20 @@ def new_node_ok(key): class FilterMultiAdjacency(FilterAdjacency): # multiedgedict + """A read-only Mapping of Mappings with filtering criteria + for nodes and edges. + + It is a view into a dict-of-dict-of-dict-of-dict data structure, + and it selects nodes and edges that satisfy specific criteria + defined by ``NODE_OK`` and ``EDGE_OK``, respectively. + + See Also + ======== + FilterAtlas + FilterAdjacency + FilterMultiInner + """ + def __getitem__(self, node): if node in self._atlas and self.NODE_OK(node): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/digraph.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/digraph.py index 988ed5998..fc2374a2b 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/digraph.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/digraph.py @@ -355,6 +355,7 @@ def __init__(self, incoming_graph_data=None, **attr): self._pred = self.adjlist_outer_dict_factory() # predecessor # Note: self._succ = self._adj # successor + self.__networkx_cache__ = {} # attempt to load graph with data if incoming_graph_data is not None: convert.to_networkx_graph(incoming_graph_data, create_using=self) @@ -465,6 +466,7 @@ def add_node(self, node_for_adding, **attr): attr_dict.update(attr) else: # update attr even if node already exists self._node[node_for_adding].update(attr) + nx._clear_cache(self) def add_nodes_from(self, nodes_for_adding, **attr): """Add multiple nodes. @@ -543,6 +545,7 @@ def add_nodes_from(self, nodes_for_adding, **attr): self._pred[n] = self.adjlist_inner_dict_factory() self._node[n] = self.node_attr_dict_factory() self._node[n].update(newdict) + nx._clear_cache(self) def remove_node(self, n): """Remove node n. @@ -585,6 +588,7 @@ def remove_node(self, n): for u in self._pred[n]: del self._succ[u][n] # remove all edges n-u in digraph del self._pred[n] # remove node from pred + nx._clear_cache(self) def remove_nodes_from(self, nodes): """Remove multiple nodes. @@ -639,6 +643,7 @@ def remove_nodes_from(self, nodes): del self._pred[n] # now remove node except KeyError: pass # silent failure on remove + nx._clear_cache(self) def add_edge(self, u_of_edge, v_of_edge, **attr): """Add an edge between u and v. @@ -709,6 +714,7 @@ def add_edge(self, u_of_edge, v_of_edge, **attr): datadict.update(attr) self._succ[u][v] = datadict self._pred[v][u] = datadict + nx._clear_cache(self) def add_edges_from(self, ebunch_to_add, **attr): """Add all the edges in ebunch_to_add. @@ -791,6 +797,7 @@ def add_edges_from(self, ebunch_to_add, **attr): datadict.update(dd) self._succ[u][v] = datadict self._pred[v][u] = datadict + nx._clear_cache(self) def remove_edge(self, u, v): """Remove the edge between u and v. @@ -824,6 +831,7 @@ def remove_edge(self, u, v): del self._pred[v][u] except KeyError as err: raise NetworkXError(f"The edge {u}-{v} not in graph.") from err + nx._clear_cache(self) def remove_edges_from(self, ebunch): """Remove all edges specified in ebunch. @@ -856,6 +864,7 @@ def remove_edges_from(self, ebunch): if u in self._succ and v in self._succ[u]: del self._succ[u][v] del self._pred[v][u] + nx._clear_cache(self) def has_successor(self, u, v): """Returns True if node u has successor v. @@ -1026,7 +1035,7 @@ def in_edges(self): Examples -------- >>> G = nx.DiGraph() - >>> G.add_edge(1, 2, color='blue') + >>> G.add_edge(1, 2, color="blue") >>> G.in_edges() InEdgeView([(1, 2)]) >>> G.in_edges(nbunch=2) @@ -1195,6 +1204,7 @@ def clear(self): self._pred.clear() self._node.clear() self.graph.clear() + nx._clear_cache(self) def clear_edges(self): """Remove all edges from the graph without altering nodes. @@ -1213,6 +1223,7 @@ def clear_edges(self): predecessor_dict.clear() for successor_dict in self._succ.values(): successor_dict.clear() + nx._clear_cache(self) def is_multigraph(self): """Returns True if graph is a multigraph, False otherwise.""" diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/filters.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/filters.py index aefcbdf3f..215aa375d 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/filters.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/filters.py @@ -18,36 +18,44 @@ def no_filter(*items): + """Returns a filter function that always evaluates to True.""" return True def hide_nodes(nodes): + """Returns a filter function that hides specific nodes.""" nodes = set(nodes) return lambda node: node not in nodes def hide_diedges(edges): + """Returns a filter function that hides specific directed edges.""" edges = {(u, v) for u, v in edges} return lambda u, v: (u, v) not in edges def hide_edges(edges): + """Returns a filter function that hides specific undirected edges.""" alledges = set(edges) | {(v, u) for (u, v) in edges} return lambda u, v: (u, v) not in alledges def hide_multidiedges(edges): + """Returns a filter function that hides specific multi-directed edges.""" edges = {(u, v, k) for u, v, k in edges} return lambda u, v, k: (u, v, k) not in edges def hide_multiedges(edges): + """Returns a filter function that hides specific multi-undirected edges.""" alledges = set(edges) | {(v, u, k) for (u, v, k) in edges} return lambda u, v, k: (u, v, k) not in alledges # write show_nodes as a class to make SubGraph pickleable class show_nodes: + """Filter class to show specific nodes.""" + def __init__(self, nodes): self.nodes = set(nodes) @@ -56,20 +64,24 @@ def __call__(self, node): def show_diedges(edges): + """Returns a filter function that shows specific directed edges.""" edges = {(u, v) for u, v in edges} return lambda u, v: (u, v) in edges def show_edges(edges): + """Returns a filter function that shows specific undirected edges.""" alledges = set(edges) | {(v, u) for (u, v) in edges} return lambda u, v: (u, v) in alledges def show_multidiedges(edges): + """Returns a filter function that shows specific multi-directed edges.""" edges = {(u, v, k) for u, v, k in edges} return lambda u, v, k: (u, v, k) in edges def show_multiedges(edges): + """Returns a filter function that shows specific multi-undirected edges.""" alledges = set(edges) | {(v, u, k) for (u, v, k) in edges} return lambda u, v, k: (u, v, k) in alledges diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/function.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/function.py index 4890044f4..f87b7897f 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/function.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/function.py @@ -49,7 +49,10 @@ def nodes(G): - """Returns an iterator over the graph nodes.""" + """Returns a NodeView over the graph nodes. + + This function wraps the :func:`G.nodes ` property. + """ return G.nodes() @@ -59,6 +62,8 @@ def edges(G, nbunch=None): Return all edges if nbunch is unspecified or nbunch=None. For digraphs, edges=out_edges + + This function wraps the :func:`G.edges ` property. """ return G.edges(nbunch) @@ -66,22 +71,33 @@ def edges(G, nbunch=None): def degree(G, nbunch=None, weight=None): """Returns a degree view of single node or of nbunch of nodes. If nbunch is omitted, then return degrees of *all* nodes. + + This function wraps the :func:`G.degree ` property. """ return G.degree(nbunch, weight) def neighbors(G, n): - """Returns a list of nodes connected to node n.""" + """Returns an iterator over all neighbors of node n. + + This function wraps the :func:`G.neighbors ` function. + """ return G.neighbors(n) def number_of_nodes(G): - """Returns the number of nodes in the graph.""" + """Returns the number of nodes in the graph. + + This function wraps the :func:`G.number_of_nodes ` function. + """ return G.number_of_nodes() def number_of_edges(G): - """Returns the number of edges in the graph.""" + """Returns the number of edges in the graph. + + This function wraps the :func:`G.number_of_edges ` function. + """ return G.number_of_edges() @@ -140,7 +156,7 @@ def degree_histogram(G): (Order(number_of_edges)) """ counts = Counter(d for n, d in G.degree()) - return [counts.get(i, 0) for i in range(max(counts) + 1)] + return [counts.get(i, 0) for i in range(max(counts) + 1 if counts else 0)] def is_directed(G): @@ -647,6 +663,7 @@ def set_node_attributes(G, values, name=None): G.nodes[n].update(d) except KeyError: pass + nx._clear_cache(G) def get_node_attributes(G, name, default=None): @@ -793,13 +810,13 @@ def set_edge_attributes(G, values, name=None): if G.is_multigraph(): for (u, v, key), value in values.items(): try: - G[u][v][key][name] = value + G._adj[u][v][key][name] = value except KeyError: pass else: for (u, v), value in values.items(): try: - G[u][v][name] = value + G._adj[u][v][name] = value except KeyError: pass except AttributeError: @@ -811,15 +828,16 @@ def set_edge_attributes(G, values, name=None): if G.is_multigraph(): for (u, v, key), d in values.items(): try: - G[u][v][key].update(d) + G._adj[u][v][key].update(d) except KeyError: pass else: for (u, v), d in values.items(): try: - G[u][v].update(d) + G._adj[u][v].update(d) except KeyError: pass + nx._clear_cache(G) def get_edge_attributes(G, name, default=None): @@ -902,11 +920,10 @@ def non_neighbors(graph, node): Returns ------- - non_neighbors : iterator - Iterator of nodes in the graph that are not neighbors of the node. + non_neighbors : set + Set of nodes in the graph that are not neighbors of the node. """ - nbors = set(neighbors(graph, node)) | {node} - return (nnode for nnode in graph if nnode not in nbors) + return graph._adj.keys() - graph._adj[node].keys() - {node} def non_edges(graph): @@ -948,8 +965,8 @@ def common_neighbors(G, u, v): Returns ------- - cnbors : iterator - Iterator of common neighbors of u and v in the graph. + cnbors : set + Set of common neighbors of u and v in the graph. Raises ------ @@ -967,9 +984,7 @@ def common_neighbors(G, u, v): if v not in G: raise nx.NetworkXError("v is not in the graph.") - # Return a generator explicitly instead of yielding so that the above - # checks are executed eagerly. - return (w for w in G[u] if w in G[v] and w not in (u, v)) + return G._adj[u].keys() & G._adj[v].keys() - {u, v} def is_weighted(G, edge=None, weight="weight"): @@ -1025,6 +1040,7 @@ def is_weighted(G, edge=None, weight="weight"): return all(weight in data for u, v, data in G.edges(data=True)) +@nx._dispatchable(edge_attrs="weight") def is_negatively_weighted(G, edge=None, weight="weight"): """Returns True if `G` has negatively weighted edges. @@ -1098,7 +1114,7 @@ def is_empty(G): is the number of nodes in the graph. """ - return not any(G.adj.values()) + return not any(G._adj.values()) def nodes_with_selfloops(G): @@ -1125,7 +1141,7 @@ def nodes_with_selfloops(G): [1] """ - return (n for n, nbrs in G.adj.items() if n in nbrs) + return (n for n, nbrs in G._adj.items() if n in nbrs) def selfloop_edges(G, data=False, keys=False, default=None): @@ -1175,56 +1191,59 @@ def selfloop_edges(G, data=False, keys=False, default=None): if keys is True: return ( (n, n, k, d) - for n, nbrs in G.adj.items() + for n, nbrs in G._adj.items() if n in nbrs for k, d in nbrs[n].items() ) else: return ( (n, n, d) - for n, nbrs in G.adj.items() + for n, nbrs in G._adj.items() if n in nbrs for d in nbrs[n].values() ) else: - return ((n, n, nbrs[n]) for n, nbrs in G.adj.items() if n in nbrs) + return ((n, n, nbrs[n]) for n, nbrs in G._adj.items() if n in nbrs) elif data is not False: if G.is_multigraph(): if keys is True: return ( (n, n, k, d.get(data, default)) - for n, nbrs in G.adj.items() + for n, nbrs in G._adj.items() if n in nbrs for k, d in nbrs[n].items() ) else: return ( (n, n, d.get(data, default)) - for n, nbrs in G.adj.items() + for n, nbrs in G._adj.items() if n in nbrs for d in nbrs[n].values() ) else: return ( (n, n, nbrs[n].get(data, default)) - for n, nbrs in G.adj.items() + for n, nbrs in G._adj.items() if n in nbrs ) else: if G.is_multigraph(): if keys is True: return ( - (n, n, k) for n, nbrs in G.adj.items() if n in nbrs for k in nbrs[n] + (n, n, k) + for n, nbrs in G._adj.items() + if n in nbrs + for k in nbrs[n] ) else: return ( (n, n) - for n, nbrs in G.adj.items() + for n, nbrs in G._adj.items() if n in nbrs for i in range(len(nbrs[n])) # for easy edge removal (#4068) ) else: - return ((n, n) for n, nbrs in G.adj.items() if n in nbrs) + return ((n, n) for n, nbrs in G._adj.items() if n in nbrs) def number_of_selfloops(G): @@ -1272,7 +1291,10 @@ def is_path(G, path): True if `path` is a valid path in `G` """ - return all((node in G and nbr in G[node]) for node, nbr in nx.utils.pairwise(path)) + try: + return all(nbr in G._adj[node] for node, nbr in nx.utils.pairwise(path)) + except (KeyError, TypeError): + return False def path_weight(G, path, weight): @@ -1307,7 +1329,7 @@ def path_weight(G, path, weight): raise nx.NetworkXNoPath("path does not exist") for node, nbr in nx.utils.pairwise(path): if multigraph: - cost += min(v[weight] for v in G[node][nbr].values()) + cost += min(v[weight] for v in G._adj[node][nbr].values()) else: - cost += G[node][nbr][weight] + cost += G._adj[node][nbr][weight] return cost diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graph.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graph.py index 5bbf079a4..bf628ed62 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graph.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graph.py @@ -365,6 +365,7 @@ def __init__(self, incoming_graph_data=None, **attr): self.graph = self.graph_attr_dict_factory() # dictionary for graph attributes self._node = self.node_dict_factory() # empty node attribute dict self._adj = self.adjlist_outer_dict_factory() # empty adjacency dict + self.__networkx_cache__ = {} # attempt to load graph with data if incoming_graph_data is not None: convert.to_networkx_graph(incoming_graph_data, create_using=self) @@ -403,6 +404,7 @@ def name(self): @name.setter def name(self, s): self.graph["name"] = s + nx._clear_cache(self) def __str__(self): """Returns a short summary of the graph. @@ -559,6 +561,7 @@ def add_node(self, node_for_adding, **attr): attr_dict.update(attr) else: # update attr even if node already exists self._node[node_for_adding].update(attr) + nx._clear_cache(self) def add_nodes_from(self, nodes_for_adding, **attr): """Add multiple nodes. @@ -636,6 +639,7 @@ def add_nodes_from(self, nodes_for_adding, **attr): self._adj[n] = self.adjlist_inner_dict_factory() self._node[n] = self.node_attr_dict_factory() self._node[n].update(newdict) + nx._clear_cache(self) def remove_node(self, n): """Remove node n. @@ -676,6 +680,7 @@ def remove_node(self, n): for u in nbrs: del adj[u][n] # remove all edges n-u in graph del adj[n] # now remove node + nx._clear_cache(self) def remove_nodes_from(self, nodes): """Remove multiple nodes. @@ -728,6 +733,7 @@ def remove_nodes_from(self, nodes): del adj[n] except KeyError: pass + nx._clear_cache(self) @cached_property def nodes(self): @@ -957,6 +963,7 @@ def add_edge(self, u_of_edge, v_of_edge, **attr): datadict.update(attr) self._adj[u][v] = datadict self._adj[v][u] = datadict + nx._clear_cache(self) def add_edges_from(self, ebunch_to_add, **attr): """Add all the edges in ebunch_to_add. @@ -1037,6 +1044,7 @@ def add_edges_from(self, ebunch_to_add, **attr): datadict.update(dd) self._adj[u][v] = datadict self._adj[v][u] = datadict + nx._clear_cache(self) def add_weighted_edges_from(self, ebunch_to_add, weight="weight", **attr): """Add weighted edges in `ebunch_to_add` with specified weight attr @@ -1087,6 +1095,7 @@ def add_weighted_edges_from(self, ebunch_to_add, weight="weight", **attr): >>> G.add_weighted_edges_from(list((5, n, weight) for n in G.nodes)) """ self.add_edges_from(((u, v, {weight: d}) for u, v, d in ebunch_to_add), **attr) + nx._clear_cache(self) def remove_edge(self, u, v): """Remove the edge between u and v. @@ -1120,6 +1129,7 @@ def remove_edge(self, u, v): del self._adj[v][u] except KeyError as err: raise NetworkXError(f"The edge {u}-{v} is not in the graph") from err + nx._clear_cache(self) def remove_edges_from(self, ebunch): """Remove all edges specified in ebunch. @@ -1154,6 +1164,7 @@ def remove_edges_from(self, ebunch): del adj[u][v] if u != v: # self loop needs only one entry removed del adj[v][u] + nx._clear_cache(self) def update(self, edges=None, nodes=None): """Update the graph using nodes/edges/graphs as input. @@ -1211,20 +1222,12 @@ def update(self, edges=None, nodes=None): >>> DG = nx.DiGraph() >>> # dict-of-dict-of-attribute >>> adj = {1: {2: 1.3, 3: 0.7}, 2: {1: 1.4}, 3: {1: 0.7}} - >>> e = [ - ... (u, v, {"weight": d}) - ... for u, nbrs in adj.items() - ... for v, d in nbrs.items() - ... ] + >>> e = [(u, v, {"weight": d}) for u, nbrs in adj.items() for v, d in nbrs.items()] >>> DG.update(edges=e, nodes=adj) >>> # dict-of-dict-of-dict >>> adj = {1: {2: {"weight": 1.3}, 3: {"color": 0.7, "weight": 1.2}}} - >>> e = [ - ... (u, v, {"weight": d}) - ... for u, nbrs in adj.items() - ... for v, d in nbrs.items() - ... ] + >>> e = [(u, v, {"weight": d}) for u, nbrs in adj.items() for v, d in nbrs.items()] >>> DG.update(edges=e, nodes=adj) >>> # predecessor adjacency (dict-of-set) @@ -1534,6 +1537,7 @@ def clear(self): self._adj.clear() self._node.clear() self.graph.clear() + nx._clear_cache(self) def clear_edges(self): """Remove all edges from the graph without altering nodes. @@ -1547,8 +1551,9 @@ def clear_edges(self): >>> list(G.edges) [] """ - for neighbours_dict in self._adj.values(): - neighbours_dict.clear() + for nbr_dict in self._adj.values(): + nbr_dict.clear() + nx._clear_cache(self) def is_multigraph(self): """Returns True if graph is a multigraph, False otherwise.""" @@ -1800,14 +1805,22 @@ def subgraph(self, nodes): SG = G.__class__() SG.add_nodes_from((n, G.nodes[n]) for n in largest_wcc) if SG.is_multigraph(): - SG.add_edges_from((n, nbr, key, d) - for n, nbrs in G.adj.items() if n in largest_wcc - for nbr, keydict in nbrs.items() if nbr in largest_wcc - for key, d in keydict.items()) + SG.add_edges_from( + (n, nbr, key, d) + for n, nbrs in G.adj.items() + if n in largest_wcc + for nbr, keydict in nbrs.items() + if nbr in largest_wcc + for key, d in keydict.items() + ) else: - SG.add_edges_from((n, nbr, d) - for n, nbrs in G.adj.items() if n in largest_wcc - for nbr, d in nbrs.items() if nbr in largest_wcc) + SG.add_edges_from( + (n, nbr, d) + for n, nbrs in G.adj.items() + if n in largest_wcc + for nbr, d in nbrs.items() + if nbr in largest_wcc + ) SG.graph.update(G.graph) Examples diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graphviews.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graphviews.py index 3fb08df08..275bbd71c 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graphviews.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/graphviews.py @@ -180,7 +180,6 @@ def subgraph_view(G, *, filter_node=no_filter, filter_edge=no_filter): >>> def filter_node(n1): ... return n1 != 5 - ... >>> view = nx.subgraph_view(G, filter_node=filter_node) >>> view.nodes() NodeView((0, 1, 2, 3, 4)) @@ -191,12 +190,15 @@ def subgraph_view(G, *, filter_node=no_filter, filter_edge=no_filter): >>> G[3][4]["cross_me"] = False >>> def filter_edge(n1, n2): ... return G[n1][n2].get("cross_me", True) - ... >>> view = nx.subgraph_view(G, filter_edge=filter_edge) >>> view.edges() EdgeView([(0, 1), (1, 2), (2, 3), (4, 5)]) - >>> view = nx.subgraph_view(G, filter_node=filter_node, filter_edge=filter_edge,) + >>> view = nx.subgraph_view( + ... G, + ... filter_node=filter_node, + ... filter_edge=filter_edge, + ... ) >>> view.nodes() NodeView((0, 1, 2, 3, 4)) >>> view.edges() diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multidigraph.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multidigraph.py index fb8b1a35c..ad048cd5a 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multidigraph.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multidigraph.py @@ -508,6 +508,7 @@ def add_edge(self, u_for_edge, v_for_edge, key=None, **attr): keydict[key] = datadict self._succ[u][v] = keydict self._pred[v][u] = keydict + nx._clear_cache(self) return key def remove_edge(self, u, v, key=None): @@ -583,6 +584,7 @@ def remove_edge(self, u, v, key=None): # remove the key entries if last edge del self._succ[u][v] del self._pred[v][u] + nx._clear_cache(self) @cached_property def edges(self): @@ -639,7 +641,7 @@ def edges(self): >>> G = nx.MultiDiGraph() >>> nx.add_path(G, [0, 1, 2]) >>> key = G.add_edge(2, 3, weight=5) - >>> key2 = G.add_edge(1, 2) # second edge between these nodes + >>> key2 = G.add_edge(1, 2) # second edge between these nodes >>> [e for e in G.edges()] [(0, 1), (1, 2), (1, 2), (2, 3)] >>> list(G.edges(data=True)) # default data is {} (empty dict) @@ -746,9 +748,9 @@ def degree(self): 1 >>> list(G.degree([0, 1, 2])) [(0, 1), (1, 2), (2, 2)] - >>> G.add_edge(0, 1) # parallel edge + >>> G.add_edge(0, 1) # parallel edge 1 - >>> list(G.degree([0, 1, 2])) # parallel edges are counted + >>> list(G.degree([0, 1, 2])) # parallel edges are counted [(0, 2), (1, 3), (2, 2)] """ @@ -797,9 +799,9 @@ def in_degree(self): 0 >>> list(G.in_degree([0, 1, 2])) [(0, 0), (1, 1), (2, 1)] - >>> G.add_edge(0, 1) # parallel edge + >>> G.add_edge(0, 1) # parallel edge 1 - >>> list(G.in_degree([0, 1, 2])) # parallel edges counted + >>> list(G.in_degree([0, 1, 2])) # parallel edges counted [(0, 0), (1, 2), (2, 1)] """ @@ -847,9 +849,9 @@ def out_degree(self): 1 >>> list(G.out_degree([0, 1, 2])) [(0, 1), (1, 1), (2, 1)] - >>> G.add_edge(0, 1) # parallel edge + >>> G.add_edge(0, 1) # parallel edge 1 - >>> list(G.out_degree([0, 1, 2])) # counts parallel edges + >>> list(G.out_degree([0, 1, 2])) # counts parallel edges [(0, 2), (1, 1), (2, 1)] """ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multigraph.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multigraph.py index bbf2ce241..d1b263265 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multigraph.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/multigraph.py @@ -390,7 +390,7 @@ def adj(self): >>> G.edges[1, 2, 0]["weight"] = 3 >>> result = set() >>> for edgekey, data in G[1][2].items(): - ... result.add(data.get('weight', 1)) + ... result.add(data.get("weight", 1)) >>> result {1, 3} @@ -520,6 +520,7 @@ def add_edge(self, u_for_edge, v_for_edge, key=None, **attr): keydict[key] = datadict self._adj[u][v] = keydict self._adj[v][u] = keydict + nx._clear_cache(self) return key def add_edges_from(self, ebunch_to_add, **attr): @@ -616,6 +617,7 @@ def add_edges_from(self, ebunch_to_add, **attr): key = self.add_edge(u, v, key) self[u][v][key].update(ddd) keylist.append(key) + nx._clear_cache(self) return keylist def remove_edge(self, u, v, key=None): @@ -695,6 +697,7 @@ def remove_edge(self, u, v, key=None): del self._adj[u][v] if u != v: # check for selfloop del self._adj[v][u] + nx._clear_cache(self) def remove_edges_from(self, ebunch): """Remove all edges specified in ebunch. @@ -753,6 +756,7 @@ def remove_edges_from(self, ebunch): self.remove_edge(*e[:3]) except NetworkXError: pass + nx._clear_cache(self) def has_edge(self, u, v, key=None): """Returns True if the graph has an edge between nodes u and v. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/reportviews.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/reportviews.py index 59a16243f..5f9397f82 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/reportviews.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/reportviews.py @@ -239,11 +239,13 @@ def data(self, data=True, default=None): Examples -------- >>> G = nx.Graph() - >>> G.add_nodes_from([ - ... (0, {"color": "red", "weight": 10}), - ... (1, {"color": "blue"}), - ... (2, {"color": "yellow", "weight": 2}) - ... ]) + >>> G.add_nodes_from( + ... [ + ... (0, {"color": "red", "weight": 10}), + ... (1, {"color": "blue"}), + ... (2, {"color": "yellow", "weight": 2}), + ... ] + ... ) Accessing node data with ``data=True`` (the default) returns a NodeDataView mapping each node to all of its attributes: @@ -1082,7 +1084,10 @@ def __getitem__(self, e): f"try list(G.edges)[{e.start}:{e.stop}:{e.step}]" ) u, v = e - return self._adjdict[u][v] + try: + return self._adjdict[u][v] + except KeyError as ex: # Customize msg to indicate exception origin + raise KeyError(f"The edge {e} is not in the graph.") # EdgeDataView methods def __call__(self, nbunch=None, data=False, *, default=None): @@ -1129,11 +1134,13 @@ def data(self, data=True, default=None, nbunch=None): Examples -------- >>> G = nx.Graph() - >>> G.add_edges_from([ - ... (0, 1, {"dist": 3, "capacity": 20}), - ... (1, 2, {"dist": 4}), - ... (2, 0, {"dist": 5}) - ... ]) + >>> G.add_edges_from( + ... [ + ... (0, 1, {"dist": 3, "capacity": 20}), + ... (1, 2, {"dist": 4}), + ... (2, 0, {"dist": 5}), + ... ] + ... ) Accessing edge data with ``data=True`` (the default) returns an edge data view object listing each edge with all of its attributes: diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/__init__.cpython-312.pyc index 55836ea2e..b74274cf8 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/dispatch_interface.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/dispatch_interface.cpython-312.pyc index 94dda722a..1013f16c4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/dispatch_interface.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/dispatch_interface.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/historical_tests.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/historical_tests.cpython-312.pyc index ed591310e..c386b86e5 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/historical_tests.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/historical_tests.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_backends.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_backends.cpython-312.pyc deleted file mode 100644 index 641eab84c..000000000 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_backends.cpython-312.pyc and /dev/null differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_coreviews.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_coreviews.cpython-312.pyc index c62673653..af3074037 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_coreviews.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_coreviews.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph.cpython-312.pyc index 050efdef6..0c1919280 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph_historical.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph_historical.cpython-312.pyc index 366958120..f19ca99ce 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph_historical.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_digraph_historical.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_filters.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_filters.cpython-312.pyc index f5bc38870..0c89601ca 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_filters.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_filters.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_function.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_function.cpython-312.pyc index e79c2d917..dabbee98f 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_function.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_function.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph.cpython-312.pyc index 6db06352f..e7cd1373b 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph_historical.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph_historical.cpython-312.pyc index 6347f8d80..3855930b4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph_historical.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graph_historical.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graphviews.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graphviews.cpython-312.pyc index 1dcc82b5c..58e6c00b4 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graphviews.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_graphviews.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multidigraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multidigraph.cpython-312.pyc index 3aa5d7279..67cf463f6 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multidigraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multidigraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multigraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multigraph.cpython-312.pyc index a6cccd70a..ca4a4dd52 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multigraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_multigraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_reportviews.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_reportviews.cpython-312.pyc index ac9743319..5996a14d9 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_reportviews.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_reportviews.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_special.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_special.cpython-312.pyc index 94aa69aa2..d47865a6c 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_special.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_special.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_subgraphviews.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_subgraphviews.cpython-312.pyc index 5b5ce497a..045cebd23 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_subgraphviews.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/__pycache__/test_subgraphviews.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/dispatch_interface.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/dispatch_interface.py index 5cef75524..96c363b93 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/dispatch_interface.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/dispatch_interface.py @@ -6,7 +6,7 @@ # This is comprehensive, but only tests the `test_override_dispatch` # function in networkx.classes.backends. -# To test the `_dispatch` function directly, several tests scattered throughout +# To test the `_dispatchable` function directly, several tests scattered throughout # NetworkX have been augmented to test normal and dispatch mode. # Searching for `dispatch_interface` should locate the specific tests. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_function.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_function.py index 61b73c2d2..ee4cca837 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_function.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_function.py @@ -6,6 +6,11 @@ from networkx.utils import edges_equal, nodes_equal +def test_degree_histogram_empty(): + G = nx.Graph() + assert nx.degree_histogram(G) == [] + + class TestFunction: def setup_method(self): self.G = nx.Graph({0: [1, 2, 3], 1: [1, 2, 0], 4: []}, name="Test") @@ -297,13 +302,13 @@ def test_neighbors_complete_graph(self): def test_non_neighbors(self): graph = nx.complete_graph(100) pop = random.sample(list(graph), 1) - nbors = list(nx.non_neighbors(graph, pop[0])) + nbors = nx.non_neighbors(graph, pop[0]) # should be all the other vertices in the graph assert len(nbors) == 0 graph = nx.path_graph(100) node = random.sample(list(graph), 1)[0] - nbors = list(nx.non_neighbors(graph, node)) + nbors = nx.non_neighbors(graph, node) # should be all the other vertices in the graph if node != 0 and node != 99: assert len(nbors) == 97 @@ -312,13 +317,13 @@ def test_non_neighbors(self): # create a star graph with 99 outer nodes graph = nx.star_graph(99) - nbors = list(nx.non_neighbors(graph, 0)) + nbors = nx.non_neighbors(graph, 0) assert len(nbors) == 0 # disconnected graph graph = nx.Graph() graph.add_nodes_from(range(10)) - nbors = list(nx.non_neighbors(graph, 0)) + nbors = nx.non_neighbors(graph, 0) assert len(nbors) == 9 def test_non_edges(self): diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_reportviews.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_reportviews.py index a68d6eb82..262dbfab3 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_reportviews.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/classes/tests/test_reportviews.py @@ -596,9 +596,13 @@ def test_getitem(self): assert ev[0, 1] == {"foo": "bar"} # slicing - with pytest.raises(nx.NetworkXError): + with pytest.raises(nx.NetworkXError, match=".*does not support slicing"): G.edges[0:5] + # Invalid edge + with pytest.raises(KeyError, match=r".*edge.*is not in the graph."): + G.edges[0, 9] + def test_call(self): ev = self.eview(self.G) assert id(ev) == id(ev()) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/conftest.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/conftest.py index 0218891ff..a8d6e1581 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/conftest.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/conftest.py @@ -45,19 +45,8 @@ def pytest_configure(config): backend = config.getoption("--backend") if backend is None: backend = os.environ.get("NETWORKX_TEST_BACKEND") - if backend: - networkx.utils.backends._dispatch._automatic_backends = [backend] - fallback_to_nx = config.getoption("--fallback-to-nx") - if not fallback_to_nx: - fallback_to_nx = os.environ.get("NETWORKX_FALLBACK_TO_NX") - networkx.utils.backends._dispatch._fallback_to_nx = bool(fallback_to_nx) # nx-loopback backend is only available when testing - if sys.version_info < (3, 10): - backends = ( - ep for ep in entry_points()["networkx.backends"] if ep.name == "nx-loopback" - ) - else: - backends = entry_points(name="nx-loopback", group="networkx.backends") + backends = entry_points(name="nx-loopback", group="networkx.backends") if backends: networkx.utils.backends.backends["nx-loopback"] = next(iter(backends)) else: @@ -69,16 +58,22 @@ def pytest_configure(config): " Try `pip install -e .`, or change your PYTHONPATH\n" " Make sure python finds the networkx repo you are testing\n\n" ) + if backend: + networkx.config["backend_priority"] = [backend] + fallback_to_nx = config.getoption("--fallback-to-nx") + if not fallback_to_nx: + fallback_to_nx = os.environ.get("NETWORKX_FALLBACK_TO_NX") + networkx.utils.backends._dispatchable._fallback_to_nx = bool(fallback_to_nx) def pytest_collection_modifyitems(config, items): # Setting this to True here allows tests to be set up before dispatching # any function call to a backend. - networkx.utils.backends._dispatch._is_testing = True - if automatic_backends := networkx.utils.backends._dispatch._automatic_backends: + networkx.utils.backends._dispatchable._is_testing = True + if backend_priority := networkx.config["backend_priority"]: # Allow pluggable backends to add markers to tests (such as skip or xfail) # when running in auto-conversion test mode - backend = networkx.utils.backends.backends[automatic_backends[0]].load() + backend = networkx.utils.backends.backends[backend_priority[0]].load() if hasattr(backend, "on_start_tests"): getattr(backend, "on_start_tests")(items) @@ -94,18 +89,15 @@ def pytest_collection_modifyitems(config, items): # TODO: The warnings below need to be dealt with, but for now we silence them. @pytest.fixture(autouse=True) def set_warnings(): - warnings.filterwarnings( - "ignore", category=DeprecationWarning, message="nx.nx_pydot" - ) warnings.filterwarnings( "ignore", - category=DeprecationWarning, - message="single_target_shortest_path_length will", + category=FutureWarning, + message="\n\nsingle_target_shortest_path_length", ) warnings.filterwarnings( "ignore", - category=DeprecationWarning, - message="shortest_path for all_pairs", + category=FutureWarning, + message="\n\nshortest_path", ) warnings.filterwarnings( "ignore", category=DeprecationWarning, message="\nforest_str is deprecated" @@ -125,25 +117,48 @@ def set_warnings(): "ignore", category=DeprecationWarning, message="\n\nThe `normalized`" ) warnings.filterwarnings( - "ignore", category=DeprecationWarning, message="function `join` is deprecated" + "ignore", + category=DeprecationWarning, + message="The function `join` is deprecated", ) warnings.filterwarnings( "ignore", category=DeprecationWarning, message="\n\nstrongly_connected_components_recursive", ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="\n\nall_triplets" + ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="\n\nrandom_triad" + ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="minimal_d_separator" + ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="d_separated" + ) + warnings.filterwarnings("ignore", category=DeprecationWarning, message="\n\nk_core") + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="\n\nk_shell" + ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="\n\nk_crust" + ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="\n\nk_corona" + ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message="\n\ntotal_spanning_tree_weight" + ) + warnings.filterwarnings( + "ignore", category=DeprecationWarning, message=r"\n\nThe 'create=matrix'" + ) @pytest.fixture(autouse=True) def add_nx(doctest_namespace): doctest_namespace["nx"] = networkx - # TODO: remove the try-except block when we require numpy >= 2 - try: - import numpy as np - - np.set_printoptions(legacy="1.21") - except ImportError: - pass # What dependencies are installed? @@ -208,6 +223,8 @@ def add_nx(doctest_namespace): "algorithms/node_classification.py", "algorithms/non_randomness.py", "algorithms/shortest_paths/dense.py", + "algorithms/tree/mst.py", + "generators/expanders.py", "linalg/bethehessianmatrix.py", "linalg/laplacianmatrix.py", "utils/misc.py", @@ -224,24 +241,31 @@ def add_nx(doctest_namespace): "algorithms/centrality/current_flow_betweenness_subset.py", "algorithms/centrality/eigenvector.py", "algorithms/centrality/katz.py", + "algorithms/centrality/laplacian.py", "algorithms/centrality/second_order.py", "algorithms/centrality/subgraph_alg.py", "algorithms/communicability_alg.py", + "algorithms/community/divisive.py", + "algorithms/distance_measures.py", "algorithms/link_analysis/hits_alg.py", "algorithms/link_analysis/pagerank_alg.py", "algorithms/node_classification.py", "algorithms/similarity.py", + "algorithms/tree/mst.py", + "algorithms/walks.py", "convert_matrix.py", "drawing/layout.py", + "drawing/nx_pylab.py", "generators/spectral_graph_forge.py", + "generators/expanders.py", "linalg/algebraicconnectivity.py", "linalg/attrmatrix.py", "linalg/bethehessianmatrix.py", "linalg/graphmatrix.py", + "linalg/laplacianmatrix.py", "linalg/modularitymatrix.py", "linalg/spectrum.py", "utils/rcm.py", - "algorithms/centrality/laplacian.py", ] needs_matplotlib = ["drawing/nx_pylab.py"] needs_pandas = ["convert_matrix.py"] diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert.py index 2fd207109..7cc8fe401 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert.py @@ -167,7 +167,7 @@ def to_networkx_graph(data, create_using=None, multigraph_input=False): # Includes containers (e.g. list, set, dict, etc.), generators, and # iterators (e.g. itertools.chain) of edges - if isinstance(data, (Collection, Generator, Iterator)): + if isinstance(data, Collection | Generator | Iterator): try: return from_edgelist(data, create_using=create_using) except Exception as err: @@ -176,7 +176,7 @@ def to_networkx_graph(data, create_using=None, multigraph_input=False): raise nx.NetworkXError("Input is not a known data type for conversion.") -@nx._dispatch +@nx._dispatchable def to_dict_of_lists(G, nodelist=None): """Returns adjacency representation of graph as a dictionary of lists. @@ -202,7 +202,7 @@ def to_dict_of_lists(G, nodelist=None): return d -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_dict_of_lists(d, create_using=None): """Returns a graph from a dictionary of lists. @@ -278,9 +278,7 @@ def to_dict_of_dicts(G, nodelist=None, edge_data=None): For a more custom approach to handling edge data, try:: dod = { - n: { - nbr: custom(n, nbr, dd) for nbr, dd in nbrdict.items() - } + n: {nbr: custom(n, nbr, dd) for nbr, dd in nbrdict.items()} for n, nbrdict in G.adj.items() } @@ -300,9 +298,9 @@ def to_dict_of_dicts(G, nodelist=None, edge_data=None): >>> G = nx.Graph() >>> G.add_edges_from( ... [ - ... (0, 1, {'weight': 1.0}), - ... (1, 2, {'weight': 2.0}), - ... (2, 0, {'weight': 1.0}), + ... (0, 1, {"weight": 1.0}), + ... (1, 2, {"weight": 2.0}), + ... (2, 0, {"weight": 1.0}), ... ] ... ) >>> d = nx.to_dict_of_dicts(G) @@ -310,7 +308,7 @@ def to_dict_of_dicts(G, nodelist=None, edge_data=None): {0: {1: {'weight': 1.0}, 2: {'weight': 1.0}}, 1: {0: {'weight': 1.0}, 2: {'weight': 2.0}}, 2: {1: {'weight': 2.0}, 0: {'weight': 1.0}}} - >>> d[1][2]['weight'] + >>> d[1][2]["weight"] 2.0 If `edge_data` is not `None`, edge data in the original graph (if any) is @@ -325,15 +323,15 @@ def to_dict_of_dicts(G, nodelist=None, edge_data=None): This also applies to MultiGraphs: edge data is preserved by default: >>> G = nx.MultiGraph() - >>> G.add_edge(0, 1, key='a', weight=1.0) + >>> G.add_edge(0, 1, key="a", weight=1.0) 'a' - >>> G.add_edge(0, 1, key='b', weight=5.0) + >>> G.add_edge(0, 1, key="b", weight=5.0) 'b' >>> d = nx.to_dict_of_dicts(G) >>> d # doctest: +SKIP {0: {1: {'a': {'weight': 1.0}, 'b': {'weight': 5.0}}}, 1: {0: {'a': {'weight': 1.0}, 'b': {'weight': 5.0}}}} - >>> d[0][1]['b']['weight'] + >>> d[0][1]["b"]["weight"] 5.0 But multi edge data is lost if `edge_data` is not `None`: @@ -364,7 +362,7 @@ def to_dict_of_dicts(G, nodelist=None, edge_data=None): return dod -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_dict_of_dicts(d, create_using=None, multigraph_input=False): """Returns a graph from a dictionary of dictionaries. @@ -451,7 +449,7 @@ def from_dict_of_dicts(d, create_using=None, multigraph_input=False): return G -@nx._dispatch(preserve_edge_attrs=True) +@nx._dispatchable(preserve_edge_attrs=True) def to_edgelist(G, nodelist=None): """Returns a list of edges in the graph. @@ -469,7 +467,7 @@ def to_edgelist(G, nodelist=None): return G.edges(nodelist, data=True) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_edgelist(edgelist, create_using=None): """Returns a graph from a list of edges. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert_matrix.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert_matrix.py index a8496e7cb..6165ac18e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert_matrix.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/convert_matrix.py @@ -43,7 +43,7 @@ ] -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def to_pandas_adjacency( G, nodelist=None, @@ -101,20 +101,21 @@ def to_pandas_adjacency( diagonal matrix entry value to the weight attribute of the edge (or the number 1 if the edge has no weight attribute). If the alternate convention of doubling the edge weight is desired the - resulting Pandas DataFrame can be modified as follows: - - >>> import pandas as pd - >>> pd.options.display.max_columns = 20 - >>> import numpy as np - >>> G = nx.Graph([(1, 1)]) - >>> df = nx.to_pandas_adjacency(G, dtype=int) - >>> df - 1 - 1 1 - >>> df.values[np.diag_indices_from(df)] *= 2 - >>> df - 1 - 1 2 + resulting Pandas DataFrame can be modified as follows:: + + >>> import pandas as pd + >>> G = nx.Graph([(1, 1), (2, 2)]) + >>> df = nx.to_pandas_adjacency(G) + >>> df + 1 2 + 1 1.0 0.0 + 2 0.0 1.0 + >>> diag_idx = list(range(len(df))) + >>> df.iloc[diag_idx, diag_idx] *= 2 + >>> df + 1 2 + 1 2.0 0.0 + 2 0.0 2.0 Examples -------- @@ -150,7 +151,7 @@ def to_pandas_adjacency( return pd.DataFrame(data=M, index=nodelist, columns=nodelist) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_pandas_adjacency(df, create_using=None): r"""Returns a graph from Pandas DataFrame. @@ -219,7 +220,7 @@ def from_pandas_adjacency(df, create_using=None): return G -@nx._dispatch(preserve_edge_attrs=True) +@nx._dispatchable(preserve_edge_attrs=True) def to_pandas_edgelist( G, source="source", @@ -273,9 +274,9 @@ def to_pandas_edgelist( 0 A B 1 7 1 C E 9 10 - >>> G = nx.MultiGraph([('A', 'B', {'cost': 1}), ('A', 'B', {'cost': 9})]) - >>> df = nx.to_pandas_edgelist(G, nodelist=['A', 'C'], edge_key='ekey') - >>> df[['source', 'target', 'cost', 'ekey']] + >>> G = nx.MultiGraph([("A", "B", {"cost": 1}), ("A", "B", {"cost": 9})]) + >>> df = nx.to_pandas_edgelist(G, nodelist=["A", "C"], edge_key="ekey") + >>> df[["source", "target", "cost", "ekey"]] source target cost ekey 0 A B 1 0 1 A B 9 1 @@ -311,7 +312,7 @@ def to_pandas_edgelist( return pd.DataFrame(edgelistdict, dtype=dtype) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_pandas_edgelist( df, source="source", @@ -442,7 +443,7 @@ def from_pandas_edgelist( attribute_data = [] if edge_attr is True: attr_col_headings = [c for c in df.columns if c not in reserved_columns] - elif isinstance(edge_attr, (list, tuple)): + elif isinstance(edge_attr, list | tuple): attr_col_headings = edge_attr else: attr_col_headings = [edge_attr] @@ -483,7 +484,7 @@ def from_pandas_edgelist( return g -@nx._dispatch(edge_attrs="weight") +@nx._dispatchable(edge_attrs="weight") def to_scipy_sparse_array(G, nodelist=None, dtype=None, weight="weight", format="csr"): """Returns the graph adjacency matrix as a SciPy sparse array. @@ -623,10 +624,11 @@ def _csr_gen_triples(A): """ nrows = A.shape[0] - data, indices, indptr = A.data, A.indices, A.indptr - for i in range(nrows): - for j in range(indptr[i], indptr[i + 1]): - yield i, int(indices[j]), data[j] + indptr, dst_indices, data = A.indptr, A.indices, A.data + import numpy as np + + src_indices = np.repeat(np.arange(nrows), np.diff(indptr)) + return zip(src_indices.tolist(), dst_indices.tolist(), A.data.tolist()) def _csc_gen_triples(A): @@ -635,10 +637,11 @@ def _csc_gen_triples(A): """ ncols = A.shape[1] - data, indices, indptr = A.data, A.indices, A.indptr - for i in range(ncols): - for j in range(indptr[i], indptr[i + 1]): - yield int(indices[j]), i, data[j] + indptr, src_indices, data = A.indptr, A.indices, A.data + import numpy as np + + dst_indices = np.repeat(np.arange(ncols), np.diff(indptr)) + return zip(src_indices.tolist(), dst_indices.tolist(), A.data.tolist()) def _coo_gen_triples(A): @@ -646,7 +649,7 @@ def _coo_gen_triples(A): of weighted edge triples. """ - return ((int(i), int(j), d) for i, j, d in zip(A.row, A.col, A.data)) + return zip(A.row.tolist(), A.col.tolist(), A.data.tolist()) def _dok_gen_triples(A): @@ -655,7 +658,8 @@ def _dok_gen_triples(A): """ for (r, c), v in A.items(): - yield r, c, v + # Use `v.item()` to convert a NumPy scalar to the appropriate Python scalar + yield int(r), int(c), v.item() def _generate_weighted_edges(A): @@ -675,7 +679,7 @@ def _generate_weighted_edges(A): return _coo_gen_triples(A.tocoo()) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_scipy_sparse_array( A, parallel_edges=False, create_using=None, edge_attribute="weight" ): @@ -736,9 +740,7 @@ def from_scipy_sparse_array( as the number of parallel edges joining those two vertices: >>> A = sp.sparse.csr_array([[1, 1], [1, 2]]) - >>> G = nx.from_scipy_sparse_array( - ... A, parallel_edges=True, create_using=nx.MultiGraph - ... ) + >>> G = nx.from_scipy_sparse_array(A, parallel_edges=True, create_using=nx.MultiGraph) >>> G[1][1] AtlasView({0: {'weight': 1}, 1: {'weight': 1}}) @@ -780,7 +782,7 @@ def from_scipy_sparse_array( return G -@nx._dispatch(edge_attrs="weight") # edge attrs may also be obtained from `dtype` +@nx._dispatchable(edge_attrs="weight") # edge attrs may also be obtained from `dtype` def to_numpy_array( G, nodelist=None, @@ -934,7 +936,7 @@ def to_numpy_array( >>> G.add_edge(2, 0, weight=0) >>> G.add_edge(2, 1, weight=0) >>> G.add_edge(3, 0, weight=1) - >>> nx.to_numpy_array(G, nonedge=-1.) + >>> nx.to_numpy_array(G, nonedge=-1.0) array([[-1., 2., -1., 1.], [ 2., -1., 0., -1.], [-1., 0., -1., 0.], @@ -1019,7 +1021,7 @@ def to_numpy_array( return A -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_numpy_array(A, parallel_edges=False, create_using=None, edge_attr="weight"): """Returns a graph from a 2D NumPy array. diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/__init__.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/__init__.cpython-312.pyc index 5e05a2e35..f36e44f38 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/__init__.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/__init__.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/layout.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/layout.cpython-312.pyc index 3de4d1151..49bc8570e 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/layout.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/layout.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_agraph.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_agraph.cpython-312.pyc index af837f9cc..32b8ccc10 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_agraph.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_agraph.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_latex.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_latex.cpython-312.pyc index fe63fecba..b644e8ad3 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_latex.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_latex.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pydot.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pydot.cpython-312.pyc index 651cd005d..2a3fc3acd 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pydot.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pydot.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pylab.cpython-312.pyc b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pylab.cpython-312.pyc index ad053ea63..390e9f7c2 100644 Binary files a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pylab.cpython-312.pyc and b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/__pycache__/nx_pylab.cpython-312.pyc differ diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/layout.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/layout.py index fa120d670..abded7a67 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/layout.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/layout.py @@ -32,6 +32,7 @@ "fruchterman_reingold_layout", "spiral_layout", "multipartite_layout", + "bfs_layout", "arf_layout", ] @@ -937,7 +938,7 @@ def planar_layout(G, scale=1, center=None, dim=2): raise nx.NetworkXException("G is not planar.") pos = nx.combinatorial_embedding_to_pos(embedding) node_list = list(embedding) - pos = np.row_stack([pos[x] for x in node_list]) + pos = np.vstack([pos[x] for x in node_list]) pos = pos.astype(np.float64) pos = rescale_layout(pos, scale=scale) + center return dict(zip(node_list, pos)) @@ -1030,8 +1031,9 @@ def multipartite_layout(G, subset_key="subset", align="vertical", scale=1, cente G : NetworkX graph or list of nodes A position will be assigned to every node in G. - subset_key : string (default='subset') - Key of node data to be used as layer subset. + subset_key : string or dict (default='subset') + If a string, the key of node data in G that holds the node subset. + If a dict, keyed by layer number to the nodes in that layer/subset. align : string (default='vertical') The alignment of nodes. Vertical or horizontal. @@ -1052,6 +1054,12 @@ def multipartite_layout(G, subset_key="subset", align="vertical", scale=1, cente >>> G = nx.complete_multipartite_graph(28, 16, 10) >>> pos = nx.multipartite_layout(G) + or use a dict to provide the layers of the layout + + >>> G = nx.Graph([(0, 1), (1, 2), (1, 3), (3, 4)]) + >>> layers = {"a": [0], "b": [1], "c": [2, 3], "d": [4]} + >>> pos = nx.multipartite_layout(G, subset_key=layers) + Notes ----- This algorithm currently only works in two dimensions and does not @@ -1071,25 +1079,31 @@ def multipartite_layout(G, subset_key="subset", align="vertical", scale=1, cente if len(G) == 0: return {} - layers = {} - for v, data in G.nodes(data=True): - try: - layer = data[subset_key] - except KeyError: - msg = "all nodes must have subset_key (default='subset') as data" - raise ValueError(msg) - layers[layer] = [v] + layers.get(layer, []) + try: + # check if subset_key is dict-like + if len(G) != sum(len(nodes) for nodes in subset_key.values()): + raise nx.NetworkXError( + "all nodes must be in one subset of `subset_key` dict" + ) + except AttributeError: + # subset_key is not a dict, hence a string + node_to_subset = nx.get_node_attributes(G, subset_key) + if len(node_to_subset) != len(G): + raise nx.NetworkXError( + f"all nodes need a subset_key attribute: {subset_key}" + ) + subset_key = nx.utils.groups(node_to_subset) # Sort by layer, if possible try: - layers = sorted(layers.items()) + layers = dict(sorted(subset_key.items())) except TypeError: - layers = list(layers.items()) + layers = subset_key pos = None nodes = [] width = len(layers) - for i, (_, layer) in enumerate(layers): + for i, layer in enumerate(layers.values()): height = len(layer) xs = np.repeat(i, height) ys = np.arange(0, height, dtype=float) @@ -1295,3 +1309,50 @@ def rescale_layout_dict(pos, scale=1): pos_v = np.array(list(pos.values())) pos_v = rescale_layout(pos_v, scale=scale) return dict(zip(pos, pos_v)) + + +def bfs_layout(G, start, *, align="vertical", scale=1, center=None): + """Position nodes according to breadth-first search algorithm. + + Parameters + ---------- + G : NetworkX graph + A position will be assigned to every node in G. + + start : node in `G` + Starting node for bfs + + center : array-like or None + Coordinate pair around which to center the layout. + + Returns + ------- + pos : dict + A dictionary of positions keyed by node. + + Examples + -------- + >>> G = nx.path_graph(4) + >>> pos = nx.bfs_layout(G, 0) + + Notes + ----- + This algorithm currently only works in two dimensions and does not + try to minimize edge crossings. + + """ + G, center = _process_params(G, center, 2) + + # Compute layers with BFS + layers = dict(enumerate(nx.bfs_layers(G, start))) + + if len(G) != sum(len(nodes) for nodes in layers.values()): + raise nx.NetworkXError( + "bfs_layout didn't include all nodes. Perhaps use input graph:\n" + " G.subgraph(nx.node_connected_component(G, start))" + ) + + # Compute node positions with multipartite_layout + return multipartite_layout( + G, subset_key=layers, align=align, scale=scale, center=center + ) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_agraph.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_agraph.py index 8db3400f2..f91031fca 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_agraph.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_agraph.py @@ -33,7 +33,7 @@ ] -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_agraph(A, create_using=None): """Returns a NetworkX Graph or DiGraph from a PyGraphviz graph. @@ -133,9 +133,7 @@ def to_agraph(N): try: import pygraphviz except ImportError as err: - raise ImportError( - "requires pygraphviz " "http://pygraphviz.github.io/" - ) from err + raise ImportError("requires pygraphviz http://pygraphviz.github.io/") from err directed = N.is_directed() strict = nx.number_of_selfloops(N) == 0 and not N.is_multigraph() @@ -205,7 +203,7 @@ def write_dot(G, path): return -@nx._dispatch(name="agraph_read_dot", graphs=None) +@nx._dispatchable(name="agraph_read_dot", graphs=None, returns_graph=True) def read_dot(path): """Returns a NetworkX graph from a dot file on path. @@ -218,7 +216,7 @@ def read_dot(path): import pygraphviz except ImportError as err: raise ImportError( - "read_dot() requires pygraphviz " "http://pygraphviz.github.io/" + "read_dot() requires pygraphviz http://pygraphviz.github.io/" ) from err A = pygraphviz.AGraph(file=path) gr = from_agraph(A) @@ -303,9 +301,7 @@ def pygraphviz_layout(G, prog="neato", root=None, args=""): try: import pygraphviz except ImportError as err: - raise ImportError( - "requires pygraphviz " "http://pygraphviz.github.io/" - ) from err + raise ImportError("requires pygraphviz http://pygraphviz.github.io/") from err if root is not None: args += f"-Groot={root}" A = to_agraph(G) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_latex.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_latex.py index 6312f7150..8bc6ba219 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_latex.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_latex.py @@ -439,7 +439,7 @@ def to_latex( size = 1 / n_rows N = len(Gbunch) - if isinstance(pos, (str, dict)): + if isinstance(pos, str | dict): pos = [pos] * N if sub_captions is None: sub_captions = [""] * N diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pydot.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pydot.py index 1cd178183..92c5f333e 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pydot.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pydot.py @@ -19,7 +19,6 @@ - Graphviz: https://www.graphviz.org - DOT Language: http://www.graphviz.org/doc/info/lang.html """ -import warnings from locale import getpreferredencoding import networkx as nx @@ -41,20 +40,13 @@ def write_dot(G, path): Path can be a string or a file handle. """ - msg = ( - "nx.nx_pydot.write_dot depends on the pydot package, which has " - "known issues and is not actively maintained. Consider using " - "nx.nx_agraph.write_dot instead.\n\n" - "See https://github.com/networkx/networkx/issues/5723" - ) - warnings.warn(msg, DeprecationWarning, stacklevel=2) P = to_pydot(G) path.write(P.to_string()) return @open_file(0, mode="r") -@nx._dispatch(name="pydot_read_dot", graphs=None) +@nx._dispatchable(name="pydot_read_dot", graphs=None, returns_graph=True) def read_dot(path): """Returns a NetworkX :class:`MultiGraph` or :class:`MultiDiGraph` from the dot file with the passed path. @@ -79,14 +71,6 @@ def read_dot(path): """ import pydot - msg = ( - "nx.nx_pydot.read_dot depends on the pydot package, which has " - "known issues and is not actively maintained. Consider using " - "nx.nx_agraph.read_dot instead.\n\n" - "See https://github.com/networkx/networkx/issues/5723" - ) - warnings.warn(msg, DeprecationWarning, stacklevel=2) - data = path.read() # List of one or more "pydot.Dot" instances deserialized from this file. @@ -96,7 +80,7 @@ def read_dot(path): return from_pydot(P_list[0]) -@nx._dispatch(graphs=None) +@nx._dispatchable(graphs=None, returns_graph=True) def from_pydot(P): """Returns a NetworkX graph from a Pydot graph. @@ -120,12 +104,6 @@ def from_pydot(P): >>> G = nx.Graph(nx.nx_pydot.from_pydot(A)) """ - msg = ( - "nx.nx_pydot.from_pydot depends on the pydot package, which has " - "known issues and is not actively maintained.\n\n" - "See https://github.com/networkx/networkx/issues/5723" - ) - warnings.warn(msg, DeprecationWarning, stacklevel=2) if P.get_strict(None): # pydot bug: get_strict() shouldn't take argument multiedges = False @@ -220,13 +198,6 @@ def to_pydot(N): """ import pydot - msg = ( - "nx.nx_pydot.to_pydot depends on the pydot package, which has " - "known issues and is not actively maintained.\n\n" - "See https://github.com/networkx/networkx/issues/5723" - ) - warnings.warn(msg, DeprecationWarning, stacklevel=2) - # set Graphviz graph type if N.is_directed(): graph_type = "digraph" @@ -348,14 +319,6 @@ def graphviz_layout(G, prog="neato", root=None): ----- This is a wrapper for pydot_layout. """ - msg = ( - "nx.nx_pydot.graphviz_layout depends on the pydot package, which has " - "known issues and is not actively maintained. Consider using " - "nx.nx_agraph.graphviz_layout instead.\n\n" - "See https://github.com/networkx/networkx/issues/5723" - ) - warnings.warn(msg, DeprecationWarning, stacklevel=2) - return pydot_layout(G=G, prog=prog, root=root) @@ -392,19 +355,13 @@ def pydot_layout(G, prog="neato", root=None): If this occurs in your case, consider relabeling the nodes just for the layout computation using something similar to:: - H = nx.convert_node_labels_to_integers(G, label_attribute='node_label') - H_layout = nx.nx_pydot.pydot_layout(G, prog='dot') - G_layout = {H.nodes[n]['node_label']: p for n, p in H_layout.items()} + H = nx.convert_node_labels_to_integers(G, label_attribute="node_label") + H_layout = nx.nx_pydot.pydot_layout(G, prog="dot") + G_layout = {H.nodes[n]["node_label"]: p for n, p in H_layout.items()} """ import pydot - msg = ( - "nx.nx_pydot.pydot_layout depends on the pydot package, which has " - "known issues and is not actively maintained.\n\n" - "See https://github.com/networkx/networkx/issues/5723" - ) - warnings.warn(msg, DeprecationWarning, stacklevel=2) P = to_pydot(G) if root is not None: P.set("root", str(root)) diff --git a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pylab.py b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pylab.py index 096e7b01d..7c25f63bf 100644 --- a/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pylab.py +++ b/.CondaPkg/env/lib/python3.12/site-packages/networkx/drawing/nx_pylab.py @@ -16,6 +16,8 @@ - :func:`matplotlib.pyplot.scatter` - :obj:`matplotlib.patches.FancyArrowPatch` """ +import collections +import itertools from numbers import Number import networkx as nx @@ -241,6 +243,11 @@ def draw_networkx(G, pos=None, arrows=None, with_labels=True, **kwds): label : string, optional Label for graph legend + hide_ticks : bool, optional + Hide ticks of axes. When `True` (the default), ticks and ticklabels + are removed from the axes. To set ticks and tick labels to the pyplot default, + use ``hide_ticks=False``. + kwds : optional keywords See networkx.draw_networkx_nodes(), networkx.draw_networkx_edges(), and networkx.draw_networkx_labels() for a description of optional keywords. @@ -324,6 +331,7 @@ def draw_networkx_nodes( edgecolors=None, label=None, margins=None, + hide_ticks=True, ): """Draw the nodes of the graph G. @@ -388,6 +396,11 @@ def draw_networkx_nodes( be in the range ``[0, 1]``. See :meth:`matplotlib.axes.Axes.margins` for details. The default is `None`, which uses the Matplotlib default. + hide_ticks : bool, optional + Hide ticks of axes. When `True` (the default), ticks and ticklabels + are removed from the axes. To set ticks and tick labels to the pyplot default, + use ``hide_ticks=False``. + Returns ------- matplotlib.collections.PathCollection @@ -448,14 +461,15 @@ def draw_networkx_nodes( edgecolors=edgecolors, label=label, ) - ax.tick_params( - axis="both", - which="both", - bottom=False, - left=False, - labelbottom=False, - labelleft=False, - ) + if hide_ticks: + ax.tick_params( + axis="both", + which="both", + bottom=False, + left=False, + labelbottom=False, + labelleft=False, + ) if margins is not None: if isinstance(margins, Iterable): @@ -467,6 +481,197 @@ def draw_networkx_nodes( return node_collection +class FancyArrowFactory: + """Draw arrows with `matplotlib.patches.FancyarrowPatch`""" + + class ConnectionStyleFactory: + def __init__(self, connectionstyles, selfloop_height, ax=None): + import matplotlib as mpl + import matplotlib.path # call as mpl.path + import numpy as np + + self.ax = ax + self.mpl = mpl + self.np = np + self.base_connection_styles = [ + mpl.patches.ConnectionStyle(cs) for cs in connectionstyles + ] + self.n = len(self.base_connection_styles) + self.selfloop_height = selfloop_height + + def curved(self, edge_index): + return self.base_connection_styles[edge_index % self.n] + + def self_loop(self, edge_index): + def self_loop_connection(posA, posB, *args, **kwargs): + if not self.np.all(posA == posB): + raise nx.NetworkXError( + "`self_loop` connection style method" + "is only to be used for self-loops" + ) + # this is called with _screen space_ values + # so convert back to data space + data_loc = self.ax.transData.inverted().transform(posA) + v_shift = 0.1 * self.selfloop_height + h_shift = v_shift * 0.5 + # put the top of the loop first so arrow is not hidden by node + path = self.np.asarray( + [ + # 1 + [0, v_shift], + # 4 4 4 + [h_shift, v_shift], + [h_shift, 0], + [0, 0], + # 4 4 4 + [-h_shift, 0], + [-h_shift, v_shift], + [0, v_shift], + ] + ) + # Rotate self loop 90 deg. if more than 1 + # This will allow for maximum of 4 visible self loops + if edge_index % 4: + x, y = path.T + for _ in range(edge_index % 4): + x, y = y, -x + path = self.np.array([x, y]).T + return self.mpl.path.Path( + self.ax.transData.transform(data_loc + path), [1, 4, 4, 4, 4, 4, 4] + ) + + return self_loop_connection + + def __init__( + self, + edge_pos, + edgelist, + nodelist, + edge_indices, + node_size, + selfloop_height, + connectionstyle="arc3", + node_shape="o", + arrowstyle="-", + arrowsize=10, + edge_color="k", + alpha=None, + linewidth=1.0, + style="solid", + min_source_margin=0, + min_target_margin=0, + ax=None, + ): + import matplotlib as mpl + import matplotlib.patches # call as mpl.patches + import matplotlib.pyplot as plt + import numpy as np + + if isinstance(connectionstyle, str): + connectionstyle = [connectionstyle] + elif np.iterable(connectionstyle): + connectionstyle = list(connectionstyle) + else: + msg = "ConnectionStyleFactory arg `connectionstyle` must be str or iterable" + raise nx.NetworkXError(msg) + self.ax = ax + self.mpl = mpl + self.np = np + self.edge_pos = edge_pos + self.edgelist = edgelist + self.nodelist = nodelist + self.node_shape = node_shape + self.min_source_margin = min_source_margin + self.min_target_margin = min_target_margin + self.edge_indices = edge_indices + self.node_size = node_size + self.connectionstyle_factory = self.ConnectionStyleFactory( + connectionstyle, selfloop_height, ax + ) + self.arrowstyle = arrowstyle + self.arrowsize = arrowsize + self.arrow_colors = mpl.colors.colorConverter.to_rgba_array(edge_color, alpha) + self.linewidth = linewidth + self.style = style + if isinstance(arrowsize, list) and len(arrowsize) != len(edge_pos): + raise ValueError("arrowsize should have the same length as edgelist") + + def __call__(self, i): + (x1, y1), (x2, y2) = self.edge_pos[i] + shrink_source = 0 # space from source to tail + shrink_target = 0 # space from head to target + if self.np.iterable(self.node_size): # many node sizes + source, target = self.edgelist[i][:2] + source_node_size = self.node_size[self.nodelist.index(source)] + target_node_size = self.node_size[self.nodelist.index(target)] + shrink_source = self.to_marker_edge(source_node_size, self.node_shape) + shrink_target = self.to_marker_edge(target_node_size, self.node_shape) + else: + shrink_source = self.to_marker_edge(self.node_size, self.node_shape) + shrink_target = shrink_source + shrink_source = max(shrink_source, self.min_source_margin) + shrink_target = max(shrink_target, self.min_target_margin) + + # scale factor of arrow head + if isinstance(self.arrowsize, list): + mutation_scale = self.arrowsize[i] + else: + mutation_scale = self.arrowsize + + if len(self.arrow_colors) > i: + arrow_color = self.arrow_colors[i] + elif len(self.arrow_colors) == 1: + arrow_color = self.arrow_colors[0] + else: # Cycle through colors + arrow_color = self.arrow_colors[i % len(self.arrow_colors)] + + if self.np.iterable(self.linewidth): + if len(self.linewidth) > i: + linewidth = self.linewidth[i] + else: + linewidth = self.linewidth[i % len(self.linewidth)] + else: + linewidth = self.linewidth + + if ( + self.np.iterable(self.style) + and not isinstance(self.style, str) + and not isinstance(self.style, tuple) + ): + if len(self.style) > i: + linestyle = self.style[i] + else: # Cycle through styles + linestyle = self.style[i % len(self.style)] + else: + linestyle = self.style + + if x1 == x2 and y1 == y2: + connectionstyle = self.connectionstyle_factory.self_loop( + self.edge_indices[i] + ) + else: + connectionstyle = self.connectionstyle_factory.curved(self.edge_indices[i]) + return self.mpl.patches.FancyArrowPatch( + (x1, y1), + (x2, y2), + arrowstyle=self.arrowstyle, + shrinkA=shrink_source, + shrinkB=shrink_target, + mutation_scale=mutation_scale, + color=arrow_color, + linewidth=linewidth, + connectionstyle=connectionstyle, + linestyle=linestyle, + zorder=1, # arrows go behind nodes + ) + + def to_marker_edge(self, marker_size, marker): + if marker in "s^>vv Benchmarks of Quantum Error Correcting Codes and Syndrome Decoders

All Codes Available in this Benchmark Database

Cleve8

The [[8,3,3]] code from Cleve and Gottesman (1997), a convenient pedagogical example when studying how to construct encoding circuits, as it is one of the smallest codes with more than one logical qubit.


Toric

The famous toric code, the first topological code. Terrible rate, ok-ish distance, awesome locality – a tradeoff that will turn out to be fundamental to codes with only 2D connectivity.


NithinCode

My friend Nithin made this one. It is here as an example placeholder as we built out the page for this code family.


Surface

An open-boundary version of the famous toric code, the first topological code. Terrible rate, ok-ish distance, awesome locality – a tradeoff that will turn out to be fundamental to codes with only 2D connectivity.


Gottesman

The [[2ʲ, 2ʲ - j - 2, 3]] family of codes, the quantum equivalent of the Hamming codes, capable of correcting any single-qubit error.


Steane7

One of the earliest proof-of-concept error correcting codes.


Shor9

One of the earliest proof-of-concept error correcting codes, a concatenation of a 3-bit classical repetition code dedicated to protecting against bit-flips, and a 3-bit repetition code dedicated to protecting against phase-flips.


Perfect5

One of the earliest proof-of-concept error correcting codes. The smallest code that can protect against any single-qubit error. Not a CSS code.


\ No newline at end of file diff --git a/code_evaluation.jl b/code_evaluation.jl index 5bdcea7b9..f028cb0cc 100644 --- a/code_evaluation.jl +++ b/code_evaluation.jl @@ -23,7 +23,7 @@ function evaluate_codes_decoders_setups(codes,decoders,setups; #Threads.@spawn begin #@show (c, d, s, Threads.threadid()) done_samples = 0 - @withprogress name="$(c) $(d) $(s)" for iᵉ in reverse(eachindex(errors)) # reverse to get the smaller tasks first, to populate the progress bar + @withprogress name="$(instancenameof(c)) $(skipredundantsuffix(d)) $(skipredundantsuffix(s))" for iᵉ in reverse(eachindex(errors)) # reverse to get the smaller tasks first, to populate the progress bar e = errors[iᵉ] decoder = isnothing(decoder) ? d(c) : decoder setup = s(e) diff --git a/code_figures.jl b/code_figures.jl index 98c872b5b..ed4805ac1 100644 --- a/code_figures.jl +++ b/code_figures.jl @@ -6,7 +6,7 @@ function make_decoder_figure(phys_errors, results; linestyles=[:solid, :dash, :dot, :dashdot, :dashdotdot, Linestyle([0.5, 1.0, 1.5, 2.5])], markers=['●', '■', '▲', '▼', '◆', '★'], single_error=false, - colorlabels=[], linestylelabels=[], markerlabels=[], + codelabels=[], decoderlabels=[], setuplabels=[], ) minlim = minimum(phys_errors) #minlim = min(minimum(phys_errors),minimum(skipzeronan(results))) @@ -15,46 +15,51 @@ function make_decoder_figure(phys_errors, results; fresults = copy(results) fresults[results.==0] .= NaN - f = Figure(size=(1200,400)) - a = Axis(f[1:3,1:3], + f = Figure(size=(1000,400)) + a = Axis(f[1:7,1:3], xscale=log10, yscale=log10, limits=(minlim,maxlim,minlim,maxlim), aspect=DataAspect(), xlabel="physical error rate", ylabel="logical error rate", title=title) + + singlecode = size(results,3) == 1 + plotcolor(iᶜ,iᵈ) = singlecode ? colors[iᵈ] : colors[iᶜ] + decoderlegendcolor(iᵈ) = singlecode ? colors[iᵈ] : :gray + b = lines!(a, [minlim,maxlim],[minlim,maxlim], color=:black) for (iᶜ,iᵈ,iˢ) in Iterators.product(axes.((fresults,), (3,4,5))...) if single_error - scatter!(a, phys_errors, max.(fresults[:,1,iᶜ,iᵈ,iˢ],fresults[:,2,iᶜ,iᵈ,iˢ]), marker=markers[iˢ], color=colors[iᶜ], linestyle=linestyles[iᵈ]) - lines!( a, phys_errors, max.(fresults[:,1,iᶜ,iᵈ,iˢ],fresults[:,2,iᶜ,iᵈ,iˢ]), marker=markers[iˢ], color=colors[iᶜ], linestyle=linestyles[iᵈ]) + scatter!(a, phys_errors, max.(fresults[:,1,iᶜ,iᵈ,iˢ],fresults[:,2,iᶜ,iᵈ,iˢ]), marker=markers[iˢ], color=plotcolor(iᶜ,iᵈ), linestyle=linestyles[iᵈ]) + lines!( a, phys_errors, max.(fresults[:,1,iᶜ,iᵈ,iˢ],fresults[:,2,iᶜ,iᵈ,iˢ]), marker=markers[iˢ], color=plotcolor(iᶜ,iᵈ), linestyle=linestyles[iᵈ]) else - scatter!(a, phys_errors, fresults[:,1,iᶜ,iᵈ,iˢ], marker=:+, color=colors[iᶜ], linestyle=linestyles[iᵈ]) - scatter!(a, phys_errors, fresults[:,2,iᶜ,iᵈ,iˢ], marker=:x, color=colors[iᶜ], linestyle=linestyles[iᵈ]) - lines!( a, phys_errors, fresults[:,1,iᶜ,iᵈ,iˢ], marker=:+, color=colors[iᶜ], linestyle=linestyles[iᵈ]) - lines!( a, phys_errors, fresults[:,2,iᶜ,iᵈ,iˢ], marker=:x, color=colors[iᶜ], linestyle=linestyles[iᵈ]) + scatter!(a, phys_errors, fresults[:,1,iᶜ,iᵈ,iˢ], marker=:+, color=plotcolor(iᶜ,iᵈ), linestyle=linestyles[iᵈ]) + scatter!(a, phys_errors, fresults[:,2,iᶜ,iᵈ,iˢ], marker=:x, color=plotcolor(iᶜ,iᵈ), linestyle=linestyles[iᵈ]) + lines!( a, phys_errors, fresults[:,1,iᶜ,iᵈ,iˢ], marker=:+, color=plotcolor(iᶜ,iᵈ), linestyle=linestyles[iᵈ]) + lines!( a, phys_errors, fresults[:,2,iᶜ,iᵈ,iˢ], marker=:x, color=plotcolor(iᶜ,iᵈ), linestyle=linestyles[iᵈ]) end end ca = [] - for (iᶜ,label) in enumerate(colorlabels) - push!(ca, lines!(a, [NaN], [NaN], color=colors[iᶜ], label=label)) + for (iᶜ,label) in enumerate(codelabels) + push!(ca, lines!(a, [NaN], [NaN], color=plotcolor(iᶜ,1), label=label)) end - Legend(f[1,4],ca,colorlabels, "Code", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=2) + Legend(f[1:2,4],ca,codelabels, "Code", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=2) la = [] - for (iᵈ,label) in enumerate(linestylelabels) - push!(la, lines!(a, [NaN], [NaN], linestyle=linestyles[iᵈ], color=:gray, label=label)) + for (iᵈ,label) in enumerate(decoderlabels) + push!(la, lines!(a, [NaN], [NaN], linestyle=linestyles[iᵈ], color=decoderlegendcolor(iᵈ), label=label)) end - Legend(f[2,4],la,linestylelabels, "Decoder", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=2) + Legend(f[3:6,4],la,decoderlabels, "Decoder", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=1) ma = [] if single_error - for (iˢ,label) in enumerate(markerlabels) + for (iˢ,label) in enumerate(setuplabels) push!(ma, scatter!(a, [NaN], [NaN], marker=markers[iˢ], color=:gray, label=label)) end - Legend(f[3,4],ma,markerlabels, "Circuit Type", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=2) + Legend(f[7,4],ma,setuplabels, "Circuit Type", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=2) else push!(ma, scatter!(a, [NaN], [NaN], marker=:+, color=:gray, label="X")) push!(ma, scatter!(a, [NaN], [NaN], marker=:x, color=:gray, label="Z")) - Legend(f[3,4],ma,["X", "Z"], "Logical Error", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=2) + Legend(f[7,4],ma,["X", "Z"], "Logical Error", framevisible = false, halign=:left, titlehalign=:left, valign=:top, nbanks=2) end f end diff --git a/code_helpers.jl b/code_helpers.jl new file mode 100644 index 000000000..49ff897db --- /dev/null +++ b/code_helpers.jl @@ -0,0 +1,46 @@ +function instancenameof(x) + t = typeof(x) + str = string(nameof(t))*"(" + nf = nfields(x) + nb = sizeof(x) + if nf != 0 || nb == 0 + for i in 1:nf + f = fieldname(t, i) + str *= string(getfield(x, i)) + if i < nf + str *= ", " + end + end + end + str *= ")" + return str +end + +function skipredundantsuffix(x) + x = string(x) + xs = split(x, "(") + xs = [chopsuffix(chopsuffix(x, "Decoder"), "ECCSetup") for x in xs] + return join(xs, "(") +end + +struct KWFun + f + kwargs +end + +function (f::KWFun)(c) + f.f(c; f.kwargs...) +end + +function skipredundantsuffix(x::KWFun) + f = skipredundantsuffix(x.f) + return "$f($(join(["$k=$v" for (k,v) in pairs(x.kwargs)], ", ")))" +end + +function Base.string(x::KWFun) + f = string(x.f) + return "$f(_;$(join(["$k=$v" for (k,v) in pairs(x.kwargs)], ", ")))" +end + +typename(t) = nameof(t) +typename(t::KWFun) = nameof(t.f) diff --git a/code_metadata.jl b/code_metadata.jl index 5ca76f1e0..1568814ab 100644 --- a/code_metadata.jl +++ b/code_metadata.jl @@ -1,34 +1,16 @@ using QuantumClifford using QuantumClifford.ECC -using PyQDecoders -using LDPCDecoders +import PyQDecoders +import LDPCDecoders logrange(eᵐⁱⁿ, eᵐᵃˣ, steps) = exp.(range(log(eᵐⁱⁿ), log(eᵐᵃˣ), length=steps)) const eᵐⁱⁿ = 0.00001 const eᵐᵃˣ = 0.3 const steps = 20 +include("code_helpers.jl") include("hodgepodge/hodgepodge_codes.jl") -struct KWFun - f - kwargs -end - -function (f::KWFun)(c) - f.f(c; f.kwargs...) -end - -function skipredundantsuffix(x::KWFun) - f = skipredundantsuffix(x.f) - return "$f($(join(["$k=$v" for (k,v) in pairs(x.kwargs)], ", ")))" -end - -function Base.string(x::KWFun) - f = string(x.f) - return "$f(_;$(join(["$k=$v" for (k,v) in pairs(x.kwargs)], ", ")))" -end - const code_metadata = Dict( Gottesman => Dict( :family => [(3,),(4,),(5,),(6,)], @@ -89,8 +71,11 @@ const code_metadata = Dict( Hodgepodge.NithinCode => Dict( :family => [()], :decoders => [TableDecoder, - KWFun(PyBeliefPropDecoder, (;bpmethod=:productsum)), - KWFun(PyBeliefPropOSDecoder, (;bpmethod=:productsum)), + BeliefPropDecoder, + BitFlipDecoder, + KWFun(PyBeliefPropOSDecoder, (;bpmethod=:productsum, osdmethod=:zeroorder)), + KWFun(PyBeliefPropOSDecoder, (;bpmethod=:productsum, osdmethod=:exhaustive, osdorder=5)), + KWFun(PyBeliefPropOSDecoder, (;bpmethod=:productsum, osdmethod=:combinationsweep, osdorder=10)), ], :setups => [CommutationCheckECCSetup], :ecczoo => "", diff --git a/codes/Cleve8/totalsummary.png b/codes/Cleve8/totalsummary.png index 5aa3381ea..b316561fd 100644 Binary files a/codes/Cleve8/totalsummary.png and b/codes/Cleve8/totalsummary.png differ diff --git a/codes/Gottesman/totalsummary.png b/codes/Gottesman/totalsummary.png index b7f729a34..988914fd0 100644 Binary files a/codes/Gottesman/totalsummary.png and b/codes/Gottesman/totalsummary.png differ diff --git a/codes/NithinCode/totalsummary.png b/codes/NithinCode/totalsummary.png index 14f9ec443..0d8fa07cd 100644 Binary files a/codes/NithinCode/totalsummary.png and b/codes/NithinCode/totalsummary.png differ diff --git a/codes/Perfect5/totalsummary.png b/codes/Perfect5/totalsummary.png index 7adac0057..77162c4ff 100644 Binary files a/codes/Perfect5/totalsummary.png and b/codes/Perfect5/totalsummary.png differ diff --git a/codes/Shor9/totalsummary.png b/codes/Shor9/totalsummary.png index 1e51b9257..924074175 100644 Binary files a/codes/Shor9/totalsummary.png and b/codes/Shor9/totalsummary.png differ diff --git a/codes/Steane7/totalsummary.png b/codes/Steane7/totalsummary.png index 99c914b3f..406b89864 100644 Binary files a/codes/Steane7/totalsummary.png and b/codes/Steane7/totalsummary.png differ diff --git a/codes/Surface/totalsummary.png b/codes/Surface/totalsummary.png index e393f8caf..a4db497d1 100644 Binary files a/codes/Surface/totalsummary.png and b/codes/Surface/totalsummary.png differ diff --git a/codes/Toric/totalsummary.png b/codes/Toric/totalsummary.png index a73e9746a..015584217 100644 Binary files a/codes/Toric/totalsummary.png and b/codes/Toric/totalsummary.png differ diff --git a/codes/results.sqlite b/codes/results.sqlite index cffbfd524..4780c060a 100644 Binary files a/codes/results.sqlite and b/codes/results.sqlite differ diff --git a/generate_codes.jl b/generate_codes.jl index 6041cc8c5..965d737cf 100644 --- a/generate_codes.jl +++ b/generate_codes.jl @@ -25,33 +25,6 @@ global_logger(TerminalLogger(right_justify=120)) ## -function instancenameof(x) - t = typeof(x) - str = string(nameof(t))*"(" - nf = nfields(x) - nb = sizeof(x) - if nf != 0 || nb == 0 - for i in 1:nf - f = fieldname(t, i) - str *= string(getfield(x, i)) - if i < nf - str *= ", " - end - end - end - str *= ")" - return str -end - -function skipredundantsuffix(x) - x = string(x) - xs = split(x, "(") - xs = [chopsuffix(chopsuffix(x, "Decoder"), "ECCSetup") for x in xs] - return join(xs, "(") -end - -## - include("code_metadata.jl") include("code_markdown.jl") @@ -97,9 +70,9 @@ function prep_figures(code_metada) # Plotting summary fig f = make_decoder_figure(e, r; title="$(codeentryname)", - colorlabels=instancenameof.(codes), - linestylelabels=skipredundantsuffix.(decoders), - markerlabels=skipredundantsuffix.(setups), + codelabels=instancenameof.(codes), + decoderlabels=skipredundantsuffix.(decoders), + setuplabels=skipredundantsuffix.(setups), single_error ) save("codes/$(codeentryname)/totalsummary.png", f) diff --git a/scratch.jl b/scratch.jl new file mode 100644 index 000000000..bff9dec04 --- /dev/null +++ b/scratch.jl @@ -0,0 +1,48 @@ +import LDPCDecoders +using Test + +function test_bpropdecoder() + H = LDPCDecoders.parity_check_matrix(1000,10,9); + decoder = LDPCDecoders.BeliefPropagationDecoder(H, 0.01, 100); + count = 0 + for _ in 1:1000 + error = rand(1000) .< 0.01; + syndrome = (H * error) .% 2; + guess, success = LDPCDecoders.decode!(decoder, syndrome); + count += error == guess + end + return 1-count/1000 +end + +function test_bitflipdecoder() + H = LDPCDecoders.parity_check_matrix(1000,10,9); + decoder = LDPCDecoders.BitFlipDecoder(H, 0.01, 100); + count = 0 + for _ in 1:1000 + error = rand(1000) .< 0.01; + syndrome = (H * error) .% 2; + guess, success = LDPCDecoders.decode!(decoder, syndrome); + count += error == guess + end + return 1-count/1000 +end + +function test_bpropdecoder_old() + H = LDPCDecoders.parity_check_matrix(1000,10,9); + decoder = LDPCDecoders.BeliefPropagationDecoder(H, 0.01, 100); + count = 0 + for _ in 1:1000 + error = rand(1000) .< 0.01; + syndrome = (H * error) .% 2; + LDPCDecoders.reset!(decoder) + LDPCDecoders.syndrome_decode!(decoder, decoder.scratch, syndrome) + count += error == decoder.scratch.err + end + return 1-count/1000 +end + +## + +@test test_bitflipdecoder() +@test test_bpropdecoder() < 0.001 +@test test_bpropdecoder_old() < 0.001 diff --git a/sitemap.xml b/sitemap.xml index df0aa6c92..e292c8577 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -3,109 +3,115 @@ codes/Shor9/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 codes/Surface/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 contributors/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 codes/Cleve8/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 codes/Gottesman/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 codes/Toric/index.html - 2024-04-02 + 2024-04-10 + monthly + 0.5 + + + allcodes/index.html + 2024-04-10 monthly 0.5 .CondaPkg/env/lib/python3.12/site-packages/numpy/random/LICENSE/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 logistics/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 .CondaPkg/env/lib/python3.12/site-packages/scipy/fft/_pocketfft/LICENSE/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 codes/Perfect5/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 alldecoders/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 faq/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 codes/Steane7/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 allcircuits/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 index.html - 2024-04-02 + 2024-04-10 monthly 0.5 .CondaPkg/env/lib/python3.12/site-packages/ldpc/include/README/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 codes/NithinCode/index.html - 2024-04-02 + 2024-04-10 monthly 0.5 .CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/web_backend/all_figures/ - 2024-04-02 + 2024-04-10 monthly 0.5 @@ -117,13 +123,13 @@ .CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/web_backend/single_figure/ - 2024-04-02 + 2024-04-10 monthly 0.5 .CondaPkg/env/lib/python3.12/site-packages/matplotlib/backends/web_backend/ipython_inline_figure/ - 2024-04-02 + 2024-04-10 monthly 0.5