From 8453ea7bbc197a8312a0f0c45776246552f72015 Mon Sep 17 00:00:00 2001 From: mmorge <maxime.morge@univ-lyon1.fr> Date: Mon, 31 Mar 2025 22:46:57 +0200 Subject: [PATCH] Ivestment XP with Pagoda --- .idea/PyGAAMAS.iml | 6 +- .idea/misc.xml | 2 +- data/investment/investment.csv | 116 + figures/investment/investment_violin.svg | 2741 +++++++++++++--------- src/investment/investment.py | 185 +- src/investment/investment_draw_violin.py | 25 +- src/investment/investment_experiments.py | 4 +- 7 files changed, 1887 insertions(+), 1192 deletions(-) diff --git a/.idea/PyGAAMAS.iml b/.idea/PyGAAMAS.iml index ec63674..7c20165 100644 --- a/.idea/PyGAAMAS.iml +++ b/.idea/PyGAAMAS.iml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <module version="4"> - <component name="PyDocumentationSettings"> - <option name="format" value="PLAIN" /> - <option name="myDocStringFormat" value="Plain" /> + <component name="NewModuleRootManager"> + <orderEntry type="jdk" jdkName="Python 3.13" jdkType="Python SDK" /> + <orderEntry type="sourceFolder" forTests="false" /> </component> </module> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index db8786c..977706b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ <component name="Black"> <option name="sdkName" value="Python 3.12" /> </component> - <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12" project-jdk-type="Python SDK" /> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" /> </project> \ No newline at end of file diff --git a/data/investment/investment.csv b/data/investment/investment.csv index c7d1789..99035a3 100644 --- a/data/investment/investment.csv +++ b/data/investment/investment.csv @@ -119,3 +119,119 @@ iteration,model,temperature,ccei 28,deepseek-r1,0.0,0.1870967741935484 29,deepseek-r1,0.0,0.2575 30,deepseek-r1,0.0,0.1514285714285714 +1,mixtral:8x7b,0.0,0.8152173913043478 +2,mixtral:8x7b,0.0,0.8418604651162791 +3,mixtral:8x7b,0.0,0.8540540540540541 +4,mixtral:8x7b,0.0,0.875 +5,mixtral:8x7b,0.0,0.8085106382978723 +6,mixtral:8x7b,0.0,0.8444444444444444 +7,mixtral:8x7b,0.0,0.9032258064516129 +8,mixtral:8x7b,0.0,0.8298319327731092 +9,mixtral:8x7b,0.0,0.8333333333333334 +10,mixtral:8x7b,0.0,0.875 +11,mixtral:8x7b,0.0,0.8260869565217391 +12,mixtral:8x7b,0.0,0.82 +13,mixtral:8x7b,0.0,0.8636363636363636 +14,mixtral:8x7b,0.0,0.8333333333333334 +15,mixtral:8x7b,0.0,0.8444444444444444 +16,mixtral:8x7b,0.0,0.8636363636363636 +17,mixtral:8x7b,0.0,0.82 +18,mixtral:8x7b,0.0,0.82 +19,mixtral:8x7b,0.0,0.8787878787878788 +20,mixtral:8x7b,0.0,0.8285714285714286 +21,mixtral:8x7b,0.0,0.8085106382978723 +22,mixtral:8x7b,0.0,0.8787878787878788 +23,mixtral:8x7b,0.0,0.8785714285714286 +24,mixtral:8x7b,0.0,0.7894736842105263 +25,mixtral:8x7b,0.0,0.8421052631578947 +1,llama3.3:latest,0.0,1.0 +2,llama3.3:latest,0.0,1.0 +3,llama3.3:latest,0.0,1.0 +4,llama3.3:latest,0.0,1.0 +5,llama3.3:latest,0.0,1.0 +6,llama3.3:latest,0.0,1.0 +7,llama3.3:latest,0.0,1.0 +8,llama3.3:latest,0.0,1.0 +9,llama3.3:latest,0.0,1.0 +10,llama3.3:latest,0.0,1.0 +11,llama3.3:latest,0.0,1.0 +12,llama3.3:latest,0.0,1.0 +13,llama3.3:latest,0.0,1.0 +14,llama3.3:latest,0.0,1.0 +15,llama3.3:latest,0.0,1.0 +16,llama3.3:latest,0.0,1.0 +17,llama3.3:latest,0.0,1.0 +18,llama3.3:latest,0.0,1.0 +19,llama3.3:latest,0.0,1.0 +20,llama3.3:latest,0.0,1.0 +21,llama3.3:latest,0.0,1.0 +22,llama3.3:latest,0.0,1.0 +23,llama3.3:latest,0.0,1.0 +24,llama3.3:latest,0.0,1.0 +25,llama3.3:latest,0.0,1.0 +26,llama3.3:latest,0.0,1.0 +27,llama3.3:latest,0.0,1.0 +28,llama3.3:latest,0.0,1.0 +29,llama3.3:latest,0.0,1.0 +30,llama3.3:latest,0.0,1.0 +1,deepseek-r1:7b,0.0,1.0 +2,deepseek-r1:7b,0.0,1.0 +3,deepseek-r1:7b,0.0,1.0 +4,deepseek-r1:7b,0.0,1.0 +5,deepseek-r1:7b,0.0,1.0 +6,deepseek-r1:7b,0.0,1.0 +7,deepseek-r1:7b,0.0,1.0 +8,deepseek-r1:7b,0.0,1.0 +9,deepseek-r1:7b,0.0,1.0 +10,deepseek-r1:7b,0.0,1.0 +11,deepseek-r1:7b,0.0,1.0 +12,deepseek-r1:7b,0.0,1.0 +13,deepseek-r1:7b,0.0,1.0 +14,deepseek-r1:7b,0.0,1.0 +15,deepseek-r1:7b,0.0,1.0 +16,deepseek-r1:7b,0.0,1.0 +17,deepseek-r1:7b,0.0,1.0 +18,deepseek-r1:7b,0.0,1.0 +19,deepseek-r1:7b,0.0,1.0 +20,deepseek-r1:7b,0.0,1.0 +21,deepseek-r1:7b,0.0,1.0 +22,deepseek-r1:7b,0.0,1.0 +23,deepseek-r1:7b,0.0,1.0 +24,deepseek-r1:7b,0.0,1.0 +25,deepseek-r1:7b,0.0,1.0 +26,deepseek-r1:7b,0.0,1.0 +27,deepseek-r1:7b,0.0,1.0 +28,deepseek-r1:7b,0.0,1.0 +29,deepseek-r1:7b,0.0,1.0 +30,deepseek-r1:7b,0.0,1.0 +1,gpt-4.5-preview-2025-02-27,0.0,1.0 +2,gpt-4.5-preview-2025-02-27,0.0,1.0 +3,gpt-4.5-preview-2025-02-27,0.0,1.0 +4,gpt-4.5-preview-2025-02-27,0.0,1.0 +5,gpt-4.5-preview-2025-02-27,0.0,1.0 +6,gpt-4.5-preview-2025-02-27,0.0,1.0 +7,gpt-4.5-preview-2025-02-27,0.0,1.0 +8,gpt-4.5-preview-2025-02-27,0.0,1.0 +9,gpt-4.5-preview-2025-02-27,0.0,1.0 +10,gpt-4.5-preview-2025-02-27,0.0,1.0 +11,gpt-4.5-preview-2025-02-27,0.0,1.0 +12,gpt-4.5-preview-2025-02-27,0.0,1.0 +13,gpt-4.5-preview-2025-02-27,0.0,1.0 +14,gpt-4.5-preview-2025-02-27,0.0,1.0 +15,gpt-4.5-preview-2025-02-27,0.0,1.0 +16,gpt-4.5-preview-2025-02-27,0.0,1.0 +17,gpt-4.5-preview-2025-02-27,0.0,1.0 +18,gpt-4.5-preview-2025-02-27,0.0,1.0 +19,gpt-4.5-preview-2025-02-27,0.0,1.0 +20,gpt-4.5-preview-2025-02-27,0.0,1.0 +21,gpt-4.5-preview-2025-02-27,0.0,1.0 +22,gpt-4.5-preview-2025-02-27,0.0,1.0 +23,gpt-4.5-preview-2025-02-27,0.0,1.0 +24,gpt-4.5-preview-2025-02-27,0.0,1.0 +25,gpt-4.5-preview-2025-02-27,0.0,1.0 +26,gpt-4.5-preview-2025-02-27,0.0,1.0 +27,gpt-4.5-preview-2025-02-27,0.0,1.0 +28,gpt-4.5-preview-2025-02-27,0.0,1.0 +29,gpt-4.5-preview-2025-02-27,0.0,1.0 +30,gpt-4.5-preview-2025-02-27,0.0,1.0 + diff --git a/figures/investment/investment_violin.svg b/figures/investment/investment_violin.svg index 44d5264..052091a 100644 --- a/figures/investment/investment_violin.svg +++ b/figures/investment/investment_violin.svg @@ -6,11 +6,11 @@ <rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cc:Work> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> - <dc:date>2025-03-26T17:38:14.450542</dc:date> + <dc:date>2025-03-31T18:45:53.412689</dc:date> <dc:format>image/svg+xml</dc:format> <dc:creator> <cc:Agent> - <dc:title>Matplotlib v3.10.0, https://matplotlib.org/</dc:title> + <dc:title>Matplotlib v3.10.1, https://matplotlib.org/</dc:title> </cc:Agent> </dc:creator> </cc:Work> @@ -41,7 +41,7 @@ z <g id="xtick_1"> <g id="text_1"> <!-- random --> - <g style="fill: #262626" transform="translate(143.200409 414.133865) rotate(-20) scale(0.11 -0.11)"> + <g style="fill: #262626" transform="translate(108.325409 414.133865) rotate(-20) scale(0.11 -0.11)"> <defs> <path id="ArialMT-72" d="M 416 0 L 416 3319 @@ -214,8 +214,321 @@ z </g> <g id="xtick_2"> <g id="text_2"> + <!-- gpt-4.5-preview-2025-02-27 --> + <g style="fill: #262626" transform="translate(131.808233 447.83232) rotate(-20) scale(0.11 -0.11)"> + <defs> + <path id="ArialMT-67" d="M 319 -275 +L 866 -356 +Q 900 -609 1056 -725 +Q 1266 -881 1628 -881 +Q 2019 -881 2231 -725 +Q 2444 -569 2519 -288 +Q 2563 -116 2559 434 +Q 2191 0 1641 0 +Q 956 0 581 494 +Q 206 988 206 1678 +Q 206 2153 378 2554 +Q 550 2956 876 3175 +Q 1203 3394 1644 3394 +Q 2231 3394 2613 2919 +L 2613 3319 +L 3131 3319 +L 3131 450 +Q 3131 -325 2973 -648 +Q 2816 -972 2473 -1159 +Q 2131 -1347 1631 -1347 +Q 1038 -1347 672 -1080 +Q 306 -813 319 -275 +z +M 784 1719 +Q 784 1066 1043 766 +Q 1303 466 1694 466 +Q 2081 466 2343 764 +Q 2606 1063 2606 1700 +Q 2606 2309 2336 2618 +Q 2066 2928 1684 2928 +Q 1309 2928 1046 2623 +Q 784 2319 784 1719 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-70" d="M 422 -1272 +L 422 3319 +L 934 3319 +L 934 2888 +Q 1116 3141 1344 3267 +Q 1572 3394 1897 3394 +Q 2322 3394 2647 3175 +Q 2972 2956 3137 2557 +Q 3303 2159 3303 1684 +Q 3303 1175 3120 767 +Q 2938 359 2589 142 +Q 2241 -75 1856 -75 +Q 1575 -75 1351 44 +Q 1128 163 984 344 +L 984 -1272 +L 422 -1272 +z +M 931 1641 +Q 931 1000 1190 694 +Q 1450 388 1819 388 +Q 2194 388 2461 705 +Q 2728 1022 2728 1688 +Q 2728 2322 2467 2637 +Q 2206 2953 1844 2953 +Q 1484 2953 1207 2617 +Q 931 2281 931 1641 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-74" d="M 1650 503 +L 1731 6 +Q 1494 -44 1306 -44 +Q 1000 -44 831 53 +Q 663 150 594 308 +Q 525 466 525 972 +L 525 2881 +L 113 2881 +L 113 3319 +L 525 3319 +L 525 4141 +L 1084 4478 +L 1084 3319 +L 1650 3319 +L 1650 2881 +L 1084 2881 +L 1084 941 +Q 1084 700 1114 631 +Q 1144 563 1211 522 +Q 1278 481 1403 481 +Q 1497 481 1650 503 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-2d" d="M 203 1375 +L 203 1941 +L 1931 1941 +L 1931 1375 +L 203 1375 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-34" d="M 2069 0 +L 2069 1097 +L 81 1097 +L 81 1613 +L 2172 4581 +L 2631 4581 +L 2631 1613 +L 3250 1613 +L 3250 1097 +L 2631 1097 +L 2631 0 +L 2069 0 +z +M 2069 1613 +L 2069 3678 +L 634 1613 +L 2069 1613 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-2e" d="M 581 0 +L 581 641 +L 1222 641 +L 1222 0 +L 581 0 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-35" d="M 266 1200 +L 856 1250 +Q 922 819 1161 601 +Q 1400 384 1738 384 +Q 2144 384 2425 690 +Q 2706 997 2706 1503 +Q 2706 1984 2436 2262 +Q 2166 2541 1728 2541 +Q 1456 2541 1237 2417 +Q 1019 2294 894 2097 +L 366 2166 +L 809 4519 +L 3088 4519 +L 3088 3981 +L 1259 3981 +L 1013 2750 +Q 1425 3038 1878 3038 +Q 2478 3038 2890 2622 +Q 3303 2206 3303 1553 +Q 3303 931 2941 478 +Q 2500 -78 1738 -78 +Q 1113 -78 717 272 +Q 322 622 266 1200 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-65" d="M 2694 1069 +L 3275 997 +Q 3138 488 2766 206 +Q 2394 -75 1816 -75 +Q 1088 -75 661 373 +Q 234 822 234 1631 +Q 234 2469 665 2931 +Q 1097 3394 1784 3394 +Q 2450 3394 2872 2941 +Q 3294 2488 3294 1666 +Q 3294 1616 3291 1516 +L 816 1516 +Q 847 969 1125 678 +Q 1403 388 1819 388 +Q 2128 388 2347 550 +Q 2566 713 2694 1069 +z +M 847 1978 +L 2700 1978 +Q 2663 2397 2488 2606 +Q 2219 2931 1791 2931 +Q 1403 2931 1139 2672 +Q 875 2413 847 1978 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-76" d="M 1344 0 +L 81 3319 +L 675 3319 +L 1388 1331 +Q 1503 1009 1600 663 +Q 1675 925 1809 1294 +L 2547 3319 +L 3125 3319 +L 1869 0 +L 1344 0 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-69" d="M 425 3934 +L 425 4581 +L 988 4581 +L 988 3934 +L 425 3934 +z +M 425 0 +L 425 3319 +L 988 3319 +L 988 0 +L 425 0 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-77" d="M 1034 0 +L 19 3319 +L 600 3319 +L 1128 1403 +L 1325 691 +Q 1338 744 1497 1375 +L 2025 3319 +L 2603 3319 +L 3100 1394 +L 3266 759 +L 3456 1400 +L 4025 3319 +L 4572 3319 +L 3534 0 +L 2950 0 +L 2422 1988 +L 2294 2553 +L 1622 0 +L 1034 0 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-32" d="M 3222 541 +L 3222 0 +L 194 0 +Q 188 203 259 391 +Q 375 700 629 1000 +Q 884 1300 1366 1694 +Q 2113 2306 2375 2664 +Q 2638 3022 2638 3341 +Q 2638 3675 2398 3904 +Q 2159 4134 1775 4134 +Q 1369 4134 1125 3890 +Q 881 3647 878 3216 +L 300 3275 +Q 359 3922 746 4261 +Q 1134 4600 1788 4600 +Q 2447 4600 2831 4234 +Q 3216 3869 3216 3328 +Q 3216 3053 3103 2787 +Q 2991 2522 2730 2228 +Q 2469 1934 1863 1422 +Q 1356 997 1212 845 +Q 1069 694 975 541 +L 3222 541 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-30" d="M 266 2259 +Q 266 3072 433 3567 +Q 600 4063 929 4331 +Q 1259 4600 1759 4600 +Q 2128 4600 2406 4451 +Q 2684 4303 2865 4023 +Q 3047 3744 3150 3342 +Q 3253 2941 3253 2259 +Q 3253 1453 3087 958 +Q 2922 463 2592 192 +Q 2263 -78 1759 -78 +Q 1097 -78 719 397 +Q 266 969 266 2259 +z +M 844 2259 +Q 844 1131 1108 757 +Q 1372 384 1759 384 +Q 2147 384 2411 759 +Q 2675 1134 2675 2259 +Q 2675 3391 2411 3762 +Q 2147 4134 1753 4134 +Q 1366 4134 1134 3806 +Q 844 3388 844 2259 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-37" d="M 303 3981 +L 303 4522 +L 3269 4522 +L 3269 4084 +Q 2831 3619 2401 2847 +Q 1972 2075 1738 1259 +Q 1569 684 1522 0 +L 944 0 +Q 953 541 1156 1306 +Q 1359 2072 1739 2783 +Q 2119 3494 2547 3981 +L 303 3981 +z +" transform="scale(0.015625)"/> + </defs> + <use xlink:href="#ArialMT-67"/> + <use xlink:href="#ArialMT-70" transform="translate(55.615234 0)"/> + <use xlink:href="#ArialMT-74" transform="translate(111.230469 0)"/> + <use xlink:href="#ArialMT-2d" transform="translate(139.013672 0)"/> + <use xlink:href="#ArialMT-34" transform="translate(172.314453 0)"/> + <use xlink:href="#ArialMT-2e" transform="translate(227.929688 0)"/> + <use xlink:href="#ArialMT-35" transform="translate(255.712891 0)"/> + <use xlink:href="#ArialMT-2d" transform="translate(311.328125 0)"/> + <use xlink:href="#ArialMT-70" transform="translate(344.628906 0)"/> + <use xlink:href="#ArialMT-72" transform="translate(400.244141 0)"/> + <use xlink:href="#ArialMT-65" transform="translate(433.544922 0)"/> + <use xlink:href="#ArialMT-76" transform="translate(489.160156 0)"/> + <use xlink:href="#ArialMT-69" transform="translate(539.160156 0)"/> + <use xlink:href="#ArialMT-65" transform="translate(561.376953 0)"/> + <use xlink:href="#ArialMT-77" transform="translate(616.992188 0)"/> + <use xlink:href="#ArialMT-2d" transform="translate(689.208984 0)"/> + <use xlink:href="#ArialMT-32" transform="translate(722.509766 0)"/> + <use xlink:href="#ArialMT-30" transform="translate(778.125 0)"/> + <use xlink:href="#ArialMT-32" transform="translate(833.740234 0)"/> + <use xlink:href="#ArialMT-35" transform="translate(889.355469 0)"/> + <use xlink:href="#ArialMT-2d" transform="translate(944.970703 0)"/> + <use xlink:href="#ArialMT-30" transform="translate(978.271484 0)"/> + <use xlink:href="#ArialMT-32" transform="translate(1033.886719 0)"/> + <use xlink:href="#ArialMT-2d" transform="translate(1089.501953 0)"/> + <use xlink:href="#ArialMT-32" transform="translate(1122.802734 0)"/> + <use xlink:href="#ArialMT-37" transform="translate(1178.417969 0)"/> + </g> + </g> + </g> + <g id="xtick_3"> + <g id="text_3"> <!-- llama3 --> - <g style="fill: #262626" transform="translate(284.998692 412.460852) rotate(-20) scale(0.11 -0.11)"> + <g style="fill: #262626" transform="translate(250.123692 412.460852) rotate(-20) scale(0.11 -0.11)"> <defs> <path id="ArialMT-6c" d="M 409 0 L 409 4581 @@ -267,22 +580,22 @@ z </g> </g> </g> - <g id="xtick_3"> - <g id="text_3"> - <!-- mistral-small --> - <g style="fill: #262626" transform="translate(410.725147 422.487172) rotate(-20) scale(0.11 -0.11)"> + <g id="xtick_4"> + <g id="text_4"> + <!-- llama3.3:latest --> + <g style="fill: #262626" transform="translate(301.775726 425.635094) rotate(-20) scale(0.11 -0.11)"> <defs> - <path id="ArialMT-69" d="M 425 3934 -L 425 4581 -L 988 4581 -L 988 3934 -L 425 3934 + <path id="ArialMT-3a" d="M 578 2678 +L 578 3319 +L 1219 3319 +L 1219 2678 +L 578 2678 z -M 425 0 -L 425 3319 -L 988 3319 -L 988 0 -L 425 0 +M 578 0 +L 578 641 +L 1219 641 +L 1219 0 +L 578 0 z " transform="scale(0.015625)"/> <path id="ArialMT-73" d="M 197 991 @@ -321,111 +634,155 @@ Q 969 -75 630 194 Q 291 463 197 991 z " transform="scale(0.015625)"/> - <path id="ArialMT-74" d="M 1650 503 -L 1731 6 -Q 1494 -44 1306 -44 -Q 1000 -44 831 53 -Q 663 150 594 308 -Q 525 466 525 972 -L 525 2881 -L 113 2881 -L 113 3319 -L 525 3319 -L 525 4141 -L 1084 4478 -L 1084 3319 -L 1650 3319 -L 1650 2881 -L 1084 2881 -L 1084 941 -Q 1084 700 1114 631 -Q 1144 563 1211 522 -Q 1278 481 1403 481 -Q 1497 481 1650 503 + </defs> + <use xlink:href="#ArialMT-6c"/> + <use xlink:href="#ArialMT-6c" transform="translate(22.216797 0)"/> + <use xlink:href="#ArialMT-61" transform="translate(44.433594 0)"/> + <use xlink:href="#ArialMT-6d" transform="translate(100.048828 0)"/> + <use xlink:href="#ArialMT-61" transform="translate(183.349609 0)"/> + <use xlink:href="#ArialMT-33" transform="translate(238.964844 0)"/> + <use xlink:href="#ArialMT-2e" transform="translate(294.580078 0)"/> + <use xlink:href="#ArialMT-33" transform="translate(322.363281 0)"/> + <use xlink:href="#ArialMT-3a" transform="translate(377.978516 0)"/> + <use xlink:href="#ArialMT-6c" transform="translate(405.761719 0)"/> + <use xlink:href="#ArialMT-61" transform="translate(427.978516 0)"/> + <use xlink:href="#ArialMT-74" transform="translate(483.59375 0)"/> + <use xlink:href="#ArialMT-65" transform="translate(511.376953 0)"/> + <use xlink:href="#ArialMT-73" transform="translate(566.992188 0)"/> + <use xlink:href="#ArialMT-74" transform="translate(616.992188 0)"/> + </g> + </g> + </g> + <g id="xtick_5"> + <g id="text_5"> + <!-- mistral-small --> + <g style="fill: #262626" transform="translate(375.850147 422.487172) rotate(-20) scale(0.11 -0.11)"> + <use xlink:href="#ArialMT-6d"/> + <use xlink:href="#ArialMT-69" transform="translate(83.300781 0)"/> + <use xlink:href="#ArialMT-73" transform="translate(105.517578 0)"/> + <use xlink:href="#ArialMT-74" transform="translate(155.517578 0)"/> + <use xlink:href="#ArialMT-72" transform="translate(183.300781 0)"/> + <use xlink:href="#ArialMT-61" transform="translate(216.601562 0)"/> + <use xlink:href="#ArialMT-6c" transform="translate(272.216797 0)"/> + <use xlink:href="#ArialMT-2d" transform="translate(294.433594 0)"/> + <use xlink:href="#ArialMT-73" transform="translate(327.734375 0)"/> + <use xlink:href="#ArialMT-6d" transform="translate(377.734375 0)"/> + <use xlink:href="#ArialMT-61" transform="translate(461.035156 0)"/> + <use xlink:href="#ArialMT-6c" transform="translate(516.650391 0)"/> + <use xlink:href="#ArialMT-6c" transform="translate(538.867188 0)"/> + </g> + </g> + </g> + <g id="xtick_6"> + <g id="text_6"> + <!-- mixtral:8x7b --> + <g style="fill: #262626" transform="translate(446.73879 421.658308) rotate(-20) scale(0.11 -0.11)"> + <defs> + <path id="ArialMT-78" d="M 47 0 +L 1259 1725 +L 138 3319 +L 841 3319 +L 1350 2541 +Q 1494 2319 1581 2169 +Q 1719 2375 1834 2534 +L 2394 3319 +L 3066 3319 +L 1919 1756 +L 3153 0 +L 2463 0 +L 1781 1031 +L 1600 1309 +L 728 0 +L 47 0 z " transform="scale(0.015625)"/> - <path id="ArialMT-2d" d="M 203 1375 -L 203 1941 -L 1931 1941 -L 1931 1375 -L 203 1375 + <path id="ArialMT-38" d="M 1131 2484 +Q 781 2613 612 2850 +Q 444 3088 444 3419 +Q 444 3919 803 4259 +Q 1163 4600 1759 4600 +Q 2359 4600 2725 4251 +Q 3091 3903 3091 3403 +Q 3091 3084 2923 2848 +Q 2756 2613 2416 2484 +Q 2838 2347 3058 2040 +Q 3278 1734 3278 1309 +Q 3278 722 2862 322 +Q 2447 -78 1769 -78 +Q 1091 -78 675 323 +Q 259 725 259 1325 +Q 259 1772 486 2073 +Q 713 2375 1131 2484 +z +M 1019 3438 +Q 1019 3113 1228 2906 +Q 1438 2700 1772 2700 +Q 2097 2700 2305 2904 +Q 2513 3109 2513 3406 +Q 2513 3716 2298 3927 +Q 2084 4138 1766 4138 +Q 1444 4138 1231 3931 +Q 1019 3725 1019 3438 +z +M 838 1322 +Q 838 1081 952 856 +Q 1066 631 1291 507 +Q 1516 384 1775 384 +Q 2178 384 2440 643 +Q 2703 903 2703 1303 +Q 2703 1709 2433 1975 +Q 2163 2241 1756 2241 +Q 1359 2241 1098 1978 +Q 838 1716 838 1322 +z +" transform="scale(0.015625)"/> + <path id="ArialMT-62" d="M 941 0 +L 419 0 +L 419 4581 +L 981 4581 +L 981 2947 +Q 1338 3394 1891 3394 +Q 2197 3394 2470 3270 +Q 2744 3147 2920 2923 +Q 3097 2700 3197 2384 +Q 3297 2069 3297 1709 +Q 3297 856 2875 390 +Q 2453 -75 1863 -75 +Q 1275 -75 941 416 +L 941 0 +z +M 934 1684 +Q 934 1088 1097 822 +Q 1363 388 1816 388 +Q 2184 388 2453 708 +Q 2722 1028 2722 1663 +Q 2722 2313 2464 2622 +Q 2206 2931 1841 2931 +Q 1472 2931 1203 2611 +Q 934 2291 934 1684 z " transform="scale(0.015625)"/> </defs> <use xlink:href="#ArialMT-6d"/> <use xlink:href="#ArialMT-69" transform="translate(83.300781 0)"/> - <use xlink:href="#ArialMT-73" transform="translate(105.517578 0)"/> + <use xlink:href="#ArialMT-78" transform="translate(105.517578 0)"/> <use xlink:href="#ArialMT-74" transform="translate(155.517578 0)"/> <use xlink:href="#ArialMT-72" transform="translate(183.300781 0)"/> <use xlink:href="#ArialMT-61" transform="translate(216.601562 0)"/> <use xlink:href="#ArialMT-6c" transform="translate(272.216797 0)"/> - <use xlink:href="#ArialMT-2d" transform="translate(294.433594 0)"/> - <use xlink:href="#ArialMT-73" transform="translate(327.734375 0)"/> - <use xlink:href="#ArialMT-6d" transform="translate(377.734375 0)"/> - <use xlink:href="#ArialMT-61" transform="translate(461.035156 0)"/> - <use xlink:href="#ArialMT-6c" transform="translate(516.650391 0)"/> - <use xlink:href="#ArialMT-6c" transform="translate(538.867188 0)"/> + <use xlink:href="#ArialMT-3a" transform="translate(294.433594 0)"/> + <use xlink:href="#ArialMT-38" transform="translate(322.216797 0)"/> + <use xlink:href="#ArialMT-78" transform="translate(377.832031 0)"/> + <use xlink:href="#ArialMT-37" transform="translate(427.832031 0)"/> + <use xlink:href="#ArialMT-62" transform="translate(483.447266 0)"/> </g> </g> </g> - <g id="xtick_4"> - <g id="text_4"> + <g id="xtick_7"> + <g id="text_7"> <!-- deepseek-r1 --> - <g style="fill: #262626" transform="translate(550.499645 422.322106) rotate(-20) scale(0.11 -0.11)"> + <g style="fill: #262626" transform="translate(515.624645 422.322106) rotate(-20) scale(0.11 -0.11)"> <defs> - <path id="ArialMT-65" d="M 2694 1069 -L 3275 997 -Q 3138 488 2766 206 -Q 2394 -75 1816 -75 -Q 1088 -75 661 373 -Q 234 822 234 1631 -Q 234 2469 665 2931 -Q 1097 3394 1784 3394 -Q 2450 3394 2872 2941 -Q 3294 2488 3294 1666 -Q 3294 1616 3291 1516 -L 816 1516 -Q 847 969 1125 678 -Q 1403 388 1819 388 -Q 2128 388 2347 550 -Q 2566 713 2694 1069 -z -M 847 1978 -L 2700 1978 -Q 2663 2397 2488 2606 -Q 2219 2931 1791 2931 -Q 1403 2931 1139 2672 -Q 875 2413 847 1978 -z -" transform="scale(0.015625)"/> - <path id="ArialMT-70" d="M 422 -1272 -L 422 3319 -L 934 3319 -L 934 2888 -Q 1116 3141 1344 3267 -Q 1572 3394 1897 3394 -Q 2322 3394 2647 3175 -Q 2972 2956 3137 2557 -Q 3303 2159 3303 1684 -Q 3303 1175 3120 767 -Q 2938 359 2589 142 -Q 2241 -75 1856 -75 -Q 1575 -75 1351 44 -Q 1128 163 984 344 -L 984 -1272 -L 422 -1272 -z -M 931 1641 -Q 931 1000 1190 694 -Q 1450 388 1819 388 -Q 2194 388 2461 705 -Q 2728 1022 2728 1688 -Q 2728 2322 2467 2637 -Q 2206 2953 1844 2953 -Q 1484 2953 1207 2617 -Q 931 2281 931 1641 -z -" transform="scale(0.015625)"/> <path id="ArialMT-6b" d="M 425 0 L 425 4581 L 988 4581 @@ -468,9 +825,30 @@ z </g> </g> </g> - <g id="text_5"> + <g id="xtick_8"> + <g id="text_8"> + <!-- deepseek-r1:7b --> + <g style="fill: #262626" transform="translate(578.190695 427.551594) rotate(-20) scale(0.11 -0.11)"> + <use xlink:href="#ArialMT-64"/> + <use xlink:href="#ArialMT-65" transform="translate(55.615234 0)"/> + <use xlink:href="#ArialMT-65" transform="translate(111.230469 0)"/> + <use xlink:href="#ArialMT-70" transform="translate(166.845703 0)"/> + <use xlink:href="#ArialMT-73" transform="translate(222.460938 0)"/> + <use xlink:href="#ArialMT-65" transform="translate(272.460938 0)"/> + <use xlink:href="#ArialMT-65" transform="translate(328.076172 0)"/> + <use xlink:href="#ArialMT-6b" transform="translate(383.691406 0)"/> + <use xlink:href="#ArialMT-2d" transform="translate(433.691406 0)"/> + <use xlink:href="#ArialMT-72" transform="translate(466.992188 0)"/> + <use xlink:href="#ArialMT-31" transform="translate(500.292969 0)"/> + <use xlink:href="#ArialMT-3a" transform="translate(555.908203 0)"/> + <use xlink:href="#ArialMT-37" transform="translate(583.691406 0)"/> + <use xlink:href="#ArialMT-62" transform="translate(639.306641 0)"/> + </g> + </g> + </g> + <g id="text_9"> <!-- Model --> - <g style="fill: #262626" transform="translate(352.659375 437.13095) scale(0.12 -0.12)"> + <g style="fill: #262626" transform="translate(352.659375 462.59723) scale(0.12 -0.12)"> <defs> <path id="ArialMT-4d" d="M 475 0 L 475 4581 @@ -504,45 +882,11 @@ z <g id="line2d_1"> <path d="M 90 359.165402 L 648 359.165402 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> </g> - <g id="text_6"> + <g id="text_10"> <!-- 0.0 --> <g style="fill: #262626" transform="translate(65.21 363.102199) scale(0.11 -0.11)"> - <defs> - <path id="ArialMT-30" d="M 266 2259 -Q 266 3072 433 3567 -Q 600 4063 929 4331 -Q 1259 4600 1759 4600 -Q 2128 4600 2406 4451 -Q 2684 4303 2865 4023 -Q 3047 3744 3150 3342 -Q 3253 2941 3253 2259 -Q 3253 1453 3087 958 -Q 2922 463 2592 192 -Q 2263 -78 1759 -78 -Q 1097 -78 719 397 -Q 266 969 266 2259 -z -M 844 2259 -Q 844 1131 1108 757 -Q 1372 384 1759 384 -Q 2147 384 2411 759 -Q 2675 1134 2675 2259 -Q 2675 3391 2411 3762 -Q 2147 4134 1753 4134 -Q 1366 4134 1134 3806 -Q 844 3388 844 2259 -z -" transform="scale(0.015625)"/> - <path id="ArialMT-2e" d="M 581 0 -L 581 641 -L 1222 641 -L 1222 0 -L 581 0 -z -" transform="scale(0.015625)"/> - </defs> <use xlink:href="#ArialMT-30"/> <use xlink:href="#ArialMT-2e" transform="translate(55.615234 0)"/> <use xlink:href="#ArialMT-30" transform="translate(83.398438 0)"/> @@ -553,38 +897,11 @@ z <g id="line2d_2"> <path d="M 90 308.075651 L 648 308.075651 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> </g> - <g id="text_7"> + <g id="text_11"> <!-- 0.2 --> <g style="fill: #262626" transform="translate(65.21 312.012448) scale(0.11 -0.11)"> - <defs> - <path id="ArialMT-32" d="M 3222 541 -L 3222 0 -L 194 0 -Q 188 203 259 391 -Q 375 700 629 1000 -Q 884 1300 1366 1694 -Q 2113 2306 2375 2664 -Q 2638 3022 2638 3341 -Q 2638 3675 2398 3904 -Q 2159 4134 1775 4134 -Q 1369 4134 1125 3890 -Q 881 3647 878 3216 -L 300 3275 -Q 359 3922 746 4261 -Q 1134 4600 1788 4600 -Q 2447 4600 2831 4234 -Q 3216 3869 3216 3328 -Q 3216 3053 3103 2787 -Q 2991 2522 2730 2228 -Q 2469 1934 1863 1422 -Q 1356 997 1212 845 -Q 1069 694 975 541 -L 3222 541 -z -" transform="scale(0.015625)"/> - </defs> <use xlink:href="#ArialMT-30"/> <use xlink:href="#ArialMT-2e" transform="translate(55.615234 0)"/> <use xlink:href="#ArialMT-32" transform="translate(83.398438 0)"/> @@ -595,32 +912,11 @@ z <g id="line2d_3"> <path d="M 90 256.985899 L 648 256.985899 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> </g> - <g id="text_8"> + <g id="text_12"> <!-- 0.4 --> <g style="fill: #262626" transform="translate(65.21 260.922696) scale(0.11 -0.11)"> - <defs> - <path id="ArialMT-34" d="M 2069 0 -L 2069 1097 -L 81 1097 -L 81 1613 -L 2172 4581 -L 2631 4581 -L 2631 1613 -L 3250 1613 -L 3250 1097 -L 2631 1097 -L 2631 0 -L 2069 0 -z -M 2069 1613 -L 2069 3678 -L 634 1613 -L 2069 1613 -z -" transform="scale(0.015625)"/> - </defs> <use xlink:href="#ArialMT-30"/> <use xlink:href="#ArialMT-2e" transform="translate(55.615234 0)"/> <use xlink:href="#ArialMT-34" transform="translate(83.398438 0)"/> @@ -631,9 +927,9 @@ z <g id="line2d_4"> <path d="M 90 205.896147 L 648 205.896147 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> </g> - <g id="text_9"> + <g id="text_13"> <!-- 0.6 --> <g style="fill: #262626" transform="translate(65.21 209.832944) scale(0.11 -0.11)"> <defs> @@ -681,53 +977,11 @@ z <g id="line2d_5"> <path d="M 90 154.806395 L 648 154.806395 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> </g> - <g id="text_10"> + <g id="text_14"> <!-- 0.8 --> <g style="fill: #262626" transform="translate(65.21 158.743192) scale(0.11 -0.11)"> - <defs> - <path id="ArialMT-38" d="M 1131 2484 -Q 781 2613 612 2850 -Q 444 3088 444 3419 -Q 444 3919 803 4259 -Q 1163 4600 1759 4600 -Q 2359 4600 2725 4251 -Q 3091 3903 3091 3403 -Q 3091 3084 2923 2848 -Q 2756 2613 2416 2484 -Q 2838 2347 3058 2040 -Q 3278 1734 3278 1309 -Q 3278 722 2862 322 -Q 2447 -78 1769 -78 -Q 1091 -78 675 323 -Q 259 725 259 1325 -Q 259 1772 486 2073 -Q 713 2375 1131 2484 -z -M 1019 3438 -Q 1019 3113 1228 2906 -Q 1438 2700 1772 2700 -Q 2097 2700 2305 2904 -Q 2513 3109 2513 3406 -Q 2513 3716 2298 3927 -Q 2084 4138 1766 4138 -Q 1444 4138 1231 3931 -Q 1019 3725 1019 3438 -z -M 838 1322 -Q 838 1081 952 856 -Q 1066 631 1291 507 -Q 1516 384 1775 384 -Q 2178 384 2440 643 -Q 2703 903 2703 1303 -Q 2703 1709 2433 1975 -Q 2163 2241 1756 2241 -Q 1359 2241 1098 1978 -Q 838 1716 838 1322 -z -" transform="scale(0.015625)"/> - </defs> <use xlink:href="#ArialMT-30"/> <use xlink:href="#ArialMT-2e" transform="translate(55.615234 0)"/> <use xlink:href="#ArialMT-38" transform="translate(83.398438 0)"/> @@ -738,9 +992,9 @@ z <g id="line2d_6"> <path d="M 90 103.716643 L 648 103.716643 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> </g> - <g id="text_11"> + <g id="text_15"> <!-- 1.0 --> <g style="fill: #262626" transform="translate(65.21 107.65344) scale(0.11 -0.11)"> <use xlink:href="#ArialMT-31"/> @@ -753,9 +1007,9 @@ L 648 103.716643 <g id="line2d_7"> <path d="M 90 52.626892 L 648 52.626892 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #cccccc; stroke-linecap: round"/> </g> - <g id="text_12"> + <g id="text_16"> <!-- 1.2 --> <g style="fill: #262626" transform="translate(65.21 56.563688) scale(0.11 -0.11)"> <use xlink:href="#ArialMT-31"/> @@ -764,7 +1018,7 @@ L 648 52.626892 </g> </g> </g> - <g id="text_13"> + <g id="text_17"> <!-- CCEI Value --> <g style="fill: #262626" transform="translate(58.825 249.064687) rotate(-90) scale(0.12 -0.12)"> <defs> @@ -866,921 +1120,1164 @@ z </g> <g id="FillBetweenPolyCollection_1"> <defs> - <path id="m8605bf3e91" d="M 160.387237 -88.962419 -L 159.112763 -88.962419 -L 158.920718 -90.372226 -L 158.681478 -91.782033 -L 158.386422 -93.19184 -L 158.026043 -94.601647 -L 157.589995 -96.011453 -L 157.067183 -97.42126 -L 156.4459 -98.831067 -L 155.714026 -100.240874 -L 154.859298 -101.650681 -L 153.869661 -103.060488 -L 152.733712 -104.470294 -L 151.441222 -105.880101 -L 149.983748 -107.289908 -L 148.355292 -108.699715 -L 146.552989 -110.109522 -L 144.577768 -111.519329 -L 142.434945 -112.929135 -L 140.134676 -114.338942 -L 137.692229 -115.748749 -L 135.128023 -117.158556 -L 132.467405 -118.568363 -L 129.740169 -119.978169 -L 126.979824 -121.387976 -L 124.222663 -122.797783 -L 121.506696 -124.20759 -L 118.870524 -125.617397 -L 116.352219 -127.027204 -L 113.988304 -128.43701 -L 111.812863 -129.846817 -L 109.856824 -131.256624 -L 108.147409 -132.666431 -L 106.707732 -134.076238 -L 105.556508 -135.486045 -L 104.707824 -136.895851 -L 104.170927 -138.305658 -L 103.95 -139.715465 -L 104.043935 -141.125272 -L 104.446098 -142.535079 -L 105.144153 -143.944886 -L 106.120002 -145.354692 -L 107.349901 -146.764499 -L 108.804835 -148.174306 -L 110.451176 -149.584113 -L 112.251651 -150.99392 -L 114.166591 -152.403727 -L 116.155401 -153.813533 -L 118.178147 -155.22334 -L 120.197153 -156.633147 -L 122.178464 -158.042954 -L 124.093068 -159.452761 -L 125.91776 -160.862568 -L 127.635593 -162.272374 -L 129.235885 -163.682181 -L 130.713811 -165.091988 -L 132.069637 -166.501795 -L 133.307693 -167.911602 -L 134.435213 -169.321409 -L 135.461153 -170.731215 -L 136.395125 -172.141022 -L 137.246517 -173.550829 -L 138.023893 -174.960636 -L 138.734676 -176.370443 -L 139.38513 -177.780249 -L 139.980579 -179.190056 -L 140.525806 -180.599863 -L 141.025554 -182.00967 -L 141.485021 -183.419477 -L 141.910294 -184.829284 -L 142.308628 -186.23909 -L 142.688547 -187.648897 -L 143.059741 -189.058704 -L 143.432761 -190.468511 -L 143.81855 -191.878318 -L 144.227854 -193.288125 -L 144.670578 -194.697931 -L 145.155144 -196.107738 -L 145.687917 -197.517545 -L 146.272754 -198.927352 -L 146.910705 -200.337159 -L 147.599907 -201.746966 -L 148.335657 -203.156772 -L 149.110676 -204.566579 -L 149.915518 -205.976386 -L 150.739114 -207.386193 -L 151.56938 -208.796 -L 152.393867 -210.205807 -L 153.200396 -211.615613 -L 153.977634 -213.02542 -L 154.715583 -214.435227 -L 155.40595 -215.845034 -L 156.042395 -217.254841 -L 156.620637 -218.664648 -L 157.138439 -220.074454 -L 157.59548 -221.484261 -L 157.993142 -222.894068 -L 158.334226 -224.303875 -L 158.622643 -225.713682 -L 158.863081 -227.123489 -L 159.0607 -228.533295 -L 160.4393 -228.533295 -L 160.4393 -228.533295 -L 160.636919 -227.123489 -L 160.877357 -225.713682 -L 161.165774 -224.303875 -L 161.506858 -222.894068 -L 161.90452 -221.484261 -L 162.361561 -220.074454 -L 162.879363 -218.664648 -L 163.457605 -217.254841 -L 164.09405 -215.845034 -L 164.784417 -214.435227 -L 165.522366 -213.02542 -L 166.299604 -211.615613 -L 167.106133 -210.205807 -L 167.93062 -208.796 -L 168.760886 -207.386193 -L 169.584482 -205.976386 -L 170.389324 -204.566579 -L 171.164343 -203.156772 -L 171.900093 -201.746966 -L 172.589295 -200.337159 -L 173.227246 -198.927352 -L 173.812083 -197.517545 -L 174.344856 -196.107738 -L 174.829422 -194.697931 -L 175.272146 -193.288125 -L 175.68145 -191.878318 -L 176.067239 -190.468511 -L 176.440259 -189.058704 -L 176.811453 -187.648897 -L 177.191372 -186.23909 -L 177.589706 -184.829284 -L 178.014979 -183.419477 -L 178.474446 -182.00967 -L 178.974194 -180.599863 -L 179.519421 -179.190056 -L 180.11487 -177.780249 -L 180.765324 -176.370443 -L 181.476107 -174.960636 -L 182.253483 -173.550829 -L 183.104875 -172.141022 -L 184.038847 -170.731215 -L 185.064787 -169.321409 -L 186.192307 -167.911602 -L 187.430363 -166.501795 -L 188.786189 -165.091988 -L 190.264115 -163.682181 -L 191.864407 -162.272374 -L 193.58224 -160.862568 -L 195.406932 -159.452761 -L 197.321536 -158.042954 -L 199.302847 -156.633147 -L 201.321853 -155.22334 -L 203.344599 -153.813533 -L 205.333409 -152.403727 -L 207.248349 -150.99392 -L 209.048824 -149.584113 -L 210.695165 -148.174306 -L 212.150099 -146.764499 -L 213.379998 -145.354692 -L 214.355847 -143.944886 -L 215.053902 -142.535079 -L 215.456065 -141.125272 -L 215.55 -139.715465 -L 215.329073 -138.305658 -L 214.792176 -136.895851 -L 213.943492 -135.486045 -L 212.792268 -134.076238 -L 211.352591 -132.666431 -L 209.643176 -131.256624 -L 207.687137 -129.846817 -L 205.511696 -128.43701 -L 203.147781 -127.027204 -L 200.629476 -125.617397 -L 197.993304 -124.20759 -L 195.277337 -122.797783 -L 192.520176 -121.387976 -L 189.759831 -119.978169 -L 187.032595 -118.568363 -L 184.371977 -117.158556 -L 181.807771 -115.748749 -L 179.365324 -114.338942 -L 177.065055 -112.929135 -L 174.922232 -111.519329 -L 172.947011 -110.109522 -L 171.144708 -108.699715 -L 169.516252 -107.289908 -L 168.058778 -105.880101 -L 166.766288 -104.470294 -L 165.630339 -103.060488 -L 164.640702 -101.650681 -L 163.785974 -100.240874 -L 163.0541 -98.831067 -L 162.432817 -97.42126 -L 161.910005 -96.011453 -L 161.473957 -94.601647 -L 161.113578 -93.19184 -L 160.818522 -91.782033 -L 160.579282 -90.372226 -L 160.387237 -88.962419 + <path id="mdecda3effe" d="M 125.193618 -88.962419 +L 124.556382 -88.962419 +L 124.460359 -90.372226 +L 124.340739 -91.782033 +L 124.193211 -93.19184 +L 124.013022 -94.601647 +L 123.794997 -96.011453 +L 123.533591 -97.42126 +L 123.22295 -98.831067 +L 122.857013 -100.240874 +L 122.429649 -101.650681 +L 121.934831 -103.060488 +L 121.366856 -104.470294 +L 120.720611 -105.880101 +L 119.991874 -107.289908 +L 119.177646 -108.699715 +L 118.276494 -110.109522 +L 117.288884 -111.519329 +L 116.217472 -112.929135 +L 115.067338 -114.338942 +L 113.846115 -115.748749 +L 112.564011 -117.158556 +L 111.233703 -118.568363 +L 109.870085 -119.978169 +L 108.489912 -121.387976 +L 107.111331 -122.797783 +L 105.753348 -124.20759 +L 104.435262 -125.617397 +L 103.17611 -127.027204 +L 101.994152 -128.43701 +L 100.906431 -129.846817 +L 99.928412 -131.256624 +L 99.073704 -132.666431 +L 98.353866 -134.076238 +L 97.778254 -135.486045 +L 97.353912 -136.895851 +L 97.085463 -138.305658 +L 96.975 -139.715465 +L 97.021967 -141.125272 +L 97.223049 -142.535079 +L 97.572077 -143.944886 +L 98.060001 -145.354692 +L 98.674951 -146.764499 +L 99.402418 -148.174306 +L 100.225588 -149.584113 +L 101.125825 -150.99392 +L 102.083296 -152.403727 +L 103.077701 -153.813533 +L 104.089074 -155.22334 +L 105.098577 -156.633147 +L 106.089232 -158.042954 +L 107.046534 -159.452761 +L 107.95888 -160.862568 +L 108.817796 -162.272374 +L 109.617942 -163.682181 +L 110.356906 -165.091988 +L 111.034819 -166.501795 +L 111.653847 -167.911602 +L 112.217606 -169.321409 +L 112.730577 -170.731215 +L 113.197562 -172.141022 +L 113.623259 -173.550829 +L 114.011946 -174.960636 +L 114.367338 -176.370443 +L 114.692565 -177.780249 +L 114.990289 -179.190056 +L 115.262903 -180.599863 +L 115.512777 -182.00967 +L 115.742511 -183.419477 +L 115.955147 -184.829284 +L 116.154314 -186.23909 +L 116.344273 -187.648897 +L 116.529871 -189.058704 +L 116.716381 -190.468511 +L 116.909275 -191.878318 +L 117.113927 -193.288125 +L 117.335289 -194.697931 +L 117.577572 -196.107738 +L 117.843959 -197.517545 +L 118.136377 -198.927352 +L 118.455352 -200.337159 +L 118.799953 -201.746966 +L 119.167829 -203.156772 +L 119.555338 -204.566579 +L 119.957759 -205.976386 +L 120.369557 -207.386193 +L 120.78469 -208.796 +L 121.196933 -210.205807 +L 121.600198 -211.615613 +L 121.988817 -213.02542 +L 122.357791 -214.435227 +L 122.702975 -215.845034 +L 123.021197 -217.254841 +L 123.310318 -218.664648 +L 123.569219 -220.074454 +L 123.79774 -221.484261 +L 123.996571 -222.894068 +L 124.167113 -224.303875 +L 124.311321 -225.713682 +L 124.431541 -227.123489 +L 124.53035 -228.533295 +L 125.21965 -228.533295 +L 125.21965 -228.533295 +L 125.318459 -227.123489 +L 125.438679 -225.713682 +L 125.582887 -224.303875 +L 125.753429 -222.894068 +L 125.95226 -221.484261 +L 126.180781 -220.074454 +L 126.439682 -218.664648 +L 126.728803 -217.254841 +L 127.047025 -215.845034 +L 127.392209 -214.435227 +L 127.761183 -213.02542 +L 128.149802 -211.615613 +L 128.553067 -210.205807 +L 128.96531 -208.796 +L 129.380443 -207.386193 +L 129.792241 -205.976386 +L 130.194662 -204.566579 +L 130.582171 -203.156772 +L 130.950047 -201.746966 +L 131.294648 -200.337159 +L 131.613623 -198.927352 +L 131.906041 -197.517545 +L 132.172428 -196.107738 +L 132.414711 -194.697931 +L 132.636073 -193.288125 +L 132.840725 -191.878318 +L 133.033619 -190.468511 +L 133.220129 -189.058704 +L 133.405727 -187.648897 +L 133.595686 -186.23909 +L 133.794853 -184.829284 +L 134.007489 -183.419477 +L 134.237223 -182.00967 +L 134.487097 -180.599863 +L 134.759711 -179.190056 +L 135.057435 -177.780249 +L 135.382662 -176.370443 +L 135.738054 -174.960636 +L 136.126741 -173.550829 +L 136.552438 -172.141022 +L 137.019423 -170.731215 +L 137.532394 -169.321409 +L 138.096153 -167.911602 +L 138.715181 -166.501795 +L 139.393094 -165.091988 +L 140.132058 -163.682181 +L 140.932204 -162.272374 +L 141.79112 -160.862568 +L 142.703466 -159.452761 +L 143.660768 -158.042954 +L 144.651423 -156.633147 +L 145.660926 -155.22334 +L 146.672299 -153.813533 +L 147.666704 -152.403727 +L 148.624175 -150.99392 +L 149.524412 -149.584113 +L 150.347582 -148.174306 +L 151.075049 -146.764499 +L 151.689999 -145.354692 +L 152.177923 -143.944886 +L 152.526951 -142.535079 +L 152.728033 -141.125272 +L 152.775 -139.715465 +L 152.664537 -138.305658 +L 152.396088 -136.895851 +L 151.971746 -135.486045 +L 151.396134 -134.076238 +L 150.676296 -132.666431 +L 149.821588 -131.256624 +L 148.843569 -129.846817 +L 147.755848 -128.43701 +L 146.57389 -127.027204 +L 145.314738 -125.617397 +L 143.996652 -124.20759 +L 142.638669 -122.797783 +L 141.260088 -121.387976 +L 139.879915 -119.978169 +L 138.516297 -118.568363 +L 137.185989 -117.158556 +L 135.903885 -115.748749 +L 134.682662 -114.338942 +L 133.532528 -112.929135 +L 132.461116 -111.519329 +L 131.473506 -110.109522 +L 130.572354 -108.699715 +L 129.758126 -107.289908 +L 129.029389 -105.880101 +L 128.383144 -104.470294 +L 127.815169 -103.060488 +L 127.320351 -101.650681 +L 126.892987 -100.240874 +L 126.52705 -98.831067 +L 126.216409 -97.42126 +L 125.955003 -96.011453 +L 125.736978 -94.601647 +L 125.556789 -93.19184 +L 125.409261 -91.782033 +L 125.289641 -90.372226 +L 125.193618 -88.962419 z " style="stroke: #1f1f1f; stroke-width: 1.25"/> </defs> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#m8605bf3e91" x="0" y="432" style="fill: #333333; stroke: #1f1f1f; stroke-width: 1.25"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#mdecda3effe" x="0" y="432" style="fill: #333333; stroke: #1f1f1f; stroke-width: 1.25"/> </g> </g> <g id="FillBetweenPolyCollection_2"> <defs> - <path id="m3bd5f3b1f0" d="M 300.272129 -88.632438 -L 298.227871 -88.632438 -L 297.913262 -90.743923 -L 297.523397 -92.855409 -L 297.047148 -94.966894 -L 296.473677 -97.07838 -L 295.793021 -99.189865 -L 294.996753 -101.30135 -L 294.078654 -103.412836 -L 293.035373 -105.524321 -L 291.866986 -107.635806 -L 290.577423 -109.747292 -L 289.174667 -111.858777 -L 287.670709 -113.970262 -L 286.081215 -116.081748 -L 284.424891 -118.193233 -L 282.722602 -120.304718 -L 280.99626 -122.416204 -L 279.267595 -124.527689 -L 277.556894 -126.639174 -L 275.881824 -128.75066 -L 274.256442 -130.862145 -L 272.690494 -132.97363 -L 271.189067 -135.085116 -L 269.752622 -137.196601 -L 268.377393 -139.308087 -L 267.056125 -141.419572 -L 265.779044 -143.531057 -L 264.534973 -145.642543 -L 263.312471 -147.754028 -L 262.1009 -149.865513 -L 260.891313 -151.976999 -L 259.677115 -154.088484 -L 258.454462 -156.199969 -L 257.22241 -158.311455 -L 255.982842 -160.42294 -L 254.740236 -162.534425 -L 253.501343 -164.645911 -L 252.274841 -166.757396 -L 251.071028 -168.868881 -L 249.901591 -170.980367 -L 248.779474 -173.091852 -L 247.718828 -175.203338 -L 246.73503 -177.314823 -L 245.844699 -179.426308 -L 245.065678 -181.537794 -L 244.416899 -183.649279 -L 243.918084 -185.760764 -L 243.589253 -187.87225 -L 243.45 -189.983735 -L 243.518569 -192.09522 -L 243.810766 -194.206706 -L 244.338768 -196.318191 -L 245.109943 -198.429676 -L 246.12578 -200.541162 -L 247.38105 -202.652647 -L 248.863318 -204.764132 -L 250.552877 -206.875618 -L 252.423177 -208.987103 -L 254.441739 -211.098589 -L 256.571531 -213.210074 -L 258.772704 -215.321559 -L 261.004572 -217.433045 -L 263.227667 -219.54453 -L 265.405717 -221.656015 -L 267.507359 -223.767501 -L 269.507482 -225.878986 -L 271.388069 -227.990471 -L 273.138519 -230.101957 -L 274.755425 -232.213442 -L 276.241889 -234.324927 -L 277.606442 -236.436413 -L 278.861718 -238.547898 -L 280.022999 -240.659383 -L 281.106773 -242.770869 -L 282.12942 -244.882354 -L 283.106106 -246.99384 -L 284.049954 -249.105325 -L 284.971493 -251.21681 -L 285.878392 -253.328296 -L 286.775439 -255.439781 -L 287.664716 -257.551266 -L 288.545916 -259.662752 -L 289.416748 -261.774237 -L 290.273393 -263.885722 -L 291.110956 -265.997208 -L 291.923908 -268.108693 -L 292.706486 -270.220178 -L 293.453055 -272.331664 -L 294.158413 -274.443149 -L 294.818048 -276.554634 -L 295.428339 -278.66612 -L 295.986694 -280.777605 -L 296.491638 -282.889091 -L 296.942836 -285.000576 -L 297.341059 -287.112061 -L 297.688093 -289.223547 -L 297.986615 -291.335032 -L 298.240019 -293.446517 -L 298.452237 -295.558003 -L 298.627535 -297.669488 -L 299.872465 -297.669488 -L 299.872465 -297.669488 -L 300.047763 -295.558003 -L 300.259981 -293.446517 -L 300.513385 -291.335032 -L 300.811907 -289.223547 -L 301.158941 -287.112061 -L 301.557164 -285.000576 -L 302.008362 -282.889091 -L 302.513306 -280.777605 -L 303.071661 -278.66612 -L 303.681952 -276.554634 -L 304.341587 -274.443149 -L 305.046945 -272.331664 -L 305.793514 -270.220178 -L 306.576092 -268.108693 -L 307.389044 -265.997208 -L 308.226607 -263.885722 -L 309.083252 -261.774237 -L 309.954084 -259.662752 -L 310.835284 -257.551266 -L 311.724561 -255.439781 -L 312.621608 -253.328296 -L 313.528507 -251.21681 -L 314.450046 -249.105325 -L 315.393894 -246.99384 -L 316.37058 -244.882354 -L 317.393227 -242.770869 -L 318.477001 -240.659383 -L 319.638282 -238.547898 -L 320.893558 -236.436413 -L 322.258111 -234.324927 -L 323.744575 -232.213442 -L 325.361481 -230.101957 -L 327.111931 -227.990471 -L 328.992518 -225.878986 -L 330.992641 -223.767501 -L 333.094283 -221.656015 -L 335.272333 -219.54453 -L 337.495428 -217.433045 -L 339.727296 -215.321559 -L 341.928469 -213.210074 -L 344.058261 -211.098589 -L 346.076823 -208.987103 -L 347.947123 -206.875618 -L 349.636682 -204.764132 -L 351.11895 -202.652647 -L 352.37422 -200.541162 -L 353.390057 -198.429676 -L 354.161232 -196.318191 -L 354.689234 -194.206706 -L 354.981431 -192.09522 -L 355.05 -189.983735 -L 354.910747 -187.87225 -L 354.581916 -185.760764 -L 354.083101 -183.649279 -L 353.434322 -181.537794 -L 352.655301 -179.426308 -L 351.76497 -177.314823 -L 350.781172 -175.203338 -L 349.720526 -173.091852 -L 348.598409 -170.980367 -L 347.428972 -168.868881 -L 346.225159 -166.757396 -L 344.998657 -164.645911 -L 343.759764 -162.534425 -L 342.517158 -160.42294 -L 341.27759 -158.311455 -L 340.045538 -156.199969 -L 338.822885 -154.088484 -L 337.608687 -151.976999 -L 336.3991 -149.865513 -L 335.187529 -147.754028 -L 333.965027 -145.642543 -L 332.720956 -143.531057 -L 331.443875 -141.419572 -L 330.122607 -139.308087 -L 328.747378 -137.196601 -L 327.310933 -135.085116 -L 325.809506 -132.97363 -L 324.243558 -130.862145 -L 322.618176 -128.75066 -L 320.943106 -126.639174 -L 319.232405 -124.527689 -L 317.50374 -122.416204 -L 315.777398 -120.304718 -L 314.075109 -118.193233 -L 312.418785 -116.081748 -L 310.829291 -113.970262 -L 309.325333 -111.858777 -L 307.922577 -109.747292 -L 306.633014 -107.635806 -L 305.464627 -105.524321 -L 304.421346 -103.412836 -L 303.503247 -101.30135 -L 302.706979 -99.189865 -L 302.026323 -97.07838 -L 301.452852 -94.966894 -L 300.976603 -92.855409 -L 300.586738 -90.743923 -L 300.272129 -88.632438 + <path id="m370fbea5e9" d="M 264.886064 -88.632438 +L 263.863936 -88.632438 +L 263.706631 -90.743923 +L 263.511699 -92.855409 +L 263.273574 -94.966894 +L 262.986838 -97.07838 +L 262.646511 -99.189865 +L 262.248377 -101.30135 +L 261.789327 -103.412836 +L 261.267686 -105.524321 +L 260.683493 -107.635806 +L 260.038711 -109.747292 +L 259.337333 -111.858777 +L 258.585355 -113.970262 +L 257.790607 -116.081748 +L 256.962446 -118.193233 +L 256.111301 -120.304718 +L 255.24813 -122.416204 +L 254.383797 -124.527689 +L 253.528447 -126.639174 +L 252.690912 -128.75066 +L 251.878221 -130.862145 +L 251.095247 -132.97363 +L 250.344534 -135.085116 +L 249.626311 -137.196601 +L 248.938696 -139.308087 +L 248.278063 -141.419572 +L 247.639522 -143.531057 +L 247.017486 -145.642543 +L 246.406236 -147.754028 +L 245.80045 -149.865513 +L 245.195657 -151.976999 +L 244.588557 -154.088484 +L 243.977231 -156.199969 +L 243.361205 -158.311455 +L 242.741421 -160.42294 +L 242.120118 -162.534425 +L 241.500671 -164.645911 +L 240.887421 -166.757396 +L 240.285514 -168.868881 +L 239.700796 -170.980367 +L 239.139737 -173.091852 +L 238.609414 -175.203338 +L 238.117515 -177.314823 +L 237.672349 -179.426308 +L 237.282839 -181.537794 +L 236.958449 -183.649279 +L 236.709042 -185.760764 +L 236.544627 -187.87225 +L 236.475 -189.983735 +L 236.509285 -192.09522 +L 236.655383 -194.206706 +L 236.919384 -196.318191 +L 237.304971 -198.429676 +L 237.81289 -200.541162 +L 238.440525 -202.652647 +L 239.181659 -204.764132 +L 240.026438 -206.875618 +L 240.961589 -208.987103 +L 241.97087 -211.098589 +L 243.035766 -213.210074 +L 244.136352 -215.321559 +L 245.252286 -217.433045 +L 246.363834 -219.54453 +L 247.452858 -221.656015 +L 248.50368 -223.767501 +L 249.503741 -225.878986 +L 250.444035 -227.990471 +L 251.319259 -230.101957 +L 252.127713 -232.213442 +L 252.870945 -234.324927 +L 253.553221 -236.436413 +L 254.180859 -238.547898 +L 254.7615 -240.659383 +L 255.303387 -242.770869 +L 255.81471 -244.882354 +L 256.303053 -246.99384 +L 256.774977 -249.105325 +L 257.235747 -251.21681 +L 257.689196 -253.328296 +L 258.13772 -255.439781 +L 258.582358 -257.551266 +L 259.022958 -259.662752 +L 259.458374 -261.774237 +L 259.886696 -263.885722 +L 260.305478 -265.997208 +L 260.711954 -268.108693 +L 261.103243 -270.220178 +L 261.476527 -272.331664 +L 261.829206 -274.443149 +L 262.159024 -276.554634 +L 262.464169 -278.66612 +L 262.743347 -280.777605 +L 262.995819 -282.889091 +L 263.221418 -285.000576 +L 263.420529 -287.112061 +L 263.594046 -289.223547 +L 263.743307 -291.335032 +L 263.87001 -293.446517 +L 263.976118 -295.558003 +L 264.063768 -297.669488 +L 264.686232 -297.669488 +L 264.686232 -297.669488 +L 264.773882 -295.558003 +L 264.87999 -293.446517 +L 265.006693 -291.335032 +L 265.155954 -289.223547 +L 265.329471 -287.112061 +L 265.528582 -285.000576 +L 265.754181 -282.889091 +L 266.006653 -280.777605 +L 266.285831 -278.66612 +L 266.590976 -276.554634 +L 266.920794 -274.443149 +L 267.273473 -272.331664 +L 267.646757 -270.220178 +L 268.038046 -268.108693 +L 268.444522 -265.997208 +L 268.863304 -263.885722 +L 269.291626 -261.774237 +L 269.727042 -259.662752 +L 270.167642 -257.551266 +L 270.61228 -255.439781 +L 271.060804 -253.328296 +L 271.514253 -251.21681 +L 271.975023 -249.105325 +L 272.446947 -246.99384 +L 272.93529 -244.882354 +L 273.446613 -242.770869 +L 273.9885 -240.659383 +L 274.569141 -238.547898 +L 275.196779 -236.436413 +L 275.879055 -234.324927 +L 276.622287 -232.213442 +L 277.430741 -230.101957 +L 278.305965 -227.990471 +L 279.246259 -225.878986 +L 280.24632 -223.767501 +L 281.297142 -221.656015 +L 282.386166 -219.54453 +L 283.497714 -217.433045 +L 284.613648 -215.321559 +L 285.714234 -213.210074 +L 286.77913 -211.098589 +L 287.788411 -208.987103 +L 288.723562 -206.875618 +L 289.568341 -204.764132 +L 290.309475 -202.652647 +L 290.93711 -200.541162 +L 291.445029 -198.429676 +L 291.830616 -196.318191 +L 292.094617 -194.206706 +L 292.240715 -192.09522 +L 292.275 -189.983735 +L 292.205373 -187.87225 +L 292.040958 -185.760764 +L 291.791551 -183.649279 +L 291.467161 -181.537794 +L 291.077651 -179.426308 +L 290.632485 -177.314823 +L 290.140586 -175.203338 +L 289.610263 -173.091852 +L 289.049204 -170.980367 +L 288.464486 -168.868881 +L 287.862579 -166.757396 +L 287.249329 -164.645911 +L 286.629882 -162.534425 +L 286.008579 -160.42294 +L 285.388795 -158.311455 +L 284.772769 -156.199969 +L 284.161443 -154.088484 +L 283.554343 -151.976999 +L 282.94955 -149.865513 +L 282.343764 -147.754028 +L 281.732514 -145.642543 +L 281.110478 -143.531057 +L 280.471937 -141.419572 +L 279.811304 -139.308087 +L 279.123689 -137.196601 +L 278.405466 -135.085116 +L 277.654753 -132.97363 +L 276.871779 -130.862145 +L 276.059088 -128.75066 +L 275.221553 -126.639174 +L 274.366203 -124.527689 +L 273.50187 -122.416204 +L 272.638699 -120.304718 +L 271.787554 -118.193233 +L 270.959393 -116.081748 +L 270.164645 -113.970262 +L 269.412667 -111.858777 +L 268.711289 -109.747292 +L 268.066507 -107.635806 +L 267.482314 -105.524321 +L 266.960673 -103.412836 +L 266.501623 -101.30135 +L 266.103489 -99.189865 +L 265.763162 -97.07838 +L 265.476426 -94.966894 +L 265.238301 -92.855409 +L 265.043369 -90.743923 +L 264.886064 -88.632438 z " style="stroke: #1f1f1f; stroke-width: 1.25"/> </defs> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#m3bd5f3b1f0" x="0" y="432" style="fill: #409884; stroke: #1f1f1f; stroke-width: 1.25"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#m370fbea5e9" x="0" y="432" style="fill: #409884; stroke: #1f1f1f; stroke-width: 1.25"/> </g> </g> <g id="FillBetweenPolyCollection_3"> <defs> - <path id="mc7e649610a" d="M 439.181338 -121.22754 -L 438.318662 -121.22754 -L 438.191124 -123.690293 -L 438.038758 -126.153045 -L 437.860955 -128.615797 -L 437.658469 -131.078549 -L 437.433692 -133.541301 -L 437.190839 -136.004053 -L 436.935979 -138.466805 -L 436.6769 -140.929557 -L 436.422777 -143.39231 -L 436.183654 -145.855062 -L 435.96976 -148.317814 -L 435.790722 -150.780566 -L 435.654746 -153.243318 -L 435.567845 -155.70607 -L 435.53319 -158.168822 -L 435.550678 -160.631574 -L 435.616733 -163.094326 -L 435.72439 -165.557079 -L 435.863629 -168.019831 -L 436.021934 -170.482583 -L 436.185013 -172.945335 -L 436.337603 -175.408087 -L 436.464299 -177.870839 -L 436.55033 -180.333591 -L 436.582252 -182.796343 -L 436.548499 -185.259095 -L 436.439812 -187.721848 -L 436.24952 -190.1846 -L 435.973699 -192.647352 -L 435.611226 -195.110104 -L 435.163718 -197.572856 -L 434.635402 -200.035608 -L 434.032893 -202.49836 -L 433.364884 -204.961112 -L 432.641753 -207.423865 -L 431.875079 -209.886617 -L 431.077059 -212.349369 -L 430.259839 -214.812121 -L 429.434768 -217.274873 -L 428.611606 -219.737625 -L 427.797722 -222.200377 -L 426.997333 -224.663129 -L 426.210851 -227.125881 -L 425.434407 -229.588634 -L 424.659607 -232.051386 -L 423.873594 -234.514138 -L 423.059436 -236.97689 -L 422.196867 -239.439642 -L 421.263355 -241.902394 -L 420.235433 -244.365146 -L 419.090236 -246.827898 -L 417.807112 -249.290651 -L 416.369201 -251.753403 -L 414.764869 -254.216155 -L 412.988885 -256.678907 -L 411.043271 -259.141659 -L 408.937789 -261.604411 -L 406.690053 -264.067163 -L 404.325314 -266.529915 -L 401.875953 -268.992667 -L 399.380771 -271.45542 -L 396.884127 -273.918172 -L 394.434964 -276.380924 -L 392.085738 -278.843676 -L 389.891237 -281.306428 -L 387.907228 -283.76918 -L 386.18891 -286.231932 -L 384.789114 -288.694684 -L 383.756281 -291.157437 -L 383.132248 -293.620189 -L 382.95 -296.082941 -L 383.231542 -298.545693 -L 383.986113 -301.008445 -L 385.208969 -303.471197 -L 386.880903 -305.933949 -L 388.968633 -308.396701 -L 391.42608 -310.859453 -L 394.196452 -313.322206 -L 397.21498 -315.784958 -L 400.412062 -318.24771 -L 403.716542 -320.710462 -L 407.058863 -323.173214 -L 410.373861 -325.635966 -L 413.603029 -328.098718 -L 416.696165 -330.56147 -L 419.612374 -333.024222 -L 422.320465 -335.486975 -L 424.798832 -337.949727 -L 427.034915 -340.412479 -L 429.024352 -342.875231 -L 430.769927 -345.337983 -L 432.280398 -347.800735 -L 433.569281 -350.263487 -L 434.653636 -352.726239 -L 435.552911 -355.188992 -L 436.287876 -357.651744 -L 436.879673 -360.114496 -L 437.349012 -362.577248 -L 437.715516 -365.04 -L 439.784484 -365.04 -L 439.784484 -365.04 -L 440.150988 -362.577248 -L 440.620327 -360.114496 -L 441.212124 -357.651744 -L 441.947089 -355.188992 -L 442.846364 -352.726239 -L 443.930719 -350.263487 -L 445.219602 -347.800735 -L 446.730073 -345.337983 -L 448.475648 -342.875231 -L 450.465085 -340.412479 -L 452.701168 -337.949727 -L 455.179535 -335.486975 -L 457.887626 -333.024222 -L 460.803835 -330.56147 -L 463.896971 -328.098718 -L 467.126139 -325.635966 -L 470.441137 -323.173214 -L 473.783458 -320.710462 -L 477.087938 -318.24771 -L 480.28502 -315.784958 -L 483.303548 -313.322206 -L 486.07392 -310.859453 -L 488.531367 -308.396701 -L 490.619097 -305.933949 -L 492.291031 -303.471197 -L 493.513887 -301.008445 -L 494.268458 -298.545693 -L 494.55 -296.082941 -L 494.367752 -293.620189 -L 493.743719 -291.157437 -L 492.710886 -288.694684 -L 491.31109 -286.231932 -L 489.592772 -283.76918 -L 487.608763 -281.306428 -L 485.414262 -278.843676 -L 483.065036 -276.380924 -L 480.615873 -273.918172 -L 478.119229 -271.45542 -L 475.624047 -268.992667 -L 473.174686 -266.529915 -L 470.809947 -264.067163 -L 468.562211 -261.604411 -L 466.456729 -259.141659 -L 464.511115 -256.678907 -L 462.735131 -254.216155 -L 461.130799 -251.753403 -L 459.692888 -249.290651 -L 458.409764 -246.827898 -L 457.264567 -244.365146 -L 456.236645 -241.902394 -L 455.303133 -239.439642 -L 454.440564 -236.97689 -L 453.626406 -234.514138 -L 452.840393 -232.051386 -L 452.065593 -229.588634 -L 451.289149 -227.125881 -L 450.502667 -224.663129 -L 449.702278 -222.200377 -L 448.888394 -219.737625 -L 448.065232 -217.274873 -L 447.240161 -214.812121 -L 446.422941 -212.349369 -L 445.624921 -209.886617 -L 444.858247 -207.423865 -L 444.135116 -204.961112 -L 443.467107 -202.49836 -L 442.864598 -200.035608 -L 442.336282 -197.572856 -L 441.888774 -195.110104 -L 441.526301 -192.647352 -L 441.25048 -190.1846 -L 441.060188 -187.721848 -L 440.951501 -185.259095 -L 440.917748 -182.796343 -L 440.94967 -180.333591 -L 441.035701 -177.870839 -L 441.162397 -175.408087 -L 441.314987 -172.945335 -L 441.478066 -170.482583 -L 441.636371 -168.019831 -L 441.77561 -165.557079 -L 441.883267 -163.094326 -L 441.949322 -160.631574 -L 441.96681 -158.168822 -L 441.932155 -155.70607 -L 441.845254 -153.243318 -L 441.709278 -150.780566 -L 441.53024 -148.317814 -L 441.316346 -145.855062 -L 441.077223 -143.39231 -L 440.8231 -140.929557 -L 440.564021 -138.466805 -L 440.309161 -136.004053 -L 440.066308 -133.541301 -L 439.841531 -131.078549 -L 439.639045 -128.615797 -L 439.461242 -126.153045 -L 439.308876 -123.690293 -L 439.181338 -121.22754 + <path id="ma8a3991fed" d="M 404.090669 -121.22754 +L 403.659331 -121.22754 +L 403.595562 -123.690293 +L 403.519379 -126.153045 +L 403.430478 -128.615797 +L 403.329234 -131.078549 +L 403.216846 -133.541301 +L 403.09542 -136.004053 +L 402.96799 -138.466805 +L 402.83845 -140.929557 +L 402.711389 -143.39231 +L 402.591827 -145.855062 +L 402.48488 -148.317814 +L 402.395361 -150.780566 +L 402.327373 -153.243318 +L 402.283922 -155.70607 +L 402.266595 -158.168822 +L 402.275339 -160.631574 +L 402.308366 -163.094326 +L 402.362195 -165.557079 +L 402.431814 -168.019831 +L 402.510967 -170.482583 +L 402.592507 -172.945335 +L 402.668802 -175.408087 +L 402.732149 -177.870839 +L 402.775165 -180.333591 +L 402.791126 -182.796343 +L 402.77425 -185.259095 +L 402.719906 -187.721848 +L 402.62476 -190.1846 +L 402.48685 -192.647352 +L 402.305613 -195.110104 +L 402.081859 -197.572856 +L 401.817701 -200.035608 +L 401.516447 -202.49836 +L 401.182442 -204.961112 +L 400.820876 -207.423865 +L 400.437539 -209.886617 +L 400.03853 -212.349369 +L 399.629919 -214.812121 +L 399.217384 -217.274873 +L 398.805803 -219.737625 +L 398.398861 -222.200377 +L 397.998666 -224.663129 +L 397.605426 -227.125881 +L 397.217204 -229.588634 +L 396.829804 -232.051386 +L 396.436797 -234.514138 +L 396.029718 -236.97689 +L 395.598434 -239.439642 +L 395.131677 -241.902394 +L 394.617716 -244.365146 +L 394.045118 -246.827898 +L 393.403556 -249.290651 +L 392.6846 -251.753403 +L 391.882435 -254.216155 +L 390.994442 -256.678907 +L 390.021635 -259.141659 +L 388.968894 -261.604411 +L 387.845027 -264.067163 +L 386.662657 -266.529915 +L 385.437976 -268.992667 +L 384.190385 -271.45542 +L 382.942063 -273.918172 +L 381.717482 -276.380924 +L 380.542869 -278.843676 +L 379.445619 -281.306428 +L 378.453614 -283.76918 +L 377.594455 -286.231932 +L 376.894557 -288.694684 +L 376.37814 -291.157437 +L 376.066124 -293.620189 +L 375.975 -296.082941 +L 376.115771 -298.545693 +L 376.493057 -301.008445 +L 377.104485 -303.471197 +L 377.940451 -305.933949 +L 378.984317 -308.396701 +L 380.21304 -310.859453 +L 381.598226 -313.322206 +L 383.10749 -315.784958 +L 384.706031 -318.24771 +L 386.358271 -320.710462 +L 388.029431 -323.173214 +L 389.68693 -325.635966 +L 391.301514 -328.098718 +L 392.848083 -330.56147 +L 394.306187 -333.024222 +L 395.660232 -335.486975 +L 396.899416 -337.949727 +L 398.017457 -340.412479 +L 399.012176 -342.875231 +L 399.884963 -345.337983 +L 400.640199 -347.800735 +L 401.284641 -350.263487 +L 401.826818 -352.726239 +L 402.276455 -355.188992 +L 402.643938 -357.651744 +L 402.939837 -360.114496 +L 403.174506 -362.577248 +L 403.357758 -365.04 +L 404.392242 -365.04 +L 404.392242 -365.04 +L 404.575494 -362.577248 +L 404.810163 -360.114496 +L 405.106062 -357.651744 +L 405.473545 -355.188992 +L 405.923182 -352.726239 +L 406.465359 -350.263487 +L 407.109801 -347.800735 +L 407.865037 -345.337983 +L 408.737824 -342.875231 +L 409.732543 -340.412479 +L 410.850584 -337.949727 +L 412.089768 -335.486975 +L 413.443813 -333.024222 +L 414.901917 -330.56147 +L 416.448486 -328.098718 +L 418.06307 -325.635966 +L 419.720569 -323.173214 +L 421.391729 -320.710462 +L 423.043969 -318.24771 +L 424.64251 -315.784958 +L 426.151774 -313.322206 +L 427.53696 -310.859453 +L 428.765683 -308.396701 +L 429.809549 -305.933949 +L 430.645515 -303.471197 +L 431.256943 -301.008445 +L 431.634229 -298.545693 +L 431.775 -296.082941 +L 431.683876 -293.620189 +L 431.37186 -291.157437 +L 430.855443 -288.694684 +L 430.155545 -286.231932 +L 429.296386 -283.76918 +L 428.304381 -281.306428 +L 427.207131 -278.843676 +L 426.032518 -276.380924 +L 424.807937 -273.918172 +L 423.559615 -271.45542 +L 422.312024 -268.992667 +L 421.087343 -266.529915 +L 419.904973 -264.067163 +L 418.781106 -261.604411 +L 417.728365 -259.141659 +L 416.755558 -256.678907 +L 415.867565 -254.216155 +L 415.0654 -251.753403 +L 414.346444 -249.290651 +L 413.704882 -246.827898 +L 413.132284 -244.365146 +L 412.618323 -241.902394 +L 412.151566 -239.439642 +L 411.720282 -236.97689 +L 411.313203 -234.514138 +L 410.920196 -232.051386 +L 410.532796 -229.588634 +L 410.144574 -227.125881 +L 409.751334 -224.663129 +L 409.351139 -222.200377 +L 408.944197 -219.737625 +L 408.532616 -217.274873 +L 408.120081 -214.812121 +L 407.71147 -212.349369 +L 407.312461 -209.886617 +L 406.929124 -207.423865 +L 406.567558 -204.961112 +L 406.233553 -202.49836 +L 405.932299 -200.035608 +L 405.668141 -197.572856 +L 405.444387 -195.110104 +L 405.26315 -192.647352 +L 405.12524 -190.1846 +L 405.030094 -187.721848 +L 404.97575 -185.259095 +L 404.958874 -182.796343 +L 404.974835 -180.333591 +L 405.017851 -177.870839 +L 405.081198 -175.408087 +L 405.157493 -172.945335 +L 405.239033 -170.482583 +L 405.318186 -168.019831 +L 405.387805 -165.557079 +L 405.441634 -163.094326 +L 405.474661 -160.631574 +L 405.483405 -158.168822 +L 405.466078 -155.70607 +L 405.422627 -153.243318 +L 405.354639 -150.780566 +L 405.26512 -148.317814 +L 405.158173 -145.855062 +L 405.038611 -143.39231 +L 404.91155 -140.929557 +L 404.78201 -138.466805 +L 404.65458 -136.004053 +L 404.533154 -133.541301 +L 404.420766 -131.078549 +L 404.319522 -128.615797 +L 404.230621 -126.153045 +L 404.154438 -123.690293 +L 404.090669 -121.22754 z " style="stroke: #1f1f1f; stroke-width: 1.25"/> </defs> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#mc7e649610a" x="0" y="432" style="fill: #e77759; stroke: #1f1f1f; stroke-width: 1.25"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#ma8a3991fed" x="0" y="432" style="fill: #e77759; stroke: #1f1f1f; stroke-width: 1.25"/> </g> </g> <g id="FillBetweenPolyCollection_4"> <defs> - <path id="m02bbbc5f4d" d="M 580.081598 -62.64 -L 576.418402 -62.64 -L 575.88634 -65.382249 -L 575.233399 -68.124498 -L 574.442215 -70.866746 -L 573.495595 -73.608995 -L 572.377277 -76.351244 -L 571.072771 -79.093493 -L 569.570279 -81.835742 -L 567.86162 -84.57799 -L 565.943117 -87.320239 -L 563.816388 -90.062488 -L 561.48897 -92.804737 -L 558.974747 -95.546986 -L 556.294113 -98.289235 -L 553.473867 -101.031483 -L 550.54683 -103.773732 -L 547.551177 -106.515981 -L 544.529537 -109.25823 -L 541.527893 -112.000479 -L 538.594325 -114.742727 -L 535.777675 -117.484976 -L 533.126168 -120.227225 -L 530.686056 -122.969474 -L 528.500324 -125.711723 -L 526.607486 -128.453971 -L 525.040521 -131.19622 -L 523.825938 -133.938469 -L 522.983024 -136.680718 -L 522.52327 -139.422967 -L 522.45 -142.165215 -L 522.758228 -144.907464 -L 523.434759 -147.649713 -L 524.458552 -150.391962 -L 525.801343 -153.134211 -L 527.428536 -155.87646 -L 529.300327 -158.618708 -L 531.373032 -161.360957 -L 533.600546 -164.103206 -L 535.935884 -166.845455 -L 538.332697 -169.587704 -L 540.746709 -172.329952 -L 543.13697 -175.072201 -L 545.466896 -177.81445 -L 547.705029 -180.556699 -L 549.825503 -183.298948 -L 551.80823 -186.041196 -L 553.638821 -188.783445 -L 555.308273 -191.525694 -L 556.812494 -194.267943 -L 558.151699 -197.010192 -L 559.329741 -199.75244 -L 560.35342 -202.494689 -L 561.231814 -205.236938 -L 561.975651 -207.979187 -L 562.596753 -210.721436 -L 563.10756 -213.463684 -L 563.520734 -216.205933 -L 563.848859 -218.948182 -L 564.104216 -221.690431 -L 564.298641 -224.43268 -L 564.443448 -227.174929 -L 564.549407 -229.917177 -L 564.626764 -232.659426 -L 564.685283 -235.401675 -L 564.734292 -238.143924 -L 564.782714 -240.886173 -L 564.839076 -243.628421 -L 564.91147 -246.37067 -L 565.007481 -249.112919 -L 565.134062 -251.855168 -L 565.297384 -254.597417 -L 565.50266 -257.339665 -L 565.753967 -260.081914 -L 566.054082 -262.824163 -L 566.404355 -265.566412 -L 566.804624 -268.308661 -L 567.253197 -271.050909 -L 567.746891 -273.793158 -L 568.281139 -276.535407 -L 568.850158 -279.277656 -L 569.447162 -282.019905 -L 570.064616 -284.762154 -L 570.694512 -287.504402 -L 571.328649 -290.246651 -L 571.95892 -292.9889 -L 572.577566 -295.731149 -L 573.177415 -298.473398 -L 573.752076 -301.215646 -L 574.296095 -303.957895 -L 574.805065 -306.700144 -L 575.275684 -309.442393 -L 575.705771 -312.184642 -L 576.094233 -314.92689 -L 576.440999 -317.669139 -L 576.746911 -320.411388 -L 577.013598 -323.153637 -L 577.243333 -325.895886 -L 577.438872 -328.638134 -L 577.603305 -331.380383 -L 577.739908 -334.122632 -L 578.760092 -334.122632 -L 578.760092 -334.122632 -L 578.896695 -331.380383 -L 579.061128 -328.638134 -L 579.256667 -325.895886 -L 579.486402 -323.153637 -L 579.753089 -320.411388 -L 580.059001 -317.669139 -L 580.405767 -314.92689 -L 580.794229 -312.184642 -L 581.224316 -309.442393 -L 581.694935 -306.700144 -L 582.203905 -303.957895 -L 582.747924 -301.215646 -L 583.322585 -298.473398 -L 583.922434 -295.731149 -L 584.54108 -292.9889 -L 585.171351 -290.246651 -L 585.805488 -287.504402 -L 586.435384 -284.762154 -L 587.052838 -282.019905 -L 587.649842 -279.277656 -L 588.218861 -276.535407 -L 588.753109 -273.793158 -L 589.246803 -271.050909 -L 589.695376 -268.308661 -L 590.095645 -265.566412 -L 590.445918 -262.824163 -L 590.746033 -260.081914 -L 590.99734 -257.339665 -L 591.202616 -254.597417 -L 591.365938 -251.855168 -L 591.492519 -249.112919 -L 591.58853 -246.37067 -L 591.660924 -243.628421 -L 591.717286 -240.886173 -L 591.765708 -238.143924 -L 591.814717 -235.401675 -L 591.873236 -232.659426 -L 591.950593 -229.917177 -L 592.056552 -227.174929 -L 592.201359 -224.43268 -L 592.395784 -221.690431 -L 592.651141 -218.948182 -L 592.979266 -216.205933 -L 593.39244 -213.463684 -L 593.903247 -210.721436 -L 594.524349 -207.979187 -L 595.268186 -205.236938 -L 596.14658 -202.494689 -L 597.170259 -199.75244 -L 598.348301 -197.010192 -L 599.687506 -194.267943 -L 601.191727 -191.525694 -L 602.861179 -188.783445 -L 604.69177 -186.041196 -L 606.674497 -183.298948 -L 608.794971 -180.556699 -L 611.033104 -177.81445 -L 613.36303 -175.072201 -L 615.753291 -172.329952 -L 618.167303 -169.587704 -L 620.564116 -166.845455 -L 622.899454 -164.103206 -L 625.126968 -161.360957 -L 627.199673 -158.618708 -L 629.071464 -155.87646 -L 630.698657 -153.134211 -L 632.041448 -150.391962 -L 633.065241 -147.649713 -L 633.741772 -144.907464 -L 634.05 -142.165215 -L 633.97673 -139.422967 -L 633.516976 -136.680718 -L 632.674062 -133.938469 -L 631.459479 -131.19622 -L 629.892514 -128.453971 -L 627.999676 -125.711723 -L 625.813944 -122.969474 -L 623.373832 -120.227225 -L 620.722325 -117.484976 -L 617.905675 -114.742727 -L 614.972107 -112.000479 -L 611.970463 -109.25823 -L 608.948823 -106.515981 -L 605.95317 -103.773732 -L 603.026133 -101.031483 -L 600.205887 -98.289235 -L 597.525253 -95.546986 -L 595.01103 -92.804737 -L 592.683612 -90.062488 -L 590.556883 -87.320239 -L 588.63838 -84.57799 -L 586.929721 -81.835742 -L 585.427229 -79.093493 -L 584.122723 -76.351244 -L 583.004405 -73.608995 -L 582.057785 -70.866746 -L 581.266601 -68.124498 -L 580.61366 -65.382249 -L 580.081598 -62.64 + <path id="mff5450d621" d="M 473.972058 -266.965462 +L 473.277942 -266.965462 +L 473.182651 -267.411283 +L 473.067786 -267.857104 +L 472.931046 -268.302925 +L 472.770189 -268.748745 +L 472.58306 -269.194566 +L 472.367599 -269.640387 +L 472.121814 -270.086208 +L 471.843725 -270.532028 +L 471.531283 -270.977849 +L 471.182258 -271.42367 +L 470.794124 -271.869491 +L 470.363956 -272.315311 +L 469.888359 -272.761132 +L 469.363446 -273.206953 +L 468.784903 -273.652774 +L 468.14814 -274.098594 +L 467.448535 -274.544415 +L 466.681783 -274.990236 +L 465.844309 -275.436057 +L 464.933743 -275.881877 +L 463.949401 -276.327698 +L 462.892732 -276.773519 +L 461.767699 -277.21934 +L 460.58104 -277.66516 +L 459.342383 -278.110981 +L 458.064186 -278.556802 +L 456.761512 -279.002623 +L 455.45163 -279.448443 +L 454.15348 -279.894264 +L 452.887021 -280.340085 +L 451.672521 -280.785906 +L 450.52982 -281.231726 +L 449.477622 -281.677547 +L 448.532842 -282.123368 +L 447.71005 -282.569189 +L 447.021021 -283.015009 +L 446.474404 -283.46083 +L 446.075517 -283.906651 +L 445.826237 -284.352472 +L 445.725 -284.798293 +L 445.766876 -285.244113 +L 445.943718 -285.689934 +L 446.244377 -286.135755 +L 446.654983 -286.581576 +L 447.159286 -287.027396 +L 447.739081 -287.473217 +L 448.374719 -287.919038 +L 449.0457 -288.364859 +L 449.73137 -288.810679 +L 450.411682 -289.2565 +L 451.068027 -289.702321 +L 451.684072 -290.148142 +L 452.246583 -290.593962 +L 452.746142 -291.039783 +L 453.177733 -291.485604 +L 453.541106 -291.931425 +L 453.840885 -292.377245 +L 454.086376 -292.823066 +L 454.291072 -293.268887 +L 454.471847 -293.714708 +L 454.647896 -294.160528 +L 454.839478 -294.606349 +L 455.06655 -295.05217 +L 455.347394 -295.497991 +L 455.697347 -295.943811 +L 456.127751 -296.389632 +L 456.645185 -296.835453 +L 457.251075 -297.281274 +L 457.941692 -297.727094 +L 458.708546 -298.172915 +L 459.53912 -298.618736 +L 460.417884 -299.064557 +L 461.32748 -299.510377 +L 462.24996 -299.956198 +L 463.167982 -300.402019 +L 464.065837 -300.84784 +L 464.93025 -301.29366 +L 465.750893 -301.739481 +L 466.520596 -302.185302 +L 467.235276 -302.631123 +L 467.893628 -303.076944 +L 468.496636 -303.522764 +L 469.046987 -303.968585 +L 469.548456 -304.414406 +L 470.00533 -304.860227 +L 470.421923 -305.306047 +L 470.802214 -305.751868 +L 471.14962 -306.197689 +L 471.466898 -306.64351 +L 471.756162 -307.08933 +L 472.018973 -307.535151 +L 472.256495 -307.980972 +L 472.469652 -308.426793 +L 472.659293 -308.872613 +L 472.82632 -309.318434 +L 472.971783 -309.764255 +L 473.096924 -310.210076 +L 473.203191 -310.655896 +L 473.292211 -311.101717 +L 473.957789 -311.101717 +L 473.957789 -311.101717 +L 474.046809 -310.655896 +L 474.153076 -310.210076 +L 474.278217 -309.764255 +L 474.42368 -309.318434 +L 474.590707 -308.872613 +L 474.780348 -308.426793 +L 474.993505 -307.980972 +L 475.231027 -307.535151 +L 475.493838 -307.08933 +L 475.783102 -306.64351 +L 476.10038 -306.197689 +L 476.447786 -305.751868 +L 476.828077 -305.306047 +L 477.24467 -304.860227 +L 477.701544 -304.414406 +L 478.203013 -303.968585 +L 478.753364 -303.522764 +L 479.356372 -303.076944 +L 480.014724 -302.631123 +L 480.729404 -302.185302 +L 481.499107 -301.739481 +L 482.31975 -301.29366 +L 483.184163 -300.84784 +L 484.082018 -300.402019 +L 485.00004 -299.956198 +L 485.92252 -299.510377 +L 486.832116 -299.064557 +L 487.71088 -298.618736 +L 488.541454 -298.172915 +L 489.308308 -297.727094 +L 489.998925 -297.281274 +L 490.604815 -296.835453 +L 491.122249 -296.389632 +L 491.552653 -295.943811 +L 491.902606 -295.497991 +L 492.18345 -295.05217 +L 492.410522 -294.606349 +L 492.602104 -294.160528 +L 492.778153 -293.714708 +L 492.958928 -293.268887 +L 493.163624 -292.823066 +L 493.409115 -292.377245 +L 493.708894 -291.931425 +L 494.072267 -291.485604 +L 494.503858 -291.039783 +L 495.003417 -290.593962 +L 495.565928 -290.148142 +L 496.181973 -289.702321 +L 496.838318 -289.2565 +L 497.51863 -288.810679 +L 498.2043 -288.364859 +L 498.875281 -287.919038 +L 499.510919 -287.473217 +L 500.090714 -287.027396 +L 500.595017 -286.581576 +L 501.005623 -286.135755 +L 501.306282 -285.689934 +L 501.483124 -285.244113 +L 501.525 -284.798293 +L 501.423763 -284.352472 +L 501.174483 -283.906651 +L 500.775596 -283.46083 +L 500.228979 -283.015009 +L 499.53995 -282.569189 +L 498.717158 -282.123368 +L 497.772378 -281.677547 +L 496.72018 -281.231726 +L 495.577479 -280.785906 +L 494.362979 -280.340085 +L 493.09652 -279.894264 +L 491.79837 -279.448443 +L 490.488488 -279.002623 +L 489.185814 -278.556802 +L 487.907617 -278.110981 +L 486.66896 -277.66516 +L 485.482301 -277.21934 +L 484.357268 -276.773519 +L 483.300599 -276.327698 +L 482.316257 -275.881877 +L 481.405691 -275.436057 +L 480.568217 -274.990236 +L 479.801465 -274.544415 +L 479.10186 -274.098594 +L 478.465097 -273.652774 +L 477.886554 -273.206953 +L 477.361641 -272.761132 +L 476.886044 -272.315311 +L 476.455876 -271.869491 +L 476.067742 -271.42367 +L 475.718717 -270.977849 +L 475.406275 -270.532028 +L 475.128186 -270.086208 +L 474.882401 -269.640387 +L 474.66694 -269.194566 +L 474.479811 -268.748745 +L 474.318954 -268.302925 +L 474.182214 -267.857104 +L 474.067349 -267.411283 +L 473.972058 -266.965462 +z +" style="stroke: #1f1f1f; stroke-width: 1.25"/> + </defs> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#mff5450d621" x="0" y="432" style="fill: #d69e35; stroke: #1f1f1f; stroke-width: 1.25"/> + </g> + </g> + <g id="FillBetweenPolyCollection_5"> + <defs> + <path id="m86a62582cb" d="M 544.290799 -62.64 +L 542.459201 -62.64 +L 542.19317 -65.382249 +L 541.8667 -68.124498 +L 541.471107 -70.866746 +L 540.997798 -73.608995 +L 540.438638 -76.351244 +L 539.786385 -79.093493 +L 539.035139 -81.835742 +L 538.18081 -84.57799 +L 537.221559 -87.320239 +L 536.158194 -90.062488 +L 534.994485 -92.804737 +L 533.737374 -95.546986 +L 532.397056 -98.289235 +L 530.986934 -101.031483 +L 529.523415 -103.773732 +L 528.025588 -106.515981 +L 526.514769 -109.25823 +L 525.013946 -112.000479 +L 523.547162 -114.742727 +L 522.138837 -117.484976 +L 520.813084 -120.227225 +L 519.593028 -122.969474 +L 518.500162 -125.711723 +L 517.553743 -128.453971 +L 516.77026 -131.19622 +L 516.162969 -133.938469 +L 515.741512 -136.680718 +L 515.511635 -139.422967 +L 515.475 -142.165215 +L 515.629114 -144.907464 +L 515.967379 -147.649713 +L 516.479276 -150.391962 +L 517.150671 -153.134211 +L 517.964268 -155.87646 +L 518.900164 -158.618708 +L 519.936516 -161.360957 +L 521.050273 -164.103206 +L 522.217942 -166.845455 +L 523.416349 -169.587704 +L 524.623354 -172.329952 +L 525.818485 -175.072201 +L 526.983448 -177.81445 +L 528.102514 -180.556699 +L 529.162751 -183.298948 +L 530.154115 -186.041196 +L 531.069411 -188.783445 +L 531.904137 -191.525694 +L 532.656247 -194.267943 +L 533.32585 -197.010192 +L 533.91487 -199.75244 +L 534.42671 -202.494689 +L 534.865907 -205.236938 +L 535.237825 -207.979187 +L 535.548377 -210.721436 +L 535.80378 -213.463684 +L 536.010367 -216.205933 +L 536.174429 -218.948182 +L 536.302108 -221.690431 +L 536.399321 -224.43268 +L 536.471724 -227.174929 +L 536.524703 -229.917177 +L 536.563382 -232.659426 +L 536.592642 -235.401675 +L 536.617146 -238.143924 +L 536.641357 -240.886173 +L 536.669538 -243.628421 +L 536.705735 -246.37067 +L 536.75374 -249.112919 +L 536.817031 -251.855168 +L 536.898692 -254.597417 +L 537.00133 -257.339665 +L 537.126983 -260.081914 +L 537.277041 -262.824163 +L 537.452177 -265.566412 +L 537.652312 -268.308661 +L 537.876598 -271.050909 +L 538.123445 -273.793158 +L 538.390569 -276.535407 +L 538.675079 -279.277656 +L 538.973581 -282.019905 +L 539.282308 -284.762154 +L 539.597256 -287.504402 +L 539.914325 -290.246651 +L 540.22946 -292.9889 +L 540.538783 -295.731149 +L 540.838708 -298.473398 +L 541.126038 -301.215646 +L 541.398048 -303.957895 +L 541.652533 -306.700144 +L 541.887842 -309.442393 +L 542.102885 -312.184642 +L 542.297117 -314.92689 +L 542.470499 -317.669139 +L 542.623455 -320.411388 +L 542.756799 -323.153637 +L 542.871666 -325.895886 +L 542.969436 -328.638134 +L 543.051653 -331.380383 +L 543.119954 -334.122632 +L 543.630046 -334.122632 +L 543.630046 -334.122632 +L 543.698347 -331.380383 +L 543.780564 -328.638134 +L 543.878334 -325.895886 +L 543.993201 -323.153637 +L 544.126545 -320.411388 +L 544.279501 -317.669139 +L 544.452883 -314.92689 +L 544.647115 -312.184642 +L 544.862158 -309.442393 +L 545.097467 -306.700144 +L 545.351952 -303.957895 +L 545.623962 -301.215646 +L 545.911292 -298.473398 +L 546.211217 -295.731149 +L 546.52054 -292.9889 +L 546.835675 -290.246651 +L 547.152744 -287.504402 +L 547.467692 -284.762154 +L 547.776419 -282.019905 +L 548.074921 -279.277656 +L 548.359431 -276.535407 +L 548.626555 -273.793158 +L 548.873402 -271.050909 +L 549.097688 -268.308661 +L 549.297823 -265.566412 +L 549.472959 -262.824163 +L 549.623017 -260.081914 +L 549.74867 -257.339665 +L 549.851308 -254.597417 +L 549.932969 -251.855168 +L 549.99626 -249.112919 +L 550.044265 -246.37067 +L 550.080462 -243.628421 +L 550.108643 -240.886173 +L 550.132854 -238.143924 +L 550.157358 -235.401675 +L 550.186618 -232.659426 +L 550.225297 -229.917177 +L 550.278276 -227.174929 +L 550.350679 -224.43268 +L 550.447892 -221.690431 +L 550.575571 -218.948182 +L 550.739633 -216.205933 +L 550.94622 -213.463684 +L 551.201623 -210.721436 +L 551.512175 -207.979187 +L 551.884093 -205.236938 +L 552.32329 -202.494689 +L 552.83513 -199.75244 +L 553.42415 -197.010192 +L 554.093753 -194.267943 +L 554.845863 -191.525694 +L 555.680589 -188.783445 +L 556.595885 -186.041196 +L 557.587249 -183.298948 +L 558.647486 -180.556699 +L 559.766552 -177.81445 +L 560.931515 -175.072201 +L 562.126646 -172.329952 +L 563.333651 -169.587704 +L 564.532058 -166.845455 +L 565.699727 -164.103206 +L 566.813484 -161.360957 +L 567.849836 -158.618708 +L 568.785732 -155.87646 +L 569.599329 -153.134211 +L 570.270724 -150.391962 +L 570.782621 -147.649713 +L 571.120886 -144.907464 +L 571.275 -142.165215 +L 571.238365 -139.422967 +L 571.008488 -136.680718 +L 570.587031 -133.938469 +L 569.97974 -131.19622 +L 569.196257 -128.453971 +L 568.249838 -125.711723 +L 567.156972 -122.969474 +L 565.936916 -120.227225 +L 564.611163 -117.484976 +L 563.202838 -114.742727 +L 561.736054 -112.000479 +L 560.235231 -109.25823 +L 558.724412 -106.515981 +L 557.226585 -103.773732 +L 555.763066 -101.031483 +L 554.352944 -98.289235 +L 553.012626 -95.546986 +L 551.755515 -92.804737 +L 550.591806 -90.062488 +L 549.528441 -87.320239 +L 548.56919 -84.57799 +L 547.714861 -81.835742 +L 546.963615 -79.093493 +L 546.311362 -76.351244 +L 545.752202 -73.608995 +L 545.278893 -70.866746 +L 544.8833 -68.124498 +L 544.55683 -65.382249 +L 544.290799 -62.64 z " style="stroke: #1f1f1f; stroke-width: 1.25"/> </defs> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#m02bbbc5f4d" x="0" y="432" style="fill: #6b72da; stroke: #1f1f1f; stroke-width: 1.25"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#m86a62582cb" x="0" y="432" style="fill: #6b72da; stroke: #1f1f1f; stroke-width: 1.25"/> </g> </g> <g id="line2d_8"> - <path d="M 159.75 319.072548 -L 159.75 227.431737 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> + <path d="M 124.875 319.072548 +L 124.875 227.431737 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> </g> <g id="line2d_9"> - <path d="M 159.75 298.23669 -L 159.75 268.501202 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> + <path d="M 124.875 298.23669 +L 124.875 268.501202 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> </g> <g id="line2d_10"> - <path d="M 159.75 286.275325 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> + <path d="M 124.875 286.275325 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> <defs> - <path id="mf9f11531e7" d="M 2.34375 0 + <path id="md54d64858d" d="M 2.34375 0 L -2.34375 -0 " style="stroke: #ffffff; stroke-width: 1.125"/> </defs> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#mf9f11531e7" x="159.75" y="286.275325" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#md54d64858d" x="124.875" y="286.275325" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> </g> </g> <g id="line2d_11"> - <path d="M 299.25 308.075651 -L 299.25 169.622423 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> + <path d="M 166.725 103.716643 +L 222.525 103.716643 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.25; stroke-linecap: round"/> </g> <g id="line2d_12"> - <path d="M 299.25 271.823054 -L 299.25 226.646716 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> + <path d="M 264.375 308.075651 +L 264.375 169.622423 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> </g> <g id="line2d_13"> - <path d="M 299.25 246.422105 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#mf9f11531e7" x="299.25" y="246.422105" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> - </g> + <path d="M 264.375 271.823054 +L 264.375 226.646716 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> </g> <g id="line2d_14"> - <path d="M 438.75 200.219508 -L 438.75 103.716643 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> + <path d="M 264.375 246.422105 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#md54d64858d" x="264.375" y="246.422105" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> + </g> </g> <g id="line2d_15"> - <path d="M 438.75 161.192614 -L 438.75 127.664965 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> + <path d="M 306.225 103.716643 +L 362.025 103.716643 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.25; stroke-linecap: round"/> </g> <g id="line2d_16"> - <path d="M 438.75 142.398884 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#mf9f11531e7" x="438.75" y="142.398884" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> - </g> + <path d="M 403.875 200.219508 +L 403.875 103.716643 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> </g> <g id="line2d_17"> - <path d="M 578.25 320.483162 -L 578.25 167.578833 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> + <path d="M 403.875 161.192614 +L 403.875 127.664965 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> </g> <g id="line2d_18"> - <path d="M 578.25 299.134944 -L 578.25 245.125778 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> + <path d="M 403.875 142.398884 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#md54d64858d" x="403.875" y="142.398884" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> + </g> </g> <g id="line2d_19"> - <path d="M 578.25 279.0465 -" clip-path="url(#pd70db9afcb)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> - <g clip-path="url(#pd70db9afcb)"> - <use xlink:href="#mf9f11531e7" x="578.25" y="279.0465" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> + <path d="M 473.625 157.49533 +L 473.625 128.437491 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> + </g> + <g id="line2d_20"> + <path d="M 473.625 149.69742 +L 473.625 138.550565 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> + </g> + <g id="line2d_21"> + <path d="M 473.625 144.113191 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#md54d64858d" x="473.625" y="144.113191" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> + </g> + </g> + <g id="line2d_22"> + <path d="M 543.375 320.483162 +L 543.375 167.578833 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.875; stroke-linecap: round"/> + </g> + <g id="line2d_23"> + <path d="M 543.375 299.134944 +L 543.375 245.125778 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 5.625; stroke-linecap: round"/> + </g> + <g id="line2d_24"> + <path d="M 543.375 279.0465 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.5; stroke-linecap: round"/> + <g clip-path="url(#pc76b9a9648)"> + <use xlink:href="#md54d64858d" x="543.375" y="279.0465" style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.125"/> </g> </g> + <g id="line2d_25"> + <path d="M 585.225 103.716643 +L 641.025 103.716643 +" clip-path="url(#pc76b9a9648)" style="fill: none; stroke: #1f1f1f; stroke-width: 1.25; stroke-linecap: round"/> + </g> <g id="patch_3"> <path d="M 90 384.48 L 90 51.84 @@ -1801,7 +2298,7 @@ L 648 384.48 L 648 51.84 " style="fill: none; stroke: #cccccc; stroke-width: 1.25; stroke-linejoin: miter; stroke-linecap: square"/> </g> - <g id="text_14"> + <g id="text_18"> <!-- CCEI Distribution by Model --> <g style="fill: #262626" transform="translate(284.972656 45.84) scale(0.14 -0.14)"> <defs> @@ -1831,32 +2328,6 @@ Q 2603 4041 2063 4041 L 1100 4041 L 1100 541 z -" transform="scale(0.015625)"/> - <path id="ArialMT-62" d="M 941 0 -L 419 0 -L 419 4581 -L 981 4581 -L 981 2947 -Q 1338 3394 1891 3394 -Q 2197 3394 2470 3270 -Q 2744 3147 2920 2923 -Q 3097 2700 3197 2384 -Q 3297 2069 3297 1709 -Q 3297 856 2875 390 -Q 2453 -75 1863 -75 -Q 1275 -75 941 416 -L 941 0 -z -M 934 1684 -Q 934 1088 1097 822 -Q 1363 388 1816 388 -Q 2184 388 2453 708 -Q 2722 1028 2722 1663 -Q 2722 2313 2464 2622 -Q 2206 2931 1841 2931 -Q 1472 2931 1203 2611 -Q 934 2291 934 1684 -z " transform="scale(0.015625)"/> <path id="ArialMT-79" d="M 397 -1278 L 334 -750 @@ -1911,7 +2382,7 @@ z </g> </g> <defs> - <clipPath id="pd70db9afcb"> + <clipPath id="pc76b9a9648"> <rect x="90" y="51.84" width="558" height="332.64"/> </clipPath> </defs> diff --git a/src/investment/investment.py b/src/investment/investment.py index e1104bd..90ad7dd 100644 --- a/src/investment/investment.py +++ b/src/investment/investment.py @@ -9,31 +9,47 @@ from autogen_core import CancellationToken from autogen_ext.models.openai import OpenAIChatCompletionClient from pydantic import BaseModel from scipy.optimize import linprog +import requests +import json +import httpx +import re -# Load API key from environment variable +# Load API key from environment variables OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") if not OPENAI_API_KEY: raise ValueError("Missing OPENAI_API_KEY. Set it as an environment variable.") +PAGODA_API_KEY = os.getenv("PAGODA_API_KEY") +if not PAGODA_API_KEY: + raise ValueError("Missing PAGODA_API_KEY. Set it as an environment variable.") # Define the expected response format as a Pydantic model class AgentResponse(BaseModel): - assetA: int - assetB: int + assetA: float + assetB: float reasoning: str # The investment game simulation class class Investment: def __init__(self, model: str, temperature: float, max_retries: int = 3): - self.debug = False + self.debug = True self.model = model self.temperature = temperature self.strategy = random self.max_retries = max_retries # Maximum retry attempts in case of hallucinations - if not model == "random" and not model == "optimal": - is_openai_model = model.startswith("gpt") - base_url = "https://api.openai.com/v1" if is_openai_model else "http://localhost:11434/v1" + is_openai_model = model.startswith("gpt") + is_pagoda_model = ":" in model + base_url = ( + "https://api.openai.com/v1" if is_openai_model else + "https://ollama-ui.pagoda.liris.cnrs.fr/ollama/api/generate" if is_pagoda_model else + "http://localhost:11434/v1" + ) + self.base_url = base_url + + key = OPENAI_API_KEY if is_openai_model else PAGODA_API_KEY + + if not model in ["random", "optimal"]: model_info = { "temperature": self.temperature, "function_calling": True, @@ -46,13 +62,12 @@ class Investment: self.model_client = OpenAIChatCompletionClient( model=self.model, base_url=base_url, - api_key=OPENAI_API_KEY, + api_key=key, model_info=model_info, response_format=AgentResponse ) async def run(self, m: float, n: float) -> Dict: - """Runs the model if strategy is False, otherwise uses a classical method.""" if self.model == "random": return self.apply_random(m, n) if self.model == "optimal": @@ -66,11 +81,15 @@ class Investment: Your response should be in JSON format with `assetA`, `assetB`, and `reasoning`. """ + is_pagoda_model = ":" in self.model + if is_pagoda_model: + return await self.run_pagoda(instruction) + for attempt in range(self.max_retries): agent = AssistantAgent( name="Investor", model_client=self.model_client, - system_message="You are a helpful assistant. You will be given 25 rounds of decision-making tasks and will be responsible for making decisions. You should use your best judgment to come up with solutions that you like most." + system_message="You are a helpful assistant." ) response = await agent.on_messages( @@ -80,50 +99,110 @@ class Investment: try: response_data = response.chat_message.content - agent_response = AgentResponse.model_validate_json(response_data) # Parse JSON + agent_response = AgentResponse.model_validate_json(response_data) assetA, assetB = agent_response.assetA, agent_response.assetB if self.debug: print(f"Response (Attempt {attempt+1}): {response_data}") - # Validate values: ensure they sum to $100 considering the values M and N - if 0 <= assetA and assetA <= 100 and 0 <= assetB and assetB <= 100 and assetA + assetB == 100: + if 0 <= assetA <= 100 and 0 <= assetB <= 100 and assetA + assetB == 100: return agent_response.model_dump() - else: - if self.debug: - print(f"Invalid response detected (Attempt {attempt+1}): {response_data}") except Exception as e: print(f"Error parsing response (Attempt {attempt+1}): {e}") raise ValueError("Model failed to provide a valid response after multiple attempts.") - def apply_random(self, m: int, n: int) -> Dict: - """Generates a response.""" - assetA = random.randint(0, 100) - assetB = 100 - assetA - return { - "assetA": assetA, - "assetB": assetB, - "reasoning": "Random choice" + async def run_pagoda(self, instruction: str) -> Dict: + """Runs the Pagoda model using a direct request with improved response parsing.""" + url = self.base_url + headers = { + "Authorization": f"Bearer {PAGODA_API_KEY}", + "Content-Type": "application/json" } - - def apply_optimal(self, m: int, n: int) -> Dict: - """Generates a response.""" - if m > n: - assetA = 100 - assetB = 0 - else: - assetA = 0 - assetB = 100 - return { - "assetA": assetA, - "assetB": assetB, - "reasoning": "Optimal choice" + payload = { + "model": self.model, + "temperature": self.temperature, + "prompt": instruction, + "stream": False, + "response_format": "json" } - def generate_M_N(self): - while True: - M = random.uniform(0.1, 1) # Random value in [0.1, 1] - N = random.uniform(0.1, 1) # Random value in [0.1, 1] - if max(M, N) >= 0.5: # Ensure max(M, N) is at least 0.5 - return round(M, 1), round(N, 1) + # Print equivalent cURL command for debugging + curl_cmd = f""" + curl -X POST {url} \\ + -H "Authorization: Bearer {PAGODA_API_KEY}" \\ + -H "Content-Type: application/json" \\ + -d '{json.dumps(payload, indent=2)}' + """ + print("Run this cURL command in your terminal to manually test the request:\n") + print(curl_cmd) + + for attempt in range(self.max_retries): + try: + async with httpx.AsyncClient(verify=False, timeout=30) as client: + response = await client.post(url, headers=headers, json=payload) + response.raise_for_status() # Raise an error for HTTP status codes 4xx/5xx + response_data = response.json() + + if self.debug: + print(f"Raw response (Attempt {attempt + 1}): {response_data}") + + response_json = response_data.get("response") + if not response_json: + raise ValueError(f"Missing 'response' field (Attempt {attempt + 1})") + + # Print full response for debugging + if self.debug: + print(f"Full response content (Attempt {attempt + 1}): {response_data}") + + # Clean and parse JSON + if isinstance(response_json, str): + response_json = response_json.strip() + match = re.search(r'```json\n(.*?)\n```', response_json, re.DOTALL) + if match: + response_json = match.group(1) + + response_json = response_json.replace("\n", "").replace("\\", "") + + try: + response_dict = json.loads(response_json) + except json.JSONDecodeError: + print(f"Failed JSON: {response_json}") + raise ValueError(f"Failed to parse JSON (Attempt {attempt + 1})") + + elif isinstance(response_json, dict): + response_dict = response_json + else: + raise TypeError(f"Unexpected response type: {type(response_json)}") + + # Validate and adjust asset allocation + agent_response = AgentResponse(**response_dict) + assetA, assetB = round(agent_response.assetA), round(agent_response.assetB) + difference = 100 - (assetA + assetB) + if assetA >= assetB: + assetA += difference + else: + assetB += difference + + if assetA + assetB != 100: + raise ValueError(f"Invalid allocation sum: {assetA}, {assetB}") + + if not (0 <= assetA <= 100 and 0 <= assetB <= 100): + raise ValueError(f"Invalid asset allocation: {assetA}, {assetB}") + + return agent_response.dict() + + except httpx.HTTPStatusError as e: + print( + f"HTTP error from Pagoda API (Attempt {attempt + 1}): {e.response.status_code} - {e.response.text}") + except httpx.RequestError as e: + print(f"Request error in Pagoda API (Attempt {attempt + 1}): {e}") + except json.JSONDecodeError as e: + print(f"JSON parsing error (Attempt {attempt + 1}): {e}") + except ValueError as e: + print(f"Value error (Attempt {attempt + 1}): {e}") + except Exception as e: + print(f"Unexpected error (Attempt {attempt + 1}): {e}") + + raise ValueError("Pagoda model failed to provide a valid response after multiple attempts.") + async def run_rounds(self, nb_rounds: int) -> float: """Runs the investment game for n rounds and computes the CCEI.""" @@ -151,10 +230,26 @@ class Investment: print(f"choices: {choices}") print(f"budgets: {budgets}") print(f"CCEI: {ccei_value}") - return ccei_value + def apply_random(self, m: int, n: int) -> Dict: + assetA = random.randint(0, 100) + assetB = 100 - assetA + return {"assetA": assetA, "assetB": assetB, "reasoning": "Random choice"} + + def apply_optimal(self, m: int, n: int) -> Dict: + assetA = 100 if m > n else 0 + assetB = 100 - assetA + return {"assetA": assetA, "assetB": assetB, "reasoning": "Optimal choice"} + + def generate_M_N(self): + while True: + M = random.uniform(0.1, 1) + N = random.uniform(0.1, 1) + if max(M, N) >= 0.5: + return round(M, 1), round(N, 1) + def compute_ccei(self, prices, choices, budgets): """ Computes the Critical Cost Efficiency Index (CCEI). @@ -186,6 +281,6 @@ class Investment: # Run the async function and return the response if __name__ == "__main__": - game_agent = Investment(model="mistral-small", temperature=0.0) # Toggle strategy here + game_agent = Investment(model="mistral-small", temperature=0.0) response = asyncio.run(game_agent.run_rounds(30)) print(response) diff --git a/src/investment/investment_draw_violin.py b/src/investment/investment_draw_violin.py index a05303d..ffcc6fd 100644 --- a/src/investment/investment_draw_violin.py +++ b/src/investment/investment_draw_violin.py @@ -4,13 +4,26 @@ import matplotlib.pyplot as plt # Custom color palette color_palette = { - 'random' : '#333333', # Black - 'gpt-4.5-preview-2025-02-27': '#7abaff', # Blue - 'llama3': '#32a68c', # Green - 'mistral-small': '#ff6941', # Orange - 'deepseek-r1': '#5862ed' # Indigo + 'random': '#333333', # Black + 'gpt-4.5-preview-2025-02-27': '#7abaff', # BlueEscape + 'llama3': '#32a68c', # GreenFuture + 'llama3.3:latest': '#4b9f7d', # GreenLlama3.3 + 'mistral-small': '#ff6941', # WarmOrange + 'mixtral:8x7b': '#f1a61a', # YellowMixtral + 'deepseek-r1': '#5862ed', # InclusiveIndigo + 'deepseek-r1:7b': '#9a7bff' # PurpleDeepseek-r1:7b } +# Specify the order of models for the x-axis +model_order = [ + 'random', + 'gpt-4.5-preview-2025-02-27', + 'llama3', 'llama3.3:latest', # Place llama3 and llama3.3:latest together + 'mistral-small', 'mixtral:8x7b', # Bring mistral-small and mixtral:8x7b closer + 'deepseek-r1', 'deepseek-r1:7b' +] + + # Load CSV file file_path = "../../data/investment/investment.csv" # Update path df = pd.read_csv(file_path) @@ -29,7 +42,7 @@ sns.set(style="whitegrid") plt.figure(figsize=(10, 6)) # Draw violin plot (replacing boxplot with violinplot) -sns.violinplot(data=df, x="model", y="ccei", palette=color_palette) +sns.violinplot(data=df, x="model", y="ccei", palette=color_palette, order=model_order) # Add plot labels plt.title("CCEI Distribution by Model", fontsize=14) diff --git a/src/investment/investment_experiments.py b/src/investment/investment_experiments.py index a51056a..4348dc3 100644 --- a/src/investment/investment_experiments.py +++ b/src/investment/investment_experiments.py @@ -1,9 +1,9 @@ import asyncio import csv -from investment import Investment # Assuming this is in a separate file +from investment import Investment # Define models, temperature, and iterations -models = ["optimal", "random", "llama3", "mistral-small", "deepseek-r1"] # "gpt-4.5-preview-2025-02-27", "optimal", "random", "llama3", "mistral-small", "deepseek-r1" +models = ["deepseek-r1:7b"] # "gpt-4.5-preview-2025-02-27", "optimal", "random", "llama3", "mistral-small", "deepseek-r1", "mixtral:8x7b", "llama3.3:latest", temperature = 0.0 iterations = 30 output_file = "../../data/investment/investment.csv" -- GitLab