ssb-sgis 0.3.8__py3-none-any.whl → 0.3.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
sgis/parallel/parallel.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import functools
2
+ import inspect
2
3
  import itertools
3
4
  import multiprocessing
4
5
  from collections.abc import Callable, Collection, Iterable
@@ -27,6 +28,13 @@ except ImportError:
27
28
  pass
28
29
 
29
30
 
31
+ def turn_args_into_kwargs(func: Callable, args: tuple, index_start: int):
32
+ if not isinstance(args, tuple):
33
+ raise TypeError("args should be a tuple (it should not be unpacked with *)")
34
+ argnames = inspect.getfullargspec(func).args[index_start:]
35
+ return {name: value for value, name in zip(args, argnames, strict=False)}
36
+
37
+
30
38
  class Parallel:
31
39
  """Run functions in parallell.
32
40
 
@@ -52,9 +60,13 @@ class Parallel:
52
60
  offered through joblib's Parallel class.
53
61
  context: Start method for the processes. Defaults to 'spawn'
54
62
  to avoid frozen processes.
63
+ maxtasksperchild: Number of tasks a worker process can complete before
64
+ it will exit and be replaced with a fresh worker process, to enable
65
+ unused resources to be freed. Defaults to 10 to
55
66
  **kwargs: Keyword arguments to be passed to either
56
67
  multiprocessing.Pool or joblib.Parallel, depending
57
- on the backend.
68
+ on the backend. Not to be confused with the kwargs passed to functions in
69
+ the map and starmap methods.
58
70
  """
59
71
 
60
72
  def __init__(
@@ -62,9 +74,11 @@ class Parallel:
62
74
  processes: int,
63
75
  backend: str = "multiprocessing",
64
76
  context: str = "spawn",
77
+ maxtasksperchild: int = 10,
65
78
  **kwargs,
66
79
  ):
67
80
  self.processes = int(processes)
81
+ self.maxtasksperchild = maxtasksperchild
68
82
  self.backend = backend
69
83
  self.context = context
70
84
  self.kwargs = kwargs
@@ -75,14 +89,17 @@ class Parallel:
75
89
  self,
76
90
  func: Callable,
77
91
  iterable: Collection,
92
+ args: tuple | None = None,
78
93
  kwargs: dict | None = None,
79
94
  ) -> list[Any]:
80
- """Run functions in parallel with items of an iterable as first arguemnt.
95
+ """Run functions in parallel with items of an iterable as 0th arguemnt.
81
96
 
82
97
  Args:
83
98
  func: Function to be run.
84
99
  iterable: An iterable where each item will be passed to func as
85
- first positional argument.
100
+ 0th positional argument.
101
+ Args: Positional arguments passed to 'func' starting from the 1st argument.
102
+ The 0th argument will be reserved for the values of 'iterable'.
86
103
  kwargs: Keyword arguments passed to 'func'. Must be passed as a dict,
87
104
  not unpacked into separate keyword arguments.
88
105
 
@@ -102,14 +119,21 @@ class Parallel:
102
119
  >>> results
103
120
  [2, 4, 6]
104
121
 
105
- With kwargs.
122
+ With args and kwargs.
106
123
 
107
124
  >>> iterable = [1, 2, 3]
108
125
  >>> def x2(x, plus, minus):
109
126
  ... return x * 2 + plus - minus
110
127
  >>> p = sg.Parallel(4, backend="loky")
111
- >>> results = p.map(x2, iterable, kwargs=dict(plus=2, minus=1))
112
- >>> results
128
+ ...
129
+ >>> # these three are the same
130
+ >>> results1 = p.map(x2, iterable, args=(2, 1))
131
+ >>> results2 = p.map(x2, iterable, kwargs=dict(plus=2, minus=1))
132
+ >>> results3 = p.map(x2, iterable, args=(2,), kwargs=dict(minus=1))
133
+ >>> assert results1 == results2 == results3
134
+ ...
135
+ >>> results1
136
+ [3, 5, 7]
113
137
 
114
138
  If in Jupyter the function should be defined in another module.
115
139
  And if using the multiprocessing backend, the code should be
@@ -123,9 +147,15 @@ class Parallel:
123
147
  [2, 4, 6]
