1# Copyright Cartopy Contributors
2#
3# This file is part of Cartopy and is released under the LGPL license.
4# See COPYING and COPYING.LESSER in the root of the repository for full
5# licensing details.
6
7import cartopy.io.shapereader as shpreader
8import cartopy.crs as ccrs
9import shapely.geometry as sgeom
10
11
12class Oceans:
13    def prepare(self):
14        shpfilename = shpreader.natural_earth(
15            resolution='50m', category='physical', name='ocean')
16        reader = shpreader.Reader(shpfilename)
17        oceans = reader.geometries()
18        oceans = sgeom.MultiPolygon(oceans)
19        self.geoms = oceans
20
21
22OCEAN = Oceans()
23
24
25def use_setup(setup_fn):
26    # A decorator to create a decorator...
27    def decorator(test_func):
28        # This decorator attaches the setup function to the test.
29        test_func.setup = setup_fn
30        return test_func
31    return decorator
32
33
34@use_setup(OCEAN.prepare)
35def time_ocean_pc():
36    ccrs.PlateCarree().project_geometry(OCEAN.geoms)
37
38
39@use_setup(OCEAN.prepare)
40def time_ocean_np():
41    ccrs.NorthPolarStereo().project_geometry(OCEAN.geoms)
42
43
44@use_setup(OCEAN.prepare)
45def time_ocean_rob():
46    ccrs.Robinson().project_geometry(OCEAN.geoms)
47
48
49@use_setup(OCEAN.prepare)
50def time_ocean_igh():
51    ccrs.InterruptedGoodeHomolosine().project_geometry(OCEAN.geoms)
52