Wraps GEOS geometry functions in numpy ufuncs.

Related tags

Geolocation pygeos
Overview

PyGEOS

Documentation Status Github Actions status Github Actions status Appveyor CI status Travis CI status PyPI Anaconda Zenodo

PyGEOS is a C/Python library with vectorized geometry functions. The geometry operations are done in the open-source geometry library GEOS. PyGEOS wraps these operations in NumPy ufuncs providing a performance improvement when operating on arrays of geometries.

Note: PyGEOS is a very young package. While the available functionality should be stable and working correctly, it's still possible that APIs change in upcoming releases. But we would love for you to try it out, give feedback or contribute!

What is a ufunc?

A universal function (or ufunc for short) is a function that operates on n-dimensional arrays in an element-by-element fashion, supporting array broadcasting. The for-loops that are involved are fully implemented in C diminishing the overhead of the Python interpreter.

Multithreading

PyGEOS functions support multithreading. More specifically, the Global Interpreter Lock (GIL) is released during function execution. Normally in Python, the GIL prevents multiple threads from computing at the same time. PyGEOS functions internally releases this constraint so that the heavy lifting done by GEOS can be done in parallel, from a single Python process.

Examples

Compare an grid of points with a polygon:

>>> geoms = points(*np.indices((4, 4)))
>>> polygon = box(0, 0, 2, 2)

>>> contains(polygon, geoms)

  array([[False, False, False, False],
         [False,  True, False, False],
         [False, False, False, False],
         [False, False, False, False]])

Compute the area of all possible intersections of two lists of polygons:

>>> from pygeos import box, area, intersection

>>> polygons_x = box(range(5), 0, range(10, 15), 10)
>>> polygons_y = box(0, range(5), 10, range(10, 15))

>>> area(intersection(polygons_x[:, np.newaxis], polygons_y[np.newaxis, :]))

array([[100.,  90.,  80.,  70.,  60.],
     [ 90.,  81.,  72.,  63.,  54.],
     [ 80.,  72.,  64.,  56.,  48.],
     [ 70.,  63.,  56.,  49.,  42.],
     [ 60.,  54.,  48.,  42.,  36.]])

See the documentation for more: https://pygeos.readthedocs.io

Relationship to Shapely

Both Shapely and PyGEOS are exposing the functionality of the GEOS C++ library to Python. While Shapely only deals with single geometries, PyGEOS provides vectorized functions to work with arrays of geometries, giving better performance and convenience for such usecases.

There is active discussion and work toward integrating PyGEOS into Shapely:

For now PyGEOS is developed as a separate project.

References

Copyright & License

PyGEOS is licensed under BSD 3-Clause license. Copyright (c) 2019, Casper van der Wel. GEOS is available under the terms of ​GNU Lesser General Public License (LGPL) 2.1 at https://trac.osgeo.org/geos.