124
148
  """
125
149
 
150
+ if args:
151
+ # start at index 1, meaning the 0th argument (the iterable) is still available
152
+ args_as_kwargs = turn_args_into_kwargs(func, args, index_start=1)
153
+ else:
154
+ args_as_kwargs = {}
155
+
126
156
  self.validate_execution(func)
127
157
 
128
- kwargs = self._validate_kwargs(kwargs)
158
+ kwargs = self._validate_kwargs(kwargs) | args_as_kwargs
129
159
 
130
160
  func_with_kwargs = functools.partial(func, **kwargs)
131
161
 
@@ -142,7 +172,7 @@ class Parallel:
142
172
 
143
173
  if self.backend == "multiprocessing":
144
174
  with multiprocessing.get_context(self.context).Pool(
145
- processes, **self.kwargs
175
+ processes, maxtasksperchild=self.maxtasksperchild, **self.kwargs
146
176
  ) as pool:
147
177
  return pool.map(func_with_kwargs, iterable)
148
178
 
@@ -155,6 +185,7 @@ class Parallel:
155
185
  self,
156
186
  func: Callable,
157
187
  iterable: Collection[Iterable[Any]],
188
+ args: tuple | None = None,
158
189
  kwargs: dict | None = None,
159
190
  ) -> list[Any]:
160
191
  """Run functions in parallel where items of the iterable are unpacked.
@@ -166,6 +197,8 @@ class Parallel:
166
197
  func: Function to be run.
167
198
  iterable: An iterable of iterables, where each item will be
168
199
  unpacked as positional argument to the function.
200
+ Args: Positional arguments passed to 'func' starting at argument position
201
+ n + 1, where n is the length of the iterables inside the iterable.
169
202
  kwargs: Keyword arguments passed to 'func'. Must be passed as a dict,
170
203
  not unpacked into separate keyword arguments.
171
204
 
@@ -185,6 +218,17 @@ class Parallel:
185
218
  >>> results
186
219
  [3, 5, 7]
187
220
 
221
+ With args and kwargs. Since the iterables inside 'iterable' are of length 2,
222
+ 'args' will start at argument number three, e.i. 'c'.
223
+
224
+ >>> iterable = [(1, 2), (2, 3), (3, 4)]
225
+ >>> def add(a, b, c, *, d):
226
+ ... return a + b + c + d
227
+ >>> p = sg.Parallel(3, backend="loky")
228
+ >>> results = p.starmap(add, iterable, args=(1,), kwargs={"d": 0.1})
229
+ >>> results
230
+ [4.1, 6.1, 8.1]
231
+
188
232
  If in Jupyter the function should be defined in another module.
189
233
  And if using the multiprocessing backend, the code should be
190
234
  guarded by if __name__ == "__main__".
@@ -197,9 +241,18 @@ class Parallel:
197
241
  [3, 5, 7]
198
242
 
