Subject: [bug#48614] [PATCH 3/3] gnu: Add python-cartopy.

From: Vinicius Monego <[email-masked]>
Date: Wed, 26 May 2021 18:00:10 +0000

Hi Björn,

Sending a v2 with your suggestions.

> Or is there a reason to have it in python-xyz.scm? WDYT?

My personal preference is to have Python modules in python-* files,
similar to how python-crypto and python-web are separate from crypto
and web. But I'm not strong on this. Also, creating python-geo for this
set would seem more controversial.

As a side note, there's a problem in python-shapely that it can't find
libgeos and that will break cartopy at runtime :(

Vinicius
From affdc0b3d8bca886b12c31934b75e35017f57315 Mon Sep 17 00:00:00 2001
From: Vinicius Monego <[email-masked]>
Date: Mon, 17 May 2021 23:55:58 -0300
Subject: [PATCH v2 1/3] gnu: Add python-pyshp.

* gnu/packages/geo.scm (python-pyshp): New variable.
---
 gnu/packages/geo.scm | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index c4bdb6aca0..b0d0b64a2d 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -15,6 +15,7 @@
 ;;; Copyright © 2020 Christopher Baines <[email-masked]>
 ;;; Copyright © 2020, 2021 Felix Gruber <[email-masked]>
 ;;; Copyright © 2021 Sharlatan Hellseher <[email-masked]>
+;;; Copyright © 2021 Vinicius Monego <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -881,6 +882,37 @@ utilities for data translation and processing.")
      `(("gdal" ,gdal)))
     (synopsis "GDAL (Geospatial Data Abstraction Library) python bindings")))
 
+(define-public python-pyshp
+  (package
+    (name "python-pyshp")
+    (version "2.1.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/GeospatialPython/pyshp")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0jsraqzq82pw19wvx84x7w5cs8agr44a9b5y0jjw540wim4xa73r"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               ;; This is the only test file.
+               (invoke "python" "-m" "pytest" "test_shapefile.py")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (home-page "https://github.com/GeospatialPython/pyshp")
+    (synopsis "Read/write support for ESRI Shapefile format")
+    (description
+      "The Python Shapefile Library (PyShp) reads and writes ESRI Shapefiles.")
+    (license license:expat)))
+
 (define-public postgis
   (package
     (name "postgis")
-- 
2.31.1

From 01a07f91704e96c2b1614683cf6cfdef6f6ee31e Mon Sep 17 00:00:00 2001
From: Vinicius Monego <[email-masked]>
Date: Tue, 25 May 2021 14:28:20 -0300
Subject: [PATCH v2 2/3] gnu: Add python-pykdtree.

* gnu/packages/python-xyz.scm (python-pykdtree): New variable.
---
 gnu/packages/python-xyz.scm | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 25f986e9b6..736ae40cc9 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -5809,6 +5809,28 @@ operators such as union, intersection, and difference.")
 (define-public python2-pysnptools
   (package-with-python2 python-pysnptools))
 
+(define-public python-pykdtree
+  (package
+    (name "python-pykdtree")
+    (version "1.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pykdtree" version))
+       (sha256
+        (base32 "0p8n2ljdacfixkiw092974dmhy4s1c0h032ii1z9kwi9h5h5rgmy"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (propagated-inputs
+     `(("python-numpy" ,python-numpy)))
+    (home-page "https://github.com/storpipfugl/pykdtree")
+    (synopsis "Fast kd-tree implementation with OpenMP-enabled queries")
+    (description
+     "@code{pykdtree} is a kd-tree implementation for fast nearest neighbour
+search in Python.")
+    (license license:lgpl3+)))
+
 (define-public python-wurlitzer
   (package
     (name "python-wurlitzer")
-- 
2.31.1

From f19c7e5644181549ff8129477c7ee5ecdb009666 Mon Sep 17 00:00:00 2001
From: Vinicius Monego <[email-masked]>
Date: Tue, 18 May 2021 20:54:14 -0300
Subject: [PATCH v2 3/3] gnu: Add python-cartopy.

* gnu/packages/geo.scm (python-cartopy): New variable.
---
 gnu/packages/geo.scm | 56 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index b0d0b64a2d..1fdaf911f0 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -913,6 +913,62 @@ utilities for data translation and processing.")
       "The Python Shapefile Library (PyShp) reads and writes ESRI Shapefiles.")
     (license license:expat)))
 
+(define-public python-cartopy
+  (package
+    (name "python-cartopy")
+    ;; This is a post-release fix that adds build_ext to setup.py.
+    (version "0.19.0.post1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Cartopy" version))
+       (sha256
+        (base32 "0xnm8z3as3hriivdfd26s6vn5b63gb46x6vxw6gh1mwfm5rlg2sb"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+             (when tests?
+               (add-installed-pythonpath inputs outputs)
+               (invoke "python" "-m" "pytest" "--pyargs" "cartopy"
+                       ;; These tests require online data.
+                       "-m" "not natural_earth and not network"
+                       ;; This one too but it's not marked as such.
+                       "-k" "not test_gridliner_labels_bbox_style")))))))
+    (propagated-inputs
+     `(("python-matplotlib" ,python-matplotlib)
+       ("python-numpy" ,python-numpy)
+       ("python-pykdtree" ,python-pykdtree)
+       ("python-pyshp" ,python-pyshp)
+       ("python-scipy" ,python-scipy)
+       ("python-shapely" ,python-shapely)))
+    (inputs
+     `(("geos" ,geos)
+       ("proj" ,proj)))
+    (native-inputs
+     `(("python-cython" ,python-cython)
+       ("python-flufl-lock" ,python-flufl-lock)
+       ("python-pytest" ,python-pytest)))
+    (home-page "https://scitools.org.uk/cartopy/docs/latest/")
+    (synopsis "Cartographic library for visualisation")
+    (description
+     "Cartopy is a Python package designed to make drawing maps for data
+analysis and visualisation easy.
+
+It features:
+
+@itemize
+@item object oriented projection definitions
+@item point, line, polygon and image transformations between projections
+@item integration to expose advanced mapping in Matplotlib with a simple and
+intuitive interface
+@item powerful vector data handling by integrating shapefile reading with
+Shapely capabilities
+@end itemize")
+    (license license:lgpl3+)))
+
 (define-public postgis
   (package
     (name "postgis")
-- 
2.31.1