Comments
  • ENH: set up Cython support + get parts of multipart geometries

    ENH: set up Cython support + get parts of multipart geometries

    Closes #127, closes #128

    This is the Cython counterpart to #130.
    This borrows heavily from #93 - thanks @jorisvandenbossche ! (note: there are some changes here that may be useful there)

    This is about 3.5 times faster than a pure python loop implementation (100 randomly generated multipoints with 1000 points each); surprisingly, it also looks a bit faster than the original C implementation in #130 (not quite 2 times as fast).

    get_parts supports returning either the parts as an array (default) or a tuple of parts and indexes in the source geometry array.

    I know there was discussion around naming in #130 and #128, but it felt like a get_* function was most consistent with similar functions here. dump and explode both feel out of place.

    A few points to consider / discuss specific to Cython:

    • I put Cython files under pygeos/ext. Unlike projects like fiona which use a naming scheme like _module.pyx in the main folder with Python sources, I wanted the Python files at the root in pygeos folder to represent the top-level API. We can use something other than ext - but for imports to work properly, I think it has to be a subfolder of pygeos rather than a sibling.
    • Cython functions are wrapped in top-level Python functions; this is similar to patterns in other libraries that use Cython (fiona, etc)
    • declarations of functions / types intended to be used across modules are stored in *.pxd files; those that were only needed within a given implementation are in the *.pyx file that uses it. These wrap functions / types from GEOS and source files here. We will likely tune how this is setup over time.

    A few things to note:

    • there is some unrelated formatting in setup.py via black
    • this does not yet attempt to handle multithreading; guidance there welcome (have not yet figured out how to adapt recent work at the C level to Cython)
    • I have not yet checked to verify there are no memory leaks and there are not yet sufficient tests to prove that we won't get segfaults in some cases. Tests TBD.
    • using Cython introduces a bunch of compiler warnings; have not yet investigated these yet (some are from numpy by way of Cython and not our fault here)

    TODO:

    • [x] Tests
    • [x] Reduce compiler warnings
    • [x] GeometryCollection support
    • [x] CI setup
    • [ ] Packaging (may need some help with this)
    opened by brendan-ward 48
  • Failures with GEOS master / 3.10

    Failures with GEOS master / 3.10

    I was testing with GEOS master (in light of the new OverlayNG), and next to 2 failures related to the new overlay implementation (which I am fixing in https://github.com/pygeos/pygeos/pull/232), there are also 2 other failures:

    _______________________________________ test_points_invalid_ndim ________________________________________
    
        def test_points_invalid_ndim():
            with pytest.raises(pygeos.GEOSException):
    >           pygeos.points([0, 1, 2, 3])
    E           Failed: DID NOT RAISE <class 'pygeos.GEOSException'>
    
    pygeos/test/test_creation.py:41: Failed
    _______________________________________ test_from_wkb_empty[POLYGON EMPTY] _____________________________
    
    wkt = 'POLYGON EMPTY'
    
        @pytest.mark.parametrize(
            "wkt", ("POINT EMPTY", "LINESTRING EMPTY", "POLYGON EMPTY", "GEOMETRYCOLLECTION EMPTY")
        )
        def test_from_wkb_empty(wkt):
            wkb = pygeos.to_wkb(pygeos.Geometry(wkt))
            geom = pygeos.from_wkb(wkb)
            assert pygeos.is_geometry(geom).all()
            assert pygeos.is_empty(geom).all()
    >       assert pygeos.to_wkb(geom) == wkb
    E       AssertionError: assert b'\x01\x03\x0...0\x00\x00\x00' == b'\x01\x03\x0...0\x00\x00\x00'
    E         At index 4 diff: b'\x80' != b'\x00'
    E         Use -v to get the full diff
    
    pygeos/test/test_io.py:121: AssertionError
    

    The first case now seems to ignore the 4th dimension, and create a POINT Z:

    (Pdb) pygeos.points([0, 1, 2, 3])
    <pygeos.Geometry POINT Z (0 1 2)>
    

    In the second case, the WKB of an empty polygon differs depending on whether the empty polygon was created from WKT or WKB:

    (Pdb) geom1 = pygeos.Geometry("POLYGON EMPTY")
    (Pdb) geom1
    <pygeos.Geometry POLYGON EMPTY>
    (Pdb) pygeos.to_wkb(geom1)
    b'\x01\x03\x00\x00\x00\x00\x00\x00\x00'
    (Pdb) geom2 = pygeos.from_wkb(pygeos.to_wkb(geom1))
    (Pdb) geom2
    <pygeos.Geometry POLYGON EMPTY>
    (Pdb) pygeos.to_wkb(geom2)
    b'\x01\x03\x00\x00\x80\x00\x00\x00\x00'
    
    opened by jorisvandenbossche 35
  • ENH: prepared geometry as additional (cached) attribute on GeometryObject

    ENH: prepared geometry as additional (cached) attribute on GeometryObject

    @brendan-ward @caspervdw I experimented today with a possible alternative approach on supporting prepared geometries, compared with https://github.com/pygeos/pygeos/pull/84

    I added a second static attribute to the GeometryObject struct, which can optionally (for a prepared geom) be populated.

    For me, the main reason I wanted to test this approach is that this keeps the geometry and its prepared version together. This means that the user doesn't need to keep track of a separate array with the prepared versions of their data (which could then get out of sync, etc): you just have your single array of geometries, that also can be prepared.

    The ufuncs that I added here are just a quick hack to get something working. But from a quick test, it seems to be working:

    import geopandas
    import pygeos
    
    df = geopandas.read_file(geopandas.datasets.get_path("naturalearth_lowres")) 
    countries = pygeos.from_shapely(np.array(df.geometry))  
    df2 = geopandas.read_file(geopandas.datasets.get_path("naturalearth_cities"))
    cities = pygeos.from_shapely(np.array(df2.geometry)) 
    
    # the current intersects result
    In [10]: pygeos.lib.intersects(countries, cities[:, None])    
    Out[10]: 
    array([[False, False, False, ..., False, False, False],
           [False, False, False, ..., False, False, False],
           [False, False, False, ..., False, False, False],
           ...,
           [False, False, False, ..., False, False, False],
           [False, False, False, ..., False, False, False],
           [False, False, False, ..., False, False, False]])
    
    # timing the existing function
    In [14]: %timeit pygeos.lib.intersects(countries, cities[:, None])  
    18.8 ms ± 91.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    # timing the prepared version (but without prepared geoms -> just an extra if check)
    In [16]: %timeit pygeos.lib.intersects_prepared(countries, cities[:, None]) 
    18.9 ms ± 62 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    # preparing the geometries
    In [18]: temp = pygeos.lib.prepare(countries) 
    
    # calling the prepared version again, but now with prepared geoms
    In [19]: %timeit pygeos.lib.intersects_prepared(countries, cities[:, None]) 
    1.27 ms ± 3.16 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    So that shows a POC of having the prepared geometries in the same array, and also shows the nice speed-up that you can get from that!

    Some additional thoughts on this:

    • It gives some additional memory usage, also when not using prepared geometries (the extra static attribute). If your geometries have a certain size (eg for polygons), this will probably not be very significant, but for points it might be more substantial.

    • I now made a separate intersects_prepared version, mainly to be able to compare with the existing intersects. In principle, this can be a single function that can handle both (it seems the extra check doesn't give much slowdown, at least on this test case)

    • I added a ufunc to prepare the geometries (based on https://github.com/pygeos/pygeos/pull/84/). We maybe also want to "unprepare" in case you want to get rid of some memory usage. But in principle, the predicates that support prepared geoms could also "prepare on the fly". That might make it even easier for the user, but gives a bit less control. Most of the time you probably just want that pygeos does it under the hood for you, but there might be cases where prepared geoms are less interesting (I am not too familiar on this, we should probably try to get some good test data of various kinds for such things).

    • It modifies the Geometry objects inplace in some way. It doesn't change their meaning, though (it doesn't change coordinates), so I would say this doesn't violate the principle of an immutable geometry object.

    opened by jorisvandenbossche 22
  • ENH: add wkt / wkb ufuncs

    ENH: add wkt / wkb ufuncs

    Start for adding from_wkt / to_wkt / from_wkb / to_wkt ufuncs.

    They are right now already defined on the Geometry object, but those are useful as ufuncs as well. We can probably remove the implementation in pygeom.c to avoid duplication. But the question is whether we want to keep those as methods in the public API?

    I should maybe also move this into a separate .c file, as the ufuncs.c is starting to become quite long? (although it are ufuncs)

    Still need to make the nice Python functions, only the barebone ufuncs for now for the readers. Also still need to do proper error handling (ensure that I destroy the reader when there is an error)

    opened by jorisvandenbossche 20
  • Support pickling

    Support pickling

    Closes #46

    After a failed approach with __getstate__ and __setstate__, I chose for the __reduce__ route. __setstate__ does not play nice with the fact that our geometry objects are immutable. Further reading: https://docs.python.org/3/library/pickle.html#pickling-class-instances

    __reduce__ should return a tuple (callable, args). A convenient way for us would be the following:

    • (pygeos.lib.Geometry, ("<WKT>", ))

    However, WKT serialization is less efficient than WKB serialization. We could opt for:

    • (pygeos.lib.from_wkb, (b"<WKB>", ))

    When testing these approaches, a noticed that both of them have drawbacks.

    • WKT does not support SRID serialization and it has an issue with empty points in multipoints (#171).
    • WKB does not support linearrings

    I am still in favour of going the WKB route. Do we accept that linearrings gets transformed into linestrings when pickled-unpickled?

    >>> import pickle, pygeos
    >>> g = pygeos.linearrings([[(0, 0), (0, 1), (1, 1), (0, 0)]])
    >>> pickle.loads(pickle.dumps(g))
    array([<pygeos.Geometry LINESTRING (0 0, 0 1, 1 1, 0 0)>], dtype=object)
    
    opened by caspervdw 18
  • ENH: query tree with multiple input geometries

    ENH: query tree with multiple input geometries

    This adds a first pass at bulk query against STRtree instance, as the core of a spatial join function for #52.

    This extends the functionality of the existing STRtree::query() method to handle multiple input geometries. It returns a tuple of source (left) indexes and target (right) indexes that either overlap the windows of the sources, or also meet the predicate function provided.

    Example:

    tree = pygeos.STRtree(pygeos.points(np.arange(10), np.arange(10)))
    tree.query_bulk([pygeos.points(1, 1)])
    # returns: (array([0]), array([1]))
    

    Multiple source geometries, first and third boxes overlap windows:

    tree.query_bulk([
        pygeos.box(0,0, 1,1), 
        pygeos.box(100,100,110,110), 
        pygeos.box(2,2,4,4)
    ])
    # returns: (array([0, 0, 2, 2, 2]), array([0, 1, 2, 3, 4]))
    

    This preserves the original query() function as a singular operation.

    /cc: @jorisvandenbossche

    opened by brendan-ward 18
  • Added STRtree::nearest function

    Added STRtree::nearest function

    This is one of a few variants of nearest neighbor functionality based on the STRtree.

    This version wraps the GEOS nearest neighbor functionality and returns the index of the nearest item in the tree.

    Right now this is limited to a singular geometry operation. I'm considering changing that to a bulk geometry operation (given array of source geometries, return nearest neighbor index for each), which would likely be more useful.

    Other variants that return multiple neighbors for each source geometry could be handled in a later PR.

    opened by brendan-ward 17
  • RuntimeWarning: overflow encountered in distance

    RuntimeWarning: overflow encountered in distance

    I am getting RuntimeWarning: overflow encountered in distance, sometimes followed by RuntimeWarning: invalid value encountered in distance when doing distance on some real-life geometries. MRE below:

    >>> x, y = 1, 6
    >>> g1 = pygeos.box(x, y, x+1, y+1)
    >>> g2 = pygeos.box(x-1, y-1, x-1, y-1)
    
    >>> pygeos.distance(g1, g2)
    
    /opt/miniconda3/envs/stable/lib/python3.9/site-packages/pygeos/measurement.py:70: RuntimeWarning: overflow encountered in distance
      return lib.distance(a, b, **kwargs)
    /opt/miniconda3/envs/stable/lib/python3.9/site-packages/pygeos/measurement.py:70: RuntimeWarning: invalid value encountered in distance
      return lib.distance(a, b, **kwargs)
    1.4142135623730951
    

    The result is correct but the errors are confusing and tend to spam the feed. I see the same on macOS and Ubuntu (details below).

    macOS environemnt:

    SYSTEM INFO
    -----------
    python     : 3.9.6 | packaged by conda-forge | (default, Jul 11 2021, 03:36:15)  [Clang 11.1.0 ]
    executable : /opt/miniconda3/envs/stable/bin/python
    machine    : macOS-11.6-x86_64-i386-64bit
    
    GEOS, GDAL, PROJ INFO
    ---------------------
    GEOS       : 3.9.1
    GEOS lib   : /opt/miniconda3/envs/stable/lib/libgeos_c.dylib
    GDAL       : 3.3.1
    GDAL data dir: /opt/miniconda3/envs/stable/share/gdal
    PROJ       : 8.0.1
    PROJ data dir: /opt/miniconda3/envs/stable/share/proj
    
    PYTHON DEPENDENCIES
    -------------------
    geopandas  : 0.10.0
    pandas     : 1.3.2
    fiona      : 1.8.20
    numpy      : 1.21.2
    shapely    : 1.7.1
    rtree      : 0.9.7
    pyproj     : 3.1.0
    matplotlib : 3.4.3
    mapclassify: 2.4.3
    geopy      : None
    psycopg2   : None
    geoalchemy2: None
    pyarrow    : None
    pygeos     : 0.10.2
    
    # packages in environment at /opt/miniconda3/envs/stable:
    #
    # Name                    Version                   Build  Channel
    access                    1.1.3              pyhd8ed1ab_0    conda-forge
    affine                    2.3.0                      py_0    conda-forge
    alabaster                 0.7.12                     py_0    conda-forge
    amply                     0.1.4                      py_0    conda-forge
    anyio                     3.3.0            py39h6e9494a_0    conda-forge
    appnope                   0.1.2            py39h6e9494a_1    conda-forge
    argon2-cffi               20.1.0           py39h89e85a6_2    conda-forge
    async_generator           1.10                       py_0    conda-forge
    attrs                     20.3.0             pyhd3deb0d_0    conda-forge
    babel                     2.9.1              pyh44b312d_0    conda-forge
    backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
    backports                 1.0                        py_2    conda-forge
    backports.functools_lru_cache 1.6.4              pyhd8ed1ab_0    conda-forge
    beautifulsoup4            4.9.3              pyhb0f4dca_0    conda-forge
    bleach                    4.0.0              pyhd8ed1ab_0    conda-forge
    blosc                     1.21.0               he49afe7_0    conda-forge
    bokeh                     2.3.3            py39h6e9494a_0    conda-forge
    boost-cpp                 1.74.0               hff03dee_4    conda-forge
    branca                    0.4.2              pyhd8ed1ab_0    conda-forge
    brotlipy                  0.7.0           py39h89e85a6_1001    conda-forge
    bs4                       4.9.3                         0    conda-forge
    bzip2                     1.0.8                h0d85af4_4    conda-forge
    c-ares                    1.17.2               h0d85af4_0    conda-forge
    ca-certificates           2021.5.30            h033912b_0    conda-forge
    cairo                     1.16.0            he43a7df_1008    conda-forge
    certifi                   2021.5.30        py39h6e9494a_0    conda-forge
    cffi                      1.14.6           py39hb71fe58_0    conda-forge
    cfitsio                   3.470                h01dc385_7    conda-forge
    chardet                   4.0.0            py39h6e9494a_1    conda-forge
    charset-normalizer        2.0.0              pyhd8ed1ab_0    conda-forge
    click                     7.1.2              pyh9f0ad1d_0    conda-forge
    click-completion          0.5.2            py39h6e9494a_2    conda-forge
    click-log                 0.3.2              pyh9f0ad1d_0    conda-forge
    click-plugins             1.1.1                      py_0    conda-forge
    cligj                     0.7.2              pyhd8ed1ab_0    conda-forge
    cloudpickle               1.6.0                      py_0    conda-forge
    coincbc                   2.10.5               h35dd71c_1    conda-forge
    colorama                  0.4.4              pyh9f0ad1d_0    conda-forge
    conda                     4.10.3           py39h6e9494a_0    conda-forge
    conda-package-handling    1.7.3            py39h89e85a6_0    conda-forge
    coverage                  5.5              py39h89e85a6_0    conda-forge
    cryptography              3.4.7            py39ha2c9959_0    conda-forge
    curl                      7.78.0               hb861fe1_0    conda-forge
    cycler                    0.10.0                     py_2    conda-forge
    cytoolz                   0.11.0           py39h89e85a6_3    conda-forge
    dask                      2021.8.0           pyhd8ed1ab_0    conda-forge
    dask-core                 2021.8.0           pyhd8ed1ab_0    conda-forge
    dataclasses               0.8                pyhc8e2a94_3    conda-forge
    dbus                      1.13.6               ha13b53f_2    conda-forge
    debugpy                   1.4.1            py39h9fcab8e_0    conda-forge
    decorator                 4.4.2                      py_0    conda-forge
    defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
    deprecation               2.1.0              pyh9f0ad1d_0    conda-forge
    descartes                 1.1.0                      py_4    conda-forge
    distributed               2021.8.0         py39h6e9494a_0    conda-forge
    docutils                  0.16             py39h6e9494a_3    conda-forge
    entrypoints               0.3             py39hde42818_1002    conda-forge
    esda                      2.4.1              pyhd8ed1ab_0    conda-forge
    expat                     2.4.1                he49afe7_0    conda-forge
    fiona                     1.8.20           py39h10412eb_1    conda-forge
    folium                    0.12.0             pyhd8ed1ab_1    conda-forge
    fontconfig                2.13.1            h10f422b_1005    conda-forge
    freetype                  2.10.4               h4cff582_1    conda-forge
    freexl                    1.0.6                h0d85af4_0    conda-forge
    fsspec                    2021.7.0           pyhd8ed1ab_0    conda-forge
    gdal                      3.3.1            py39h0530131_1    conda-forge
    geopandas                 0.10.0             pyhd8ed1ab_0    conda-forge
    geopandas-base            0.10.0             pyha770c72_0    conda-forge
    geos                      3.9.1                he49afe7_2    conda-forge
    geotiff                   1.6.0                h26421ea_6    conda-forge
    gettext                   0.19.8.1          h7937167_1005    conda-forge
    giddy                     2.3.3                      py_0    conda-forge
    giflib                    5.2.1                hbcb3906_2    conda-forge
    gitdb                     4.0.7              pyhd8ed1ab_0    conda-forge
    gitpython                 3.1.18             pyhd8ed1ab_0    conda-forge
    glib                      2.68.4               he49afe7_0    conda-forge
    glib-tools                2.68.4               he49afe7_0    conda-forge
    gmp                       6.2.1                h2e338ed_0    conda-forge
    gmpy2                     2.1.0b5          py39hab8a6df_0    conda-forge
    hdf4                      4.2.15               hefd3b78_3    conda-forge
    hdf5                      1.10.6          nompi_hc5d9132_1114    conda-forge
    heapdict                  1.0.1                      py_0    conda-forge
    icu                       68.1                 h74dc148_0    conda-forge
    idna                      3.1                pyhd3deb0d_0    conda-forge
    imagesize                 1.2.0                      py_0    conda-forge
    importlib-metadata        4.6.4            py39h6e9494a_0    conda-forge
    importlib_resources       3.3.1            py39h6e9494a_0    conda-forge
    inequality                1.0.0                      py_0    conda-forge
    iniconfig                 1.1.1              pyh9f0ad1d_0    conda-forge
    ipykernel                 6.2.0            py39h71a6800_0    conda-forge
    ipython                   7.26.0           py39h71a6800_0    conda-forge
    ipython_genutils          0.2.0                      py_1    conda-forge
    ipywidgets                7.6.3              pyhd3deb0d_0    conda-forge
    jbig                      2.1               h0d85af4_2003    conda-forge
    jedi                      0.18.0           py39h6e9494a_2    conda-forge
    jinja2                    3.0.1              pyhd8ed1ab_0    conda-forge
    joblib                    1.0.1              pyhd8ed1ab_0    conda-forge
    jpeg                      9d                   hbcb3906_0    conda-forge
    json-c                    0.15                 hcb556a6_0    conda-forge
    jsonschema                3.2.0              pyhd8ed1ab_3    conda-forge
    jupyter                   1.0.0            py39h6e9494a_6    conda-forge
    jupyter-book              0.11.3             pyhd8ed1ab_0    conda-forge
    jupyter-cache             0.4.3              pyhd8ed1ab_0    conda-forge
    jupyter-server-mathjax    0.2.3              pyhd8ed1ab_0    conda-forge
    jupyter-sphinx            0.3.2                      py_0    conda-forge
    jupyter_client            6.1.12             pyhd8ed1ab_0    conda-forge
    jupyter_console           6.4.0              pyhd8ed1ab_0    conda-forge
    jupyter_core              4.7.1            py39h6e9494a_0    conda-forge
    jupyter_server            1.10.2             pyhd8ed1ab_0    conda-forge
    jupyterlab_pygments       0.1.2              pyh9f0ad1d_0    conda-forge
    jupyterlab_widgets        1.0.0              pyhd8ed1ab_1    conda-forge
    jupytext                  1.10.3             pyh44b312d_0    conda-forge
    kealib                    1.4.14               h31dd65d_2    conda-forge
    kiwisolver                1.3.1            py39hf018cea_1    conda-forge
    krb5                      1.19.2               hcfbf3a7_0    conda-forge
    latexcodec                2.0.1              pyh9f0ad1d_0    conda-forge
    lcms2                     2.12                 h577c468_0    conda-forge
    lerc                      2.2.1                h046ec9c_0    conda-forge
    libarchive                3.5.1                h2b60450_2    conda-forge
    libblas                   3.9.0           11_osx64_openblas    conda-forge
    libcblas                  3.9.0           11_osx64_openblas    conda-forge
    libclang                  11.1.0          default_he082bbe_1    conda-forge
    libcurl                   7.78.0               hf45b732_0    conda-forge
    libcxx                    12.0.1               habf9029_0    conda-forge
    libdap4                   3.20.6               h3e144a0_2    conda-forge
    libdeflate                1.8                  h0d85af4_0    conda-forge
    libedit                   3.1.20191231         h0678c8f_2    conda-forge
    libev                     4.33                 haf1e3a3_1    conda-forge
    libffi                    3.3                  h046ec9c_2    conda-forge
    libgdal                   3.3.1                hd51e85c_1    conda-forge
    libgfortran               5.0.0           9_3_0_h6c81a4c_23    conda-forge
    libgfortran5              9.3.0               h6c81a4c_23    conda-forge
    libglib                   2.68.4               hd556434_0    conda-forge
    libiconv                  1.16                 haf1e3a3_0    conda-forge
    libkml                    1.3.0             h8fd9edb_1014    conda-forge
    liblapack                 3.9.0           11_osx64_openblas    conda-forge
    libllvm10                 10.0.1               h009f743_3    conda-forge
    libllvm11                 11.1.0               hd011deb_2    conda-forge
    libnetcdf                 4.8.0           nompi_hb4d10b0_103    conda-forge
    libnghttp2                1.43.0               h07e645a_0    conda-forge
    libopenblas               0.3.17          openmp_h3351f45_1    conda-forge
    libpng                    1.6.37               h7cec526_2    conda-forge
    libpq                     13.3                 hea3049e_0    conda-forge
    libpysal                  4.5.1              pyhd8ed1ab_0    conda-forge
    librttopo                 1.1.0                h5413771_6    conda-forge
    libsodium                 1.0.18               hbcb3906_1    conda-forge
    libsolv                   0.7.19               hcf210ce_5    conda-forge
    libspatialindex           1.9.3                he49afe7_4    conda-forge
    libspatialite             5.0.1                h035f608_5    conda-forge
    libssh2                   1.9.0                h52ee1ee_6    conda-forge
    libtiff                   4.3.0                h1167814_0    conda-forge
    libwebp-base              1.2.1                h0d85af4_0    conda-forge
    libxml2                   2.9.12               h93ec3fd_0    conda-forge
    libzip                    1.8.0                h8b0c345_0    conda-forge
    linkify-it-py             1.0.1              pyhd8ed1ab_0    conda-forge
    llvm-openmp               12.0.1               hda6cdc1_1    conda-forge
    llvmlite                  0.36.0           py39h798a4f4_0    conda-forge
    locket                    0.2.0                      py_2    conda-forge
    lz4-c                     1.9.3                he49afe7_1    conda-forge
    lzo                       2.10              haf1e3a3_1000    conda-forge
    mamba                     0.15.3           py39hb671511_0    conda-forge
    mapclassify               2.4.3              pyhd8ed1ab_0    conda-forge
    markdown-it-py            0.6.2              pyhd8ed1ab_0    conda-forge
    markupsafe                2.0.1            py39h89e85a6_0    conda-forge
    matplotlib-base           3.4.3            py39hb07454d_0    conda-forge
    matplotlib-inline         0.1.2              pyhd8ed1ab_2    conda-forge
    mdit-py-plugins           0.2.6              pyhd8ed1ab_0    conda-forge
    mgwr                      2.1.2                      py_0    conda-forge
    mistune                   0.8.4           py39h89e85a6_1004    conda-forge
    mock                      4.0.3            py39h6e9494a_1    conda-forge
    momepy                    0.5.0              pyhd8ed1ab_1    conda-forge
    more-itertools            8.8.0              pyhd8ed1ab_0    conda-forge
    mpc                       1.1.0             ha57cd0f_1009    conda-forge
    mpfr                      4.1.0                h0f52abe_0    conda-forge
    mpmath                    1.2.1              pyhd8ed1ab_0    conda-forge
    msgpack-python            1.0.2            py39hf018cea_1    conda-forge
    munch                     2.5.0                      py_0    conda-forge
    mysql-common              8.0.25               h694c41f_2    conda-forge
    mysql-libs                8.0.25               h115446f_2    conda-forge
    myst-nb                   0.12.3             pyhd8ed1ab_0    conda-forge
    myst-parser               0.13.7             pyhd8ed1ab_0    conda-forge
    nbclient                  0.5.4              pyhd8ed1ab_0    conda-forge
    nbconvert                 5.6.0                      py_0    conda-forge
    nbdime                    3.1.0              pyhd8ed1ab_0    conda-forge
    nbformat                  5.1.3              pyhd8ed1ab_0    conda-forge
    ncurses                   6.2                  h2e338ed_4    conda-forge
    nest-asyncio              1.5.1              pyhd8ed1ab_0    conda-forge
    networkx                  2.6.2              pyhd8ed1ab_0    conda-forge
    nose                      1.3.7                   py_1006    conda-forge
    notebook                  6.4.3              pyha770c72_0    conda-forge
    nspr                      4.30                 hcd9eead_0    conda-forge
    nss                       3.69                 h31e2bf1_0    conda-forge
    numba                     0.53.1           py39h32e38f5_1    conda-forge
    numexpr                   2.7.3            py39h4d6be9b_0    conda-forge
    numpy                     1.21.2           py39h7eed0ac_0    conda-forge
    olefile                   0.46               pyh9f0ad1d_1    conda-forge
    openjpeg                  2.4.0                h6e7aa92_1    conda-forge
    openssl                   1.1.1l               h0d85af4_0    conda-forge
    packaging                 21.0               pyhd8ed1ab_0    conda-forge
    pandas                    1.3.2            py39h4d6be9b_0    conda-forge
    pandoc                    2.14.1               h0d85af4_0    conda-forge
    pandocfilters             1.4.2                      py_1    conda-forge
    parso                     0.8.2              pyhd8ed1ab_0    conda-forge
    partd                     1.2.0              pyhd8ed1ab_0    conda-forge
    patsy                     0.5.1                      py_0    conda-forge
    pcre                      8.45                 he49afe7_0    conda-forge
    pexpect                   4.8.0              pyh9f0ad1d_2    conda-forge
    pickleshare               0.7.5           py39hde42818_1002    conda-forge
    pillow                    8.3.1            py39he9bb72f_0    conda-forge
    pip                       21.2.4             pyhd8ed1ab_0    conda-forge
    pixman                    0.40.0               hbcb3906_0    conda-forge
    pluggy                    0.13.1           py39h6e9494a_4    conda-forge
    pointpats                 2.2.0                      py_0    conda-forge
    poppler                   21.03.0              h640f9a4_0    conda-forge
    poppler-data              0.4.10                        0    conda-forge
    postgresql                13.3                 he8fe76e_0    conda-forge
    proj                      8.0.1                h1512c50_0    conda-forge
    prometheus_client         0.11.0             pyhd8ed1ab_0    conda-forge
    prompt-toolkit            3.0.19             pyha770c72_0    conda-forge
    prompt_toolkit            3.0.19               hd8ed1ab_0    conda-forge
    psutil                    5.8.0            py39h89e85a6_1    conda-forge
    ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
    pulp                      2.5.0            py39h6e9494a_0    conda-forge
    py                        1.10.0             pyhd3deb0d_0    conda-forge
    pybtex                    0.24.0           py39h6e9494a_0    conda-forge
    pybtex-docutils           1.0.1            py39h6e9494a_0    conda-forge
    pycosat                   0.6.3           py39h89e85a6_1006    conda-forge
    pycparser                 2.20               pyh9f0ad1d_2    conda-forge
    pydata-sphinx-theme       0.6.3              pyhd8ed1ab_0    conda-forge
    pygeos                    0.10.2a2                  dev_0    <develop>
    pygments                  2.10.0             pyhd8ed1ab_0    conda-forge
    pyopenssl                 20.0.1             pyhd8ed1ab_0    conda-forge
    pyparsing                 2.4.7              pyh9f0ad1d_0    conda-forge
    pypdf2                    1.26.0                     py_2    conda-forge
    pyproj                    3.1.0            py39h7b8b08e_4    conda-forge
    pyqt                      5.12.3           py39h6e9494a_7    conda-forge
    pyqt-impl                 5.12.3           py39hef7122c_7    conda-forge
    pyqt5-sip                 4.19.18          py39hd8f94c5_7    conda-forge
    pyqtchart                 5.12             py39hef7122c_7    conda-forge
    pyqtwebengine             5.12.1           py39hef7122c_7    conda-forge
    pyrsistent                0.17.3           py39h89e85a6_2    conda-forge
    pysal                     2.5.0              pyhd8ed1ab_0    conda-forge
    pysocks                   1.7.1            py39h6e9494a_3    conda-forge
    pytables                  3.6.1            py39hd07922a_3    conda-forge
    pytest                    6.2.4            py39h6e9494a_0    conda-forge
    pytest-cov                2.12.1             pyhd8ed1ab_0    conda-forge
    python                    3.9.6           hd187cdc_1_cpython    conda-forge
    python-dateutil           2.8.0                      py_0    conda-forge
    python_abi                3.9                      2_cp39    conda-forge
    pytz                      2021.1             pyhd8ed1ab_0    conda-forge
    pyyaml                    5.4.1            py39h89e85a6_1    conda-forge
    pyzmq                     22.2.1           py39h7fec2f1_0    conda-forge
    qt                        5.12.9               h126340a_4    conda-forge
    qtconsole                 5.1.1              pyhd8ed1ab_0    conda-forge
    qtpy                      1.10.0             pyhd8ed1ab_0    conda-forge
    quantecon                 0.5.1            py39h6e9494a_0    conda-forge
    rasterio                  1.2.6            py39h906574e_2    conda-forge
    rasterstats               0.15.0             pyhd8ed1ab_0    conda-forge
    readline                  8.1                  h05e3726_0    conda-forge
    reproc                    14.2.1               hbcb3906_0    conda-forge
    reproc-cpp                14.2.1               h2e338ed_0    conda-forge
    requests                  2.26.0             pyhd8ed1ab_0    conda-forge
    requests-unixsocket       0.2.0                      py_0    conda-forge
    rtree                     0.9.7            py39h7d0d40a_2    conda-forge
    ruamel_yaml               0.15.80         py39h89e85a6_1004    conda-forge
    rvlib                     0.0.5            py39hc89836e_0    conda-forge
    scikit-learn              0.24.2           py39hd4eea88_1    conda-forge
    scipy                     1.7.1            py39h056f1c0_0    conda-forge
    seaborn                   0.11.2               hd8ed1ab_0    conda-forge
    seaborn-base              0.11.2             pyhd8ed1ab_0    conda-forge
    segregation               2.1.0              pyhd8ed1ab_0    conda-forge
    send2trash                1.8.0              pyhd8ed1ab_0    conda-forge
    setuptools                57.4.0           py39h6e9494a_0    conda-forge
    shapely                   1.7.1            py39h1d9c377_5    conda-forge
    shellingham               1.4.0              pyh44b312d_0    conda-forge
    simplejson                3.17.3           py39h89e85a6_0    conda-forge
    six                       1.16.0             pyh6c4a22f_0    conda-forge
    smmap                     3.0.5              pyh44b312d_0    conda-forge
    snakeviz                  2.1.0              pyh9f0ad1d_0    conda-forge
    sniffio                   1.2.0            py39h6e9494a_1    conda-forge
    snowballstemmer           2.1.0              pyhd8ed1ab_0    conda-forge
    snuggs                    1.4.7                      py_0    conda-forge
    sortedcontainers          2.4.0              pyhd8ed1ab_0    conda-forge
    soupsieve                 2.0.1                      py_1    conda-forge
    spaghetti                 1.6.2              pyhd8ed1ab_0    conda-forge
    spglm                     1.0.8                      py_0    conda-forge
    sphinx                    3.5.4              pyh44b312d_0    conda-forge
    sphinx-book-theme         0.1.3              pyhd8ed1ab_0    conda-forge
    sphinx-comments           0.0.3              pyh9f0ad1d_0    conda-forge
    sphinx-copybutton         0.4.0              pyhd8ed1ab_0    conda-forge
    sphinx-external-toc       0.2.3              pyhd8ed1ab_0    conda-forge
    sphinx-jupyterbook-latex  0.4.2              pyhd8ed1ab_1    conda-forge
    sphinx-multitoc-numbering 0.1.3              pyhd8ed1ab_0    conda-forge
    sphinx-panels             0.5.2              pyhd3deb0d_0    conda-forge
    sphinx-thebe              0.0.10             pyhd8ed1ab_0    conda-forge
    sphinx-togglebutton       0.2.3              pyhd3deb0d_0    conda-forge
    sphinxcontrib-applehelp   1.0.2                      py_0    conda-forge
    sphinxcontrib-bibtex      2.2.1              pyhd8ed1ab_0    conda-forge
    sphinxcontrib-devhelp     1.0.2                      py_0    conda-forge
    sphinxcontrib-htmlhelp    2.0.0              pyhd8ed1ab_0    conda-forge
    sphinxcontrib-jsmath      1.0.1                      py_0    conda-forge
    sphinxcontrib-qthelp      1.0.3                      py_0    conda-forge
    sphinxcontrib-serializinghtml 1.1.5              pyhd8ed1ab_0    conda-forge
    spint                     1.0.7              pyhd8ed1ab_0    conda-forge
    splot                     1.1.4              pyhd8ed1ab_0    conda-forge
    spopt                     0.1.2              pyhd8ed1ab_0    conda-forge
    spreg                     1.2.4              pyhd8ed1ab_0    conda-forge
    spvcm                     0.3.0                      py_0    conda-forge
    sqlalchemy                1.3.23           py39h4b0b724_0    conda-forge
    sqlite                    3.36.0               h23a322b_0    conda-forge
    statsmodels               0.12.2           py39h329c335_0    conda-forge
    sympy                     1.8              py39h6e9494a_0    conda-forge
    tblib                     1.7.0              pyhd8ed1ab_0    conda-forge
    terminado                 0.11.1           py39h6e9494a_0    conda-forge
    testpath                  0.5.0              pyhd8ed1ab_0    conda-forge
    threadpoolctl             2.2.0              pyh8a188c0_0    conda-forge
    tiledb                    2.3.3                h8370e7a_0    conda-forge
    tk                        8.6.10               h0419947_1    conda-forge
    tobler                    0.8.2              pyhd8ed1ab_0    conda-forge
    toml                      0.10.2             pyhd8ed1ab_0    conda-forge
    toolz                     0.11.1                     py_0    conda-forge
    tornado                   6.1              py39h89e85a6_1    conda-forge
    tqdm                      4.62.1             pyhd8ed1ab_0    conda-forge
    traitlets                 5.0.5                      py_0    conda-forge
    typing_extensions         3.10.0.0           pyha770c72_0    conda-forge
    tzcode                    2021a                h0d85af4_2    conda-forge
    tzdata                    2021a                he74cb21_1    conda-forge
    uc-micro-py               1.0.1              pyhd8ed1ab_0    conda-forge
    urllib3                   1.25.11                    py_0    conda-forge
    wcwidth                   0.2.5              pyh9f0ad1d_2    conda-forge
    webencodings              0.5.1                      py_1    conda-forge
    websocket-client          0.57.0           py39h6e9494a_4    conda-forge
    wheel                     0.37.0             pyhd8ed1ab_1    conda-forge
    widgetsnbextension        3.5.1            py39h6e9494a_4    conda-forge
    xarray                    0.19.0             pyhd8ed1ab_1    conda-forge
    xerces-c                  3.2.3                h379762d_2    conda-forge
    xyzservices               2021.9.1           pyhd8ed1ab_0    conda-forge
    xz                        5.2.5                haf1e3a3_1    conda-forge
    yaml                      0.2.5                haf1e3a3_0    conda-forge
    zeromq                    4.3.4                h1c7c35f_0    conda-forge
    zict                      2.0.0                      py_0    conda-forge
    zipp                      3.5.0              pyhd8ed1ab_0    conda-forge
    zlib                      1.2.11            h7795811_1010    conda-forge
    zstd                      1.5.0                h582d3a0_0    conda-forge
    

    Ubuntu environment:

    SYSTEM INFO
    -----------
    python     : 3.8.8 | packaged by conda-forge | (default, Feb 20 2021, 16:22:27)  [GCC 9.3.0]
    executable : /opt/conda/bin/python
    machine    : Linux-5.4.0-88-generic-x86_64-with-glibc2.10
    
    GEOS, GDAL, PROJ INFO
    ---------------------
    GEOS       : 3.9.0
    GEOS lib   : /usr/lib/x86_64-linux-gnu/libgeos_c.so
    GDAL       : 3.3.2
    GDAL data dir: /opt/conda/share/gdal
    PROJ       : 8.1.1
    PROJ data dir: /opt/conda/share/proj
    
    PYTHON DEPENDENCIES
    -------------------
    geopandas  : 0.10.0
    pandas     : 1.3.3
    fiona      : 1.8.20
    numpy      : 1.20.3
    shapely    : 1.7.1
    rtree      : 0.9.7
    pyproj     : 3.2.1
    matplotlib : 3.4.3
    mapclassify: 2.4.3
    geopy      : 2.2.0
    psycopg2   : 2.9.1 (dt dec pq3 ext lo64)
    geoalchemy2: 0.8.4
    pyarrow    : 5.0.0
    pygeos     : 0.10.2
    
    # packages in environment at /opt/conda:
    #
    # Name                    Version                   Build  Channel
    _libgcc_mutex             0.1                 conda_forge    conda-forge
    _openmp_mutex             4.5                      1_llvm    conda-forge
    ablog                     0.10.17                  pypi_0    pypi
    abseil-cpp                20210324.2           h9c3ff4c_0    conda-forge
    access                    1.1.3              pyhd8ed1ab_0    conda-forge
    adal                      1.2.7              pyhd8ed1ab_0    conda-forge
    affine                    2.3.0                      py_0    conda-forge
    aiohttp                   3.7.4.post0      py38h497a2fe_0    conda-forge
    alabaster                 0.7.12                   pypi_0    pypi
    alembic                   1.7.3              pyhd8ed1ab_0    conda-forge
    amply                     0.1.4                      py_0    conda-forge
    amqp                      5.0.6              pyhd8ed1ab_0    conda-forge
    anyio                     3.3.2            py38h578d9bd_0    conda-forge
    appdirs                   1.4.4              pyh9f0ad1d_0    conda-forge
    argon2-cffi               20.1.0           py38h497a2fe_2    conda-forge
    arrow-cpp                 5.0.0           py38h94c96a7_8_cpu    conda-forge
    asciitree                 0.3.3                      py_2    conda-forge
    async-timeout             3.0.1                   py_1000    conda-forge
    async_generator           1.10                       py_0    conda-forge
    attrs                     21.2.0             pyhd8ed1ab_0    conda-forge
    aws-c-cal                 0.5.11               h95a6274_0    conda-forge
    aws-c-common              0.6.2                h7f98852_0    conda-forge
    aws-c-event-stream        0.2.7               h3541f99_13    conda-forge
    aws-c-io                  0.10.5               hfb6a706_0    conda-forge
    aws-checksums             0.1.11               ha31a3da_7    conda-forge
    aws-sdk-cpp               1.8.186              hb4091e7_3    conda-forge
    babel                     2.9.1              pyh44b312d_0    conda-forge
    backcall                  0.2.0              pyh9f0ad1d_0    conda-forge
    backports                 1.0                        py_2    conda-forge
    backports.functools_lru_cache 1.6.4              pyhd8ed1ab_0    conda-forge
    bcrypt                    3.2.0            py38h497a2fe_1    conda-forge
    beautifulsoup4            4.10.0             pyha770c72_0    conda-forge
    billiard                  3.6.4.0          py38h497a2fe_0    conda-forge
    black                     21.9b0             pyhd8ed1ab_0    conda-forge
    blas                      2.111                  openblas    conda-forge
    blas-devel                3.9.0           11_linux64_openblas    conda-forge
    bleach                    4.1.0              pyhd8ed1ab_0    conda-forge
    blinker                   1.4                        py_1    conda-forge
    blosc                     1.21.0               h9c3ff4c_0    conda-forge
    bokeh                     2.4.0            py38h578d9bd_0    conda-forge
    boost-cpp                 1.74.0               h312852a_4    conda-forge
    boto3                     1.18.53            pyhd8ed1ab_0    conda-forge
    botocore                  1.21.53            pyhd8ed1ab_0    conda-forge
    bottleneck                1.3.2            py38h6c62de6_4    conda-forge
    branca                    0.4.2              pyhd8ed1ab_0    conda-forge
    brotli                    1.0.9                h7f98852_5    conda-forge
    brotli-bin                1.0.9                h7f98852_5    conda-forge
    brotlipy                  0.7.0           py38h497a2fe_1001    conda-forge
    brunsli                   0.1                  he1b5a44_0    conda-forge
    bs4                       4.10.0               hd8ed1ab_0    conda-forge
    bzip2                     1.0.8                h7f98852_4    conda-forge
    c-ares                    1.17.2               h7f98852_0    conda-forge
    ca-certificates           2021.5.30            ha878542_0    conda-forge
    cachetools                4.2.4              pyhd8ed1ab_0    conda-forge
    cairo                     1.16.0            h6cf1ce9_1008    conda-forge
    celery                    5.1.2              pyhd8ed1ab_0    conda-forge
    cenpy                     1.0.0.post4                py_0    conda-forge
    certifi                   2021.5.30        py38h578d9bd_0    conda-forge
    certipy                   0.1.3                      py_0    conda-forge
    cffi                      1.14.6           py38ha65f79e_0    conda-forge
    cfitsio                   3.470                hb418390_7    conda-forge
    cftime                    1.5.1            py38h6c62de6_0    conda-forge
    chardet                   4.0.0            py38h578d9bd_1    conda-forge
    charls                    2.2.0                h9c3ff4c_0    conda-forge
    charset-normalizer        2.0.0              pyhd8ed1ab_0    conda-forge
    click                     7.1.2              pyh9f0ad1d_0    conda-forge
    click-didyoumean          0.0.3              pyh8c360ce_0    conda-forge
    click-plugins             1.1.1                      py_0    conda-forge
    click-repl                0.2.0              pyhd8ed1ab_0    conda-forge
    cligj                     0.7.2              pyhd8ed1ab_0    conda-forge
    cloudpickle               2.0.0              pyhd8ed1ab_0    conda-forge
    clustergram               0.5.1              pyhd8ed1ab_0    conda-forge
    coincbc                   2.10.5               hcee13e7_1    conda-forge
    colorama                  0.4.4              pyh9f0ad1d_0    conda-forge
    colorcet                  2.0.6              pyhd8ed1ab_0    conda-forge
    conda                     4.9.2            py38h578d9bd_0    conda-forge
    conda-package-handling    1.7.3            py38h497a2fe_0    conda-forge
    configurable-http-proxy   4.5.0           node15_he6ea98c_0    conda-forge
    contextily                1.1.0              pyhd8ed1ab_0    conda-forge
    coverage                  6.0              py38h497a2fe_0    conda-forge
    cryptography              3.4.7            py38ha5dfef3_0    conda-forge
    curl                      7.79.1               h2574ce0_1    conda-forge
    cycler                    0.10.0                     py_2    conda-forge
    cykhash                   1.0.2            py38h950e882_2    conda-forge
    cython                    0.29.24          py38h709712a_0    conda-forge
    cytoolz                   0.11.0           py38h497a2fe_3    conda-forge
    dask                      2021.9.1           pyhd8ed1ab_0    conda-forge
    dask-core                 2021.9.1           pyhd8ed1ab_0    conda-forge
    dask-geopandas            0.1.0a2                  pypi_0    pypi
    dask-glm                  0.2.0                      py_1    conda-forge
    dask-kubernetes           2021.3.1           pyhd8ed1ab_0    conda-forge
    dask-ml                   1.9.0              pyhd8ed1ab_0    conda-forge
    dataclasses               0.8                pyhc8e2a94_3    conda-forge
    datacube                  1.8.6              pyhd8ed1ab_0    conda-forge
    datashader                0.13.0             pyh6c4a22f_0    conda-forge
    datashape                 0.5.4                      py_1    conda-forge
    debugpy                   1.4.1            py38h709712a_0    conda-forge
    decorator                 5.1.0              pyhd8ed1ab_0    conda-forge
    defusedxml                0.7.1              pyhd8ed1ab_0    conda-forge
    deprecation               2.1.0              pyh9f0ad1d_0    conda-forge
    descartes                 1.1.0                      py_4    conda-forge
    distributed               2021.9.1         py38h578d9bd_0    conda-forge
    docutils                  0.17.1           py38h578d9bd_0    conda-forge
    download                  0.3.5                    pypi_0    pypi
    entrypoints               0.3             py38h32f6830_1002    conda-forge
    esda                      2.4.1              pyhd8ed1ab_0    conda-forge
    et_xmlfile                1.0.1                   py_1001    conda-forge
    expat                     2.4.1                h9c3ff4c_0    conda-forge
    fasteners                 0.16               pyhd8ed1ab_0    conda-forge
    feather-format            0.4.1              pyh9f0ad1d_0    conda-forge
    feedgen                   0.9.0                    pypi_0    pypi
    fiona                     1.8.20           py38hbb147eb_1    conda-forge
    flake8                    3.9.2              pyhd8ed1ab_0    conda-forge
    folium                    0.12.0             pyhd8ed1ab_1    conda-forge
    font-ttf-dejavu-sans-mono 2.37                 hab24e00_0    conda-forge
    font-ttf-inconsolata      3.000                h77eed37_0    conda-forge
    font-ttf-source-code-pro  2.038                h77eed37_0    conda-forge
    font-ttf-ubuntu           0.83                 hab24e00_0    conda-forge
    fontconfig                2.13.1            hba837de_1005    conda-forge
    fonts-conda-ecosystem     1                             0    conda-forge
    fonts-conda-forge         1                             0    conda-forge
    freetype                  2.10.4               h0708190_1    conda-forge
    freexl                    1.0.6                h7f98852_0    conda-forge
    fsspec                    2021.10.0          pyhd8ed1ab_0    conda-forge
    fuzzywuzzy                0.18.0             pyhd8ed1ab_0    conda-forge
    gdal                      3.3.2            py38h81a01a0_4    conda-forge
    geoalchemy2               0.8.4                    pypi_0    pypi
    geocube                   0.0.17             pyhd8ed1ab_0    conda-forge
    geographiclib             1.52               pyhd8ed1ab_0    conda-forge
    geopandas                 0.10.0             pyhd8ed1ab_0    conda-forge
    geopandas-base            0.10.0             pyha770c72_0    conda-forge
    geopandas-view            0.0.1                    pypi_0    pypi
    geopy                     2.2.0              pyhd8ed1ab_0    conda-forge
    geos                      3.9.1                h9c3ff4c_2    conda-forge
    geotiff                   1.7.0                hcfb7246_3    conda-forge
    gettext                   0.19.8.1          h0b5b191_1005    conda-forge
    gflags                    2.2.2             he1b5a44_1004    conda-forge
    giddy                     2.3.3                      py_0    conda-forge
    giflib                    5.2.1                h516909a_2    conda-forge
    gitdb                     4.0.7              pyhd8ed1ab_0    conda-forge
    gitpython                 3.1.24             pyhd8ed1ab_0    conda-forge
    glog                      0.5.0                h48cff8f_0    conda-forge
    gmp                       6.2.1                h58526e2_0    conda-forge
    gmpy2                     2.1.0b5          py38h8384b0a_0    conda-forge
    google-auth               2.2.1              pyh6c4a22f_0    conda-forge
    greenlet                  1.1.2            py38h709712a_0    conda-forge
    grpc-cpp                  1.40.0               h05f19cf_2    conda-forge
    h3-py                     3.7.3            py38h709712a_1    conda-forge
    hdbscan                   0.8.27           py38h5c078b8_0    conda-forge
    hdf4                      4.2.15               h10796ff_3    conda-forge
    hdf5                      1.12.1          nompi_h2750804_100    conda-forge
    heapdict                  1.0.1                      py_0    conda-forge
    icu                       68.1                 h58526e2_0    conda-forge
    idna                      3.1                pyhd3deb0d_0    conda-forge
    imagecodecs               2021.7.30        py38hb5ce8f7_1    conda-forge
    imageio                   2.9.0                      py_0    conda-forge
    imagesize                 1.2.0                    pypi_0    pypi
    importlib-metadata        4.8.1            py38h578d9bd_0    conda-forge
    importlib_resources       5.2.2              pyhd8ed1ab_0    conda-forge
    inequality                1.0.0                      py_0    conda-forge
    iniconfig                 1.1.1              pyh9f0ad1d_0    conda-forge
    intake                    0.6.3              pyhd8ed1ab_0    conda-forge
    intake-stac               0.3.0                      py_0    conda-forge
    intake-xarray             0.5.0              pyhd8ed1ab_0    conda-forge
    invoke                    1.5.0                    pypi_0    pypi
    ipykernel                 6.4.1            py38he5a9106_0    conda-forge
    ipyleaflet                0.14.0             pyhd8ed1ab_1    conda-forge
    ipympl                    0.8.0              pyhd8ed1ab_0    conda-forge
    ipyparallel               7.1.0              pyhd8ed1ab_0    conda-forge
    ipyspin                   0.1.5              pyhd8ed1ab_0    conda-forge
    ipython                   7.28.0           py38he5a9106_0    conda-forge
    ipython_genutils          0.2.0                      py_1    conda-forge
    ipyurl                    0.1.2              pyhc268e32_1    conda-forge
    ipywidgets                7.6.5              pyhd8ed1ab_0    conda-forge
    jbig                      2.1               h7f98852_2003    conda-forge
    jdcal                     1.4.1                      py_0    conda-forge
    jedi                      0.18.0           py38h578d9bd_2    conda-forge
    jinja2                    3.0.1              pyhd8ed1ab_0    conda-forge
    jmespath                  0.10.0             pyh9f0ad1d_0    conda-forge
    joblib                    1.0.1              pyhd8ed1ab_0    conda-forge
    jpeg                      9d                   h516909a_0    conda-forge
    json-c                    0.15                 h98cffda_0    conda-forge
    json5                     0.9.5              pyh9f0ad1d_0    conda-forge
    jsonschema                4.0.1              pyhd8ed1ab_0    conda-forge
    jupyter-book              0.10.1                   pypi_0    pypi
    jupyter-cache             0.4.2                    pypi_0    pypi
    jupyter-packaging         0.10.6             pyhd8ed1ab_0    conda-forge
    jupyter-server-mathjax    0.2.3              pyhd8ed1ab_0    conda-forge
    jupyter-server-proxy      3.1.0              pyhd8ed1ab_0    conda-forge
    jupyter-sphinx            0.3.1                    pypi_0    pypi
    jupyter_bokeh             3.0.2              pyhd8ed1ab_0    conda-forge
    jupyter_client            7.0.5              pyhd8ed1ab_0    conda-forge
    jupyter_core              4.8.1            py38h578d9bd_0    conda-forge
    jupyter_server            1.11.0             pyhd8ed1ab_0    conda-forge
    jupyter_telemetry         0.1.0              pyhd8ed1ab_1    conda-forge
    jupyterhub                1.4.2            py38h578d9bd_0    conda-forge
    jupyterhub-base           1.4.2            py38h578d9bd_0    conda-forge
    jupyterlab                3.1.14             pyhd8ed1ab_0    conda-forge
    jupyterlab-geojson        3.1.2                    pypi_0    pypi
    jupyterlab_pygments       0.1.2              pyh9f0ad1d_0    conda-forge
    jupyterlab_server         2.8.2              pyhd8ed1ab_0    conda-forge
    jupyterlab_widgets        1.0.2              pyhd8ed1ab_0    conda-forge
    jupytext                  1.13.0             pyhd0ecf6b_0    conda-forge
    jxrlib                    1.1                  h516909a_2    conda-forge
    kealib                    1.4.14               h87e4c3c_3    conda-forge
    kiwisolver                1.3.2            py38h1fd1430_0    conda-forge
    kombu                     5.1.0            py38h578d9bd_0    conda-forge
    krb5                      1.19.2               hcc1bbae_2    conda-forge
    kubernetes_asyncio        18.20.0            pyhd8ed1ab_0    conda-forge
    lark-parser               0.12.0             pyhd8ed1ab_0    conda-forge
    latexcodec                2.0.1                    pypi_0    pypi
    lckr-jupyterlab-variableinspector 3.0.6                    pypi_0    pypi
    lcms2                     2.12                 hddcbb42_0    conda-forge
    ld_impl_linux-64          2.36.1               hea4e1c9_2    conda-forge
    legendgram                0.0.3                      py_1    conda-forge
    lerc                      2.2.1                h9c3ff4c_0    conda-forge
    libaec                    1.0.6                h9c3ff4c_0    conda-forge
    libarchive                3.5.2                hccf745f_1    conda-forge
    libblas                   3.9.0           11_linux64_openblas    conda-forge
    libbrotlicommon           1.0.9                h7f98852_5    conda-forge
    libbrotlidec              1.0.9                h7f98852_5    conda-forge
    libbrotlienc              1.0.9                h7f98852_5    conda-forge
    libcblas                  3.9.0           11_linux64_openblas    conda-forge
    libcurl                   7.79.1               h2574ce0_1    conda-forge
    libdap4                   3.20.6               hd7c4107_2    conda-forge
    libdeflate                1.7                  h7f98852_5    conda-forge
    libedit                   3.1.20191231         he28a2e2_2    conda-forge
    libev                     4.33                 h516909a_1    conda-forge
    libevent                  2.1.10               hcdb4288_3    conda-forge
    libffi                    3.3                  h58526e2_2    conda-forge
    libgcc-ng                 11.2.0               h1d223b6_9    conda-forge
    libgdal                   3.3.2                h9c9eb65_4    conda-forge
    libgfortran-ng            11.2.0               h69a702a_9    conda-forge
    libgfortran5              11.2.0               h5c6108e_9    conda-forge
    libglib                   2.68.4               h3e27bee_0    conda-forge
    libgomp                   11.2.0               h1d223b6_9    conda-forge
    libiconv                  1.16                 h516909a_0    conda-forge
    libkml                    1.3.0             h238a007_1014    conda-forge
    liblapack                 3.9.0           11_linux64_openblas    conda-forge
    liblapacke                3.9.0           11_linux64_openblas    conda-forge
    libllvm10                 10.0.1               he513fc3_3    conda-forge
    libllvm11                 11.1.0               hf817b99_2    conda-forge
    libnetcdf                 4.8.1           nompi_hb3fd0d9_101    conda-forge
    libnghttp2                1.43.0               h812cca2_1    conda-forge
    libopenblas               0.3.17          pthreads_h8fe5266_1    conda-forge
    libpng                    1.6.37               hed695b0_2    conda-forge
    libpq                     13.3                 hd57d9b9_0    conda-forge
    libprotobuf               3.18.0               h780b84a_1    conda-forge
    libpysal                  4.5.1              pyhd8ed1ab_0    conda-forge
    librttopo                 1.1.0                h1185371_6    conda-forge
    libsodium                 1.0.18               h516909a_1    conda-forge
    libsolv                   0.7.19               h780b84a_5    conda-forge
    libspatialindex           1.9.3                h9c3ff4c_4    conda-forge
    libspatialite             5.0.1                h8796b1e_9    conda-forge
    libssh2                   1.10.0               ha56f1ee_2    conda-forge
    libstdcxx-ng              11.2.0               he4da1e4_9    conda-forge
    libthrift                 0.15.0               he6d91bd_0    conda-forge
    libtiff                   4.3.0                hf544144_1    conda-forge
    libutf8proc               2.6.1                h7f98852_0    conda-forge
    libuuid                   2.32.1            h14c3975_1000    conda-forge
    libuv                     1.41.1               h7f98852_0    conda-forge
    libwebp-base              1.2.1                h7f98852_0    conda-forge
    libxcb                    1.13              h7f98852_1003    conda-forge
    libxml2                   2.9.12               h72842e0_0    conda-forge
    libxslt                   1.1.33               h15afd5d_2    conda-forge
    libzip                    1.8.0                h4de3113_1    conda-forge
    libzlib                   1.2.11            h36c2ea0_1013    conda-forge
    libzopfli                 1.0.3                he1b5a44_0    conda-forge
    linkify-it-py             1.0.1                    pypi_0    pypi
    llvm-openmp               12.0.1               h4bd325d_1    conda-forge
    llvmlite                  0.37.0           py38h4630a5e_0    conda-forge
    locket                    0.2.0                      py_2    conda-forge
    lxml                      4.6.3            py38hf1fe3a4_0    conda-forge
    lz4-c                     1.9.3                h9c3ff4c_1    conda-forge
    lzo                       2.10              h516909a_1000    conda-forge
    mako                      1.1.5              pyhd8ed1ab_0    conda-forge
    mamba                     0.16.0           py38h2aa5da1_0    conda-forge
    mapclassify               2.4.3              pyhd8ed1ab_0    conda-forge
    markdown-it-py            1.1.0              pyhd8ed1ab_0    conda-forge
    markupsafe                2.0.1            py38h497a2fe_0    conda-forge
    matplotlib-base           3.4.3            py38hf4fb855_1    conda-forge
    matplotlib-inline         0.1.3              pyhd8ed1ab_0    conda-forge
    matplotlib-scalebar       0.7.2                    pypi_0    pypi
    mccabe                    0.6.1                      py_1    conda-forge
    mdit-py-plugins           0.2.8              pyhd8ed1ab_0    conda-forge
    mercantile                1.2.1              pyhd8ed1ab_0    conda-forge
    mgwr                      2.1.2                      py_0    conda-forge
    mistune                   0.8.4           py38h497a2fe_1004    conda-forge
    mock                      4.0.3            py38h578d9bd_1    conda-forge
    momepy                    0.5.0              pyhd8ed1ab_1    conda-forge
    monotonic                 1.5                        py_0    conda-forge
    more-itertools            8.10.0             pyhd8ed1ab_0    conda-forge
    morecantile               3.0.0              pyhd8ed1ab_0    conda-forge
    mpc                       1.2.1                h9f54685_0    conda-forge
    mpfr                      4.1.0                h9202a9a_1    conda-forge
    mpmath                    1.2.1              pyhd8ed1ab_0    conda-forge
    msgpack-python            1.0.2            py38h1fd1430_1    conda-forge
    multidict                 5.2.0            py38h497a2fe_0    conda-forge
    multipledispatch          0.6.0                      py_0    conda-forge
    munch                     2.5.0                      py_0    conda-forge
    mypy_extensions           0.4.3            py38h578d9bd_3    conda-forge
    myst-nb                   0.12.0                   pypi_0    pypi
    myst-parser               0.13.5                   pypi_0    pypi
    nbclassic                 0.3.2              pyhd8ed1ab_0    conda-forge
    nbclient                  0.5.4              pyhd8ed1ab_0    conda-forge
    nbconvert                 6.2.0            py38h578d9bd_0    conda-forge
    nbdime                    3.1.0              pyhd8ed1ab_0    conda-forge
    nbformat                  5.1.3              pyhd8ed1ab_0    conda-forge
    ncurses                   6.2                  h58526e2_4    conda-forge
    nest-asyncio              1.5.1              pyhd8ed1ab_0    conda-forge
    nested-lookup             0.2.22                   pypi_0    pypi
    netcdf4                   1.5.7           nompi_py38h2823cc8_103    conda-forge
    networkx                  2.5                        py_0    conda-forge
    nodejs                    15.14.0              h92b4a50_0    conda-forge
    nose                      1.3.7           py38h32f6830_1004    conda-forge
    notebook                  6.4.4              pyha770c72_0    conda-forge
    nspr                      4.30                 h9c3ff4c_0    conda-forge
    nss                       3.69                 hb5efdd6_1    conda-forge
    numba                     0.54.0           py38h4bf6c61_0    conda-forge
    numcodecs                 0.9.1            py38h709712a_0    conda-forge
    numexpr                   2.7.3            py38h51da96c_0    conda-forge
    numpy                     1.20.3           py38h9894fe3_1    conda-forge
    oauthlib                  3.1.1              pyhd8ed1ab_0    conda-forge
    olefile                   0.46               pyh9f0ad1d_1    conda-forge
    openblas                  0.3.17          pthreads_h4748800_1    conda-forge
    openjpeg                  2.4.0                hb52868f_1    conda-forge
    openpyxl                  3.0.9              pyhd8ed1ab_0    conda-forge
    openssl                   1.1.1l               h7f98852_0    conda-forge
    orc                       1.7.0                h68e2c4e_0    conda-forge
    osmnet                    0.1.6                      py_0    conda-forge
    osmnx                     1.1.1              pyhd8ed1ab_0    conda-forge
    packaging                 21.0               pyhd8ed1ab_0    conda-forge
    palettable                3.3.0                      py_0    conda-forge
    pamela                    1.0.0                      py_0    conda-forge
    pandana                   0.6.1            py38h1abd341_0    conda-forge
    pandas                    1.3.3            py38h43a58ef_0    conda-forge
    pandas-bokeh              0.5.4                    pypi_0    pypi
    pandoc                    2.14.2               h7f98852_0    conda-forge
    pandocfilters             1.5.0              pyhd8ed1ab_0    conda-forge
    param                     1.11.1             pyh6c4a22f_0    conda-forge
    paramiko                  2.7.2              pyh9f0ad1d_0    conda-forge
    parquet-cpp               1.5.1                         1    conda-forge
    parso                     0.8.2              pyhd8ed1ab_0    conda-forge
    partd                     1.2.0              pyhd8ed1ab_0    conda-forge
    pathspec                  0.9.0              pyhd8ed1ab_0    conda-forge
    patsy                     0.5.2              pyhd8ed1ab_0    conda-forge
    pcre                      8.45                 h9c3ff4c_0    conda-forge
    pexpect                   4.8.0            py38h32f6830_1    conda-forge
    pickleshare               0.7.5           py38h32f6830_1002    conda-forge
    pillow                    8.3.2            py38h8e6f84c_0    conda-forge
    pip                       21.2.4             pyhd8ed1ab_0    conda-forge
    pixman                    0.40.0               h36c2ea0_0    conda-forge
    platformdirs              2.3.0              pyhd8ed1ab_0    conda-forge
    pluggy                    1.0.0            py38h578d9bd_1    conda-forge
    pointpats                 2.2.0                      py_0    conda-forge
    polyline                  1.4.0                      py_0    conda-forge
    pooch                     1.5.1              pyhd8ed1ab_0    conda-forge
    poppler                   21.09.0              ha39eefc_3    conda-forge
    poppler-data              0.4.11               hd8ed1ab_0    conda-forge
    postgresql                13.3                 h2510834_0    conda-forge
    proj                      8.1.1                h277dcde_2    conda-forge
    prometheus_client         0.11.0             pyhd8ed1ab_0    conda-forge
    prompt-toolkit            3.0.20             pyha770c72_0    conda-forge
    prompt_toolkit            3.0.20               hd8ed1ab_0    conda-forge
    psutil                    5.8.0            py38h497a2fe_1    conda-forge
    psycopg2                  2.9.1            py38h497a2fe_0    conda-forge
    pthread-stubs             0.4               h36c2ea0_1001    conda-forge
    ptyprocess                0.7.0              pyhd3deb0d_0    conda-forge
    pulp                      2.5.0            py38h578d9bd_0    conda-forge
    py                        1.10.0             pyhd3deb0d_0    conda-forge
    pyarrow                   5.0.0           py38h1bc9799_8_cpu    conda-forge
    pyasn1                    0.4.8                      py_0    conda-forge
    pyasn1-modules            0.2.7                      py_0    conda-forge
    pybtex                    0.24.0                   pypi_0    pypi
    pybtex-docutils           1.0.0                    pypi_0    pypi
    pycodestyle               2.7.0              pyhd8ed1ab_0    conda-forge
    pycosat                   0.6.3           py38h497a2fe_1006    conda-forge
    pycparser                 2.20               pyh9f0ad1d_2    conda-forge
    pyct                      0.4.8                      py_0    pyviz
    pyct-core                 0.4.8                      py_0    pyviz
    pycurl                    7.44.1           py38h996a351_0    conda-forge
    pydantic                  1.8.2            py38h497a2fe_0    conda-forge
    pydata-sphinx-theme       0.4.3                    pypi_0    pypi
    pyee                      8.1.0              pyh9f0ad1d_0    conda-forge
    pyflakes                  2.3.1              pyhd8ed1ab_0    conda-forge
    pygeoda                   0.0.8                    pypi_0    pypi
    pygeos                    0.10.2           py38hb7fe4a8_0    conda-forge
    pygments                  2.10.0             pyhd8ed1ab_0    conda-forge
    pyjwt                     2.1.0              pyhd8ed1ab_0    conda-forge
    pynacl                    1.4.0            py38h497a2fe_2    conda-forge
    pyopenssl                 21.0.0             pyhd8ed1ab_0    conda-forge
    pyparsing                 2.4.7              pyh9f0ad1d_0    conda-forge
    pyppeteer                 0.2.6              pyhd8ed1ab_0    conda-forge
    pyproj                    3.2.1            py38h80797bf_2    conda-forge
    pyrobuf                   0.9.3            py38h709712a_2    conda-forge
    pyrosm                    0.6.0            py38hadf7658_0    conda-forge
    pyrsistent                0.17.3           py38h497a2fe_2    conda-forge
    pysal                     2.5.0              pyhd8ed1ab_0    conda-forge
    pysocks                   1.7.1            py38h578d9bd_3    conda-forge
    pytables                  3.6.1            py38hdb04529_4    conda-forge
    pytest                    6.2.5            py38h578d9bd_0    conda-forge
    pytest-cov                3.0.0              pyhd8ed1ab_0    conda-forge
    pytest-tornasync          0.6.0.post2              pypi_0    pypi
    python                    3.8.8           hffdb5ce_0_cpython    conda-forge
    python-dateutil           2.7.5                      py_0    conda-forge
    python-editor             1.0.4                      py_0    conda-forge
    python-json-logger        2.0.1              pyh9f0ad1d_0    conda-forge
    python-kubernetes         18.20.0            pyhd8ed1ab_0    conda-forge
    python-levenshtein        0.12.2           py38h497a2fe_0    conda-forge
    python-rapidjson          1.4              py38h709712a_0    conda-forge
    python-snappy             0.6.0            py38h49bdff1_0    conda-forge
    python_abi                3.8                      2_cp38    conda-forge
    pytz                      2021.1             pyhd8ed1ab_0    conda-forge
    pyu2f                     0.1.5              pyhd8ed1ab_0    conda-forge
    pywavelets                1.1.1            py38hab2c0dc_3    conda-forge
    pyyaml                    5.4.1            py38h497a2fe_1    conda-forge
    pyzmq                     22.3.0           py38h2035c66_0    conda-forge
    quantecon                 0.5.1            py38h578d9bd_0    conda-forge
    rasterio                  1.2.9            py38hfd64e68_2    conda-forge
    rasterstats               0.15.0             pyhd8ed1ab_0    conda-forge
    re2                       2021.09.01           h9c3ff4c_0    conda-forge
    readline                  8.1                  h46c0cb4_0    conda-forge
    redis-py                  3.5.3              pyh9f0ad1d_0    conda-forge
    regex                     2021.9.30        py38h497a2fe_0    conda-forge
    reproc                    14.2.3               h7f98852_0    conda-forge
    reproc-cpp                14.2.3               h9c3ff4c_0    conda-forge
    requests                  2.26.0             pyhd8ed1ab_0    conda-forge
    requests-oauthlib         1.3.0              pyh9f0ad1d_0    conda-forge
    requests-unixsocket       0.2.0                      py_0    conda-forge
    retrying                  1.3.3                      py_2    conda-forge
    rio-cogeo                 3.0.0              pyhd8ed1ab_0    conda-forge
    rioxarray                 0.7.1              pyhd8ed1ab_0    conda-forge
    rpy2                      3.4.3                    pypi_0    pypi
    rsa                       4.7.2              pyh44b312d_0    conda-forge
    rtree                     0.9.7            py38h02d302b_2    conda-forge
    ruamel.yaml               0.17.16          py38h497a2fe_0    conda-forge
    ruamel.yaml.clib          0.2.2            py38h497a2fe_2    conda-forge
    ruamel_yaml               0.15.80         py38h497a2fe_1004    conda-forge
    rvlib                     0.0.5            py38h6c62de6_0    conda-forge
    s2n                       1.0.10               h9b69904_0    conda-forge
    s3transfer                0.5.0              pyhd8ed1ab_0    conda-forge
    sat-stac                  0.4.1              pyh44b312d_0    conda-forge
    scikit-image              0.18.3           py38h43a58ef_0    conda-forge
    scikit-learn              1.0              py38hacb3eff_1    conda-forge
    scipy                     1.7.1            py38h56a6a73_0    conda-forge
    seaborn                   0.11.2               hd8ed1ab_0    conda-forge
    seaborn-base              0.11.2             pyhd8ed1ab_0    conda-forge
    segregation               2.1.0              pyhd8ed1ab_0    conda-forge
    send2trash                1.8.0              pyhd8ed1ab_0    conda-forge
    setuptools                58.0.4           py38h578d9bd_2    conda-forge
    shapely                   1.7.1            py38hb7fe4a8_5    conda-forge
    simpervisor               0.4                pyhd8ed1ab_0    conda-forge
    simplejson                3.17.5           py38h497a2fe_0    conda-forge
    simplification            0.5.12                   pypi_0    pypi
    six                       1.16.0             pyh6c4a22f_0    conda-forge
    smmap                     3.0.5              pyh44b312d_0    conda-forge
    snappy                    1.1.8                he1b5a44_3    conda-forge
    sniffio                   1.2.0            py38h578d9bd_1    conda-forge
    snowballstemmer           2.1.0                    pypi_0    pypi
    snuggs                    1.4.7                      py_0    conda-forge
    sortedcontainers          2.4.0              pyhd8ed1ab_0    conda-forge
    soupsieve                 2.0.1            py38h32f6830_0    conda-forge
    spaghetti                 1.6.4              pyhd8ed1ab_0    conda-forge
    spatialpandas             0.4.3              pyhd8ed1ab_0    conda-forge
    spglm                     1.0.8                      py_0    conda-forge
    sphinx                    3.5.3                    pypi_0    pypi
    sphinx-book-theme         0.0.42                   pypi_0    pypi
    sphinx-comments           0.0.3                    pypi_0    pypi
    sphinx-copybutton         0.3.1                    pypi_0    pypi
    sphinx-panels             0.5.2                    pypi_0    pypi
    sphinx-thebe              0.0.8                    pypi_0    pypi
    sphinx-togglebutton       0.2.3                    pypi_0    pypi
    sphinxcontrib-applehelp   1.0.2                    pypi_0    pypi
    sphinxcontrib-bibtex      2.1.4                    pypi_0    pypi
    sphinxcontrib-devhelp     1.0.2                    pypi_0    pypi
    sphinxcontrib-htmlhelp    1.0.3                    pypi_0    pypi
    sphinxcontrib-jsmath      1.0.1                    pypi_0    pypi
    sphinxcontrib-qthelp      1.0.3                    pypi_0    pypi
    sphinxcontrib-serializinghtml 1.1.4                    pypi_0    pypi
    spint                     1.0.7              pyhd8ed1ab_0    conda-forge
    splot                     1.1.4              pyhd8ed1ab_0    conda-forge
    spopt                     0.1.2              pyhd8ed1ab_0    conda-forge
    spreg                     1.2.4              pyhd8ed1ab_0    conda-forge
    spvcm                     0.3.0                      py_0    conda-forge
    sqlalchemy                1.4.25           py38h497a2fe_0    conda-forge
    sqlite                    3.36.0               h9cd32fc_2    conda-forge
    sshtunnel                 0.3.1              pyhd8ed1ab_0    conda-forge
    statsmodels               0.13.0           py38h6c62de6_0    conda-forge
    supermercado              0.2.0              pyh9f0ad1d_0    conda-forge
    sympy                     1.8              py38h578d9bd_0    conda-forge
    tabulate                  0.8.9              pyhd8ed1ab_0    conda-forge
    tblib                     1.7.0              pyhd8ed1ab_0    conda-forge
    terminado                 0.12.1           py38h578d9bd_0    conda-forge
    testpath                  0.5.0              pyhd8ed1ab_0    conda-forge
    threadpoolctl             3.0.0              pyh8a188c0_0    conda-forge
    tifffile                  2021.8.30          pyhd8ed1ab_0    conda-forge
    tiledb                    2.3.4                he87e0bf_0    conda-forge
    tini                      0.18.0            h14c3975_1001    conda-forge
    tk                        8.6.11               h27826a3_1    conda-forge
    tobler                    0.7.0                    pypi_0    pypi
    toml                      0.10.2             pyhd8ed1ab_0    conda-forge
    tomli                     1.2.1              pyhd8ed1ab_0    conda-forge
    tomlkit                   0.7.2            py38h578d9bd_0    conda-forge
    toolz                     0.11.1                     py_0    conda-forge
    topojson                  1.0                      pypi_0    pypi
    tornado                   6.1              py38h497a2fe_1    conda-forge
    tqdm                      4.62.3             pyhd8ed1ab_0    conda-forge
    traitlets                 5.1.0              pyhd8ed1ab_0    conda-forge
    traittypes                0.2.1              pyh9f0ad1d_2    conda-forge
    typed-ast                 1.4.3            py38h497a2fe_0    conda-forge
    typing-extensions         3.10.0.2             hd8ed1ab_0    conda-forge
    typing_extensions         3.10.0.2           pyha770c72_0    conda-forge
    tzcode                    2021a                h7f98852_2    conda-forge
    tzdata                    2021b                he74cb21_0    conda-forge
    uc-micro-py               1.0.1                    pypi_0    pypi
    urbanaccess               0.2.2              pyhd3deb0d_0    conda-forge
    urbangrammar-graphics     1.2.2                    pypi_0    pypi
    urllib3                   1.25.11                    py_0    conda-forge
    vine                      5.0.0              pyhd8ed1ab_1    conda-forge
    watchdog                  2.0.2                    pypi_0    pypi
    wcwidth                   0.2.5              pyh9f0ad1d_2    conda-forge
    webencodings              0.5.1                      py_1    conda-forge
    websocket-client          0.57.0           py38h578d9bd_4    conda-forge
    websockets                9.1              py38h497a2fe_0    conda-forge
    wheel                     0.37.0             pyhd8ed1ab_1    conda-forge
    widgetsnbextension        3.5.1            py38h578d9bd_4    conda-forge
    xarray                    0.19.0             pyhd8ed1ab_1    conda-forge
    xarray-spatial            0.1.8              pyhd8ed1ab_0    conda-forge
    xarray_leaflet            0.1.15             pyhd8ed1ab_0    conda-forge
    xerces-c                  3.2.3                h9d8b166_2    conda-forge
    xlrd                      2.0.1              pyhd8ed1ab_3    conda-forge
    xlsxwriter                3.0.1              pyhd8ed1ab_0    conda-forge
    xorg-kbproto              1.0.7             h14c3975_1002    conda-forge
    xorg-libice               1.0.10               h516909a_0    conda-forge
    xorg-libsm                1.2.3             hd9c2040_1000    conda-forge
    xorg-libx11               1.7.2                h7f98852_0    conda-forge
    xorg-libxau               1.0.9                h14c3975_0    conda-forge
    xorg-libxdmcp             1.1.3                h516909a_0    conda-forge
    xorg-libxext              1.3.4                h7f98852_1    conda-forge
    xorg-libxrender           0.9.10            h7f98852_1003    conda-forge
    xorg-renderproto          0.11.1            h14c3975_1002    conda-forge
    xorg-xextproto            7.3.0             h14c3975_1002    conda-forge
    xorg-xproto               7.0.31            h14c3975_1007    conda-forge
    xyzservices               2021.9.1           pyhd8ed1ab_0    conda-forge
    xz                        5.2.5                h516909a_1    conda-forge
    yaml                      0.2.5                h516909a_0    conda-forge
    yarl                      1.6.3            py38h497a2fe_2    conda-forge
    zarr                      2.10.1             pyhd8ed1ab_0    conda-forge
    zeromq                    4.3.4                h9c3ff4c_1    conda-forge
    zfp                       0.5.5                h9c3ff4c_7    conda-forge
    zict                      2.0.0                      py_0    conda-forge
    zipp                      3.6.0              pyhd8ed1ab_0    conda-forge
    zlib                      1.2.11            h36c2ea0_1013    conda-forge
    zstd                      1.5.0                ha95c52a_0    conda-forge
    
    opened by martinfleis 16
  • Test new binary wheels

    Test new binary wheels

    The new binary wheels are distributed under version 0.10.2a2! I'd like to spot-test some of them before tagging the release.

    Please try it out:

    $ pip install --pre pygeos[test]
    $ pytest --pyargs pygeos.tests
    

    And report back the exact wheel version you used + if tests passed.

    For me: pygeos-0.10.2a2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl works.

    @jorisvandenbossche @mwtoews @brendan-ward

    opened by caspervdw 16
  • Release the GIL for geometry-creating operations

    Release the GIL for geometry-creating operations

    This addresses #155 , now only for the geometry-to-geometry operations (like envelope and convex_hull)

    The same pattern could be repeated for all other geometry-creating operations.

    opened by caspervdw 16
  • ENH: add STRtree nearest neighbor(s) function

    ENH: add STRtree nearest neighbor(s) function

    Replaces #111, resolves #110.

    Note: this builds on top of #265, which should be reviewed and merged first.

    Based on the feedback in #111, this provides a nearest neighbor function on the tree that overcomes some of the limitations of the GEOS API. Specifically, the GEOS API returns a single, nondeterministic geometry from a set of intersected or equidistant tree geometries, which causes problems with downstream usage.

    This provides an index-oriented results (input indexes, target indexes) similar to query_bulk, with an optional distance array.

    This implementation should return all intersected or equidistant tree geometries for each input geometry. To do this, it leverages the userdata parameter of the tree's distance callback function to pass in a data structure that allows us to accumulate pairs of nearby geometries, track the minimum distance observed, and slightly modify (read: lie about) the distance returned to the GEOS function to force investigation of tree geometries in adjacent tree nodes. Without this modification, the algorithm stops before visiting additional equidistant or intersected geometries in adjacent tree nodes, producing an incomplete result set.

    This implementation also enables pre-screening of input geometries by a max_distance parameter. This is used to create an envelope around the geometry to query against the tree which is used to make sure that there are tree geometries within that distance. Depending on the configuration of the geometry and the distance used, this either incurs extra overhead or it can dramatically reduce the time needed to find nearest items within that distance (vs finding all nearest then filtering later).

    This involved adding helper functions to calculate bounds and create a box; these were derived from similar functions in the ufuncs (and could be consolidated later).

    Note: this is not intended to be used for kNN functionality; that will require a separate algorithm implemented within GEOS first. The only time this will return multiple neighbors for an input geometry is when there are multiple equidistant or intersected tree geometries.

    The doctests for nearest are marked to skip them completely; I could not find a way to conditionally skip them for GEOS < 3.6.

    /cc @adriangb

    enhancement 
    opened by brendan-ward 15
  • Pygeos exception:

    Pygeos exception:"non-noded intersection" encountered under python 3.11

    Hey guys, I just tried running the pygeso 0.14 with python 3.11 on one of our regular scripts. The following two exceptions are encountered.

    pygeos.GEOSException is encountered, retrying union_all with 1E-3 grid size. Traceback (most recent call last): File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\SimulationToolbox\Geometry\geometric_objects.py", line 431, in to_area2D pygeos.set_operations.union_all(polygons), tolerance=wp_slice_precision) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\ibrusenv3_11\Lib\site-packages\pygeos\decorators.py", line 80, in wrapped return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\ibrusenv3_11\Lib\site-packages\pygeos\set_operations.py", line 388, in union_all result = lib.unary_union(collections, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pygeos.GEOSException: TopologyException: found non-noded intersection between LINESTRING (-0.0627738 -0.559665, -0.0627738 -0.559665) and LINESTRING (-0.0627738 -0.559665, -0.0627738 -0.559665) at -0.062773768781892267 -0.55966495759925516

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "", line 198, in _run_module_as_main File "", line 88, in _run_code File "C:\Users\aniwax\AppData\Local\Programs\Python\Python311\Lib\cProfile.py", line 190, in main() File "C:\Users\aniwax\AppData\Local\Programs\Python\Python311\Lib\cProfile.py", line 179, in main runctx(code, globs, None, options.outfile, options.sort) File "C:\Users\aniwax\AppData\Local\Programs\Python\Python311\Lib\cProfile.py", line 19, in runctx return _pyprofile._Utils(Profile).runctx(statement, globals, locals, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\AppData\Local\Programs\Python\Python311\Lib\profile.py", line 62, in runctx prof.runctx(statement, globals, locals) File "C:\Users\aniwax\AppData\Local\Programs\Python\Python311\Lib\cProfile.py", line 100, in runctx exec(cmd, globals, locals) File ".\PerformanceOptimisation\runtime_optimisation_railgrinding.py", line 148, in optimization_run(True) File ".\PerformanceOptimisation\runtime_optimisation_railgrinding.py", line 107, in optimization_run apply_attritious_wear(wear_model_result, tool, File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\SimulationToolbox\Simulation\wear_models.py", line 195, in apply_attritious_wear modify_reduced_grains(tool, mat_remover_result) File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\SimulationToolbox\Simulation\wear_models.py", line 165, in modify_reduced_grains projected_fm = projected_mesh.to_flatmanifold( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\SimulationToolbox\Geometry\geometric_objects.py", line 387, in to_flatmanifold flatManifold = FlatManifold(self.to_area2D(precision), self.pose) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\SimulationToolbox\Geometry\geometric_objects.py", line 455, in to_area2D area2d = Area2D.from_pygeos_polygon(pygeos.polygons( ^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\ibrusenv3_11\Lib\site-packages\pygeos\decorators.py", line 80, in wrapped return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\ibrusenv3_11\Lib\site-packages\pygeos\creation.py", line 250, in polygons geometries = linearrings(geometries) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\ibrusenv3_11\Lib\site-packages\pygeos\decorators.py", line 80, in wrapped return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\aniwax\Documents\GitHub\iBrusCoreSim\ibrusenv3_11\Lib\site-packages\pygeos\creation.py", line 172, in linearrings return lib.linearrings(coords, out=out, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ValueError: linearrings: Input operand 0 does not have enough dimensions (has 1, gufunc core with signature (i, d)->() requires 2)

    opened by Aniwax 0
  • Please raise issues at https://github.com/shapely/shapely

    Please raise issues at https://github.com/shapely/shapely

    PyGEOS was merged with shapely in December 2021 and will be released as part of Shapely 2.0.

    The development will take place at the Shapely repository. Please raise issues or create pull request over there. PyGEOS itself will receive updates (by backporting from the Shapely repository) until Shapely 2.0 is actually released.

    opened by caspervdw 0
  • Add “offsets” as an alternative to “indices”

    Add “offsets” as an alternative to “indices”

    In #436 @jorisvandenbossche found that the “indices” argument takes significant part of the processing time of the “simple geometries from indices” routine.

    It seems that using offsets instead (for example [4, 6, 11] instead of [0,0,0,0,1,1,2,2,2,2,2] gives better performance. This is exactly what numpy.ufuncs.reduceat takes; we might even implement this as a ufunc? https://numpy.org/doc/stable/reference/generated/numpy.ufunc.reduceat.html

    enhancement to-shapely 
    opened by caspervdw 4
  • ENH: release GIL during STRtree creation

    ENH: release GIL during STRtree creation

    We aren't currently releasing the GIL during the creation of STRtree; this might be possible and could yield potential performance improvements in a multi-threaded environment.

    In particular, the initial query against the tree after construction toward the end of STRtree_new should not need to hold the GIL.

    enhancement to-shapely 
    opened by brendan-ward 1
  • TST: add high level integration test suite

    TST: add high level integration test suite

    From @caspervdw at https://github.com/pygeos/pygeos/issues/362#issuecomment-874013431:

    maybe we could bundle these kind of high level tests (integration tests could be the word, not sure) at some point and also resurrect the test I did when implementing the GIL release.

    testing to-shapely 
    opened by jorisvandenbossche 0
  • ENH: Exclude same input geometry from output of nearest_all

    ENH: Exclude same input geometry from output of nearest_all

    In this issue in Shapely, there is a need to find the nearest items in a tree constructed of the same geometries that are being used to query the tree, but return the non-self nearest neighbor(s).

    One way to approach this would be to provide a new function that does not take new geometry inputs, but instead uses the underlying tree geometries in such a way that we can compare addresses of a geometry to the results returned within the nearest callback function, so as to avoid a more expensive test for equality. We would then return an arbitrarily large distance for the self-pair, to force the tree to look for the next nearest neighbor.

    /cc @liunx7594

    enhancement to-shapely 
    opened by brendan-ward 6
Releases(0.14)
  • 0.10.1(Jul 6, 2021)

    Version 0.10.1 (2021-07-06)

    Bug fixes

    • Fixed the box and set_precision functions with numpy 1.21 (#367).
    • Fixed STRtree creation to allow querying the tree in a multi-threaded context (#361).

    Acknowledgements

    Thanks to everyone who contributed to this release! People with a "+" by their names contributed a patch for the first time.

    • Brendan Ward
    • Casper van der Wel
    • Joris Van den Bossche
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.10.1.tar.gz(104.35 KB)
  • 0.10(May 18, 2021)

    Version 0.10 (2021-05-18)

    Major enhancements

    • Addition of nearest and nearest_all functions to STRtree for GEOS >= 3.6 to find the nearest neighbors (#272).
    • Enable bulk construction of geometries with different number of coordinates by optionally taking index arrays in all creation functions (#230, #322, #326, #346).
    • Released the GIL in all geometry creation functions (#310, #326).
    • Added the option to return the geometry index in get_coordinates (#318).
    • Added the get_rings function, similar as get_parts but specifically to extract the rings of Polygon geometries (#342).
    • Updated box ufunc to use internal C function for creating polygon (about 2x faster) and added ccw parameter to create polygon in counterclockwise (default) or clockwise direction (#308).
    • Added to_shapely and improved performance of from_shapely in the case GEOS versions are different (#312).

    API Changes

    • STRtree default leaf size is now 10 instead of 5, for somewhat better performance under normal conditions (#286)
    • Deprecated VALID_PREDICATES set from pygeos.strtree package; these can be constructed in downstream libraries using the pygeos.strtree.BinaryPredicate enum. This will be removed in a future release.
    • points, linestrings, linearrings, and polygons now return a GEOSException instead of a ValueError or TypeError for invalid input (#310, #326).
    • Addition of on_invalid parameter to from_wkb and from_wkt to optionally return invalid WKB geometries as None.
    • Removed the (internal) function lib.polygons_without_holes and renamed lib.polygons_with_holes to lib.polygons (#326).
    • polygons will now return an empty polygon for None inputs (#346).
    • Removed compatibility with Python 3.5 (#341).

    Added GEOS functions

    • Addition of a contains_properly function (#267)
    • Addition of a polygonize function (#275)
    • Addition of a polygonize_full function (#298)
    • Addition of a segmentize function for GEOS >= 3.10 (#299)
    • Addition of oriented_envelope and minimum_rotated_rectangle functions (#314)
    • Addition of minimum_bounding_circle and minimum_bounding_radius functions for GEOS >= 3.8 (#315)
    • Addition of a shortest_line ("nearest points") function (#334)

    Bug fixes

    • Fixed portability issue for ARM architecture (#293)
    • Fixed segfault in linearrings and box when constructing a geometry with nan coordinates (#310).
    • Fixed segfault in polygons (with holes) when None was provided.
    • Fixed memory leak in polygons when non-linearring input was provided.

    Acknowledgments

    Thanks to everyone who contributed to this release! People with a "+" by their names contributed a patch for the first time.

    • Brendan Ward
    • Casper van der Wel
    • Joris Van den Bossche
    • Martin Fleischmann
    • Mike Taves
    • Tanguy Ophoff +
    • James Myatt +
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.10.tar.gz(104.11 KB)
  • 0.9(Jan 23, 2021)

    Version 0.9 (2021-01-23)

    Major enhancements

    • Addition of prepare function that generates a GEOS prepared geometry which is stored on the Geometry object itself. All binary predicates (except equals) make use of this. Helper functions destroy_prepared and is_prepared are also available. (#92, #252)
    • Use previously prepared geometries within STRtree query and query_bulk functions if available (#246)
    • Official support for Python 3.9 and numpy 1.20 (#278, #279)
    • Drop support for Python 3.5 (#211)
    • Added support for pickling to Geometry objects (#190)
    • The apply function for coordinate transformations and the set_coordinates function now support geometries with z-coordinates (#131)
    • Addition of Cython and internal PyGEOS C API to enable easier development of internal functions (previously all significant internal functions were developed in C). Added a Cython-implemented get_parts function (#51)

    API Changes

    • Geometry and counting functions (get_num_coordinates, get_num_geometries, get_num_interior_rings, get_num_points) now return 0 for None input values instead of -1 (#218)
    • intersection_all and symmetric_difference_all now ignore None values instead of returning None if any value is None (#249)
    • union_all now returns None (instead of GEOMETRYCOLLECTION EMPTY) if all input values are None (#249)
    • The default axis of union_all, intersection_all, symmetric_difference_all, and coverage_union_all can now reduce over multiple axes. The default changed from the first axis (0) to all axes (None) (#266)
    • Argument in line_interpolate_point and line_locate_point was renamed from normalize to normalized (#209)
    • Addition of grid_size parameter to specify fixed-precision grid for difference, intersection, symmetric_difference, union, and union_all operations for GEOS >= 3.9 (#276)

    Added GEOS functions

    • Release the GIL for is_geometry(), is_missing(), and is_valid_input() (#207)
    • Addition of a is_ccw() function for GEOS >= 3.7 (#201)
    • Addition of a minimum_clearance function for GEOS >= 3.6.0 (#223)
    • Addition of a offset_curve function (#229)
    • Addition of a relate_pattern function (#245)
    • Addition of a clip_by_rect function (#273)
    • Addition of a reverse function for GEOS >= 3.7 (#254)
    • Addition of get_precision to get precision of a geometry and set_precision to set the precision of a geometry (may round and reduce coordinates) (#257)

    Bug fixes

    • Fixed internal GEOS error code detection for get_dimensions and get_srid (#218)
    • Limited the length of geometry repr to 80 characters (#189)
    • Fixed error handling in line_locate_point for incorrect geometry types, now actually requiring line and point geometries (#216)
    • Addition of get_parts function to get individual parts of an array of multipart geometries (#197)
    • Ensure that python setup.py clean removes all previously Cythonized and compiled files (#239)
    • Handle GEOS beta versions (#262)

    Acknowledgments

    Thanks to everyone who contributed to this release! People with a "+" by their names contributed a patch for the first time.

    • Brendan Ward
    • Casper van der Wel
    • Joris Van den Bossche
    • Mike Taves
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.9.tar.gz(87.65 KB)
  • 0.8(Sep 6, 2020)

    Highlights of this release

    • Handle multi geometries in boundary (#188)
    • Handle empty points in to_wkb by conversion to POINT (nan, nan) (#179)
    • Prevent segfault in to_wkt (and repr) with empty points in multipoints (#171)
    • Fixed bug in multilinestrings(), it now accepts linearrings again (#168)
    • Release the GIL to allow for multithreading in functions that do not create geometries (#144) and in the STRtree query_bulk() method (#174)
    • Addition of a frechet_distance() function for GEOS >= 3.7 (#144)
    • Addition of coverage_union() and coverage_union_all() functions for GEOS >= 3.8 (#142)
    • Fixed segfaults when adding empty geometries to the STRtree (#147)
    • Addition of include_z=True keyword in the get_coordinates() function to get 3D coordinates (#178)
    • Addition of a build_area() function for GEOS >= 3.8 (#141)
    • Addition of a normalize() function (#136)
    • Addition of a make_valid() function for GEOS >= 3.8 (#107)
    • Addition of a get_z() function for GEOS >= 3.7 (#175)
    • Addition of a relate() function (#186)
    • The get_coordinate_dimensions() function was renamed to get_coordinate_dimension() for consistency with GEOS (#176)
    • Addition of covers, covered_by, contains_properly predicates to STRtree query and query_bulk (#157)

    Acknowledgments

    Thanks to everyone who contributed to this release! People with a "+" by their names contributed a patch for the first time.

    • Brendan Ward
    • Casper van der Wel
    • Joris Van den Bossche
    • Krishna Chaitanya +
    • Martin Fleischmann +
    • Tom Clancy +
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.8.tar.gz(72.77 KB)
  • 0.7(Mar 18, 2020)

    Highlights of this release

    • STRtree improvements for spatial indexing:
      • Directly include predicate evaluation in STRtree.query() (#87)
      • Query multiple input geometries (spatial join style) with STRtree.query_bulk (#108)
    • Addition of a total_bounds() function (#107)
    • Geometries are now hashable, and can be compared with == or != (#102)
    • Fixed bug in create_collections() with wrong types (#86)
    • Fixed a reference counting bug in STRtree (#97, #100)
    • Start of a benchmarking suite using ASV (#96)
    • This is the first release that will provide wheels!

    Acknowledgments

    Thanks to everyone who contributed to this release! People with a "+" by their names contributed a patch for the first time.

    • Brendan Ward +
    • Casper van der Wel
    • Joris Van den Bossche
    • Mike Taves +
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.7.tar.gz(58.03 KB)
  • 0.6(Jan 31, 2020)

    Highlights of this release:

    • Addition of the STRtree class for spatial indexing (#58)
    • Addition of a bounds function (#69)
    • A new from_shapely function to convert Shapely geometries to pygeos.Geometry (#61)
    • Reintroduction of the shared_paths function (#77)
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.6.tar.gz(55.03 KB)
  • 0.5(Oct 25, 2019)

    Highlights of this release:

    • Moved to the pygeos GitHub organization.
    • Addition of functionality to get and transform all coordinates (eg for reprojections or affine transformations) [#44]
    • Ufuncs for converting to and from the WKT and WKB formats [#45]
    • equals_exact has been added [PR #57]
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.5.tar.gz(48.51 KB)
  • 0.4(Sep 16, 2019)

    This is a major release of PyGEOS and the first one with actual release notes. Most important features of this release are:

    • buffer and haussdorff_distance were completed [#15]
    • voronoi_polygons and delaunay_triangles have been added [#17]
    • The PyGEOS documentation is now mostly complete and available on http://pygeos.readthedocs.io .
    • The concepts of "empty" and "missing" geometries have been separated. The pygeos.Empty and pygeos.NaG objects has been removed. Empty geometries are handled the same as normal geometries. Missing geometries are denoted by None and are handled by every pygeos function. NaN values cannot be used anymore to denote missing geometries. [PR #36]
    • Added pygeos.__version__ and pygeos.geos_version. [PR #43]
    Source code(tar.gz)
    Source code(zip)
    pygeos-0.4.tar.gz(41.92 KB)
Constraint-based geometry sketcher for blender

Geometry Sketcher Constraint-based sketcher addon for Blender that allows to create precise 2d shapes by defining a set of geometric constraints like

null 1.7k Jan 2, 2023
WIP: extracting Geometry utilities from datacube-core

odc.geo This is still work in progress. This repository contains geometry related code extracted from Open Datacube. For details and motivation see OD

Open Data Cube 34 Jan 9, 2023
Advanced raster and geometry manipulations

buzzard In a nutshell, the buzzard library provides powerful abstractions to manipulate together images and geometries that come from different kind o

Earthcube Lab 30 Jun 20, 2022
pure-Python (Numpy optional) 3D coordinate conversions for geospace ecef enu eci

Python 3-D coordinate conversions Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. API similar to

Geospace code 292 Dec 29, 2022
Read images to numpy arrays

mahotas-imread: Read Image Files IO with images and numpy arrays. Mahotas-imread is a simple module with a small number of functions: imread Reads an

Luis Pedro Coelho 67 Jan 7, 2023
pure-Python (Numpy optional) 3D coordinate conversions for geospace ecef enu eci

Python 3-D coordinate conversions Pure Python (no prerequistes beyond Python itself) 3-D geographic coordinate conversions and geodesy. API similar to

Geospace code 292 Dec 29, 2022
Implementation of Trajectory classes and functions built on top of GeoPandas

MovingPandas MovingPandas implements a Trajectory class and corresponding methods based on GeoPandas. Visit movingpandas.org for details! You can run

Anita Graser 897 Jan 1, 2023
Composable transformations of Python+NumPy programsComposable transformations of Python+NumPy programs

Chex Chex is a library of utilities for helping to write reliable JAX code. This includes utils to help: Instrument your code (e.g. assertions) Debug

DeepMind 506 Jan 8, 2023
MLP-Numpy - A simple modular implementation of Multi Layer Perceptron in pure Numpy.

MLP-Numpy A simple modular implementation of Multi Layer Perceptron in pure Numpy. I used the Iris dataset from scikit-learn library for the experimen

Soroush Omranpour 1 Jan 1, 2022
PyNIF3D is an open-source PyTorch-based library for research on neural implicit functions (NIF)-based 3D geometry representation.

PyNIF3D is an open-source PyTorch-based library for research on neural implicit functions (NIF)-based 3D geometry representation. It aims to accelerate research by providing a modular design that allows for easy extension and combination of NIF-related components, as well as readily available paper implementations and dataset loaders.

Preferred Networks, Inc. 96 Nov 28, 2022
A collection of utility functions to prototype geometry processing research in python

gpytoolbox This repo is a work in progress and contains general utility functions I have needed to code while trying to work on geometry process resea

Silvia Sellán 73 Jan 6, 2023
A scikit-learn compatible neural network library that wraps PyTorch

A scikit-learn compatible neural network library that wraps PyTorch. Resources Documentation Source Code Examples To see more elaborate examples, look

null 4.9k Dec 31, 2022
Wraps any WSGI application and makes it easy to send test requests to that application, without starting up an HTTP server.

WebTest This wraps any WSGI application and makes it easy to send test requests to that application, without starting up an HTTP server. This provides

Pylons Project 325 Dec 30, 2022
A scikit-learn compatible neural network library that wraps PyTorch

A scikit-learn compatible neural network library that wraps PyTorch. Resources Documentation Source Code Examples To see more elaborate examples, look

null 3.8k Feb 13, 2021
A scikit-learn compatible neural network library that wraps PyTorch

A scikit-learn compatible neural network library that wraps PyTorch. Resources Documentation Source Code Examples To see more elaborate examples, look

null 4.9k Jan 3, 2023
CLIPImageClassifier wraps clip image model from transformers

CLIPImageClassifier CLIPImageClassifier wraps clip image model from transformers. CLIPImageClassifier is initialized with the argument classes, these

Jina AI 6 Sep 12, 2022
TM1py is a Python package that wraps the TM1 REST API in a simple to use library.

By wrapping the IBM Planning Analytics (TM1) REST API in a concise Python framework, TM1py facilitates Python developments for TM1. Interacting with T

Cubewise CODE 147 Dec 15, 2022
An executor that wraps 3D mesh models and encodes 3D content documents to d-dimension vector.

3D Mesh Encoder An Executor that receives Documents containing point sets data in its blob attribute, with shape (N, 3) and encodes it to embeddings o

Jina AI 11 Dec 14, 2022
A Python script that wraps the gitleaks tool to enable scanning of multiple repositories in parallel

mpgitleaks A Python script that wraps the gitleaks tool to enable scanning of multiple repositories in parallel. The motivation behind writing this sc

Emilio Reyes 7 Dec 29, 2022
EasyRequests is a minimalistic HTTP-Request Library that wraps aiohttp and asyncio in a small package that allows for sequential, parallel or even single requests

EasyRequests EasyRequests is a minimalistic HTTP-Request Library that wraps aiohttp and asyncio in a small package that allows for sequential, paralle

Avi 1 Jan 27, 2022