Bug#1136875: spopt: FTBFS: E AttributeError: module 'numpy' has no attribute 'in1d'. Did you mean: 'int16'?

Santiago Vila sanvila at debian.org
Sat May 16 17:28:07 BST 2026


Package: src:spopt
Version: 0.6.1-4
Severity: serious
Tags: ftbfs forky sid

Dear maintainer:

During a rebuild of all packages in unstable, this package failed to build.

Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:

https://people.debian.org/~sanvila/build-logs/202605/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:spopt, so that this is still
visible in the BTS web page for this package.

Thanks.

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --with sphinxdoc  --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 debian/rules binary
dh binary --with sphinxdoc  --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
   debian/rules override_dh_auto_build
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_auto_build
I: pybuild plugin_pyproject:142: Building wheel for python3.14 with "build" module
I: pybuild base:385: python3.14 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14_spopt  

[... snipped ...]

spopt/tests/test_p_median.py::TestSyntheticLocate::test_p_median_from_geodataframe PASSED
spopt/tests/test_p_median.py::TestSyntheticLocate::test_pmedian_facility_client_array_from_geodataframe PASSED
spopt/tests/test_p_median.py::TestSyntheticLocate::test_pmedian_client_facility_array_from_geodataframe PASSED
spopt/tests/test_p_median.py::TestSyntheticLocate::test_pmedian_preselected_facility_client_array_from_geodataframe PASSED
spopt/tests/test_p_median.py::TestRealWorldLocate::test_optimality_pmedian_from_cost_matrix PASSED
spopt/tests/test_p_median.py::TestRealWorldLocate::test_infeasibility_pmedian_from_cost_matrix PASSED
spopt/tests/test_p_median.py::TestRealWorldLocate::test_mixin_mean_distance PASSED
spopt/tests/test_p_median.py::TestRealWorldLocate::test_optimality_pmedian_from_geodataframe PASSED
spopt/tests/test_p_median.py::TestRealWorldLocate::test_infeasibility_pmedian_from_geodataframe PASSED
spopt/tests/test_p_median.py::TestErrorsWarnings::test_attribute_error_add_assignment_constraint PASSED
spopt/tests/test_p_median.py::TestErrorsWarnings::test_attribute_error_add_opening_constraint PASSED
spopt/tests/test_p_median.py::TestErrorsWarnings::test_error_pmedian_different_crs PASSED
spopt/tests/test_p_median.py::TestErrorsWarnings::test_warning_pmedian_demand_geodataframe PASSED
spopt/tests/test_random_regions.py::TestRandomRegionEmpirical::test_random_region_6_card PASSED
spopt/tests/test_random_regions.py::TestRandomRegionEmpirical::test_random_region_6_card_contig_compact PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsEmpirical::test_random_regions_6_card PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_unconstrained PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_exo_regions PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_endo_regions_constrained_card PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_exo_regions_constrained_card PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_endo_regions_constrained_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_exo_regions_constrained_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_exo_regions_constrained_card_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_region_endo_regions_constrained_card_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_regions_error_card PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_regions_error_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionSynthetic::test_random_regions_error_nregs PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_unconstrained PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_exo_regions PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_endo_regions_constrained_card PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_exo_regions_constrained_card PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_endo_regions_constrained_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_exo_regions_constrained_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_exo_regions_constrained_card_contig PASSED
spopt/tests/test_random_regions.py::TestRandomRegionsSynthetic::test_random_region_endo_regions_constrained_card_contig PASSED
spopt/tests/test_region_k_means.py::TestRegionKMeansHeuristic::test_region_k_means_heuristic_synth_small PASSED
spopt/tests/test_region_k_means.py::TestRegionKMeansHeuristic::test_region_k_means_heuristic_synth_large PASSED
spopt/tests/test_region_util.py::TestRegionUtil::test_array_from_dict_values PASSED
spopt/tests/test_region_util.py::TestRegionUtil::test_scipy_sparse_matrix_from_dict PASSED
spopt/tests/test_region_util.py::TestRegionUtil::test_dict_from_graph_attr PASSED
spopt/tests/test_region_util.py::TestRegionUtil::test_check_solver PASSED
spopt/tests/test_region_util.py::TestRegionUtil::test_get_solver_instance PASSED
spopt/tests/test_skater.py::TestSkater::test_skater_defaults PASSED
spopt/tests/test_skater.py::TestSkater::test_skater_defaults_verbose 
finding cut...:   0%|          | 0/31 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 31/31 [00:00<00:00, 2909.00it/s]

finding cut...:   0%|          | 0/30 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 30/30 [00:00<00:00, 2380.69it/s]

finding cut...:   0%|          | 0/29 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 29/29 [00:00<00:00, 2000.51it/s]

