[Git][debian-gis-team/python-pyproj][master] 16 commits: Update branch in gbp.conf & Vcs-Git URL.

Bas Couwenberg gitlab at salsa.debian.org
Mon May 4 04:50:45 BST 2020



Bas Couwenberg pushed to branch master at Debian GIS Project / python-pyproj


Commits:
08a16c9a by Bas Couwenberg at 2020-05-02T06:24:21+02:00
Update branch in gbp.conf & Vcs-Git URL.

- - - - -
ae794231 by Bas Couwenberg at 2020-05-02T06:24:43+02:00
New upstream version 2.6.1~rc0+ds
- - - - -
d722fc90 by Bas Couwenberg at 2020-05-02T06:24:45+02:00
Update upstream source from tag 'upstream/2.6.1_rc0+ds'

Update to upstream version '2.6.1~rc0+ds'
with Debian dir a1eefbbc00dd404a52c2ae3e2cc28e9d173b56a8
- - - - -
0554aff8 by Bas Couwenberg at 2020-05-02T06:25:05+02:00
New upstream release candidate.

- - - - -
b6f95328 by Bas Couwenberg at 2020-05-02T06:25:55+02:00
Set distribution to experimental.

- - - - -
4529572d by Bas Couwenberg at 2020-05-02T16:14:21+02:00
Add Breaks for rdeps with autopkgtest failures.

- - - - -
f40914e6 by Bas Couwenberg at 2020-05-03T06:45:02+02:00
New upstream version 2.6.1~rc1+ds
- - - - -
93292042 by Bas Couwenberg at 2020-05-03T06:45:04+02:00
Update upstream source from tag 'upstream/2.6.1_rc1+ds'

Update to upstream version '2.6.1~rc1+ds'
with Debian dir feced5cf834cdbc6abb203eaf6962d41074dbb0b
- - - - -
74d55e6f by Bas Couwenberg at 2020-05-03T06:45:19+02:00
New upstream release candidate.

- - - - -
c9deed50 by Bas Couwenberg at 2020-05-03T06:48:02+02:00
Set distribution to experimental.

- - - - -
32078f1e by Bas Couwenberg at 2020-05-04T05:38:13+02:00
Revert "Update branch in gbp.conf & Vcs-Git URL."

This reverts commit 08a16c9a8368a80a23552f36ba6d17cd5403470a.

- - - - -
98590657 by Bas Couwenberg at 2020-05-04T05:38:56+02:00
Drop Breaks for pyresample, fixed upstream.

Revert "Add Breaks for rdeps with autopkgtest failures."

This reverts commit 4529572d3aac6a448f5b0f2630894bd8f1cde57b.

- - - - -
9c79292c by Bas Couwenberg at 2020-05-04T05:42:10+02:00
New upstream version 2.6.1+ds
- - - - -
480b053c by Bas Couwenberg at 2020-05-04T05:42:12+02:00
Update upstream source from tag 'upstream/2.6.1+ds'

Update to upstream version '2.6.1+ds'
with Debian dir 1097e8412f52c4acb3ef229b0bf0ac9953fb8bac
- - - - -
b223cc81 by Bas Couwenberg at 2020-05-04T05:42:24+02:00
New upstream release.

- - - - -
ed976e19 by Bas Couwenberg at 2020-05-04T05:42:54+02:00
Move from experimental to unstable.

- - - - -


30 changed files:

- .all-contributorsrc
- .isort.cfg
- .travis.yml
- README.md
- debian/changelog
- pyproj/__init__.py
- pyproj/__main__.py
- pyproj/_list.pyx
- pyproj/_proj.pyx
- pyproj/_show_versions.py
- pyproj/_transformer.pyx
- pyproj/crs/_cf1x8.py
- pyproj/crs/coordinate_operation.py
- pyproj/crs/crs.py
- pyproj/proj.py
- pyproj/transformer.py
- + test/__init__.py
- test/conftest.py
- test/crs/test_crs.py
- test/crs/test_crs_cf.py
- test/crs/test_crs_coordinate_operation.py
- test/crs/test_crs_maker.py
- test/test_awips221.py
- test/test_datum.py
- test/test_datum_shift.py
- test/test_doctest_wrapper.py
- test/test_list.py
- test/test_proj.py
- test/test_transform.py
- test/test_transformer.py


Changes:

=====================================
.all-contributorsrc
=====================================
@@ -24,7 +24,8 @@
         "review",
         "question",
         "maintenance",
-        "infra"
+        "infra",
+        "bug"
       ]
     },
     {
@@ -41,7 +42,8 @@
         "infra",
         "ideas",
         "review",
-        "question"
+        "question",
+        "bug"
       ]
     },
     {
@@ -56,7 +58,8 @@
         "maintenance",
         "infra",
         "review",
-        "question"
+        "question",
+        "bug"
       ]
     },
     {
@@ -69,7 +72,9 @@
         "code",
         "ideas",
         "review",
-        "question"
+        "question",
+        "bug",
+        "test"
       ]
     },
     {
@@ -290,7 +295,8 @@
       "contributions": [
         "platform",
         "question",
-        "bug"
+        "bug",
+        "test"
       ]
     },
     {
@@ -342,6 +348,18 @@
         "ideas",
         "test"
       ]
+    },
+    {
+      "login": "mraspaud",
+      "name": "Martin Raspaud",
+      "avatar_url": "https://avatars1.githubusercontent.com/u/167802?v=4",
+      "profile": "https://github.com/mraspaud",
+      "contributions": [
+        "bug",
+        "code",
+        "test",
+        "ideas"
+      ]
     }
   ],
   "contributorsPerLine": 7


=====================================
.isort.cfg
=====================================
@@ -1,5 +1,6 @@
 [settings]
 line_length=88
 multi_line_output=3
-known_third_party=mock,numpy,pkg_resources,pytest,setuptools,test
+known_third_party=mock,numpy,pkg_resources,pytest,setuptools
+known_first_party=pyproj,test
 include_trailing_comma=true


=====================================
.travis.yml
=====================================
@@ -28,6 +28,12 @@ matrix:
         - PYTHON=3.6.8
     - python: 3.5
     - python: 3.6
+    - python: 3.6
+      env:
+        - PROJ_NETWORK=ON
+    - python: 3.6
+      env:
+        - PROJSYNC=ALL
     - python: 3.6
       env:
         - PROJSOURCE=6.2.0
@@ -40,6 +46,16 @@ matrix:
     - python: 3.6
       env:
         - PROJSOURCE=6.3.1
+    - python: 3.6
+      env:
+        - PROJSOURCE=6.3.2
+    - python: 3.6
+      env:
+        - PROJSOURCE=7.0.1
+    - python: 3.6
+      env:
+        - PROJSOURCE=7.0.1
+        - PROJ_NETWORK=ON
     - python: 3.7
       env:
         - DOC=true
@@ -108,6 +124,10 @@ before_install:
       ci/travis/proj-dl-and-compile "$PROJSOURCE"
     fi
   - export PROJ_LIB=$PROJ_DIR/share/proj
+  - |
+    if [ "$PROJSYNC" = "ALL" ]; then
+        $PROJ_DIR/bin/projsync --quiet --bbox -175,0,-50,85
+    fi
 
 install:
   # coverage report requires a local install


=====================================
README.md
=====================================
@@ -37,10 +37,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 <!-- markdownlint-disable -->
 <table>
   <tr>
-    <td align="center"><a href="https://github.com/jswhit"><img src="https://avatars2.githubusercontent.com/u/579593?v=4" width="100px;" alt="Jeff Whitaker"/><br /><sub><b>Jeff Whitaker</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=jswhit" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jswhit" title="Tests">⚠️</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jswhit" title="Code">💻</a> <a href="#example-jswhit" title="Examples">💡</a> <a href="#ideas-jswhit" title="Ideas, Planning, & Feedback">🤔</a> <a href="#review-jswhit" title="Reviewed Pull Requests">👀</a> <a href="#question-jswhit" title="Answering Questions">💬</a> <a href="#maintenance-jswhit" title="Maintenance">🚧</a> <a href="#infra-jswhit" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
-    <td align="center"><a href="https://github.com/snowman2"><img src="https://avatars3.githubusercontent.com/u/8699967?v=4" width="100px;" alt="Alan D. Snow"/><br /><sub><b>Alan D. Snow</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=snowman2" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=snowman2" title="Tests">⚠️</a> <a href="https://github.com/pyproj4/pyproj/commits?author=snowman2" title="Code">💻</a> <a href="#example-snowman2" title="Examples">💡</a> <a href="#maintenance-snowman2" title="Maintenance">🚧</a> <a href="#infra-snowman2" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-snowman2" title="Ideas, Planning, & Feedback">🤔</a> <a href="#review-snowman2" title="Reviewed Pull Requests">👀</a> <a href="#question-snowman2" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://github.com/micahcochran"><img src="https://avatars0.githubusercontent.com/u/7433104?v=4" width="100px;" alt="Micah Cochran"/><br /><sub><b>Micah Cochran</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=micahcochran" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=micahcochran" title="Tests">⚠️</a> <a href="https://github.com/pyproj4/pyproj/commits?author=micahcochran" title="Code">💻</a> <a href="#maintenance-micahcochran" title="Maintenance">🚧</a> <a href="#infra-micahcochran" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#review-micahcochran" title="Reviewed Pull Requests">👀</a> <a href="#question-micahcochran" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://jorisvandenbossche.github.io/"><img src="https://avatars2.githubusercontent.com/u/1020496?v=4" width="100px;" alt="Joris Van den Bossche"/><br /><sub><b>Joris Van den Bossche</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=jorisvandenbossche" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jorisvandenbossche" title="Code">💻</a> <a href="#ideas-jorisvandenbossche" title="Ideas, Planning, & Feedback">🤔</a> <a href="#review-jorisvandenbossche" title="Reviewed Pull Requests">👀</a> <a href="#question-jorisvandenbossche" title="Answering Questions">💬</a></td>
+    <td align="center"><a href="https://github.com/jswhit"><img src="https://avatars2.githubusercontent.com/u/579593?v=4" width="100px;" alt="Jeff Whitaker"/><br /><sub><b>Jeff Whitaker</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=jswhit" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jswhit" title="Tests">⚠️</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jswhit" title="Code">💻</a> <a href="#example-jswhit" title="Examples">💡</a> <a href="#ideas-jswhit" title="Ideas, Planning, & Feedback">🤔</a> <a href="#review-jswhit" title="Reviewed Pull Requests">👀</a> <a href="#question-jswhit" title="Answering Questions">💬</a> <a href="#maintenance-jswhit" title="Maintenance">🚧</a> <a href="#infra-jswhit" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/pyproj4/pyproj/issues?q=author%3Ajswhit" title="Bug reports">🐛</a></td>
+    <td align="center"><a href="https://github.com/snowman2"><img src="https://avatars3.githubusercontent.com/u/8699967?v=4" width="100px;" alt="Alan D. Snow"/><br /><sub><b>Alan D. Snow</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=snowman2" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=snowman2" title="Tests">⚠️</a> <a href="https://github.com/pyproj4/pyproj/commits?author=snowman2" title="Code">💻</a> <a href="#example-snowman2" title="Examples">💡</a> <a href="#maintenance-snowman2" title="Maintenance">🚧</a> <a href="#infra-snowman2" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-snowman2" title="Ideas, Planning, & Feedback">🤔</a> <a href="#review-snowman2" title="Reviewed Pull Requests">👀</a> <a href="#question-snowman2" title="Answering Questions">💬</a> <a href="https://github.com/pyproj4/pyproj/issues?q=author%3Asnowman2" title="Bug reports">🐛</a></td>
+    <td align="center"><a href="https://github.com/micahcochran"><img src="https://avatars0.githubusercontent.com/u/7433104?v=4" width="100px;" alt="Micah Cochran"/><br /><sub><b>Micah Cochran</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=micahcochran" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=micahcochran" title="Tests">⚠️</a> <a href="https://github.com/pyproj4/pyproj/commits?author=micahcochran" title="Code">💻</a> <a href="#maintenance-micahcochran" title="Maintenance">🚧</a> <a href="#infra-micahcochran" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#review-micahcochran" title="Reviewed Pull Requests">👀</a> <a href="#question-micahcochran" title="Answering Questions">💬</a> <a href="https://github.com/pyproj4/pyproj/issues?q=author%3Amicahcochran" title="Bug reports">🐛</a></td>
+    <td align="center"><a href="https://jorisvandenbossche.github.io/"><img src="https://avatars2.githubusercontent.com/u/1020496?v=4" width="100px;" alt="Joris Van den Bossche"/><br /><sub><b>Joris Van den Bossche</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=jorisvandenbossche" title="Documentation">📖</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jorisvandenbossche" title="Code">💻</a> <a href="#ideas-jorisvandenbossche" title="Ideas, Planning, & Feedback">🤔</a> <a href="#review-jorisvandenbossche" title="Reviewed Pull Requests">👀</a> <a href="#question-jorisvandenbossche" title="Answering Questions">💬</a> <a href="https://github.com/pyproj4/pyproj/issues?q=author%3Ajorisvandenbossche" title="Bug reports">🐛</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jorisvandenbossche" title="Tests">⚠️</a></td>
     <td align="center"><a href="https://github.com/cjmayo"><img src="https://avatars1.githubusercontent.com/u/921089?v=4" width="100px;" alt="Chris Mayo"/><br /><sub><b>Chris Mayo</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=cjmayo" title="Tests">⚠️</a></td>
     <td align="center"><a href="https://www.petrel.org"><img src="https://avatars1.githubusercontent.com/u/2298266?v=4" width="100px;" alt="Charles Karney"/><br /><sub><b>Charles Karney</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=cffk" title="Code">💻</a> <a href="https://github.com/pyproj4/pyproj/commits?author=cffk" title="Tests">⚠️</a></td>
     <td align="center"><a href="http://www.justaprogrammer.net/profile/justin"><img src="https://avatars3.githubusercontent.com/u/146930?v=4" width="100px;" alt="Justin Dearing"/><br /><sub><b>Justin Dearing</b></sub></a><br /><a href="#infra-zippy1981" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
