# Reproduce the Tangent cones that permit an imaginary push

These original drawings accompany Tangent cones that permit an imaginary push. The complete mathematical proof, all worked examples and complete solutions remain in that reader.

## Download the unchanged original files

Keep `render_figures.py` at the root of an empty scratch directory and the PNG, SVG and geometry files in `figures/`. The two unchanged Markdown sources and CREDITS.txt/LICENSE.txt stay at the package root; they are downloads and are not generated by the renderer. The renderer creates `figures/` during a fresh run.

- [render_figures.py](../reproduce/L118/render_figures.py) — 7123 bytes; SHA-256 `2EE7067C1F1DF1C656C88D543A2828A65EC4E583B0480440C60B5705EFAC9734`.
- [crossing-cone-variation.png](../reproduce/L118/figures/crossing-cone-variation.png) — 132398 bytes; SHA-256 `9D24E1113D7ED071BC56160A4D0AD6F540D81E8E2EBF6B89F3F11C2FEAB5381E`.
- [crossing-cone-variation.svg](../reproduce/L118/figures/crossing-cone-variation.svg) — 138447 bytes; SHA-256 `8218254786FCACB85FA129CE0CF5DD6407FFB9D94F50B29A8E0D0B9AE1F3A920`.
- [geometry.json](../reproduce/L118/figures/geometry.json) — 1595 bytes; SHA-256 `49800A69B57F4FC22B05351F88EF9A2649792CE3E79206E9E535EE3FA220C014`.
- [wave-imaginary-exclusion.png](../reproduce/L118/figures/wave-imaginary-exclusion.png) — 203269 bytes; SHA-256 `E955DE8252BF48AABBFA121B792FD231E471E32973254C81585DFD3080818162`.
- [wave-imaginary-exclusion.svg](../reproduce/L118/figures/wave-imaginary-exclusion.svg) — 107225 bytes; SHA-256 `18BFC6C66B339F79CBC1394D1BF0D39A6D665FA1C8BB113938CB01A9A11232EA`.
- [local-cone-lesson.md](../reproduce/L118/local-cone-lesson.md) — 17544 bytes; SHA-256 `BD25B10CBD68B297700EF9C8A693774AC8564CA6C1C002FCD7B2C34A4AA784D2`.
- [local-cone-proof.md](../reproduce/L118/local-cone-proof.md) — 22683 bytes; SHA-256 `6384F5E41C3804352C024DB26DE57D21D8426EA0641894D5608848238F46BAD7`.
- [LICENSE.txt](../reproduce/L118/LICENSE.txt) — 449 bytes; SHA-256 `48B9517A889A297BB0B328B30295E108213CC8BCEDD756A9D7CD6C2A6E795EB6`.
- CREDITS.txt — 1709 bytes; SHA-256 `D02713CB07E67A0F4254D962652163DAD5716EC77F6D8DF521250929BE8FBBD2`.

## Run the renderer

The unchanged program requires Python, NumPy and Matplotlib. In the scratch directory run:

```text
python -X utf8 render_figures.py
```

It writes the supplied PNG, SVG and exact geometry files. A fresh replay with Python 3.13.9, NumPy 2.4.4 and Matplotlib 3.10.9, using Matplotlib’s bundled DejaVu Sans font, matched every renderer/figure file byte for byte and all decoded PNG RGBA pixels. No SVG date or identifier normalization was performed. Byte identity is qualified by that observed software and font environment; different versions may change rendering bytes. The geometry files specify the mathematical objects independently of rendering.

## Check the mathematics and credits

The first figure shows exact component slices vτ = 1 and positive-polar slices xτ = 1 for the crossing, simple and noncharacteristic points of (τ−η₁)(τ−η₂). Excluded cone boundaries are dashed; included polar points and segment are solid. The second shows exact rotating wave tangent halfplanes, both trajectories ε²/4 ± iε/√2 and the meridian modulus at ε = 1/4 with proved lower bound 1/16. These are slices and exact sampled functions, not general theorem proofs. Full captions, LC035-2–4 and learner E1–E3 give locators. The full formal proof follows the complete learner and all six solutions. The C1/D1 and D4 inputs, the general real analytic and microhyperbolic case, D5–D6 and the full C6–C8/component scope are not proved in the lesson.

CREDITS.txt gives every human source and locator. Original prose and figures are CC0; copyrighted references are comparison credits and are not imported.

The original renderer, scene/geometry and diagrams are GPT-6.1 Sol (OpenAI), Ultra work, October 2026, dedicated under CC0. Matplotlib and the bundled DejaVu Sans font retain their own component terms already included with this course. The native geometry is explanatory; the full proof establishes the theorem.
