pygeodesy 24.12.12__py2.py3-none-any.whl → 25.1.5__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyGeodesy
3
- Version: 24.12.12
3
+ Version: 25.1.5
4
4
  Summary: Pure Python geodesy tools
5
5
  Home-page: https://GitHub.com/mrJean1/PyGeodesy
6
6
  Author: Jean M. Brouwers
@@ -33,8 +33,8 @@ earth models using precision trigonometric, vector-based, exact, elliptic, itera
33
33
  approximate methods for geodetic (lat-/longitude), geocentric (ECEF_ cartesian) and certain
34
34
  `triaxial ellipsoidal`_ coordinates.
35
35
 
36
- Transcoded from `JavaScript originals`_ by *Chris Veness (C) 2005-2024* and from several `C++
37
- classes`_ by *Charles F.F. Karney (C) 2008-2024* and published under the same `MIT License`_.
36
+ Transcoded partially from `JavaScript originals`_ by *Chris Veness (C) 2005-2024* and from several
37
+ `C++ classes`_ by *Charles F.F. Karney (C) 2008-2024* and published under the same `MIT License`_.
38
38
 
39
39
  There are four modules for ellipsoidal earth models, *ellipsoidalExact*, *-Karney*, *-Vincenty*
40
40
  and *-Nvector* and two for spherical ones, *sphericalTrigonometry* and *-Nvector*. Each module
@@ -73,7 +73,7 @@ If the wheel ``PyGeodesy-yy.m.d-py2.py3-none-any.whl`` is missing in `PyPI Downl
73
73
  the file from `GitHub/dist`_. Install that with ``python[3] -m pip install <path-to-downloaded-wheel>``
74
74
  and verify with ``python[3] -m pygeodesy``.
75
75
 
76
- Alternatively, download ``PyGeodesy-yy.m.d.zip`` from PyPI_ or GitHub_, ``unzip`` the downloaded file,
76
+ Alternatively, download ``PyGeodesy-yy.m.d.tar.gz`` from PyPI_ or GitHub_, ``unzip`` the downloaded file,
77
77
  ``cd`` to directory ``PyGeodesy-yy.m.d`` and type ``python[3] setup.py install``.
78
78
 
79
79
  To run all PyGeodesy tests, type ``python[3] test/run.py`` or type ``python[3] test/unitTestSuite.py``
@@ -108,49 +108,49 @@ variable ``PYGEODESY_RHUMBSOLVE`` or with property ``Ellipsoid.rhumbsolve``.
108
108
  Documentation
109
109
  =============
110
110
 
111
- In addition to the ``pygeodesy`` package, the PyGeodesy_ `distribution files`_ contain the tests,
112
- the test results (on macOS only) and the complete documentation_ generated by Epydoc_ using command
113
- line: ``epydoc --html --no-private --no-source --name=PyGeodesy --url=... -v pygeodesy``.
111
+ In addition to the ``pygeodesy`` package, the PyGeodesy_ `distribution files`_ contain the tests, the
112
+ test results (on macOS only) and the complete documentation_ generated by Epydoc_ using command line:
113
+ `epydoc --html --no-private --no-source --name=PyGeodesy --url=... -v pygeodesy``.
114
114
 
115
115
  Tests
116
116
  =====
117
117
 
118
- The tests ran with Python 3.13.0 (with geographiclib_ 2.0), 3.12.7 (with geographiclib_ 2.0, numpy_
119
- 2.1.0, scipy_ 1.14.1, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), 3.11.5 (with
120
- geographiclib_ 2.0, numpy_ 1.24.2 and scipy_ 1.10.1), Python 3.10.8 (with geographiclib_ 2.0, numpy_
121
- 1.23.3, scipy_ 1.9.1, GeoConvert_ 2.3, GeodSolve_ 2.3), Python 3.9.6 and Python 2.7.18 (with
122
- geographiclib_ 1.50, numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.3, GeodSolve_ 2.3, IntersectTool_
123
- 2.3 and RhumbSolve_ 2.3), all on macOS 14.6.1 Sonoma in 64-bit.
118
+ The tests ran with Python 3.13.1 (with geographiclib_ 2.0), 3.12.7 (with geographiclib_ 2.0, numpy_ 2.1.0,
119
+ scipy_ 1.14.1, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), 3.11.5 (with geographiclib_ 2.0,
120
+ numpy_ 1.24.2 and scipy_ 1.10.1), Python 3.10.8 (with geographiclib_ 2.0, numpy_ 1.23.3, scipy_ 1.9.1,
121
+ GeoConvert_ 2.3, GeodSolve_ 2.3), Python 3.9.6 and Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6,
122
+ scipy_ 1.2.2, GeoConvert_ 2.3, GeodSolve_ 2.3, IntersectTool_ 2.3 and RhumbSolve_ 2.3), all on macOS 14.6.1
123
+ Sonoma in 64-bit.
124
124
 
125
125
  All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
126
126
  and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
127
127
  included in the distribution files.
128
128
 
129
- Python 3.13.0, 3.12.7, 3.11.5 and 3.10.8 run on Apple M1 Silicon (``arm64``), *natively*. Python 2.7.18
129
+ Python 3.13.1, 3.12.7, 3.11.5 and 3.10.8 run on Apple M1 Silicon (``arm64``), *natively*. Python 2.7.18
130
130
  runs on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
131
131
 
132
- Test coverage has been measured with coverage_ 7.6.1 using Python 3.13.0, 3.12.7, 3.11.5 and 3.10.8. The
132
+ Test coverage has been measured with coverage_ 7.6.1 using Python 3.13.1, 3.12.7, 3.11.5 and 3.10.8. The
133
133
  complete coverage report in HTML and a PDF summary are included in the distribution files.
134
134
 
135
- The tests also ran with Python 3.13.0 (and geographiclib_ 2.0) on `Debian 12`_ in 64-bit only and with
135
+ The tests also ran with Python 3.13.1 (and geographiclib_ 2.0) on `Debian 12`_ in 64-bit only and with
136
136
  Python 3.12.5 (and geographiclib_ 2.0) on `Windows 2019Server`_ in 64-bit only and with Python 2.7.18
137
137
  (and with geographiclib_ 1.52) on `Windows 10`_ in 64- and 32-bit.
138
138
 
