pygeodesy 25.12.12__py2.py3-none-any.whl → 26.1.16__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 +33 -25
- pygeodesy/albers.py +5 -5
- pygeodesy/cartesianBase.py +2 -2
- pygeodesy/constants.py +8 -1
- pygeodesy/datums.py +5 -8
- pygeodesy/ellipsoids.py +32 -19
- pygeodesy/elliptic.py +532 -139
- pygeodesy/fmath.py +6 -8
- pygeodesy/formy.py +6 -106
- pygeodesy/fsums.py +48 -30
- pygeodesy/geod3solve.py +26 -10
- pygeodesy/geodesici.py +5 -4
- pygeodesy/geodesicx/__init__.py +1 -1
- pygeodesy/geodesicx/gxarea.py +53 -23
- pygeodesy/geodsolve.py +4 -3
- pygeodesy/internals.py +10 -3
- pygeodesy/karney.py +21 -36
- pygeodesy/lazily.py +12 -5
- pygeodesy/lcc.py +3 -7
- pygeodesy/named.py +14 -10
- pygeodesy/props.py +5 -3
- pygeodesy/trf.py +2 -4
- pygeodesy/triaxials/bases.py +111 -58
- pygeodesy/triaxials/triaxial3.py +50 -54
- pygeodesy/triaxials/triaxial5.py +17 -49
- pygeodesy/utily.py +7 -7
- {pygeodesy-25.12.12.dist-info → pygeodesy-26.1.16.dist-info}/METADATA +26 -19
- {pygeodesy-25.12.12.dist-info → pygeodesy-26.1.16.dist-info}/RECORD +30 -30
- {pygeodesy-25.12.12.dist-info → pygeodesy-26.1.16.dist-info}/WHEEL +0 -0
- {pygeodesy-25.12.12.dist-info → pygeodesy-26.1.16.dist-info}/top_level.txt +0 -0
pygeodesy/triaxials/triaxial3.py
CHANGED
|
@@ -12,41 +12,56 @@ GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1Triaxial_1_1Ellipsoid
|
|
|
12
12
|
Copyright (C) U{Charles Karney<mailto:Karney@Alum.MIT.edu>} (2024-2025) and licensed under the MIT/X11
|
|
13
13
|
License. For more information, see the U{GeographicLib 2.7 <https://GeographicLib.SourceForge.io/>}
|
|
14
14
|
documentation.
|
|
15
|
+
|
|
16
|
+
@var Triaxial3s.Amalthea: Triaxial3(name='Amalthea', a=125000, b=73000, c=64000, k2=0.106947697, kp2=0.893052303, volume=2446253479595252, area=93239507787.490371704, area_p=93212299402.670425415)
|
|
17
|
+
@var Triaxial3s.Ariel: Triaxial3(name='Ariel', a=581100, b=577900, c=577700, k2=0.05866109, kp2=0.94133891, volume=812633172614203904, area=4211301462766.580078125, area_p=4211301574065.829589844)
|
|
18
|
+
@var Triaxial3s.Earth: Triaxial3(name='Earth', a=6378173.435, b=6378103.9, c=6356754.399999999, k2=0.996748146, kp2=0.003251854, volume=1083208241574987694080, area=510065911057441.0625, area_p=510065915922713.6875)
|
|
19
|
+
@var Triaxial3s.Enceladus: Triaxial3(name='Enceladus', a=256600, b=251400, c=248300, k2=0.369647336, kp2=0.630352664, volume=67094551514082248, area=798618496278.596679688, area_p=798619018175.109985352)
|
|
20
|
+
@var Triaxial3s.Europa: Triaxial3(name='Europa', a=1564130, b=1561230, c=1560930, k2=0.093663002, kp2=0.906336998, volume=15966575194402123776, area=30663773697323.515625, area_p=30663773794562.45703125)
|
|
21
|
+
@var Triaxial3s.Io: Triaxial3(name='Io', a=1829400, b=1819300, c=1815700, k2=0.262045618, kp2=0.737954382, volume=25313121117889765376, area=41691875849096.734375, area_p=41691877397441.2109375)
|
|
22
|
+
@var Triaxial3s.Mars: Triaxial3(name='Mars', a=3394600, b=3393300, c=3376300, k2=0.92878339, kp2=0.07121661, volume=162907283585817247744, area=144249140795107.4375, area_p=144249144150662.15625)
|
|
23
|
+
@var Triaxial3s.Mimas: Triaxial3(name='Mimas', a=207400, b=196800, c=190600, k2=0.359218713, kp2=0.640781287, volume=32587072869017956, area=493855762247.691833496, area_p=493857714107.9375)
|
|
24
|
+
@var Triaxial3s.Miranda: Triaxial3(name='Miranda', a=240400, b=234200, c=232900, k2=0.171062751, kp2=0.828937249, volume=54926187094835456, area=698880863325.757202148, area_p=698881306767.950317383)
|
|
25
|
+
@var Triaxial3s.Moon: Triaxial3(name='Moon', a=1735550, b=1735324, c=1734898, k2=0.653331685, kp2=0.346668315, volume=21886698675223740416, area=37838824729886.09375, area_p=37838824733332.21875)
|
|
26
|
+
@var Triaxial3s.Tethys: Triaxial3(name='Tethys', a=535600, b=528200, c=525800, k2=0.243190549, kp2=0.756809451, volume=623086233855821440, area=3528073490771.394042969, area_p=3528074261832.738769531)
|
|
27
|
+
@var Triaxial3s.WGS84_3: Triaxial3(name='WGS84_3', a=6378171.36, b=6378101.609999999, c=6356751.84, k2=0.996738165, kp2=0.003261835, volume=1083207064030173855744, area=510065541435967.375, area_p=510065546301413.5625)
|
|
28
|
+
@var Triaxial3s.WGS84_35: Triaxial3(name='WGS84_35', a=6378172, b=6378102, c=6356752.314245179, k2=0.996726499, kp2=0.003273501, volume=1083207319768789942272, area=510065621722018.25, area_p=510065626587483.3125)
|
|
29
|
+
@var Triaxial3s.WGS84_3r: Triaxial3(name='WGS84_3r', a=6378172, b=6378102, c=6356752, k2=0.996726547, kp2=0.003273453, volume=1083207266220584468480, area=510065604942135.8125, area_p=510065609807745.0)
|
|
15
30
|
'''
|
|
16
31
|
# make sure int/int division yields float quotient, see .basics
|
|
17
32
|
from __future__ import division as _; del _ # noqa: E702 ;
|
|
18
33
|
|
|
19
34
|
from pygeodesy.angles import Ang, Ang_, _Ang3Tuple, atan2, sincos2, _SinCos2
|
|
20
35
|
from pygeodesy.basics import _copysign, map1
|
|
21
|
-
from pygeodesy.constants import EPS, EPS02, EPS8,
|
|
22
|
-
_copysign_0_0, _copysign_1_0,
|
|
23
|
-
_isfinite, _over, _1_over, _0_0,
|
|
24
|
-
|
|
36
|
+
from pygeodesy.constants import EPS, EPS_2, EPS02, EPS8, INT0, NAN, \
|
|
37
|
+
_EPSqrt, _SQRT3, _copysign_0_0, _copysign_1_0, \
|
|
38
|
+
_flipsign, _isfinite, _over, _1_over, _0_0, \
|
|
39
|
+
_0_5, _N_1_0, _1_0, _2_0, _3_0, _4_0, _9_0
|
|
25
40
|
from pygeodesy.errors import _xattr, _xkwds, _xkwds_get, _xkwds_pop2
|
|
26
41
|
from pygeodesy.fmath import cbrt2, fdot, hypot, hypot2, norm2, fabs, sqrt
|
|
27
42
|
from pygeodesy.fsums import Fsum, fsumf_, Fmt
|
|
28
|
-
from pygeodesy.interns import NN, _h_, _lam_,
|
|
29
|
-
from pygeodesy.lazily import _ALL_LAZY
|
|
30
|
-
from pygeodesy.named import
|
|
31
|
-
from pygeodesy.namedTuples import Vector4Tuple
|
|
32
|
-
from pygeodesy.props import Property_RO
|
|
43
|
+
from pygeodesy.interns import NN, _DMAIN_, _h_, _lam_, _phi_
|
|
44
|
+
# from pygeodesy.lazily import _ALL_LAZY # from .vector3d
|
|
45
|
+
# from pygeodesy.named import _Pass # from .namedTuples
|
|
46
|
+
from pygeodesy.namedTuples import Vector4Tuple, _Pass
|
|
47
|
+
# from pygeodesy.props import Property_RO # from .units
|
|
33
48
|
# from pygeodesy.streprs import Fmt # from .fsums
|
|
34
49
|
from pygeodesy.triaxials.bases import _bet_, _HeightINT0, LLK, _llk_, \
|
|
35
50
|
_MAXIT, _omg_, _otherV3d_, _sqrt0, \
|
|
36
|
-
_Triaxial3Base, TriaxialError
|
|
37
|
-
|
|
51
|
+
_Triaxial3Base, TriaxialError, \
|
|
52
|
+
_TriaxialsBase
|
|
53
|
+
from pygeodesy.units import Degrees, Radians, Radius_, Property_RO
|
|
38
54
|
# from pygeodesy.utily import atan2, sincos2 # from .triaxials.angles
|
|
39
|
-
from pygeodesy.vector3d import Vector3d
|
|
55
|
+
from pygeodesy.vector3d import Vector3d, _ALL_LAZY
|
|
40
56
|
|
|
41
57
|
# from math import fabs, sqrt # from .fmath
|
|
42
58
|
from random import random
|
|
43
59
|
|
|
44
60
|
__all__ = _ALL_LAZY.triaxials_triaxial3
|
|
45
|
-
__version__ = '
|
|
61
|
+
__version__ = '26.01.14'
|
|
46
62
|
|
|
47
63
|
_alp_ = 'alp'
|
|
48
64
|
_NAN3d = Vector3d(NAN, NAN, NAN)
|
|
49
|
-
_SQRT3 = sqrt(_3_0)
|
|
50
65
|
_TOL = cbrt2(EPS)
|
|
51
66
|
_TOL2 = _TOL**2 # cbrt(EPS)**4
|
|
52
67
|
_zet_ = 'zet'
|
|
@@ -80,8 +95,6 @@ class Cartesian5Tuple(Vector4Tuple):
|
|
|
80
95
|
class _Fp2(object):
|
|
81
96
|
'''(INTERNAL) Function and derivate evaluation.
|
|
82
97
|
'''
|
|
83
|
-
_D = EPS * _0_5
|
|
84
|
-
|
|
85
98
|
def __init__(self, rs, ls, n=1):
|
|
86
99
|
# assert 0 < n <= 2
|
|
87
100
|
self._2 = n == 2
|
|
@@ -92,7 +105,7 @@ class _Fp2(object):
|
|
|
92
105
|
# k=0..2) - 1} and its derivative C{fp}.
|
|
93
106
|
f = _N_1_0
|
|
94
107
|
fc = fp = _0_0
|
|
95
|
-
_D =
|
|
108
|
+
_D = EPS_2
|
|
96
109
|
_2 = self._2
|
|
97
110
|
for g, q in self._rls:
|
|
98
111
|
q = _1_over(p + q)
|
|
@@ -647,8 +660,6 @@ class Triaxial3(_Triaxial3Base):
|
|
|
647
660
|
v = v._roty(True) # +1
|
|
648
661
|
phi = Ang_(v.z, hypot(v.x, v.y), **name)
|
|
649
662
|
lam = Ang_(v.y, v.x, **name) # Ang(0, 0) -> 0
|
|
650
|
-
if llk is LLK.GEODETIC_LON0:
|
|
651
|
-
lam += self.Lon0
|
|
652
663
|
|
|
653
664
|
if dir3d is None:
|
|
654
665
|
zet = None
|
|
@@ -658,6 +669,8 @@ class Triaxial3(_Triaxial3Base):
|
|
|
658
669
|
dir3d.dot(n), **name)
|
|
659
670
|
else:
|
|
660
671
|
raise TriaxialError(dir3d=dir3d)
|
|
672
|
+
if llk is LLK.GEODETIC_LON0:
|
|
673
|
+
lam += self.Lon0
|
|
661
674
|
return PhiLamZet5Tuple(phi, lam, zet, h, llk, **name)
|
|
662
675
|
|
|
663
676
|
def random2(self, llk=LLK.ELLIPSOIDAL, both=False, _rand=random):
|
|
@@ -769,7 +782,7 @@ class Triaxial3(_Triaxial3Base):
|
|
|
769
782
|
s = r.times_(*T._abc3)
|
|
770
783
|
p = max(fabs(s.z), hypot(s.x, s.y) - l1, s.length - l0)
|
|
771
784
|
h = _solve(_Fp2(s.xyz3, ls, n=2), p, T.b2)
|
|
772
|
-
v = r.times_(*(_over(
|
|
785
|
+
v = r.times_(*(_over(n, h + l_) for n, l_ in zip(T._a2b2c23, ls)))
|
|
773
786
|
if not h: # handle h == 0, v.y indeterminate
|
|
774
787
|
x = v.x if l0 else r.x # sphere
|
|
775
788
|
y = v.y if l1 else r.y # sphere or prolate
|
|
@@ -803,38 +816,6 @@ class Triaxial3B(Triaxial3):
|
|
|
803
816
|
self._init_abc3_e2_k2_kp2(Radius_(b=b), e2, k2, kp2, **name)
|
|
804
817
|
|
|
805
818
|
|
|
806
|
-
class Triaxial3s(_NamedDict):
|
|
807
|
-
'''(INTERNAL) L{Triaxial3} registry, I{must} be a sub-class
|
|
808
|
-
to accommodate the L{_LazyNamedEnumItem} properties.
|
|
809
|
-
'''
|
|
810
|
-
def __getattr__(self, name):
|
|
811
|
-
'''Get the value of an item by B{C{name}}.
|
|
812
|
-
'''
|
|
813
|
-
try:
|
|
814
|
-
return self[name]
|
|
815
|
-
except KeyError:
|
|
816
|
-
if name == _name_:
|
|
817
|
-
return _MODS.named._Named.name.fget(self)
|
|
818
|
-
raise _NamedDict._AttributeError(self, self._DOT_(name))
|
|
819
|
-
|
|
820
|
-
def __getitem__(self, key):
|
|
821
|
-
'''Get the value of an item by B{C{key}}.
|
|
822
|
-
'''
|
|
823
|
-
T = self._Triaxials(key, None)
|
|
824
|
-
if T is None or key == _name_:
|
|
825
|
-
raise KeyError(key)
|
|
826
|
-
return Triaxial3(T, name=key)
|
|
827
|
-
|
|
828
|
-
@property_ROver
|
|
829
|
-
def _Triaxials(self):
|
|
830
|
-
'''(INTERNAL) Get the C{Triaxials.get}, I{once}.
|
|
831
|
-
'''
|
|
832
|
-
return _MODS.triaxials.triaxial5.Triaxials.get
|
|
833
|
-
|
|
834
|
-
Triaxial3s = Triaxial3s() # PYCHOK singleton
|
|
835
|
-
'''Some pre-defined L{Triaxial3}s, like L{Triaxials<triaxials.Triaxials>}.'''
|
|
836
|
-
|
|
837
|
-
|
|
838
819
|
def _cubic(rs, rt, l0, l1): # Cartesian3.cubic
|
|
839
820
|
'''(INTERNaL) Solve sum(R2[i]/(z + lq2[i]), i=0,1,2) - 1 = 0
|
|
840
821
|
with lq2[2] = 0. This has three real roots with just one
|
|
@@ -843,7 +824,7 @@ def _cubic(rs, rt, l0, l1): # Cartesian3.cubic
|
|
|
843
824
|
a = l0 + l1
|
|
844
825
|
b = l0 * l1
|
|
845
826
|
c = -b * rs[2] # z2
|
|
846
|
-
# cubic equation z
|
|
827
|
+
# cubic equation z**3 + a*z**2 + b*z + c = 0
|
|
847
828
|
b -= fdot(rs, l1, l0, a)
|
|
848
829
|
a -= rt
|
|
849
830
|
_r = b > 0
|
|
@@ -905,7 +886,8 @@ def _solve(_fp2, p, pscale, **n):
|
|
|
905
886
|
if not (fv > _TOL2):
|
|
906
887
|
break
|
|
907
888
|
p, d = _P2(-fv / fp) # d is positive
|
|
908
|
-
if i and d <= dt and (fv <= EPS8 or
|
|
889
|
+
if i and d <= dt and (fv <= EPS8 or
|
|
890
|
+
d <= (max(pt, p) * _TOL)):
|
|
909
891
|
break
|
|
910
892
|
dt = d
|
|
911
893
|
else:
|
|
@@ -946,6 +928,20 @@ def _v_h_llk_name_NOIDAL(x_ct, y, z, **h_llk_name):
|
|
|
946
928
|
raise TriaxialError(h=h, llk=llk, **kwds)
|
|
947
929
|
return v, h, (LLK.ELLIPSOIDAL if llk is None else llk), name
|
|
948
930
|
|
|
931
|
+
|
|
932
|
+
class Triaxial3s(_TriaxialsBase):
|
|
933
|
+
_Triaxial = Triaxial3
|
|
934
|
+
|
|
935
|
+
Triaxial3s = Triaxial3s(Triaxial3, Triaxial3B) # PYCHOK singleton
|
|
936
|
+
'''Some pre-defined L{Triaxial3}s, like L{Triaxials<triaxials.triaxial5.Triaxials>}.'''
|
|
937
|
+
Triaxial3s._assert()
|
|
938
|
+
|
|
939
|
+
if __name__ == _DMAIN_:
|
|
940
|
+
# __doc__ of this file, force all into registry
|
|
941
|
+
from pygeodesy.internals import _pregistry
|
|
942
|
+
_pregistry(Triaxial3s)
|
|
943
|
+
|
|
944
|
+
|
|
949
945
|
# **) MIT License
|
|
950
946
|
#
|
|
951
947
|
# Copyright (C) 2025-2026 -- mrJean1 at Gmail -- All Rights Reserved.
|
pygeodesy/triaxials/triaxial5.py
CHANGED
|
@@ -37,9 +37,8 @@ from pygeodesy.angles import _SinCos2, Property_RO
|
|
|
37
37
|
from pygeodesy.basics import _isin, isLatLon
|
|
38
38
|
from pygeodesy.constants import EPS, EPS0, EPS02, _EPS2e4, INT0, \
|
|
39
39
|
_isfinite, isnear1, _over, _SQRT2_2, \
|
|
40
|
-
_0_0, _0_5, _1_0, _N_1_0
|
|
41
|
-
from pygeodesy.datums import Datum, _spherical_datum, _WGS84,
|
|
42
|
-
# from pygeodesy.ellipsoids import Ellipsoid, _EWGS84 # from .datums
|
|
40
|
+
_0_0, _0_5, _1_0, _N_1_0
|
|
41
|
+
from pygeodesy.datums import Datum, _spherical_datum, _WGS84, Fmt
|
|
43
42
|
# from pygeodesy.elliptic import Elliptic # _MODS
|
|
44
43
|
from pygeodesy.errors import _AssertionError, _ValueError, _xkwds_pop2
|
|
45
44
|
from pygeodesy.fmath import Fdot, fdot, hypot, hypot_, fabs, sqrt
|
|
@@ -48,7 +47,7 @@ from pygeodesy.interns import NN, _beta_, _distant_, _DMAIN_, _finite_, _height_
|
|
|
48
47
|
_inside_, _near_, _negative_, _not_, _null_, _opposite_, \
|
|
49
48
|
_outside_, _too_, _x_, _y_
|
|
50
49
|
from pygeodesy.lazily import _ALL_LAZY, _FOR_DOCS
|
|
51
|
-
from pygeodesy.named import
|
|
50
|
+
from pygeodesy.named import _name__, _Pass
|
|
52
51
|
from pygeodesy.namedTuples import LatLon3Tuple, _NamedTupleTo, Vector2Tuple, \
|
|
53
52
|
Vector3Tuple, Vector4Tuple
|
|
54
53
|
# from pygeodesy.props import Property_RO # from .triaxials.angles
|
|
@@ -56,15 +55,15 @@ from pygeodesy.namedTuples import LatLon3Tuple, _NamedTupleTo, Vector2Tuple, \
|
|
|
56
55
|
from pygeodesy.triaxials.bases import Conformal5Tuple, _HeightINT0, _hypot2_1, \
|
|
57
56
|
_not_ordered_, _OrderedTriaxialBase, _over0, \
|
|
58
57
|
_otherV3d_, _over02, _sqrt0, TriaxialError, \
|
|
59
|
-
_Triaxial3Base, _UnOrderedTriaxialBase
|
|
58
|
+
_Triaxial3Base, _TriaxialsBase, _UnOrderedTriaxialBase
|
|
60
59
|
from pygeodesy.units import Degrees, Height_, Lat, Lon, Meter, Radians, Radius_, Scalar_
|
|
61
|
-
from pygeodesy.utily import atan2, atan2d
|
|
60
|
+
from pygeodesy.utily import atan2, atan2d
|
|
62
61
|
from pygeodesy.vector3d import _otherV3d, Vector3d
|
|
63
62
|
|
|
64
63
|
# from math import fabs, sqrt # from .fmath
|
|
65
64
|
|
|
66
65
|
__all__ = _ALL_LAZY.triaxials_triaxial5
|
|
67
|
-
__version__ = '
|
|
66
|
+
__version__ = '26.01.14'
|
|
68
67
|
|
|
69
68
|
_omega_ = 'omega'
|
|
70
69
|
_TRIPS = 359 # Eberly 1074?
|
|
@@ -757,41 +756,6 @@ class ConformalSphere(Conformal):
|
|
|
757
756
|
return self.a
|
|
758
757
|
|
|
759
758
|
|
|
760
|
-
class Triaxials(_NamedEnum):
|
|
761
|
-
'''(INTERNAL) L{Triaxial} registry, I{must} be a sub-class
|
|
762
|
-
to accommodate the L{_LazyNamedEnumItem} properties.
|
|
763
|
-
'''
|
|
764
|
-
def _Lazy(self, *abc, **name):
|
|
765
|
-
'''(INTERNAL) Instantiate the C{Triaxial}.
|
|
766
|
-
'''
|
|
767
|
-
a, b, c = map(km2m, abc)
|
|
768
|
-
return Triaxial(a, b, c, **name)
|
|
769
|
-
|
|
770
|
-
Triaxials = Triaxials(Triaxial, Triaxial_) # PYCHOK singleton
|
|
771
|
-
'''Some pre-defined L{Triaxial}s, all I{lazily} instantiated.'''
|
|
772
|
-
# <https://ArxIV.org/pdf/1909.06452.pdf> Table 1 Semi-axes in Km
|
|
773
|
-
# <https://www.JPS.NASA.gov/education/images/pdf/ss-moons.pdf>
|
|
774
|
-
# <https://link.Springer.com/article/10.1007/s00190-022-01650-9>
|
|
775
|
-
# <https://GeographicLib.SourceForge.io/C++/doc/classGeographicLib_1_1Constants.html>
|
|
776
|
-
_abc84_35 = (_EWGS84.a + 35), (_EWGS84.a - 35), _EWGS84.b
|
|
777
|
-
Triaxials._assert( # a (Km) b (Km) c (Km) planet
|
|
778
|
-
Amalthea = _lazy('Amalthea', 125.0, 73.0, _64_0), # Jupiter
|
|
779
|
-
Ariel = _lazy('Ariel', 581.1, 577.9, 577.7), # Uranus
|
|
780
|
-
Earth = _lazy('Earth', 6378.173435, 6378.1039, 6356.7544),
|
|
781
|
-
Enceladus = _lazy('Enceladus', 256.6, 251.4, 248.3), # Saturn
|
|
782
|
-
Europa = _lazy('Europa', 1564.13, 1561.23, 1560.93), # Jupiter
|
|
783
|
-
Io = _lazy('Io', 1829.4, 1819.3, 1815.7), # Jupiter
|
|
784
|
-
Mars = _lazy('Mars', 3394.6, 3393.3, 3376.3),
|
|
785
|
-
Mimas = _lazy('Mimas', 207.4, 196.8, 190.6), # Saturn
|
|
786
|
-
Miranda = _lazy('Miranda', 240.4, 234.2, 232.9), # Uranus
|
|
787
|
-
Moon = _lazy('Moon', 1735.55, 1735.324, 1734.898), # Earth
|
|
788
|
-
Tethys = _lazy('Tethys', 535.6, 528.2, 525.8), # Saturn
|
|
789
|
-
WGS84_3 = _lazy('WGS84_3', 6378.17136, 6378.10161, 6356.75184), # C++
|
|
790
|
-
WGS84_3r = _lazy('WGS84_3r', 6378.172, 6378.102, 6356.752), # C++, rounded
|
|
791
|
-
WGS84_35 = _lazy('WGS84_35', *map(m2km, _abc84_35)))
|
|
792
|
-
del _abc84_35, _EWGS84
|
|
793
|
-
|
|
794
|
-
|
|
795
759
|
def _hartzell3(pov, los, Tun): # in .Ellipsoid.hartzell4, .formy.hartzell
|
|
796
760
|
'''(INTERNAL) Hartzell's "Satellite Line-of-Sight Intersection ...",
|
|
797
761
|
formula from a Point-Of-View to an I{un-/ordered} Triaxial.
|
|
@@ -1180,20 +1144,24 @@ def _validate(a, b, c, d, T, x, y, z, val):
|
|
|
1180
1144
|
dot=e, eps=val)
|
|
1181
1145
|
|
|
1182
1146
|
|
|
1147
|
+
class Triaxials(_TriaxialsBase):
|
|
1148
|
+
_Triaxial = Triaxial
|
|
1149
|
+
|
|
1150
|
+
Triaxials = Triaxials(Triaxial, Triaxial_) # PYCHOK singleton
|
|
1151
|
+
'''Some pre-defined L{Triaxial}s, all I{lazily} instantiated.'''
|
|
1152
|
+
Triaxials._assert()
|
|
1153
|
+
|
|
1183
1154
|
if __name__ == _DMAIN_:
|
|
1184
1155
|
|
|
1185
|
-
from pygeodesy import printf
|
|
1186
|
-
from pygeodesy.interns import _COMMA_, _NL_, _NLATvar_
|
|
1156
|
+
from pygeodesy.internals import _pregistry, printf
|
|
1187
1157
|
|
|
1188
1158
|
T = Triaxial_(6378388.0, 6378318.0, 6356911.9461)
|
|
1189
1159
|
t = T.height4(3909863.9271, 3909778.123, 3170932.5016)
|
|
1190
1160
|
printf('# Bektas: %r', t)
|
|
1161
|
+
# __doc__ of this file, force all into registry
|
|
1162
|
+
_pregistry(Triaxials)
|
|
1191
1163
|
|
|
1192
|
-
|
|
1193
|
-
t = [NN] + Triaxials.toRepr(all=True, asorted=True).split(_NL_)
|
|
1194
|
-
printf(_NLATvar_.join(i.strip(_COMMA_) for i in t))
|
|
1195
|
-
|
|
1196
|
-
# % python3 -m pygeodesy.triaxials
|
|
1164
|
+
# % python3 -m pygeodesy.triaxials.triaxial5
|
|
1197
1165
|
#
|
|
1198
1166
|
# Bektas: height4(x=3909251.554667, y=3909165.750567, z=3170432.501602, h=999.999996)
|
|
1199
1167
|
|
pygeodesy/utily.py
CHANGED
|
@@ -13,7 +13,8 @@ from __future__ import division as _; del _ # noqa: E702 ;
|
|
|
13
13
|
|
|
14
14
|
from pygeodesy.basics import _copysign, isinstanceof, isint, isstr
|
|
15
15
|
from pygeodesy.constants import EPS, EPS0, NAN, PI, PI2, PI_2, PI_4, PI_6, R_M, \
|
|
16
|
-
_M_KM, _M_NM, _M_SM,
|
|
16
|
+
_M_KM, _M_NM, _M_SM, _SQRT2_2 as _COS_45, \
|
|
17
|
+
_SQRT3_2 as _COS_30, _0_0, _0_5, _1_0, _N_1_0, \
|
|
17
18
|
_10_0, _90_0, _180_0, _360_0, _copysign_0_0, \
|
|
18
19
|
_copysignINF, _float, _isfinite, isnan, isnear0, \
|
|
19
20
|
_over_1, _umod_360, _umod_PI2, OVERFLOW
|
|
@@ -28,11 +29,10 @@ from math import acos, asin, asinh, atan2 as _atan2, cos, degrees, fabs, \
|
|
|
28
29
|
radians, sin, sinh, tan as _tan # pow
|
|
29
30
|
|
|
30
31
|
__all__ = _ALL_LAZY.utily
|
|
31
|
-
__version__ = '
|
|
32
|
+
__version__ = '26.01.14'
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
_COS_45 = _SIN_45 = 0.70710678118654752440 # sqrt(2) / 2
|
|
34
|
+
_SIN_30 = _0_5
|
|
35
|
+
_SIN_45 = _COS_45
|
|
36
36
|
|
|
37
37
|
_G = _Enum( # grades per ...
|
|
38
38
|
DEG = _float( 400.0 / _360_0), # degree
|
|
@@ -42,7 +42,7 @@ _M = _Enum( # meter per ...
|
|
|
42
42
|
ACRE = _float( 4046.8564224), # acre, chain2m(1) * furlong2m(1), squared
|
|
43
43
|
CHAIN = _float( 20.1168), # yard2m(1) * 22
|
|
44
44
|
FATHOM = _float( 1.8288), # yard2m(1) * 2 or _M.NM * 1e-3
|
|
45
|
-
FOOT = _float( 0.3048), # Int'l foot, 1 / 3.280_839_895_0131
|
|
45
|
+
FOOT = _float( 0.3048), # Int'l foot, 1 / 3.280_839_895_0131 == (254 * 12) / 10_000
|
|
46
46
|
FOOT_GE = _float( 0.31608), # German Fuss, 1 / 3.163_756_011_1364
|
|
47
47
|
FOOT_FR = _float( 0.3248406), # French Pied-du-Roi or pied, 1 / 3.078_432_929_8739
|
|
48
48
|
FOOT_US = _float( 0.3048006096012192), # US Survey foot, 1_200 / 3_937
|
|
@@ -56,7 +56,7 @@ _M = _Enum( # meter per ...
|
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
def _abs1nan(x):
|
|
59
|
-
'''(INTERNAL) Bracket C{x}.
|
|
59
|
+
'''(INTERNAL) Bracket C{-1 < x < 1 or isnan(x)}.
|
|
60
60
|
'''
|
|
61
61
|
return _N_1_0 < x < _1_0 or isnan(x)
|
|
62
62
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pygeodesy
|
|
3
|
-
Version:
|
|
3
|
+
Version: 26.1.16
|
|
4
4
|
Summary: Pure Python geodesy tools
|
|
5
5
|
Home-page: https://GitHub.com/mrJean1/PyGeodesy
|
|
6
6
|
Author: Jean M. Brouwers
|
|
@@ -8,7 +8,7 @@ Author-email: mrJean1@Gmail.com
|
|
|
8
8
|
Maintainer: Jean M. Brouwers
|
|
9
9
|
Maintainer-email: mrJean1@Gmail.com
|
|
10
10
|
License: MIT
|
|
11
|
-
Keywords: AER Albers altitude Andoyer annulus antipode area attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta bi-quadratic boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conformal-sphere conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth Ferrari-solution Field-Of-View flattening fma fmath footpoint footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum fused-multiply-add GARS geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve GeodTest geographiclib Geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading hectare height Heikkinen Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED Niemeyer non-finite normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator pygeodesy PyInstaller PyPy quartic radical radii radius Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rho-theta-phi rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-polar spherical-triangle squared-quartic standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d TwoProduct TwoSum umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You zenzi-cubic zenzi-quartic
|
|
11
|
+
Keywords: AER AGM Albers altitude Andoyer annulus antipode area Arithmetic-Geometric-Mean attitude Authalic auxiliary azimuth azimuthal azimuth-elevation-range bearing bank Barsky Barth beta bi-quadratic boolean cached Cagnoli cartesian Cassini Cassini-Soldner chord circle-intersections circumcenter circumcircle circumradius clip Cohen Cohen-Sutherland Collins composite conformal conformal-sphere conic constants contact-triangle Cook Correia cosines-law coverage curvature cylindrical datum deprecation deficit development discrete distance Douglas earth east-north-up eccentricity ECEF elevation ellipsoid ellipsoidal-latitude-beta ellipsoidal-longitude-omega elliptic ENU EPSG equal-area equidistant equirectangular ETM ETRF Euclidean even-odd-rule ExactTM excess Farrell Farrell-Barth Ferrari-solution Field-Of-View flattening fma fmath footpoint footprint Forster Forster-Hormann-Popa Forsythe FOV fractional Frechet Fréchet frustum Fsum fused-multiply-add GARS Gauss-Kummer geocentric GeoConvert GeodesicExact geodesy geodetic GeodSolve Geod3Solve GeodTest geographiclib Geohash geoid geoidHeight GeoidHeights georef Girard gnomonic gons grades gradians Greiner Greiner-Hormann Hartzell Hausdorff Haversine heading hectare height Heikkinen Heron Hodgman horizon Hormann Hubeny IDW incenter incirle infix_@_operator inradius intermediate interpolate intersect intersection intersection3d intersections IntersectTool Inverse-Distance-Weighting Isometric ITRF Jacobi Jacobi-Conformal Jarque-Bera Jekel Karney Krueger Krüger kurtosis Lambert latitude law-of-cosines least-squares Lesh L_Huilier LHuilier Liang Liang-Barsky Linderholm-Segal linearize Line-Of-Sight LocalCartesian local-tangent-plane local-x-y-z longitude LOS loxodrome lstsq LTP lune LV03 LV95 mean memoize memoized Mercator Meeus MGRS nearest NED Niemeyer non-finite normalize Norrdine north-east-down numpy n-vector Nvector oblate omega orthographic orthometric-height OSGB OSGR overlap parallel parallel-of-latitude Parametric path-intersection perimeter Peucker Pierlot pitch plumb Point-Of-View polar Popa POV precision-cubic-root precision-hypotenuse precision-powers precision-running-summation precision-square-root precision-summation prolate Pseudo-Mercator pygeodesy PyInstaller PyPy quartic radical radii radius Ramanujan Ramer Ramer-Douglas-Peucker Rectifying Reduced resect resection Rey-Jer Reumann Reumann-Witkam rho-theta-phi rhumb RhumbSolve running-linear-regression running-statistics running-stats running-summation scipy secant semi-perimeter sexagecimal simplify skewness Snellius Snellius-Pothenot Snyder Soddy Soddy-circles Soldner sphere sphere-intersections spherical-deficit spherical-excess spherical-polar spherical-triangle squared-quartic standard-deviation stereographic Sudano surface-area Sutherland Sutherland-Hodgman tangent-circles Terrestrial-Reference-Frame Thomas Tienstra tilt TMcoords TMExact toise transverse TransverseMercatorExact TRF triangle triangulate triaxial triaxial-ellipsoid trigonometry trilaterate trilaterate-2d trilaterate-3d TwoProduct TwoSum umbilic-point unit unroll UPS UTM UTM/UPS variance velocities Veness Vermeille viewing-frustum Vincenty Visvalingam Visvalingam-Whyatt volume volumetric Web-Mercator Welford WGRS WGS Whyatt Wildberger Witkam winding-number XYZ yaw You zenzi-cubic zenzi-quartic
|
|
12
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
23
24
|
Classifier: Topic :: Software Development
|
|
24
25
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
25
26
|
|
|
@@ -33,8 +34,8 @@ models using precision exact, elliptic, trigonometric, vector-based, iterative a
|
|
|
33
34
|
methods for geodetic (lat-/longitude), geocentric (ECEF_ cartesian), local (LTP_) and certain
|
|
34
35
|
`triaxial ellipsoidal`_ coordinates.
|
|
35
36
|
|
|
36
|
-
Transcoded in part from `JavaScript originals`_ by *Chris Veness (C) 2005-
|
|
37
|
-
`C++ classes`_ by *Charles F.F. Karney (C) 2008-
|
|
37
|
+
Transcoded in part from `JavaScript originals`_ by *Chris Veness (C) 2005-2025* and from several
|
|
38
|
+
`C++ classes`_ by *Charles F.F. Karney (C) 2008-2025* and published under the same `MIT License`_.
|
|
38
39
|
|
|
39
40
|
There are four modules for ellipsoidal earth models, *ellipsoidalExact*, *-Karney*, *-Vincenty*
|
|
40
41
|
and *-Nvector* and two for spherical ones, *sphericalTrigonometry* and *-Nvector*. Each module
|
|
@@ -101,8 +102,13 @@ Modules ``ellipsoidalGeodSolve`` and ``geodsolve`` and ``azimuthal`` classes ``E
|
|
|
101
102
|
and ``GnomonicGeodSolve`` depend on *Karney*\'s C++ utility GeodSolve_ to be executable and set with
|
|
102
103
|
env variable ``PYGEODESY_GEODSOLVE`` or with property ``Ellipsoid.geodsolve``.
|
|
103
104
|
|
|
105
|
+
Triaxial geodesic classes ``Geodesic3Solve`` and ``GeodesicLine3Solve`` in module ``geod3solve`` need
|
|
106
|
+
*Karney*\'s C++ utility Geod3Solve_ to be executable and set with env variable ``PYGEODESY_GEOD3SOLVE``
|
|
107
|
+
or with property ``Geodesic3Solve.Geod3Solve``.
|
|
108
|
+
|
|
104
109
|
Class ``Intersectool`` in module ``geodesici`` needs *Karney*\'s C++ utility IntersectTool_ to be
|
|
105
|
-
executable and set with env variable ``PYGEODESY_INTERSECTTOOL
|
|
110
|
+
executable and set with env variable ``PYGEODESY_INTERSECTTOOL`` or with property
|
|
111
|
+
``Intersectool.IntersectTool``.
|
|
106
112
|
|
|
107
113
|
To compare ``MGRS`` results from modules ``mgrs`` and ``testMgrs`` with *Karney*\'s C++ utility
|
|
108
114
|
GeoConvert_, the latter must be executable and set with env variable ``PYGEODESY_GEOCONVERT``.
|
|
@@ -120,31 +126,31 @@ test results (on macOS only) and the complete documentation_ generated by Epydoc
|
|
|
120
126
|
Tests
|
|
121
127
|
=====
|
|
122
128
|
|
|
123
|
-
The tests ran with Python 3.14.2 (with geographiclib_ 2.1), Python 3.13.
|
|
124
|
-
numpy_ 2.3.3, scipy_ 1.16.2, GeoConvert_ 2.
|
|
125
|
-
numpy_ 2.1.0, scipy_ 1.14.1, GeodSolve_ 2.
|
|
126
|
-
geographiclib_ 2.0, numpy_ 1.24.2 and scipy_ 1.10.1) and with
|
|
127
|
-
numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.
|
|
128
|
-
all on macOS 26.
|
|
129
|
+
The tests ran with Python 3.14.2 (with geographiclib_ 2.1), Python 3.13.11 (with geographiclib_ 2.1,
|
|
130
|
+
numpy_ 2.3.3, scipy_ 1.16.2, GeoConvert_ 2.7, GeodSolve_ 2.7 and Geod3Solve_ 2.7), Python 3.12.10 (with
|
|
131
|
+
geographiclib_ 2.0, numpy_ 2.1.0, scipy_ 1.14.1, GeodSolve_ 2.7, Geod3Solve_ 2.7, IntersectTool_ 2.7
|
|
132
|
+
and RhumbSolve_ 2.7), Python 3.11.9 (with geographiclib_ 2.0, numpy_ 1.24.2 and scipy_ 1.10.1) and with
|
|
133
|
+
Python 2.7.18 (with geographiclib_ 1.50, numpy_ 1.16.6, scipy_ 1.2.2, GeoConvert_ 2.7, GeodSolve_ 2.7,
|
|
134
|
+
Geod3Solve_ 2.7, IntersectTool_ 2.7 and RhumbSolve_ 2.7), all on macOS 26.2 Tahoe in 64-bit.
|
|
129
135
|
|
|
130
136
|
All tests ran with and without ``lazy import`` for Python 3 and with command line option ``-W default``
|
|
131
137
|
and env variable ``PYGEODESY_WARNINGS=on`` for all Python versions. The results of those tests are
|
|
132
138
|
included in the distribution files.
|
|
133
139
|
|
|
134
|
-
Python 3.14.2, 3.13.
|
|
140
|
+
Python 3.14.2, 3.13.11, 3.12.10 and 3.11.9 run on Apple M4 Si (``arm64``), *natively*. Python 2.7.18 runs
|
|
135
141
|
on Intel (``x86_64``) or Intel *emulation* (\"``arm64_x86_64``\", see function `pygeodesy.machine`_).
|
|
136
142
|
|
|
137
|
-
Test coverage has been measured with coverage_ 7.10.7 using Python 3.14.2, 3.13.
|
|
143
|
+
Test coverage has been measured with coverage_ 7.10.7 using Python 3.14.2, 3.13.11 and 3.12.10. The
|
|
138
144
|
complete coverage report in HTML and a PDF summary are included in the distribution files.
|
|
139
145
|
|
|
140
|
-
The tests also ran with Python 3.
|
|
141
|
-
Python 3.
|
|
146
|
+
The tests also ran with Python 3.14.2 (and geographiclib_ 2.1) on `Debian 12`_ in 64-bit only and with
|
|
147
|
+
Python 3.13.8 (and geographiclib_ 2.0) on `Windows 2019Server`_ in 64-bit only and with Python 2.7.18
|
|
142
148
|
(and with geographiclib_ 1.52) on `Windows 10`_ in 64- and 32-bit.
|
|
143
149
|
|
|
144
150
|
A single-File and single-Directory application with ``pygeodesy`` has been bundled using PyInstaller_ 3.4
|
|
145
151
|
and 64-bit Python 3.7.4 and 3.7.3 on macOS 10.13.6 High Sierra.
|
|
146
152
|
|
|
147
|
-
Previously, the tests were run with Python 3.13.0-
|
|
153
|
+
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.1, 3.8.7, 3.7.1, 2.7.15,
|
|
148
154
|
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,
|
|
149
155
|
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
|
|
150
156
|
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
|
|
@@ -160,12 +166,12 @@ Server 2012R2, Windows 10 Pro and 32-bit Python 2.6.6 on Windows XP SP3.
|
|
|
160
166
|
Notes
|
|
161
167
|
=====
|
|
162
168
|
|
|
163
|
-
All Python source code has been statically checked_ with Ruff_ using Python 3.13.
|
|
164
|
-
PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on macOS 26.
|
|
169
|
+
All Python source code has been statically checked_ with Ruff_ using Python 3.13.11 and with PyChecker_, PyFlakes_,
|
|
170
|
+
PyCodeStyle_ (formerly Pep8) and McCabe_ using Python 2.7.18, both in 64-bit on macOS 26.2 Tahoe only.
|
|
165
171
|
|
|
166
172
|
For a summary of all *Karney*-based functionality in ``pygeodesy``, see module karney_.
|
|
167
173
|
|
|
168
|
-
*Last updated:
|
|
174
|
+
*Last updated: Jan 16, 2026.*
|
|
169
175
|
|
|
170
176
|
License
|
|
171
177
|
=======
|
|
@@ -224,6 +230,7 @@ DEALINGS IN THE SOFTWARE.
|
|
|
224
230
|
.. _Garefs (GARS): https://WikiPedia.org/wiki/Global_Area_Reference_System
|
|
225
231
|
.. _GeoConvert: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
|
|
226
232
|
.. _GeodSolve: https://GeographicLib.SourceForge.io/C++/doc/utilities.html
|
|
233
|
+
.. _Geod3Solve: https://GeographicLib.SourceForge.io/C++/doc/Geod3Solve.1.html
|
|
227
234
|
.. _geographiclib: https://PyPI.org/project/geographiclib
|
|
228
235
|
.. _GeographicLib.: https://GeographicLib.SourceForge.io/C++/doc/index.html
|
|
229
236
|
.. _Geohashes: https://www.Movable-Type.co.UK/scripts/geohash.html
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
pygeodesy/LICENSE,sha256=YfgAiyxOwY6P9Kkb1_5XN81nueTLrpb3Ffkv3EuPgFU,1144
|
|
2
|
-
pygeodesy/__init__.py,sha256=
|
|
2
|
+
pygeodesy/__init__.py,sha256=DmJmEyYy4jSMO4rkA65hK5ZTWBan1UwlXKGAehPbWoc,43790
|
|
3
3
|
pygeodesy/__main__.py,sha256=06sdpwiuTP1hPvKOdzjqhuuDqqpicErwnAYwioeiTNw,5597
|
|
4
|
-
pygeodesy/albers.py,sha256=
|
|
4
|
+
pygeodesy/albers.py,sha256=6S0hHJA6MspeKLsQHW0cFUpJcWRL1yGshJxtEgJ9PMQ,30908
|
|
5
5
|
pygeodesy/angles.py,sha256=68sNVXU3QKGZnIYyjWFcKhWlBKSmaduO--rjtoM2sqU,29996
|
|
6
6
|
pygeodesy/azimuthal.py,sha256=7JwLHx-mTkwxuSkWmxNPPnPFAu4a0F5X_T_JyL6aEHE,49867
|
|
7
7
|
pygeodesy/basics.py,sha256=bbQs7M1epOl7t8IF2xs5uA46rrdYdobSuiJJ6v5st0s,32988
|
|
8
8
|
pygeodesy/booleans.py,sha256=kEF7rFvQzUaGFdrDzOXo_GFauXmaDTnhd2LNDh69B28,72636
|
|
9
|
-
pygeodesy/cartesianBase.py,sha256=
|
|
9
|
+
pygeodesy/cartesianBase.py,sha256=fCFcb6ubmMRBc19Ny-OBvbdrmdaOtqin8bf1PVhH4tg,45372
|
|
10
10
|
pygeodesy/clipy.py,sha256=uLTbX6byZa6fi2Kir1WanfW47JSxAkmfngH3vD7TDfw,27481
|
|
11
|
-
pygeodesy/constants.py,sha256=
|
|
11
|
+
pygeodesy/constants.py,sha256=HP5ZO34CqwaVU19NThXj2OMvlqFcDhiUrYYAiWvJz1Q,21810
|
|
12
12
|
pygeodesy/css.py,sha256=Fb_z5nvu5j4To1WgXGPOaEaME71IZW747FdpL4YBczc,25793
|
|
13
|
-
pygeodesy/datums.py,sha256=
|
|
13
|
+
pygeodesy/datums.py,sha256=jG2KZozQqV559PXVrD08N977GxwnLRGH_JDOn9yRjDw,33912
|
|
14
14
|
pygeodesy/dms.py,sha256=2jesqmjWy-Pze5VWtgbiyC8CbjeIFbPP1qt2nYriubw,42202
|
|
15
15
|
pygeodesy/ecef.py,sha256=0MSfLlMedBokrrn2YcOyfa2MrJhhKzVemXTHn8Qi4KI,62577
|
|
16
16
|
pygeodesy/ecefLocals.py,sha256=hlx0DUW5n6v2H8SLJvaSEQQj_Sq61bLXpT8PY7SWqe4,7794
|
|
@@ -22,42 +22,42 @@ pygeodesy/ellipsoidalGeodSolve.py,sha256=wuA-veOYC95vcEnbr4zT0ZzDN7s6kSuMRHpd4V1
|
|
|
22
22
|
pygeodesy/ellipsoidalKarney.py,sha256=CxPB91CKA0q5E97TOcErTTQdufdB2dT4KF84QZtfnGM,18839
|
|
23
23
|
pygeodesy/ellipsoidalNvector.py,sha256=48N-KtVUn0wi9kXZe12hg0jABWNeaiNXyY__oS-x5I4,30146
|
|
24
24
|
pygeodesy/ellipsoidalVincenty.py,sha256=X4OpMPtoretveNjHlEXKL4ifmAARTRY0yxbIOlR26J8,26273
|
|
25
|
-
pygeodesy/ellipsoids.py,sha256=
|
|
26
|
-
pygeodesy/elliptic.py,sha256=
|
|
25
|
+
pygeodesy/ellipsoids.py,sha256=5UwnIOpDCFrxqQIF9mkQUEEPW2H1YRog_MpYkvcYx7c,109248
|
|
26
|
+
pygeodesy/elliptic.py,sha256=xCllssJSm2O4W2Mo2hb1f65pT-GcaVwQuIpzR84eD7Y,59483
|
|
27
27
|
pygeodesy/epsg.py,sha256=wS8Mzzk70Fzry6c0fBA16VVez3ghKG2Dhgpo2eN_Ik8,8220
|
|
28
28
|
pygeodesy/errors.py,sha256=76wVrhxev-n-kBOHv3MicHell3ifA2whUp4SRCrqUx4,32633
|
|
29
29
|
pygeodesy/etm.py,sha256=3pQmpjsrnI0mgLwhkLOCOFq_44bkhHwXExf-Keyky2w,46796
|
|
30
|
-
pygeodesy/fmath.py,sha256
|
|
31
|
-
pygeodesy/formy.py,sha256=
|
|
30
|
+
pygeodesy/fmath.py,sha256=OUitWAuSM7OzlbJJ_JahfUjsVrIv5Bnt4U_0pUgXTQ4,37995
|
|
31
|
+
pygeodesy/formy.py,sha256=TSDEyzOInkhmeZYVRjoOl4oO7wCFrE2YLWGTs9Ewa_4,69842
|
|
32
32
|
pygeodesy/frechet.py,sha256=FySLdZgLb_NXd81AILx4G2C9J6dxwI5uYW1MEHuEocg,35588
|
|
33
33
|
pygeodesy/fstats.py,sha256=EuyC9UrJ5K0IlZqM7h3C8C7tYDrTujqoBp9-V1ICPx0,28348
|
|
34
|
-
pygeodesy/fsums.py,sha256=
|
|
34
|
+
pygeodesy/fsums.py,sha256=VmxnlFld-3z-_xuksKsQinWmzZyeo6CEMM9c9ZabMCU,105500
|
|
35
35
|
pygeodesy/gars.py,sha256=z7yvE6dRAjtXUAB9yakH8duwF2gBKbcjXUIznNnr8_w,11761
|
|
36
|
-
pygeodesy/geod3solve.py,sha256=
|
|
37
|
-
pygeodesy/geodesici.py,sha256=
|
|
36
|
+
pygeodesy/geod3solve.py,sha256=ATQmfkg2KU1YwAgQU32t78Fq5mLvpYykLpqH6TH6mXw,22052
|
|
37
|
+
pygeodesy/geodesici.py,sha256=eHkXKDQzeFfJ6lVkGANqnEk5hQR-MkYXQlgXCLzbG3Y,74933
|
|
38
38
|
pygeodesy/geodesicw.py,sha256=bhwSBtHAaNAl487uAgifS42cKvcYTe-8O8M5S44u9_k,30029
|
|
39
|
-
pygeodesy/geodsolve.py,sha256=
|
|
39
|
+
pygeodesy/geodsolve.py,sha256=GqMn4PjXAT7jK0VjxeMv7FgNx-_T_LeAfeMda7wUSqM,25032
|
|
40
40
|
pygeodesy/geohash.py,sha256=LmjvzgrzD0Cj-xPCZNJp3LbVOQ7llaE2sAO0V0SxNOo,40124
|
|
41
41
|
pygeodesy/geoids.py,sha256=Fn3pOCokzQJuEY2UE11Ah5XuiT24WRmmoc3FeNhfpsg,86129
|
|
42
42
|
pygeodesy/hausdorff.py,sha256=_zfkZ4pzUE_6LwFD77RU9NC58aN8imglI7TfapM82Wc,32269
|
|
43
43
|
pygeodesy/heights.py,sha256=T_5ZhtFAskQf-1BHL2Nm5bTYQIMJj-d1UKhW11YPWvs,41011
|
|
44
|
-
pygeodesy/internals.py,sha256=
|
|
44
|
+
pygeodesy/internals.py,sha256=WPrXmN1GMnVB3JYJbXpC1cZlIYMyU9v1I1rDeHI8yGQ,24934
|
|
45
45
|
pygeodesy/interns.py,sha256=h7LupB9eEhwgW8mq3R4VMFI3i-49ObgXAEvV2JJmmpM,23521
|
|
46
46
|
pygeodesy/iters.py,sha256=xH719oFB-0z4jCAHeC6uLqyfWPtpQoSBF6Pgnoz5weQ,20345
|
|
47
|
-
pygeodesy/karney.py,sha256=
|
|
47
|
+
pygeodesy/karney.py,sha256=_HLXxYtoh8eIMfsvsH7f4irb0L1xHljnvgLf7_e3ixc,42115
|
|
48
48
|
pygeodesy/ktm.py,sha256=262-FbXSHpQnlpHKyqzMO4Uuf7DflDINSSSOEmRXyRc,27270
|
|
49
49
|
pygeodesy/latlonBase.py,sha256=as2BBvogFBANmyixQNgVWVfXuBSvcDtb200XzSMKzE4,75317
|
|
50
|
-
pygeodesy/lazily.py,sha256=
|
|
51
|
-
pygeodesy/lcc.py,sha256=
|
|
50
|
+
pygeodesy/lazily.py,sha256=Bsjd8yeZDWu-crKUPHf1--41_XxeMLhJVkmXXg-EkEI,48865
|
|
51
|
+
pygeodesy/lcc.py,sha256=iqIeQpJu0e0CtyJeD8ha_YWaFVHIHVsfMw5CtwAbBIQ,25667
|
|
52
52
|
pygeodesy/ltp.py,sha256=-dokXawH_nvyjYaQzPQ0pguB0yAlvybnFnokEwLE488,50893
|
|
53
53
|
pygeodesy/ltpTuples.py,sha256=6BcsN1rjshV1w80EtXR14TzDmZLl-YReFJ4UFL-DBt0,59101
|
|
54
54
|
pygeodesy/mgrs.py,sha256=ZUsW0ixGlS0YOuzXFoGj3N0XrI1PbuSVYldZuqKS3g8,29842
|
|
55
|
-
pygeodesy/named.py,sha256=
|
|
55
|
+
pygeodesy/named.py,sha256=ZW9ckz5spaDhAZ6UfgRTU1h8hicv5O1FUtYij729TYE,53116
|
|
56
56
|
pygeodesy/namedTuples.py,sha256=mIwqxjSRqmJ7D4_BMYhQkSoAaaP3-rwnToNenu1k3yU,30598
|
|
57
57
|
pygeodesy/nvectorBase.py,sha256=hDLrOOBuxz0n5zNH3nyg5FlElUD2Yusd91PRL7QLooA,29927
|
|
58
58
|
pygeodesy/osgr.py,sha256=afrHMVQ6wrdCaKDXMuhXcDy0MTI-8HKQccSlKGUNwps,30852
|
|
59
59
|
pygeodesy/points.py,sha256=Fcz220qrQqLCI9b442sOb1wR0w12EsE1LDbLFwwXWhA,64497
|
|
60
|
-
pygeodesy/props.py,sha256=
|
|
60
|
+
pygeodesy/props.py,sha256=90WNv8voJGF_X4zEL_luSmZi3XNzA6gvLDAX9Sv6tCk,24658
|
|
61
61
|
pygeodesy/resections.py,sha256=47twtGa_PQ71QUwReECkRpVFyuRSuYhsCecS3cThEiA,43796
|
|
62
62
|
pygeodesy/simplify.py,sha256=8OJj7jkxJFVE5jQRvbpm14_Oxrv4Oju7atIGFRg3zUE,22068
|
|
63
63
|
pygeodesy/solveBase.py,sha256=4lKwoWCiDjQjaS_iMUZ7m8nkLL92yNHBcNsmNsulOdc,19631
|
|
@@ -65,11 +65,11 @@ pygeodesy/sphericalBase.py,sha256=54na1mQCuyZ1dYzpt801AC2B7PStLNmt3CRwAC2A03A,32
|
|
|
65
65
|
pygeodesy/sphericalNvector.py,sha256=N_qB3ziZMf0spE0fqd-GVW9omAy5YT3HdsE2DB2Td9Y,54948
|
|
66
66
|
pygeodesy/sphericalTrigonometry.py,sha256=YN-Gv2m1rWg2rzAXpuAFPu2WL-ARt3u1zKNWJLZ8JAk,64398
|
|
67
67
|
pygeodesy/streprs.py,sha256=tS21sthUtj06Jmh9rdyAbiczwjNjvZTMWvUmJwD9ODs,23728
|
|
68
|
-
pygeodesy/trf.py,sha256=
|
|
68
|
+
pygeodesy/trf.py,sha256=nKiCqHxAIWdI4Bq5VuJbn32CvcdutLMpSJT1aCvB97s,119214
|
|
69
69
|
pygeodesy/units.py,sha256=9zAnu28f0c7pELZviZDukxz6hjeAwhBvH5wq8F2-cww,35561
|
|
70
70
|
pygeodesy/unitsBase.py,sha256=9AHGuUuGWmKUYHNZt6tVxUkLDvSAyr2gitikME75eZg,14141
|
|
71
71
|
pygeodesy/ups.py,sha256=_Qyp1cBhAGOGPya09zZQYO468H2Nc8jxKYw-HgOMa8o,23288
|
|
72
|
-
pygeodesy/utily.py,sha256=
|
|
72
|
+
pygeodesy/utily.py,sha256=31ArxOIv4kkKcAOudBng13WOBEpn664-A9BeAUbYi6c,41282
|
|
73
73
|
pygeodesy/utm.py,sha256=Cu0CTqXVSNIIdzp8cejd0ONvo8Y26WtB3spt2o10ZV8,31123
|
|
74
74
|
pygeodesy/utmups.py,sha256=MsgnWVw0u_4nAO_kol4GjUTg7dMGwURR2hv3TV8eVik,13176
|
|
75
75
|
pygeodesy/utmupsBase.py,sha256=v9ZCOBaaMaAF-rUdzL-kbj0pov-E-8aBq9nuOMSnxYw,22730
|
|
@@ -103,10 +103,10 @@ pygeodesy/deprecated/rhumbx.py,sha256=SdCzJgaSMBxZUQpT3vu52eE1neZTMkddz1Vuu4KsGx
|
|
|
103
103
|
pygeodesy/geodesicx/_C4_24.py,sha256=qkKFpXNPBo2RRfCjNV_AjNO4nZm_wsUux4IZuyfZJt8,90707
|
|
104
104
|
pygeodesy/geodesicx/_C4_27.py,sha256=rrcq4FeTQThu4vmYqLK0cmjpCLkPTCQbS728AbDjPRw,134215
|
|
105
105
|
pygeodesy/geodesicx/_C4_30.py,sha256=A6Keryy3a4iF6chjf1RMFG-Fb9M49_QQaI-4T-2NXx0,201921
|
|
106
|
-
pygeodesy/geodesicx/__init__.py,sha256=
|
|
106
|
+
pygeodesy/geodesicx/__init__.py,sha256=9zxci6ekoDGhyq7wAED3xPCD3-bJ_-Vx8vteCHvUOeI,2468
|
|
107
107
|
pygeodesy/geodesicx/__main__.py,sha256=834PZqoetW0V3xeIvCSbh6TPMCv8wq2-mUIm8cLkv-w,4330
|
|
108
108
|
pygeodesy/geodesicx/gx.py,sha256=qXz-YWiIjJhg2ytyFKFvjXAkVqTqQ26TzzGU3bncbfE,60438
|
|
109
|
-
pygeodesy/geodesicx/gxarea.py,sha256=
|
|
109
|
+
pygeodesy/geodesicx/gxarea.py,sha256=dyoAZsCeytAUBCHG4Nxjll8AWcXmBHKzkxzIztj9X-g,20520
|
|
110
110
|
pygeodesy/geodesicx/gxbases.py,sha256=FC9oZLaKy-uf8o5Bmmr7MK4jBBvhzgaETzb5Qdixa04,6319
|
|
111
111
|
pygeodesy/geodesicx/gxline.py,sha256=PoPa_Qz9KSmP6Pb3LZgQg-9FcLpvMuVBRwxAkAtrYOw,28284
|
|
112
112
|
pygeodesy/rhumb/__init__.py,sha256=wetV7OwO6z-_D0FVTphwu6u0bA7h-sG3pfZa3WGAvfk,2296
|
|
@@ -115,11 +115,11 @@ pygeodesy/rhumb/bases.py,sha256=RBWGVBogfZAT7azFe-46mF_hUoI-bIvWCxwoiE8-Pvo,5421
|
|
|
115
115
|
pygeodesy/rhumb/ekx.py,sha256=L__f41hdrU8cVcqbWolEvdLAXtQdULlYhxsbccoYwok,24058
|
|
116
116
|
pygeodesy/rhumb/solve.py,sha256=85GonvF3qsp8I--XA2DUuwR0J7BU4S3O9BjnLEStcMw,24910
|
|
117
117
|
pygeodesy/triaxials/__init__.py,sha256=dZ3zXLWIIGhjMBYE6-8gJSfokNw4x5wg7eaTGSZH2Hw,3894
|
|
118
|
-
pygeodesy/triaxials/bases.py,sha256=
|
|
118
|
+
pygeodesy/triaxials/bases.py,sha256=WfF3Up7JFAWrLnvsRpWsncXICjxqbjVZZUbB6EvGFHU,36535
|
|
119
119
|
pygeodesy/triaxials/conformal3.py,sha256=FrJLQ0m58YvP_heh9jFH5TkhR46kSTzCIgtmtRPMErQ,23883
|
|
120
|
-
pygeodesy/triaxials/triaxial3.py,sha256=
|
|
121
|
-
pygeodesy/triaxials/triaxial5.py,sha256=
|
|
122
|
-
pygeodesy-
|
|
123
|
-
pygeodesy-
|
|
124
|
-
pygeodesy-
|
|
125
|
-
pygeodesy-
|
|
120
|
+
pygeodesy/triaxials/triaxial3.py,sha256=mTG8Atw7VbGyXWPoD78M-6XM6rarXCwKlatqWl41Hoo,42865
|
|
121
|
+
pygeodesy/triaxials/triaxial5.py,sha256=nJhVDbNfXSbldL7QCrGAXNsFlIWY-rUAaVLMPcX7x-g,50977
|
|
122
|
+
pygeodesy-26.1.16.dist-info/METADATA,sha256=U4um_8MNCzFuw0CYVx46wj3uI-aK9MCcIjYbykv5M1s,20716
|
|
123
|
+
pygeodesy-26.1.16.dist-info/WHEEL,sha256=Kh9pAotZVRFj97E15yTA4iADqXdQfIVTHcNaZTjxeGM,110
|
|
124
|
+
pygeodesy-26.1.16.dist-info/top_level.txt,sha256=cEQPatCXzKZqrivpULC5V5fuy9_V_bAwaP_gUGid7pQ,10
|
|
125
|
+
pygeodesy-26.1.16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|