The Invisible Primary

Why can’t we just see the black hole — or at least see it lensing its moon? Three numbers answer this, and lastmoon computes all of them.

Code
from lastmoon.physics import constants as c
from lastmoon.physics.compact import (
    einstein_radius_self_lensing,
    hawking_temperature,
    schwarzschild_radius,
)

r_s_mm = schwarzschild_radius(c.M_EARTH) * 1e3
t_h_k = hawking_temperature(c.M_EARTH)
r_e_km = einstein_radius_self_lensing(c.M_EARTH, c.LUNAR_SEMI_MAJOR_AXIS) / 1e3
print(f"Schwarzschild radius: {r_s_mm:.1f} mm")
print(f"Hawking temperature: {t_h_k:.3f} K  (CMB: 2.73 K)")
print(f"Self-lensing Einstein radius at the lunar distance: {r_e_km:.1f} km")
Schwarzschild radius: 8.9 mm
Hawking temperature: 0.021 K  (CMB: 2.73 K)
Self-lensing Einstein radius at the lunar distance: 2.6 km

An Earth-mass black hole is 9 millimetres across, colder than the cosmic microwave background (so it absorbs more than it emits), and its Einstein radius at the moon’s distance is 2.6 km — hundreds of times smaller than the moon it would have to lens.

Code
import matplotlib.pyplot as plt

from lastmoon.figures.style import apply_style

apply_style()
names = ["Schwarzschild\nradius", "Einstein radius\n(self-lensing)", "Moon radius"]
values_m = [schwarzschild_radius(c.M_EARTH), einstein_radius_self_lensing(c.M_EARTH, c.LUNAR_SEMI_MAJOR_AXIS), c.LUNAR_RADIUS]
fig, ax = plt.subplots()
ax.bar(names, values_m)
ax.set_yscale("log")
ax.set_ylabel("size (m)")
fig

Scale comparison (log axis): the lensing zone is a thousandth of the moon’s radius.

The Einstein radius is hundreds of times smaller than the moon itself, so lensing the moon is negligible.

What about lensing the star? When the dark primary crosses the stellar disk it brightens the star instead of dimming it — but with a finite source (R* ≫ rE) the pulse is tiny:

Code
from lastmoon.physics.compact import self_lensing_pulse_amplitude
from lastmoon.physics.signatures import transit_depth

a_hz = 0.1 * c.AU
r_star = 0.3 * c.R_SUN
pulse = self_lensing_pulse_amplitude(c.M_EARTH, a_hz, r_star)
depth = transit_depth(c.LUNAR_RADIUS, r_star)
print(f"star-disk self-lensing pulse (M = M_EARTH, a = 0.1 AU, R* = 0.3 R_sun): {pulse*1e9:.1f} ppb")
print(f"moon transit depth on the same star:  {depth*1e6:.1f} ppm")
print(f"depth / pulse: {depth/pulse:.0f}x")
star-disk self-lensing pulse (M = M_EARTH, a = 0.1 AU, R* = 0.3 R_sun): 12.2 ppb
moon transit depth on the same star:  69.3 ppm
depth / pulse: 5687x

The lensing counter-signal sits nearly four orders of magnitude below the moon’s transit — the primary stays invisible in the light curve.

NoteWhat this means for the paper

The primary contributes gravity and nothing else: no light, no heat, no lensing pulse, no transit. Every observable must therefore come from the moon — which is why the moon is the entire detection strategy.

WarningIdealizations

Point-lens finite-source scaling; no accretion (a clean habitable zone has no significant gas to accrete).