"""The arithmetic behind the "Our analysis" items on factchecked.science's review of S0 News, October 26, 2026. Usage: python3 -I frame_numbers.py No inputs: every value is typed in below with the page's source number in brackets, so each line can be checked by hand. Standard library only. The flare counts themselves come from sun_window.py. """ import datetime as dt UTC = dt.timezone.utc upload = dt.datetime(2026, 10, 26, 11, 51, 41, tzinfo=UTC) # the video's uploadDate, 2026-10-26T04:51:41-07:00 [1] def gap(t): s = int((upload - t).total_seconds()) return f"{s // 3600} h {s % 3600 // 60:02d} min" print("== From events to the upload (UTC)") for label, t in [ ("C1.5/Sf from Region 4560, peak [25][26]", dt.datetime(2026, 10, 25, 19, 42, tzinfo=UTC)), ("Last Forecast Discussion before the upload, issued [23]", dt.datetime(2026, 10, 26, 0, 30, tzinfo=UTC)), ("Region 4561 numbered [27]", dt.datetime(2026, 10, 26, 6, 28, 58, tzinfo=UTC)), ("C1.9 from Region 4561, peak [25][26]", dt.datetime(2026, 10, 26, 8, 38, tzinfo=UTC)), ("C1.0/Sf secondary peak [25]", dt.datetime(2026, 10, 26, 9, 33, tzinfo=UTC)), ("CME first seen in CCOR-1 [23]", dt.datetime(2026, 10, 26, 9, 45, tzinfo=UTC)), ]: print(f" {label}: {t:%b %d %H:%M} UTC, {gap(t)} before the upload") print("== Dates") print(" October 26, 2026 was a", dt.date(2026, 10, 26).strftime("%A"), "[1 00:00:14]") print(" GJI paper published September 29, 2026 [3] -> the episode:", (dt.date(2026, 10, 26) - dt.date(2026, 9, 29)).days, "days") print("== Magnetic field strengths, nanotesla") ism = 0.464 # Voyager 1, just beyond the heliopause, 2013 [19 Abstract] sw = 8.0 # the solar wind's field near Earth, October 25-26, at most [23] surface = 22071.0 # Earth's weakest surface field, 2025 [22 p. 13] core = 2.5e6 # the core-averaged field, 2.5 mT [21 Abstract] for name, v in (("interstellar, Voyager 1", ism), ("solar wind near Earth, max", sw), ("Earth's surface, weakest", surface), ("Earth's core, average", core)): print(f" {name:28s} {v:>14,.3f} nT") print(f" weakest surface field / solar wind's field = {surface / sw:,.0f}") print(f" core field / solar wind's field = {core / sw:,.0f}") print(f" solar wind's field / interstellar field = {sw / ism:.1f}") print("== Distances") for name, au in (("Voyager 1 crossed the heliopause, August 25, 2012 [18]", 121.6), ("Voyager 2 crossed the heliopause, November 5, 2018 [18]", 119.0)): print(f" {name}: {au} au, {au:g} times Earth's distance from the Sun") print(" a dense cold cloud could shrink the heliosphere to 0.22 au, inside Earth's orbit at 1 au [20]") print("== The reversal record") cns = 125 - 83 # "the 83-125 Ma Cretaceous Normal Polarity Superchron" [13 ยง1] print(f" Cretaceous Normal Superchron: {cns} million years without a reversal [13 sec. 1]") print(f" about 5 reversals per million years since about 25 Ma [13 sec. 5]: on average one every {1e6 / 5:,.0f} years") print("== Estonia (the paper's abstract [7])") trend = 4.3 # days per decade, national mean, 1965-2025 episode = 7 / 10 # "a week" in "a century", in days per decade [1 00:00:57-00:01:05] print(f" the paper's trend is {trend / episode:.1f} times the episode's 'a week' in 'a century'")