Files
geopandas/benchmarks/geom_methods.py
T

105 lines
3.7 KiB
Python

import random
import numpy as np
from geopandas import GeoSeries
from shapely.geometry import Point, LineString, Polygon
def with_attributes(**attrs):
def decorator(func):
for key, value in attrs.items():
setattr(func, key, value)
return func
return decorator
class Bench:
def setup(self, *args):
self.points = GeoSeries([Point(i, i) for i in range(100000)])
triangles = GeoSeries([Polygon([(random.random(), random.random())
for _ in range(3)])
for _ in range(1000)])
triangles2 = triangles.copy().iloc[np.random.choice(1000, 1000)]
triangles3 = GeoSeries([Polygon([(random.random(), random.random())
for _ in range(3)])
for _ in range(10000)])
triangle = Polygon([(random.random(), random.random())
for _ in range(3)])
self.triangles, self.triangles2 = triangles, triangles2
self.triangles_big = triangles3
self.triangle = triangle
@with_attributes(param_names=['op'],
params=[('contains', 'crosses', 'disjoint', 'intersects',
'overlaps', 'touches', 'within', 'geom_equals',
'geom_almost_equals', 'geom_equals_exact')])
def time_binary_predicate(self, op):
getattr(self.triangles, op)(self.triangle)
@with_attributes(param_names=['op'],
params=[('contains', 'crosses', 'disjoint', 'intersects',
'overlaps', 'touches', 'within', 'geom_equals',
'geom_almost_equals')]) # 'geom_equals_exact')])
def time_binary_predicate_vector(self, op):
getattr(self.triangles, op)(self.triangles2)
@with_attributes(param_names=['op'],
params=[('distance')])
def time_binary_float(self, op):
getattr(self.triangles, op)(self.triangle)
@with_attributes(param_names=['op'],
params=[('distance')])
def time_binary_float_vector(self, op):
getattr(self.triangles, op)(self.triangles2)
@with_attributes(param_names=['op'],
params=[('difference', 'symmetric_difference', 'union',
'intersection')])
def time_binary_geo(self, op):
getattr(self.triangles, op)(self.triangle)
@with_attributes(param_names=['op'],
params=[('difference', 'symmetric_difference', 'union',
'intersection')])
def time_binary_geo_vector(self, op):
getattr(self.triangles, op)(self.triangles2)
@with_attributes(param_names=['op'],
params=[('is_valid', 'is_empty', 'is_simple', 'is_ring')])
def time_unary_predicate(self, op):
getattr(self.triangles, op)
@with_attributes(param_names=['op'],
params=[('area', 'length')])
def time_unary_float(self, op):
getattr(self.triangles_big, op)
@with_attributes(param_names=['op'],
params=[('boundary', 'centroid', 'convex_hull',
'envelope', 'exterior', 'interiors')])
def time_unary_geo(self, op):
getattr(self.triangles, op)
def time_unary_geo_representative_point(self, *args):
getattr(self.triangles, 'representative_point')()
def time_geom_type(self, *args):
self.triangles_big.geom_type
def time_bounds(self, *args):
self.triangles.bounds
def time_unary_union(self, *args):
self.triangles.unary_union
def time_buffer(self, *args):
self.points.buffer(2)
# TODO
# project, interpolate, translate, rotate, scale, skew, explode
# cx indexer