pygeodesy 24.5.24__py2.py3-none-any.whl → 24.6.1__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.
- {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/METADATA +6 -5
- {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/RECORD +57 -57
- pygeodesy/__init__.py +4 -4
- pygeodesy/auxilats/__init__.py +1 -1
- pygeodesy/auxilats/__main__.py +2 -2
- pygeodesy/auxilats/auxAngle.py +4 -4
- pygeodesy/basics.py +39 -5
- pygeodesy/booleans.py +3 -3
- pygeodesy/constants.py +3 -3
- pygeodesy/deprecated/functions.py +9 -3
- pygeodesy/ecef.py +22 -21
- pygeodesy/ellipsoidalBase.py +15 -16
- pygeodesy/ellipsoidalGeodSolve.py +2 -2
- pygeodesy/ellipsoidalKarney.py +3 -3
- pygeodesy/ellipsoids.py +6 -5
- pygeodesy/errors.py +19 -9
- pygeodesy/etm.py +16 -21
- pygeodesy/fmath.py +9 -20
- pygeodesy/formy.py +60 -74
- pygeodesy/frechet.py +11 -11
- pygeodesy/fsums.py +59 -25
- pygeodesy/geodesicx/__init__.py +1 -1
- pygeodesy/geodesicx/__main__.py +2 -2
- pygeodesy/geodesicx/gx.py +3 -5
- pygeodesy/geodsolve.py +2 -2
- pygeodesy/geohash.py +14 -14
- pygeodesy/hausdorff.py +12 -12
- pygeodesy/heights.py +5 -5
- pygeodesy/internals.py +3 -3
- pygeodesy/karney.py +8 -7
- pygeodesy/lazily.py +2 -2
- pygeodesy/ltp.py +62 -44
- pygeodesy/ltpTuples.py +202 -147
- pygeodesy/mgrs.py +24 -24
- pygeodesy/named.py +68 -70
- pygeodesy/nvectorBase.py +2 -2
- pygeodesy/osgr.py +40 -48
- pygeodesy/points.py +10 -10
- pygeodesy/props.py +29 -16
- pygeodesy/rhumb/aux_.py +13 -15
- pygeodesy/rhumb/bases.py +12 -5
- pygeodesy/rhumb/ekx.py +24 -18
- pygeodesy/rhumb/solve.py +13 -10
- pygeodesy/simplify.py +16 -16
- pygeodesy/solveBase.py +14 -14
- pygeodesy/sphericalBase.py +17 -21
- pygeodesy/sphericalTrigonometry.py +17 -17
- pygeodesy/trf.py +9 -7
- pygeodesy/triaxials.py +2 -2
- pygeodesy/ups.py +66 -70
- pygeodesy/utily.py +3 -3
- pygeodesy/utm.py +152 -156
- pygeodesy/utmups.py +38 -38
- pygeodesy/utmupsBase.py +102 -106
- pygeodesy/webmercator.py +43 -51
- {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.5.24.dist-info → PyGeodesy-24.6.1.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PyGeodesy
|
|
3
|
-
Version: 24.
|
|
3
|
+
Version: 24.6.1
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.10
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.12
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
26
|
Classifier: Topic :: Software Development
|
|
26
27
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
27
28
|
|
|
@@ -118,7 +119,7 @@ The tests ran with Python 3.12.3 (with geographiclib_ 2.0), 3.11.5 (with geograp
|
|
|
118
119
|
1.24.2 and scipy_ 1.10.1), Python 3.10.8 (with geographiclib_ 2.0, numpy_ 1.23.3, scipy_ 1.9.1,
|
|
119
120
|
GeoConvert_ 2.2, GeodSolve_ 2.2 and RhumbSolve_ 2.2), Python 3.9.6 and Python 2.7.18 (with geographiclib_
|
|
120
121
|
1.50, numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.2, GeodSolve_ 2.2 and RhumbSolve_ 2.2), all on macOS
|
|
121
|
-
14.
|
|
122
|
+
14.5 Sonoma and in 64-bit only.
|
|
122
123
|
|
|
123
124
|
All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
|
|
124
125
|
and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
|
|
@@ -143,7 +144,7 @@ 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
|
|
|
143
144
|
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,
|
|
144
145
|
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_
|
|
145
146
|
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`_
|
|
146
|
-
3.5.3 (and numpy_ 1.11.3) on macOS 14.0-
|
|
147
|
+
3.5.3 (and numpy_ 1.11.3) on macOS 14.0-4.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1 Big
|
|
147
148
|
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
|
|
148
149
|
10.11 El Capitan and/or MacOS X 10.10 Yosemite, with Pythonista_ 3.2 (with geographiclib 1.50 or 1.49 and
|
|
149
150
|
numpy 1.8.0) on iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or iPhone12, with Pythonista_
|
|
@@ -154,11 +155,11 @@ Notes
|
|
|
154
155
|
=====
|
|
155
156
|
|
|
156
157
|
All Python source code has been statically checked_ with PyChecker_, PyFlakes_, PyCodeStyle_ (formerly Pep8)
|
|
157
|
-
and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64-bit on macOS 14.
|
|
158
|
+
and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64-bit on macOS 14.5 Sonoma.
|
|
158
159
|
|
|
159
160
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
160
161
|
|
|
161
|
-
*Last updated:
|
|
162
|
+
*Last updated: June 01, 2024.*
|
|
162
163
|
|
|
163
164
|
License
|
|
164
165
|
=======
|
|
@@ -1,86 +1,86 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=OjQWLVL3lst38mHti3vDOiO8W1oKhBMV6a9gnDehDvI,41046
|
|
3
3
|
pygeodesy/__main__.py,sha256=UmTd6Qw20g_pgnQjdaHePm-xuOEBi1tUNRLO0eL0-rU,4593
|
|
4
4
|
pygeodesy/albers.py,sha256=2t8EjmoFWmkdTb4DUHMlECkwTPDS1wpNf92WD_UWXds,31081
|
|
5
5
|
pygeodesy/azimuthal.py,sha256=RQdZbHoLlHSamhnJ4GMrrRU6UrYmTpa1yK59nYB-A4o,50252
|
|
6
|
-
pygeodesy/basics.py,sha256=
|
|
7
|
-
pygeodesy/booleans.py,sha256=
|
|
6
|
+
pygeodesy/basics.py,sha256=Ez1tApjFnk6vNsYXeZzi28hYsa5AhUYobLS1Anna2g0,29381
|
|
7
|
+
pygeodesy/booleans.py,sha256=24uqW-VvA8sJWIC8PfncPIk6EdknrXHZvg7tbk4ChSY,74143
|
|
8
8
|
pygeodesy/cartesianBase.py,sha256=P3EUMYKad9HxNSQQJTbPu4QehQu5HDxqOo9-xYsTdp4,47366
|
|
9
9
|
pygeodesy/clipy.py,sha256=3ysIEWQ89HjvLnSlZm0nZAt9EN5AQxIs1sLLM8yF9zM,27675
|
|
10
|
-
pygeodesy/constants.py,sha256=-
|
|
10
|
+
pygeodesy/constants.py,sha256=-weWOuHwE-qI6pYRLcTucI0KNcNJm6vPNzxwrJzACKs,19192
|
|
11
11
|
pygeodesy/css.py,sha256=RXlLh76tVDFClVh7L1U3FFrLZvjBPFASDf3vq8dHecE,25778
|
|
12
12
|
pygeodesy/datums.py,sha256=GYbtvPyzDChHYgnNleBqsM-MNwLNQqrO2_MMV4Z9kmI,34006
|
|
13
13
|
pygeodesy/dms.py,sha256=VujWxk1L2Kp6OMfnu0XPI-j8bnyJ33sFmtB9_MbHqSU,44455
|
|
14
|
-
pygeodesy/ecef.py,sha256=
|
|
14
|
+
pygeodesy/ecef.py,sha256=2wAvnAtDMLw0nNmAnzl_ebm8ISO5JLcy3dPojwDLWk8,59926
|
|
15
15
|
pygeodesy/elevations.py,sha256=1qZM2w0rDF7jHunydpTEmdLwOwF81KUL9L6RALJC7K4,10807
|
|
16
|
-
pygeodesy/ellipsoidalBase.py,sha256=
|
|
16
|
+
pygeodesy/ellipsoidalBase.py,sha256=HgZCXrNEji896GuXGfM34w6wdUug4UwEqWCjk4XgnfM,56687
|
|
17
17
|
pygeodesy/ellipsoidalBaseDI.py,sha256=lPUPP5lVsCzI5RIukxmJ5MH6j2Mb7mdvftQ0tsvsW6g,38585
|
|
18
18
|
pygeodesy/ellipsoidalExact.py,sha256=a_2C6S6hGRumavy5giRoC9QAhnjqpujiXyu92od6nKo,16951
|
|
19
|
-
pygeodesy/ellipsoidalGeodSolve.py,sha256=
|
|
20
|
-
pygeodesy/ellipsoidalKarney.py,sha256=
|
|
19
|
+
pygeodesy/ellipsoidalGeodSolve.py,sha256=nzT6KOubBOxXRHYafOo5ByQ90VOY1zvaS7byhnwaFqE,16830
|
|
20
|
+
pygeodesy/ellipsoidalKarney.py,sha256=m07XlZKWvBnOzIKV6P7RNttk8G5s2JRBH2RVF_lg0_k,19243
|
|
21
21
|
pygeodesy/ellipsoidalNvector.py,sha256=JuxCUqUtot4e8587Q84Npc1_SdahywTYsybRSMTRtSc,30265
|
|
22
22
|
pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7cn4,26004
|
|
23
|
-
pygeodesy/ellipsoids.py,sha256=
|
|
23
|
+
pygeodesy/ellipsoids.py,sha256=_fbQy9k_k40Li6jAOlHcSlEPPUnliZsqjIR2be3h2QI,120238
|
|
24
24
|
pygeodesy/elliptic.py,sha256=-80MbZvRPk-TeA_ggkfXhjuPv07MzsB4HxNF7gbdhB4,42501
|
|
25
25
|
pygeodesy/epsg.py,sha256=oWHX_QVChE5roktAyXUmPmX49XHiryYmXTHxQzrAprE,8222
|
|
26
|
-
pygeodesy/errors.py,sha256=
|
|
27
|
-
pygeodesy/etm.py,sha256=
|
|
28
|
-
pygeodesy/fmath.py,sha256=
|
|
29
|
-
pygeodesy/formy.py,sha256=
|
|
30
|
-
pygeodesy/frechet.py,sha256=
|
|
26
|
+
pygeodesy/errors.py,sha256=iKiloJ1wvI7v_DZi-yE9f7zWuBlZrw9brCyb9UVIejs,28441
|
|
27
|
+
pygeodesy/etm.py,sha256=DeX0mZQcHK0KbmOZodp2iv2TEFtRjYziSL9oUEV2YxU,44952
|
|
28
|
+
pygeodesy/fmath.py,sha256=EOHD0uZ8VULZtXAk8tVeuPaSTozPDCN8GJcemCo-jqg,33709
|
|
29
|
+
pygeodesy/formy.py,sha256=JKFqC7OlxBvB9sOH9OaWJX4bLkf0dMqW3LcVrwdnt7A,75121
|
|
30
|
+
pygeodesy/frechet.py,sha256=YAEWRJbX2rYjB94tvBlBUWK2g1eOHgk1t1dtoi9wtAY,34363
|
|
31
31
|
pygeodesy/fstats.py,sha256=4eIhzSCMnn-2nVP3Q-5cCWCI-rvH0CE-zkk9hp3Pvn8,28642
|
|
32
|
-
pygeodesy/fsums.py,sha256=
|
|
32
|
+
pygeodesy/fsums.py,sha256=uPsR2HGSq6KT9Tvmai7KYl99ei9UkeA0TDAnXd7VIYo,80451
|
|
33
33
|
pygeodesy/gars.py,sha256=gVnLQIEofyf_dA8dhpLrmhtIxGhBHZVRw8PbWgYUnnY,11400
|
|
34
34
|
pygeodesy/geodesicw.py,sha256=PwUO5jCGExhMt6cKkQwVnPTHMMVadkTrd6pV4UWZYNY,27064
|
|
35
|
-
pygeodesy/geodsolve.py,sha256=
|
|
36
|
-
pygeodesy/geohash.py,sha256=
|
|
35
|
+
pygeodesy/geodsolve.py,sha256=_LDW6PSO_z2v77MUuKsYsRbutI2c5ldPZfR_b9GthFw,22021
|
|
36
|
+
pygeodesy/geohash.py,sha256=Z-r58-9nm8M17O7q5qTddS1N3B4eFn6ZgNl9t4dcJY8,32399
|
|
37
37
|
pygeodesy/geoids.py,sha256=25HrOgsCvFnXTjh3ghc1Y1FQKjerPpo_OLlQBNayK_0,80887
|
|
38
|
-
pygeodesy/hausdorff.py,sha256=
|
|
39
|
-
pygeodesy/heights.py,sha256=
|
|
40
|
-
pygeodesy/internals.py,sha256=
|
|
38
|
+
pygeodesy/hausdorff.py,sha256=fSGq6mHPpY8_uC_dZz4lLc7gZmViHU6TzFjZ03YpMzA,34737
|
|
39
|
+
pygeodesy/heights.py,sha256=n5BnaF5smUBOOGk8-veAv9jOGycjTwhl5gJWkGRwejg,43575
|
|
40
|
+
pygeodesy/internals.py,sha256=INfBdSTWaHJf5xcSaddJEtqE8TJLcUIe8tHeORMRK64,19346
|
|
41
41
|
pygeodesy/interns.py,sha256=QoDo_S1qY8IJVqI0pH2jGESLEexEF480PuwWZnTVrRI,23600
|
|
42
42
|
pygeodesy/iters.py,sha256=ML14NjtDpfPRtDJQsUYUtJZ81HH4NPFrCjecxwkcIuM,20309
|
|
43
|
-
pygeodesy/karney.py,sha256=
|
|
43
|
+
pygeodesy/karney.py,sha256=iGoi32hDPdaMR39i6pypcbY2hqvHFVPFROYcjjA-Jrw,35121
|
|
44
44
|
pygeodesy/ktm.py,sha256=itQElJegrfhpAuMujAWFTcyuMSeKIgSyw5qkkHFs7vE,27519
|
|
45
45
|
pygeodesy/latlonBase.py,sha256=DglIfu916vtMV8-wEUs4GrXmk698-j3dkSud8FOBB6o,77762
|
|
46
|
-
pygeodesy/lazily.py,sha256=
|
|
46
|
+
pygeodesy/lazily.py,sha256=Oc5J9yuktR9ZBk-Dwn3r2oA0zt1-8oAx2PUmpZ-qOPg,45498
|
|
47
47
|
pygeodesy/lcc.py,sha256=6vGht5JCN_BYYzbU2YCK6jz3PFcVymvY-RK2Uflt7ZE,25745
|
|
48
|
-
pygeodesy/ltp.py,sha256=
|
|
49
|
-
pygeodesy/ltpTuples.py,sha256=
|
|
50
|
-
pygeodesy/mgrs.py,sha256=
|
|
51
|
-
pygeodesy/named.py,sha256=
|
|
48
|
+
pygeodesy/ltp.py,sha256=ciPmdUv8Z5z-wr8kmU7AKxO8d2nYx3mmjnnaWJVN74w,50135
|
|
49
|
+
pygeodesy/ltpTuples.py,sha256=secLaYIdGYXg1wcOivzjY9tpPsHzu4ckphjkygeZrL8,58424
|
|
50
|
+
pygeodesy/mgrs.py,sha256=2uuWL56hWpip6lJa071WXe5_hILlo5RaNW3sfCV25NQ,29059
|
|
51
|
+
pygeodesy/named.py,sha256=C75ZNJZ2B0EF3EmAGbuUhziPgdGHACRalVycLR0Nt5s,51195
|
|
52
52
|
pygeodesy/namedTuples.py,sha256=N8fyc6OMdXNHgOk_tK2zhuWwBq6oB-QcAY-PG9xIgWk,27535
|
|
53
|
-
pygeodesy/nvectorBase.py,sha256=
|
|
54
|
-
pygeodesy/osgr.py,sha256=
|
|
55
|
-
pygeodesy/points.py,sha256=
|
|
56
|
-
pygeodesy/props.py,sha256=
|
|
53
|
+
pygeodesy/nvectorBase.py,sha256=ZSIzieN2gN3ZWbJJ0TM_5Jqv5tXqpGHlwnD90kjgtY4,28830
|
|
54
|
+
pygeodesy/osgr.py,sha256=g-uCTy735aUNh5odTp27PY8CLDnTaquc1_oTs8Qv6zg,30827
|
|
55
|
+
pygeodesy/points.py,sha256=izCcYGX09v7Lv7_pDIP4mJMfEXbgFzHdw0LIsW5R3qE,64412
|
|
56
|
+
pygeodesy/props.py,sha256=8dGmTpdEABnLbBngmaOIpM0h4NYiBteMOHc_r4iNpAg,21988
|
|
57
57
|
pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
|
|
58
|
-
pygeodesy/simplify.py,sha256=
|
|
59
|
-
pygeodesy/solveBase.py,sha256=
|
|
60
|
-
pygeodesy/sphericalBase.py,sha256=
|
|
58
|
+
pygeodesy/simplify.py,sha256=NybC-pfze0ObEm4ZCz6ZQrjJlQ-QyA83E6mSJqCuKq4,25223
|
|
59
|
+
pygeodesy/solveBase.py,sha256=wKOrVyULKf4SFBMcgWw03sCVhPnHZ9fSlJwGEMF85_w,16759
|
|
60
|
+
pygeodesy/sphericalBase.py,sha256=CuLD4lVKPGnYg71UFHJz_BbJj3FNxxyzFZCnadfuUy0,31873
|
|
61
61
|
pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
|
|
62
|
-
pygeodesy/sphericalTrigonometry.py,sha256=
|
|
62
|
+
pygeodesy/sphericalTrigonometry.py,sha256=SqkFi2_Cy1LOzlZvvO4tpwxkS-AEBhdfRTgopXFTISw,64208
|
|
63
63
|
pygeodesy/streprs.py,sha256=AZzil7Encfb1E7NG7tNHHivuayKQ-LZJJTMVumUhsEQ,23993
|
|
64
|
-
pygeodesy/trf.py,sha256=
|
|
65
|
-
pygeodesy/triaxials.py,sha256=
|
|
64
|
+
pygeodesy/trf.py,sha256=AP-4s-hGWnrjhYfEfF0SnIVE6vVNwU6s0hNjm6G0GsU,119019
|
|
65
|
+
pygeodesy/triaxials.py,sha256=wK_KGdl3OdYKzbqYD6v1mbjjLE7ICpAfF7eQf1A3kF0,62039
|
|
66
66
|
pygeodesy/units.py,sha256=DIllydnoz4rfw3ST91D_6-K_QGFiCqNcYvf6B_mUJMs,38827
|
|
67
67
|
pygeodesy/unitsBase.py,sha256=FA4DuXUb88YYsDS3aIkd7BGvj70JATMeuBV_efshUx0,13544
|
|
68
|
-
pygeodesy/ups.py,sha256=
|
|
69
|
-
pygeodesy/utily.py,sha256=
|
|
70
|
-
pygeodesy/utm.py,sha256=
|
|
71
|
-
pygeodesy/utmups.py,sha256=
|
|
72
|
-
pygeodesy/utmupsBase.py,sha256=
|
|
68
|
+
pygeodesy/ups.py,sha256=p9F49qQ9tGGf18fnFWJ5DdqQA-FdNe_BcuIGAi5tIoE,23419
|
|
69
|
+
pygeodesy/utily.py,sha256=qT7J7kv4CO0vSz705cXIHr4d6muT6xi5ZhR3cjvYXfo,36143
|
|
70
|
+
pygeodesy/utm.py,sha256=ZxBvDcCkdnmTRzMOHyhADHdZJSUo0U0xBAsg0rEeTHk,31148
|
|
71
|
+
pygeodesy/utmups.py,sha256=_GCrF3TljW4k5W9uKwilO1ivPLAbOArxlzi7jPJ4rbc,13226
|
|
72
|
+
pygeodesy/utmupsBase.py,sha256=dO7jX0MunLZykTkvN47HuNhHTZNN1OOhNOdC-qxoAk0,18762
|
|
73
73
|
pygeodesy/vector2d.py,sha256=zJq5PB777_mFJpKD-rt_T0Vm4SNbVwF7pc3KxX8uCT8,34994
|
|
74
74
|
pygeodesy/vector3d.py,sha256=danoz3QA90EJjqr2dmLPCYP5UG0m_pgiyNuNBW0aNJ8,45065
|
|
75
75
|
pygeodesy/vector3dBase.py,sha256=GhEq2oFfLoF57cDy6lvsB0b-dgTneMcrtDSyIiGr4mY,35630
|
|
76
|
-
pygeodesy/webmercator.py,sha256=
|
|
76
|
+
pygeodesy/webmercator.py,sha256=J89VAROczHNpD34AuIWD3vxfogk3ZKoYj1w0lXOCkYA,14968
|
|
77
77
|
pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
|
|
78
78
|
pygeodesy/auxilats/_CX_4.py,sha256=U41njj8Pu8cHMGuoUUVA20QIvRJAq-VGCnyoKJl0Ylo,8662
|
|
79
79
|
pygeodesy/auxilats/_CX_6.py,sha256=x4hrHxunjqqkEsZbVW1dyn3R5mR8EWYOuX77RzDEyh4,14856
|
|
80
80
|
pygeodesy/auxilats/_CX_8.py,sha256=t-OO48t4cCOsOgMi1FoyPw2DQqybVZFsgQMqAYP-jKY,25304
|
|
81
|
-
pygeodesy/auxilats/__init__.py,sha256=
|
|
82
|
-
pygeodesy/auxilats/__main__.py,sha256=
|
|
83
|
-
pygeodesy/auxilats/auxAngle.py,sha256=
|
|
81
|
+
pygeodesy/auxilats/__init__.py,sha256=tj9fglSENe7whplLC9YCl--EQNyMNd1g26BPLT2JNr0,2881
|
|
82
|
+
pygeodesy/auxilats/__main__.py,sha256=Vuj1YSp1LV0zejVzi6EYauka1Dv8kwOHI_aeHxQEVYk,2899
|
|
83
|
+
pygeodesy/auxilats/auxAngle.py,sha256=rljkFpqLhCMZVMo9u0xNBmGZV0KxsmIbI41d5itcZ3E,16740
|
|
84
84
|
pygeodesy/auxilats/auxDLat.py,sha256=U3BHF6AkW5--nrwH9whL5wZVIZLH_keRLfUz6c6KBx4,10950
|
|
85
85
|
pygeodesy/auxilats/auxDST.py,sha256=bdNEh3TdABWH7qW6ngZx5SnzDM3B5rtPLvYhvCnFsKc,10497
|
|
86
86
|
pygeodesy/auxilats/auxLat.py,sha256=GUpK5_rcL8IHjC209dhIibYYBJudFU0Yk7JD-KUApbc,32529
|
|
@@ -90,7 +90,7 @@ pygeodesy/deprecated/bases.py,sha256=nxUtxscAg5cb7HEzTSmPJFafLc9Ad2SL5ovwkYaU5z8
|
|
|
90
90
|
pygeodesy/deprecated/classes.py,sha256=PXgss-2kEu3bzaxvSeVZJGdcRqsdi_6_aRqsESyUQKQ,11662
|
|
91
91
|
pygeodesy/deprecated/consterns.py,sha256=W-rQiw443_zCFEUzjCGykGND-i5P_ghEIyJUSGg7-Nc,1908
|
|
92
92
|
pygeodesy/deprecated/datum.py,sha256=KfuMA64LYGMj1voW2uai2RGcugtWdpvlOL6UHJvpTeQ,1875
|
|
93
|
-
pygeodesy/deprecated/functions.py,sha256
|
|
93
|
+
pygeodesy/deprecated/functions.py,sha256=nwYgLqw9Wy6ieDxQGZJ-dIeBaF4IvmNBFx9AcHwiBlE,13907
|
|
94
94
|
pygeodesy/deprecated/nvector.py,sha256=_dZf84RdmPr7e7i8Yi683R-8Mqn0ipTqIsDhNl29hGo,2117
|
|
95
95
|
pygeodesy/deprecated/rhumbBase.py,sha256=d7YKW--dnRpobB2CSvhFsntWF0B5-HYJqID2pv5lD5k,1375
|
|
96
96
|
pygeodesy/deprecated/rhumbaux.py,sha256=n29xazYMbVG4MJkLjAGu8B88bbcFF5xnvuj9xSxjfIk,1428
|
|
@@ -99,18 +99,18 @@ pygeodesy/deprecated/rhumbx.py,sha256=OS0p_meaoVrpZe5UhK6qZljjlrGpL0pCHWw8gofw7k
|
|
|
99
99
|
pygeodesy/geodesicx/_C4_24.py,sha256=kS4XMR9m7iBs01V8K0Oz9qTYmjN-icIQGpc_8iwVhig,90750
|
|
100
100
|
pygeodesy/geodesicx/_C4_27.py,sha256=bPbj2Ckrn9WJglm3SNTXyMkULNwANM0tCQ-LKxP1L58,134258
|
|
101
101
|
pygeodesy/geodesicx/_C4_30.py,sha256=QZO8p971ztJwDGLOaJYgIhklztz9GlqbtS-xRP_E7o4,201964
|
|
102
|
-
pygeodesy/geodesicx/__init__.py,sha256=
|
|
103
|
-
pygeodesy/geodesicx/__main__.py,sha256=
|
|
104
|
-
pygeodesy/geodesicx/gx.py,sha256=
|
|
102
|
+
pygeodesy/geodesicx/__init__.py,sha256=0_wTYAkvfJ2xVTzw5Zo9qQlSQIT7Q_PUwC_IqFQkrWA,2446
|
|
103
|
+
pygeodesy/geodesicx/__main__.py,sha256=JnKrYmg1q9J5wRRqUy-dQ9abj2-2jpWtrolMMaFfWiY,3176
|
|
104
|
+
pygeodesy/geodesicx/gx.py,sha256=Luu-bmgX9WAJ7sVNkeLRuWUUj-ndp4FGafe71xC3H2k,61650
|
|
105
105
|
pygeodesy/geodesicx/gxarea.py,sha256=-Kwe6spe2MSQbeLFDd6UN2NOi4JOjYhHAEzonOU3u4A,19409
|
|
106
106
|
pygeodesy/geodesicx/gxbases.py,sha256=nSQpDPuRQFkkzvjOaalBTHOQCYT1fhSOb5uy-5NvvSA,5215
|
|
107
107
|
pygeodesy/geodesicx/gxline.py,sha256=GP7BXfpsePLZy0SLLiIO6ytWKFpBLuPsOaL2Z_-45iU,27373
|
|
108
108
|
pygeodesy/rhumb/__init__.py,sha256=70qKVuNKkddfqMSxZ9c0VCZM1w0_Ka_nBWwtpfxxh2o,2207
|
|
109
|
-
pygeodesy/rhumb/aux_.py,sha256=
|
|
110
|
-
pygeodesy/rhumb/bases.py,sha256=
|
|
111
|
-
pygeodesy/rhumb/ekx.py,sha256=
|
|
112
|
-
pygeodesy/rhumb/solve.py,sha256=
|
|
113
|
-
PyGeodesy-24.
|
|
114
|
-
PyGeodesy-24.
|
|
115
|
-
PyGeodesy-24.
|
|
116
|
-
PyGeodesy-24.
|
|
109
|
+
pygeodesy/rhumb/aux_.py,sha256=UJEnoam_MLx2dBxgzjn_zU59f9wwDDNotdsV3ccWZFU,16652
|
|
110
|
+
pygeodesy/rhumb/bases.py,sha256=J8fXg42CcAI1VR4Hz-MctOwUs029PWRTRIo6sSZYo8I,54089
|
|
111
|
+
pygeodesy/rhumb/ekx.py,sha256=GZLJOqAEy_120q27rdt7kyEvkuoBPk6LOhOzjPOTOr8,24084
|
|
112
|
+
pygeodesy/rhumb/solve.py,sha256=a0ynvD3MI-i3-8gSYcUojyYfkc_e7BqOxAOX-b2KFNQ,27982
|
|
113
|
+
PyGeodesy-24.6.1.dist-info/METADATA,sha256=SUy_uel3BJloCDLkVOyxIc83clB0Zhao6vQtageyyKg,19411
|
|
114
|
+
PyGeodesy-24.6.1.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
115
|
+
PyGeodesy-24.6.1.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
116
|
+
PyGeodesy-24.6.1.dist-info/RECORD,,
|
pygeodesy/__init__.py
CHANGED
|
@@ -133,7 +133,7 @@ U{geographiclib<https://PyPI.org/project/geographiclib>} 1.50, U{numpy<https://P
|
|
|
133
133
|
1.16.6, U{scipy<https://PyPI.org/project/scipy>} 1.2.2, U{GeoConvert
|
|
134
134
|
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2, U{GeodSolve
|
|
135
135
|
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2 and U{RhumbSolve
|
|
136
|
-
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2), all on macOS 14.
|
|
136
|
+
<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.2), all on macOS 14.5 Sonoma and
|
|
137
137
|
in 64-bit only.
|
|
138
138
|
|
|
139
139
|
All tests ran with and without C{lazy import} for Python 3 and with command line option C{-W default} and
|
|
@@ -164,7 +164,7 @@ Previously, the tests were run with Python 3.12.0-2, 3.11.2-4, 3.10.1-7, 3.9.1,
|
|
|
164
164
|
1.16.5, 1.16.2, 1.15.2, 1.14.0, 1.13.1, 1.8.0rc1 or 1.6.2 and U{scipy<https://PyPI.org/project/scipy>} 1.5.0), U{PyPy
|
|
165
165
|
<https://PyPy.org>} 7.3.0 (Python 2.7.13 and 3.6.9), U{PyPy<https://PyPy.org>} 6.0.0 (Python 2.7.13 and 3.5.3)
|
|
166
166
|
and U{Intel-Python<https://software.Intel.com/en-us/distribution-for-python>} 3.5.3 (and U{numpy
|
|
167
|
-
<https://PyPI.org/project/numpy>} 1.11.3) on macOS 14.0-
|
|
167
|
+
<https://PyPI.org/project/numpy>} 1.11.3) on macOS 14.0-4.1 Sonoma, 13.0-5.2 Ventura, 12.1-6 Monterey, 11.0-5.2-6.1
|
|
168
168
|
Big 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
|
|
169
169
|
10.11 El Capitan and/or MacOS X 10.10 Yosemite, with U{Pythonista<https://OMZ-Software.com/pythonista>}3.2 (with
|
|
170
170
|
geographiclib 1.50 or 1.49 and numpy 1.8.0) on iOS 14.4.2, 11.4.1, 12.0-3 on iPad4, iPhone6, iPhone10 and/or
|
|
@@ -179,7 +179,7 @@ All Python source code has been statically U{checked<https://GitHub.com/ActiveSt
|
|
|
179
179
|
Python/546532_PyChecker_postprocessor>} with U{PyChecker<https://PyPI.org/project/pychecker>}, U{PyFlakes
|
|
180
180
|
<https://PyPI.org/project/pyflakes>}, U{PyCodeStyle<https://PyPI.org/project/pycodestyle>} (formerly Pep8) and
|
|
181
181
|
U{McCabe<https://PyPI.org/project/mccabe>} using Python 2.7.18 and with U{Flake8<https://PyPI.org/project/flake8>}
|
|
182
|
-
using Python 3.11.5, both in 64-bit on macOS 14.
|
|
182
|
+
using Python 3.11.5, both in 64-bit on macOS 14.5 Sonoma.
|
|
183
183
|
|
|
184
184
|
For a summary of all I{Karney}-based functionality in C{pygeodesy}, see module U{karney
|
|
185
185
|
<https://mrJean1.GitHub.io/PyGeodesy/docs/pygeodesy.karney-module.html>}.
|
|
@@ -589,7 +589,7 @@ else:
|
|
|
589
589
|
|
|
590
590
|
from pygeodesy.internals import _version2, _DOT_ # PYCHOK import
|
|
591
591
|
# from pygeodesy.interns import _DOT_ # from .internals
|
|
592
|
-
__version__ = '24.
|
|
592
|
+
__version__ = '24.06.01'
|
|
593
593
|
# see setup.py for similar logic
|
|
594
594
|
version = _DOT_(*_version2(__version__, n=3))
|
|
595
595
|
|
pygeodesy/auxilats/__init__.py
CHANGED
|
@@ -29,7 +29,7 @@ from pygeodesy.lazily import _ALL_OTHER
|
|
|
29
29
|
# no modules: auxAngle, auxDLat, auxDST, auxily, auxLat
|
|
30
30
|
__all__ = _ALL_OTHER(Aux, AuxAngle, AuxDLat, AuxDST, AuxLat,
|
|
31
31
|
AuxBeta, AuxChi, AuxMu, AuxPhi, AuxTheta, AuxXi)
|
|
32
|
-
__version__ = '24.05.
|
|
32
|
+
__version__ = '24.05.31'
|
|
33
33
|
|
|
34
34
|
# **) MIT License
|
|
35
35
|
#
|
pygeodesy/auxilats/__main__.py
CHANGED
|
@@ -5,7 +5,7 @@ u'''Print L{auxilats} version, etc. using C{python -m pygeodesy.auxilats}.
|
|
|
5
5
|
'''
|
|
6
6
|
|
|
7
7
|
__all__ = ()
|
|
8
|
-
__version__ = '24.05.
|
|
8
|
+
__version__ = '24.05.31'
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def _CXstats(): # PYCHOK no cover
|
|
@@ -80,4 +80,4 @@ _main()
|
|
|
80
80
|
# OTHER DEALINGS IN THE SOFTWARE.
|
|
81
81
|
|
|
82
82
|
# % python3 -m pygeodesy.geodesicx
|
|
83
|
-
# pygeodesy.
|
|
83
|
+
# pygeodesy.auxilats.version=24.05.31, .ALorder=6, .CXlen=522, .CXset=418, .CXset_len=80.1%, .CXx=6 (Python 3.12.3, 64bit, arm64, geographiclib 2.0)
|
pygeodesy/auxilats/auxAngle.py
CHANGED
|
@@ -31,7 +31,7 @@ from pygeodesy.utily import atan2d, sincos2, sincos2d
|
|
|
31
31
|
from math import asinh, atan2, copysign, degrees, fabs, radians, sinh
|
|
32
32
|
|
|
33
33
|
__all__ = ()
|
|
34
|
-
__version__ = '24.05.
|
|
34
|
+
__version__ = '24.05.25'
|
|
35
35
|
|
|
36
36
|
_0_INF_NAN_NINF = (0, _0_0) + _INF_NAN_NINF
|
|
37
37
|
_MAX_2 = MAX * _0_5 # PYCHOK used!
|
|
@@ -48,18 +48,18 @@ class AuxAngle(_Named):
|
|
|
48
48
|
_y = _0_0
|
|
49
49
|
_x = _1_0
|
|
50
50
|
|
|
51
|
-
def __init__(self, y_angle=_0_0, x=_1_0, **
|
|
51
|
+
def __init__(self, y_angle=_0_0, x=_1_0, **name_aux):
|
|
52
52
|
'''New L{AuxAngle}.
|
|
53
53
|
|
|
54
54
|
@kwarg y_angle: The Y component (C{scalar}, including C{INF}, C{NAN}
|
|
55
55
|
and C{NINF}) or a previous L{AuxAngle} instance.
|
|
56
56
|
@kwarg x: The X component, ignored if C{B{y_angle}} is non-C{scalar}.
|
|
57
|
-
@kwarg
|
|
57
|
+
@kwarg name_aux: Optional C{B{name}=NN} (C{str}) and I{Auxiliary} kind
|
|
58
58
|
(C{B{aux}=Aux.KIND}), ignored if B{C{y_angle}} is L{AuxAngle}.
|
|
59
59
|
|
|
60
60
|
@raise AuxError: Invalid B{C{y_angle}}, B{C{x}} or B{C{aux}}.
|
|
61
61
|
'''
|
|
62
|
-
name, aux = _name2__(**
|
|
62
|
+
name, aux = _name2__(**name_aux)
|
|
63
63
|
try:
|
|
64
64
|
yx = y_angle._yx
|
|
65
65
|
if self._AUX is None:
|
pygeodesy/basics.py
CHANGED
|
@@ -18,7 +18,7 @@ del division
|
|
|
18
18
|
# from pygeodesy.constants import isneg0, NEG0 # _MODS
|
|
19
19
|
from pygeodesy.errors import _AttributeError, _ImportError, _NotImplementedError, \
|
|
20
20
|
_TypeError, _TypesError, _ValueError, _xAssertionError, \
|
|
21
|
-
|
|
21
|
+
_xkwds_get1
|
|
22
22
|
from pygeodesy.internals import _0_0, _enquote, _passarg, _version_info
|
|
23
23
|
from pygeodesy.interns import MISSING, NN, _1_, _by_, _COMMA_, _DOT_, _DEPRECATED_, \
|
|
24
24
|
_ELLIPSIS4_, _EQUAL_, _in_, _invalid_, _N_A_, _not_, \
|
|
@@ -36,7 +36,7 @@ from math import copysign as _copysign
|
|
|
36
36
|
import inspect as _inspect
|
|
37
37
|
|
|
38
38
|
__all__ = _ALL_LAZY.basics
|
|
39
|
-
__version__ = '24.05.
|
|
39
|
+
__version__ = '24.05.29'
|
|
40
40
|
|
|
41
41
|
_below_ = 'below'
|
|
42
42
|
_list_tuple_types = (list, tuple)
|
|
@@ -111,10 +111,37 @@ except NameError: # Python 3+
|
|
|
111
111
|
return ub
|
|
112
112
|
|
|
113
113
|
|
|
114
|
-
def
|
|
114
|
+
def _args_kwds_count2(func, exelf=True):
|
|
115
|
+
'''(INTERNAL) Get a C{func}'s args and kwds count as 2-tuple
|
|
116
|
+
C{(nargs, nkwds)}, including arg C{self} for methods.
|
|
117
|
+
|
|
118
|
+
@kwarg exelf: If C{True}, exclude C{self} in the C{args}
|
|
119
|
+
of a method (C{bool}).
|
|
120
|
+
'''
|
|
121
|
+
try:
|
|
122
|
+
a = k = 0
|
|
123
|
+
for _, p in _inspect.signature(func).parameters.items():
|
|
124
|
+
if p.kind is p.POSITIONAL_OR_KEYWORD:
|
|
125
|
+
if p.default is p.empty:
|
|
126
|
+
a += 1
|
|
127
|
+
else:
|
|
128
|
+
k += 1
|
|
129
|
+
except AttributeError: # .signature new Python 3+
|
|
130
|
+
s = _inspect.getargspec(func)
|
|
131
|
+
k = len(s.defaults or ())
|
|
132
|
+
a = len(s.args) - k
|
|
133
|
+
if exelf and a > 0 and _inspect.ismethod(func):
|
|
134
|
+
a -= 1
|
|
135
|
+
return a, k
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _args_kwds_names(func, splast=False):
|
|
115
139
|
'''(INTERNAL) Get a C{func}'s args and kwds names, including
|
|
116
140
|
C{self} for methods.
|
|
117
141
|
|
|
142
|
+
@kwarg splast: If C{True}, split the last keyword argument
|
|
143
|
+
at UNDERscores (C{bool}).
|
|
144
|
+
|
|
118
145
|
@note: Python 2 may I{not} include the C{*args} nor the
|
|
119
146
|
C{**kwds} names.
|
|
120
147
|
'''
|
|
@@ -122,6 +149,13 @@ def _args_kwds_names(func):
|
|
|
122
149
|
args_kwds = _inspect.signature(func).parameters.keys()
|
|
123
150
|
except AttributeError: # .signature new Python 3+
|
|
124
151
|
args_kwds = _inspect.getargspec(func).args
|
|
152
|
+
if splast and args_kwds:
|
|
153
|
+
args_kwds = list(args_kwds)
|
|
154
|
+
t = args_kwds[-1:]
|
|
155
|
+
if t:
|
|
156
|
+
s = t[0].strip(_UNDER_).split(_UNDER_)
|
|
157
|
+
if len(s) > 1 or s != t:
|
|
158
|
+
args_kwds += s
|
|
125
159
|
return tuple(args_kwds)
|
|
126
160
|
|
|
127
161
|
|
|
@@ -654,7 +688,7 @@ def splice(iterable, n=2, **fill):
|
|
|
654
688
|
|
|
655
689
|
if n > 1:
|
|
656
690
|
if fill:
|
|
657
|
-
fill =
|
|
691
|
+
fill = _xkwds_get1(fill, fill=MISSING)
|
|
658
692
|
if fill is not MISSING:
|
|
659
693
|
m = len(t) % n
|
|
660
694
|
if m > 0: # same type fill
|
|
@@ -860,7 +894,7 @@ def _xversion(package, where, *required, **name):
|
|
|
860
894
|
def _xzip(*args, **strict): # PYCHOK no cover
|
|
861
895
|
'''(INTERNAL) Standard C{zip(..., strict=True)}.
|
|
862
896
|
'''
|
|
863
|
-
s =
|
|
897
|
+
s = _xkwds_get1(strict, strict=True)
|
|
864
898
|
if s:
|
|
865
899
|
if _zip is zip: # < (3, 10)
|
|
866
900
|
t = _MODS.streprs.unstr(_xzip, *args, strict=s)
|
pygeodesy/booleans.py
CHANGED
|
@@ -43,7 +43,7 @@ from pygeodesy.utily import fabs, _unrollon, _Wrap
|
|
|
43
43
|
# from math import fabs # from .utily
|
|
44
44
|
|
|
45
45
|
__all__ = _ALL_LAZY.booleans
|
|
46
|
-
__version__ = '24.05.
|
|
46
|
+
__version__ = '24.05.29'
|
|
47
47
|
|
|
48
48
|
_0_EPS = EPS # near-zero, positive
|
|
49
49
|
_EPS_0 = -EPS # near-zero, negative
|
|
@@ -1009,9 +1009,9 @@ class _CompositeBase(_Named):
|
|
|
1009
1009
|
'''
|
|
1010
1010
|
self._eps = eps
|
|
1011
1011
|
|
|
1012
|
-
def _10eps(self, **
|
|
1012
|
+
def _10eps(self, **eps_):
|
|
1013
1013
|
# Get eps for _LatLonBool._2Abs
|
|
1014
|
-
e = _xkwds_get(
|
|
1014
|
+
e = _xkwds_get(eps_, eps=self._eps)
|
|
1015
1015
|
if e != EPS:
|
|
1016
1016
|
e *= _10EPS / EPS
|
|
1017
1017
|
else:
|
pygeodesy/constants.py
CHANGED
|
@@ -10,7 +10,7 @@ L{pygeodesy.isnon0} and L{pygeodesy.remainder}.
|
|
|
10
10
|
from __future__ import division as _; del _ # PYCHOK semicolon
|
|
11
11
|
|
|
12
12
|
from pygeodesy.basics import _copysign, isbool, iscomplex, isint, _0_0
|
|
13
|
-
from pygeodesy.errors import _xError, _xError2,
|
|
13
|
+
from pygeodesy.errors import _xError, _xError2, _xkwds_get1, _xkwds_item2
|
|
14
14
|
# from pygeodesy.internals import _0_0 # from .basics
|
|
15
15
|
from pygeodesy.interns import _INF_, _NAN_, _UNDER_
|
|
16
16
|
# from pygeodesy.lazily import _ALL_LAZY # from .unitsBase
|
|
@@ -24,7 +24,7 @@ except ImportError: # Python 2-
|
|
|
24
24
|
_inf, _nan = float(_INF_), float(_NAN_)
|
|
25
25
|
|
|
26
26
|
__all__ = _ALL_LAZY.constants
|
|
27
|
-
__version__ = '24.05.
|
|
27
|
+
__version__ = '24.05.29'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
def _copysign_0_0(y):
|
|
@@ -73,7 +73,7 @@ def float_(*fs, **sets): # sets=False
|
|
|
73
73
|
'''
|
|
74
74
|
fl = []
|
|
75
75
|
_a = fl.append
|
|
76
|
-
_f = _floats.setdefault if
|
|
76
|
+
_f = _floats.setdefault if _xkwds_get1(sets, sets=False) else \
|
|
77
77
|
_floats.get
|
|
78
78
|
try:
|
|
79
79
|
for i, f in enumerate(fs):
|
|
@@ -14,7 +14,7 @@ from pygeodesy.props import deprecated_function
|
|
|
14
14
|
from pygeodesy.units import Number_, Scalar_
|
|
15
15
|
|
|
16
16
|
__all__ = _ALL_DEPRECATED.deprecated_functions
|
|
17
|
-
__version__ = '24.
|
|
17
|
+
__version__ = '24.05.25'
|
|
18
18
|
|
|
19
19
|
_WGS84 = _UTM = object()
|
|
20
20
|
|
|
@@ -109,13 +109,19 @@ def enStr2(easting, northing, prec, *extras): # PYCHOK no cover
|
|
|
109
109
|
return _MODS.streprs.enstr2(easting, northing, (int(prec) // 2 - 5), *extras)
|
|
110
110
|
|
|
111
111
|
|
|
112
|
+
@deprecated_function
|
|
113
|
+
def equirectangular_(lat1, lon1, lat2, lon2, **options): # PYCHOK no cover
|
|
114
|
+
'''DEPRECATED on 2024.05.25, use function L{pygeodesy.equirectangular4}.'''
|
|
115
|
+
return _MODS.formy.equirectangular4(lat1, lon1, lat2, lon2, **options)
|
|
116
|
+
|
|
117
|
+
|
|
112
118
|
@deprecated_function
|
|
113
119
|
def equirectangular3(lat1, lon1, lat2, lon2, **options): # PYCHOK no cover
|
|
114
|
-
'''DEPRECATED, use function L{pygeodesy.
|
|
120
|
+
'''DEPRECATED, use function L{pygeodesy.equirectangular4}.
|
|
115
121
|
|
|
116
122
|
@return: 3-Tuple C{(distance2, delta_lat, delta_lon)}.
|
|
117
123
|
'''
|
|
118
|
-
return tuple(_MODS.formy.
|
|
124
|
+
return tuple(_MODS.formy.equirectangular4(lat1, lon1, lat2, lon2, **options)[:3])
|
|
119
125
|
|
|
120
126
|
|
|
121
127
|
@deprecated_function
|
pygeodesy/ecef.py
CHANGED
|
@@ -58,7 +58,7 @@ plane} as opposed to I{geocentric} (ECEF) ones.
|
|
|
58
58
|
'''
|
|
59
59
|
|
|
60
60
|
from pygeodesy.basics import copysign0, isscalar, issubclassof, neg, map1, \
|
|
61
|
-
_xinstanceof, _xsubclassof
|
|
61
|
+
_xinstanceof, _xsubclassof # _args_kwds_names
|
|
62
62
|
from pygeodesy.constants import EPS, EPS0, EPS02, EPS1, EPS2, EPS_2, INT0, PI, PI_2, \
|
|
63
63
|
_0_0, _0_0001, _0_01, _0_5, _1_0, _1_0_1T, _N_1_0, \
|
|
64
64
|
_2_0, _N_2_0, _3_0, _4_0, _6_0, _60_0, _90_0, _N_90_0, \
|
|
@@ -73,7 +73,7 @@ from pygeodesy.interns import NN, _a_, _C_, _datum_, _ellipsoid_, _f_, _height_,
|
|
|
73
73
|
_lat_, _lon_, _M_, _name_, _singular_, _SPACE_, \
|
|
74
74
|
_x_, _xyz_, _y_, _z_
|
|
75
75
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
76
|
-
from pygeodesy.named import _name__, _NamedBase, _NamedTuple, _Pass, _xnamed
|
|
76
|
+
from pygeodesy.named import _name__, _name1__, _NamedBase, _NamedTuple, _Pass, _xnamed
|
|
77
77
|
from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, \
|
|
78
78
|
PhiLam2Tuple, Vector3Tuple, Vector4Tuple
|
|
79
79
|
from pygeodesy.props import deprecated_method, Property_RO, property_RO, property_doc_
|
|
@@ -86,7 +86,7 @@ from pygeodesy.utily import atan1, atan1d, atan2d, degrees90, degrees180, \
|
|
|
86
86
|
from math import atan2, cos, degrees, fabs, radians, sqrt
|
|
87
87
|
|
|
88
88
|
__all__ = _ALL_LAZY.ecef
|
|
89
|
-
__version__ = '24.05.
|
|
89
|
+
__version__ = '24.05.31'
|
|
90
90
|
|
|
91
91
|
_Ecef_ = 'Ecef'
|
|
92
92
|
_prolate_ = 'prolate'
|
|
@@ -209,7 +209,7 @@ class _EcefBase(_NamedBase):
|
|
|
209
209
|
m = self._Matrix(sa, ca, sb, cb) if M else None
|
|
210
210
|
return Ecef9Tuple(x * cb, x * sb, z, lat, lon, h,
|
|
211
211
|
0, m, self.datum,
|
|
212
|
-
name=
|
|
212
|
+
name=self._name__(name))
|
|
213
213
|
|
|
214
214
|
def forward(self, latlonh, lon=None, height=0, M=False, **name):
|
|
215
215
|
'''Convert from geodetic C{(lat, lon, height)} to geocentric C{(x, y, z)}.
|
|
@@ -390,7 +390,7 @@ class EcefFarrell21(_EcefBase):
|
|
|
390
390
|
|
|
391
391
|
return Ecef9Tuple(x, y, z, lat, lon, h,
|
|
392
392
|
1, None, self.datum,
|
|
393
|
-
name=
|
|
393
|
+
name=self._name__(name))
|
|
394
394
|
|
|
395
395
|
|
|
396
396
|
class EcefFarrell22(_EcefBase):
|
|
@@ -451,7 +451,7 @@ class EcefFarrell22(_EcefBase):
|
|
|
451
451
|
|
|
452
452
|
return Ecef9Tuple(x, y, z, lat, lon, h,
|
|
453
453
|
1, None, self.datum,
|
|
454
|
-
name=
|
|
454
|
+
name=self._name__(name))
|
|
455
455
|
|
|
456
456
|
|
|
457
457
|
class EcefKarney(_EcefBase):
|
|
@@ -606,8 +606,7 @@ class EcefKarney(_EcefBase):
|
|
|
606
606
|
lon = self._polon(sb, cb, R, **name_lon00)
|
|
607
607
|
m = self._Matrix(sa, ca, sb, cb) if M else None
|
|
608
608
|
return Ecef9Tuple(x, y, z, atan1d(sa, ca), lon, h,
|
|
609
|
-
C, m, self.datum,
|
|
610
|
-
name=name or self.name)
|
|
609
|
+
C, m, self.datum, name=self._name__(name))
|
|
611
610
|
|
|
612
611
|
|
|
613
612
|
class EcefSudano(_EcefBase):
|
|
@@ -686,7 +685,7 @@ class EcefSudano(_EcefBase):
|
|
|
686
685
|
# h = (fabs(z) + R - E.a * cos(a + E.e21) * sa / ca) / (ca + sa)
|
|
687
686
|
return Ecef9Tuple(x, y, z, lat, lon, h,
|
|
688
687
|
i, None, self.datum, # C=i, M=None
|
|
689
|
-
iteration=i, name=
|
|
688
|
+
iteration=i, name=self._name__(name))
|
|
690
689
|
|
|
691
690
|
@property_doc_(''' the convergence tolerance (C{float}).''')
|
|
692
691
|
def tolerance(self):
|
|
@@ -782,7 +781,7 @@ class EcefVeness(_EcefBase):
|
|
|
782
781
|
lon = self._polon(y, x, p, **name_lon00)
|
|
783
782
|
return Ecef9Tuple(x, y, z, lat, lon, h,
|
|
784
783
|
C, None, self.datum, # M=None
|
|
785
|
-
name=
|
|
784
|
+
name=self._name__(name))
|
|
786
785
|
|
|
787
786
|
|
|
788
787
|
class EcefYou(_EcefBase):
|
|
@@ -862,7 +861,7 @@ class EcefYou(_EcefBase):
|
|
|
862
861
|
h = neg(h) # inside ellipsoid
|
|
863
862
|
return Ecef9Tuple(x, y, z, lat, lon, h,
|
|
864
863
|
1, None, self.datum, # C=1, M=None
|
|
865
|
-
name=
|
|
864
|
+
name=self._name__(name))
|
|
866
865
|
|
|
867
866
|
|
|
868
867
|
class EcefMatrix(_NamedTuple):
|
|
@@ -1160,22 +1159,24 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1160
1159
|
r = self.xyz
|
|
1161
1160
|
else:
|
|
1162
1161
|
_xsubclassof(self._CartesianBase, Cartesian=Cartesian)
|
|
1163
|
-
r = Cartesian(self, **
|
|
1162
|
+
r = Cartesian(self, **_name1__(Cartesian_kwds, _or_nameof=self))
|
|
1164
1163
|
return r
|
|
1165
1164
|
|
|
1166
|
-
def toDatum(self, datum2):
|
|
1165
|
+
def toDatum(self, datum2, **name):
|
|
1167
1166
|
'''Convert this C{Ecef9Tuple} to an other datum.
|
|
1168
1167
|
|
|
1169
1168
|
@arg datum2: Datum to convert I{to} (L{Datum}).
|
|
1169
|
+
@kwarg name: Optional C{B{name}=NN} (C{str}).
|
|
1170
1170
|
|
|
1171
1171
|
@return: The converted 9-Tuple (C{Ecef9Tuple}).
|
|
1172
1172
|
|
|
1173
1173
|
@raise TypeError: The B{C{datum2}} is not a L{Datum}.
|
|
1174
1174
|
'''
|
|
1175
|
+
n = _name__(name, _or_nameof=self)
|
|
1175
1176
|
if self.datum in (None, datum2): # PYCHOK _Names_
|
|
1176
|
-
r = self.copy()
|
|
1177
|
+
r = self.copy(name=n)
|
|
1177
1178
|
else:
|
|
1178
|
-
c = self._CartesianBase(self, datum=self.datum, name=
|
|
1179
|
+
c = self._CartesianBase(self, datum=self.datum, name=n) # PYCHOK _Names_
|
|
1179
1180
|
# c.toLatLon converts datum, x, y, z, lat, lon, etc.
|
|
1180
1181
|
# and returns another Ecef9Tuple iff LatLon is None
|
|
1181
1182
|
r = c.toLatLon(datum=datum2, LatLon=None)
|
|
@@ -1197,8 +1198,9 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1197
1198
|
@raise TypeError: Invalid B{C{LatLon}} or B{C{LatLon_kwds}}.
|
|
1198
1199
|
'''
|
|
1199
1200
|
lat, lon, D = self.lat, self.lon, self.datum # PYCHOK Ecef9Tuple
|
|
1200
|
-
kwds =
|
|
1201
|
-
|
|
1201
|
+
kwds = _name1__(LatLon_kwds, _or_nameof=self)
|
|
1202
|
+
kwds = _xkwds(kwds, height=self.height, datum=D) # PYCHOK Ecef9Tuple
|
|
1203
|
+
d = kwds.get(_datum_, LatLon)
|
|
1202
1204
|
if LatLon is None:
|
|
1203
1205
|
r = LatLon3Tuple(lat, lon, kwds[_height_], name=kwds[_name_])
|
|
1204
1206
|
if d is not None:
|
|
@@ -1242,7 +1244,7 @@ class Ecef9Tuple(_NamedTuple):
|
|
|
1242
1244
|
@see: Propertes C{xyz} and C{xyzh}
|
|
1243
1245
|
'''
|
|
1244
1246
|
return self.xyz if Vector is None else Vector(
|
|
1245
|
-
*self.xyz, **
|
|
1247
|
+
*self.xyz, **_name1__(Vector_kwds, _or_nameof=self)) # PYCHOK Ecef9Tuple
|
|
1246
1248
|
|
|
1247
1249
|
# def _T_x_M(self, T):
|
|
1248
1250
|
# '''(INTERNAL) Update M{self.M = T.multiply(self.M)}.
|
|
@@ -1281,7 +1283,6 @@ def _llhn4(latlonh, lon, height, suffix=NN, Error=EcefError, **name): # in .ltp
|
|
|
1281
1283
|
n = _name__(name, _or_nameof=latlonh) # == latlonh._name__(name)
|
|
1282
1284
|
except AttributeError:
|
|
1283
1285
|
lat, h, n = latlonh, height, _name__(**name)
|
|
1284
|
-
|
|
1285
1286
|
try:
|
|
1286
1287
|
return Lat(lat), Lon(lon), Height(h), n
|
|
1287
1288
|
except (TypeError, ValueError) as x:
|
|
@@ -1313,11 +1314,11 @@ def _xyzn4(xyz, y, z, Types, Error=EcefError, lon00=0, # PYCHOK unused
|
|
|
1313
1314
|
raise _TypesError(_xyz_y_z_names[0], xyz, *Types)
|
|
1314
1315
|
except AttributeError:
|
|
1315
1316
|
t = map1(float, xyz, y, z) + (n,)
|
|
1316
|
-
return t
|
|
1317
1317
|
except (TypeError, ValueError) as x:
|
|
1318
1318
|
d = dict(zip(_xyz_y_z_names, (xyz, y, z)))
|
|
1319
1319
|
raise Error(cause=x, **d)
|
|
1320
|
-
|
|
1320
|
+
return t
|
|
1321
|
+
# assert _xyz_y_z == _args_kwds_names(_xyzn4)[:3]
|
|
1321
1322
|
|
|
1322
1323
|
|
|
1323
1324
|
_Ecefs = (EcefKarney, EcefSudano, EcefVeness, EcefYou,
|