fix(SAC_LSTM_Bot): atomic+validated SVG output for progress graphs

This commit is contained in:
2026-08-23 10:06:05 +02:00
parent f3ac0888bb
commit 002a568c7e
3 changed files with 302 additions and 263 deletions
+251 -237
View File
@@ -11,20 +11,20 @@
<text x="70" y="62" font-size="11" fill="#555">win % per test match — thick line = trend</text>
<line x1="64" y1="388" x2="1176" y2="388" stroke="black"/>
<line x1="64" y1="388" x2="64" y2="78" stroke="black"/>
<line x1="1040.8" y1="388" x2="1040.8" y2="392" stroke="black"/>
<text x="1040.8" y="405" text-anchor="middle" font-size="11">10</text>
<line x1="890.5" y1="388" x2="890.5" y2="392" stroke="black"/>
<text x="890.5" y="405" text-anchor="middle" font-size="11">20</text>
<line x1="740.2" y1="388" x2="740.2" y2="392" stroke="black"/>
<text x="740.2" y="405" text-anchor="middle" font-size="11">30</text>
<line x1="589.9" y1="388" x2="589.9" y2="392" stroke="black"/>
<text x="589.9" y="405" text-anchor="middle" font-size="11">40</text>
<line x1="439.7" y1="388" x2="439.7" y2="392" stroke="black"/>
<text x="439.7" y="405" text-anchor="middle" font-size="11">50</text>
<line x1="289.4" y1="388" x2="289.4" y2="392" stroke="black"/>
<text x="289.4" y="405" text-anchor="middle" font-size="11">60</text>
<line x1="139.1" y1="388" x2="139.1" y2="392" stroke="black"/>
<text x="139.1" y="405" text-anchor="middle" font-size="11">70</text>
<line x1="1047.7" y1="388" x2="1047.7" y2="392" stroke="black"/>
<text x="1047.7" y="405" text-anchor="middle" font-size="11">10</text>
<line x1="905.1" y1="388" x2="905.1" y2="392" stroke="black"/>
<text x="905.1" y="405" text-anchor="middle" font-size="11">20</text>
<line x1="762.6" y1="388" x2="762.6" y2="392" stroke="black"/>
<text x="762.6" y="405" text-anchor="middle" font-size="11">30</text>
<line x1="620.0" y1="388" x2="620.0" y2="392" stroke="black"/>
<text x="620.0" y="405" text-anchor="middle" font-size="11">40</text>
<line x1="477.4" y1="388" x2="477.4" y2="392" stroke="black"/>
<text x="477.4" y="405" text-anchor="middle" font-size="11">50</text>
<line x1="334.9" y1="388" x2="334.9" y2="392" stroke="black"/>
<text x="334.9" y="405" text-anchor="middle" font-size="11">60</text>
<line x1="192.3" y1="388" x2="192.3" y2="392" stroke="black"/>
<text x="192.3" y="405" text-anchor="middle" font-size="11">70</text>
<line x1="60" y1="388.0" x2="64" y2="388.0" stroke="black"/>
<text x="57" y="392.0" text-anchor="end" font-size="11">0</text>
<line x1="60" y1="326.0" x2="64" y2="326.0" stroke="black"/>
@@ -40,237 +40,250 @@
<text x="620" y="421" text-anchor="middle" font-size="12">eval number</text>
<text x="16" y="233" text-anchor="middle" font-size="12" transform="rotate(-90 16 233)">win rate (%)</text>
<circle cx="1176.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1161.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1145.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1130.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1115.9" cy="171.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1100.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1085.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1070.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1055.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1040.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1025.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1010.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="995.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="980.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="965.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="950.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="935.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="920.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="905.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="890.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="875.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="860.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="845.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="830.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="815.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="800.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="785.3" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="770.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="755.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="740.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="725.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="710.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="695.1" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="680.1" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="665.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="650.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="635.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1161.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1147.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1133.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1119.0" cy="171.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1104.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1090.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1076.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1061.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1047.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1033.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1019.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="1004.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="990.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="976.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="962.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="947.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="933.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="919.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="905.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="890.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="876.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="862.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="848.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="833.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="819.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="805.3" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="791.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="776.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="762.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="748.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="734.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="719.8" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="705.5" cy="109.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="691.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="677.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="662.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="648.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="634.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="620.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="605.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="589.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="574.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="559.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="544.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="529.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="514.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="499.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="484.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="469.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="454.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="439.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="424.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="409.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="394.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="379.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="364.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="349.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="334.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="319.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="304.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="289.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="274.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="259.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="244.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="229.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="214.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="199.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="184.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="169.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="154.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="139.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="124.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="109.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="94.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="79.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="605.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="591.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="577.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="563.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="548.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="534.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="520.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="505.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="491.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="477.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="463.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="448.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="434.7" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="420.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="406.2" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="391.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="377.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="363.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="349.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="334.9" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="320.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="306.4" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="292.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="277.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="263.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="249.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="235.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="220.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="206.6" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="192.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="178.1" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="163.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="149.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="135.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="121.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="106.8" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="92.5" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="78.3" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<circle cx="64.0" cy="78.0" r="2" fill="#d62728" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.0,78.0 1145.9,78.0 1130.9,78.0 1115.9,96.6 1100.9,93.5 1085.8,91.3 1070.8,89.6 1055.8,88.3 1040.8,87.3 1025.7,87.3 1010.7,87.3 995.7,87.3 980.6,87.3 965.6,78.0 950.6,78.0 935.6,78.0 920.5,78.0 905.5,78.0 890.5,78.0 875.5,78.0 860.4,78.0 845.4,78.0 830.4,78.0 815.4,78.0 800.3,78.0 785.3,81.1 770.3,81.1 755.2,81.1 740.2,81.1 725.2,81.1 710.2,81.1 695.1,84.2 680.1,87.3 665.1,87.3 650.1,87.3 635.0,84.2 620.0,84.2 605.0,84.2 589.9,84.2 574.9,84.2 559.9,84.2 544.9,81.1 529.8,78.0 514.8,78.0 499.8,78.0 484.8,78.0 469.7,78.0 454.7,78.0 439.7,78.0 424.6,78.0 409.6,78.0 394.6,78.0 379.6,78.0 364.5,78.0 349.5,78.0 334.5,78.0 319.5,78.0 304.4,78.0 289.4,78.0 274.4,78.0 259.4,78.0 244.3,78.0 229.3,78.0 214.3,78.0 199.2,78.0 184.2,78.0 169.2,78.0 154.2,78.0 139.1,78.0 124.1,78.0 109.1,78.0 94.1,78.0 79.0,78.0 64.0,78.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<polyline points="1176.0,78.0 1161.7,78.0 1147.5,78.0 1133.2,78.0 1119.0,96.6 1104.7,93.5 1090.5,91.3 1076.2,89.6 1061.9,88.3 1047.7,87.3 1033.4,87.3 1019.2,87.3 1004.9,87.3 990.7,87.3 976.4,78.0 962.2,78.0 947.9,78.0 933.6,78.0 919.4,78.0 905.1,78.0 890.9,78.0 876.6,78.0 862.4,78.0 848.1,78.0 833.8,78.0 819.6,78.0 805.3,81.1 791.1,81.1 776.8,81.1 762.6,81.1 748.3,81.1 734.1,81.1 719.8,84.2 705.5,87.3 691.3,87.3 677.0,87.3 662.8,84.2 648.5,84.2 634.3,84.2 620.0,84.2 605.7,84.2 591.5,84.2 577.2,81.1 563.0,78.0 548.7,78.0 534.5,78.0 520.2,78.0 505.9,78.0 491.7,78.0 477.4,78.0 463.2,78.0 448.9,78.0 434.7,78.0 420.4,78.0 406.2,78.0 391.9,78.0 377.6,78.0 363.4,78.0 349.1,78.0 334.9,78.0 320.6,78.0 306.4,78.0 292.1,78.0 277.8,78.0 263.6,78.0 249.3,78.0 235.1,78.0 220.8,78.0 206.6,78.0 192.3,78.0 178.1,78.0 163.8,78.0 149.5,78.0 135.3,78.0 121.0,78.0 106.8,78.0 92.5,78.0 78.3,78.0 64.0,78.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<circle cx="1176.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1161.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1145.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1130.9" cy="357.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1115.9" cy="202.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1100.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1085.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1070.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1055.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1040.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1025.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1010.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="995.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="980.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="965.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="950.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="935.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="920.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="905.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="890.5" cy="264.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="875.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="860.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="845.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="830.4" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="815.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="800.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="785.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="770.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="755.2" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="740.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="725.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="710.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="695.1" cy="171.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="680.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="665.1" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="650.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="635.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1161.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1147.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1133.2" cy="357.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1119.0" cy="202.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1104.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1090.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1076.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1061.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1047.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1033.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1019.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="1004.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="990.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="976.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="962.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="947.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="933.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="919.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="905.1" cy="264.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="890.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="876.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="862.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="848.1" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="833.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="819.6" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="805.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="791.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="776.8" cy="388.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="762.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="748.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="734.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="719.8" cy="171.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="705.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="691.3" cy="140.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="677.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="662.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="648.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="634.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="620.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="605.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="589.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="574.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="559.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="544.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="529.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="514.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="499.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="484.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="469.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="454.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="439.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="424.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="409.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="394.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="379.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="364.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="349.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="334.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="319.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="304.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="289.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="274.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="259.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="244.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="229.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="214.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="199.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="184.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="169.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="154.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="139.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="124.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="109.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="94.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="79.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.0,78.0 1145.9,78.0 1130.9,147.8 1115.9,158.6 1100.9,145.2 1085.8,135.6 1070.8,128.4 1055.8,122.8 1040.8,118.3 1025.7,118.3 1010.7,118.3 995.7,118.3 980.6,90.4 965.6,78.0 950.6,78.0 935.6,78.0 920.5,78.0 905.5,78.0 890.5,96.6 875.5,96.6 860.4,96.6 845.4,96.6 830.4,127.6 815.4,127.6 800.3,133.8 785.3,140.0 770.3,140.0 755.2,171.0 740.2,152.4 725.2,152.4 710.2,152.4 695.1,161.7 680.1,130.7 665.1,136.9 650.1,130.7 635.0,124.5 620.0,124.5 605.0,93.5 589.9,93.5 574.9,93.5 559.9,93.5 544.9,84.2 529.8,84.2 514.8,78.0 499.8,78.0 484.8,78.0 469.7,78.0 454.7,78.0 439.7,78.0 424.6,78.0 409.6,78.0 394.6,78.0 379.6,78.0 364.5,78.0 349.5,78.0 334.5,78.0 319.5,78.0 304.4,78.0 289.4,78.0 274.4,78.0 259.4,78.0 244.3,78.0 229.3,78.0 214.3,78.0 199.2,78.0 184.2,78.0 169.2,78.0 154.2,78.0 139.1,78.0 124.1,78.0 109.1,78.0 94.1,78.0 79.0,78.0" fill="none" stroke="#1f77b4" stroke-width="3.5" opacity="1.0"/>
<circle cx="605.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="591.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="577.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="563.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="548.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="534.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="520.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="505.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="491.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="477.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="463.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="448.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="434.7" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="420.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="406.2" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="391.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="377.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="363.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="349.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="334.9" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="320.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="306.4" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="292.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="277.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="263.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="249.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="235.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="220.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="206.6" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="192.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="178.1" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="163.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="149.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="135.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="121.0" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="106.8" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="92.5" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="78.3" cy="78.0" r="2" fill="#1f77b4" opacity="0.25"/>
<circle cx="64.0" cy="171.0" r="2" fill="#1f77b4" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.7,78.0 1147.5,78.0 1133.2,147.8 1119.0,158.6 1104.7,145.2 1090.5,135.6 1076.2,128.4 1061.9,122.8 1047.7,118.3 1033.4,118.3 1019.2,118.3 1004.9,118.3 990.7,90.4 976.4,78.0 962.2,78.0 947.9,78.0 933.6,78.0 919.4,78.0 905.1,96.6 890.9,96.6 876.6,96.6 862.4,96.6 848.1,127.6 833.8,127.6 819.6,133.8 805.3,140.0 791.1,140.0 776.8,171.0 762.6,152.4 748.3,152.4 734.1,152.4 719.8,161.7 705.5,130.7 691.3,136.9 677.0,130.7 662.8,124.5 648.5,124.5 634.3,93.5 620.0,93.5 605.7,93.5 591.5,93.5 577.2,84.2 563.0,84.2 548.7,78.0 534.5,78.0 520.2,78.0 505.9,78.0 491.7,78.0 477.4,78.0 463.2,78.0 448.9,78.0 434.7,78.0 420.4,78.0 406.2,78.0 391.9,78.0 377.6,78.0 363.4,78.0 349.1,78.0 334.9,78.0 320.6,78.0 306.4,78.0 292.1,78.0 277.8,78.0 263.6,78.0 249.3,78.0 235.1,78.0 220.8,78.0 206.6,78.0 192.3,78.0 178.1,78.0 163.8,78.0 149.5,78.0 135.3,78.0 121.0,78.0 106.8,78.0 92.5,78.0 78.3,78.0 64.0,87.3" fill="none" stroke="#1f77b4" stroke-width="3.5" opacity="1.0"/>
<circle cx="1176.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1161.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1145.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1130.9" cy="140.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1115.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1100.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1085.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1070.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1055.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1040.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1025.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1010.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="995.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="980.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="965.6" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="950.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="935.6" cy="326.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="920.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="905.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="890.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="875.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="860.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="845.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="830.4" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="815.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="800.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="785.3" cy="264.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="770.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="755.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="740.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="725.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="710.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="695.1" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="680.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="665.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="650.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="635.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1161.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1147.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1133.2" cy="140.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1119.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1104.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1090.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1076.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1061.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1047.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1033.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1019.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="1004.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="990.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="976.4" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="962.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="947.9" cy="326.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="933.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="919.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="905.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="890.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="876.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="862.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="848.1" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="833.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="819.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="805.3" cy="264.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="791.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="776.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="762.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="748.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="734.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="719.8" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="705.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="691.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="677.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="662.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="648.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="634.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="620.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="605.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="589.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="574.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="559.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="544.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="529.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="514.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="499.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="484.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="469.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="454.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="439.7" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="424.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="409.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="394.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="379.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="364.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="349.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="334.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="319.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="304.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="289.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="274.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="259.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="244.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="229.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="214.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="199.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="184.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="169.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="154.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="139.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="124.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="109.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="94.1" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="79.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.0,78.0 1145.9,78.0 1130.9,93.5 1115.9,90.4 1100.9,88.3 1085.8,86.9 1070.8,85.8 1055.8,84.9 1040.8,84.2 1025.7,84.2 1010.7,84.2 995.7,84.2 980.6,78.0 965.6,81.1 950.6,81.1 935.6,105.9 920.5,105.9 905.5,105.9 890.5,105.9 875.5,105.9 860.4,105.9 845.4,105.9 830.4,109.0 815.4,105.9 800.3,105.9 785.3,99.7 770.3,99.7 755.2,99.7 740.2,99.7 725.2,99.7 710.2,99.7 695.1,102.8 680.1,99.7 665.1,99.7 650.1,99.7 635.0,81.1 620.0,81.1 605.0,81.1 589.9,81.1 574.9,81.1 559.9,81.1 544.9,78.0 529.8,78.0 514.8,78.0 499.8,78.0 484.8,78.0 469.7,78.0 454.7,78.0 439.7,81.1 424.6,81.1 409.6,81.1 394.6,81.1 379.6,81.1 364.5,81.1 349.5,81.1 334.5,81.1 319.5,81.1 304.4,81.1 289.4,78.0 274.4,78.0 259.4,78.0 244.3,78.0 229.3,78.0 214.3,78.0 199.2,78.0 184.2,78.0 169.2,78.0 154.2,78.0 139.1,78.0 124.1,78.0 109.1,78.0 94.1,81.1 79.0,81.1" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<circle cx="605.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="591.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="577.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="563.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="548.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="534.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="520.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="505.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="491.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="477.4" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="463.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="448.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="434.7" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="420.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="406.2" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="391.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="377.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="363.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="349.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="334.9" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="320.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="306.4" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="292.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="277.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="263.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="249.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="235.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="220.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="206.6" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="192.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="178.1" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="163.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="149.5" cy="109.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="135.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="121.0" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="106.8" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="92.5" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<circle cx="78.3" cy="78.0" r="2" fill="#2ca02c" opacity="0.25"/>
<polyline points="1176.0,78.0 1161.7,78.0 1147.5,78.0 1133.2,93.5 1119.0,90.4 1104.7,88.3 1090.5,86.9 1076.2,85.8 1061.9,84.9 1047.7,84.2 1033.4,84.2 1019.2,84.2 1004.9,84.2 990.7,78.0 976.4,81.1 962.2,81.1 947.9,105.9 933.6,105.9 919.4,105.9 905.1,105.9 890.9,105.9 876.6,105.9 862.4,105.9 848.1,109.0 833.8,105.9 819.6,105.9 805.3,99.7 791.1,99.7 776.8,99.7 762.6,99.7 748.3,99.7 734.1,99.7 719.8,102.8 705.5,99.7 691.3,99.7 677.0,99.7 662.8,81.1 648.5,81.1 634.3,81.1 620.0,81.1 605.7,81.1 591.5,81.1 577.2,78.0 563.0,78.0 548.7,78.0 534.5,78.0 520.2,78.0 505.9,78.0 491.7,78.0 477.4,81.1 463.2,81.1 448.9,81.1 434.7,81.1 420.4,81.1 406.2,81.1 391.9,81.1 377.6,81.1 363.4,81.1 349.1,81.1 334.9,78.0 320.6,78.0 306.4,78.0 292.1,78.0 277.8,78.0 263.6,78.0 249.3,78.0 235.1,78.0 220.8,78.0 206.6,78.0 192.3,78.0 178.1,78.0 163.8,78.0 149.5,81.1 135.3,81.1 121.0,81.1 106.8,81.1 92.5,81.1 78.3,81.1" fill="none" stroke="#2ca02c" stroke-width="3.5" opacity="1.0"/>
<line x1="76" y1="92" x2="104" y2="92" stroke="#d62728" stroke-width="3"/>
<text x="110" y="96" font-size="12">Corners — 75 evals</text>
<text x="110" y="96" font-size="12">Corners — 79 evals</text>
<line x1="76" y1="110" x2="104" y2="110" stroke="#1f77b4" stroke-width="3"/>
<text x="110" y="114" font-size="12">Crazy — 74 evals</text>
<text x="110" y="114" font-size="12">Crazy — 79 evals</text>
<line x1="76" y1="128" x2="104" y2="128" stroke="#2ca02c" stroke-width="3"/>
<text x="110" y="132" font-size="12">Target — 74 evals</text>
<text x="110" y="132" font-size="12">Target — 78 evals</text>
<line x1="64" y1="472.0" x2="1176" y2="472.0" stroke="#dddddd"/>
<line x1="64" y1="534.0" x2="1176" y2="534.0" stroke="#dddddd"/>
<line x1="64" y1="596.0" x2="1176" y2="596.0" stroke="#dddddd"/>
@@ -307,8 +320,9 @@
<text x="620" y="815" text-anchor="middle" font-size="12">fraction of run (start → end)</text>
<text x="16" y="627" text-anchor="middle" font-size="12" transform="rotate(-90 16 627)">win rate (%)</text>
<polyline points="77.9,473.9 105.7,476.7 133.5,484.2 161.3,508.6 189.1,499.2 216.9,494.5 244.7,495.5 272.5,492.3 300.3,505.9 328.1,489.4 355.9,491.4 383.7,514.6 411.5,495.2 439.3,492.3 467.1,503.0 494.9,491.4 522.7,497.2 550.5,502.0 578.3,504.0 606.1,495.2 633.9,507.8 661.7,510.8 689.5,494.3 717.3,481.7 745.1,511.7 772.9,501.1 800.7,502.0 828.5,492.3 856.3,489.4 884.1,500.1 911.9,477.8 939.7,492.3 967.5,491.4 995.3,519.5 1023.1,502.0 1050.9,490.4 1078.7,487.5 1106.5,490.4 1134.3,490.4 1162.1,496.2" fill="none" stroke="#999999" stroke-width="1.5" opacity="1.0"/>
<polyline points="78.8,472.0 93.7,472.0 108.5,472.0 123.3,472.0 138.1,490.6 153.0,487.5 167.8,485.3 182.6,483.6 197.4,482.3 212.3,481.3 227.1,481.3 241.9,481.3 256.7,481.3 271.6,481.3 286.4,472.0 301.2,472.0 316.1,472.0 330.9,472.0 345.7,472.0 360.5,472.0 375.4,472.0 390.2,472.0 405.0,472.0 419.8,472.0 434.7,472.0 449.5,472.0 464.3,475.1 479.1,475.1 494.0,475.1 508.8,475.1 523.6,475.1 538.5,475.1 553.3,478.2 568.1,481.3 582.9,481.3 597.8,481.3 612.6,478.2 627.4,478.2 642.2,478.2 657.1,478.2 671.9,478.2 686.7,478.2 701.5,475.1 716.4,472.0 731.2,472.0 746.0,472.0 760.9,472.0 775.7,472.0 790.5,472.0 805.3,472.0 820.2,472.0 835.0,472.0 849.8,472.0 864.6,472.0 879.5,472.0 894.3,472.0 909.1,472.0 923.9,472.0 938.8,472.0 953.6,472.0 968.4,472.0 983.3,472.0 998.1,472.0 1012.9,472.0 1027.7,472.0 1042.6,472.0 1057.4,472.0 1072.2,472.0 1087.0,472.0 1101.9,472.0 1116.7,472.0 1131.5,472.0 1146.3,472.0 1161.2,472.0 1176.0,472.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<polyline points="78.1,472.0 92.2,472.0 106.2,472.0 120.3,472.0 134.4,490.6 148.5,487.5 162.5,485.3 176.6,483.6 190.7,482.3 204.8,481.3 218.8,481.3 232.9,481.3 247.0,481.3 261.1,481.3 275.1,472.0 289.2,472.0 303.3,472.0 317.4,472.0 331.4,472.0 345.5,472.0 359.6,472.0 373.7,472.0 387.7,472.0 401.8,472.0 415.9,472.0 430.0,472.0 444.1,475.1 458.1,475.1 472.2,475.1 486.3,475.1 500.4,475.1 514.4,475.1 528.5,478.2 542.6,481.3 556.7,481.3 570.7,481.3 584.8,478.2 598.9,478.2 613.0,478.2 627.0,478.2 641.1,478.2 655.2,478.2 669.3,475.1 683.3,472.0 697.4,472.0 711.5,472.0 725.6,472.0 739.6,472.0 753.7,472.0 767.8,472.0 781.9,472.0 795.9,472.0 810.0,472.0 824.1,472.0 838.2,472.0 852.3,472.0 866.3,472.0 880.4,472.0 894.5,472.0 908.6,472.0 922.6,472.0 936.7,472.0 950.8,472.0 964.9,472.0 978.9,472.0 993.0,472.0 1007.1,472.0 1021.2,472.0 1035.2,472.0 1049.3,472.0 1063.4,472.0 1077.5,472.0 1091.5,472.0 1105.6,472.0 1119.7,472.0 1133.8,472.0 1147.8,472.0 1161.9,472.0 1176.0,472.0" fill="none" stroke="#d62728" stroke-width="3.5" opacity="1.0"/>
<line x1="76" y1="486" x2="104" y2="486" stroke="#999999" stroke-width="3"/>
<text x="110" y="490" font-size="12">Run 1 (old) — 1287 evals in 40 buckets</text>
<line x1="76" y1="504" x2="104" y2="504" stroke="#d62728" stroke-width="3"/>
<text x="110" y="508" font-size="12">Run 3 trend (rolling-10)</text>
</svg>

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

