pygeodesy 24.5.2__py2.py3-none-any.whl → 24.5.6__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.5.2
3
+ Version: 24.5.6
4
4
  Summary: Pure Python geodesy tools
5
5
  Home-page: https://GitHub.com/mrJean1/PyGeodesy
6
6
  Author: Jean M. Brouwers
@@ -158,7 +158,7 @@ and McCabe_ using Python 2.7.18 and with Flake8_ using Python 3.11.5, both in 64
158
158
 
159
159
  For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
160
160
 
161
- *Last updated: May 02, 2024.*
161
+ *Last updated: May 06, 2024.*
162
162
 
163
163
  License
164
164
  =======
@@ -1,5 +1,5 @@
1
1
  pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
2
- pygeodesy/__init__.py,sha256=LsshXEtTCo0kRJI0vJfZzKu5Lo0Q0j5fiTf1bnCvefs,40733
2
+ pygeodesy/__init__.py,sha256=5Q85uqE7EHB5oDhKSCKkujvjELK-sTT7tomCX4OfaKE,40733
3
3
  pygeodesy/__main__.py,sha256=qMFG3caY8ZXWu6uGiemzyT4OqTFZnsFtlxcGCAgkVJw,4637
4
4
  pygeodesy/albers.py,sha256=g2AVlpV8JO2AYFCthoIbRC2h1OJqjb9P3hpwF0C3TI8,30994
5
5
  pygeodesy/azimuthal.py,sha256=tc4JxgLi-0jzU08m4Bvi-t-kzHXYPeGuzL3j_tyVFUA,50125
@@ -11,7 +11,7 @@ pygeodesy/constants.py,sha256=RxO8dMe_3AEfmZyKaRIy_44QnOTdEpzgYwimN0_w9Qs,19113
11
11
  pygeodesy/css.py,sha256=sKXsahUiyruDcUk-tGjA6mxq-xzwBoBKxKo9_b2uBmY,25394
12
12
  pygeodesy/datums.py,sha256=gJZPgV4bELZvZ8Sj2zE3MBysVtsLxqsN8zm0xjOKvpo,33851
13
13
  pygeodesy/dms.py,sha256=op3MU-59CoJQRdybnu21aVM9wtocd_-XFNAZFqmozSo,44439
14
- pygeodesy/ecef.py,sha256=VRoGa8zjGDPFXYr9HZiKS4XwoAI6p4N_ngsHtGipQAo,59703
14
+ pygeodesy/ecef.py,sha256=47zX9rr7MdWY0K9shMqLbxGIb13MkNEUDDxtGigFwHE,59682
15
15
  pygeodesy/elevations.py,sha256=ZTxzLWHLUrghFI9Fkl0ZGHzdiLDe0y3ImGUsfxFg6Qc,10814
16
16
  pygeodesy/ellipsoidalBase.py,sha256=dqEmBFguS_Q0K95VaBN7oZOVEaxHuicLCrqIuj1QM7w,56639
17
17
  pygeodesy/ellipsoidalBaseDI.py,sha256=MSuQI3PlJAHL7gtVy4t0qkm1QP3zeHqbkG4tnMDWDIg,38510
@@ -23,13 +23,13 @@ pygeodesy/ellipsoidalVincenty.py,sha256=Uk93B8GFcMnWiwKUOA84TlLwbBlvzVnsAXAx0cU7
23
23
  pygeodesy/ellipsoids.py,sha256=SxMsivNnE9ibUjQGd0d24H0SzoSjh6jfhLWjasOWpao,119946
24
24
  pygeodesy/elliptic.py,sha256=XRVpmpdm3hbztM4P-qhWKQizbgsXDUxWujgmOrIpgiQ,42428
25
25
  pygeodesy/epsg.py,sha256=ldHoLWqJWR4FUiBVnDTtrI_e7TNjjtr9OkxDlri1g5E,8165
26
- pygeodesy/errors.py,sha256=mUaacHJKcSCowlcbzamaBMDqjI2dqsTM5O4ozIITtAk,27233
26
+ pygeodesy/errors.py,sha256=RHZ_f1zcOIyLQYProiQznaAOhojbDPDR4XbblXJMuS0,27232
27
27
  pygeodesy/etm.py,sha256=joEhU2lw9ehRv101nRpZvXq8hOYAEzdcYFpif9_obfk,44585