finding cut...:   0%|          | 0/28 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 28/28 [00:00<00:00, 1715.84it/s]
PASSED
spopt/tests/test_skater.py::TestSkater::test_skater_defaults_super_verbose Computing Affinity Kernel took 0.00s
Computing initial MST took 0.00s
Computing connected components took 0.00s.

finding cut...:   0%|          | 0/31 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 31/31 [00:00<00:00, 2909.13it/s]
making cut deletion(in_node=np.int32(22), out_node=np.int32(25), score=844543.4871794871)...

finding cut...:   0%|          | 0/30 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 30/30 [00:00<00:00, 2358.69it/s]
making cut deletion(in_node=np.int32(9), out_node=np.int32(10), score=679726.9733333334)...

finding cut...:   0%|          | 0/29 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 29/29 [00:00<00:00, 1957.56it/s]
making cut deletion(in_node=np.int32(13), out_node=np.int32(16), score=601130.3333333333)...

finding cut...:   0%|          | 0/28 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 28/28 [00:00<00:00, 1704.75it/s]
making cut deletion(in_node=np.int32(3), out_node=np.int32(5), score=551179.9523809524)...
PASSED
spopt/tests/test_skater.py::TestSkater::test_skater_defaults_non_defaults Computing Affinity Kernel took 0.00s
Computing initial MST took 0.00s
Computing connected components took 0.00s.
(array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32), deletion(in_node=nan, out_node=nan, score=inf))

finding cut...:   0%|          | 0/31 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 31/31 [00:00<00:00, 4154.24it/s]
making cut deletion(in_node=np.int32(22), out_node=np.int32(25), score=844543.4871794871)...

finding cut...:   0%|          | 0/30 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 30/30 [00:00<00:00, 3706.20it/s]
making cut deletion(in_node=np.int32(9), out_node=np.int32(12), score=797604.1014492754)...

finding cut...:   0%|          | 0/29 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 29/29 [00:00<00:00, 3643.29it/s]
making cut deletion(in_node=np.int32(3), out_node=np.int32(5), score=746118.6666666667)...

finding cut...:   0%|          | 0/28 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 28/28 [00:00<00:00, 3310.51it/s]
making cut deletion(in_node=np.int32(14), out_node=np.int32(20), score=700129.6666666667)...

finding cut...:   0%|          | 0/27 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 27/27 [00:00<00:00, 3609.56it/s]
making cut deletion(in_node=np.int32(5), out_node=np.int32(8), score=659860.4666666667)...

finding cut...:   0%|          | 0/26 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 26/26 [00:00<00:00, 4798.55it/s]
making cut deletion(in_node=np.int32(7), out_node=np.int32(28), score=648175.4666666666)...

finding cut...:   0%|          | 0/25 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 25/25 [00:00<00:00, 5160.82it/s]
making cut deletion(in_node=np.int32(22), out_node=np.int32(23), score=640467.8)...

finding cut...:   0%|          | 0/24 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 24/24 [00:00<00:00, 5858.99it/s]
making cut deletion(in_node=np.int32(2), out_node=np.int32(27), score=637390.3666666666)...

finding cut...:   0%|          | 0/23 [00:00<?, ?it/s]
finding cut...: 100%|██████████| 23/23 [00:00<00:00, 10896.76it/s]
PASSED
spopt/tests/test_skater.py::TestSkater::test_skater_island_pass PASSED
spopt/tests/test_skater.py::TestSkater::test_skater_island_fail PASSED
spopt/tests/test_skater.py::TestSkater::test_skater_forest_affinity PASSED
spopt/tests/test_spenc.py::TestSpenc::test_spenc_non_defaults PASSED
spopt/tests/test_ward.py::TestWard::test_ward_defaults PASSED

=================================== FAILURES ===================================
________________________ TestAZP.test_azp_basic_from_w _________________________

self = <spopt.tests.test_azp.TestAZP object at 0x7f64ab2b8410>

    def test_azp_basic_from_w(self):
        w = libpysal.weights.Queen.from_dataframe(self.mexico, **w_kwargs)
    
        weights = {}
        for k, v in w.neighbors.items():
            arr = []
            x = self.mexico.iloc[k].geometry.centroid
            for n in v:
                y = self.mexico.iloc[n].geometry.centroid
                arr.append(x.distance(y))
            weights[k] = arr
        neighbors = w.neighbors
        w = libpysal.weights.W(neighbors, weights)
    
        attrs_name = [f"PCGDP{year}" for year in range(1950, 2010, 10)]
        args = (self.mexico, w, attrs_name)
        kwargs = {"n_clusters": 3, "random_state": RANDOM_STATE}
        model = AZP(*args, **kwargs)