199
243
  """
244
+ if args:
245
+ # starting the count at the length of the iterables inside the iterables
246
+ iterable = list(iterable)
247
+ args_as_kwargs = turn_args_into_kwargs(
248
+ func, args, index_start=len(iterable[0])
249
+ )
250
+ else:
251
+ args_as_kwargs = {}
252
+
200
253
  self.validate_execution(func)
201
254
 
202
- kwargs = self._validate_kwargs(kwargs)
255
+ kwargs = self._validate_kwargs(kwargs) | args_as_kwargs
203
256
 
204
257
  func_with_kwargs = functools.partial(func, **kwargs)
205
258
 
@@ -216,7 +269,7 @@ class Parallel:
216
269
 
217
270
  if self.backend == "multiprocessing":
218
271
  with multiprocessing.get_context(self.context).Pool(
219
- processes, **self.kwargs
272
+ processes, maxtasksperchild=self.maxtasksperchild, **self.kwargs
220
273
  ) as pool:
221
274
  return pool.starmap(func_with_kwargs, iterable)
222
275
 
sgis/raster/raster.py CHANGED
@@ -2,10 +2,10 @@ import numbers
2
2
  import re
3
3
  import uuid
4
4
  import warnings
5
+ from collections.abc import Callable
5
6
  from copy import copy, deepcopy
6
7
  from json import loads
7
8
  from pathlib import Path
8
- from collections.abc import Callable
9
9
 
10
10
  import geopandas as gpd
11
11
  import matplotlib.pyplot as plt
@@ -73,18 +73,18 @@ class Raster(RasterBase):
73
73
 
74
74
  Read tif file.
75
75
 
76
- >>> path = 'https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/dtm_10.tif'
76
+ >>> path = 'https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/raster/dtm_10.tif'
77
77
  >>> raster = sg.Raster.from_path(path)
78
78
  >>> raster
79
- Raster(shape=(1, 201, 201), res=10, crs=ETRS89 / UTM zone 33N (N-E), path=https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/dtm_10.tif)
79
+ Raster(shape=(1, 201, 201), res=10, crs=ETRS89 / UTM zone 33N (N-E), path=https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/raster/dtm_10.tif)
80
80
 
81
81
  Load the entire image as an numpy ndarray.
82
82
  Operations are done in place to save memory.
83
83
  The array is stored in the array attribute.
84
84
 
85
- >>> r.load()
86
- >>> r.array[r.array < 0] = 0
87
- >>> r.array
85
+ >>> raster.load()
86
+ >>> raster.array[raster.array < 0] = 0
87
+ >>> raster.array
88
88
  [[[ 0. 0. 0. ... 158.4 155.6 152.6]
89
89
  [ 0. 0. 0. ... 158. 154.8 151.9]
90
90
  [ 0. 0. 0. ... 158.5 155.1 152.3]
@@ -95,41 +95,43 @@ class Raster(RasterBase):
95
95
 
96
96
  Save as tif file.
97
97
 
98
- >>> r.write("path/to/file.tif")
98
+ >>> raster.write("path/to/file.tif")
99
99
 
100
100
  Convert to GeoDataFrame.
101
101
 
102
- >>> gdf = r.to_gdf(column="elevation")
102
+ >>> gdf = raster.to_gdf(column="elevation")
103
103
  >>> gdf
104
- elevation geometry band
105
- 0 1.9 POLYGON ((-25665.000 6676005.000, -25665.000 6... 1
106
- 1 11.0 POLYGON ((-25655.000 6676005.000, -25655.000 6... 1
107
- 2 18.1 POLYGON ((-25645.000 6676005.000, -25645.000 6... 1
108
- 3 15.8 POLYGON ((-25635.000 6676005.000, -25635.000 6... 1
109
- 4 11.6 POLYGON ((-25625.000 6676005.000, -25625.000 6... 1
110
- ... ... ... ...
111
- 25096 13.4 POLYGON ((-24935.000 6674005.000, -24935.000 6... 1
112
- 25097 9.4 POLYGON ((-24925.000 6674005.000, -24925.000 6... 1
113
- 25098 5.3 POLYGON ((-24915.000 6674005.000, -24915.000 6... 1
114
- 25099 2.3 POLYGON ((-24905.000 6674005.000, -24905.000 6... 1
115
- 25100 0.1 POLYGON ((-24895.000 6674005.000, -24895.000 6... 1
104
+ elevation geometry band_index
105
+ 0 1.9 POLYGON ((-25665.000 6676005.000, -25665.000 6... 1
106
+ 1 11.0 POLYGON ((-25655.000 6676005.000, -25655.000 6... 1
107
+ 2 18.1 POLYGON ((-25645.000 6676005.000, -25645.000 6... 1
108
+ 3 15.8 POLYGON ((-25635.000 6676005.000, -25635.000 6... 1
109
+ 4 11.6 POLYGON ((-25625.000 6676005.000, -25625.000 6... 1
110
+ ... ... ... ...
111
+ 25096 13.4 POLYGON ((-24935.000 6674005.000, -24935.000 6... 1
112
+ 25097 9.4 POLYGON ((-24925.000 6674005.000, -24925.000 6... 1
113
+ 25098 5.3 POLYGON ((-24915.000 6674005.000, -24915.000 6... 1
114
+ 25099 2.3 POLYGON ((-24905.000 6674005.000, -24905.000 6... 1
115
+ 25100 0.1 POLYGON ((-24895.000 6674005.000, -24895.000 6... 1
116
116
 
117
117
  The image can also be clipped by a mask while loading.
118
118
 
119
- >>> small_circle = gdf.centroid.buffer(50)
120
- >>> raster = sg.Raster.from_path(path).clip(small_circle, crop=True)
121
- Raster(shape=(1, 11, 11), res=10, crs=ETRS89 / UTM zone 33N (N-E), path=https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/dtm_10.tif)
119
+ >>> small_circle = raster_as_polygons.unary_union.centroid.buffer(50)
120
+ >>> raster = sg.Raster.from_path(path).clip(small_circle)
121
+ Raster(shape=(1, 10, 10), res=10, crs=ETRS89 / UTM zone 33N (N-E), path=https://media.githubusercontent.com/media/statisticsnorway/ssb-sgis/main/tests/testdata/raster/dtm_10.tif)
122
122
 
123
123
  Construct raster from GeoDataFrame.
124
124
  The arrays are put on top of each other in a 3 dimensional array.
125
125
 
126
- >>> r2 = r.from_gdf(gdf, columns=["elevation", "elevation_x2"], res=20)
127
- >>> r2
128
- Raster(shape=(2, 100, 100), res=20, crs=ETRS89 / UTM zone 33N (N-E), path=None)
126
+ >>> raster_as_polygons["elevation_x2"] = raster_as_polygons["elevation"] * 2
127
+ >>> raster_from_polygons = sg.Raster.from_gdf(raster_as_polygons, columns=["elevation", "elevation_x2"], res=20)
128
+ >>> raster_from_polygons
129
+ Raster(shape=(2, 100, 100), res=20, raster_id=-260056673995, crs=ETRS89 / UTM zone 33N (N-E), path=None)
129
130
 
130
131
  Calculate zonal statistics for each polygon in 'gdf'.
131
132
 
132
- >>> zonal = r.zonal(gdf, aggfunc=["sum", np.mean])
133
+ >>> zonal = raster.zonal(raster_as_polygons, aggfunc=["sum", np.mean])
134
+ >>> zonal
133
135
  sum mean geometry
134
136
  0 1.9 1.9 POLYGON ((-25665.000 6676005.000, -25665.000 6...
135
137
  1 11.0 11.0 POLYGON ((-25655.000 6676005.000, -25655.000 6...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ssb-sgis
3
- Version: 0.3.8
3
+ Version: 0.3.9
4
4
  Summary: GIS functions used at Statistics Norway.
5
5
  Home-page: https://github.com/statisticsnorway/ssb-sgis
6
6
  License: MIT
@@ -12,6 +12,7 @@ Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
15
16
  Classifier: Topic :: Scientific/Engineering :: GIS
16
17
  Requires-Dist: branca (>=0.6.0)
17
18
  Requires-Dist: folium (>=0.14.0)
@@ -44,6 +45,8 @@ Description-Content-Type: text/markdown
44
45
 
45
46
  GIS Python tools used in [Statistics Norway](https://www.ssb.no/en).
46
47
 
48
+ See documentation [here](https://statisticsnorway.github.io/ssb-sgis/reference/index.html).
49
+
47
50
  [![PyPI](https://img.shields.io/pypi/v/ssb-sgis.svg)][pypi_]
48
51
  [![Status](https://img.shields.io/pypi/status/ssb-sgis.svg)][status]
49
52
  [![Python Version](https://img.shields.io/pypi/pyversions/ssb-sgis)][python version]
@@ -0,0 +1,59 @@
1
+ sgis/__init__.py,sha256=L27d20iJn8LBWwmE7raQy8DWKr8b6eAuTdj22QAVIww,3601
2
+ sgis/exceptions.py,sha256=ztMp4sB9xxPvwj2IEsO5kOaB4FmHuU_7-M2pZ7qaxTs,576
3
+ sgis/geopandas_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ sgis/geopandas_tools/bounds.py,sha256=7REImJZQq35BmvznCcih92mzrVYmX43pIznA8PTeU6Y,17616
5
+ sgis/geopandas_tools/buffer_dissolve_explode.py,sha256=5y6tZlp2-4uYHylD2BBqY95BVRi5-y6H3RIf-jGUCvc,12166
6
+ sgis/geopandas_tools/centerlines.py,sha256=96jZpORHm-As4MoT8ImHPCoq2UDyBhKKw98a84Qes-A,14142
7
+ sgis/geopandas_tools/cleaning.py,sha256=QMG4m3itM0GSwR3QsSOhD_eHhzC-yVFa7JuS85aDAdo,11548
8
+ sgis/geopandas_tools/conversion.py,sha256=xogsnMDOrlMj2fS1mYEpYLOXvDT6UC993Dd_yfnHIqw,17242
9
+ sgis/geopandas_tools/duplicates.py,sha256=GuplKTQ7lRz0jtzWyTGVcSDieX6i8Aswt9Kh_W_DR4g,10422
10
+ sgis/geopandas_tools/general.py,sha256=M0Axq4GDRuxuAlZjZTNF2DQVp7dN9uquI6LZ-1q_bYw,18649
11
+ sgis/geopandas_tools/geocoding.py,sha256=n47aFQMm4yX1MsPnTM4dFjwegCA1ZmGUDj1uyu7OJV4,691
12
+ sgis/geopandas_tools/geometry_types.py,sha256=9kv-CZFDp98QJykhkY1ZTT7gaH3s1-Q3FcozEFk4mvk,7147
13
+ sgis/geopandas_tools/neighbors.py,sha256=7jtO1ZWv71Gj0sI5OdbrfqhVqAHiHkkzxvBUZEn8M80,15047
14
+ sgis/geopandas_tools/overlay.py,sha256=iLI92P_ZN7OIWkSmFLzoJPs_RkiTMdM4zWwjwhu2hFQ,14693
15
+ sgis/geopandas_tools/point_operations.py,sha256=Cpa02sf_W8nI6FvzJGO9jNM_ZOwIz8nDhKxNdQTqom4,6897
16
+ sgis/geopandas_tools/polygon_operations.py,sha256=VIZaHvxL-ucV5xaXLbDdZP9JMOM1qFWQ_91_KP24N2A,35737
17
+ sgis/geopandas_tools/polygons_as_rings.py,sha256=4NzdEuGD9BXKuXxcDEMt-qIoxmdq-nuwKqfjxdW3fJA,10276
18
+ sgis/geopandas_tools/sfilter.py,sha256=LVTWRPbY2TNngubSTmdNpZjdP-E9CbMKU1oDrBYnhYQ,8513
19
+ sgis/helpers.py,sha256=JG6Px77gNH7p3GqCyGQlu1z0wuUcxdho4VtfCfcr1-s,6066
20
+ sgis/io/_is_dapla.py,sha256=TZhVjrSfNmpNSRbt2C7L8OHXWnlmJ2euNX8IUY7xAjI,459
21
+ sgis/io/dapla_functions.py,sha256=16-1WzKqa2l3hWL2uJOLHnhOLdm_iIPkH6rN44SO0ek,7622
22
+ sgis/io/opener.py,sha256=Y5CzWFCJz_XweBTEHVysLOKhSEEXdrPsBk_7a63XmBg,538
23
+ sgis/io/read_parquet.py,sha256=GSW2NDy4-XosbamPEzB1xhWxFAPHuGEJZglfQ-V6DzY,3774
24
+ sgis/io/write_municipality_data.py,sha256=-EDUP6TcQCVEUT8XVwYVcqhYkzoltu9PpbjTTf8-afE,6457
25
+ sgis/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ sgis/maps/examine.py,sha256=UwGOuVnmO0nmnQm-7TSJQQs1AT1YW7RVA7w-kh56O7c,8073
27
+ sgis/maps/explore.py,sha256=_YhRF6PiwQcfmVrYZr0Lk4rKKq_2Dz3Cv7Txlk-C4kQ,27857
28
+ sgis/maps/httpserver.py,sha256=z9D66SizO9GIZKaSLIqpFWnwOZZh-kiuVPjFt3WZr8o,1902
29
+ sgis/maps/legend.py,sha256=buHo_UwzPYHIs7kS6H_xETekIR8m9R4PACXfTTMYQWE,20680
30
+ sgis/maps/map.py,sha256=Ba0xp_DJhT9QYTIfwsMphEyrd2oL_ReDEAt-s6tcfm0,22806
31
+ sgis/maps/maps.py,sha256=p8ksh-pkUxGtDwkVKq8zVghGokXLapqbencMi1YGlOg,18197
32
+ sgis/maps/thematicmap.py,sha256=6aVPciftW1YjxjRVQDipxayl3aI3tHpYiZ3HfpnSavc,14132
33
+ sgis/maps/tilesources.py,sha256=gGqNJ4d0PkIP72lZe2c5OMJsxJHz2DVsczw7QSjn96M,2733
34
+ sgis/networkanalysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ sgis/networkanalysis/_get_route.py,sha256=qWnMabeyIdCKOlnFYNYQUrnl_iBdSSequtsbWAbPIM4,6308
36
+ sgis/networkanalysis/_od_cost_matrix.py,sha256=6plN-cpGib8RL7_LhMxo09RJOMR2mjj7M02T4NgLnCA,2151
37
+ sgis/networkanalysis/_points.py,sha256=aQzn_E_-N-hbtoWMxOzm3PFiwO3O0_AUk9-EOoay_24,4206
38
+ sgis/networkanalysis/_service_area.py,sha256=7bOf1I6yzDJMQxYFCtjQw9lpW7YNStVbX8z-QS8Nyec,5336
39
+ sgis/networkanalysis/closing_network_holes.py,sha256=L7g5Z7qr9oH8JaJ8oqDNrkg2bwAcgh0tuXZCB_1MfGg,13329
40
+ sgis/networkanalysis/cutting_lines.py,sha256=SiEJXIBMJvBBsHgT_FwV5h97i0Z2TFNwSh1dMS93KQQ,14267
41
+ sgis/networkanalysis/directednetwork.py,sha256=2l_qBH7wyEd3HMBfMG_0i_xyHUFKbyB1vTDRYI3olnA,11217
42
+ sgis/networkanalysis/finding_isolated_networks.py,sha256=IZWWotvnvxSgK5lXtByiynL13aWJRPl1HhNpyf0ddSU,3370
43
+ sgis/networkanalysis/network.py,sha256=UvPPIEfZCjoLBIyHFuSsWXYarku2l3CHrkhX3iiGkl4,7686
44
+ sgis/networkanalysis/networkanalysis.py,sha256=raz5T5Va5xvnLJC7tNkPx57ZUIdm1aEeqMMpOZPGDqQ,67276
45
+ sgis/networkanalysis/networkanalysisrules.py,sha256=UMSo5-a8OF-0yzDgjxNcU0TpMjOpVrqrejgHikMRsXU,12607
46
+ sgis/networkanalysis/nodes.py,sha256=p87X0JRrxL7XGEDWe4K6meWqKqZMD2f_jM6zptuBRRQ,6844
47
+ sgis/networkanalysis/traveling_salesman.py,sha256=UBa4ZPwcAgUeqgYt-Uvr_2g3BKsOvNfTfvKMGjoRuTY,5558
48
+ sgis/parallel/parallel.py,sha256=sE6SPKb0-Wo9trn769N9kLc_WOYWxUSl7lAdSQidumk,16050
49
+ sgis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ sgis/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ sgis/raster/base.py,sha256=FOXdHl6yT9ge-Ofk4UreeN6LUBL6inNIExGGD1OHF0s,5385
52
+ sgis/raster/elevationraster.py,sha256=yrE6dg0NgJp0KmrJqdygF74tKbnnwgLQ4rfwBELCYSY,2867
53
+ sgis/raster/raster.py,sha256=ZwtHpG86xwy83tz3Xhi72ZGuAX0_hIo6FAL_8j4VvYo,40862
54
+ sgis/raster/sentinel.py,sha256=0x1HwebRRTCExmsMAXwnct23eMXDBj_KHz8CoP0NOxI,1025
55
+ sgis/raster/zonal.py,sha256=P2bJ8Uvnrc4U1JbyBsKEhjGNaU4FOvRNmxOOF9EzM34,3249
56
+ ssb_sgis-0.3.9.dist-info/LICENSE,sha256=lL2h0dNKGTKAE0CjTy62SDbRennVD1xPgM5LzGqhKeo,1074
57
+ ssb_sgis-0.3.9.dist-info/METADATA,sha256=2ovVu6h0d07YqCoDVaPVvXzA2xEBico1uOzhuGMDs8I,9163
58
+ ssb_sgis-0.3.9.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
59
+ ssb_sgis-0.3.9.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.7.0
2
+ Generator: poetry-core 1.8.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
File without changes
@@ -1,58 +0,0 @@
1
- sgis/__init__.py,sha256=tvuaGwGVI201QWHb5YWF8QlZ3yVMwatieIRkDWjK6ow,3458
2
- sgis/exceptions.py,sha256=ztMp4sB9xxPvwj2IEsO5kOaB4FmHuU_7-M2pZ7qaxTs,576
3
- sgis/geopandas_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- sgis/geopandas_tools/bounds.py,sha256=7REImJZQq35BmvznCcih92mzrVYmX43pIznA8PTeU6Y,17616
5
- sgis/geopandas_tools/buffer_dissolve_explode.py,sha256=8cyI6Hdc6n2k0wNKN4l5wHJ1k_UUjbNy-aMberXh9Kw,11997
6
- sgis/geopandas_tools/centerlines.py,sha256=9pejh7K34MfANTGxt2Lk4Ras1SJChWS20VuyZCPZ1aA,11762
7
- sgis/geopandas_tools/conversion.py,sha256=SiTJPdS7_Nm41431XJns3oQoFOnXw3hcgYXd4uF0jcI,17082
8
- sgis/geopandas_tools/duplicates.py,sha256=HO-AeZzG95hJvoNVlx7G8IvzB_jfoJpnXDhbVqKbfhU,9741
9
- sgis/geopandas_tools/general.py,sha256=TD9zY3Ogn0GbBQyUHlYddt8P8aL1_nY0wuaCDbf80mI,18181
10
- sgis/geopandas_tools/geocoding.py,sha256=n47aFQMm4yX1MsPnTM4dFjwegCA1ZmGUDj1uyu7OJV4,691
11
- sgis/geopandas_tools/geometry_types.py,sha256=9kv-CZFDp98QJykhkY1ZTT7gaH3s1-Q3FcozEFk4mvk,7147
12
- sgis/geopandas_tools/neighbors.py,sha256=NfxWGA_itbs0vaqhCefqyhEKsS4uf-f6TZERPN9KJrM,14735
13
- sgis/geopandas_tools/overlay.py,sha256=x-kQ3V_SEzcivYHUYIYAviheD637jXaK-7dqeEwyQao,14423
14
- sgis/geopandas_tools/point_operations.py,sha256=Cpa02sf_W8nI6FvzJGO9jNM_ZOwIz8nDhKxNdQTqom4,6897
15
- sgis/geopandas_tools/polygon_operations.py,sha256=OxKuMqlvpHmFX5fRB9anx_8szK8-UuJEoWPyUyDN_Y0,28679
16
- sgis/geopandas_tools/polygons_as_rings.py,sha256=Om0VJZVr1Kafzd8YeEIoiLhUCRpzAwNaJZ0vyajJ72I,8219
17
- sgis/geopandas_tools/sfilter.py,sha256=kN7Pdrm6-xFknrnH5YbS4sTBT7EEIjcR5ts7EE4sbms,8434
18
- sgis/geopandas_tools/snap_polygons.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- sgis/helpers.py,sha256=vcJCYIe35keVQdNqYjGz57f06a2Qs61YC3LbBceDTfE,5580
20
- sgis/io/_is_dapla.py,sha256=TZhVjrSfNmpNSRbt2C7L8OHXWnlmJ2euNX8IUY7xAjI,459
21
- sgis/io/dapla_functions.py,sha256=N9JX4tFVcDmqQj5rwkM7B5zXiETgBsl1nTWGCwP7NTE,6970
22
- sgis/io/opener.py,sha256=Y5CzWFCJz_XweBTEHVysLOKhSEEXdrPsBk_7a63XmBg,538
23
- sgis/io/read_parquet.py,sha256=GSW2NDy4-XosbamPEzB1xhWxFAPHuGEJZglfQ-V6DzY,3774
24
- sgis/io/write_municipality_data.py,sha256=zn_AFLHB6mrAgyWEGVuDvRe2e9C2rQfaSvV164DzT4g,6228
25
- sgis/maps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- sgis/maps/examine.py,sha256=fLLA7NfHql-mj_45oQkyPSqS0Gw1O_25v1tlreUn65c,7996
27
- sgis/maps/explore.py,sha256=wsYRw5Qro1Ok9zMAl2zs95AHcE4kIC25y075nfWvWDE,25518
28
- sgis/maps/httpserver.py,sha256=z9D66SizO9GIZKaSLIqpFWnwOZZh-kiuVPjFt3WZr8o,1902
29
- sgis/maps/legend.py,sha256=buHo_UwzPYHIs7kS6H_xETekIR8m9R4PACXfTTMYQWE,20680
30
- sgis/maps/map.py,sha256=CAFnnqHt2IxdygNiTZNOPqLm6iIbXErhMCFw8wDDvUQ,21690
31
- sgis/maps/maps.py,sha256=aWfn3ssqpy-7c0uFd7R4bcjCMw5Klvnp7Jz_zcH2Bds,18424
32
- sgis/maps/thematicmap.py,sha256=6aVPciftW1YjxjRVQDipxayl3aI3tHpYiZ3HfpnSavc,14132
33
- sgis/networkanalysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- sgis/networkanalysis/_get_route.py,sha256=qWnMabeyIdCKOlnFYNYQUrnl_iBdSSequtsbWAbPIM4,6308
35
- sgis/networkanalysis/_od_cost_matrix.py,sha256=6plN-cpGib8RL7_LhMxo09RJOMR2mjj7M02T4NgLnCA,2151
36
- sgis/networkanalysis/_points.py,sha256=aQzn_E_-N-hbtoWMxOzm3PFiwO3O0_AUk9-EOoay_24,4206
37
- sgis/networkanalysis/_service_area.py,sha256=7bOf1I6yzDJMQxYFCtjQw9lpW7YNStVbX8z-QS8Nyec,5336
38
- sgis/networkanalysis/closing_network_holes.py,sha256=u-aKPd1p7u3AmnI2ryCksWAP6BHRqZdu80J8TxVQ9sU,12413
39
- sgis/networkanalysis/cutting_lines.py,sha256=BX4GOuF63UqMxz8yXWZUz7-VBUkKRI_GuVnhHsOwezo,14264
40
- sgis/networkanalysis/directednetwork.py,sha256=2l_qBH7wyEd3HMBfMG_0i_xyHUFKbyB1vTDRYI3olnA,11217
41
- sgis/networkanalysis/finding_isolated_networks.py,sha256=IZWWotvnvxSgK5lXtByiynL13aWJRPl1HhNpyf0ddSU,3370
42
- sgis/networkanalysis/network.py,sha256=UvPPIEfZCjoLBIyHFuSsWXYarku2l3CHrkhX3iiGkl4,7686
43
- sgis/networkanalysis/networkanalysis.py,sha256=raz5T5Va5xvnLJC7tNkPx57ZUIdm1aEeqMMpOZPGDqQ,67276
44
- sgis/networkanalysis/networkanalysisrules.py,sha256=UMSo5-a8OF-0yzDgjxNcU0TpMjOpVrqrejgHikMRsXU,12607
45
- sgis/networkanalysis/nodes.py,sha256=YVN9N3YJFoO3Zu8sF0sP4vynSNYzy1YN9sBdH1vM86M,6854
46
- sgis/networkanalysis/traveling_salesman.py,sha256=5m_Lf5En99Q8hnvAZAvN7RWZjBP1Tzdaz97DhZNkCZ0,5426
47
- sgis/parallel/parallel.py,sha256=1oHitvYaRZuGh-3F-yd_j9fMOUTNyDZoP47ovqJUqJU,13520
48
- sgis/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- sgis/raster/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- sgis/raster/base.py,sha256=FOXdHl6yT9ge-Ofk4UreeN6LUBL6inNIExGGD1OHF0s,5385
51
- sgis/raster/elevationraster.py,sha256=yrE6dg0NgJp0KmrJqdygF74tKbnnwgLQ4rfwBELCYSY,2867
52
- sgis/raster/raster.py,sha256=vWwLwr2lg5j0GBfU0g9KZoIqOPd5klGWfHxGHExZbpg,40524
53
- sgis/raster/sentinel.py,sha256=0x1HwebRRTCExmsMAXwnct23eMXDBj_KHz8CoP0NOxI,1025
54
- sgis/raster/zonal.py,sha256=P2bJ8Uvnrc4U1JbyBsKEhjGNaU4FOvRNmxOOF9EzM34,3249
55
- ssb_sgis-0.3.8.dist-info/LICENSE,sha256=lL2h0dNKGTKAE0CjTy62SDbRennVD1xPgM5LzGqhKeo,1074
56
- ssb_sgis-0.3.8.dist-info/METADATA,sha256=fTzpYpf1gNt-IvwlhzN5Y3FfoxiodwECUZLznI_mBE8,9019
57
- ssb_sgis-0.3.8.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
58
- ssb_sgis-0.3.8.dist-info/RECORD,,