28
- pygeodesy/fmath.py,sha256=cRisVRkuarEwu4pKOCWmBa-98lV2PP9oJVkkODQLc2E,32480
28
+ pygeodesy/fmath.py,sha256=HCnndaXPwRIW8gGIVzbACftxIZZUUrRAiIAFfgVYLgw,33477
29
29
  pygeodesy/formy.py,sha256=Rces4Q5ecED0WVfuI9mQzeyHE54LDowYfI6faBHpyeA,74536
30
30
  pygeodesy/frechet.py,sha256=qgee-ISBtT7Ov3rJkcd_t-WeXTbeNoMSQuMa0j3MyQc,33512
31
- pygeodesy/fstats.py,sha256=3IUmOJclp3XIzTLKVrwj24N0yCRvVMPSD2-BV7CY3_g,25559
32
- pygeodesy/fsums.py,sha256=xGA9nNeAHndWhs8pXJ4n46ZlNPIT2sn2f_6HmFOTnPs,76188
31
+ pygeodesy/fstats.py,sha256=UcaUuUpnQqaE8T7rqHCT6eptqa-IG23LsiCiOUh43U0,25681
32
+ pygeodesy/fsums.py,sha256=VttiMEC02riVsWWh2SqhLD3rwo2af0RsAvxvpiNSqsw,77895
33
33
  pygeodesy/gars.py,sha256=fCiWBJ4kOJxPfNOxadX-OzBGDXj7C9g02NuGHiZa_88,11342
34
34
  pygeodesy/geodesicw.py,sha256=5yjJ2rLekSsjT7e-Km6v592ZcFlA41flQP_E42jU9Sw,26901
35
35
  pygeodesy/geodsolve.py,sha256=3GLI2_4gglzTpZwKchNzAv-XhWFBzWRKjcWsjCC3dvI,21900
@@ -37,7 +37,7 @@ pygeodesy/geohash.py,sha256=HwukecfkWvyfz9LHKfoA-WddQHYot_mB04o0lyWrKyU,32382
37
37
  pygeodesy/geoids.py,sha256=EwZJ50qRXeZb1591N99hnamM_EC2NP6MIhLb5swVHf4,80605
38
38
  pygeodesy/hausdorff.py,sha256=LJULGbDop4xqiWeRH5-Uayvk5WVCZQpxK4PCYu4kqSs,34192
39
39
  pygeodesy/heights.py,sha256=tjr-5eb8UXn2MAp6-157sb6qxPREFk5dtDjHtBgIgZ8,42528
40
- pygeodesy/interns.py,sha256=ZeNGk2WIHLunBGSeOkU4Ihc9CNSfVDFZGNkbBQy2_8M,30120
40
+ pygeodesy/interns.py,sha256=LzgIw5JEMLMc_56v0n3LxgpcQ0cpdRghkus8yorcuGQ,30188
41
41
  pygeodesy/iters.py,sha256=CfU365eE9F4oWZbBx0qTEvfodMhpa8rGOepLIv67xF8,20181
42
42
  pygeodesy/karney.py,sha256=lYdsSHis8xQJVS1V0F3cphx6Dhgd77xTlMOdVR8MN8I,34994
43
43
  pygeodesy/ktm.py,sha256=sCvbLvJItavlruilAyjeZ0sOZx2yJumzGe_UiIVbGi4,27315
@@ -47,19 +47,19 @@ pygeodesy/lcc.py,sha256=yNpmAdOwv3HNh2ZLopF5QtvDokeQYCmnxSc8UFUPHO4,25737
47
47
  pygeodesy/ltp.py,sha256=8se8dYG7LG__Ru0FoK939DJBF9GCQGeJik_Un1Im8Xw,48609
48
48
  pygeodesy/ltpTuples.py,sha256=iKzvDfv33HfmEevjNISUS4c9KXIkiISEkVlQopyKgfY,55769