>       model.solve()

spopt/tests/test_azp.py:55: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
spopt/region/azp.py:154: in solve
    model.fit_from_w(
spopt/region/azp.py:309: in fit_from_w
    self.fit_from_scipy_sparse_matrix(
spopt/region/azp.py:262: in fit_from_scipy_sparse_matrix
    labels_comp = self._azp_connected_component(
spopt/region/azp.py:533: in _azp_connected_component
    sub_adj = sub_adj_matrix(
spopt/region/csgraph_utils.py:142: in sub_adj_matrix
    mask = np.in1d(nodes, wo_nodes, invert=True)
           ^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

attr = 'in1d'

    def __getattr__(attr):
        # Warn for expired attributes
        import warnings
    
        if attr == "linalg":
            import numpy.linalg as linalg
            return linalg
        elif attr == "fft":
            import numpy.fft as fft
            return fft
        elif attr == "dtypes":
            import numpy.dtypes as dtypes
            return dtypes
        elif attr == "random":
            import numpy.random as random
            return random
        elif attr == "polynomial":
            import numpy.polynomial as polynomial
            return polynomial
        elif attr == "ma":
            import numpy.ma as ma
            return ma
        elif attr == "ctypeslib":
            import numpy.ctypeslib as ctypeslib
            return ctypeslib
        elif attr == "exceptions":
            import numpy.exceptions as exceptions
            return exceptions
        elif attr == "testing":
            import numpy.testing as testing
            return testing
        elif attr == "matlib":
            import numpy.matlib as matlib
            return matlib
        elif attr == "f2py":
            import numpy.f2py as f2py
            return f2py
        elif attr == "typing":
            import numpy.typing as typing
            return typing
        elif attr == "rec":
            import numpy.rec as rec
            return rec
        elif attr == "char":
            import numpy.char as char
            return char
        elif attr == "array_api":
            raise AttributeError("`numpy.array_api` is not available from "
                                 "numpy 2.0 onwards", name=None)
        elif attr == "core":
            import numpy.core as core
            return core
        elif attr == "strings":
            import numpy.strings as strings
            return strings
        elif attr == "distutils":
            if 'distutils' in __numpy_submodules__:
                import numpy.distutils as distutils
                return distutils
            else:
                raise AttributeError("`numpy.distutils` is not available from "
                                     "Python 3.12 onwards", name=None)
    
        if attr in __future_scalars__:
            # And future warnings for those that will change, but also give
            # the AttributeError
            warnings.warn(
                f"In the future `np.{attr}` will be defined as the "
                "corresponding NumPy scalar.", FutureWarning, stacklevel=2)
    
        if attr in __former_attrs__:
            raise AttributeError(__former_attrs__[attr], name=None)
    
        if attr in __expired_attributes__:
            raise AttributeError(
                f"`np.{attr}` was removed in the NumPy 2.0 release. "
                f"{__expired_attributes__[attr]}",
                name=None
            )
    
        if attr == "chararray":
            warnings.warn(
                "`np.chararray` is deprecated and will be removed from "
                "the main namespace in the future. Use an array with a string "
                "or bytes dtype instead.", DeprecationWarning, stacklevel=2)
            import numpy.char as char
            return char.chararray
    
>       raise AttributeError(f"module {__name__!r} has no attribute {attr!r}")
E       AttributeError: module 'numpy' has no attribute 'in1d'. Did you mean: 'int16'?

/usr/lib/python3/dist-packages/numpy/__init__.py:792: AttributeError
=============================== warnings summary ===============================
spopt/tests/test_c_p_median.py: 6 warnings
spopt/tests/test_clscp-so.py: 10 warnings
spopt/tests/test_locate_util.py: 2 warnings
spopt/tests/test_lscp.py: 16 warnings
spopt/tests/test_lscpb.py: 16 warnings
spopt/tests/test_mclp.py: 16 warnings
spopt/tests/test_p_center.py: 14 warnings
spopt/tests/test_p_dispersion.py: 4 warnings
spopt/tests/test_p_median.py: 16 warnings
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spopt/build/spopt/locate/util.py:70: DeprecationWarning: The 'unary_union' attribute is deprecated, use the 'union_all()' method instead.
    geom = in_data.geometry.unary_union

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED spopt/tests/test_azp.py::TestAZP::test_azp_basic_from_w - AttributeErr...
================= 1 failed, 178 passed, 100 warnings in 21.49s =================
E: pybuild pybuild:485: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_spopt/build; python3.13 -m pytest -s -v
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.14 3.13" --parallel=2 returned exit code 13
make: *** [debian/rules:13: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess failed with exit status 2
--------------------------------------------------------------------------------



More information about the debian-science-maintainers mailing list