Bug#1054759: spaghetti: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13

Lucas Nussbaum lucas at debian.org
Fri Oct 27 20:34:04 BST 2023


Source: spaghetti
Version: 1.7.4-2
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lucas at debian.org
Usertags: ftbfs-20231027 ftbfs-trixie

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> dh_auto_build
> I: pybuild plugin_pyproject:110: Building wheel for python3.11 with "build" module
> I: pybuild base:310: python3.11 -m build --skip-dependency-check --no-isolation --wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_spaghetti 
> * Building wheel...
> running bdist_wheel
> running build
> running build_py
> creating build
> creating build/lib
> creating build/lib/spaghetti
> copying spaghetti/__init__.py -> build/lib/spaghetti
> copying spaghetti/analysis.py -> build/lib/spaghetti
> copying spaghetti/util.py -> build/lib/spaghetti
> copying spaghetti/network.py -> build/lib/spaghetti
> creating build/lib/spaghetti/tests
> copying spaghetti/tests/test_network.py -> build/lib/spaghetti/tests
> copying spaghetti/tests/__init__.py -> build/lib/spaghetti/tests
> running egg_info
> creating spaghetti.egg-info
> writing spaghetti.egg-info/PKG-INFO
> writing dependency_links to spaghetti.egg-info/dependency_links.txt
> writing requirements to spaghetti.egg-info/requires.txt
> writing top-level names to spaghetti.egg-info/top_level.txt
> writing manifest file 'spaghetti.egg-info/SOURCES.txt'
> reading manifest file 'spaghetti.egg-info/SOURCES.txt'
> adding license file 'LICENSE.txt'
> writing manifest file 'spaghetti.egg-info/SOURCES.txt'
> installing to build/bdist.linux-x86_64/wheel
> running install
> running install_lib
> creating build/bdist.linux-x86_64
> creating build/bdist.linux-x86_64/wheel
> creating build/bdist.linux-x86_64/wheel/spaghetti
> copying build/lib/spaghetti/__init__.py -> build/bdist.linux-x86_64/wheel/spaghetti
> creating build/bdist.linux-x86_64/wheel/spaghetti/tests
> copying build/lib/spaghetti/tests/test_network.py -> build/bdist.linux-x86_64/wheel/spaghetti/tests
> copying build/lib/spaghetti/tests/__init__.py -> build/bdist.linux-x86_64/wheel/spaghetti/tests
> copying build/lib/spaghetti/analysis.py -> build/bdist.linux-x86_64/wheel/spaghetti
> copying build/lib/spaghetti/util.py -> build/bdist.linux-x86_64/wheel/spaghetti
> copying build/lib/spaghetti/network.py -> build/bdist.linux-x86_64/wheel/spaghetti
> running install_egg_info
> Copying spaghetti.egg-info to build/bdist.linux-x86_64/wheel/spaghetti-0.0.0.egg-info
> running install_scripts
> creating build/bdist.linux-x86_64/wheel/spaghetti-0.0.0.dist-info/WHEEL
> creating '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_spaghetti/.tmp-tc66ejt4/spaghetti-0.0.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
> adding 'spaghetti/__init__.py'
> adding 'spaghetti/analysis.py'
> adding 'spaghetti/network.py'
> adding 'spaghetti/util.py'
> adding 'spaghetti/tests/__init__.py'
> adding 'spaghetti/tests/test_network.py'
> adding 'spaghetti-0.0.0.dist-info/LICENSE.txt'
> adding 'spaghetti-0.0.0.dist-info/METADATA'
> adding 'spaghetti-0.0.0.dist-info/WHEEL'
> adding 'spaghetti-0.0.0.dist-info/top_level.txt'
> adding 'spaghetti-0.0.0.dist-info/RECORD'
> removing build/bdist.linux-x86_64/wheel
> Successfully built spaghetti-0.0.0-py3-none-any.whl
> I: pybuild plugin_pyproject:122: Unpacking wheel built for python3.11 with "installer" module
> PYTHONPATH=. https_proxy='https://127.0.0.1:9/' no_proxy=localhost python3 -m sphinx -N -bhtml docs/ debian/html
> Running Sphinx v5.3.0
> /<<PKGBUILDDIR>>/spaghetti/network.py:40: FutureWarning: The next major release of pysal/spaghetti (2.0.0) will drop support for all ``libpysal.cg`` geometries. This change is a first step in refactoring ``spaghetti`` that is expected to result in dramatically reduced runtimes for network instantiation and operations. Users currently requiring network and point pattern input as ``libpysal.cg`` geometries should prepare for this simply by converting to ``shapely`` geometries.
>   warnings.warn(dep_msg, FutureWarning, stacklevel=1)
> making output directory... done
> checking bibtex cache... out of date
> parsing bibtex file /<<PKGBUILDDIR>>/docs/_static/references.bib... parsed 55 entries
> [autosummary] generating autosummary for: api.rst, index.rst, installation.rst, references.rst, tutorials.rst
> [autosummary] generating autosummary for: /<<PKGBUILDDIR>>/docs/generated/spaghetti.Network.rst, /<<PKGBUILDDIR>>/docs/generated/spaghetti.PointPattern.rst, /<<PKGBUILDDIR>>/docs/generated/spaghetti.element_as_gdf.rst, /<<PKGBUILDDIR>>/docs/generated/spaghetti.extract_component.rst, /<<PKGBUILDDIR>>/docs/generated/spaghetti.network.Network.loadnetwork.rst, /<<PKGBUILDDIR>>/docs/generated/spaghetti.network.Network.savenetwork.rst, /<<PKGBUILDDIR>>/docs/generated/spaghetti.regular_lattice.rst, /<<PKGBUILDDIR>>/docs/generated/spaghetti.spanning_tree.rst
> loading intersphinx inventory from https://pysal.org/esda/objects.inv...
> loading intersphinx inventory from https://geopandas.org/en/latest/objects.inv...
> loading intersphinx inventory from https://pysal.org/libpysal/objects.inv...
> loading intersphinx inventory from https://matplotlib.org/stable/objects.inv...
> loading intersphinx inventory from https://networkx.org/documentation/stable/objects.inv...
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://pysal.org/esda/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='pysal.org', port=443): Max retries exceeded with url: /esda/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f31836e3c90>: Failed to establish a new connection: [Errno 111] Connection refused')))
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://networkx.org/documentation/stable/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='networkx.org', port=443): Max retries exceeded with url: /documentation/stable/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f3183533ad0>: Failed to establish a new connection: [Errno 111] Connection refused')))
> loading intersphinx inventory from https://numpy.org/doc/stable/objects.inv...
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://geopandas.org/en/latest/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='geopandas.org', port=443): Max retries exceeded with url: /en/latest/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f31836e0710>: Failed to establish a new connection: [Errno 111] Connection refused')))
> loading intersphinx inventory from https://pandas.pydata.org/pandas-docs/stable/objects.inv...
> loading intersphinx inventory from https://pysal.org/pointpats/objects.inv...
> loading intersphinx inventory from https://docs.python.org/3.11/objects.inv...
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://matplotlib.org/stable/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='matplotlib.org', port=443): Max retries exceeded with url: /stable/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f3183529dd0>: Failed to establish a new connection: [Errno 111] Connection refused')))
> loading intersphinx inventory from https://docs.scipy.org/doc/scipy/objects.inv...
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://pandas.pydata.org/pandas-docs/stable/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='pandas.pydata.org', port=443): Max retries exceeded with url: /pandas-docs/stable/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f31838c01d0>: Failed to establish a new connection: [Errno 111] Connection refused')))
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://pysal.org/libpysal/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='pysal.org', port=443): Max retries exceeded with url: /libpysal/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f31838e3810>: Failed to establish a new connection: [Errno 111] Connection refused')))
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://docs.python.org/3.11/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='docs.python.org', port=443): Max retries exceeded with url: /3.11/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f3183870750>: Failed to establish a new connection: [Errno 111] Connection refused')))
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://numpy.org/doc/stable/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='numpy.org', port=443): Max retries exceeded with url: /doc/stable/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f31834ea090>: Failed to establish a new connection: [Errno 111] Connection refused')))
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://docs.scipy.org/doc/scipy/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='docs.scipy.org', port=443): Max retries exceeded with url: /doc/scipy/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f3183870d90>: Failed to establish a new connection: [Errno 111] Connection refused')))
> WARNING: failed to reach any of the inventories with the following issues:
> intersphinx inventory 'https://pysal.org/pointpats/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='pysal.org', port=443): Max retries exceeded with url: /pointpats/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f31834e9c50>: Failed to establish a new connection: [Errno 111] Connection refused')))
> building [mo]: targets for 0 po files that are out of date
> building [html]: targets for 5 source files that are out of date
> updating environment: [new config] 13 added, 0 changed, 0 removed
> reading sources... [  7%] api
> reading sources... [ 15%] generated/spaghetti.Network
> reading sources... [ 23%] generated/spaghetti.PointPattern
> reading sources... [ 30%] generated/spaghetti.element_as_gdf
> reading sources... [ 38%] generated/spaghetti.extract_component
> reading sources... [ 46%] generated/spaghetti.network.Network.loadnetwork
> reading sources... [ 53%] generated/spaghetti.network.Network.savenetwork
> reading sources... [ 61%] generated/spaghetti.regular_lattice
> reading sources... [ 69%] generated/spaghetti.spanning_tree
> reading sources... [ 76%] index
> reading sources... [ 84%] installation
> reading sources... [ 92%] references
> reading sources... [100%] tutorials
> 
> /<<PKGBUILDDIR>>/docs/tutorials.rst:7: WARNING: toctree contains reference to nonexisting document 'notebooks/quickstart'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:7: WARNING: toctree contains reference to nonexisting document 'notebooks/pointpattern-attributes'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:7: WARNING: toctree contains reference to nonexisting document 'notebooks/connected-components'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:7: WARNING: toctree contains reference to nonexisting document 'notebooks/shortest-path-visualization'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:16: WARNING: toctree contains reference to nonexisting document 'notebooks/network-segmentation'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:16: WARNING: toctree contains reference to nonexisting document 'notebooks/network-spatial-dependence'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:16: WARNING: toctree contains reference to nonexisting document 'notebooks/network-spatial-weights'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:16: WARNING: toctree contains reference to nonexisting document 'notebooks/spanning-trees'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:16: WARNING: toctree contains reference to nonexisting document 'notebooks/caveats'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:26: WARNING: toctree contains reference to nonexisting document 'notebooks/network-spatial-autocorrelation'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:26: WARNING: toctree contains reference to nonexisting document 'notebooks/facility-location'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:26: WARNING: toctree contains reference to nonexisting document 'notebooks/transportation-problem'
> /<<PKGBUILDDIR>>/docs/tutorials.rst:26: WARNING: toctree contains reference to nonexisting document 'notebooks/tsp'
> looking for now-outdated files... none found
> pickling environment... done
> checking consistency... done
> preparing documents... done
> writing output... [  7%] api
> writing output... [ 15%] generated/spaghetti.Network
> writing output... [ 23%] generated/spaghetti.PointPattern
> writing output... [ 30%] generated/spaghetti.element_as_gdf
> writing output... [ 38%] generated/spaghetti.extract_component
> writing output... [ 46%] generated/spaghetti.network.Network.loadnetwork
> writing output... [ 53%] generated/spaghetti.network.Network.savenetwork
> writing output... [ 61%] generated/spaghetti.regular_lattice
> writing output... [ 69%] generated/spaghetti.spanning_tree
> writing output... [ 76%] index
> writing output... [ 84%] installation
> writing output... [ 92%] references
> writing output... [100%] tutorials
> 
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:9: WARNING: term not in glossary: 'python:iterable'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:19: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:23: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:27: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:32: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:198: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:241: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:18: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:24: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:29: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:4: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:11: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:8: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:11: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:18: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:21: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:17: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:26: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:32: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:24: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.Network:10: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.PointPattern:27: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.PointPattern:66: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.element_as_gdf:10: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.element_as_gdf:13: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.element_as_gdf:21: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.extract_component:9: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.regular_lattice:14: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.spanning_tree:14: WARNING: undefined label: 'python:bltin-boolean-values'
> /<<PKGBUILDDIR>>/spaghetti/network.py:docstring of spaghetti.network.spanning_tree:19: WARNING: undefined label: 'python:bltin-boolean-values'
> generating indices... genindex done
> highlighting module code... [100%] spaghetti.network
> 
> writing additional pages... search done
> copying images... [ 50%] _static/images/ardc_logo.png
> copying images... [100%] _static/images/nsf_logo.png
> 
> copying static files... done
> copying extra files... done
> dumping search index in English (code: en)... done
> dumping object inventory... done
> build succeeded, 53 warnings.
> 
> The HTML pages are in debian/html.
> make[1]: Leaving directory '/<<PKGBUILDDIR>>'
>    dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:310: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_spaghetti/build; python3.11 -m pytest /<<PKGBUILDDIR>>/spaghetti/tests/
> ============================= test session starts ==============================
> platform linux -- Python 3.11.6, pytest-7.4.3, pluggy-1.3.0
> rootdir: /<<PKGBUILDDIR>>
> plugins: cov-4.1.0, xdist-3.3.1, timeout-2.2.0
> collected 54 items
> 
> ../../../spaghetti/tests/test_network.py EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [ 57%]
> EEEEEEEEEEEEEE.FFFF....                                                  [100%]
> 
> ==================================== ERRORS ====================================
> _____________ ERROR at setup of TestNetwork.test_network_data_read _____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1f2e23d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> _______ ERROR at setup of TestNetwork.test_network_from_libpysal_chains ________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd197d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ____ ERROR at setup of TestNetwork.test_network_from_single_libpysal_chain _____
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd192d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ___ ERROR at setup of TestNetwork.test_network_from_vertical_libpysal_chains ___
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd1a390>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> _____________ ERROR at setup of TestNetwork.test_network_failures ______________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd1aa50>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> __________ ERROR at setup of TestNetwork.test_network_from_geopandas ___________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd1b5d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> _________________ ERROR at setup of TestNetwork.test_round_sig _________________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd1b810>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ________________ ERROR at setup of TestNetwork.test_vertex_atol ________________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd1bf90>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ____________ ERROR at setup of TestNetwork.test_contiguity_weights _____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd000d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ________________ ERROR at setup of TestNetwork.test_components _________________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd00950>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ___________ ERROR at setup of TestNetwork.test_connected_components ____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd016d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ___________ ERROR at setup of TestNetwork.test_distance_band_weights ___________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd03850>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ____________ ERROR at setup of TestNetwork.test_split_arcs_dist_200 ____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd01a10>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ___________ ERROR at setup of TestNetwork.test_split_arcs_dist_1000 ____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd02290>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> __ ERROR at setup of TestNetwork.test_split_arcs_dist_ntw_from_lattice_ring_2 __
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd031d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> __ ERROR at setup of TestNetwork.test_split_arcs_dist_ntw_from_lattice_ring_3 __
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd03e10>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> __ ERROR at setup of TestNetwork.test_split_arcs_dist_ntw_from_lattice_ring_5 __
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd19550>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ____________ ERROR at setup of TestNetwork.test_split_arcs_count_2 _____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd03f90>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ____________ ERROR at setup of TestNetwork.test_split_arcs_count_1 _____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd02dd0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ___________ ERROR at setup of TestNetwork.test_split_arcs_count_half ___________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd01e50>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ________ ERROR at setup of TestNetwork.test_split_arcs_count_1_and_half ________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dd03d50>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ____________ ERROR at setup of TestNetwork.test_split_arcs_misspell ____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dcfb350>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> _____________ ERROR at setup of TestNetwork.test_enum_links_vertex _____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dcfa7d0>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ______________ ERROR at setup of TestNetwork.test_shortest_paths _______________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dcfb510>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> _____________ ERROR at setup of TestNetwork.test_extract_component _____________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dcfbf90>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> _______________ ERROR at setup of TestNetwork.test_spanning_tree _______________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dcf9550>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ______________ ERROR at setup of TestNetwork.test_element_as_gdf _______________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dcf8450>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ______________ ERROR at setup of TestNetwork.test_regular_lattice ______________
> 
> self = <spaghetti.tests.test_network.TestNetwork object at 0x7efc1dcf8c50>
> 
>     def setup_method(self):
>         # empirical network instantiated from shapefile
>         self.ntw_shp = spaghetti.Network(in_data=STREETS, weightings=True)
>         self.n_known_shp_arcs, self.n_known_shp_vertices = 303, 230
>     
>         # native pysal geometries
>         self.chains_from_shp = [
>             cg.Chain([cg.Point(self.ntw_shp.vertex_coords[vertex]) for vertex in arc])
> >           for arc in self.ntw_shp.arcs
>         ]
> E       AttributeError: 'Network' object has no attribute 'arcs'
> 
> ../../../spaghetti/tests/test_network.py:101: AttributeError
> ____ ERROR at setup of TestNetworkPointPattern.test_pp_from_libpysal_points ____
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcf98d0>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1de6a710>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _ ERROR at setup of TestNetworkPointPattern.test_pp_from_single_libpysal_point _
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcfa2d0>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1def4150>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> __________ ERROR at setup of TestNetworkPointPattern.test_pp_failures __________
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcd8310>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1de5c1d0>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _______ ERROR at setup of TestNetworkPointPattern.test_pp_from_geopandas _______
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcd8dd0>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1df05d90>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _______ ERROR at setup of TestNetworkPointPattern.test_add_point_pattern _______
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcdbb10>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1df83710>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> ____ ERROR at setup of TestNetworkPointPattern.test_count_per_link_network _____
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcd9490>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1decb310>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _____ ERROR at setup of TestNetworkPointPattern.test_count_per_edge_graph ______
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcd99d0>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1dce6c90>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _ ERROR at setup of TestNetworkPointPattern.test_simulate_uniform_observations _
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcda290>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1ef826d0>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _ ERROR at setup of TestNetworkPointPattern.test_simulate_unsupported_distribution_observations _
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcdb310>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1dfb9050>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> ____ ERROR at setup of TestNetworkPointPattern.test_all_neighbor_distances _____
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcfa150>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1e25a310>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _ ERROR at setup of TestNetworkPointPattern.test_all_neighbor_distances_multiproccessing _
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcf8fd0>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1dddb090>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> __ ERROR at setup of TestNetworkPointPattern.test_nearest_neighbor_distances ___
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dd01fd0>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1e21ebd0>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> ________ ERROR at setup of TestNetworkPointPattern.test_element_as_gdf _________
> 
> self = <spaghetti.tests.test_network.TestNetworkPointPattern object at 0x7efc1dcdaf50>
> 
>     def setup_method(self):
>         self.ntw = spaghetti.Network(in_data=STREETS)
>         self.obs = [schools, crimes]
>         self.OBS = [SCHOOLS, CRIMES]
>         self.idxs = ["pp1", "pp2"]
>         iterator = zip(self.obs, self.OBS, self.idxs)
>         for obs, OBS, idx in iterator:
> >           self.ntw.snapobservations(OBS, obs, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:570: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1dd00510>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _______ ERROR at setup of TestNetworkAnalysis.test_global_auto_k_uniform _______
> 
> self = <spaghetti.tests.test_network.TestNetworkAnalysis object at 0x7efc1dcd92d0>
> 
>     def setup_method(self):
>         # synthetic test data
>         bounds, h, v = (0, 0, 3, 3), 2, 2
>         lattice = spaghetti.regular_lattice(bounds, h, nv=v, exterior=True)
>         self.ntw = spaghetti.Network(in_data=lattice)
>         chains = [
>             cg.Chain(
>                 [
>                     cg.Point(self.ntw.vertex_coords[p1]),
>                     cg.Point(self.ntw.vertex_coords[p2]),
>                 ]
>             )
>             for (p1, p2) in self.ntw.arcs
>         ]
>         midpoints = []
>         for chain in chains:
>             (v1x, v1y), (v2x, v2y) = chain.vertices
>             mid = cg.Point(((v1x + v2x) / 2.0, (v1y + v2y) / 2.0))
>             midpoints.append(mid)
>         self.mids = "mids"
>         self.ntw.snapobservations(midpoints, self.mids)
>         self.test_permutations = 99
>         self.test_steps = 10
>     
>         # empirical test_data
>         self.ntw_shp = spaghetti.Network(in_data=STREETS)
> >       self.ntw_shp.snapobservations(CRIMES, crimes, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:814: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1e013e50>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> _ ERROR at setup of TestNetworkAnalysis.test_global_auto_k_unsupported_distribution _
> 
> self = <spaghetti.tests.test_network.TestNetworkAnalysis object at 0x7efc1dcd9c10>
> 
>     def setup_method(self):
>         # synthetic test data
>         bounds, h, v = (0, 0, 3, 3), 2, 2
>         lattice = spaghetti.regular_lattice(bounds, h, nv=v, exterior=True)
>         self.ntw = spaghetti.Network(in_data=lattice)
>         chains = [
>             cg.Chain(
>                 [
>                     cg.Point(self.ntw.vertex_coords[p1]),
>                     cg.Point(self.ntw.vertex_coords[p2]),
>                 ]
>             )
>             for (p1, p2) in self.ntw.arcs
>         ]
>         midpoints = []
>         for chain in chains:
>             (v1x, v1y), (v2x, v2y) = chain.vertices
>             mid = cg.Point(((v1x + v2x) / 2.0, (v1y + v2y) / 2.0))
>             midpoints.append(mid)
>         self.mids = "mids"
>         self.ntw.snapobservations(midpoints, self.mids)
>         self.test_permutations = 99
>         self.test_steps = 10
>     
>         # empirical test_data
>         self.ntw_shp = spaghetti.Network(in_data=STREETS)
> >       self.ntw_shp.snapobservations(CRIMES, crimes, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:814: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1df83550>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> ___________ ERROR at setup of TestNetworkAnalysis.test_moran_network ___________
> 
> self = <spaghetti.tests.test_network.TestNetworkAnalysis object at 0x7efc1dcdb4d0>
> 
>     def setup_method(self):
>         # synthetic test data
>         bounds, h, v = (0, 0, 3, 3), 2, 2
>         lattice = spaghetti.regular_lattice(bounds, h, nv=v, exterior=True)
>         self.ntw = spaghetti.Network(in_data=lattice)
>         chains = [
>             cg.Chain(
>                 [
>                     cg.Point(self.ntw.vertex_coords[p1]),
>                     cg.Point(self.ntw.vertex_coords[p2]),
>                 ]
>             )
>             for (p1, p2) in self.ntw.arcs
>         ]
>         midpoints = []
>         for chain in chains:
>             (v1x, v1y), (v2x, v2y) = chain.vertices
>             mid = cg.Point(((v1x + v2x) / 2.0, (v1y + v2y) / 2.0))
>             midpoints.append(mid)
>         self.mids = "mids"
>         self.ntw.snapobservations(midpoints, self.mids)
>         self.test_permutations = 99
>         self.test_steps = 10
>     
>         # empirical test_data
>         self.ntw_shp = spaghetti.Network(in_data=STREETS)
> >       self.ntw_shp.snapobservations(CRIMES, crimes, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:814: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1dcd9690>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> ____________ ERROR at setup of TestNetworkAnalysis.test_moran_graph ____________
> 
> self = <spaghetti.tests.test_network.TestNetworkAnalysis object at 0x7efc1dcdbd90>
> 
>     def setup_method(self):
>         # synthetic test data
>         bounds, h, v = (0, 0, 3, 3), 2, 2
>         lattice = spaghetti.regular_lattice(bounds, h, nv=v, exterior=True)
>         self.ntw = spaghetti.Network(in_data=lattice)
>         chains = [
>             cg.Chain(
>                 [
>                     cg.Point(self.ntw.vertex_coords[p1]),
>                     cg.Point(self.ntw.vertex_coords[p2]),
>                 ]
>             )
>             for (p1, p2) in self.ntw.arcs
>         ]
>         midpoints = []
>         for chain in chains:
>             (v1x, v1y), (v2x, v2y) = chain.vertices
>             mid = cg.Point(((v1x + v2x) / 2.0, (v1y + v2y) / 2.0))
>             midpoints.append(mid)
>         self.mids = "mids"
>         self.ntw.snapobservations(midpoints, self.mids)
>         self.test_permutations = 99
>         self.test_steps = 10
>     
>         # empirical test_data
>         self.ntw_shp = spaghetti.Network(in_data=STREETS)
> >       self.ntw_shp.snapobservations(CRIMES, crimes, attribute=True)
> 
> ../../../spaghetti/tests/test_network.py:814: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/network.py:1093: in snapobservations
>     self.pointpatterns[name] = PointPattern(
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <spaghetti.network.PointPattern object at 0x7efc1e26fa10>, in_data = None
> idvariable = None, attribute = True
> 
>     def __init__(self, in_data=None, idvariable=None, attribute=False):
>         # initialize points dictionary and counter
>         self.points = {}
>         self.npoints = 0
>     
>         # determine input point data type
>         in_dtype = str(type(in_data)).split("'")[1]
>         # flag for points from a shapefile
>         from_shp = False
>         # flag for points as libpysal.cg.Point objects
>         is_libpysal_points = False
>         supported_iterables = ["list", "tuple"]
>         # type error message
>         msg = "'{}' not supported for point pattern instantiation."
>     
>         # set appropriate geometries
>         if in_dtype == "str":
>             from_shp = True
>         elif in_dtype in supported_iterables:
>             dtype = str(type(in_data[0])).split("'")[1]
>             if dtype == "libpysal.cg.shapes.Point":
>                 is_libpysal_points = True
>             else:
>                 raise TypeError(msg.format(dtype))
>         elif in_dtype == "libpysal.cg.shapes.Point":
>             in_data = [in_data]
>             is_libpysal_points = True
>         elif in_dtype == "geopandas.geodataframe.GeoDataFrame":
>             from_shp = False
>         else:
> >           raise TypeError(msg.format(str(in_dtype)))
> E           TypeError: 'NoneType' not supported for point pattern instantiation.
> 
> ../../../spaghetti/network.py:3386: TypeError
> =================================== FAILURES ===================================
> _________________ TestNetworkUtils.test_get_neighbor_distances _________________
> 
> self = <spaghetti.tests.test_network.TestNetworkUtils object at 0x7efc1dce6d10>
> 
>     def test_get_neighbor_distances(self):
>         known_neighs = {1: 102.62353453439829, 2: 660.000001049743}
>         observed_neighs = spaghetti.util.get_neighbor_distances(
> >           self.ntw, 0, self.ntw.arc_lengths
>         )
> E       AttributeError: 'Network' object has no attribute 'arc_lengths'
> 
> ../../../spaghetti/tests/test_network.py:885: AttributeError
> _____________________ TestNetworkUtils.test_generate_tree ______________________
> 
> self = <spaghetti.tests.test_network.TestNetworkUtils object at 0x7efc1dce70d0>
> 
>     def test_generate_tree(self):
>         known_path = [23, 22, 20, 19, 170, 2, 0]
> >       distance, pred = spaghetti.util.dijkstra(self.ntw, 0)
> 
> ../../../spaghetti/tests/test_network.py:892: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> ntw = <spaghetti.network.Network object at 0x7efc1dd22a90>, v0 = 0
> initial_dist = inf
> 
>     def dijkstra(ntw, v0, initial_dist=numpy.inf):
>         """Compute the shortest path between a start vertex and
>         all other vertices in an origin-destination matrix.
>     
>         Parameters
>         ----------
>         ntw :  spaghetti.Network
>             A spaghetti network object.
>         v0 : int
>             Start vertex ID.
>         initial_dist : float
>             Integer break point to stop iteration and return n neighbors.
>             Default is ``numpy.inf``.
>     
>         Returns
>         -------
>         distance : list
>             List of distances from vertex to all other vertices.
>         pred : list
>             List of preceeding vertices for traversal route.
>     
>         Notes
>         -----
>     
>         Based on :cite:`Dijkstra1959a`.
>     
>         Examples
>         --------
>     
>         >>> import spaghetti
>         >>> from libpysal import examples
>         >>> ntw = spaghetti.Network(examples.get_path("streets.shp"))
>         >>> distance, pred = spaghetti.util.dijkstra(ntw, 0)
>         >>> round(distance[196], 4)
>         5505.6682
>         >>> pred[196]
>         133
>     
>         """
>     
>         # cost per arc to travel, e.g. distance
> >       cost = ntw.arc_lengths
> E       AttributeError: 'Network' object has no attribute 'arc_lengths'
> 
> ../../../spaghetti/util.py:200: AttributeError
> ________________________ TestNetworkUtils.test_dijkstra ________________________
> 
> self = <spaghetti.tests.test_network.TestNetworkUtils object at 0x7efc1dce7710>
> 
>     def test_dijkstra(self):
> >       distance, pred = spaghetti.util.dijkstra(self.ntw, 0)
> 
> ../../../spaghetti/tests/test_network.py:897: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> ntw = <spaghetti.network.Network object at 0x7efc1de17150>, v0 = 0
> initial_dist = inf
> 
>     def dijkstra(ntw, v0, initial_dist=numpy.inf):
>         """Compute the shortest path between a start vertex and
>         all other vertices in an origin-destination matrix.
>     
>         Parameters
>         ----------
>         ntw :  spaghetti.Network
>             A spaghetti network object.
>         v0 : int
>             Start vertex ID.
>         initial_dist : float
>             Integer break point to stop iteration and return n neighbors.
>             Default is ``numpy.inf``.
>     
>         Returns
>         -------
>         distance : list
>             List of distances from vertex to all other vertices.
>         pred : list
>             List of preceeding vertices for traversal route.
>     
>         Notes
>         -----
>     
>         Based on :cite:`Dijkstra1959a`.
>     
>         Examples
>         --------
>     
>         >>> import spaghetti
>         >>> from libpysal import examples
>         >>> ntw = spaghetti.Network(examples.get_path("streets.shp"))
>         >>> distance, pred = spaghetti.util.dijkstra(ntw, 0)
>         >>> round(distance[196], 4)
>         5505.6682
>         >>> pred[196]
>         133
>     
>         """
>     
>         # cost per arc to travel, e.g. distance
> >       cost = ntw.arc_lengths
> E       AttributeError: 'Network' object has no attribute 'arc_lengths'
> 
> ../../../spaghetti/util.py:200: AttributeError
> ______________________ TestNetworkUtils.test_dijkstra_mp _______________________
> 
> self = <spaghetti.tests.test_network.TestNetworkUtils object at 0x7efc1dce7dd0>
> 
>     def test_dijkstra_mp(self):
> >       distance, pred = spaghetti.util.dijkstra_mp((self.ntw, 0))
> 
> ../../../spaghetti/tests/test_network.py:902: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> ../../../spaghetti/util.py:291: in dijkstra_mp
>     distance, pred = dijkstra(ntw, vertex)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> ntw = <spaghetti.network.Network object at 0x7efc1df238d0>, v0 = 0
> initial_dist = inf
> 
>     def dijkstra(ntw, v0, initial_dist=numpy.inf):
>         """Compute the shortest path between a start vertex and
>         all other vertices in an origin-destination matrix.
>     
>         Parameters
>         ----------
>         ntw :  spaghetti.Network
>             A spaghetti network object.
>         v0 : int
>             Start vertex ID.
>         initial_dist : float
>             Integer break point to stop iteration and return n neighbors.
>             Default is ``numpy.inf``.
>     
>         Returns
>         -------
>         distance : list
>             List of distances from vertex to all other vertices.
>         pred : list
>             List of preceeding vertices for traversal route.
>     
>         Notes
>         -----
>     
>         Based on :cite:`Dijkstra1959a`.
>     
>         Examples
>         --------
>     
>         >>> import spaghetti
>         >>> from libpysal import examples
>         >>> ntw = spaghetti.Network(examples.get_path("streets.shp"))
>         >>> distance, pred = spaghetti.util.dijkstra(ntw, 0)
>         >>> round(distance[196], 4)
>         5505.6682
>         >>> pred[196]
>         133
>     
>         """
>     
>         # cost per arc to travel, e.g. distance
> >       cost = ntw.arc_lengths
> E       AttributeError: 'Network' object has no attribute 'arc_lengths'
> 
> ../../../spaghetti/util.py:200: AttributeError
> =============================== warnings summary ===============================
> ../../../spaghetti/network.py:40
>   /<<PKGBUILDDIR>>/spaghetti/network.py:40: FutureWarning: The next major release of pysal/spaghetti (2.0.0) will drop support for all ``libpysal.cg`` geometries. This change is a first step in refactoring ``spaghetti`` that is expected to result in dramatically reduced runtimes for network instantiation and operations. Users currently requiring network and point pattern input as ``libpysal.cg`` geometries should prepare for this simply by converting to ``shapely`` geometries.
>     warnings.warn(dep_msg, FutureWarning, stacklevel=1)
> 
> ../../../../../../usr/lib/python3/dist-packages/libpysal/cg/shapes.py:103
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_uniform
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_unsupported_distribution
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_network
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_graph
> spaghetti/tests/test_network.py::TestNetworkUtils::test_chain_constr
> spaghetti/tests/test_network.py::TestNetworkUtils::test_build_chains
> spaghetti/tests/test_network.py::TestNetworkUtils::test_snap_points_to_links
>   /usr/lib/python3/dist-packages/libpysal/cg/shapes.py:103: FutureWarning: Objects based on the `Geometry` class will deprecated and removed in a future version of libpysal.
>     warnings.warn(dep_msg, FutureWarning)
> 
> ../../../../../../usr/lib/python3/dist-packages/libpysal/cg/shapes.py:1006
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_uniform
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_unsupported_distribution
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_network
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_graph
> spaghetti/tests/test_network.py::TestNetworkUtils::test_chain_constr
> spaghetti/tests/test_network.py::TestNetworkUtils::test_build_chains
> spaghetti/tests/test_network.py::TestNetworkUtils::test_snap_points_to_links
>   /usr/lib/python3/dist-packages/libpysal/cg/shapes.py:1006: FutureWarning: Objects based on the `Geometry` class will deprecated and removed in a future version of libpysal.
>     warnings.warn(dep_msg, FutureWarning)
> 
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_uniform
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_unsupported_distribution
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_network
> spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_graph
> spaghetti/tests/test_network.py::TestNetworkUtils::test_snap_points_to_links
>   /usr/lib/python3/dist-packages/libpysal/cg/shapes.py:1923: FutureWarning: Objects based on the `Geometry` class will deprecated and removed in a future version of libpysal.
>     warnings.warn(dep_msg, FutureWarning)
> 
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> =========================== short test summary info ============================
> FAILED ../../../spaghetti/tests/test_network.py::TestNetworkUtils::test_get_neighbor_distances
> FAILED ../../../spaghetti/tests/test_network.py::TestNetworkUtils::test_generate_tree
> FAILED ../../../spaghetti/tests/test_network.py::TestNetworkUtils::test_dijkstra
> FAILED ../../../spaghetti/tests/test_network.py::TestNetworkUtils::test_dijkstra_mp
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_network_data_read
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_network_from_libpysal_chains
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_network_from_single_libpysal_chain
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_network_from_vertical_libpysal_chains
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_network_failures
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_network_from_geopandas
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_round_sig
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_vertex_atol
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_contiguity_weights
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_components
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_connected_components
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_distance_band_weights
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_dist_200
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_dist_1000
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_dist_ntw_from_lattice_ring_2
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_dist_ntw_from_lattice_ring_3
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_dist_ntw_from_lattice_ring_5
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_count_2
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_count_1
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_count_half
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_count_1_and_half
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_split_arcs_misspell
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_enum_links_vertex
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_shortest_paths
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_extract_component
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_spanning_tree
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_element_as_gdf
> ERROR ../../../spaghetti/tests/test_network.py::TestNetwork::test_regular_lattice
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_pp_from_libpysal_points
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_pp_from_single_libpysal_point
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_pp_failures
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_pp_from_geopandas
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_add_point_pattern
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_count_per_link_network
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_count_per_edge_graph
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_simulate_uniform_observations
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_simulate_unsupported_distribution_observations
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_all_neighbor_distances
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_all_neighbor_distances_multiproccessing
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_nearest_neighbor_distances
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkPointPattern::test_element_as_gdf
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_uniform
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkAnalysis::test_global_auto_k_unsupported_distribution
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_network
> ERROR ../../../spaghetti/tests/test_network.py::TestNetworkAnalysis::test_moran_graph
> ============= 4 failed, 5 passed, 22 warnings, 45 errors in 3.76s ==============
> E: pybuild pybuild:395: test: plugin pyproject failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_spaghetti/build; python3.11 -m pytest {dir}/spaghetti/tests/
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13


The full build log is available from:
http://qa-logs.debian.net/2023/10/27/spaghetti_1.7.4-2_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20231027;users=lucas@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20231027&fusertaguser=lucas@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.



More information about the debian-science-maintainers mailing list