49
49
  pygeodesy/mgrs.py,sha256=GJ-vG54E2zSLtROyqJ_kj8fHH-8jWGf3kVe7gb8993o,28978
50
- pygeodesy/named.py,sha256=2Kg4tv883V80ZVUEgFzDeBmIEMkig_VUbJuufC0lhN0,48009
50
+ pygeodesy/named.py,sha256=MzYSWAckYfwJKIdG7duN-6pt1byb9_ZZ7772czjma50,48269
51
51
  pygeodesy/namedTuples.py,sha256=msEYvQKj4oCW35Kx80RpeQXY85A1G0O3GEqsysLaV2M,27288
52
52
  pygeodesy/nvectorBase.py,sha256=WJY5ylZ_HCeM1wGL7ryEecJphEYibp-EAWL0piKlMG8,28766
53
53
  pygeodesy/osgr.py,sha256=voC1rbOe4dnS_EjaDaRDRUQ4MoG7puMBEMV6lcAuIBI,31029
54
54
  pygeodesy/points.py,sha256=QNAAF0r7iqSXFr_6aQm-wW7f6vU3KusWVhXEMVeVo58,64442
55
- pygeodesy/props.py,sha256=ZnXRuSOkfkeJY3Of-iT06FNWZkTYgLZQBPBNF6aS0jE,21421
55
+ pygeodesy/props.py,sha256=rPVqHSnowuDeQR95zFKGwmY0356X2WGW-yRsL2fODCo,21500
56
56
  pygeodesy/resections.py,sha256=nkfBxYrsEdyq2JqAbPrRWKplJBzFkIXLvEZGB4gPu_A,43550
57
57
  pygeodesy/simplify.py,sha256=FT3AzXiFjFfvwJ-X2q8iA9cQOUVdBT1vD_BIskM3gK8,25223
58
58
  pygeodesy/solveBase.py,sha256=cBe3QQWEaJlPWUlXoiYo1eFMh4z6GDZbQyt8ZiwMfos,16687
59
59
  pygeodesy/sphericalBase.py,sha256=sH2WwmY_RL0STyr1OhtCDKvGhO0Ks7o3V-MHLddpiHQ,31944
60
60
  pygeodesy/sphericalNvector.py,sha256=TBs_nid_DTcox7bBegh_Djv4zZRGRY4mH6dd1xIHGms,56963
61
61
  pygeodesy/sphericalTrigonometry.py,sha256=Q9qsqzIK43xBken2G8uP9snPXPuBoZ20pMHqbT_IjG0,64216
62
- pygeodesy/streprs.py,sha256=NIiLVzXLnJR7w5fNTkivpbQN5XdZYJIc189Iv_bjpYw,23513
62
+ pygeodesy/streprs.py,sha256=8t10NwrS3DmuX6Qig0TDIR7bEWRFmnQUwV1_ItL9zd0,23940
63
63
  pygeodesy/trf.py,sha256=4gVtF780EEZEqWwMBDe4x1AEkIz3hB8h4l0_0NXWM5U,118903
64
64
  pygeodesy/triaxials.py,sha256=nYFQcLimivcxpeXMj9a83iWuENDU1gI-2zNgCkZzL0U,61549
65
65
  pygeodesy/units.py,sha256=ofFTYc7mF9wOpfvpYHN83dGszMM18rTdsxfEXVzaIko,38705
@@ -69,8 +69,8 @@ pygeodesy/utily.py,sha256=jP82RmCPCVghxTQv4ZRuIS89afmsD-roz2iafHfyHXA,36128
69
69
  pygeodesy/utm.py,sha256=0qF5Kjw8Wf9zxGWOaCF-LSweibat-EkHvvmy7dFO_KE,30981
70
70
  pygeodesy/utmups.py,sha256=u2hlWSnmZKwR-ApgKw16R9p75sW_yaqQAmbcBUE8Zfg,13007
71
71
  pygeodesy/utmupsBase.py,sha256=KetB8R0uRYU6X8nLG3JkBHUr1OfNlChKa0isgvm8Yq8,18807