139
- A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_
140
- 3.4 and 64-bit Python 3.7.4 and 3.7.3 on macOS 10.13.6 High Sierra.
141
-
142
- Previously, the tests were run with Python 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15, PyPy_
143
- 7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and PyPy_ 7.1.1 (Python 2.7.13) (and geographiclib_ 1.52,
144
- numpy_ 1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and scipy_ 1.2.1, 1.4.1, 1.5.2 or 1.8.1)
145
- on `Ubuntu 16.04`_, with Python 3.10.0-1, 3.9.0-5, 3.8.0-6, 3.7.2-6, 3.7.0, 3.6.2-5, 3.5.3, 2.7.13-17,
146
- 2.7.10 and 2.6.9 (and numpy_ 1.19.0, 1.16.5, 1.16.2, 1.15.2, 1.14.0, 1.13.1, 1.8.0rc1 or 1.6.2 and scipy_
147
- 1.5.0), PyPy_ 7.3.0 (Python 2.7.13 and 3.6.9), PyPy_ 6.0.0 (Python 2.7.13 and 3.5.3) and `Intel-Python`_
148
- 3.5.3 (and numpy_ 1.11.3) on macOS 14.0-5 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
149
- Sur (aka 10.16), 10.15.3, 10.15.5-7 Catalina, 10.14 Mojave, 10.13.6 High Sierra and 10.12 Sierra, MacOS X
150
- 10.11 El Capitan and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and
151
- numpy 1.8.0) on iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or iPhone12, with Pythonista_
152
- 3.1 on iOS 10.3.3, 11.0.3, 11.1.2 and 11.3 on iPad4, all in 64-bit only and with 32-bit Python 2.7.14 on
153
- Windows Server 2012R2, Windows 10 Pro and 32-bit Python 2.6.6 on Windows XP SP3.
139
+ A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_ 3.4
140
+ and 64-bit Python 3.7.4 and 3.7.3 on macOS 10.13.6 High Sierra.
141
+
142
+ Previously, the tests were run with Python 3.13.0, 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.1, 3.8.7, 3.7.1, 2.7.15,
143
+ PyPy_ 7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and PyPy_ 7.1.1 (Python 2.7.13) (and geographiclib_ 1.52,
144
+ numpy_ 1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and scipy_ 1.2.1, 1.4.1, 1.5.2 or 1.8.1) on
145
+ Ubuntu 16.04, with Python 3.10.0-1, 3.9.0-5, 3.8.0-6, 3.7.2-6, 3.7.0, 3.6.2-5, 3.5.3, 2.7.13-17, 2.7.10
146
+ and 2.6.9 (and numpy_ 1.19.0, 1.16.5, 1.16.2, 1.15.2, 1.14.0, 1.13.1, 1.8.0rc1 or 1.6.2 and scipy_ 1.5.0),
147
+ PyPy_ 7.3.0 (Python 2.7.13 and 3.6.9), PyPy_ 6.0.0 (Python 2.7.13 and 3.5.3) and `Intel-Python`_ 3.5.3 (and
148
+ numpy_ 1.11.3) on macOS 14.0-5 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big Sur (aka 10.16),
149
+ 10.15.3, 10.15.5-7 Catalina, 10.14 Mojave, 10.13.6 High Sierra and 10.12 Sierra, MacOS X 10.11 El Capitan
150
+ and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and numpy 1.8.0) on
151
+ iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or iPhone12, with Pythonista_ 3.1 on iOS 10.3.3,
152
+ 11.0.3, 11.1.2 and 11.3 on iPad4, all in 64-bit only and with 32-bit Python 2.7.14 on Windows Server 2012R2,
153
+ Windows 10 Pro and 32-bit Python 2.6.6 on Windows XP SP3.
154
154
 
155
155
  Notes
156
156
  =====
@@ -160,7 +160,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
160
160
 
161
161
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
162
162
 
163
- *Last updated: Dec 12, 2024.*
163
+ *Last updated: Jan 05, 2025.*
164
164
 
165
165
  License
166
166
  =======
@@ -265,7 +265,6 @@ DEALINGS IN THE SOFTWARE.
265
265
  .. _Sutherland-Hodgman: https://WikiPedia.org/wiki/Sutherland-Hodgman_algorithm
266
266
  .. _TRF: http://ITRF.ENSG.IGN.FR
267
267
  .. _triaxial ellipsoidal: https://GeographicLib.SourceForge.io/1.44/triaxial.html
268
- .. _Ubuntu 16.04: https://Travis-CI.com/mrJean1/PyGeodesy
269
268
  .. _UPS: https://WikiPedia.org/wiki/Universal_polar_stereographic_coordinate_system
270
269
  .. _UTM: https://www.Movable-Type.co.UK/scripts/latlong-utm-mgrs.html
271
270
  .. _Vector-based: https://www.Movable-Type.co.UK/scripts/latlong-vectors.html
@@ -1,17 +1,17 @@
1
1
  pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=7dw5fb04kHnq20Lro1rgAPLuI-Vvbf4TuTf_M6MClU4,42631
2
+ pygeodesy/__init__.py,sha256=oSRVJhOmmebIxdlJGcBqWj9vKnIBeT-8vQ-ozepzIfA,42648
3
3
  pygeodesy/__main__.py,sha256=SJ-P17Lpr0_yOQSB9ItjqJzPue35ije8oxHPGS_OZk8,5442
4
4
  pygeodesy/albers.py,sha256=0pl5e39wacZyEDP7GjHGRx9WXUc_vq36wPUusC7ltLo,30955
5
5
  pygeodesy/azimuthal.py,sha256=or03e4j4AycZqVpkcsCj_doCFO7tkypB1Fu98tdg_E8,49763
6
- pygeodesy/basics.py,sha256=o0G8hbnbtM7pyWLAsiOK8axWrsWN44RKdzYMwnFScjc,30158
6
+ pygeodesy/basics.py,sha256=h2yPijizu_JR2_h4d-FYqLaAAexKUbWTdtDMQvUbqlg,31784
7
7
  pygeodesy/booleans.py,sha256=RuZ26Hkl_fiDjvcg3FipsKrrB8kcQVYXHTUajPVocRE,73544
8
8
  pygeodesy/cartesianBase.py,sha256=TPCRRw_Jua7lpnZ29LsIorPAhZ-uEn39y9hAScWnEMQ,45350
9
9
  pygeodesy/clipy.py,sha256=r2M4Kzu4q95dFzia0w88oFoU9rM5ejwdRZ-aeqdB0JY,27728
10
- pygeodesy/constants.py,sha256=K9zq6U72rLdfNusdgcBeCSjuQvAiYbbgBkM-AYYX92c,19825
10
+ pygeodesy/constants.py,sha256=_LHRE9sAYn2YjPjfarhNukFGXNnXrd5VZhBm0euZF-U,19825
11
11
  pygeodesy/css.py,sha256=g86DBzqNRbeWECY3101fMuBDien8Q4gtc16g83U0hFg,25642
12
12
  pygeodesy/datums.py,sha256=pdIPv57Fs1sqKe8p8_HOAgyeT1tUQlvwuUsJ3uf5z6Q,34057
13
13
  pygeodesy/dms.py,sha256=09Yw1w-uxhROlQA8cbActNp4A5n-lvPsVKJZvLnomJM,42174