@@ -69,7 +69,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
     <td align="center"><a href="https://github.com/ChrisBarker-NOAA"><img src="https://avatars2.githubusercontent.com/u/916576?v=4" width="100px;" alt="Christopher H. Barker"/><br /><sub><b>Christopher H. Barker</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=ChrisBarker-NOAA" title="Code">💻</a></td>
     <td align="center"><a href="https://evers.dev/"><img src="https://avatars3.githubusercontent.com/u/13132571?v=4" width="100px;" alt="Kristian Evers"/><br /><sub><b>Kristian Evers</b></sub></a><br /><a href="#question-kbevers" title="Answering Questions">💬</a> <a href="#ideas-kbevers" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/pyproj4/pyproj/commits?author=kbevers" title="Documentation">📖</a></td>
     <td align="center"><a href="http://www.spatialys.com/en/about/"><img src="https://avatars2.githubusercontent.com/u/1192433?v=4" width="100px;" alt="Even Rouault"/><br /><sub><b>Even Rouault</b></sub></a><br /><a href="#question-rouault" title="Answering Questions">💬</a></td>
-    <td align="center"><a href="https://github.com/cgohlke"><img src="https://avatars3.githubusercontent.com/u/483428?v=4" width="100px;" alt="Christoph Gohlke"/><br /><sub><b>Christoph Gohlke</b></sub></a><br /><a href="#platform-cgohlke" title="Packaging/porting to new platform">📦</a> <a href="#question-cgohlke" title="Answering Questions">💬</a> <a href="https://github.com/pyproj4/pyproj/issues?q=author%3Acgohlke" title="Bug reports">🐛</a></td>
+    <td align="center"><a href="https://github.com/cgohlke"><img src="https://avatars3.githubusercontent.com/u/483428?v=4" width="100px;" alt="Christoph Gohlke"/><br /><sub><b>Christoph Gohlke</b></sub></a><br /><a href="#platform-cgohlke" title="Packaging/porting to new platform">📦</a> <a href="#question-cgohlke" title="Answering Questions">💬</a> <a href="https://github.com/pyproj4/pyproj/issues?q=author%3Acgohlke" title="Bug reports">🐛</a> <a href="https://github.com/pyproj4/pyproj/commits?author=cgohlke" title="Tests">⚠️</a></td>
     <td align="center"><a href="https://github.com/chrrrisw"><img src="https://avatars0.githubusercontent.com/u/5555320?v=4" width="100px;" alt="Chris Willoughby"/><br /><sub><b>Chris Willoughby</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=chrrrisw" title="Code">💻</a></td>
   </tr>
   <tr>
@@ -77,6 +77,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
     <td align="center"><a href="https://github.com/edpop"><img src="https://avatars3.githubusercontent.com/u/13479292?v=4" width="100px;" alt="Eduard Popov"/><br /><sub><b>Eduard Popov</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/commits?author=edpop" title="Documentation">📖</a></td>
     <td align="center"><a href="http://www.personal.psu.edu/jar339"><img src="https://avatars2.githubusercontent.com/u/7864460?v=4" width="100px;" alt="Joe Ranalli"/><br /><sub><b>Joe Ranalli</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/issues?q=author%3Ajranalli" title="Bug reports">🐛</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jranalli" title="Code">💻</a> <a href="https://github.com/pyproj4/pyproj/commits?author=jranalli" title="Tests">⚠️</a></td>
     <td align="center"><a href="https://github.com/gberardinelli"><img src="https://avatars0.githubusercontent.com/u/13799588?v=4" width="100px;" alt="Greg Berardinelli"/><br /><sub><b>Greg Berardinelli</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/issues?q=author%3Agberardinelli" title="Bug reports">🐛</a> <a href="https://github.com/pyproj4/pyproj/commits?author=gberardinelli" title="Code">💻</a> <a href="#ideas-gberardinelli" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/pyproj4/pyproj/commits?author=gberardinelli" title="Tests">⚠️</a></td>
+    <td align="center"><a href="https://github.com/mraspaud"><img src="https://avatars1.githubusercontent.com/u/167802?v=4" width="100px;" alt="Martin Raspaud"/><br /><sub><b>Martin Raspaud</b></sub></a><br /><a href="https://github.com/pyproj4/pyproj/issues?q=author%3Amraspaud" title="Bug reports">🐛</a> <a href="https://github.com/pyproj4/pyproj/commits?author=mraspaud" title="Code">💻</a> <a href="https://github.com/pyproj4/pyproj/commits?author=mraspaud" title="Tests">⚠️</a> <a href="#ideas-mraspaud" title="Ideas, Planning, & Feedback">🤔</a></td>
   </tr>
 </table>
 


=====================================
debian/changelog
=====================================
@@ -1,3 +1,24 @@
+python-pyproj (2.6.1+ds-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Drop Breaks for pyresample, fixed upstream.
+  * Move from experimental to unstable.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Mon, 04 May 2020 05:42:40 +0200
+
+python-pyproj (2.6.1~rc1+ds-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate.
+  * Add Breaks for rdeps with autopkgtest failures.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Sun, 03 May 2020 06:47:48 +0200
+
+python-pyproj (2.6.1~rc0+ds-1~exp1) experimental; urgency=medium
+
+  * New upstream release candidate.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Sat, 02 May 2020 06:25:38 +0200
+
 python-pyproj (2.6.0+ds-1) unstable; urgency=medium
 
   * New upstream release.


=====================================
pyproj/__init__.py
=====================================
@@ -28,7 +28,7 @@ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTIO
 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 """
-__version__ = "2.6.0"
+__version__ = "2.6.1"
 __all__ = [
     "Proj",
     "Geod",
@@ -45,7 +45,6 @@ __all__ = [
     "get_units_map",
     "show_versions",
 ]
-
 import warnings
 
 from pyproj import _datadir
@@ -65,6 +64,9 @@ from pyproj.geod import Geod, geodesic_version_str, pj_ellps  # noqa: F401
 from pyproj.proj import Proj, pj_list, proj_version_str  # noqa: F401
 from pyproj.transformer import Transformer, itransform, transform  # noqa: F401
 
+__proj_version__ = proj_version_str
+
+
 try:
     _datadir.pyproj_global_context_initialize()
 except DataDirError as err:


=====================================
pyproj/__main__.py
=====================================
@@ -7,7 +7,7 @@ e.g. python -m pyproj
 
 import argparse
 
-from pyproj import __version__, _show_versions, proj_version_str
+from pyproj import __proj_version__, __version__, _show_versions
 
 parser = argparse.ArgumentParser()
 parser.add_argument(
@@ -20,5 +20,5 @@ args = parser.parse_args()
 if args.verbose:
     _show_versions.show_versions()
 else:
-    print("pyproj version: {} [PROJ version: {}]".format(__version__, proj_version_str))
+    print("pyproj version: {} [PROJ version: {}]".format(__version__, __proj_version__))
     parser.print_help()


=====================================
pyproj/_list.pyx
=====================================
@@ -2,6 +2,7 @@ include "proj.pxi"
 
 from collections import namedtuple
 from enum import IntEnum
+import warnings
 
 from pyproj.compat import cstrencode, pystrdecode
 from pyproj.enums import PJType
@@ -74,6 +75,12 @@ def get_units_map():
     dict:
         Units supported by PROJ
     """
+    warnings.warn(
+        "The behavior of 'pyproj.get_units_map' is deprecated "
+        "and will change in version 3.0.0.",
+        DeprecationWarning,
+        stacklevel=2,
+    )
     cdef PJ_UNITS *proj_units = proj_list_units()
     cdef int iii = 0
     units_map = {}
@@ -95,6 +102,13 @@ def get_angular_units_map():
     dict:
         Angular units supported by PROJ
     """
+    warnings.warn(
+        "'pyproj.get_angular_units_map' is deprecated. "
+        "Angular units will be available "
+        "in 'pyproj.get_units_map' in version 3.0.0.",
+        DeprecationWarning,
+        stacklevel=2,
+    )
     cdef PJ_UNITS *proj_units = proj_list_angular_units()
     cdef int iii = 0
     units_map = {}


=====================================
pyproj/_proj.pyx
=====================================
@@ -258,7 +258,7 @@ cdef class _Proj:
         Equivalent to `proj -S` command line.
         """
         cdef PyBuffWriteManager lonbuff = PyBuffWriteManager(longitude)
-        cdef PyBuffWriteManager latbuff = PyBuffWriteManager(longitude)
+        cdef PyBuffWriteManager latbuff = PyBuffWriteManager(latitude)
 
         if not lonbuff.len or not (lonbuff.len == latbuff.len):
             raise ProjError('longitude and latitude must be same size')


=====================================
pyproj/_show_versions.py
=====================================
@@ -43,7 +43,7 @@ def _get_proj_info():
 
     blob = [
         ("pyproj", pyproj.__version__),
-        ("PROJ", pyproj.proj_version_str),
+        ("PROJ", pyproj.__proj_version__),
         ("data dir", data_dir),
     ]
 


=====================================
pyproj/_transformer.pyx
=====================================
@@ -424,8 +424,8 @@ cdef class _Transformer(Base):
             return
         if radians and self.is_pipeline:
             warnings.warn(
-                "radian input with pipelines is not supported and may result "
-                "in unexpected transformations."
+                "radian input with pipelines is not supported in pyproj 2. "
+                "support for raidans will be added in pyproj 3."
             )
 
         tmp_pj_direction = _PJ_DIRECTION_MAP[TransformDirection.create(direction)]


=====================================
pyproj/crs/_cf1x8.py
=====================================
@@ -53,9 +53,9 @@ def _horizontal_datum_from_params(cf_params):
     prime_meridian = None
     prime_meridian_name = cf_params.get("prime_meridian_name")
     try:
-        ellipsoid = CustomPrimeMeridian(
+        prime_meridian = CustomPrimeMeridian(
             name=prime_meridian_name or "undefined",
-            longitude=cf_params["prime_meridian_longitude"],
+            longitude=cf_params["longitude_of_prime_meridian"],
         )
     except KeyError:
         if prime_meridian_name:


=====================================
pyproj/crs/coordinate_operation.py
=====================================
@@ -1136,7 +1136,7 @@ class StereographicConversion(CoordinateOperation):
         """
         Parameters
         ----------
-        longitude_natural_origin: float, optional
+        latitude_natural_origin: float, optional
             Latitude of natural origin (lat_0). Defaults to 0.0.
         longitude_natural_origin: float, optional
             Longitude of natural origin (lon_0). Defaults to 0.0.


=====================================
pyproj/crs/crs.py
=====================================
@@ -44,9 +44,9 @@ def _prepare_from_dict(projparams: dict, allow_json: bool = True) -> str:
         if isinstance(value, (list, tuple)):
             value = ",".join([str(val) for val in value])
         # issue 183 (+ no_rot)
-        if value is None or value is True:
+        if value is None or str(value) == "True":
             pjargs.append("+{key}".format(key=key))
-        elif str(value) == str(False):
+        elif str(value) == "False":
             pass
         else:
             pjargs.append("+{key}={value}".format(key=key, value=value))
@@ -580,7 +580,6 @@ class CRS(_CRS):
             CF-1.8 version of the projection.
 
         """
-        unknown_names = ("unknown", "undefined")
         cf_dict = {"crs_wkt": self.to_wkt(wkt_version)}  # type: Dict[str, Any]
 
         # handle bound CRS
@@ -608,7 +607,7 @@ class CRS(_CRS):
             vert_json = self.to_json_dict()
             if "geoid_model" in vert_json:
                 cf_dict["geoid_name"] = vert_json["geoid_model"]["name"]
-            if self.datum and self.datum.name not in unknown_names:
+            if self.datum:
                 cf_dict["geopotential_datum_name"] = self.datum.name
             return cf_dict
 
@@ -619,15 +618,13 @@ class CRS(_CRS):
                 semi_minor_axis=self.ellipsoid.semi_minor_metre,
                 inverse_flattening=self.ellipsoid.inverse_flattening,
             )
-            if self.ellipsoid.name not in unknown_names:
-                cf_dict["reference_ellipsoid_name"] = self.ellipsoid.name
+            cf_dict["reference_ellipsoid_name"] = self.ellipsoid.name
         if self.prime_meridian:
             cf_dict["longitude_of_prime_meridian"] = self.prime_meridian.longitude
-            if self.prime_meridian.name not in unknown_names:
-                cf_dict["prime_meridian_name"] = self.prime_meridian.name
+            cf_dict["prime_meridian_name"] = self.prime_meridian.name
 
         # handle geographic CRS
-        if self.geodetic_crs and self.geodetic_crs.name not in unknown_names:
+        if self.geodetic_crs:
             cf_dict["geographic_crs_name"] = self.geodetic_crs.name
 
         if self.is_geographic:
@@ -637,20 +634,19 @@ class CRS(_CRS):
                         self.coordinate_operation.method_name.lower()
                     ](self.coordinate_operation)
                 )