72
- pygeodesy/vector2d.py,sha256=IAgmn-9-P6zxh4rond2k0tuf26miVwe-eHqm5f7sWTU,35003
73
- pygeodesy/vector3d.py,sha256=Q_brX_URZg_Eln01y8G8_NAEuPbbOI_IgO2wBJk1N0U,44970
72
+ pygeodesy/vector2d.py,sha256=pSvfpFoSa5R37o9tSmRma7KsjNnN9GwTDG9rhFOEmfA,35004
73
+ pygeodesy/vector3d.py,sha256=6ZLYLhZJoOM6UVJlbV8segkVXcFt38HA-SywCdWsynM,44972
74
74
  pygeodesy/vector3dBase.py,sha256=wJpEcgHlJ5Qu0Us7CKuNDepZQzo6a-RvqZbA2-O4-ko,35583
75
75
  pygeodesy/webmercator.py,sha256=1IXiAHBXTm5kMCp5gEI67oBJeRXD7BiPVI7bcRRX1U4,14918
76
76
  pygeodesy/wgrs.py,sha256=AKUrYRCC67lOeJ6vUDAiGb_mY6R3ZwflXpOaP3wauOg,14774
@@ -109,7 +109,7 @@ pygeodesy/rhumb/aux_.py,sha256=W4HkgoHAQz_aWaysfsmOA5010nCGvBfUs2Q-bymnHYU,16660
109
109
  pygeodesy/rhumb/bases.py,sha256=kzU_Dgt4FNPMgTg5rqbw-HiNpflDPKpmq9jhPbQmR4U,53851
110
110
  pygeodesy/rhumb/ekx.py,sha256=lF3tZ-ZY9fPJV8y1kgHW-7EOZCyb3gJr-kR-jj5Fbf8,23871
111
111
  pygeodesy/rhumb/solve.py,sha256=NZfwx7xv5UriQs7A0c7ZhoxxVUeAT15UwXK_jtwEXQw,27802
112
- PyGeodesy-24.5.2.dist-info/METADATA,sha256=CCvKPsW0UUmlWkrNk0W6dlZb8J--2lIS-wHNpMJGPwk,19363
113
- PyGeodesy-24.5.2.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
114
- PyGeodesy-24.5.2.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
115
- PyGeodesy-24.5.2.dist-info/RECORD,,
112
+ PyGeodesy-24.5.6.dist-info/METADATA,sha256=5ijdMD-qHxonaJpVNVWA0GMecR-fjfEAVCcSvFwWfuc,19363
113
+ PyGeodesy-24.5.6.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
114
+ PyGeodesy-24.5.6.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
115
+ PyGeodesy-24.5.6.dist-info/RECORD,,
pygeodesy/__init__.py CHANGED
@@ -585,7 +585,7 @@ else:
585
585
  _init__all__ = False
586
586
 
587
587
  from pygeodesy.interns import _DOT_, _version2 # PYCHOK import
588
- __version__ = '24.05.02'
588
+ __version__ = '24.05.06'
589
589
  # see setup.py for similar logic
590
590
  version = _DOT_(*_version2(__version__, n=3))
591
591
 
pygeodesy/ecef.py CHANGED
@@ -67,7 +67,7 @@ from pygeodesy.datums import a_f2Tuple, _ellipsoidal_datum, _WGS84, _EWGS84
67
67
  # from pygeodesy.ellipsoids import a_f2Tuple, _EWGS84 # from .datums
68
68
  from pygeodesy.errors import _IndexError, LenError, _ValueError, _TypesError, \
69
69
  _xattr, _xdatum, _xkwds, _xkwds_get
70
- from pygeodesy.fmath import cbrt, fdot, hypot, hypot1, hypot2_
70
+ from pygeodesy.fmath import cbrt, fdot, Fpowers, hypot, hypot1, hypot2_, sqrt0
71
71
  from pygeodesy.fsums import Fsum, fsumf_, Fmt, unstr
72
72
  from pygeodesy.interns import NN, _a_, _C_, _datum_, _ellipsoid_, _f_, _height_, \
73
73
  _lat_, _lon_, _M_, _name_, _singular_, _SPACE_, \
@@ -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.04.07'
89
+ __version__ = '24.05.04'
90
90
 