14
- pygeodesy/ecef.py,sha256=JtimqnQj9MBI7tsgi5jCkQh8kA3RSxSacm_-ne_Woa8,59402
14
+ pygeodesy/ecef.py,sha256=JfbsBHYnFG2yD3w0NnYlo5NJ8TxYsb7H3fuv_tyD48I,59386
15
15
  pygeodesy/elevations.py,sha256=JMKlXMWzUp4evbCJA7mZX02UuXIr681zHM5knn3ycq0,10801
16
16
  pygeodesy/ellipsoidalBase.py,sha256=_WxC5rzxZ5IQ0yl3Pm73W4KplbaO5idCD4vKEexYCWY,55111
17
17
  pygeodesy/ellipsoidalBaseDI.py,sha256=cVAgJ057TAlqa-B4Ho1I1P-mfBFO_kx4WeFM71oUrzU,38243
@@ -25,31 +25,31 @@ pygeodesy/elliptic.py,sha256=s9MZgTK3zl4AQVSans3RjYoDqQ425xU2t2zIyxAFhYM,45003
25
25
  pygeodesy/epsg.py,sha256=VIBidzAEuoBF4LdlJ4r3WtpL0Ymhru8kf4fAgfFr5ok,8220
26
26
  pygeodesy/errors.py,sha256=MskMWomF3bVK4orjSmIfVYilLeXGLi1-bcuyqhmBrXc,32098
27
27
  pygeodesy/etm.py,sha256=NLhinROJNuql1fRtPozUeVOyczc9RNBgtm-6h8AxY2M,46722
28
- pygeodesy/fmath.py,sha256=yNY4xkqBGp8Gl-HtLHns8fgKlZCBr2mXcF8F_R_kd9k,36914
29
- pygeodesy/formy.py,sha256=JXpNAaxhkBobbMp3IRorlbnkarT0oXQymCIVXwgvTzA,74598
30
- pygeodesy/frechet.py,sha256=DU2OxUlv1ZNhAoy9OoDBnlgBDMg2B9ZVBsQuiCdwIrE,34372
28
+ pygeodesy/fmath.py,sha256=Uo8tTS4hNwNEuSoDHz0H82LA7mSF9LRRieLTODwHlw4,36933
29
+ pygeodesy/formy.py,sha256=qXUGFwRn6cAxW7Z9U42c5hVEIhYuVZxdwShqeyfIVVU,69849
30
+ pygeodesy/frechet.py,sha256=jOxnFQNI4eL-axq8IiytpUvOXkyOdeVkXIAVZeBbu_M,31765
31
31
  pygeodesy/fstats.py,sha256=Bt2U_xdJW3Cio7Jn6MdxEJNGWR9VgNE5RLRb3ux5-g4,28288
32
32
  pygeodesy/fsums.py,sha256=O2pHSJqMJ4DUfo6wr9LerutKVFdlOaJOAohxZVcvZss,103979
33
33
  pygeodesy/gars.py,sha256=9DcCpPRv6QOgWeHIjW5qNZ8FSKZZueodRqi8xQru1Ik,11829
34
- pygeodesy/geodesici.py,sha256=BycjsKCFP_Nvwbao9A1LxR8WxH2NTfsadZlsMrN_dx0,74768
34
+ pygeodesy/geodesici.py,sha256=eYEHEmkbtndfXH9_dtphhMGeI9RgqL0PgqmdF7I-Rck,74776
35
35
  pygeodesy/geodesicw.py,sha256=C4HED2A4V7T9hdY-q4yoalvz5cWiXAoCSRo8iMeSJEE,28774
36
36
  pygeodesy/geodsolve.py,sha256=BN769RW0D27HL4nM4DRg39rMvz--_gVeK6E2wphZmkw,28989
37
37
  pygeodesy/geohash.py,sha256=pgSqcjOUx-9cTcBOiesBT2jLaRHaRGhAxTgt_jMFZ0Y,40201
38
- pygeodesy/geoids.py,sha256=ZpbpOJ4jT-o9aLJegFlJPxBm1P_CWyg1UN8QKSe-_8E,82491
39
- pygeodesy/hausdorff.py,sha256=VZcmoaoRpb8-o7iDYZgQBZ6S3vvFZZ8Y3prpmw_ix9s,34770
40
- pygeodesy/heights.py,sha256=uKiLCgzjUe3dDK-BhjWmHYKwlXoOJ256qtEf-921g80,42909
38
+ pygeodesy/geoids.py,sha256=ucMC9xuP5RqqbRdAy_LDNp2IIg1Z_i5xP_O37iClOaI,86215
39
+ pygeodesy/hausdorff.py,sha256=idjw0Or_2fxJhGN0jLoV1rX39HXgEOi0XeJaAxwnKck,32137
40
+ pygeodesy/heights.py,sha256=u8G9-uD_QxwlYZTc64Z145oche2xtSVb_8wa9GkTKVs,41190
41
41
  pygeodesy/internals.py,sha256=y0e861QXZMWFNrI03u41rJ8VQXojxwd5G3naCNDzs2M,24299
42
42
  pygeodesy/interns.py,sha256=TituXfrjkSxLcZlTdSofCfqpGNpu6dw02x9eEQYyEzs,23346
43
43
  pygeodesy/iters.py,sha256=hG4wctuBdr35Zr6u0iDAA-rAH0XR9Diw2ARKwcr-5Aw,20311
44
44
  pygeodesy/karney.py,sha256=X2dgUXyJ8IjyYSd1kxW6XB6szG7l85YTcDcjO1_wdfg,40480
45
45
  pygeodesy/ktm.py,sha256=axEWse4f3SAbJz-PHoVBEjIJ7JW45reSJeOsPWKcAM0,27247
46
- pygeodesy/latlonBase.py,sha256=Y4aXVPLFl_DJUBMWtze00nepLKOEgg5DqNudunTfcS0,77980
47
- pygeodesy/lazily.py,sha256=lPpW1Z18h92KtMRdl_K8XPoG42f_Gyx4yoG7lBQAzII,46688
46
+ pygeodesy/latlonBase.py,sha256=c5EkQshey_Wvaxz_7f5cO7JJcrWxPFgbuPtLrnnxq_E,75653
47
+ pygeodesy/lazily.py,sha256=lrOtlNNM_ujQEPKIJd3M0pK9ck3j0obKvLYeI2ZV440,47004
48
48
  pygeodesy/lcc.py,sha256=htSplUo-1vXpMKINc2RUKvrMeltUI7RZrfXCFJJIrbI,25671
49
49
  pygeodesy/ltp.py,sha256=GbalGvmsaxAiwPhzrXcOA-JUmKwTCnYwyA3oFaIJgac,50576