-                if self.datum and self.datum.name not in unknown_names:
+                if self.datum:
                     cf_dict["horizontal_datum_name"] = self.datum.name
             else:
                 cf_dict["grid_mapping_name"] = "latitude_longitude"
             return cf_dict
 
         # handle projected CRS
-        if self.is_projected and self.datum and self.datum.name not in unknown_names:
+        if self.is_projected and self.datum:
             cf_dict["horizontal_datum_name"] = self.datum.name
         coordinate_operation = None
         if not self.is_bound and self.is_projected:
             coordinate_operation = self.coordinate_operation
-            if self.name not in unknown_names:
-                cf_dict["projected_crs_name"] = self.name
+            cf_dict["projected_crs_name"] = self.name
         coordinate_operation_name = (
             None
             if not coordinate_operation
@@ -700,6 +696,7 @@ class CRS(_CRS):
         -------
         CRS
         """
+        unknown_names = ("unknown", "undefined")
         if "crs_wkt" in in_cf:
             return CRS(in_cf["crs_wkt"])
         elif "spatial_ref" in in_cf:  # for previous supported WKT key
@@ -725,7 +722,7 @@ class CRS(_CRS):
             geographic_crs = GeographicCRS(
                 name=geographic_crs_name or "undefined", datum=datum,
             )  # type: CRS
-        elif geographic_crs_name:
+        elif geographic_crs_name and geographic_crs_name not in unknown_names:
             geographic_crs = CRS(geographic_crs_name)
         else:
             geographic_crs = GeographicCRS()
@@ -908,6 +905,9 @@ class CRS(_CRS):
     def __eq__(self, other: Any) -> bool:
         return self.equals(other)
 
+    def __ne__(self, other: Any) -> bool:
+        return not self == other
+
     def __reduce__(self) -> Tuple[Type["CRS"], Tuple[str]]:
         """special method that allows CRS instance to be pickled"""
         return self.__class__, (self.srs,)


=====================================
pyproj/proj.py
=====================================
@@ -29,30 +29,9 @@ pj_list = get_proj_operations_map()
 
 class Proj(_Proj):
     """
-    Performs cartographic transformations (converts from
-    longitude,latitude to native map projection x,y coordinates and
-    vice versa) using PROJ (https://proj.org).
-
-    A Proj class instance is initialized with proj map projection
-    control parameter key/value pairs. The key/value pairs can
-    either be passed in a dictionary, or as keyword arguments,
-    or as a PROJ string (compatible with the proj command). See
-    https://proj.org/operations/projections/index.html for examples of
-    key/value pairs defining different map projections.
-
-    Calling a Proj class instance with the arguments lon, lat will
-    convert lon/lat (in degrees) to x/y native map projection
-    coordinates (in meters).  If optional keyword 'inverse' is True
-    (default is False), the inverse transformation from x/y to
-    lon/lat is performed. If optional keyword 'errcheck' is True (default is
-    False) an exception is raised if the transformation is invalid.
-    If errcheck=False and the transformation is invalid, no
-    exception is raised and 'inf' is returned. If the optional keyword
-    'preserve_units' is True, the units in map projection coordinates
-    are not forced to be meters.
-
-    Works with numpy and regular python array objects, python
-    sequences and scalars.
+    Performs cartographic transformations. Converts from
+    longitude, latitude to native map projection x,y coordinates and
+    vice versa using PROJ (https://proj.org).
 
     Attributes
     ----------
@@ -67,10 +46,12 @@ class Proj(_Proj):
         self, projparams: Any = None, preserve_units: bool = True, **kwargs
     ) -> None:
         """
-        initialize a Proj class instance.
-
-        See the PROJ documentation (https://proj.org)
-        for more information about projection parameters.
+        A Proj class instance is initialized with proj map projection
+        control parameter key/value pairs. The key/value pairs can
+        either be passed in a dictionary, or as keyword arguments,
+        or as a PROJ string (compatible with the proj command). See
+        https://proj.org/operations/projections/index.html for examples of
+        key/value pairs defining different map projections.
 
         Parameters
         ----------
@@ -150,30 +131,56 @@ class Proj(_Proj):
         projstring = re.sub(r"\s\+?type=crs", "", projstring)
         super().__init__(cstrencode(projstring.strip()))
 
-    def __call__(self, *args, **kw) -> Tuple[Any, Any]:
-        # ,lon,lat,inverse=False,errcheck=False):
+    def __call__(
+        self,
+        longitude: Any,
+        latitude: Any,
+        inverse: bool = False,
+        errcheck: bool = False,
+        radians: bool = False,
+    ) -> Tuple[Any, Any]:
         """
         Calling a Proj class instance with the arguments lon, lat will
         convert lon/lat (in degrees) to x/y native map projection
-        coordinates (in meters).  If optional keyword 'inverse' is True
-        (default is False), the inverse transformation from x/y to
-        lon/lat is performed. If optional keyword 'errcheck' is True (default is
-        False) an exception is raised if the transformation is invalid.
-        If errcheck=False and the transformation is invalid, no
-        exception is raised and 'inf' is returned.
+        coordinates (in meters).
 
         Inputs should be doubles (they will be cast to doubles if they
         are not, causing a slight performance hit).
 
         Works with numpy and regular python array objects, python
         sequences and scalars, but is fastest for array objects.
+
+        Parameters
+        ----------
+        longitude: scalar or array (numpy or python)
+            Input longitude coordinate(s).
+        latitude: scalar or array (numpy or python)
+            Input latitude coordinate(s).
+        inverse: boolean, optional
+            If inverse is True the inverse transformation from x/y to
+            lon/lat is performed. Default is False.
+        radians: boolean, optional
+            If True, will expect input data to be in radians and will return radians
+            if the projection is geographic. Default is False (degrees).
+            This does not work with pyproj 2 and is ignored. It will be enabled again
+            in pyproj 3.
+        errcheck: boolean, optional
+            If True an exception is raised if the errors are found in the process.
+            By default errcheck=False and ``inf`` is returned.
+
+        Returns
+        -------
+        Tuple[Any, Any]:
+            The transformed coordinates.
         """
-        inverse = kw.get("inverse", False)
-        errcheck = kw.get("errcheck", False)
-        lon, lat = args
+        if radians:
+            warnings.warn(
+                "radian input is currently not supported in pyproj 2. "
+                "Support for radian input will be added in pyproj 3."
+            )
         # process inputs, making copies that support buffer API.
-        inx, xisfloat, xislist, xistuple = _copytobuffer(lon)
-        iny, yisfloat, yislist, yistuple = _copytobuffer(lat)
+        inx, xisfloat, xislist, xistuple = _copytobuffer(longitude)
+        iny, yisfloat, yislist, yistuple = _copytobuffer(latitude)
         # call PROJ functions. inx and iny modified in place.
         if inverse:
             self._inv(inx, iny, errcheck=errcheck)
@@ -210,7 +217,7 @@ class Proj(_Proj):
         radians: boolean, optional
             If True, will expect input data to be in radians.
             Default is False (degrees).
-        errcheck: boolean, optional (default False)
+        errcheck: boolean, optional
             If True an exception is raised if the errors are found in the process.
             By default errcheck=False and ``inf`` is returned.
 


=====================================
pyproj/transformer.py
=====================================
@@ -9,6 +9,7 @@ __all__ = [
     "TransformerGroup",
     "AreaOfInterest",
 ]
+import warnings
 from array import array
 from itertools import chain, islice
 from typing import Any, Iterable, Iterator, List, Optional, Tuple, Union
@@ -68,16 +69,6 @@ class TransformerGroup(_TransformerGroup):
             The area of interest to help order the transformations based on the
             best operation for the area.
 
-
-        Example:
-
-        >>> from pyproj.transformer import TransformerGroup
-        >>> trans_group = TransformerGroup(4326, 2964)
-        >>> trans_group
-        <TransformerGroup: best_available=True>
-        - transformers: 8
-        - unavailable_operations: 1
-
         """
         super().__init__(
             CRS.from_user_input(crs_from),
@@ -372,8 +363,8 @@ class Transformer:
         radians: boolean, optional
             If True, will expect input data to be in radians and will return radians
             if the projection is geographic. Default is False (degrees). Ignored for
-            pipeline transformations.
-        errcheck: boolean, optional (default False)
+            pipeline transformations with pyproj 2, but will work in pyproj 3.
+        errcheck: boolean, optional
             If True an exception is raised if the transformation is invalid.
             By default errcheck=False and an invalid transformation
             returns ``inf`` and no exception is raised.
@@ -487,7 +478,7 @@ class Transformer:
             If True, will expect input data to be in radians and will return radians
             if the projection is geographic. Default is False (degrees). Ignored for
             pipeline transformations.
-        errcheck: boolean, optional (default False)
+        errcheck: boolean, optional
             If True an exception is raised if the transformation is invalid.
             By default errcheck=False and an invalid transformation
             returns ``inf`` and no exception is raised.
@@ -685,6 +676,8 @@ def transform(
     .. versionadded:: 2.1.2 skip_equivalent
     .. versionadded:: 2.2.0 always_xy
 
+    .. warning:: This function is deprecated. See: :ref:`upgrade_transformer`
+
     x2, y2, z2 = transform(p1, p2, x1, y1, z1)
 
     Transform points between two coordinate systems defined by the
@@ -754,6 +747,15 @@ def transform(
     >>> '%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f' % xy
     ' -92.220  -94.720  -90.370 38.830 39.320 38.750'
     """
+    warnings.warn(
+        (
+            "This function is deprecated. "
+            "See: https://pyproj4.github.io/pyproj/stable/"
+            "gotchas.html#upgrading-to-pyproj-2-from-pyproj-1"
+        ),
+        DeprecationWarning,
+        stacklevel=2,
+    )
     return Transformer.from_proj(
         p1, p2, skip_equivalent=skip_equivalent, always_xy=always_xy
     ).transform(xx=x, yy=y, zz=z, tt=tt, radians=radians, errcheck=errcheck)
@@ -774,6 +776,8 @@ def itransform(
     .. versionadded:: 2.1.2 skip_equivalent
     .. versionadded:: 2.2.0 always_xy
 
+    .. warning:: This function is deprecated. See: :ref:`upgrade_transformer`
+
     points2 = itransform(p1, p2, points1)
     Iterator/generator version of the function pyproj.transform.
     Transform points between two coordinate systems defined by the
@@ -827,6 +831,15 @@ def itransform(
     '30 60'
 
     """
+    warnings.warn(
+        (
+            "This function is deprecated. "
+            "See: https://pyproj4.github.io/pyproj/stable/"
+            "gotchas.html#upgrading-to-pyproj-2-from-pyproj-1"
+        ),
+        DeprecationWarning,
+        stacklevel=2,
+    )
     return Transformer.from_proj(
         p1, p2, skip_equivalent=skip_equivalent, always_xy=always_xy
     ).itransform(


=====================================
test/__init__.py
=====================================


=====================================
test/conftest.py
=====================================
@@ -1,28 +1,16 @@
 import os
-import shutil
-import tempfile
+from pathlib import Path
 
-import pytest
+from pyproj.datadir import get_data_dir
 
-import pyproj
 
-
- at pytest.fixture(scope="session")
-def aoi_data_directory():
+def grids_available(*grid_names):
     """
-    This is to ensure that the ntv2_0.gsb file is actually
-    missing for the AOI tests.
+    Check if the grids are available
     """
-    data_dir = pyproj.datadir.get_data_dir()
-    with tempfile.TemporaryDirectory() as tmpdir:
-        tmp_data_dir = os.path.join(tmpdir, "proj")
-        shutil.copytree(data_dir, tmp_data_dir)
-        try:
-            os.remove(os.path.join(str(tmp_data_dir), "ntv2_0.gsb"))
-        except OSError:
-            pass
-        try:
-            pyproj.datadir.set_data_dir(str(tmp_data_dir))
-            yield
-        finally:
-            pyproj.datadir.set_data_dir(data_dir)
+    if os.environ.get("PROJ_NETWORK") == "ON":
+        return True
+    for grid_name in grid_names:
+        if Path(get_data_dir(), grid_name).exists():
+            return True
+    return False


=====================================
test/crs/test_crs.py
=====================================
@@ -1,9 +1,10 @@
 import json
 from distutils.version import LooseVersion
 
+import numpy
 import pytest
 
-from pyproj import CRS, Transformer, proj_version_str
+from pyproj import CRS, __proj_version__
 from pyproj.crs import (
     CoordinateOperation,
     CoordinateSystem,
@@ -14,6 +15,7 @@ from pyproj.crs import (
 from pyproj.crs.enums import CoordinateOperationType, DatumType
 from pyproj.enums import ProjVersion, WktVersion
 from pyproj.exceptions import CRSError
+from pyproj.transformer import TransformerGroup
 
 
 class CustomCRS(object):
@@ -537,11 +539,18 @@ def test_coordinate_operation():
 
 def test_coordinate_operation_grids():
     cc = CoordinateOperation.from_epsg(1312)
-    assert (
-        repr(cc.grids)
-        == "[Grid(short_name=NTv1_0.gsb, full_name=, package_name=, url=, "
-        "direct_download=False, open_license=False, available=False)]"
-    )
+    if not cc.grids[0].full_name:
+        assert (
+            repr(cc.grids)
+            == "[Grid(short_name=NTv1_0.gsb, full_name=, package_name=, url=, "
+            "direct_download=False, open_license=False, available=False)]"
+        )
+    else:
+        assert (
+            repr(cc.grids)
+            == "[Grid(short_name=NTv1_0.gsb, full_name=NTv1_0.gsb, package_name=, "
+            "url=, direct_download=False, open_license=False, available=False)]"
+        )
 
 
 def test_coordinate_operation_grids__alternative_grid_name():
@@ -551,9 +560,11 @@ def test_coordinate_operation_grids__alternative_grid_name():
     assert grid.direct_download is True
     assert grid.open_license is True
     assert grid.available is True
-    if LooseVersion(proj_version_str) >= LooseVersion("7.0.0"):
+    if LooseVersion(__proj_version__) >= LooseVersion("7.0.0"):
         assert grid.short_name == "ca_nrc_ntv1_can.tif"
-        assert grid.full_name.endswith("ntv1_can.dat")
+        assert grid.full_name.endswith("ntv1_can.dat") or grid.full_name.endswith(
+            grid.short_name
+        )
         assert grid.package_name == ""
         assert grid.url == "https://cdn.proj.org/ca_nrc_ntv1_can.tif"
     else:
@@ -1103,6 +1114,13 @@ def test_srs__no_plus():
 
 def test_equals_different_type():
     assert CRS("epsg:4326") != ""
+    assert not CRS("epsg:4326") == ""
+
+    assert CRS("epsg:4326") != 27700
+    assert not CRS("epsg:4326") == 27700
+
+    assert not CRS("epsg:4326") != 4326
+    assert CRS("epsg:4326") == 4326
 
 
 def test_is_exact_same_different_type():
@@ -1186,7 +1204,7 @@ def test_to_dict_no_proj4():
             "proj": "ob_tran",
         }
     )
-    if LooseVersion(proj_version_str) >= LooseVersion("6.3.0"):
+    if LooseVersion(__proj_version__) >= LooseVersion("6.3.0"):
         with pytest.warns(UserWarning):
             assert crs.to_dict() == {
                 "R": 6371229,
@@ -1237,13 +1255,14 @@ def test_operations_missing():
 
 
 def test_operations():
-    transformer = Transformer.from_crs(28356, 7856)
+    transformer = TransformerGroup(28356, 7856).transformers[0]
     coord_op = CoordinateOperation.from_string(transformer.to_wkt())
     assert coord_op.operations == transformer.operations
 
 
 def test_operations__scope_remarks():
-    transformer = Transformer.from_crs(28356, 7856)
+
+    transformer = TransformerGroup(28356, 7856).transformers[0]
     coord_op = CoordinateOperation.from_string(transformer.to_wkt())
     assert coord_op.operations == transformer.operations
     # scope does not transfer for some reason
@@ -1280,3 +1299,21 @@ def test_utm_zone(crs_input):
 @pytest.mark.parametrize("crs_input", ["+proj=tmerc", "epsg:4326"])
 def test_utm_zone__none(crs_input):
     assert CRS(crs_input).utm_zone is None
+
+
+def test_numpy_bool_kwarg_false():
+    # Issue 564
+    south = numpy.array(50) < 0
+    crs = CRS(
+        proj="utm", zone=32, ellipsis="WGS84", datum="WGS84", units="m", south=south
+    )
+    assert "south" not in crs.srs
+
+
+def test_numpy_bool_kwarg_true():
+    # Issue 564
+    south = numpy.array(50) > 0
+    crs = CRS(
+        proj="utm", zone=32, ellipsis="WGS84", datum="WGS84", units="m", south=south
+    )
+    assert "+south " in crs.srs


=====================================
test/crs/test_crs_cf.py
=====================================
@@ -3,7 +3,7 @@ from distutils.version import LooseVersion
 import pytest
 from numpy.testing import assert_almost_equal
 
-from pyproj import CRS, proj_version_str
+from pyproj import CRS, __proj_version__
 from pyproj.crs import ProjectedCRS
 from pyproj.crs._cf1x8 import _try_list_if_string
 from pyproj.crs.coordinate_operation import (
@@ -73,6 +73,8 @@ def test_to_cf_transverse_mercator():
         "false_easting": 2520000.0,
         "false_northing": 0.0,
         "scale_factor_at_central_meridian": 0.9996,
+        "geographic_crs_name": "unknown",
+        "projected_crs_name": "unknown",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("BOUNDCRS[")
@@ -129,6 +131,9 @@ def test_from_cf_transverse_mercator(towgs84_test):
         "false_easting": 2520000.0,
         "false_northing": 0.0,
         "scale_factor_at_central_meridian": 1.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
+        "horizontal_datum_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("BOUNDCRS[")
@@ -154,6 +159,8 @@ def test_cf_from_latlon():
         "longitude_of_prime_meridian": 0.0,
         "prime_meridian_name": "Greenwich",
         "grid_mapping_name": "latitude_longitude",
+        "geographic_crs_name": "undefined",
+        "reference_ellipsoid_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("GEOGCRS[")
@@ -253,6 +260,7 @@ def test_cf_rotated_latlon():
         "grid_north_pole_latitude": 32.5,
         "grid_north_pole_longitude": 170.0,
         "north_pole_grid_longitude": 0.0,
+        "geographic_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("GEOGCRS[")
@@ -261,7 +269,7 @@ def test_cf_rotated_latlon():
     _test_roundtrip(expected_cf, "GEOGCRS[")
     with pytest.warns(UserWarning):
         proj_dict = crs.to_dict()
-    if LooseVersion(proj_version_str) >= LooseVersion("6.3.0"):
+    if LooseVersion(__proj_version__) >= LooseVersion("6.3.0"):
         assert proj_dict == {
             "proj": "ob_tran",
             "o_proj": "longlat",
@@ -287,7 +295,7 @@ def test_cf_rotated_latlon__grid():
     )
     with pytest.warns(UserWarning):
         proj_dict = crs.to_dict()
-    if LooseVersion(proj_version_str) >= LooseVersion("6.3.0"):
+    if LooseVersion(__proj_version__) >= LooseVersion("6.3.0"):
         assert proj_dict == {
             "proj": "ob_tran",
             "o_proj": "longlat",
@@ -324,6 +332,8 @@ def test_cf_lambert_conformal_conic_1sp():
         "false_easting": 0.0,
         "false_northing": 0.0,
         "standard_parallel": 25.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -372,6 +382,8 @@ def test_cf_lambert_conformal_conic_2sp(standard_parallel):
         "longitude_of_central_meridian": 265.0,
         "false_easting": 0.0,
         "false_northing": 0.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -422,6 +434,9 @@ def test_oblique_mercator():
         "scale_factor_at_projection_origin": 1.0,
         "false_easting": 0.0,
         "false_northing": 0.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
+        "horizontal_datum_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -494,6 +509,8 @@ def test_geos_crs_sweep():
         "longitude_of_projection_origin": 0.0,
         "false_easting": 0.0,
         "false_northing": 0.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -525,6 +542,8 @@ def test_geos_crs_fixed_angle_axis():
         "longitude_of_projection_origin": 0.0,
         "false_easting": 0.0,
         "false_northing": 0.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -548,6 +567,10 @@ def test_geos_proj_string():
         "longitude_of_projection_origin": 0.0,
         "false_easting": 0.0,
         "false_northing": 0.0,
+        "geographic_crs_name": "unknown",
+        "horizontal_datum_name": "unknown",
+        "projected_crs_name": "unknown",
+        "reference_ellipsoid_name": "unknown",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -587,6 +610,8 @@ def test_mercator_b():
         "longitude_of_projection_origin": 10.0,
         "false_easting": 0.0,
         "false_northing": 0.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     with pytest.warns(UserWarning):
         assert crs.to_dict() == {
@@ -664,7 +689,7 @@ def test_export_compound_crs():
 
 
 @pytest.mark.skipif(
-    LooseVersion(proj_version_str) < LooseVersion("6.3.0"),
+    LooseVersion(__proj_version__) < LooseVersion("6.3.0"),
     reason="geoid model does not work in PROJ < 6.3.0",
 )
 def test_geoid_model_name():
@@ -811,6 +836,8 @@ def test_lambert_azimuthal_equal_area():
         "longitude_of_projection_origin": 2.0,
         "false_easting": 3.0,
         "false_northing": 4.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -834,6 +861,8 @@ def test_lambert_cylindrical_equal_area():
         "longitude_of_central_meridian": 2.0,
         "false_easting": 3.0,
         "false_northing": 4.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -858,6 +887,8 @@ def test_mercator_a():
         "false_easting": 3.0,
         "false_northing": 4.0,
         "scale_factor_at_projection_origin": 1.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -881,6 +912,8 @@ def test_orthographic():
         "longitude_of_projection_origin": 2.0,
         "false_easting": 3.0,
         "false_northing": 4.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -905,6 +938,8 @@ def test_polar_stereographic_a():
         "false_easting": 2.0,
         "false_northing": 3.0,
         "scale_factor_at_projection_origin": 1.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -928,6 +963,8 @@ def test_polar_stereographic_b():
         "straight_vertical_longitude_from_pole": 1.0,
         "false_easting": 2.0,
         "false_northing": 3.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -952,6 +989,8 @@ def test_stereographic():
         "false_easting": 2.0,
         "false_northing": 3.0,
         "scale_factor_at_projection_origin": 1.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -974,6 +1013,8 @@ def test_sinusoidal():
         "longitude_of_projection_origin": 0.0,
         "false_easting": 1.0,
         "false_northing": 2.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
@@ -998,9 +1039,71 @@ def test_vertical_perspective():
         "longitude_of_projection_origin": 1.0,
         "false_easting": 2.0,
         "false_northing": 3.0,
+        "geographic_crs_name": "undefined",
+        "projected_crs_name": "undefined",
     }
     cf_dict = crs.to_cf()
     assert cf_dict.pop("crs_wkt").startswith("PROJCRS[")
     assert cf_dict == expected_cf
     # test roundtrip
     _test_roundtrip(expected_cf, "PROJCRS[")
+
+
+def test_build_custom_datum():
+    cf_dict = {
+        "semi_major_axis": 6370997.0,
+        "semi_minor_axis": 6370997.0,
+        "inverse_flattening": 0.0,
+        "reference_ellipsoid_name": "Normal Sphere (r=6370997)",
+        "longitude_of_prime_meridian": 1.0,
+        "grid_mapping_name": "oblique_mercator",
+        "latitude_of_projection_origin": 0.0,
+        "longitude_of_projection_origin": 13.809602948622212,
+        "azimuth_of_central_line": 8.998112717187938,
+        "scale_factor_at_projection_origin": 1.0,
+        "false_easting": 0.0,
+        "false_northing": 0.0,
+    }
+    crs = CRS.from_cf(cf_dict)
+    assert crs.datum.name == "undefined"
+    assert crs.ellipsoid.name == "Normal Sphere (r=6370997)"
+    assert crs.prime_meridian.name == "undefined"
+    assert crs.prime_meridian.longitude == 1
+
+
+def test_build_custom_datum__default_prime_meridian():
+    cf_dict = {
+        "semi_major_axis": 6370997.0,
+        "semi_minor_axis": 6370997.0,
+        "inverse_flattening": 0.0,
+        "grid_mapping_name": "oblique_mercator",
+        "latitude_of_projection_origin": 0.0,
+        "longitude_of_projection_origin": 13.809602948622212,
+        "azimuth_of_central_line": 8.998112717187938,
+        "scale_factor_at_projection_origin": 1.0,
+        "false_easting": 0.0,
+        "false_northing": 0.0,
+    }
+    crs = CRS.from_cf(cf_dict)
+    assert crs.datum.name == "undefined"
+    assert crs.ellipsoid.name == "undefined"
+    assert crs.prime_meridian.name == "Greenwich"
+    assert crs.prime_meridian.longitude == 0
+
+
+def test_build_custom_datum__default_ellipsoid():
+    cf_dict = {
+        "prime_meridian_name": "Paris",
+        "grid_mapping_name": "oblique_mercator",
+        "latitude_of_projection_origin": 0.0,
+        "longitude_of_projection_origin": 13.809602948622212,
+        "azimuth_of_central_line": 8.998112717187938,
+        "scale_factor_at_projection_origin": 1.0,
+        "false_easting": 0.0,
+        "false_northing": 0.0,
+    }
+    crs = CRS.from_cf(cf_dict)
+    assert crs.datum.name == "undefined"
+    assert crs.ellipsoid.name == "WGS 84"
+    assert crs.prime_meridian.name == "Paris"
+    assert str(crs.prime_meridian.longitude).startswith("2.")


=====================================
test/crs/test_crs_coordinate_operation.py
=====================================
@@ -3,7 +3,7 @@ from distutils.version import LooseVersion
 import pytest
 from numpy.testing import assert_almost_equal
 
-from pyproj import proj_version_str
+from pyproj import __proj_version__
 from pyproj.crs import GeographicCRS
 from pyproj.crs.coordinate_operation import (
     AlbersEqualAreaConversion,
@@ -617,7 +617,7 @@ def test_rotated_latitude_longitude_operation():
 
 def test_lambert_cylindrical_equal_area_scale_operation__defaults():
     lceaop = LambertCylindricalEqualAreaScaleConversion()
-    if LooseVersion(proj_version_str) >= LooseVersion("6.3.1"):
+    if LooseVersion(__proj_version__) >= LooseVersion("6.3.1"):
         assert lceaop.name == "unknown"
         assert lceaop.method_name == "Lambert Cylindrical Equal Area"
         assert _to_dict(lceaop) == {
@@ -642,7 +642,7 @@ def test_lambert_cylindrical_equal_area_scale_operation():
         false_northing=4,
         scale_factor_natural_origin=0.999,
     )
-    if LooseVersion(proj_version_str) >= LooseVersion("6.3.1"):
+    if LooseVersion(__proj_version__) >= LooseVersion("6.3.1"):
         assert lceaop.name == "unknown"
         assert lceaop.method_name == "Lambert Cylindrical Equal Area"
         op_dict = _to_dict(lceaop)


=====================================
test/crs/test_crs_maker.py
=====================================
@@ -2,7 +2,7 @@ from distutils.version import LooseVersion
 
 import pytest
 
-from pyproj import proj_version_str
+from pyproj import __proj_version__
 from pyproj.crs import (
     BoundCRS,
     CompoundCRS,
@@ -62,7 +62,7 @@ def test_vertical_crs():
     assert vc.name == "NAVD88 height"
     assert vc.type_name == "Vertical CRS"
     assert vc.coordinate_system == VerticalCS()
-    if LooseVersion(proj_version_str) >= LooseVersion("6.3.0"):
+    if LooseVersion(__proj_version__) >= LooseVersion("6.3.0"):
         assert vc.to_json_dict()["geoid_model"]["name"] == "GEOID12B"
 
 


=====================================
test/test_awips221.py
=====================================
@@ -3,7 +3,7 @@ import array
 import numpy
 from numpy.testing import assert_allclose
 
-from pyproj import Proj, proj_version_str
+from pyproj import Proj, __proj_version__
 
 try:
     from time import perf_counter
@@ -26,7 +26,7 @@ def test_awips221():
     # awips221 = Proj(params)
     # or keyword args
     awips221 = Proj(proj="lcc", R=6371200, lat_1=50, lat_2=50, lon_0=-107)
-    print("proj4 library version = ", proj_version_str)
+    print("proj4 library version = ", __proj_version__)
     # AWIPS grid 221 parameters
     # (from http://www.nco.ncep.noaa.gov/pmb/docs/on388/tableb.html)
     llcrnrx, llcrnry = awips221(-145.5, 1.0)


=====================================
test/test_datum.py
=====================================
@@ -3,18 +3,25 @@ from distutils.version import LooseVersion
 import pytest
 from numpy.testing import assert_almost_equal
 
-from pyproj import CRS, Proj, proj_version_str, transform
+from pyproj import CRS, Proj, __proj_version__, transform
+from test.conftest import grids_available
 
 
 @pytest.mark.parametrize("proj_class", [Proj, CRS])
-def test_datum(proj_class, aoi_data_directory):
+def test_datum(proj_class):
     p1 = proj_class(proj="latlong", datum="WGS84")
     s_1 = -111.5
     s_2 = 45.25919444444
     p2 = proj_class(proj="utm", zone=10, datum="NAD27")
-    x2, y2 = transform(p1, p2, s_1, s_2)
-    if LooseVersion(proj_version_str) < LooseVersion("6.3.0"):
-        assert_almost_equal((x2, y2), (1402291.0833290431, 5076289.591846835))
+    with pytest.warns(DeprecationWarning):
+        x2, y2 = transform(p1, p2, s_1, s_2)
+    if LooseVersion(__proj_version__) < LooseVersion("6.3.0"):
+        assert_almost_equal(
+            (x2, y2), (1402291.0833290431, 5076289.591846835), decimal=2
+        )
     else:
-        # https://github.com/OSGeo/PROJ/issues/1808
-        assert_almost_equal((x2, y2), (1402285.9829252, 5076292.4212746))
+        if grids_available("ca_nrc_ntv2_0.tif"):
+            assert_almost_equal((x2, y2), (1402286.3333203, 5076292.2955777), decimal=2)
+        else:
+            # https://github.com/OSGeo/PROJ/issues/1808
+            assert_almost_equal((x2, y2), (1402285.9829252, 5076292.4212746), decimal=2)


=====================================
test/test_datum_shift.py
=====================================
@@ -1,7 +1,7 @@
 import pytest
 from numpy.testing import assert_almost_equal
 
-from pyproj import Proj, proj_version_str, transform
+from pyproj import Proj, transform
 
 # illustrates the use of the transform function to
 # perform coordinate transformations with datum shifts.
@@ -33,28 +33,33 @@ with pytest.warns(FutureWarning):
     GAUSSSB_PROJ = Proj(
         init="epsg:3004", towgs84="-122.74,-34.27,-22.83,-1.884,-3.400,-3.030,-15.62"
     )
-print("proj4 library version = ", proj_version_str)
 
 
 def test_shift_wgs84_to_utm33():
-    xutm33, yutm33, zutm33 = transform(
-        WGS84_PROJ, UTM_33_PROJ, WGS84_lon, WGS84_lat, WGS84_z
-    )
+    with pytest.warns(DeprecationWarning):
+        xutm33, yutm33, zutm33 = transform(
+            WGS84_PROJ, UTM_33_PROJ, WGS84_lon, WGS84_lat, WGS84_z
+        )
     assert_almost_equal((xutm33, yutm33, zutm33), (UTM_x, UTM_y, UTM_z))
 
 
 def test_shift_utm33_to_wgs84():
-    back_lon, back_lat, back_z = transform(UTM_33_PROJ, WGS84_PROJ, UTM_x, UTM_y, UTM_z)
+    with pytest.warns(DeprecationWarning):
+        back_lon, back_lat, back_z = transform(
+            UTM_33_PROJ, WGS84_PROJ, UTM_x, UTM_y, UTM_z
+        )
     assert_almost_equal((back_lon, back_lat, back_z), (WGS84_lon, WGS84_lat, WGS84_z))
 
 
 def test_shift_wgs84_to_gaussb_no_ellisoidal_height():
-    xgb, ygb, zgb = transform(WGS84_PROJ, GAUSSSB_PROJ, WGS84_lon, WGS84_lat, 0)
+    with pytest.warns(DeprecationWarning):
+        xgb, ygb, zgb = transform(WGS84_PROJ, GAUSSSB_PROJ, WGS84_lon, WGS84_lat, 0)
     assert_almost_equal((xgb, ygb, zgb), (GB_x, 5055619.899, 0), decimal=2)
 
 
 def test_shift_gaussb_to_wgs84_no_ellisoidal_height():
-    back_lon, back_lat, back_z = transform(GAUSSSB_PROJ, WGS84_PROJ, GB_x, GB_y, 0)
+    with pytest.warns(DeprecationWarning):
+        back_lon, back_lat, back_z = transform(GAUSSSB_PROJ, WGS84_PROJ, GB_x, GB_y, 0)
     assert_almost_equal(
         (back_lon, back_lat, back_z), (WGS84_lon, WGS84_lat, 0), decimal=3
     )


=====================================
test/test_doctest_wrapper.py
=====================================
@@ -1,6 +1,5 @@
 """
-This is a wrapper for the doctests in lib/pyproj/__init__.py so that
-pytest can conveniently run all the tests in a single command line.
+This is a wrapper for the doctests in pyproj
 """
 import doctest
 import os
@@ -8,10 +7,12 @@ import platform
 import sys
 import warnings
 
+import pytest
+
 import pyproj
 
 
-def test_doctests(aoi_data_directory):
+def test_doctests():
     """run the examples in the docstrings using the doctest module"""
 
     with warnings.catch_warnings():
@@ -24,9 +25,10 @@ def test_doctests(aoi_data_directory):
         failure_count_proj, test_count = doctest.testmod(pyproj.proj, verbose=True)
         failure_count_crs, test_count_crs = doctest.testmod(pyproj.crs, verbose=True)
         failure_count_geod, test_count_geod = doctest.testmod(pyproj.geod, verbose=True)
-        failure_count_transform, test_count_transform = doctest.testmod(
-            pyproj.transformer, verbose=True
-        )
+        with pytest.warns(DeprecationWarning):
+            failure_count_transform, test_count_transform = doctest.testmod(
+                pyproj.transformer, verbose=True
+            )
 
     failure_count = (
         failure_count_proj


=====================================
test/test_list.py
=====================================
@@ -15,14 +15,16 @@ from pyproj.enums import PJType
 
 
 def test_units_map():
-    units_map = get_units_map()
+    with pytest.warns(DeprecationWarning):
+        units_map = get_units_map()
     assert isinstance(units_map["m"], Unit)
     assert units_map["m"].id == "m"
     assert units_map["m"].name == "Meter"
 
 
 def test_angular_units_map():
-    ang_map = get_angular_units_map()
+    with pytest.warns(DeprecationWarning):
+        ang_map = get_angular_units_map()
     assert isinstance(ang_map["deg"], Unit)
     assert ang_map["deg"].id == "deg"
     assert ang_map["deg"].name == "Degree"


=====================================
test/test_proj.py
=====================================
@@ -125,13 +125,13 @@ class TypeError_Transform_Issue8_Test(unittest.TestCase):
     def test_tranform_none_1st_parmeter(self):
         # test should raise Type error if projections are not of Proj classes
         # version 1.9.4 produced AttributeError, now should raise TypeError
-        with self.assertRaises(CRSError):
+        with pytest.warns(DeprecationWarning), pytest.raises(CRSError):
             transform(None, self.p, -74, 39)
 
     def test_tranform_none_2nd_parmeter(self):
         # test should raise Type error if projections are not of Proj classes
         # version 1.9.4 has a Segmentation Fault, now should raise TypeError
-        with self.assertRaises(CRSError):
+        with pytest.warns(DeprecationWarning), pytest.raises(CRSError):
             transform(self.p, None, -74, 39)
 
 
@@ -150,7 +150,8 @@ class ProjLatLongTypeErrorTest(unittest.TestCase):
         p = Proj("+proj=stere +lon_0=-39 +lat_0=90 +lat_ts=71.0 +ellps=WGS84")
         self.assertTrue(isinstance(p, Proj))
         # if not patched this line raises a "TypeError: p2 must be a Proj class"
-        lon, lat = transform(p, p.to_latlong(), 200000, 400000)
+        with pytest.warns(DeprecationWarning):
+            lon, lat = transform(p, p.to_latlong(), 200000, 400000)
 
 
 @unittest.skipIf(
@@ -432,24 +433,24 @@ def test_get_factors__2d_input(radians):
         longitude=longitude, latitude=latitude, radians=radians
     )
     assert_almost_equal(
-        factors.meridional_scale, [[1.0, 1.00015233], [1.00060954, 1.00137235]],
+        factors.meridional_scale, [[1.0001523, 1.0006095], [1.0013723, 1.0024419]],
     )
     assert_almost_equal(
-        factors.parallel_scale, [[1.0, 1.00015233], [1.00060954, 1.00137235]],
+        factors.parallel_scale, [[1.0001523, 1.0006095], [1.0013723, 1.0024419]],
     )
     assert_almost_equal(
-        factors.areal_scale, [[1.0, 1.00030468], [1.00121946, 1.00274658]],
+        factors.areal_scale, [[1.00030468, 1.00121946], [1.00274658, 1.00488976]],
     )
     assert_almost_equal(factors.angular_distortion, [[0, 0], [0, 0]], decimal=5)
     assert_almost_equal(
-        factors.meridian_parallel_angle, [[90, 90], [90, 90]],
+        factors.meridian_parallel_angle, [[89.99, 90], [90, 90]], decimal=2
     )
     assert_almost_equal(factors.meridian_convergence, [[0, 0], [0, 0]])
     assert_almost_equal(
-        factors.tissot_semimajor, [[1.0, 1.00015233], [1.00060955, 1.00137235]],
+        factors.tissot_semimajor, [[1.00015234, 1.00060955], [1.00137235, 1.0024419]],
     )
     assert_almost_equal(
-        factors.tissot_semiminor, [[1.0, 1.00015233], [1.00060953, 1.00137235]],
+        factors.tissot_semiminor, [[1.00015232, 1.00060953], [1.00137235, 1.0024419]],
     )
     assert_almost_equal(
         factors.dx_dlam, [[1, 1], [1, 1]],
@@ -457,27 +458,46 @@ def test_get_factors__2d_input(radians):
     assert_almost_equal(factors.dx_dphi, [[0, 0], [0, 0]])
     assert_almost_equal(factors.dy_dlam, [[0, 0], [0, 0]])
     assert_almost_equal(
-        factors.dy_dphi, [[1.0, 1.00015233], [1.00060954, 1.00137235]],
+        factors.dy_dphi, [[1.00015233, 1.00060954], [1.00137235, 1.0024419]],
     )
 
 
+def test_get_factors():
+    transformer = Proj(3717)
+    factors = transformer.get_factors(-120, 34)
+    assert_almost_equal(factors.meridional_scale, 1.0005466)
+    assert_almost_equal(factors.parallel_scale, 1.0005466)
+    assert_almost_equal(factors.areal_scale, 1.00109349)
+    assert_almost_equal(factors.angular_distortion, 0)
+    assert_almost_equal(factors.meridian_parallel_angle, 90)
+    assert_almost_equal(factors.meridian_convergence, 1.67864770)
+    assert_almost_equal(factors.tissot_semimajor, 1.00055, decimal=5)
+    assert_almost_equal(factors.tissot_semiminor, 1.00055, decimal=5)
+    assert_almost_equal(factors.dx_dlam, 0.8300039)
+    assert_almost_equal(factors.dx_dphi, -0.0292052)
+    assert_almost_equal(factors.dy_dlam, 0.0243244)
+    assert_almost_equal(factors.dy_dphi, 0.9965495)
+
+
 def test_get_factors__nan_inf():
     transformer = Proj(3857)
     factors = transformer.get_factors(
         longitude=[0, np.nan, np.inf, 0], latitude=[np.nan, 2, 2, np.inf]
     )
-    assert_almost_equal(factors.meridional_scale, [1, np.inf, np.inf, 1])
-    assert_almost_equal(factors.parallel_scale, [1, np.inf, np.inf, 1])
-    assert_almost_equal(factors.areal_scale, [1, np.inf, np.inf, 1])
-    assert_almost_equal(factors.angular_distortion, [0, np.inf, np.inf, 0])
-    assert_almost_equal(factors.meridian_parallel_angle, [90, np.inf, np.inf, 90])
-    assert_almost_equal(factors.meridian_convergence, [0.0, np.inf, np.inf, 0.0])
-    assert_almost_equal(factors.tissot_semimajor, [1, np.inf, np.inf, 1])
-    assert_almost_equal(factors.tissot_semiminor, [1, np.inf, np.inf, 1])
-    assert_almost_equal(factors.dx_dlam, [1, np.inf, np.inf, 1])
-    assert_almost_equal(factors.dx_dphi, [0.0, np.inf, np.inf, 0.0])
-    assert_almost_equal(factors.dy_dlam, [0.0, np.inf, np.inf, 0.0])
-    assert_almost_equal(factors.dy_dphi, [1, np.inf, np.inf, 1])
+    assert_almost_equal(factors.meridional_scale, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.parallel_scale, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.areal_scale, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.angular_distortion, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(
+        factors.meridian_parallel_angle, [np.inf, np.inf, np.inf, np.inf]
+    )
+    assert_almost_equal(factors.meridian_convergence, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.tissot_semimajor, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.tissot_semiminor, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.dx_dlam, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.dx_dphi, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.dy_dlam, [np.inf, np.inf, np.inf, np.inf])
+    assert_almost_equal(factors.dy_dphi, [np.inf, np.inf, np.inf, np.inf])
 
 
 def test_get_factors__errcheck():
@@ -486,10 +506,25 @@ def test_get_factors__errcheck():
         transformer.get_factors(longitude=40, latitude=70, errcheck=True, radians=True)
 
 
-def test_numpy_bool_kwarg():
-    # Issue 546
+def test_numpy_bool_kwarg_false():
+    # Issue 564
     south = np.array(50) < 0
     proj = Proj(
         proj="utm", zone=32, ellipsis="WGS84", datum="WGS84", units="m", south=south
     )
     assert "south" not in proj.srs
+
+
+def test_numpy_bool_kwarg_true():
+    # Issue 564
+    south = np.array(50) > 0
+    proj = Proj(
+        proj="utm", zone=32, ellipsis="WGS84", datum="WGS84", units="m", south=south
+    )
+    assert "+south " in proj.srs
+
+
+def test_proj_radians_warning():
+    proj = Proj("epsg:4326")
+    with pytest.warns(UserWarning, match="radian"):
+        proj(1, 2, radians=True)


=====================================
test/test_transform.py
=====================================
@@ -1,7 +1,8 @@
 import numpy
+import pytest
 from numpy.testing import assert_allclose
 
-from pyproj import Proj, proj_version_str, transform
+from pyproj import Proj, __proj_version__, transform
 
 
 def test_transform():
@@ -12,7 +13,7 @@ def test_transform():
     dx = 12190.58
     dy = dx
     awips221 = Proj(proj="lcc", R=6371200, lat_1=50, lat_2=50, lon_0=-107)
-    print("proj4 library version = ", proj_version_str)
+    print("proj4 library version = ", __proj_version__)
     llcrnrx, llcrnry = awips221(-145.5, 1)
     awips221 = Proj(
         proj="lcc",
@@ -35,11 +36,13 @@ def test_transform():
     print("max/min x and y for awips218 grid")
     print(numpy.minimum.reduce(numpy.ravel(x1)), numpy.maximum.reduce(numpy.ravel(x1)))
     print(numpy.minimum.reduce(numpy.ravel(y1)), numpy.maximum.reduce(numpy.ravel(y1)))
-    x2, y2 = transform(awips218, awips221, x1, y1)
+    with pytest.warns(DeprecationWarning):
+        x2, y2 = transform(awips218, awips221, x1, y1)
     print("max/min x and y for awips218 grid in awips221 coordinates")
     print(numpy.minimum.reduce(numpy.ravel(x2)), numpy.maximum.reduce(numpy.ravel(x2)))
     print(numpy.minimum.reduce(numpy.ravel(y2)), numpy.maximum.reduce(numpy.ravel(y2)))
-    x3, y3 = transform(awips221, awips218, x2, y2)
+    with pytest.warns(DeprecationWarning):
+        x3, y3 = transform(awips221, awips218, x2, y2)
     print("error for reverse transformation back to awips218 coords")
     print("(should be close to zero)")
     assert_allclose(numpy.minimum.reduce(numpy.ravel(x3 - x1)), 0, atol=1e-4)
@@ -49,5 +52,6 @@ def test_transform():
 
 
 def test_skip_equivalent():
-    xeq, yeq = transform(4326, 4326, 30, 60, skip_equivalent=True)
+    with pytest.warns(DeprecationWarning):
+        xeq, yeq = transform(4326, 4326, 30, 60, skip_equivalent=True)
     assert (xeq, yeq) == (30, 60)


=====================================
test/test_transformer.py
=====================================
@@ -5,10 +5,13 @@ import pytest
 from numpy.testing import assert_almost_equal
 
 import pyproj
-from pyproj import Proj, Transformer, itransform, transform
+from pyproj import Proj, Transformer, __proj_version__, itransform, transform
 from pyproj.enums import TransformDirection
 from pyproj.exceptions import ProjError
 from pyproj.transformer import AreaOfInterest, TransformerGroup
+from test.conftest import grids_available
+
+_PROJ_gte_701 = LooseVersion(__proj_version__) >= LooseVersion("7.0.1")
 
 
 def test_tranform_wgs84_to_custom():
@@ -18,7 +21,8 @@ def test_tranform_wgs84_to_custom():
     )
     wgs84 = pyproj.Proj("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
     lat, lon = 51.04715, 3.23406
-    xx, yy = pyproj.transform(wgs84, custom_proj, lon, lat)
+    with pytest.warns(DeprecationWarning):
+        xx, yy = pyproj.transform(wgs84, custom_proj, lon, lat)
     assert "{:.3f} {:.3f}".format(xx, yy) == "212.623 4604.975"
 
 
@@ -27,7 +31,8 @@ def test_transform_wgs84_to_alaska():
         lat_lon_proj = pyproj.Proj(init="epsg:4326", preserve_units=False)
         alaska_aea_proj = pyproj.Proj(init="epsg:2964", preserve_units=False)
     test = (-179.72638, 49.752533)
-    xx, yy = pyproj.transform(lat_lon_proj, alaska_aea_proj, *test)
+    with pytest.warns(DeprecationWarning):
+        xx, yy = pyproj.transform(lat_lon_proj, alaska_aea_proj, *test)
     assert "{:.3f} {:.3f}".format(xx, yy) == "-1824924.495 330822.800"
 
 
@@ -36,12 +41,13 @@ def test_illegal_transformation():
     with pytest.warns(FutureWarning):
         p1 = pyproj.Proj(init="epsg:4326")
         p2 = pyproj.Proj(init="epsg:3857")
-    xx, yy = pyproj.transform(
-        p1, p2, (-180, -180, 180, 180, -180), (-90, 90, 90, -90, -90)
-    )
+    with pytest.warns(DeprecationWarning):
+        xx, yy = pyproj.transform(
+            p1, p2, (-180, -180, 180, 180, -180), (-90, 90, 90, -90, -90)
+        )
     assert np.all(np.isinf(xx))
     assert np.all(np.isinf(yy))
-    with pytest.raises(ProjError):
+    with pytest.warns(DeprecationWarning), pytest.raises(ProjError):
         pyproj.transform(
             p1, p2, (-180, -180, 180, 180, -180), (-90, 90, 90, -90, -90), errcheck=True
         )
@@ -56,8 +62,8 @@ def test_lambert_conformal_transform():
     E = 567623.931
     N = 256422.787
     h = 1341.467
-
-    Long1, Lat1, H1 = pyproj.transform(Midelt, WGS84, E, N, h, radians=False)
+    with pytest.warns(DeprecationWarning):
+        Long1, Lat1, H1 = pyproj.transform(Midelt, WGS84, E, N, h, radians=False)
     assert_almost_equal((Long1, Lat1, H1), (-4.6753456, 32.902199, 1341.467), decimal=5)
 
 
@@ -148,10 +154,13 @@ def test_4d_transform_crs_obs1():
 
 
 def test_4d_transform_orginal_crs_obs1():
-    assert_almost_equal(
-        transform(7789, 8401, x=3496737.2679, y=743254.4507, z=5264462.9620, tt=2019.0),
-        (3496737.757717311, 743253.9940103051, 5264462.701132784, 2019.0),
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            transform(
+                7789, 8401, x=3496737.2679, y=743254.4507, z=5264462.9620, tt=2019.0
+            ),
+            (3496737.757717311, 743253.9940103051, 5264462.701132784, 2019.0),
+        )
 
 
 def test_4d_transform_crs_obs2():
@@ -173,10 +182,11 @@ def test_2d_with_time_transform_crs_obs2():
 
 
 def test_2d_with_time_transform_original_crs_obs2():
-    assert_almost_equal(
-        transform(4896, 7930, x=3496737.2679, y=743254.4507, tt=2019.0),
-        (3496737.4105305015, 743254.1014318303, 2019.0),
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            transform(4896, 7930, x=3496737.2679, y=743254.4507, tt=2019.0),
+            (3496737.4105305015, 743254.1014318303, 2019.0),
+        )
 
 
 def test_4d_itransform():
@@ -204,26 +214,34 @@ def test_3d_time_itransform():
 
 
 def test_4d_itransform_orginal_crs_obs1():
-    assert_almost_equal(
-        list(
-            itransform(7789, 8401, [(3496737.2679, 743254.4507, 5264462.9620, 2019.0)])
-        ),
-        [(3496737.757717311, 743253.9940103051, 5264462.701132784, 2019.0)],
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            list(
+                itransform(
+                    7789, 8401, [(3496737.2679, 743254.4507, 5264462.9620, 2019.0)]
+                )
+            ),
+            [(3496737.757717311, 743253.9940103051, 5264462.701132784, 2019.0)],
+        )
 
 
 def test_2d_with_time_itransform_original_crs_obs2():
-    assert_almost_equal(
-        list(
-            itransform(4896, 7930, [(3496737.2679, 743254.4507, 2019.0)], time_3rd=True)
-        ),
-        [(3496737.4105305015, 743254.1014318303, 2019.0)],
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            list(
+                itransform(
+                    4896, 7930, [(3496737.2679, 743254.4507, 2019.0)], time_3rd=True
+                )
+            ),
+            [(3496737.4105305015, 743254.1014318303, 2019.0)],
+        )
 
 
 def test_itransform_time_3rd_invalid():
 
-    with pytest.raises(ValueError, match="'time_3rd' is only valid for 3 coordinates."):
+    with pytest.warns(DeprecationWarning), pytest.raises(
+        ValueError, match="'time_3rd' is only valid for 3 coordinates."
+    ):
         list(
             itransform(
                 7789,
@@ -232,7 +250,9 @@ def test_itransform_time_3rd_invalid():
                 time_3rd=True,
             )
         )
-    with pytest.raises(ValueError, match="'time_3rd' is only valid for 3 coordinates."):
+    with pytest.warns(DeprecationWarning), pytest.raises(
+        ValueError, match="'time_3rd' is only valid for 3 coordinates."
+    ):
         list(itransform(7789, 8401, [(3496737.2679, 743254.4507)], time_3rd=True))
 
 
@@ -240,14 +260,16 @@ def test_transform_no_error():
     with pytest.warns(FutureWarning):
         pj = Proj(init="epsg:4555")
     pjx, pjy = pj(116.366, 39.867)
-    transform(pj, Proj(4326), pjx, pjy, radians=True, errcheck=True)
+    with pytest.warns(DeprecationWarning):
+        transform(pj, Proj(4326), pjx, pjy, radians=True, errcheck=True)
 
 
 def test_itransform_no_error():
     with pytest.warns(FutureWarning):
         pj = Proj(init="epsg:4555")
     pjx, pjy = pj(116.366, 39.867)
-    list(itransform(pj, Proj(4326), [(pjx, pjy)], radians=True, errcheck=True))
+    with pytest.warns(DeprecationWarning):
+        list(itransform(pj, Proj(4326), [(pjx, pjy)], radians=True, errcheck=True))
 
 
 def test_transform_no_exception():
@@ -261,7 +283,7 @@ def test_transform_no_exception():
 def test_transform__out_of_bounds():
     with pytest.warns(FutureWarning):
         transformer = Transformer.from_proj("+init=epsg:4326", "+init=epsg:27700")
-    if LooseVersion(pyproj.proj_version_str) >= LooseVersion("7.0.0"):
+    if LooseVersion(pyproj.__proj_version__) >= LooseVersion("7.0.0"):
         with pytest.raises(pyproj.exceptions.ProjError):
             transformer.transform(100000, 100000, errcheck=True)
     else:
@@ -272,50 +294,55 @@ def test_transform_radians():
     with pytest.warns(FutureWarning):
         WGS84 = pyproj.Proj("+init=EPSG:4326")
     ECEF = pyproj.Proj(proj="geocent", ellps="WGS84", datum="WGS84")
-    assert_almost_equal(
-        pyproj.transform(
-            ECEF, WGS84, -2704026.010, -4253051.810, 3895878.820, radians=True
-        ),
-        (-2.137113493845668, 0.6613203738996222, -20.531156923621893),
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            pyproj.transform(
+                ECEF, WGS84, -2704026.010, -4253051.810, 3895878.820, radians=True
+            ),
+            (-2.137113493845668, 0.6613203738996222, -20.531156923621893),
+        )
 
-    assert_almost_equal(
-        pyproj.transform(
-            WGS84,
-            ECEF,
-            -2.137113493845668,
-            0.6613203738996222,
-            -20.531156923621893,
-            radians=True,
-        ),
-        (-2704026.010, -4253051.810, 3895878.820),
-    )
+        assert_almost_equal(
+            pyproj.transform(
+                WGS84,
+                ECEF,
+                -2.137113493845668,
+                0.6613203738996222,
+                -20.531156923621893,
+                radians=True,
+            ),
+            (-2704026.010, -4253051.810, 3895878.820),
+        )
 
 
 def test_itransform_radians():
     with pytest.warns(FutureWarning):
         WGS84 = pyproj.Proj("+init=EPSG:4326")
     ECEF = pyproj.Proj(proj="geocent", ellps="WGS84", datum="WGS84")
-    assert_almost_equal(
-        list(
-            pyproj.itransform(
-                ECEF, WGS84, [(-2704026.010, -4253051.810, 3895878.820)], radians=True
-            )
-        ),
-        [(-2.137113493845668, 0.6613203738996222, -20.531156923621893)],
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            list(
+                pyproj.itransform(
+                    ECEF,
+                    WGS84,
+                    [(-2704026.010, -4253051.810, 3895878.820)],
+                    radians=True,
+                )
+            ),
+            [(-2.137113493845668, 0.6613203738996222, -20.531156923621893)],
+        )
 
-    assert_almost_equal(
-        list(
-            pyproj.itransform(
-                WGS84,
-                ECEF,
-                [(-2.137113493845668, 0.6613203738996222, -20.531156923621893)],
-                radians=True,
-            )
-        ),
-        [(-2704026.010, -4253051.810, 3895878.820)],
-    )
+        assert_almost_equal(
+            list(
+                pyproj.itransform(
+                    WGS84,
+                    ECEF,
+                    [(-2.137113493845668, 0.6613203738996222, -20.531156923621893)],
+                    radians=True,
+                )
+            ),
+            [(-2704026.010, -4253051.810, 3895878.820)],
+        )
 
 
 def test_4d_transform__inverse():
@@ -354,17 +381,19 @@ def test_always_xy__transformer():
 
 
 def test_always_xy__transform():
-    assert_almost_equal(
-        transform(2193, 4326, 1625350, 5504853, always_xy=True),
-        (173.29964730317386, -40.60674802693758),
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            transform(2193, 4326, 1625350, 5504853, always_xy=True),
+            (173.29964730317386, -40.60674802693758),
+        )
 
 
 def test_always_xy__itransform():
-    assert_almost_equal(
-        list(itransform(2193, 4326, [(1625350, 5504853)], always_xy=True)),
-        [(173.29964730317386, -40.60674802693758)],
-    )
+    with pytest.warns(DeprecationWarning):
+        assert_almost_equal(
+            list(itransform(2193, 4326, [(1625350, 5504853)], always_xy=True)),
+            [(173.29964730317386, -40.60674802693758)],
+        )
 
 
 def test_transform_direction__string():
@@ -423,28 +452,44 @@ def test_str():
     assert str(Transformer.from_crs(4326, 3857)).startswith("proj=pipeline")
 
 
-def test_repr():
-    assert repr(Transformer.from_crs(7789, 8401)) == (
-        "<Transformation Transformer: helmert>\n"
-        "Description: ITRF2014 to ETRF2014 (1)\n"
-        "Area of Use:\n"
-        "- name: Europe - ETRS89\n"
-        "- bounds: (-16.1, 32.88, 40.18, 84.17)"
-    )
-
-    assert repr(Transformer.from_crs(4326, 3857)) == (
-        "<Conversion Transformer: pipeline>\n"
-        "Description: Popular Visualisation Pseudo-Mercator\n"
-        "Area of Use:\n"
-        "- name: World\n"
-        "- bounds: (-180.0, -90.0, 180.0, 90.0)"
-    )
-
-    assert repr(Transformer.from_crs(4326, 26917)) == (
-        "<Unknown Transformer: unknown>\n"
-        "Description: unavailable until proj_trans is called\n"
-        "Area of Use:\n- undefined"
-    )
+ at pytest.mark.parametrize(
+    "from_crs, to_crs, expected_repr",
+    [
+        (
+            7789,
+            8401,
+            (
+                "<Transformation Transformer: helmert>\n"
+                "Description: ITRF2014 to ETRF2014 (1)\n"
+                "Area of Use:\n"
+                "- name: Europe - {}\n"
+                "- bounds: (-16.1, 32.88, 40.18, 84.17)"
+            ).format("ETRF by country" if _PROJ_gte_701 else "ETRS89"),
+        ),
+        (
+            4326,
+            3857,
+            (
+                "<Conversion Transformer: pipeline>\n"
+                "Description: Popular Visualisation Pseudo-Mercator\n"
+                "Area of Use:\n"
+                "- name: World\n"
+                "- bounds: (-180.0, -90.0, 180.0, 90.0)"
+            ),
+        ),
+        (
+            4326,
+            26917,
+            (
+                "<Unknown Transformer: unknown>\n"
+                "Description: unavailable until proj_trans is called\n"
+                "Area of Use:\n- undefined"
+            ),
+        ),
+    ],
+)
+def test_repr(from_crs, to_crs, expected_repr):
+    assert repr(Transformer.from_crs(from_crs, to_crs)) == expected_repr
 
 
 def test_to_json_dict():
@@ -475,7 +520,7 @@ def test_to_json__pretty__indenation():
 
 
 def test_transformer__operations():
-    transformer = Transformer.from_crs(28356, 7856)
+    transformer = TransformerGroup(28356, 7856).transformers[0]
     assert [op.name for op in transformer.operations] == [
         "Inverse of Map Grid of Australia zone 56",
         "GDA94 to GDA2020 (1)",
@@ -488,7 +533,7 @@ def test_transformer__operations_missing():
 
 
 def test_transformer__operations__scope_remarks():
-    transformer = Transformer.from_crs(28356, 7856)
+    transformer = TransformerGroup(28356, 7856).transformers[0]
     assert transformer.scope is None
     assert [op.scope for op in transformer.operations] == [
         None,
@@ -512,83 +557,142 @@ def test_transformer_group():
     assert trans_group.best_available
 
 
-def test_transformer_group__unavailable(aoi_data_directory):
+def test_transformer_group__unavailable():
     trans_group = TransformerGroup(4326, 2964)
-    assert len(trans_group.unavailable_operations) == 1
-    assert (
-        trans_group.unavailable_operations[0].name
-        == "Inverse of NAD27 to WGS 84 (33) + Alaska Albers"
-    )
-    assert len(trans_group.transformers) == 8
-    assert trans_group.best_available
+    if not grids_available("ntv2_0.gsb", "ca_nrc_ntv2_0.tif"):
+        assert len(trans_group.unavailable_operations) == 1
+        assert (
+            trans_group.unavailable_operations[0].name
+            == "Inverse of NAD27 to WGS 84 (33) + Alaska Albers"
+        )
+        if _PROJ_gte_701:
+            assert len(trans_group.transformers) == 9
+        else:
+            assert len(trans_group.transformers) == 8
+        assert trans_group.best_available
+    else:
+        assert len(trans_group.unavailable_operations) == 0
+        if _PROJ_gte_701:
+            assert len(trans_group.transformers) == 10
+        else:
+            assert len(trans_group.transformers) == 9
+        assert trans_group.best_available
 
 
-def test_transform_group__missing_best(aoi_data_directory):
+def test_transform_group__missing_best():
     with pytest.warns(FutureWarning):
         lat_lon_proj = pyproj.Proj(init="epsg:4326", preserve_units=False)
         alaska_aea_proj = pyproj.Proj(init="epsg:2964", preserve_units=False)
 
-    with pytest.warns(
-        UserWarning, match="Best transformation is not available due to missing Grid"
-    ):
+    if not grids_available("ntv2_0.gsb", "ca_nrc_ntv2_0.tif"):
+        with pytest.warns(
+            UserWarning,
+            match="Best transformation is not available due to missing Grid",
+        ):
+            trans_group = pyproj.transformer.TransformerGroup(
+                lat_lon_proj.crs, alaska_aea_proj.crs
+            )
+
+        assert not trans_group.best_available
+        assert "ntv2_0" not in trans_group.transformers[0].definition
+        assert "ntv2_0" in trans_group.unavailable_operations[0].to_proj4()
+    else:
+        # assuming all grids avaiable or PROJ_NETWORK=ON
         trans_group = pyproj.transformer.TransformerGroup(
             lat_lon_proj.crs, alaska_aea_proj.crs
         )
-
-    assert not trans_group.best_available
-    assert len(trans_group.transformers) == 37
-    assert len(trans_group.unavailable_operations) == 41
-
-
-def test_transform_group__area_of_interest(aoi_data_directory):
-    with pytest.warns(
-        UserWarning, match="Best transformation is not available due to missing Grid"
-    ):
-        trans_group = TransformerGroup(
-            4326, 2964, area_of_interest=AreaOfInterest(-136.46, 49.0, -60.72, 83.17)
+        assert trans_group.best_available
+        assert "ntv2_0" in trans_group.transformers[0].definition
+
+
+def test_transform_group__area_of_interest():
+    if not grids_available("ntv2_0.gsb", "ca_nrc_ntv2_0.tif"):
+        with pytest.warns(
+            UserWarning,
+            match="Best transformation is not available due to missing Grid",
+        ):
+            trans_group = pyproj.transformer.TransformerGroup(
+                4326,
+                2964,
+                area_of_interest=pyproj.transformer.AreaOfInterest(
+                    -136.46, 49.0, -60.72, 83.17
+                ),
+            )
+        assert (
+            trans_group.transformers[0].description
+            == "Inverse of NAD27 to WGS 84 (13) + Alaska Albers"
+        )
+    else:
+        trans_group = pyproj.transformer.TransformerGroup(
+            4326,
+            2964,
+            area_of_interest=pyproj.transformer.AreaOfInterest(
+                -136.46, 49.0, -60.72, 83.17
+            ),
+        )
+        assert trans_group.best_available
+        assert (
+            trans_group.transformers[0].description
+            == "Inverse of NAD27 to WGS 84 (33) + Alaska Albers"
         )
-    assert (
-        trans_group.transformers[0].description
-        == "Inverse of NAD27 to WGS 84 (13) + Alaska Albers"
-    )
 
 
 def test_transformer_group__get_transform_crs():
     tg = TransformerGroup("epsg:4258", "epsg:7415")
-    if LooseVersion(pyproj.proj_version_str) >= LooseVersion("6.3.1"):
-        assert len(tg.transformers) == 1
+    if LooseVersion(pyproj.__proj_version__) >= LooseVersion("6.3.1"):
+        if not grids_available("nl_nsgi_rdtrans2018.tif"):
+            assert len(tg.transformers) == 1
+        else:
+            assert len(tg.transformers) == 2
     else:
         assert len(tg.transformers) == 4
 
 
-def test_transformer__area_of_interest(aoi_data_directory):
+def test_transformer__area_of_interest():
     transformer = Transformer.from_crs(
         4326, 2964, area_of_interest=AreaOfInterest(-136.46, 49.0, -60.72, 83.17)
     )
-    assert transformer.description == "Inverse of NAD27 to WGS 84 (13) + Alaska Albers"
+    if not grids_available("ntv2_0.gsb", "ca_nrc_ntv2_0.tif"):
+        assert (
+            transformer.description == "Inverse of NAD27 to WGS 84 (13) + Alaska Albers"
+        )
+    else:
+        assert (
+            transformer.description == "Inverse of NAD27 to WGS 84 (33) + Alaska Albers"
+        )
 
 
-def test_transformer_proj__area_of_interest(aoi_data_directory):
+def test_transformer_proj__area_of_interest():
     transformer = Transformer.from_proj(
         4326, 2964, area_of_interest=AreaOfInterest(-136.46, 49.0, -60.72, 83.17)
     )
-    assert transformer.description == "Inverse of NAD27 to WGS 84 (13) + Alaska Albers"
+    if not grids_available("ntv2_0.gsb", "ca_nrc_ntv2_0.tif"):
+        assert (
+            transformer.description == "Inverse of NAD27 to WGS 84 (13) + Alaska Albers"
+        )
+    else:
+        assert (
+            transformer.description == "Inverse of NAD27 to WGS 84 (33) + Alaska Albers"
+        )
 
 
-def test_transformer__area_of_interest__invalid(aoi_data_directory):
+def test_transformer__area_of_interest__invalid():
     with pytest.raises(ProjError):
         Transformer.from_crs(
             4326, 2964, area_of_interest=(-136.46, 49.0, -60.72, 83.17)
         )
 
 
-def test_transformer_group__area_of_interest__invalid(aoi_data_directory):
+def test_transformer_group__area_of_interest__invalid():
     with pytest.raises(ProjError):
         TransformerGroup(4326, 2964, area_of_interest=(-136.46, 49.0, -60.72, 83.17))
 
 
 def test_transformer_equals():
-    assert Transformer.from_crs(28356, 7856) == Transformer.from_crs(28356, 7856)
+    assert (
+        TransformerGroup(28356, 7856).transformers[0]
+        == TransformerGroup(28356, 7856).transformers[0]
+    )
 
 
 @pytest.mark.parametrize(
@@ -633,5 +737,5 @@ def test_pipeline_itransform(pipeline_str):
 
 def test_pipeline_radian_transform_warning():
     trans = Transformer.from_pipeline("+proj=pipeline +ellps=GRS80 +step +proj=cart")
-    with pytest.warns(UserWarning):
+    with pytest.warns(UserWarning, match="radian"):
         trans.transform(0.1, 0.1, 0, radians=True)



View it on GitLab: https://salsa.debian.org/debian-gis-team/python-pyproj/-/compare/738574f174f4479bd0a42502a64ac6c5ff501627...ed976e1954ef6caf3dff041c4d91ba4e4ad270c2

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/python-pyproj/-/compare/738574f174f4479bd0a42502a64ac6c5ff501627...ed976e1954ef6caf3dff041c4d91ba4e4ad270c2
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20200504/ef9193d7/attachment-0001.html>


More information about the Pkg-grass-devel mailing list