+20 -20
View File
@@ -7,13 +7,13 @@
<line x1="70.0" y1="250" x2="70.0" y2="254" stroke="black"/>
<text x="70.0" y="267" text-anchor="middle" font-size="11">1</text>
<line x1="297.5" y1="250" x2="297.5" y2="254" stroke="black"/>
<text x="297.5" y="267" text-anchor="middle" font-size="11">25</text>
<text x="297.5" y="267" text-anchor="middle" font-size="11">41</text>
<line x1="525.0" y1="250" x2="525.0" y2="254" stroke="black"/>
<text x="525.0" y="267" text-anchor="middle" font-size="11">48</text>
<text x="525.0" y="267" text-anchor="middle" font-size="11">81</text>
<line x1="752.5" y1="250" x2="752.5" y2="254" stroke="black"/>
<text x="752.5" y="267" text-anchor="middle" font-size="11">72</text>
<text x="752.5" y="267" text-anchor="middle" font-size="11">121</text>
<line x1="980.0" y1="250" x2="980.0" y2="254" stroke="black"/>
<text x="980.0" y="267" text-anchor="middle" font-size="11">96</text>
<text x="980.0" y="267" text-anchor="middle" font-size="11">161</text>
<line x1="66" y1="250.0" x2="70" y2="250.0" stroke="black"/>
<text x="63" y="254.0" text-anchor="end" font-size="11">0.1</text>
<line x1="66" y1="197.5" x2="70" y2="197.5" stroke="black"/>
@@ -26,46 +26,46 @@
<text x="63" y="44.0" text-anchor="end" font-size="11">1e+17</text>
<text x="525" y="283" text-anchor="middle" font-size="12"></text>
<text x="16" y="145" text-anchor="middle" font-size="12" transform="rotate(-90 16 145)">critic_loss</text>
<polyline points="70.0,67.6 79.6,66.5 89.2,67.9 98.7,70.0 108.3,72.6 117.9,74.1 127.5,73.1 137.1,71.4 146.6,240.6 156.2,65.5 165.8,55.6 175.4,61.7 184.9,67.4 194.5,71.4 204.1,74.2 213.7,74.9 223.3,75.7 232.8,75.9 242.4,76.9 252.0,76.5 261.6,75.5 271.2,74.8 280.7,185.2 290.3,70.5 299.9,68.6 309.5,67.4 319.1,202.4 328.6,60.3 338.2,60.4 347.8,59.0 357.4,59.7 366.9,58.6 376.5,56.8 386.1,55.7 395.7,56.0 405.3,55.9 414.8,50.4 424.4,50.9 434.0,53.5 443.6,48.3 453.2,45.7 462.7,240.6 472.3,240.6 481.9,56.2 491.5,59.1 501.1,63.5 510.6,65.0 520.2,240.6 529.8,68.4 539.4,70.5 548.9,185.8 558.5,71.7 568.1,72.8 577.7,69.0 587.3,62.6 596.8,56.9 606.4,63.6 616.0,240.6 625.6,240.6 635.2,73.5 644.7,74.7 654.3,73.7 663.9,73.7 673.5,240.6 683.1,73.7 692.6,74.6 702.2,72.8 711.8,70.5 721.4,72.5 730.9,70.7 740.5,73.1 750.1,69.5 759.7,67.9 769.3,67.1 778.8,64.0 788.4,53.5 798.0,184.6 807.6,63.5 817.2,114.6 826.7,161.5 836.3,197.0 845.9,204.7 855.5,205.0 865.1,205.3 874.6,205.5 884.2,205.6 893.8,205.7 903.4,205.6 912.9,206.0 922.5,206.2 932.1,206.4 941.7,206.5 951.3,206.8 960.8,207.0 970.4,240.5 980.0,240.5" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<polyline points="70.0,67.6 75.7,66.5 81.4,67.9 87.1,70.0 92.8,72.6 98.4,74.1 104.1,73.1 109.8,71.4 115.5,240.6 121.2,65.5 126.9,55.6 132.6,61.7 138.2,67.4 143.9,71.4 149.6,74.2 155.3,74.9 161.0,75.7 166.7,75.9 172.4,76.9 178.1,76.5 183.8,75.5 189.4,74.8 195.1,185.2 200.8,70.5 206.5,68.6 212.2,67.4 217.9,202.4 223.6,60.3 229.2,60.4 234.9,59.0 240.6,59.7 246.3,58.6 252.0,56.8 257.7,55.7 263.4,56.0 269.1,55.9 274.8,50.4 280.4,50.9 286.1,53.5 291.8,48.3 297.5,45.7 303.2,240.6 308.9,240.6 314.6,56.2 320.2,59.1 325.9,63.5 331.6,65.0 337.3,240.6 343.0,68.4 348.7,70.5 354.4,185.8 360.1,71.7 365.8,72.8 371.4,69.0 377.1,62.6 382.8,56.9 388.5,63.6 394.2,240.6 399.9,240.6 405.6,73.5 411.2,74.7 416.9,73.7 422.6,73.7 428.3,240.6 434.0,73.7 439.7,74.6 445.4,72.8 451.1,70.5 456.8,72.5 462.4,70.7 468.1,73.1 473.8,69.5 479.5,67.9 485.2,67.1 490.9,64.0 496.6,53.5 502.2,184.6 507.9,63.5 513.6,114.6 519.3,161.5 525.0,197.0 530.7,204.7 536.4,205.0 542.1,205.3 547.8,205.5 553.4,205.6 559.1,205.7 564.8,205.6 570.5,206.0 576.2,206.2 581.9,206.4 587.6,206.5 593.2,206.8 598.9,207.0 604.6,240.5 610.3,240.5 616.0,240.5 621.7,240.5 627.4,207.8 633.1,208.1 638.8,208.2 644.4,208.4 650.1,208.6 655.8,208.8 661.5,209.0 667.2,209.2 672.9,209.4 678.6,209.7 684.2,209.9 689.9,210.3 695.6,210.5 701.3,210.7 707.0,210.9 712.7,211.1 718.4,211.3 724.1,211.5 729.8,211.7 735.4,212.0 741.1,240.5 746.8,212.3 752.5,212.5 758.2,212.6 763.9,212.8 769.6,213.0 775.2,213.3 780.9,213.4 786.6,213.5 792.3,213.7 798.0,213.8 803.7,214.0 809.4,213.9 815.1,214.3 820.8,214.5 826.4,240.4 832.1,214.8 837.8,214.9 843.5,215.1 849.2,240.4 854.9,215.4 860.6,215.6 866.2,215.7 871.9,215.9 877.6,216.0 883.3,216.2 889.0,216.4 894.7,216.6 900.4,240.4 906.1,216.9 911.8,240.4 917.4,217.3 923.1,217.4 928.8,217.6 934.5,217.7 940.2,217.9 945.9,218.0 951.6,218.1 957.2,218.2 962.9,218.4 968.6,218.6 974.3,218.7 980.0,218.7" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<text x="76" y="321" font-size="13" font-weight="bold">actor_loss |abs| (log scale)</text>
<line x1="70" y1="515" x2="980" y2="515" stroke="black"/>
<line x1="70" y1="515" x2="70" y2="305" stroke="black"/>
<line x1="70.0" y1="515" x2="70.0" y2="519" stroke="black"/>
<text x="70.0" y="532" text-anchor="middle" font-size="11">1</text>
<line x1="297.5" y1="515" x2="297.5" y2="519" stroke="black"/>
<text x="297.5" y="532" text-anchor="middle" font-size="11">25</text>
<text x="297.5" y="532" text-anchor="middle" font-size="11">41</text>
<line x1="525.0" y1="515" x2="525.0" y2="519" stroke="black"/>
<text x="525.0" y="532" text-anchor="middle" font-size="11">48</text>
<text x="525.0" y="532" text-anchor="middle" font-size="11">81</text>
<line x1="752.5" y1="515" x2="752.5" y2="519" stroke="black"/>
<text x="752.5" y="532" text-anchor="middle" font-size="11">72</text>
<text x="752.5" y="532" text-anchor="middle" font-size="11">121</text>
<line x1="980.0" y1="515" x2="980.0" y2="519" stroke="black"/>
<text x="980.0" y="532" text-anchor="middle" font-size="11">96</text>
<text x="980.0" y="532" text-anchor="middle" font-size="11">161</text>
<line x1="66" y1="515.0" x2="70" y2="515.0" stroke="black"/>
<text x="63" y="519.0" text-anchor="end" font-size="11">1</text>
<line x1="66" y1="462.5" x2="70" y2="462.5" stroke="black"/>
<text x="63" y="466.5" text-anchor="end" font-size="11">56.2</text>
<text x="63" y="466.5" text-anchor="end" font-size="11">100</text>
<line x1="66" y1="410.0" x2="70" y2="410.0" stroke="black"/>
<text x="63" y="414.0" text-anchor="end" font-size="11">3.16e+03</text>
<text x="63" y="414.0" text-anchor="end" font-size="11">1e+04</text>
<line x1="66" y1="357.5" x2="70" y2="357.5" stroke="black"/>
<text x="63" y="361.5" text-anchor="end" font-size="11">1.78e+05</text>
<text x="63" y="361.5" text-anchor="end" font-size="11">1e+06</text>
<line x1="66" y1="305.0" x2="70" y2="305.0" stroke="black"/>
<text x="63" y="309.0" text-anchor="end" font-size="11">1e+07</text>
<text x="63" y="309.0" text-anchor="end" font-size="11">1e+08</text>
<text x="525" y="548" text-anchor="middle" font-size="12"></text>
<text x="16" y="410" text-anchor="middle" font-size="12" transform="rotate(-90 16 410)">|actor_loss|</text>
<polyline points="70.0,320.3 79.6,325.2 89.2,327.4 98.7,330.1 108.3,333.3 117.9,335.0 127.5,333.9 137.1,332.2 146.6,328.2 156.2,325.3 165.8,318.1 175.4,313.9 184.9,325.2 194.5,331.1 204.1,334.8 213.7,337.2 223.3,338.1 232.8,338.6 242.4,339.7 252.0,340.5 261.6,340.3 271.2,340.1 280.7,339.5 290.3,339.3 299.9,338.2 309.5,337.7 319.1,335.9 328.6,335.6 338.2,332.5 347.8,331.0 357.4,329.6 366.9,329.0 376.5,329.3 386.1,329.7 395.7,327.8 405.3,327.5 414.8,329.1 424.4,329.6 434.0,327.7 443.6,330.3 453.2,331.0 462.7,332.4 472.3,335.8 481.9,338.6 491.5,339.7 501.1,341.4 510.6,342.5 520.2,344.1 529.8,345.3 539.4,346.6 548.9,347.7 558.5,348.6 568.1,349.3 577.7,348.9 587.3,348.7 596.8,347.9 606.4,346.7 616.0,344.9 625.6,342.6 635.2,341.6 644.7,340.5 654.3,339.6 663.9,339.5 673.5,340.3 683.1,341.3 692.6,340.4 702.2,341.3 711.8,342.4 721.4,341.3 730.9,341.7 740.5,340.4 750.1,342.0 759.7,342.5 769.3,342.2 778.8,342.7 788.4,344.5 798.0,347.4 807.6,347.7 817.2,385.3 826.7,446.3 836.3,492.0 845.9,501.9 855.5,502.3 865.1,502.7 874.6,502.9 884.2,503.0 893.8,503.2 903.4,503.4 912.9,503.6 922.5,503.8 932.1,504.0 941.7,504.2 951.3,504.6 960.8,504.9 970.4,505.0 980.0,505.2" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<polyline points="70.0,318.4 75.7,322.7 81.4,324.6 87.1,326.9 92.8,329.8 98.4,331.2 104.1,330.3 109.8,328.8 115.5,325.3 121.2,322.8 126.9,316.5 132.6,312.8 138.2,322.7 143.9,327.9 149.6,331.0 155.3,333.1 161.0,334.0 166.7,334.4 172.4,335.4 178.1,336.1 183.8,335.9 189.4,335.7 195.1,335.2 200.8,335.1 206.5,334.0 212.2,333.6 217.9,332.0 223.6,331.8 229.2,329.1 234.9,327.7 240.6,326.5 246.3,326.0 252.0,326.2 257.7,326.6 263.4,324.9 269.1,324.7 274.8,326.1 280.4,326.5 286.1,324.9 291.8,327.1 297.5,327.8 303.2,329.0 308.9,332.0 314.6,334.4 320.2,335.4 325.9,336.9 331.6,337.8 337.3,339.3 343.0,340.2 348.7,341.4 354.4,342.3 360.1,343.1 365.8,343.8 371.4,343.4 377.1,343.2 382.8,342.6 388.5,341.5 394.2,339.9 399.9,337.9 405.6,337.0 411.2,336.0 416.9,335.3 422.6,335.2 428.3,335.9 434.0,336.8 439.7,335.9 445.4,336.7 451.1,337.7 456.8,336.8 462.4,337.1 468.1,336.0 473.8,337.4 479.5,337.8 485.2,337.6 490.9,338.0 496.6,339.6 502.2,342.1 507.9,342.4 513.6,375.3 519.3,428.6 525.0,468.6 530.7,477.3 536.4,477.6 542.1,478.0 547.8,478.1 553.4,478.3 559.1,478.4 564.8,478.6 570.5,478.7 576.2,479.0 581.9,479.2 587.6,479.3 593.2,479.7 598.9,479.9 604.6,480.0 610.3,480.2 616.0,480.3 621.7,480.6 627.4,480.8 633.1,481.1 638.8,481.2 644.4,481.4 650.1,481.7 655.8,481.9 661.5,482.1 667.2,482.4 672.9,482.6 678.6,482.9 684.2,483.1 689.9,483.6 695.6,483.8 701.3,484.1 707.0,484.3 712.7,484.5 718.4,484.7 724.1,485.0 729.8,485.2 735.4,485.4 741.1,485.7 746.8,485.9 752.5,486.0 758.2,486.2 763.9,486.4 769.6,486.6 775.2,486.9 780.9,487.1 786.6,487.2 792.3,487.4 798.0,487.6 803.7,487.8 809.4,487.9 815.1,488.1 820.8,488.3 826.4,488.5 832.1,488.6 837.8,488.8 843.5,489.0 849.2,489.2 854.9,489.4 860.6,489.5 866.2,489.7 871.9,489.9 877.6,490.0 883.3,490.2 889.0,490.4 894.7,490.6 900.4,490.8 906.1,491.0 911.8,491.2 917.4,491.4 923.1,491.6 928.8,491.8 934.5,491.9 940.2,492.1 945.9,492.2 951.6,492.4 957.2,492.5 962.9,492.7 968.6,492.9 974.3,493.1 980.0,493.2" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<text x="76" y="586" font-size="13" font-weight="bold">alpha (temperature)</text>
<line x1="70" y1="780" x2="980" y2="780" stroke="black"/>
<line x1="70" y1="780" x2="70" y2="570" stroke="black"/>
<line x1="70.0" y1="780" x2="70.0" y2="784" stroke="black"/>
<text x="70.0" y="797" text-anchor="middle" font-size="11">1</text>
<line x1="297.5" y1="780" x2="297.5" y2="784" stroke="black"/>
<text x="297.5" y="797" text-anchor="middle" font-size="11">25</text>
<text x="297.5" y="797" text-anchor="middle" font-size="11">41</text>
<line x1="525.0" y1="780" x2="525.0" y2="784" stroke="black"/>
<text x="525.0" y="797" text-anchor="middle" font-size="11">48</text>
<text x="525.0" y="797" text-anchor="middle" font-size="11">81</text>
<line x1="752.5" y1="780" x2="752.5" y2="784" stroke="black"/>
<text x="752.5" y="797" text-anchor="middle" font-size="11">72</text>
<text x="752.5" y="797" text-anchor="middle" font-size="11">121</text>
<line x1="980.0" y1="780" x2="980.0" y2="784" stroke="black"/>
<text x="980.0" y="797" text-anchor="middle" font-size="11">96</text>
<text x="980.0" y="797" text-anchor="middle" font-size="11">161</text>
<line x1="66" y1="780.0" x2="70" y2="780.0" stroke="black"/>
<text x="63" y="784.0" text-anchor="end" font-size="11">0</text>
<line x1="66" y1="727.5" x2="70" y2="727.5" stroke="black"/>
@@ -78,6 +78,6 @@
<text x="63" y="574.0" text-anchor="end" font-size="11">1.01</text>
<text x="525" y="813" text-anchor="middle" font-size="12"></text>
<text x="16" y="675" text-anchor="middle" font-size="12" transform="rotate(-90 16 675)">alpha</text>
<polyline points="70.0,778.3 79.6,778.1 89.2,778.0 98.7,777.8 108.3,777.5 117.9,777.1 127.5,777.0 137.1,776.8 146.6,776.6 156.2,776.5 165.8,776.2 175.4,775.8 184.9,775.7 194.5,776.0 204.1,776.2 213.7,776.5 223.3,776.7 232.8,777.0 242.4,777.3 252.0,777.5 261.6,777.8 271.2,778.0 280.7,778.3 290.3,778.5 299.9,778.8 309.5,778.9 319.1,779.3 328.6,779.4 338.2,779.2 347.8,779.1 357.4,778.9 366.9,778.8 376.5,778.6 386.1,778.4 395.7,778.2 405.3,778.0 414.8,777.6 424.4,777.4 434.0,777.1 443.6,776.9 453.2,776.6 462.7,776.4 472.3,776.3 481.9,776.5 491.5,776.6 501.1,776.8 510.6,776.9 520.2,777.1 529.8,777.3 539.4,777.5 548.9,777.8 558.5,778.0 568.1,778.2 577.7,778.4 587.3,778.8 596.8,779.1 606.4,779.3 616.0,779.8 625.6,780.0 635.2,779.8 644.7,779.6 654.3,779.4 663.9,779.1 673.5,778.9 683.1,778.4 692.6,778.2 702.2,777.9 711.8,777.7 721.4,777.4 730.9,777.3 740.5,777.1 750.1,776.8 759.7,776.6 769.3,776.5 778.8,776.5 788.4,776.7 798.0,777.2 807.6,777.4 817.2,777.5 826.7,777.3 836.3,777.0 845.9,776.9 855.5,776.6 865.1,776.2 874.6,776.1 884.2,776.0 893.8,775.9 903.4,775.6 912.9,775.5 922.5,775.3 932.1,775.0 941.7,774.8 951.3,774.5 960.8,774.2 970.4,774.1 980.0,774.0" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<text x="525" y="817" text-anchor="middle" font-size="12">metric line number (96 rows)</text>
<polyline points="70.0,778.3 75.7,778.1 81.4,778.0 87.1,777.8 92.8,777.5 98.4,777.1 104.1,777.0 109.8,776.8 115.5,776.6 121.2,776.5 126.9,776.2 132.6,775.8 138.2,775.7 143.9,776.0 149.6,776.2 155.3,776.5 161.0,776.7 166.7,777.0 172.4,777.3 178.1,777.5 183.8,777.8 189.4,778.0 195.1,778.3 200.8,778.5 206.5,778.8 212.2,778.9 217.9,779.3 223.6,779.4 229.2,779.2 234.9,779.1 240.6,778.9 246.3,778.8 252.0,778.6 257.7,778.4 263.4,778.2 269.1,778.0 274.8,777.6 280.4,777.4 286.1,777.1 291.8,776.9 297.5,776.6 303.2,776.4 308.9,776.3 314.6,776.5 320.2,776.6 325.9,776.8 331.6,776.9 337.3,777.1 343.0,777.3 348.7,777.5 354.4,777.8 360.1,778.0 365.8,778.2 371.4,778.4 377.1,778.8 382.8,779.1 388.5,779.3 394.2,779.8 399.9,780.0 405.6,779.8 411.2,779.6 416.9,779.4 422.6,779.1 428.3,778.9 434.0,778.4 439.7,778.2 445.4,777.9 451.1,777.7 456.8,777.4 462.4,777.3 468.1,777.1 473.8,776.8 479.5,776.6 485.2,776.5 490.9,776.5 496.6,776.7 502.2,777.2 507.9,777.4 513.6,777.5 519.3,777.3 525.0,777.0 530.7,776.9 536.4,776.6 542.1,776.2 547.8,776.1 553.4,776.0 559.1,775.9 564.8,775.6 570.5,775.5 576.2,775.3 581.9,775.0 587.6,774.8 593.2,774.5 598.9,774.2 604.6,774.1 610.3,774.0 616.0,773.8 621.7,773.6 627.4,773.4 633.1,773.1 638.8,773.0 644.4,772.7 650.1,772.5 655.8,772.3 661.5,772.0 667.2,771.8 672.9,771.5 678.6,771.3 684.2,771.0 689.9,770.6 695.6,770.4 701.3,770.1 707.0,770.0 712.7,769.7 718.4,769.5 724.1,769.3 729.8,769.1 735.4,768.8 741.1,768.6 746.8,768.4 752.5,768.2 758.2,768.1 763.9,767.8 769.6,767.6 775.2,767.2 780.9,766.9 786.6,766.7 792.3,766.5 798.0,766.3 803.7,766.0 809.4,765.8 815.1,765.6 820.8,765.3 826.4,765.1 832.1,764.9 837.8,764.7 843.5,764.3 849.2,764.1 854.9,763.9 860.6,763.8 866.2,763.5 871.9,763.3 877.6,763.1 883.3,762.8 889.0,762.6 894.7,762.4 900.4,762.1 906.1,761.9 911.8,761.7 917.4,761.4 923.1,761.2 928.8,761.0 934.5,760.8 940.2,760.6 945.9,760.5 951.6,760.3 957.2,760.1 962.9,759.9 968.6,759.7 974.3,759.4 980.0,759.2" fill="none" stroke="#1f77b4" stroke-width="1.6" opacity="1.0"/>
<text x="525" y="817" text-anchor="middle" font-size="12">metric line number (161 rows)</text>
</svg>

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

