pygeodesy 25.12.31__py2.py3-none-any.whl → 26.2.2__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/__init__.py CHANGED
@@ -132,17 +132,17 @@ Tests
132
132
  =====
133
133
 
134
134
  The tests ran with Python 3.14.2 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1),
135
- Python 3.13.9 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1),
135
+ Python 3.13.11 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1),
136
136
  U{numpy<https://PyPI.org/project/numpy>} 2.3.3, U{scipy<https://PyPI.org/project/scipy>} 1.16.2,
137
137
  U{GeoConvert<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.7 and
138
138
  U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.7),
139
- Python 3.12.7 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
139
+ Python 3.12.10 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
140
140
  U{numpy<https://PyPI.org/project/numpy>} 2.1.0, U{scipy<https://PyPI.org/project/scipy>} 1.14.1,
141
141
  U{GeodSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.7,
142
142
  U{GeodS3olve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.7,
143
143
  U{IntersectTool<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.7 and
144
144
  U{RhumbSolve<https://GeographicLib.SourceForge.io/C++/doc/utilities.html>} 2.7),
145
- Python 3.11.5 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
145
+ Python 3.11.9 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0,
146
146
  U{numpy<https://PyPI.org/project/numpy>} 1.24.2 and U{scipy<https://PyPI.org/project/scipy>} 1.10.1),
147
147
  and with Python 2.7.18 (with U{geographiclib<https://PyPI.org/project/geographiclib>} 1.50,
148
148
  U{numpy<https://PyPI.org/project/numpy>} 1.16.6, U{scipy<https://PyPI.org/project/scipy>} 1.2.2,
@@ -158,14 +158,14 @@ env variable C{PYGEODESY_WARNINGS=on} for all Python versions. The results of t
158
158
  the distribution files.
159
159
 
160
160
  Test coverage has been measured with U{coverage<https://PyPI.org/project/coverage>} 7.10.7 using Python
161
- 3.14.2, 3.13.9 and 3.12.7. The complete coverage report in HTML and a PDF summary are included in the
161
+ 3.14.2, 3.13.11 and 3.12.10. The complete coverage report in HTML and a PDF summary are included in the
162
162
  distribution files.
163
163
 
164
- Python 3.14.2, 3.13.9, 3.12.7 and 3.11.5 run on Apple Si M4 (C{arm64}), I{natively}. Python 2.7.18 runs
164
+ Python 3.14.2, 3.13.11, 3.12.10 and 3.11.9 run on Apple Si M4 (C{arm64}), I{natively}. Python 2.7.18 runs
165
165
  on Intel (C{x86_64}) or Intel I{emulation} ("C{arm64_x86_64}", see function L{machine<pygeodesy.machine>}).
166
166
 
167
167
  The tests also ran with Python 3.14.2 (and U{geographiclib<https://PyPI.org/project/geographiclib>} 2.1) on
168
- U{Debian 12<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only, with Python 3.13.9 (and
168
+ U{Debian 12<https://Cirrus-CI.com/github/mrJean1/PyGeodesy/master>} in 64-bit only, with Python 3.13.11 (and
169
169
  U{geographiclib<https://PyPI.org/project/geographiclib>} 2.0) on U{Windows 2019Server
170
170
  <https://CI.AppVeyor.com/project/mrJean1/pygeodesy>} in 64-bit only and with Python 2.7.18 (and U{geographiclib
171
171
  <https://PyPI.org/project/geographiclib>} 1.52) on U{Windows 10<https://CI.AppVeyor.com/project/mrJean1/pygeodesy>}
@@ -174,7 +174,7 @@ in 64- and 32-bit.
174
174
  A single-File and single-Directory application with C{pygeodesy} has been bundled using U{PyInstaller
175
175
  <https://PyPI.org/project/pyinstaller>} 3.4 and 64-bit Python 3.7.3 on macOS 10.13.6 High Sierra.
176
176
 
177
- Previously, the tests were run with Python 3.13.0-7, 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,
177
+ Previously, the tests were run with Python 3.13.0-9, 3.12.0-7, 3.11.2-5, 3.10.1-7, 3.9.6, 3.9.1, 3.8.7, 3.7.1, 2.7.15,
178
178
  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
179
179
  2.7.13) (and U{geographiclib <https://PyPI.org/project/geographiclib>} 1.52, U{numpy<https://PyPI.org/project/numpy>}
180
180
  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,
@@ -195,7 +195,7 @@ Notes
195
195
  =====
196
196
 
197
197
  All Python source code has been statically U{checked<https://GitHub.com/ActiveState/code/tree/master/recipes/Python/
198
- 546532_PyChecker_postprocessor>} with U{Ruff<https://GitHub.com/astral-sh/ruff>} using Python 3.13.9 and with
198
+ 546532_PyChecker_postprocessor>} with U{Ruff<https://GitHub.com/astral-sh/ruff>} using Python 3.13.11 and with
199
199
  U{PyChecker<https://PyPI.org/project/pychecker>}, U{PyFlakes<https://PyPI.org/project/pyflakes>}, U{PyCodeStyle
200
200
  <https://PyPI.org/project/pycodestyle>} (formerly Pep8) and U{McCabe<https://PyPI.org/project/mccabe>} using Python
201
201
  2.7.18, both in 64-bit on macOS 26.2 Tahoe.
@@ -626,7 +626,7 @@ else:
626
626
 
627
627
  from pygeodesy.internals import _version2, _DOT_ # noqa: E402
628
628
  # from pygeodesy.interns import _DOT_ # from .internals
629
- __version__ = '25.12.31'
629
+ __version__ = '26.02.02'
630
630
  # see setup.py for similar logic
631
631
  version = _DOT_(*_version2(__version__, n=3))
632
632
 
pygeodesy/albers.py CHANGED
@@ -38,11 +38,11 @@ from pygeodesy.utily import atan1, atan1d, atan2, degrees360, sincos2, \
38
38
  from math import atanh, degrees, fabs, radians, sqrt
39
39
 
40
40
  __all__ = _ALL_LAZY.albers
41
- __version__ = '25.05.12'
41
+ __version__ = '26.01.06'
42
42
 
43
43
  _k1_ = 'k1'
44
- _NUMIT = 9 # XXX 4?
45
- _NUMIT0 = 41 # XXX 21?
44
+ _MAXIT = 9 # XXX 4?
45
+ _MAXIT0 = 41 # XXX 21?
46
46
  _TERMS = 31 # XXX 16?
47
47
  _TOL0 = sqrt3(_TOL)
48
48
 
@@ -425,7 +425,7 @@ class _AlbersBase(_NamedBase):
425
425
  _Ta02 = Fsum(ta0).fsum2f_
426
426
  _1, _2 = _1_0, _2_0
427
427
  _4, _6 = _4_0, _6_0
428
- for self._iteration in range(1, _NUMIT0): # 4 trips
428
+ for self._iteration in range(1, _MAXIT0): # 4 trips
429
429
  ta02 = ta0**2
430
430
  sca02 = ta02 + _1
431
431
  sca0 = sqrt(sca02)
@@ -492,7 +492,7 @@ class _AlbersBase(_NamedBase):
492
492
  ta = txi
493
493
  tol = _tol(_TOL, ta)
494
494
  _Ta2 = Fsum(ta).fsum2f_
495
- for self._iteration in range(1, _NUMIT): # max 2, mean 1.99
495
+ for self._iteration in range(1, _MAXIT): # max 2, mean 1.99
496
496
  # dtxi / dta = (scxi / sca)^3 * 2 * (1 - e^2)
497
497
  # / (qZ * (1 - e^2 * sa^2)^2)
498
498
  ta2 = ta**2
@@ -26,7 +26,7 @@ from pygeodesy.utily import atan1, atan2 # from .auxilats.auxily
26
26
  from math import cos, sin, sqrt
27
27
 
28
28
  __all__ = ()
29
- __version__ = '25.05.12'
29
+ __version__ = '26.01.20'
30
30
 
31
31
 
32
32
  class AuxDLat(AuxLat):
@@ -107,10 +107,9 @@ class AuxDLat(AuxLat):
107
107
  t2 = _1_0 + t**2
108
108
  Dt *= _2_0 / t2
109
109
  sk2 = (d * Dt)**2 * k2
110
- d2 = _1_0 - sk2
111
110
  c2 = ((_1_0 - t) * (_1_0 + t) / t2)**2 if t else _1_0
112
111
  # E(z)/sin(z)
113
- Dt *= _Ef._RFRD(c2, d2, _1_0, sk2) - k2 * sx * sy
112
+ Dt *= _Ef._fRF3RD(c2, _1_0, sk2) - k2 * sx * sy
114
113
  return Dt
115
114
 
116
115
  def DIsometric(self, Phi1, Phi2):
@@ -48,7 +48,7 @@ except ImportError: # Python 3.11-
48
48
  return pow(_2_0, x)
49
49
 
50
50
  __all__ = ()
51
- __version__ = '25.05.12'
51
+ __version__ = '26.01.20'
52
52
 
53
53
  _TRIPS = 1024 # XXX 2 or 3?
54
54
 
@@ -621,19 +621,18 @@ class AuxLat(AuxAngle):
621
621
  ka, kb = kb, ka
622
622
  ka1, kb1 = kb1, ka1
623
623
  sb, cb = cb, sb
624
- # now a, b = larger/smaller semiaxis
625
- # Beta measured from larger semiaxis
624
+ # now a, b = larger/smaller semi-axis
625
+ # Beta measured from larger semi-axis
626
626
  # kb, ka = modulus-squared for distance from Beta = 0, pi/2
627
627
  # NB kb <= 0; 0 <= ka <= 1
628
628
  # sa = b*E(Beta, sqrt(kb))
629
629
  # sb = a*E(Beta',sqrt(ka))
630
630
  # 1 - ka * (1 - sb2) = 1 - ka + ka*sb2
631
- sb2 = sb**2
632
- cb2 = cb**2
633
- da2 = ka1 + ka * sb2
634
- db2 = _1_0 - kb * sb2
631
+ sb2 = sb**2
632
+ cb2 = cb**2
633
+ da2 = ka1 + ka * sb2
635
634
  # DLMF Eq. 19.25.9
636
- my = b * sb * _Ef._RFRD(cb2, db2, _1_0, kb * sb2)
635
+ my = b * sb * _Ef._fRF3RD(cb2, _1_0, kb * sb2)
637
636
  # DLMF Eq. 19.25.10 with complementary angles
638
637
  mx = a * cb * (_Ef.fRF(sb2, da2, _1_0) * ka1 +
639
638
  ka * cb2 * _Ef.fRD(sb2, _1_0, da2, _3_0) * ka1 +
@@ -43,7 +43,7 @@ from pygeodesy.vector3d import Vector3d, _xyzhdlln4
43
43
  # from math import degrees, fabs, radians, sqrt # from .fmath, .utily
44
44
 
45
45
  __all__ = _ALL_LAZY.cartesianBase
46
- __version__ = '25.11.07'
46
+ __version__ = '26.01.06'
47
47
 
48
48
  _r_ = 'r'
49
49
  _resections = _MODS.into(resections=__name__)
@@ -361,7 +361,7 @@ class CartesianBase(Vector3d, _EcefLocal):
361
361
  d = self.datum if earth is None else earth
362
362
  if normal and d is self.datum:
363
363
  r = self._height4
364
- elif isinstance(d, _MODS.triaxials.triaxial5.Triaxial_):
364
+ elif isinstance(d, _MODS.triaxials.Triaxial_):
365
365
  r = d.height4(self, normal=normal)
366
366
  try:
367
367
  d = d.toEllipsoid(name=n)
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__ = '25.12.06'
29
+ __version__ = '26.01.14'
30
30
 
31
31
 
32
32
  def _copysign_0_0(y):
@@ -295,6 +295,11 @@ OVERFLOW = _Float(OVERFLOW=_1_0 / EPS0) # PYCHOK = 2.028240960365e+31
295
295
  # _1SQRT2= _Float(_1SQRT2 =sqrt(_2_0) + 1)
296
296
  # 0.707106781186547_524_400_844_362_104_849_039_284_835_937_688_474_036_588_339_868_99
297
297
  _SQRT2_2 = _Float(_SQRT2_2=sqrt(_0_5)) # PYCHOK = 0.707106781186547_5 == sqrt(2) / 2
298
+ # sqrt(3) <https://WikiPedia.org/wiki/Square_root_of_3>
299
+ # 1.732050807568877_293_527_446_341_505_872_366_942_805_253_810_380_628_055_806
300
+ _SQRT3 = _Float(_SQRT3 =sqrt(_3_0)) # PYCHOK = 1.732050807568877_2 == sqrt(3)
301
+ # 0.866025403784438_646_763_723_170_752_936_183_471_402_626_905_190_314_027_903
302
+ _SQRT3_2 = _Float(_SQRT3_2=sqrt(_0_75)) # PYCHOK = 0.866025403784438_6 == sqrt(3) / 2
298
303
 
299
304
  INF = Float(INF =_inf) # PYCHOK INFinity, see function L{isinf}, L{isfinite}, NOT _Float!
300
305
  INT0 = Int( INT0= 0) # PYCHOK unique int(0) instance, see .fsums, useZ=False
pygeodesy/datums.py CHANGED
@@ -94,7 +94,7 @@ from pygeodesy.units import _isRadius, Radius_, radians
94
94
  # import operator as _operator # from .fmath
95
95
 
96
96
  __all__ = _ALL_LAZY.datums
97
- __version__ = '25.05.12'
97
+ __version__ = '26.01.13'
98
98
 
99
99
  _a_ellipsoid_ = _UNDER_(_a_, _ellipsoid_)
100
100
  _BD72_ = 'BD72'
@@ -723,13 +723,10 @@ assert _WGS84.ellipsoid is _EWGS84
723
723
 
724
724
  if __name__ == _DMAIN_:
725
725
 
726
- from pygeodesy.interns import _COMMA_, _NL_, _NLATvar_
727
- from pygeodesy import printf
728
-
729
- # __doc__ of this file, force all into registery
730
- for r in (Datums, Transforms):
731
- t = [NN] + r.toRepr(all=True, asorted=True).split(_NL_)
732
- printf(_NLATvar_.join(i.strip(_COMMA_) for i in t))
726
+ from pygeodesy.internals import _pregistry
727
+ # __doc__ of this file, force all into registry
728
+ _pregistry(Datums)
729
+ _pregistry(Transforms)
733
730
 
734
731
  # **) MIT License
735
732
  #
pygeodesy/ellipsoids.py CHANGED
@@ -96,7 +96,7 @@ from pygeodesy.utily import atan1, atan1d, atan2b, degrees90, m2radians, radians
96
96
  from math import asinh, atan, atanh, cos, degrees, exp, fabs, radians, sin, sinh, sqrt, tan # as _tan
97
97
 
98
98
  __all__ = _ALL_LAZY.ellipsoids
99
- __version__ = '25.12.14'
99
+ __version__ = '26.01.13'
100
100
 
101
101
  _f_0_0 = Float(f =_0_0) # zero flattening
102
102
  _f__0_0 = Float(f_=_0_0) # zero inverse flattening
@@ -1140,7 +1140,8 @@ class Ellipsoid(_NamedEnumItem):
1140
1140
  methods L{Ellipsoid.height4} and L{Triaxial.hartzell4}.
1141
1141
  '''
1142
1142
  try:
1143
- v, d, i = _MODS.triaxials.triaxial5._hartzell3(pov, los, self._triaxial)
1143
+ m = _MODS._triaxials_triaxial5
1144
+ v, d, i = m._hartzell3(pov, los, self._triaxial)
1144
1145
  except Exception as x:
1145
1146
  raise IntersectionError(pov=pov, los=los, cause=x)
1146
1147
  return Vector4Tuple(v.x, v.y, v.z, d, iteration=i, name__=self.hartzell4)
@@ -1194,7 +1195,8 @@ class Ellipsoid(_NamedEnumItem):
1194
1195
  v = v.times_(t, t, 0) # force z=0.0
1195
1196
  h = x - a # equatorial
1196
1197
  else: # normal in 1st quadrant
1197
- x, y, i = _MODS.triaxials.triaxial5._plumbTo3(x, y, self)
1198
+ m = _MODS._triaxials_triaxial5
1199
+ x, y, i = m._plumbTo3(x, y, self)
1198
1200
  t, v = v, v.times_(x, x, y)
1199
1201
  h = t.minus(v).length
1200
1202
 
@@ -1910,8 +1912,8 @@ class Ellipsoid(_NamedEnumItem):
1910
1912
  def _triaxial(self):
1911
1913
  '''(INTERNAL) Get this ellipsoid's un-/ordered C{Triaxial/_}.
1912
1914
  '''
1913
- a, b, m = self.a, self.b, _MODS.triaxials
1914
- T = m.Triaxial if a > b else m.Triaxial_
1915
+ a, b, t = self.a, self.b, _MODS.triaxials
1916
+ T = t.Triaxial if a > b else t.Triaxial_
1915
1917
  return T(a, a, b, name=self.name)
1916
1918
 
1917
1919
  @Property_RO
@@ -2433,7 +2435,6 @@ _EWGS84 = Ellipsoids.WGS84 # (INTERNAL) shared
2433
2435
 
2434
2436
  if __name__ == _DMAIN_:
2435
2437
 
2436
- from pygeodesy.interns import _COMMA_, _NL_, _NLATvar_
2437
2438
  from pygeodesy import nameof, printf
2438
2439
 
2439
2440
  for E in (_EWGS84, Ellipsoids.GRS80, # NAD83,
@@ -2450,9 +2451,9 @@ if __name__ == _DMAIN_:
2450
2451
  printf('# %s %s', Ellipsoid.BetaKs.name, fstr(E.BetaKs, prec=20))
2451
2452
  printf('# %s %s', nameof(Ellipsoid.KsOrder), E.KsOrder) # property
2452
2453
 
2454
+ from pygeodesy.internals import _pregistry
2453
2455
  # __doc__ of this file, force all into registry
2454
- t = [NN] + Ellipsoids.toRepr(all=True, asorted=True).split(_NL_)
2455
- printf(_NLATvar_.join(i.strip(_COMMA_) for i in t))
2456
+ _pregistry(Ellipsoids)
2456
2457
 
2457
2458
  # % python3.13 -m pygeodesy.ellipsoids
2458
2459