wwvb 6.0.0__py3-none-any.whl → 7.0.0__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.
- wwvb/__init__.py +56 -44
- wwvb/__version__.py +16 -3
- wwvb/iersdata.json +1 -1
- wwvb/updateiers.py +4 -0
- wwvb/wwvbtk.py +1 -1
- {wwvb-6.0.0.dist-info → wwvb-7.0.0.dist-info}/METADATA +1 -1
- wwvb-7.0.0.dist-info/RECORD +18 -0
- wwvb-6.0.0.dist-info/RECORD +0 -18
- {wwvb-6.0.0.dist-info → wwvb-7.0.0.dist-info}/WHEEL +0 -0
- {wwvb-6.0.0.dist-info → wwvb-7.0.0.dist-info}/entry_points.txt +0 -0
- {wwvb-6.0.0.dist-info → wwvb-7.0.0.dist-info}/top_level.txt +0 -0
wwvb/__init__.py
CHANGED
@@ -19,23 +19,21 @@ import datetime
|
|
19
19
|
import enum
|
20
20
|
import json
|
21
21
|
import warnings
|
22
|
-
from
|
22
|
+
from dataclasses import dataclass
|
23
|
+
from typing import ClassVar
|
23
24
|
|
24
25
|
from . import iersdata
|
25
26
|
from .tz import Mountain
|
26
27
|
|
28
|
+
TYPE_CHECKING = False
|
27
29
|
if TYPE_CHECKING:
|
28
30
|
from collections.abc import Generator
|
31
|
+
from typing import Any, Self, TextIO, TypeVar
|
32
|
+
|
33
|
+
T = TypeVar("T")
|
29
34
|
|
30
35
|
HOUR = datetime.timedelta(seconds=3600)
|
31
36
|
SECOND = datetime.timedelta(seconds=1)
|
32
|
-
T = TypeVar("T")
|
33
|
-
|
34
|
-
|
35
|
-
def _removeprefix(s: str, p: str) -> str:
|
36
|
-
if s.startswith(p):
|
37
|
-
return s[len(p) :]
|
38
|
-
return s
|
39
37
|
|
40
38
|
|
41
39
|
def _date(dt: datetime.date) -> datetime.date:
|
@@ -339,8 +337,13 @@ class DstStatus(enum.IntEnum):
|
|
339
337
|
"""DST in effect all day today"""
|
340
338
|
|
341
339
|
|
342
|
-
|
343
|
-
|
340
|
+
@dataclass(frozen=True)
|
341
|
+
class WWVBMinute:
|
342
|
+
"""Uniquely identifies a minute of time in the WWVB system.
|
343
|
+
|
344
|
+
To use ``ut1`` and ``ls`` information from IERS, create a `WWVBMinuteIERS`
|
345
|
+
object instead.
|
346
|
+
"""
|
344
347
|
|
345
348
|
year: int
|
346
349
|
"""2-digit year within the WWVB epoch"""
|
@@ -351,7 +354,7 @@ class _WWVBMinute(NamedTuple):
|
|
351
354
|
hour: int
|
352
355
|
"""UTC hour of day"""
|
353
356
|
|
354
|
-
|
357
|
+
minute: int
|
355
358
|
"""Minute of hour"""
|
356
359
|
|
357
360
|
dst: DstStatus
|
@@ -366,18 +369,10 @@ class _WWVBMinute(NamedTuple):
|
|
366
369
|
ly: bool
|
367
370
|
"""Leap year flag"""
|
368
371
|
|
372
|
+
epoch: ClassVar[int] = 1970
|
369
373
|
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
To use ``ut1`` and ``ls`` information from IERS, create a `WWVBMinuteIERS`
|
374
|
-
object instead.
|
375
|
-
"""
|
376
|
-
|
377
|
-
epoch: int = 1970
|
378
|
-
|
379
|
-
def __new__( # noqa: PYI034
|
380
|
-
cls,
|
374
|
+
def __init__(
|
375
|
+
self,
|
381
376
|
year: int,
|
382
377
|
days: int,
|
383
378
|
hour: int,
|
@@ -387,7 +382,7 @@ class WWVBMinute(_WWVBMinute):
|
|
387
382
|
*,
|
388
383
|
ls: bool | None = None,
|
389
384
|
ly: bool | None = None,
|
390
|
-
) ->
|
385
|
+
) -> None:
|
391
386
|
"""Construct a WWVBMinute
|
392
387
|
|
393
388
|
:param year: The 2- or 4-digit year. This parameter is converted by the `full_year` method.
|
@@ -401,15 +396,23 @@ class WWVBMinute(_WWVBMinute):
|
|
401
396
|
:param ls: Leap second warning flag
|
402
397
|
:param ly: Leap year flag
|
403
398
|
"""
|
404
|
-
dst =
|
399
|
+
dst = self.get_dst(year, days) if dst is None else DstStatus(dst)
|
405
400
|
if ut1 is None and ls is None:
|
406
|
-
ut1, ls =
|
401
|
+
ut1, ls = self._get_dut1_info(year, days)
|
407
402
|
elif ut1 is None or ls is None:
|
408
403
|
raise ValueError("sepecify both ut1 and ls or neither one")
|
409
|
-
year =
|
404
|
+
year = self.full_year(year)
|
410
405
|
if ly is None:
|
411
406
|
ly = isly(year)
|
412
|
-
|
407
|
+
|
408
|
+
super().__setattr__("year", year)
|
409
|
+
super().__setattr__("days", days)
|
410
|
+
super().__setattr__("hour", hour)
|
411
|
+
super().__setattr__("minute", minute)
|
412
|
+
super().__setattr__("dst", dst)
|
413
|
+
super().__setattr__("ut1", ut1)
|
414
|
+
super().__setattr__("ls", ls)
|
415
|
+
super().__setattr__("ly", ly)
|
413
416
|
|
414
417
|
@classmethod
|
415
418
|
def full_year(cls, year: int) -> int:
|
@@ -443,7 +446,7 @@ class WWVBMinute(_WWVBMinute):
|
|
443
446
|
"""Implement str()"""
|
444
447
|
return (
|
445
448
|
f"year={self.year:4d} days={self.days:03d} hour={self.hour:02d} "
|
446
|
-
f"min={self.
|
449
|
+
f"min={self.minute:02d} dst={self.dst} ut1={self.ut1} ly={int(self.ly)} "
|
447
450
|
f"ls={int(self.ls)}"
|
448
451
|
)
|
449
452
|
|
@@ -453,7 +456,7 @@ class WWVBMinute(_WWVBMinute):
|
|
453
456
|
The returned object has ``tzinfo=datetime.timezone.utc``.
|
454
457
|
"""
|
455
458
|
d = datetime.datetime(self.year, 1, 1, tzinfo=datetime.timezone.utc)
|
456
|
-
d += datetime.timedelta(self.days - 1, self.hour * 3600 + self.
|
459
|
+
d += datetime.timedelta(self.days - 1, self.hour * 3600 + self.minute * 60)
|
457
460
|
return d
|
458
461
|
|
459
462
|
as_datetime = as_datetime_utc
|
@@ -507,7 +510,7 @@ class WWVBMinute(_WWVBMinute):
|
|
507
510
|
return 60
|
508
511
|
if not self._is_end_of_month():
|
509
512
|
return 60
|
510
|
-
if self.hour != 23 or self.
|
513
|
+
if self.hour != 23 or self.minute != 59:
|
511
514
|
return 60
|
512
515
|
if self.ut1 > 0:
|
513
516
|
return 59
|
@@ -551,7 +554,7 @@ class WWVBMinute(_WWVBMinute):
|
|
551
554
|
t.am[60] = AmplitudeModulation.MARK
|
552
555
|
for i in [4, 10, 11, 14, 20, 21, 24, 34, 35, 44, 54]:
|
553
556
|
t.am[i] = AmplitudeModulation.ZERO
|
554
|
-
t._put_am_bcd(self.
|
557
|
+
t._put_am_bcd(self.minute, 1, 2, 3, 5, 6, 7, 8)
|
555
558
|
t._put_am_bcd(self.hour, 12, 13, 15, 16, 17, 18)
|
556
559
|
t._put_am_bcd(self.days, 22, 23, 25, 26, 27, 28, 30, 31, 32, 33)
|
557
560
|
ut1_sign = self.ut1 >= 0
|
@@ -565,14 +568,14 @@ class WWVBMinute(_WWVBMinute):
|
|
565
568
|
|
566
569
|
def _fill_pm_timecode_extended(self, t: WWVBTimecode) -> None:
|
567
570
|
"""During minutes 10..15 and 40..45, the amplitude signal holds 'extended information'"""
|
568
|
-
assert 10 <= self.
|
569
|
-
minno = self.
|
571
|
+
assert 10 <= self.minute < 16 or 40 <= self.minute < 46
|
572
|
+
minno = self.minute % 10
|
570
573
|
assert minno < 6
|
571
574
|
|
572
575
|
dst = self.dst
|
573
576
|
# Note that these are 1 different than Table 11
|
574
577
|
# because our LFSR sequence is zero-based
|
575
|
-
seqno = (self.
|
578
|
+
seqno = (self.minute // 30) * 2
|
576
579
|
if dst == 0:
|
577
580
|
pass
|
578
581
|
elif dst == 3:
|
@@ -655,17 +658,17 @@ class WWVBMinute(_WWVBMinute):
|
|
655
658
|
|
656
659
|
def _fill_pm_timecode(self, t: WWVBTimecode) -> None:
|
657
660
|
"""Fill the phase portion of a timecode object"""
|
658
|
-
if 10 <= self.
|
661
|
+
if 10 <= self.minute < 16 or 40 <= self.minute < 46:
|
659
662
|
self._fill_pm_timecode_extended(t)
|
660
663
|
else:
|
661
664
|
self._fill_pm_timecode_regular(t)
|
662
665
|
|
663
|
-
def next_minute(self, *, newut1: int | None = None, newls: bool | None = None) ->
|
666
|
+
def next_minute(self, *, newut1: int | None = None, newls: bool | None = None) -> Self:
|
664
667
|
"""Return an object representing the next minute"""
|
665
668
|
d = self.as_datetime() + datetime.timedelta(minutes=1)
|
666
669
|
return self.from_datetime(d, newut1=newut1, newls=newls, old_time=self)
|
667
670
|
|
668
|
-
def previous_minute(self, *, newut1: int | None = None, newls: bool | None = None) ->
|
671
|
+
def previous_minute(self, *, newut1: int | None = None, newls: bool | None = None) -> Self:
|
669
672
|
"""Return an object representing the previous minute"""
|
670
673
|
d = self.as_datetime() - datetime.timedelta(minutes=1)
|
671
674
|
return self.from_datetime(d, newut1=newut1, newls=newls, old_time=self)
|
@@ -684,9 +687,9 @@ class WWVBMinute(_WWVBMinute):
|
|
684
687
|
return 0, False
|
685
688
|
|
686
689
|
@classmethod
|
687
|
-
def fromstring(cls, s: str) ->
|
690
|
+
def fromstring(cls, s: str) -> Self:
|
688
691
|
"""Construct a WWVBMinute from a string representation created by print_timecodes"""
|
689
|
-
s =
|
692
|
+
s = s.removeprefix("WWVB timecode: ")
|
690
693
|
d: dict[str, int] = {}
|
691
694
|
for part in s.split():
|
692
695
|
k, v = part.split("=")
|
@@ -700,7 +703,7 @@ class WWVBMinute(_WWVBMinute):
|
|
700
703
|
dst = d.pop("dst", None)
|
701
704
|
ut1 = d.pop("ut1", None)
|
702
705
|
ls = d.pop("ls", None)
|
703
|
-
d.pop("ly", None)
|
706
|
+
d.pop("ly", None) # Always use calculated ly flag
|
704
707
|
if d:
|
705
708
|
raise ValueError(f"Invalid options: {d}")
|
706
709
|
return cls(year, days, hour, minute, dst, ut1=ut1, ls=None if ls is None else bool(ls))
|
@@ -713,7 +716,7 @@ class WWVBMinute(_WWVBMinute):
|
|
713
716
|
newut1: int | None = None,
|
714
717
|
newls: bool | None = None,
|
715
718
|
old_time: WWVBMinute | None = None,
|
716
|
-
) ->
|
719
|
+
) -> Self:
|
717
720
|
"""Construct a WWVBMinute from a datetime, possibly specifying ut1/ls data or propagating it from an old time"""
|
718
721
|
u = d.utctimetuple()
|
719
722
|
if newls is None and newut1 is None:
|
@@ -721,7 +724,7 @@ class WWVBMinute(_WWVBMinute):
|
|
721
724
|
return cls(u.tm_year, u.tm_yday, u.tm_hour, u.tm_min, ut1=newut1, ls=newls)
|
722
725
|
|
723
726
|
@classmethod
|
724
|
-
def from_timecode_am(cls, t: WWVBTimecode) ->
|
727
|
+
def from_timecode_am(cls, t: WWVBTimecode) -> Self | None: # noqa: PLR0912
|
725
728
|
"""Construct a WWVBMinute from a WWVBTimecode"""
|
726
729
|
for i in (0, 9, 19, 29, 39, 49, 59):
|
727
730
|
if t.am[i] != AmplitudeModulation.MARK:
|
@@ -764,6 +767,15 @@ class WWVBMinute(_WWVBMinute):
|
|
764
767
|
return None
|
765
768
|
return cls(year, days, hour, minute, dst, ut1, ls=ls, ly=ly)
|
766
769
|
|
770
|
+
@property
|
771
|
+
def min(self) -> int:
|
772
|
+
"""Deprecated alias for `WWVBMinute.minute`
|
773
|
+
|
774
|
+
Update your code to use the `minute` property instead of the `min` property.
|
775
|
+
"""
|
776
|
+
warnings.warn("WWVBMinute.min property is deprecated", category=DeprecationWarning, stacklevel=1)
|
777
|
+
return self.minute
|
778
|
+
|
767
779
|
|
768
780
|
class WWVBMinuteIERS(WWVBMinute):
|
769
781
|
"""A WWVBMinute that uses a database of DUT1 information"""
|
@@ -934,7 +946,7 @@ def print_timecodes(
|
|
934
946
|
print(file=file)
|
935
947
|
print(f"WWVB timecode: {w!s}{channel_text}{style_text}", file=file)
|
936
948
|
first = False
|
937
|
-
pfx = f"{w.year:04d}-{w.days:03d} {w.hour:02d}:{w.
|
949
|
+
pfx = f"{w.year:04d}-{w.days:03d} {w.hour:02d}:{w.minute:02d} "
|
938
950
|
tc = w.as_timecode()
|
939
951
|
if len(style_chars) == 6:
|
940
952
|
print(f"{pfx} {tc.to_both_string(style_chars)}", file=file)
|
@@ -976,7 +988,7 @@ def print_timecodes_json(
|
|
976
988
|
"year": w.year,
|
977
989
|
"days": w.days,
|
978
990
|
"hour": w.hour,
|
979
|
-
"minute": w.
|
991
|
+
"minute": w.minute,
|
980
992
|
}
|
981
993
|
|
982
994
|
tc = w.as_timecode()
|
wwvb/__version__.py
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
# file generated by setuptools-scm
|
2
2
|
# don't change, don't track in version control
|
3
3
|
|
4
|
-
__all__ = [
|
4
|
+
__all__ = [
|
5
|
+
"__version__",
|
6
|
+
"__version_tuple__",
|
7
|
+
"version",
|
8
|
+
"version_tuple",
|
9
|
+
"__commit_id__",
|
10
|
+
"commit_id",
|
11
|
+
]
|
5
12
|
|
6
13
|
TYPE_CHECKING = False
|
7
14
|
if TYPE_CHECKING:
|
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
|
|
9
16
|
from typing import Union
|
10
17
|
|
11
18
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
19
|
+
COMMIT_ID = Union[str, None]
|
12
20
|
else:
|
13
21
|
VERSION_TUPLE = object
|
22
|
+
COMMIT_ID = object
|
14
23
|
|
15
24
|
version: str
|
16
25
|
__version__: str
|
17
26
|
__version_tuple__: VERSION_TUPLE
|
18
27
|
version_tuple: VERSION_TUPLE
|
28
|
+
commit_id: COMMIT_ID
|
29
|
+
__commit_id__: COMMIT_ID
|
19
30
|
|
20
|
-
__version__ = version = '
|
21
|
-
__version_tuple__ = version_tuple = (
|
31
|
+
__version__ = version = '7.0.0'
|
32
|
+
__version_tuple__ = version_tuple = (7, 0, 0)
|
33
|
+
|
34
|
+
__commit_id__ = commit_id = None
|
wwvb/iersdata.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"START": "1972-01-01", "OFFSETS_GZ": "
|
1
|
+
{"START": "1972-01-01", "OFFSETS_GZ": "H4sIAOvijWgC/+2aa3LDMAiEL5uHLTuxnN5/pn/aTmfSSiAWhGy+E2SWZQE58zwiH/1YivB/96vMXiIX2Io8CTyIrDSWGqlMRdrpDa6aJFnr0m4wYZkCE2UmSF0V+13vBveStK6JTfQyW3O86HLJf0RvDgy5u4FCI+WVKTsVoUdHzsrRoWRfYHIItZ5EEgu0Beu58EgEpMpO9zf4/s3iNO4y7/hqEwOZIPu3+PuO2T7Ic5E8GxsnZHvUYOtELxW1WP+0yx/caFxpyAooq6lq06UEr+UkLeXOIDPZ6EBrqb5K8Tvu6/B9CdnZqFQL05s2KauWy/IeF/tJGAisjK9MgGyDuUkRq4G1gRE+VjA30uZNPsdantkgMq58QO4fw+sqzj+A2/16mmvnyy9UzDvMktDgKYlnkFeB2rx+wNANG40aA4OgsY03AWoDCVs/XMmkyQ0+0jWaUqPdwA0m/MRuccGjCwirHToWzbcs8P7U1nZZLSYdHapWu5HqVg1YjK2fPEwvPZPzLPUF848tyid2u7dh8B7h+wVQ923Q+kqxZe3JclSSB+YTM3nnHrjgFth/vzgZzw6cbOMYa4bHFPU/DR3mp/ubKM4cgwMnHZW4GFxFprOVcevAKGva6oExn1MOmyGDJQPm0rpU8bjqdOo993O6Xz9ofToZela5vwrWoTn4l4o5CIIaKejCEgSnJv784V+zUyyvbb/gE8h8bi3oTQAA"}
|
wwvb/updateiers.py
CHANGED
@@ -47,6 +47,7 @@ def update_iersdata( # noqa: PLR0915
|
|
47
47
|
"""Update iersdata.py"""
|
48
48
|
offsets: list[int] = []
|
49
49
|
iersdata_text = _get_text(IERS_URL)
|
50
|
+
table_start: datetime.date | None = None
|
50
51
|
for r in csv.DictReader(io.StringIO(iersdata_text), delimiter=";"):
|
51
52
|
jd = float(r["MJD"])
|
52
53
|
offs_str = r["UT1-UTC"]
|
@@ -79,6 +80,8 @@ def update_iersdata( # noqa: PLR0915
|
|
79
80
|
|
80
81
|
offsets.append(offs)
|
81
82
|
|
83
|
+
assert table_start is not None
|
84
|
+
|
82
85
|
wwvb_text = _get_text(NIST_URL)
|
83
86
|
wwvb_data = bs4.BeautifulSoup(wwvb_text, features="html.parser")
|
84
87
|
wwvb_dut1_table = wwvb_data.findAll("table")[2]
|
@@ -88,6 +91,7 @@ def update_iersdata( # noqa: PLR0915
|
|
88
91
|
wwvb_data_stamp = datetime.datetime.fromisoformat(meta.attrs["content"]).replace(tzinfo=None).date()
|
89
92
|
|
90
93
|
def patch(patch_start: datetime.date, patch_end: datetime.date, val: int) -> None:
|
94
|
+
assert table_start is not None
|
91
95
|
off_start = (patch_start - table_start).days
|
92
96
|
off_end = (patch_end - table_start).days
|
93
97
|
offsets[off_start:off_end] = [val] * (off_end - off_start)
|
wwvb/wwvbtk.py
CHANGED
@@ -69,7 +69,7 @@ def main(colors: list[str], size: int, min_size: int | None) -> None: # noqa: P
|
|
69
69
|
def deadline_ms(deadline: datetime.datetime) -> int:
|
70
70
|
"""Compute the number of ms until a deadline"""
|
71
71
|
now = datetime.datetime.now(datetime.timezone.utc)
|
72
|
-
return int(max(0, (deadline - now).total_seconds()) * 1000)
|
72
|
+
return int(max(0.0, (deadline - now).total_seconds()) * 1000)
|
73
73
|
|
74
74
|
def wwvbtick() -> Generator[tuple[datetime.datetime, wwvb.AmplitudeModulation]]:
|
75
75
|
"""Yield consecutive values of the WWVB amplitude signal, going from minute to minute"""
|
@@ -0,0 +1,18 @@
|
|
1
|
+
uwwvb.py,sha256=Ybf8DeOZ5VjfqRGtO90_oEEW6HhGaztIVlh4L423MdQ,5801
|
2
|
+
wwvb/__init__.py,sha256=tSEjmfqKR0KYdN7tUySGcXpK_W8rzQTtEXG7P_0WPMA,33432
|
3
|
+
wwvb/__version__.py,sha256=lB_6pZBic6H_5wY9p7_cc7miE65gtXFl65pORFxuiX0,704
|
4
|
+
wwvb/decode.py,sha256=llTLKBW49nl6COheM90NsyMnTNeVApl2oeCHtl6Tf3w,2759
|
5
|
+
wwvb/dut1table.py,sha256=HVX1338RlQzAQ-bsMPEdmCqoyIxSWoJSoRu1YGyaJO4,875
|
6
|
+
wwvb/gen.py,sha256=_fpUypu_2nZfG5Vjnya0B8C26nk1WOhnLMTCXwskAHs,3720
|
7
|
+
wwvb/iersdata.json,sha256=fEElNoF4UJMySnUvNXFlI9TT9k67jdrrGKzO6A1F2rQ,769
|
8
|
+
wwvb/iersdata.json.license,sha256=1k5fhRCuOn0yXbwHtB21G0Nntnf0qMxstflMHuK3-Js,71
|
9
|
+
wwvb/iersdata.py,sha256=nMqA1xcE-iPtmi9m5qcTIJwfsCxZwoNsxHfM-wvooMQ,1210
|
10
|
+
wwvb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
+
wwvb/tz.py,sha256=nlxKnzFPmqLLtC-cEDhWaJ3v3GCSPfqzVtUMf8EEdZ0,248
|
12
|
+
wwvb/updateiers.py,sha256=q3QY--fj06HJ9wCRCmVQK7pCpdXhCudP8BdUPG5WWOA,5781
|
13
|
+
wwvb/wwvbtk.py,sha256=cdLwWfulywHmGhaiK6L-m_QQAdpfDfyDFagbe_Y8Rgk,5186
|
14
|
+
wwvb-7.0.0.dist-info/METADATA,sha256=6oqjB6nkDQAYeoe8hGbSq5jk9Cj7q9swibX6jubJ-b4,10201
|
15
|
+
wwvb-7.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
16
|
+
wwvb-7.0.0.dist-info/entry_points.txt,sha256=KSevvHWLEKxOxUQ-L-OQidD4Sj2BPEfhZ2TQhOgyys4,179
|
17
|
+
wwvb-7.0.0.dist-info/top_level.txt,sha256=0IYdkhEAMgurpv_F-76rlyn4GdxepGFzG99tivVdQVU,11
|
18
|
+
wwvb-7.0.0.dist-info/RECORD,,
|
wwvb-6.0.0.dist-info/RECORD
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
uwwvb.py,sha256=Ybf8DeOZ5VjfqRGtO90_oEEW6HhGaztIVlh4L423MdQ,5801
|
2
|
-
wwvb/__init__.py,sha256=MRuk6nzitxbIcUfqVLkx-EzGTYYxm96ItfBlR4BSZuQ,32922
|
3
|
-
wwvb/__version__.py,sha256=ZEItn3OOgzPGQ44WDUROvtDbTuU_UDPqseQiaWn2NJc,511
|
4
|
-
wwvb/decode.py,sha256=llTLKBW49nl6COheM90NsyMnTNeVApl2oeCHtl6Tf3w,2759
|
5
|
-
wwvb/dut1table.py,sha256=HVX1338RlQzAQ-bsMPEdmCqoyIxSWoJSoRu1YGyaJO4,875
|
6
|
-
wwvb/gen.py,sha256=_fpUypu_2nZfG5Vjnya0B8C26nk1WOhnLMTCXwskAHs,3720
|
7
|
-
wwvb/iersdata.json,sha256=4vVfaxfifkNv570_NjNbS2JwSpPqDx1HSeESkcJom44,765
|
8
|
-
wwvb/iersdata.json.license,sha256=1k5fhRCuOn0yXbwHtB21G0Nntnf0qMxstflMHuK3-Js,71
|
9
|
-
wwvb/iersdata.py,sha256=nMqA1xcE-iPtmi9m5qcTIJwfsCxZwoNsxHfM-wvooMQ,1210
|
10
|
-
wwvb/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
-
wwvb/tz.py,sha256=nlxKnzFPmqLLtC-cEDhWaJ3v3GCSPfqzVtUMf8EEdZ0,248
|
12
|
-
wwvb/updateiers.py,sha256=Zemj6m0hwPLP31y8ODAS7sqLeB8SSHvv833pfUPHMUo,5661
|
13
|
-
wwvb/wwvbtk.py,sha256=9RcSssben6CEsX7P3Rmphvmlnp8HoAb9gMFcCP35ryk,5184
|
14
|
-
wwvb-6.0.0.dist-info/METADATA,sha256=ogZFIs2sa1yGdE7h1raS3ctgaLx4iGjHYrB4gubR2g8,10201
|
15
|
-
wwvb-6.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
16
|
-
wwvb-6.0.0.dist-info/entry_points.txt,sha256=KSevvHWLEKxOxUQ-L-OQidD4Sj2BPEfhZ2TQhOgyys4,179
|
17
|
-
wwvb-6.0.0.dist-info/top_level.txt,sha256=0IYdkhEAMgurpv_F-76rlyn4GdxepGFzG99tivVdQVU,11
|
18
|
-
wwvb-6.0.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|