+31 -6
View File
@@ -15,9 +15,11 @@ All args optional; defaults relative to the SAC_LSTM_Bot/ root (parent of tools/
"""
import json
import math
import os
import re
import sys
import tempfile
import xml.etree.ElementTree as ET
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
@@ -80,6 +82,22 @@ def esc(s):
return str(s).replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
def write_svg(path, text):
"""Validate the finished SVG, then atomically swap it into place.
Readers never see partial output; an invalid render aborts without
touching the previous good file."""
try:
ET.fromstring(text)
except ET.ParseError as e:
print(f"[error] {path.name}: generated SVG invalid, keeping old file ({e})")
return False
tmp = path.with_name(path.name + ".tmp")
tmp.write_text(text)
os.replace(tmp, path)
return True
def svg_open(w, h, title):
return (f'<svg xmlns="http://www.w3.org/2000/svg" width="{w}" height="{h}" '
f'viewBox="0 0 {w} {h}" font-family="sans-serif">\n'
@@ -238,8 +256,8 @@ def graph_eval(series_v2, series_v1, out):
items_b.append((COLORS["Corners"], f"Run 3 trend (rolling-{TREND_WINDOW})"))
s += legend(items_b, x0 + 12, y1b + 14)
out.write_text(s)
return 1
s += "</svg>\n"
return 1 if write_svg(out, s) else 0
# ---------- graph 2: loss curves ----------
@@ -319,8 +337,7 @@ def graph_losses(rows, out):
fixed_range=(0, max(1.0, max(alpha))))
s += (f'<text x="{x0 + (x1 - x0) // 2}" y="{H - 8}" text-anchor="middle" '
f'font-size="12">metric line number ({n} rows)</text>\n</svg>\n')
out.write_text(s)
return 1
return 1 if write_svg(out, s) else 0
# ---------- selftest ----------
@@ -351,6 +368,8 @@ def selftest():
ok = graph_losses(rows, td / "g2.svg") and graph_eval(ser, {"Corners": [0, 10]}, td / "g1.svg")
assert ok and (td / "g1.svg").stat().st_size > 500
g1 = (td / "g1.svg").read_text()
ET.fromstring(g1) # whole doc must parse -> closing tag present
ET.fromstring((td / "g2.svg").read_text())
assert 'width="1200"' in g1, "canvas must be >=1200 wide"
assert g1.count("<circle") == sum(len(v) for v in ser.values()) # one dot per raw eval
n_trend = sum(1 for v in ser.values() if len(v) >= 2) + 2 # trends + v1 buckets + v3 trend
@@ -377,11 +396,17 @@ def main():
series_v1 = parse_eval_series(v1log)
print(f"[info] v1 evals parsed: " +
", ".join(f"{k}={len(v)}" for k, v in sorted(series_v1.items())) or "(none)")
made += graph_eval(series_v2, series_v1, outdir / "graph_eval_winrates.svg")
try:
made += graph_eval(series_v2, series_v1, outdir / "graph_eval_winrates.svg")
except Exception as e:
print(f"[error] win-rate graph failed (loss graph still attempted): {e}")
rows = parse_metrics(metrics)
print(f"[info] metric rows parsed: {len(rows)}")
made += graph_losses(rows, outdir / "graph_losses.svg")
try:
made += graph_losses(rows, outdir / "graph_losses.svg")
except Exception as e:
print(f"[error] loss graph failed: {e}")
if made:
print(f"[done] {made} graph(s) written to {outdir}")