File: test_performance.py

package info (click to toggle)
haversine 2.9.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 204 kB
  • sloc: python: 658; makefile: 26; sh: 5
file content (55 lines) | stat: -rw-r--r-- 1,713 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from .  import haversine_baseline as baseline
import haversine as current
import numpy as np
import pytest
from timeit import timeit

def assert_performance(func, number):
    # Interleave measurements and compare fastest current to median baseline.
    # All in an attempt to avoid spurious errors caused by fluctuating load on
    # the runner.
    t_baseline, t_current = [], []
    for repeat in range(5):
        t_baseline.append(timeit(lambda: func(baseline),  number=number))
        t_current.append(timeit(lambda: func(current),  number=number))

    perf_ratio = np.min(t_current) / np.median(t_baseline)
    assert perf_ratio <= 1.1


@pytest.mark.parametrize(
    "check", [False, True]
)
@pytest.mark.parametrize(
    "normalize", [False, True]
)
def test_haversine(check, normalize):
    if check == normalize == True:
        pytest.skip()
    assert_performance(lambda m: m.haversine((0,1), (2,3), check=check, normalize=normalize),
                       number=100000)


@pytest.mark.parametrize(
    "check", [False, True]
)
@pytest.mark.parametrize(
    "normalize", [False, True]
)
def test_haversine_vector(check, normalize):
    if check == normalize == True:
        pytest.skip()
    arr = np.random.uniform(size=(1000, 2))
    assert_performance(lambda m: m.haversine_vector(arr, arr, check=check, normalize=normalize),
                       number=1000)


def test_inverse_haversine():
    assert_performance(lambda m: m.inverse_haversine((0,1), 2, 3),
                       number=100000)


def test_inverse_haversine_vector():
    arr = np.random.uniform(size=(1000, 2))
    assert_performance(lambda m: m.inverse_haversine_vector(arr, *arr.T),
                       number=1000)