50
- pygeodesy/ltpTuples.py,sha256=AAHblD0wawq1-6rDaemr-xMA6KcyIxYeZpK-v7qr3KE,58999
50
+ pygeodesy/ltpTuples.py,sha256=EFQOY3Vt76BjVRoPuxn7RheBWhRWzKofiGm43Pnvm2I,58999
51
51
  pygeodesy/mgrs.py,sha256=jvoyB3_U_EpP4HBoDzTt6V-MoDYC32nOf077w-5txsQ,29819
52
- pygeodesy/named.py,sha256=PinOnkT5IToqWdvRPPrzBk5LcvOa6JsD0eK2J5pO3Iw,58562
52
+ pygeodesy/named.py,sha256=n8Ly9WZXkgKp9-RUsbzbzBpuWL4D1cIZ-YWgBootkkE,58510
53
53
  pygeodesy/namedTuples.py,sha256=dBM93PadrJHkdqe3yinW_Pc7M_5ACYeU6rat5Dwp3Mk,30622
54
54
  pygeodesy/nvectorBase.py,sha256=DF2qWGbcWfqjw9a11BTesLDDYd5bWKQlplOwSntlBJo,29969
55
55
  pygeodesy/osgr.py,sha256=1TMaToE-7uoVEqHS482pTilDpPWKSj9bgAOVhkx5R_E,30777
@@ -67,7 +67,7 @@ pygeodesy/triaxials.py,sha256=GMaap3es1szw052XmJulOAJQ0ibl36NVYKSQyxG_Fwk,63952
67
67
  pygeodesy/units.py,sha256=Nme99EnQkA831DV4zHJbtJB5naqbnCc097I0xSglEFM,35452
68
68
  pygeodesy/unitsBase.py,sha256=uiPDOpLdFou3HG2VqlcX5trpvfelNvOdMP8cy9432IE,14060
69
69
  pygeodesy/ups.py,sha256=GzhE5nMD_flcPsMRAg-3GxlyOp6LNpzPRkXMc3KQC7o,23349
70
- pygeodesy/utily.py,sha256=PP-6cvDXBbDOVuvMhsfRo5NVLYuGNRy5AxTYoR7b_w8,38361
70
+ pygeodesy/utily.py,sha256=L8WQOvbcUJDwz3c_YX93oBGVSypKSbNbqjOMtwvFwmU,40017
71
71
  pygeodesy/utm.py,sha256=kcXliftP9q0nTxviIOixVyvResK2Jydj-G52CXJiSuQ,31123
72
72
  pygeodesy/utmups.py,sha256=mjdweGi9XaBw9u8nnbjsobd9-JUA-2hydMbe2eNBD7s,13196
73
73
  pygeodesy/utmupsBase.py,sha256=MPUm9VYLiHjkvHswAH9v32_IhbPVbhTKqELMP-q1mJ0,18730
@@ -87,12 +87,12 @@ pygeodesy/auxilats/auxDLat.py,sha256=GnnvcKZY1jG4SWjYOlDqhGemooQmxDXX-jGr5yg89NM
87
87
  pygeodesy/auxilats/auxDST.py,sha256=3maal46InF3sRgbh-iQrTm4L11qzfe4gr_S8rh1-faU,10468
88
88
  pygeodesy/auxilats/auxLat.py,sha256=diAy7DeL5NTvX1t8UWPWTjjQ_JV1F3F9iGj_GotcoUQ,31908
89
89
  pygeodesy/auxilats/auxily.py,sha256=yNdN2rmISVv21gjubDBKBj6iC6MX4uUHUeZwtYsCA1c,7882
90
- pygeodesy/deprecated/__init__.py,sha256=pfpj6v2m1TqD0RLB3d_JnnNz9FNu1ygTeR-raZs5F1A,2815
90
+ pygeodesy/deprecated/__init__.py,sha256=ndsBPtmorXG2F4nMuC-wKvR9zIu8GI2WWU3-lkMsTsQ,2815
91
91
  pygeodesy/deprecated/bases.py,sha256=ykcmjlPG58xY6sS3M_sLr9pfxrSPuw4oqXvNi811Sog,1655
92
- pygeodesy/deprecated/classes.py,sha256=m6SMelJzx83QA-Z-yEMnN6XLtn1D4ej-KIZXoLw6AR4,12469
92
+ pygeodesy/deprecated/classes.py,sha256=4IHdSkJrexTK5cI96d94VAFOxAZKx1kwYJLcgAq_erA,16388
93
93
  pygeodesy/deprecated/consterns.py,sha256=dQGhrSQN-JUHjQDLkLwv_RcfFIDwwu0d-P-wai7sR2g,1908
94
- pygeodesy/deprecated/datum.py,sha256=DooVxkQEFRMI7-cfPW6moiXxdFmroI7NxMoeK02YVMI,1875
95
- pygeodesy/deprecated/functions.py,sha256=nkcO41Zl31pUyJr3R9Z2tzu_U1auohXfHvTo-wXm08I,14758
94
+ pygeodesy/deprecated/datum.py,sha256=aeY-POZBZrKKiTnrhqOImV5AfiXu2-9Vz8xu_d4ze2g,1910
95
+ pygeodesy/deprecated/functions.py,sha256=mpgYzx_ynbIrfy9WBDfjhNtI-sRx7nKwucyGaxqE10k,15792
96
96
  pygeodesy/deprecated/nvector.py,sha256=rttz-znpX2Tm1ttoJt8_E8V_9n_ZciKi_CvvbwFmZQM,2117
97
97
  pygeodesy/deprecated/rhumbBase.py,sha256=ptcQnDYAaXZqlVtevRnU5m8xsviqLYzPt6wEfXa-LEE,1375
98
98
  pygeodesy/deprecated/rhumbaux.py,sha256=x3d5BsrVRKkNeGxHjVbcuQ74zy5lvJsgvpIdPEOOnQ0,1428
@@ -101,8 +101,8 @@ pygeodesy/deprecated/rhumbx.py,sha256=9GTE8CbsD_vRiAnR13gyquPHRpyiHOhPvCUzs5hfWx
101
101
  pygeodesy/geodesicx/_C4_24.py,sha256=3OkzOxf0DdO1QL4N9CVYjpOgFCm8FcYjCyvcTLpL2wc,90707
102
102
  pygeodesy/geodesicx/_C4_27.py,sha256=grqtju94Nu9V_eQPqe_7aRbLCYflxRuK127pPOPwuDA,134215
103
103
  pygeodesy/geodesicx/_C4_30.py,sha256=I4ZuTy64yOq1IVgRtc_kqOL0HnKzXeTea7kTFSolcJs,201921