91
91
  _Ecef_ = 'Ecef'
92
92
  _prolate_ = 'prolate'
@@ -797,14 +797,14 @@ class EcefYou(_EcefBase):
797
797
 
798
798
  def __init__(self, a_ellipsoid=_EWGS84, f=None, **name_lon00): # PYCHOK signature
799
799
  _EcefBase.__init__(self, a_ellipsoid, f=f, **name_lon00) # inherited documentation
800
- _ = EcefYou._e2(self.ellipsoid)
800
+ self._ee2 = EcefYou._ee2(self.ellipsoid)
801
801
 
802
802
  @staticmethod
803
- def _e2(E):
803
+ def _ee2(E):
804
804
  e2 = E.a2 - E.b2
805
805
  if e2 < 0 or E.f < 0:
806
806
  raise EcefError(ellipsoid=E, txt=_prolate_)
807
- return e2
807
+ return sqrt0(e2), e2
808
808
 
809
809
  def reverse(self, xyz, y=None, z=None, M=None, **name_lon00): # PYCHOK unused M
810
810
  '''Convert geocentric C{(x, y, z)} to geodetic C{(lat, lon, height)}
@@ -831,13 +831,12 @@ class EcefYou(_EcefBase):
831
831
  '''
832
832
  x, y, z, name = _xyzn4(xyz, y, z, self._Geocentrics, **name_lon00)
833
833
 
834
- E = self.ellipsoid
835
- e2 = EcefYou._e2(E)
836
- e = sqrt(e2) if e2 > 0 else _0_0 # XXX sqrt0(e2)?
834
+ E = self.ellipsoid
835
+ e, e2 = self._ee2
837
836
 
838
- q = hypot( x, y) # R
839
- r2 = hypot2_(x, y, z)
840
- u = fsumf_(r2, -e2, hypot(r2 - e2, e * z * _2_0)) * _0_5
837
+ q = hypot(x, y) # R
838
+ u = Fpowers(2, x, y, z) - e2
839
+ u = u.fadd_(hypot(u, e * z * _2_0)).fover(_2_0)
841
840
  if u > EPS02:
842
841
  u = sqrt(u)
843
842
  p = hypot(u, e)
@@ -849,8 +848,8 @@ class EcefYou(_EcefBase):
849
848
  if isnon0(d):
850
849
  B += fsumf_(u * E.b, -p, e2) / d
851
850
  sB, cB = sincos2(B)
852
- elif u < 0:
853
- raise EcefError(x=x, y=y, z=z, txt=_singular_)
851
+ elif u < (-EPS2):
852
+ raise EcefError(x=x, y=y, z=z, u=u, txt=_singular_)
854
853
  else:
855
854
  sB, cB = _copysign_1_0(z), _0_0
856
855
 
pygeodesy/errors.py CHANGED
@@ -25,7 +25,7 @@ from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _getenv, _PYTHON_X_D
25
25
  from copy import copy as _copy
26
26
 
27
27
  __all__ = _ALL_LAZY.errors # _ALL_DOCS('_InvalidError', '_IsnotError') _under
28
- __version__ = '24.04.18'
28
+ __version__ = '24.05.06'
29
29
 
30
30
  _box_ = 'box'
31
31
  _limiterrors = True # in .formy
@@ -397,15 +397,14 @@ def _error_init(Error, inst, args, fmt_name_value='%s (%r)', txt=NN,
397
397
 
398
398
  t, n = (), len(args)
399
399
  if n > 2:
400
- s = _MODS.basics.isodd(n)
401
400
  t = _fmtuple(zip(args[0::2], args[1::2]))
401
+ s = _MODS.basics.isodd(n)
402
402
  if s: # XXX _xzip(..., strict=s)
403
403
  t += args[-1:]
404
404
  elif n == 2:
405
405
  t = (fmt_name_value % args),
406
406
  elif n: # == 1
407
407
  t = str(args[0]),
408
-
409
408
  if kwds:
410
409
  t += _fmtuple(_MODS.basics.itemsorted(kwds))
411
410
  t = _or(*t) if t else _SPACE_(_name_value_, MISSING)