104
- pygeodesy/geodesicx/__init__.py,sha256=DcyZAD_jcnW26cQRVfK-FFDN8hG_Nb9h-Xl9hNVPho8,2478
105
- pygeodesy/geodesicx/__main__.py,sha256=Qy5lgdHZWFmBkrZIJ2bP8uNNl9bAdELNXo4LAJ3vYjU,4188
104
+ pygeodesy/geodesicx/__init__.py,sha256=dGVtLErbUtxd2Xt1M_e4wKf6rJoNMWwQmYEN-FZEzUY,2478
105
+ pygeodesy/geodesicx/__main__.py,sha256=x-9DiCBXFX7YZ0Ary1A4gIqV2LCqWF-HbqzsJzv2Ye0,4141
106
106
  pygeodesy/geodesicx/gx.py,sha256=hviRcMq3IUh3sYIdV_zpuLEMhZL7kiALUgv0pl4ObL4,60641
107
107
  pygeodesy/geodesicx/gxarea.py,sha256=ZnXURCXVdZVir34yNA7gNJdWhDrZ4tzlGKm3Wf4Z3b0,19454
108
108
  pygeodesy/geodesicx/gxbases.py,sha256=EF9IL_oQBSlF70_ROag-DRBoU-ASWKlX-l-wfrUEQYs,6130
@@ -112,7 +112,7 @@ pygeodesy/rhumb/aux_.py,sha256=636KtNGMCLd0xbqyST-Xwv4dG4npekQDVoHMbcP3EUo,16048
112
112
  pygeodesy/rhumb/bases.py,sha256=UUzUVaDbZF5WgeHdTkQKUg8NQAwe6tGqIrqyxCraMz8,54162
113
113
  pygeodesy/rhumb/ekx.py,sha256=QWU5muyirMsjbm-lGmgxuO_6snaurOQ-dcF6GrdmffU,24055
114
114
  pygeodesy/rhumb/solve.py,sha256=PwMWh-TGLj4Pr1g5kIjcK-PfPN-1p26B7QGRbY27_ag,23943
115
- PyGeodesy-24.12.12.dist-info/METADATA,sha256=pjTqd9Faa-edCZkUO4vtAT5OL0vknoUfB582O6JXCd8,19943
116
- PyGeodesy-24.12.12.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
117
- PyGeodesy-24.12.12.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
118
- PyGeodesy-24.12.12.dist-info/RECORD,,
115
+ PyGeodesy-25.1.5.dist-info/METADATA,sha256=UIK1rcjrUK20UCRnOXmJ-KFxBL7ImBlDjwEd8g0nlMM,19900
116
+ PyGeodesy-25.1.5.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
117
+ PyGeodesy-25.1.5.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
118
+ PyGeodesy-25.1.5.dist-info/RECORD,,
pygeodesy/__init__.py CHANGED
@@ -7,9 +7,9 @@ methods for geodetic (lat-/longitude), geocentric (U{ECEF<https://WikiPedia.org/
7
7
  cartesian) and certain U{triaxial ellipsoidal<https://GeographicLib.SourceForge.io/1.44/triaxial.html>}
8
8
  coordinates.
9
9
 
10
- Transcoded from U{JavaScript originals<https://GitHub.com/ChrisVeness/geodesy>} by I{Chris Veness (C) 2005-2024}
11
- and from several U{C++ classes<https://GeographicLib.SourceForge.io/C++/doc/annotated.html>} by I{Charles F. F.
12
- Karney (C) 2008-2024} and published under the same U{MIT License<https://OpenSource.org/licenses/MIT>}**.
10
+ Transcoded partially from U{JavaScript originals<https://GitHub.com/ChrisVeness/geodesy>} by I{Chris Veness (C)
11
+ 2005-2024} and from several U{C++ classes<https://GeographicLib.SourceForge.io/C++/doc/annotated.html>} by I{Charles
12
+ F. F. Karney (C) 2008-2024} and published under the same U{MIT License<https://OpenSource.org/licenses/MIT>}**.
13
13
 
14
14
  There are four modules for ellipsoidal earth models, C{ellipsoidalExact}, C{-Karney}, C{-Vincenty} and C{-Nvector}
15
15
  and two for spherical ones, C{sphericalTrigonometry} and C{-Nvector}. Each module provides a geodetic B{C{LatLon}}
@@ -72,7 +72,7 @@ PyPI.org/project/PyGeodesy/#files>}, download the file from U{GitHub/dist<https:
72
72
  PyGeodesy/tree/master/dist>}. Install that with C{python[3] -m pip install <path-to-downloaded-wheel>}
73
73
  and verify with C{python[3] -m pygeodesy}.
74
74
 
75
- Alternatively, download C{PyGeodesy-yy.m.d.zip} from U{PyPI<https://PyPI.org/project/PyGeodesy>}
75
+ Alternatively, download C{PyGeodesy-yy.m.d.tar.gz} from U{PyPI<https://PyPI.org/project/PyGeodesy>}
76
76
  or U{GitHub<https://GitHub.com/mrJean1/PyGeodesy>}, C{unzip} the downloaded file, C{cd} to
77
77
  directory C{Pygeodesy-yy.m.d} and type C{python[3] setup.py install}.
78
78
 
@@ -122,7 +122,7 @@ C{epydoc --html --no-private --no-source --name=PyGeodesy --url=... -v pygeodesy
122
122
  Tests
123
123
  =====
124
124
 
125
- The tests ran with Python 3.13.0 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0),
125
+ The tests ran with Python 3.13.1 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0),
126
126
  Python 3.12.7 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
127
127
  U{numpy<https://PyPI.org/project/numpy>} 2.1.0, U{scipy<https://PyPI.org/project/scipy>} 1.14.1,
128
128
  U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.3,
@@ -146,24 +146,24 @@ env variable C{PYGEODESY_WARNINGS=on} for all Python versions. The results of t
146
146
  the distribution files.
147
147
 
148
148
  Test coverage has been measured with U{coverage<https://PyPI.org/project/coverage>} 7.6.1 using Python
149
- 3.13.0, 3.12.7, 3.11.5 and 3.10.8. The complete coverage report in HTML and a PDF summary are included in
149
+ 3.13.1, 3.12.7, 3.11.5 and 3.10.8. The complete coverage report in HTML and a PDF summary are included in
150
150
  the distribution files.
151
151
 
152
- Python 3.13.0, 3.12.7, 3.11.5 and 3.10.8 run on Apple M1 Silicon (C{arm64}), I{natively}. Python 2.7.18 runs
152
+ Python 3.13.1, 3.12.7, 3.11.5 and 3.10.8 run on Apple M1 Silicon (C{arm64}), I{natively}. Python 2.7.18 runs
153
153
  on Intel (C{x86_64}) or Intel I{emulation} ("C{arm64_x86_64}", see function L{machine<pygeodesy.machine>}).
154
154
 
155
- The tests also ran with Python 3.13.0 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on
155
+ The tests also ran with Python 3.13.1 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on
156
156
  U{Debian 12<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only, with Python 3.12.5 (and
157
- U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on U{Windows
158
- 2019Server<https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64-bit only and with Python 2.7.18 (and
159
- U{geographiclib<https://PyPI.org/project/geographiclib>} 1.52) on U{Windows
160
- 10<https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64- and 32-bit.
157
+ U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on U{Windows 2019Server
158
+ <https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64-bit only and with Python 2.7.18 (and U{geographiclib
159
+ <https://PyPI.org/project/geographiclib>} 1.52) on U{Windows 10<https://CI.AppVeyor.com/project/mrJean1/pygeodesy>}
160
+ in 64- and 32-bit.
161
161
 
162
162
  A single-File and single-Directory application with C{pygeodesy} has been bundled using U{PyInstaller
163
163
  <https://PyPI.org/project/pyinstaller>} 3.4 and 64-bit Python 3.7.3 on macOS 10.13.6 High Sierra.
164
164
 
165
- Previously, the tests were run with Python 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.6, 3.9.1, 3.8.7, 3.7.1, 2.7.15, U{PyPy
166
- <https://PyPy.org>} 7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and U{PyPy<https://PyPy.org>} 7.1.1 (Python
165
+ Previously, the tests were run with Python 3.13.0, 3.12.0-6, 3.11.2-4, 3.10.1-7, 3.9.6, 3.9.1, 3.8.7, 3.7.1, 2.7.15,
166
+ U{PyPy<https://PyPy.org>} 7.3.12 (Python 3.10.12), 7.3.1 (Python 3.6.9) and U{PyPy<https://PyPy.org>} 7.1.1 (Python
167
167
  2.7.13) (and U{geographiclib <https://PyPI.org/project/geographiclib>} 1.52, U{numpy<https://PyPI.org/project/numpy>}
168
168
  1.16.3, 1.16.4, 1.16.6, 1.19.0, 1.19.4, 1.19.5 or 1.22.4 and U{scipy<https://PyPI.org/project/scipy>} 1.2.1, 1.4.1,
169
169
  1.5.2 or 1.8.1) on U{Ubuntu 16.04<https://Travis-CI.com/mrJean1/PyGeodesy>}, with Python 3.10.0-1, 3.9.0-5, 3.8.0-6,
@@ -566,7 +566,7 @@ if _init__all__ and not _lazy_import2: # import and set __all__
566
566
  # GilderGeek<https://GitHub.com/mrJean1/PyGeodesy/issues/31>)
567
567
  ns = list(lazily._ALL_INIT)
568
568
  # XXX ps = () if _isfrozen else set([_pygeodesy_] + __name__.split(_DOT_))
569
- for mod, attrs in lazily._ALL_LAZY.enums():
569
+ for mod, attrs in lazily._all_enums():
570
570
  mod = _headof(_headof(mod))
571
571
  if mod not in globalocals:
572
572
  t = _DOT_(_pygeodesy_, mod)
@@ -598,7 +598,7 @@ else:
598
598
 
599
599
  from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
600
600
  # from pygeodesy.interns import _DOT_ # from .internals
601
- __version__ = '24.12.12'
601
+ __version__ = '25.01.05'
602
602
  # see setup.py for similar logic
603
603
  version = _DOT_(*_version2(__version__, n=3))
604
604
 
pygeodesy/basics.py CHANGED
@@ -37,7 +37,7 @@ from math import copysign as _copysign
37
37
  # import inspect as _inspect # _MODS
38
38
 
39
39
  __all__ = _ALL_LAZY.basics
40
- __version__ = '24.11.02'
40
+ __version__ = '24.12.31'
41
41
 
42
42
  _below_ = 'below'
43
43
  _list_tuple_types = (list, tuple)
@@ -362,25 +362,48 @@ def isint(obj, both=False):
362
362
  return False
363
363
 
364
364
 
365
- def isiterable(obj):
365
+ def isiterable(obj, strict=False):
366
366
  '''Is B{C{obj}}ect C{iterable}?
367
367
 
368
368
  @arg obj: The object (any C{type}).
369
+ @kwarg strict: If C{True}, check class attributes (C{bool}).
369
370
 
370
371
  @return: C{True} if C{iterable}, C{False} otherwise.
371
372
  '''
372
373
  # <https://PyPI.org/project/isiterable/>
373
- return hasattr(obj, '__iter__') # map, range, set
374
+ return isiterabletype(obj) if strict else hasattr(obj, '__iter__') # map, range, set
374
375
 
375
376
 
376
- def isiterablen(obj):
377
+ def isiterablen(obj, strict=False):
377
378
  '''Is B{C{obj}}ect C{iterable} and has C{len}gth?
378
379
 
379
380
  @arg obj: The object (any C{type}).
381
+ @kwarg strict: If C{True}, check class attributes (C{bool}).
380
382
 
381
383
  @return: C{True} if C{iterable} with C{len}gth, C{False} otherwise.
382
384
  '''
383
- return hasattr(obj, '__len__') and hasattr(obj, '__getitem__')
385
+ _has = isiterabletype if strict else hasattr
386
+ return _has(obj, '__len__') and _has(obj, '__getitem__')
387
+
388
+
389
+ def isiterabletype(obj, method='__iter__'):
390
+ '''Is B{C{obj}}ect an instance of an C{iterable} class or type?
391
+
392
+ @arg obj: The object (any C{type}).
393
+ @kwarg method: The name of the required method (C{str}).
394
+
395
+ @return: The C{base-class} if C{iterable}, C{None} otherwise.
396
+ '''
397
+ try: # <https://StackOverflow.com/questions/73568964>
398
+ for b in type(obj).__mro__[:-1]: # ignore C{object}
399
+ try:
400
+ if callable(b.__dict__[method]):
401
+ return b
402
+ except (AttributeError, KeyError):
403
+ pass
404
+ except (AttributeError, TypeError):
405
+ pass
406
+ return None
384
407
 
385
408
 
386
409
  try:
@@ -558,7 +581,7 @@ def map1(fun1, *xs): # XXX map_
558
581
  return tuple(map(fun1, xs))
559
582
 
560
583
 
561
- def map2(fun, *xs):
584
+ def map2(fun, *xs, **strict):
562
585
  '''Like Python's B{C{map}} but returning a C{tuple} of results.
563
586
 
564
587
  Unlike Python 2's built-in L{map}, Python 3+ L{map} returns a
@@ -568,10 +591,39 @@ def map2(fun, *xs):
568
591
 
569
592
  @arg fun: Function (C{callable}).
570
593
  @arg xs: Arguments (C{all positional}).
594
+ @kwarg strict: See U{Python 3.14+ map<https://docs.Python.org/
595
+ 3.14/library/functions.html#map>} (C{bool}).
571
596
 
572
597
  @return: Function results (C{tuple}).
573
598
  '''
574
- return tuple(map(fun, *xs))
599
+ return tuple(map(fun, *xs, **strict) if strict else map(fun, *xs))
600
+
601
+
602
+ def max2(*xs):
603
+ '''Return 2-tuple C{(max(xs), xs.index(max(xs)))}.
604
+ '''
605
+ return _max2min2(xs, max, max2)
606
+
607
+
608
+ def _max2min2(xs, _m, _m2):
609
+ '''(INTERNAL) Helper for C{max2} and C{min2}.
610
+ '''
611
+ if len(xs) == 1:
612
+ x = xs[0]
613
+ if isiterable(x) or isiterablen(x):
614
+ x, i = _m2(*x)
615
+ else:
616
+ i = 0
617
+ else:
618
+ x = _m(xs) # max or min
619
+ i = xs.index(x)
620
+ return x, i
621
+
622
+
623
+ def min2(*xs):
624
+ '''Return 2-tuple C{(min(xs), xs.index(min(xs)))}.
625
+ '''
626
+ return _max2min2(xs, min, min2)
575
627
 
576
628
 
577
629
  def neg(x, neg0=None):
pygeodesy/constants.py CHANGED
@@ -26,7 +26,7 @@ except ImportError: # Python 2-
26
26
  _inf, _nan = float(_INF_), float(_NAN_)
27
27
 
28
28
  __all__ = _ALL_LAZY.constants
29
- __version__ = '24.11.06'
29
+ __version__ = '24.12.22'
30
30
 
31
31
 
32
32
  def _copysign_0_0(y):
@@ -182,6 +182,7 @@ _9_0 = _float( 9) # PYCHOK expected
182
182
  _10_0 = _float( 10) # PYCHOK expected
183
183
  _16_0 = _float( 16) # PYCHOK expected
184
184
  _32_0 = _float( 32) # PYCHOK expected
185
+ _45_0 = _float( 45) # PYCHOK expected
185
186
  _60_0 = _float( 60) # PYCHOK expected
186
187
  _64_0 = _float( 64) # PYCHOK expected
187
188
  _90_0 = _float( 90) # PYCHOK expected
@@ -189,7 +190,6 @@ _100_0 = _float(_100_0) # PYCHOK expected
189
190
  _180_0 = _float( 180) # PYCHOK expected
190
191
  _270_0 = _float( 270) # PYCHOK expected
191
192
  _360_0 = _float( 360) # PYCHOK expected
192
- _400_0 = _float( 400) # PYCHOK expected
193
193
  _720_0 = _float( 720) # PYCHOK expected
194
194
  _1000_0 = _float(1000) # PYCHOK expected
195
195
  _3600_0 = _float(3600) # PYCHOK expected
@@ -27,7 +27,7 @@ __all__ = (_ALL_DEPRECATED.deprecated_bases +
27
27
  _ALL_DEPRECATED.deprecated_classes +
28
28
  _ALL_DEPRECATED.deprecated_consterns +
29
29
  _ALL_DEPRECATED.deprecated_functions)
30
- __version__ = '24.11.28'
30
+ __version__ = '24.12.31'
31
31
 
32
32
  if _unLazy0:
33
33
  from pygeodesy.deprecated import bases, datum, nvector, rhumbBase, \
@@ -22,7 +22,7 @@ from pygeodesy.trf import TRFXform7Tuple as _TRFXform7Tuple
22
22
  from pygeodesy.units import Bearing, Int, Lamd, Lat, Lon, Meter, Phid
23
23
 
24
24
  __all__ = _ALL_DEPRECATED.deprecated_classes
25
- __version__ = '24.11.07'
25
+ __version__ = '24.12.31'
26
26
 
27
27
 
28
28
  class _Deprecated_NamedTuple(_NamedTuple):
@@ -111,6 +111,62 @@ def Fn_rt(root, *xs, **name_RESIDUAL_raiser): # PYCHOK no cover
111
111
  Froot.__init__(self, root, *xs, **name_RESIDUAL_raiser)
112
112
 
113
113
 
114
+ def FrechetCosineAndoyerLambert(point1s, **kwds): # PYCHOK no cover
115
+ '''DEPRECATED on 2024.12.31, use class L{FrechetCosineLaw} with C{B{corr}=1}.'''
116
+ FrechetCosineLaw = _MODS.frechet.FrechetCosineLaw
117
+
118
+ class FrechetCosineAndoyerLambert(FrechetCosineLaw):
119
+ '''DEPRECATED on 2024.12.31, use class L{FrechetCosineLaw} with C{B{corr}=1}.
120
+ '''
121
+ def __init__(self, point1s, **seed_name__radius_wrap):
122
+ deprecated_class(self.__class__)
123
+ FrechetCosineLaw.__init__(self, point1s, corr=1, **seed_name__radius_wrap)
124
+
125
+ return FrechetCosineAndoyerLambert(point1s, **kwds)
126
+
127
+
128
+ def FrechetCosineForsytheAndoyerLambert(point1s, **kwds): # PYCHOK no cover
129
+ '''DEPRECATED on 2024.12.31, use class L{FrechetCosineLaw} with C{B{corr}=2}.'''
130
+ FrechetCosineLaw = _MODS.frechet.FrechetCosineLaw
131
+
132
+ class FrechetCosineForsytheAndoyerLambert(FrechetCosineLaw):
133
+ '''DEPRECATED on 2024.12.31, use class L{FrechetCosineLaw} with C{B{corr}=w}.
134
+ '''
135
+ def __init__(self, point1s, **seed_name__radius_wrap):
136
+ deprecated_class(self.__class__)
137
+ FrechetCosineLaw.__init__(self, point1s, corr=2, **seed_name__radius_wrap)
138
+
139
+ return FrechetCosineForsytheAndoyerLambert(point1s, **kwds)
140
+
141
+
142
+ def HausdorffCosineAndoyerLambert(point1s, **kwds): # PYCHOK no cover
143
+ '''DEPRECATED on 2024.12.31, use class L{HausdorffCosineLaw} with C{B{corr}=1}.'''
144
+ HausdorffCosineLaw = _MODS.hausdorff.HausdorffCosineLaw
145
+
146
+ class HausdorffCosineAndoyerLambert(HausdorffCosineLaw):
147
+ '''DEPRECATED on 2024.12.31, use class L{HausdorffCosineLaw} with C{B{corr}=1}.
148
+ '''
149
+ def __init__(self, point1s, **seed_name__radius_wrap):
150
+ deprecated_class(self.__class__)
151
+ HausdorffCosineLaw.__init__(self, point1s, corr=1, **seed_name__radius_wrap)
152
+
153
+ return HausdorffCosineAndoyerLambert(point1s, **kwds)
154
+
155
+
156
+ def HausdorffCosineForsytheAndoyerLambert(point1s, **kwds): # PYCHOK no cover
157
+ '''DEPRECATED on 2024.12.31, use class L{HausdorffCosineLaw} with C{B{corr}=2}.'''
158
+ HausdorffCosineLaw = _MODS.hausdorff.HausdorffCosineLaw
159
+
160
+ class HausdorffCosineForsytheAndoyerLambert(HausdorffCosineLaw):
161
+ '''DEPRECATED on 2024.12.31, use class L{HausdorffCosineLaw} with C{B{corr}=2}
162
+ '''
163
+ def __init__(self, point1s, **seed_name__radius_wrap):
164
+ deprecated_class(self.__class__)
165
+ HausdorffCosineLaw.__init__(self, point1s, corr=2, **seed_name__radius_wrap)
166
+
167
+ return HausdorffCosineForsytheAndoyerLambert(point1s, **kwds)
168
+
169
+
114
170
  def HeightIDW(knots, **kwds): # PYCHOK no cover
115
171
  '''DEPRECATED, use class L{HeightIDWeuclidean}.'''
116
172
  HeightIDWeuclidean = _MODS.heights.HeightIDWeuclidean
@@ -151,6 +207,34 @@ def HeightIDW3(knots, **kwds): # PYCHOK no cover
151
207
  return HeightIDW3(knots, **kwds)
152
208
 
153
209
 
210
+ def HeightIDWcosineAndoyerLambert(knots, **kwds): # PYCHOK no cover
211
+ '''DEPRECATED on 2024.12.31, use class L{HeightIDWcosineLaw} with C{B{corr}=1}.'''
212
+ HeightIDWcosineLaw = _MODS.heights.HeightIDWcosineLaw
213
+
214
+ class HeightIDWcosineAndoyerLambert(HeightIDWcosineLaw):
215
+ '''DEPRECATED on 2024.12.31, use class L{HeightIDWcosineLaw} with C{B{corr}=1}.
216
+ '''
217
+ def __init__(self, knots, **beta_name__datum_wrap):
218
+ deprecated_class(self.__class__)
219
+ HeightIDWcosineLaw.__init__(self, knots, corr=1, **beta_name__datum_wrap)
220
+
221
+ return HeightIDWcosineAndoyerLambert(knots, **kwds)
222
+
223
+
224
+ def HeightIDWcosineForsytheAndoyerLambert(knots, **kwds): # PYCHOK no cover
225
+ '''DEPRECATED on 2024.12.31, use class L{HeightIDWcosineLaw} with C{B{corr}=2}.'''
226
+ HeightIDWcosineLaw = _MODS.heights.HeightIDWcosineLaw
227
+
228
+ class HeightIDWcosineForsytheAndoyerLambert(HeightIDWcosineLaw):
229
+ '''DEPRECATED on 2024.12.31, use class L{HeightIDWcosineLaw} with C{B{corr}=2}.
230
+ '''
231
+ def __init__(self, knots, **beta_name__datum_wrap):
232
+ deprecated_class(self.__class__)
233
+ HeightIDWcosineLaw.__init__(self, knots, corr=2, **beta_name__datum_wrap)
234
+
235
+ return HeightIDWcosineForsytheAndoyerLambert(knots, **kwds)
236
+
237
+
154
238
  class Lam_(Lamd):
155
239
  '''DEPRECATED on 2024.06.15, use class L{Lamd}.'''
156
240
  def __init__(self, *args, **kwds): # PYCHOK no cover
@@ -11,11 +11,11 @@ from pygeodesy.ellipsoids import Ellipsoid, Ellipsoids, Curvature2Tuple
11
11
  from pygeodesy.lazily import _ALL_DEPRECATED, _ALL_OTHER
12
12
 
13
13
  __all__ = _ALL_DEPRECATED.deprecated_datum
14
- __version__ = '24.06.15'
14
+ __version__ = '24.12.31'
15
15
 
16
- assert _ALL_OTHER(Curvature2Tuple, Datum, Ellipsoid, Transform) + \
17
- tuple(_.name for _ in (Datums, Ellipsoids, Transforms,
18
- R_FM, R_KM, R_M, R_MA, R_MB, R_NM, R_SM, R_VM)) == __all__
16
+ assert _ALL_OTHER(Curvature2Tuple, Datum, Ellipsoid, Transform) + tuple(_.name for _ in
17
+ (Datums, Ellipsoids, Transforms,
18
+ R_FM, R_KM, R_M, R_MA, R_MB, R_NM, R_SM, R_VM)) == __all__
19
19
 
20
20
  # **) MIT License
21
21
  #
@@ -14,7 +14,7 @@ from pygeodesy.props import deprecated_function
14
14
  from pygeodesy.units import _1mm, Number_, Scalar_
15
15
 
16
16
  __all__ = _ALL_DEPRECATED.deprecated_functions
17
- __version__ = '24.11.28'
17
+ __version__ = '24.12.31'
18
18
 
19
19
  _WGS84 = _UTM = object()
20
20
 
@@ -84,6 +84,30 @@ def copysign(x, y): # PYCHOK no cover
84
84
  return _MODS.basics.copysign0(x, y)
85
85
 
86
86
 
87
+ @deprecated_function
88
+ def cosineAndoyerLambert(lat1, lon1, lat2, lon2, **datum_wrap):
89
+ '''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw} with C{B{corr}=1}.'''
90
+ return _MODS.formy.cosineLaw(lat1, lon1, lat2, lon2, corr=1, **datum_wrap)
91
+
92
+
93
+ @deprecated_function
94
+ def cosineAndoyerLambert_(phi2, phi1, lam21, **datum):
95
+ '''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw_} with C{B{corr}=1}.'''
96
+ return _MODS.formy.cosineLaw_(phi2, phi1, lam21, corr=1, **datum)
97
+
98
+
99
+ @deprecated_function
100
+ def cosineForsytheAndoyerLambert(lat1, lon1, lat2, lon2, **datum_wrap):
101
+ '''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw} with C{B{corr}=2}.'''
102
+ return _MODS.formy.cosineLaw(lat1, lon1, lat2, lon2, corr=2, **datum_wrap)
103
+
104
+
105
+ @deprecated_function
106
+ def cosineForsytheAndoyerLambert_(phi2, phi1, lam21, **datum):
107
+ '''DEPRECATED on 2024.12.31, use function L{pygeodesy.cosineLaw_} with C{B{corr}=2}.'''
108
+ return _MODS.formy.cosineLaw_(phi2, phi1, lam21, corr=2, **datum)
109
+
110
+
87
111
  @deprecated_function
88
112
  def decodeEPSG2(arg): # PYCHOK no cover
89
113
  '''DEPRECATED, use function L{epsg.decode2}.