diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | doc/serdi-memory.svg | 258 | ||||
-rw-r--r-- | doc/serdi-throughput.svg | 270 | ||||
-rw-r--r-- | doc/serdi-time.svg | 267 | ||||
-rwxr-xr-x | scripts/serd_bench.py | 44 |
5 files changed, 453 insertions, 388 deletions
@@ -47,8 +47,8 @@ Turtle data generated by [sp2b][] on an AMD 1950x. Of the three, `serdi` is the fastest by a wide margin, and the only one that uses a constant amount of memory for all input sizes. -![Time](doc/serdi-time.svg) ![Throughput](doc/serdi-throughput.svg) +![Time](doc/serdi-time.svg) ![Memory](doc/serdi-memory.svg) Documentation diff --git a/doc/serdi-memory.svg b/doc/serdi-memory.svg index 11d6ed1d..db837a07 100644 --- a/doc/serdi-memory.svg +++ b/doc/serdi-memory.svg @@ -1,82 +1,88 @@ -<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="243.064" height="200.88" viewBox="0 0 182.298 150.66" xmlns="http://www.w3.org/2000/svg"> +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="254.918" height="200.88" viewBox="0 0 191.188 150.66" xmlns="http://www.w3.org/2000/svg"> <defs> <style> *{stroke-linejoin:round;stroke-linecap:butt} </style> </defs> <g id="figure_1"> - <path d="M0 150.66h182.298V0H0z" fill="#fff" id="patch_1"/> + <path d="M0 150.66h191.188V0H0z" fill="#fff" id="patch_1"/> <g id="axes_1"> - <path d="M31.255 117.11h142.043V17.32H31.255z" fill="#fff" id="patch_2"/> + <path d="M40.145 117.11h142.043V17.32H40.145z" fill="#fff" id="patch_2"/> <g id="matplotlib.axis_1"> <g id="xtick_1"> - <path d="M52.06 117.11V17.32" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_1"/> + <path d="M46.601 117.11V17.32" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_1"/> <g id="line2d_2"> <defs> - <path id="m2c59509df4" d="M0 0v3.5" stroke="#000" stroke-width=".75"/> + <path id="mf5f1bb61bc" d="M0 0v3.5" stroke="#000" stroke-width=".75"/> </defs> - <use xlink:href="#m2c59509df4" x="52.059" y="117.111" stroke="#000" stroke-width=".75"/> + <use xlink:href="#mf5f1bb61bc" x="46.601" y="117.111" stroke="#000" stroke-width=".75"/> </g> - <g transform="matrix(.07 0 0 -.07 46.67 129.43)" id="text_1"> + <g transform="matrix(.07 0 0 -.07 41.001 129.43)" id="text_1"> <defs> <path id="DejaVuSans-30" d="M2034 4250q-487 0-733-480-245-479-245-1442 0-959 245-1439 246-480 733-480 491 0 736 480 246 480 246 1439 0 963-246 1442-245 480-736 480zm0 500q785 0 1199-621 414-620 414-1801 0-1178-414-1799Q2819-91 2034-91q-784 0-1198 620-414 621-414 1799 0 1181 414 1801 414 621 1198 621z" transform="scale(.01563)"/> <path id="DejaVuSans-2e" d="M684 794h660V0H684v794z" transform="scale(.01563)"/> - <path id="DejaVuSans-32" d="M1228 531h2203V0H469v531q359 372 979 998 621 627 780 809 303 340 423 576 121 236 121 464 0 372-261 606-261 235-680 235-297 0-627-103-329-103-704-313v638q381 153 712 231 332 78 607 78 725 0 1156-363 431-362 431-968 0-288-108-546-107-257-392-607-78-91-497-524-418-433-1181-1211z" transform="scale(.01563)"/> + <path id="DejaVuSans-35" d="M691 4666h2478v-532H1269V2991q137 47 274 70 138 23 276 23 781 0 1237-428 457-428 457-1159 0-753-469-1171Q2575-91 1722-91q-294 0-599 50Q819 9 494 109v635q281-153 581-228t634-75q541 0 856 284 316 284 316 772 0 487-316 771-315 285-856 285-253 0-505-56-251-56-513-175v2344z" transform="scale(.01563)"/> </defs> <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-32" transform="translate(89.91 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_2"> - <path d="M80.755 117.11V17.32" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_3"/> - <use xlink:href="#m2c59509df4" x="80.755" y="117.111" stroke="#000" stroke-width=".75" id="line2d_4"/> - <g transform="matrix(.07 0 0 -.07 75.155 129.43)" id="text_2"> + <path d="M72.427 117.11V17.32" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_3"/> + <use xlink:href="#mf5f1bb61bc" x="72.427" y="117.111" stroke="#000" stroke-width=".75" id="line2d_4"/> + <g transform="matrix(.07 0 0 -.07 66.827 129.43)" id="text_2"> <defs> - <path id="DejaVuSans-34" d="M2419 4116L825 1625h1594v2491zm-166 550h794V1625h666v-525h-666V0h-628v1100H313v609l1940 2957z" transform="scale(.01563)"/> + <path id="DejaVuSans-31" d="M794 531h1031v3560L703 3866v575l1116 225h631V531h1031V0H794v531z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-34" transform="translate(95.41 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_3"> - <path d="M109.45 117.11V17.32" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_5"/> - <use xlink:href="#m2c59509df4" x="109.45" y="117.111" stroke="#000" stroke-width=".75" id="line2d_6"/> - <g transform="matrix(.07 0 0 -.07 103.85 129.43)" id="text_3"> - <defs> - <path id="DejaVuSans-36" d="M2113 2584q-425 0-674-291-248-290-248-796 0-503 248-796 249-292 674-292t673 292q248 293 248 796 0 506-248 796-248 291-673 291zm1253 1979v-575q-238 112-480 171-242 60-480 60-625 0-955-422-329-422-376-1275 184 272 462 417 279 145 613 145 703 0 1111-427 408-426 408-1160 0-719-425-1154Q2819-91 2113-91q-810 0-1238 620-428 621-428 1799 0 1106 525 1764t1409 658q238 0 480-47t505-140z" transform="scale(.01563)"/> - </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> - <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-36" transform="translate(95.41 .781)"/> + <path d="M98.253 117.11V17.32" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_5"/> + <use xlink:href="#mf5f1bb61bc" x="98.253" y="117.111" stroke="#000" stroke-width=".75" id="line2d_6"/> + <g transform="matrix(.07 0 0 -.07 92.653 129.43)" id="text_3"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .094)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .094)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .094)"/> </g> </g> <g id="xtick_4"> - <path d="M138.146 117.11V17.32" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_7"/> - <use xlink:href="#m2c59509df4" x="138.146" y="117.111" stroke="#000" stroke-width=".75" id="line2d_8"/> - <g transform="matrix(.07 0 0 -.07 132.651 129.43)" id="text_4"> + <path d="M124.08 117.11V17.32" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_7"/> + <use xlink:href="#mf5f1bb61bc" x="124.08" y="117.111" stroke="#000" stroke-width=".75" id="line2d_8"/> + <g transform="matrix(.07 0 0 -.07 118.48 129.43)" id="text_4"> <defs> - <path id="DejaVuSans-38" d="M2034 2216q-450 0-708-241-257-241-257-662 0-422 257-663 258-241 708-241t709 242q260 243 260 662 0 421-258 662-257 241-711 241zm-631 268q-406 100-633 378-226 279-226 679 0 559 398 884 399 325 1092 325 697 0 1094-325t397-884q0-400-227-679-226-278-629-378 456-106 710-416 255-309 255-755 0-679-414-1042Q2806-91 2034-91q-771 0-1186 362-414 363-414 1042 0 446 256 755 257 310 713 416zm-231 997q0-362 226-565 227-203 636-203 407 0 636 203 230 203 230 565 0 363-230 566-229 203-636 203-409 0-636-203-226-203-226-566z" transform="scale(.01563)"/> + <path id="DejaVuSans-32" d="M1228 531h2203V0H469v531q359 372 979 998 621 627 780 809 303 340 423 576 121 236 121 464 0 372-261 606-261 235-680 235-297 0-627-103-329-103-704-313v638q381 153 712 231 332 78 607 78 725 0 1156-363 431-362 431-968 0-288-108-546-107-257-392-607-78-91-497-524-418-433-1181-1211z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-38" transform="translate(92.785 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_5"> - <path d="M166.842 117.11V17.32" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_9"/> - <use xlink:href="#m2c59509df4" x="166.842" y="117.111" stroke="#000" stroke-width=".75" id="line2d_10"/> - <g transform="matrix(.07 0 0 -.07 161.242 129.43)" id="text_5"> + <path d="M149.906 117.11V17.32" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_9"/> + <use xlink:href="#mf5f1bb61bc" x="149.906" y="117.111" stroke="#000" stroke-width=".75" id="line2d_10"/> + <g transform="matrix(.07 0 0 -.07 144.306 129.43)" id="text_5"> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> + </g> + </g> + <g id="xtick_6"> + <path d="M175.732 117.11V17.32" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_11"/> + <use xlink:href="#mf5f1bb61bc" x="175.732" y="117.111" stroke="#000" stroke-width=".75" id="line2d_12"/> + <g transform="matrix(.07 0 0 -.07 170.132 129.43)" id="text_6"> <defs> - <path id="DejaVuSans-31" d="M794 531h1031v3560L703 3866v575l1116 225h631V531h1031V0H794v531z" transform="scale(.01563)"/> + <path id="DejaVuSans-33" d="M2597 2516q453-97 707-404 255-306 255-756 0-690-475-1069Q2609-91 1734-91q-293 0-604 58T488 141v609q262-153 574-231 313-78 654-78 593 0 904 234t311 681q0 413-289 645-289 233-804 233h-544v519h569q465 0 712 186t247 536q0 359-255 551-254 193-729 193-260 0-557-57-297-56-653-174v562q360 100 674 150t592 50q719 0 1137-327 419-326 419-882 0-388-222-655t-631-370z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-31" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-33" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> - <g transform="matrix(.07 0 0 -.07 82.036 140.204)" id="text_6"> + <g transform="matrix(.07 0 0 -.07 90.926 140.204)" id="text_7"> <defs> <path id="DejaVuSans-53" d="M3425 4513v-616q-359 172-678 256-319 85-616 85-515 0-795-200t-280-569q0-310 186-468 186-157 705-254l381-78q706-135 1042-474t336-907q0-679-455-1029Q2797-91 1919-91q-331 0-705 75-373 75-773 222v650q384-215 753-325 369-109 725-109 540 0 834 212 294 213 294 607 0 343-211 537t-692 291l-385 75q-706 140-1022 440-315 300-315 835 0 619 436 975t1201 356q329 0 669-60 341-59 697-177z" transform="scale(.01563)"/> <path id="DejaVuSans-74" d="M1172 4494v-994h1184v-447H1172V1153q0-428 117-550t477-122h590V0h-590q-666 0-919 248-253 249-253 905v1900H172v447h422v994h578z" transform="scale(.01563)"/> @@ -97,61 +103,68 @@ <use xlink:href="#DejaVuSans-74" x="487.012"/> <use xlink:href="#DejaVuSans-73" x="526.221"/> </g> - <g transform="matrix(.07 0 0 -.07 155.098 139.204)" id="text_7"> + <g transform="matrix(.07 0 0 -.07 163.988 139.204)" id="text_8"> <defs> <path id="DejaVuSans-d7" d="M4488 3438L3059 2003 4488 575l-372-378-1435 1434L1247 197 878 575l1425 1428L878 3438l369 378 1434-1435 1435 1435 372-378z" transform="scale(.01563)"/> - <path id="DejaVuSans-37" d="M525 4666h3000v-269L1831 0h-659l1594 4134H525v532z" transform="scale(.01563)"/> + <path id="DejaVuSans-36" d="M2113 2584q-425 0-674-291-248-290-248-796 0-503 248-796 249-292 674-292t673 292q248 293 248 796 0 506-248 796-248 291-673 291zm1253 1979v-575q-238 112-480 171-242 60-480 60-625 0-955-422-329-422-376-1275 184 272 462 417 279 145 613 145 703 0 1111-427 408-426 408-1160 0-719-425-1154Q2819-91 2113-91q-810 0-1238 620-428 621-428 1799 0 1106 525 1764t1409 658q238 0 480-47t505-140z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-d7" transform="translate(0 .684)"/> - <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .684)"/> - <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .684)"/> - <use xlink:href="#DejaVuSans-37" transform="matrix(.7 0 0 .7 211.992 38.966)"/> + <use xlink:href="#DejaVuSans-d7" transform="translate(0 .766)"/> + <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .766)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .766)"/> + <use xlink:href="#DejaVuSans-36" transform="matrix(.7 0 0 .7 211.992 39.047)"/> </g> </g> <g id="matplotlib.axis_2"> <g id="ytick_1"> - <path d="M31.255 112.602h142.043" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_11"/> - <g id="line2d_12"> + <path d="M40.145 117.11h142.043" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_13"/> + <g id="line2d_14"> <defs> - <path id="m8dbbf5985f" d="M0 0h-3.5" stroke="#000" stroke-width=".75"/> + <path id="m1a67c07686" d="M0 0h-3.5" stroke="#000" stroke-width=".75"/> </defs> - <use xlink:href="#m8dbbf5985f" x="31.255" y="112.602" stroke="#000" stroke-width=".75"/> + <use xlink:href="#m1a67c07686" x="40.145" y="117.111" stroke="#000" stroke-width=".75"/> </g> - <use xlink:href="#DejaVuSans-30" transform="matrix(.07 0 0 -.07 19.775 115.207)" id="text_8"/> + <use xlink:href="#DejaVuSans-30" transform="matrix(.07 0 0 -.07 28.665 119.716)" id="text_9"/> </g> <g id="ytick_2"> - <path d="M31.255 93.554h142.043" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_13"/> - <use xlink:href="#m8dbbf5985f" x="31.255" y="93.554" stroke="#000" stroke-width=".75" id="line2d_14"/> - <use xlink:href="#DejaVuSans-31" transform="matrix(.07 0 0 -.07 19.775 96.207)" id="text_9"/> + <path d="M40.145 93.455h142.043" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_15"/> + <use xlink:href="#m1a67c07686" x="40.145" y="93.455" stroke="#000" stroke-width=".75" id="line2d_16"/> + <g transform="matrix(.07 0 0 -.07 19.775 96.114)" id="text_10"> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> + </g> </g> <g id="ytick_3"> - <path d="M31.255 74.506h142.043" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_15"/> - <use xlink:href="#m8dbbf5985f" x="31.255" y="74.506" stroke="#000" stroke-width=".75" id="line2d_16"/> - <use xlink:href="#DejaVuSans-32" transform="matrix(.07 0 0 -.07 19.775 77.111)" id="text_10"/> - </g> - <g id="ytick_4"> - <path d="M31.255 55.459h142.043" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_17"/> - <use xlink:href="#m8dbbf5985f" x="31.255" y="55.459" stroke="#000" stroke-width=".75" id="line2d_18"/> - <g transform="matrix(.07 0 0 -.07 19.775 58.118)" id="text_11"> + <path d="M40.145 69.799h142.043" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_17"/> + <use xlink:href="#m1a67c07686" x="40.145" y="69.799" stroke="#000" stroke-width=".75" id="line2d_18"/> + <g transform="matrix(.07 0 0 -.07 19.775 72.458)" id="text_11"> <defs> - <path id="DejaVuSans-33" d="M2597 2516q453-97 707-404 255-306 255-756 0-690-475-1069Q2609-91 1734-91q-293 0-604 58T488 141v609q262-153 574-231 313-78 654-78 593 0 904 234t311 681q0 413-289 645-289 233-804 233h-544v519h569q465 0 712 186t247 536q0 359-255 551-254 193-729 193-260 0-557-57-297-56-653-174v562q360 100 674 150t592 50q719 0 1137-327 419-326 419-882 0-388-222-655t-631-370z" transform="scale(.01563)"/> + <path id="DejaVuSans-34" d="M2419 4116L825 1625h1594v2491zm-166 550h794V1625h666v-525h-666V0h-628v1100H313v609l1940 2957z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-33" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-34" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> </g> </g> - <g id="ytick_5"> - <path d="M31.255 36.41h142.043" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_19"/> - <use xlink:href="#m8dbbf5985f" x="31.255" y="36.411" stroke="#000" stroke-width=".75" id="line2d_20"/> - <use xlink:href="#DejaVuSans-34" transform="matrix(.07 0 0 -.07 19.775 39.064)" id="text_12"/> + <g id="ytick_4"> + <path d="M40.145 46.143h142.043" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_19"/> + <use xlink:href="#m1a67c07686" x="40.145" y="46.143" stroke="#000" stroke-width=".75" id="line2d_20"/> + <g transform="matrix(.07 0 0 -.07 19.775 48.802)" id="text_12"> + <use xlink:href="#DejaVuSans-36" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> + </g> </g> - <g id="ytick_6"> - <path d="M31.255 17.363h142.043" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_21"/> - <use xlink:href="#m8dbbf5985f" x="31.255" y="17.363" stroke="#000" stroke-width=".75" id="line2d_22"/> - <g transform="matrix(.07 0 0 -.07 19.775 20.023)" id="text_13"> + <g id="ytick_5"> + <path d="M40.145 22.487h142.043" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_21"/> + <use xlink:href="#m1a67c07686" x="40.145" y="22.487" stroke="#000" stroke-width=".75" id="line2d_22"/> + <g transform="matrix(.07 0 0 -.07 19.775 25.146)" id="text_13"> <defs> - <path id="DejaVuSans-35" d="M691 4666h2478v-532H1269V2991q137 47 274 70 138 23 276 23 781 0 1237-428 457-428 457-1159 0-753-469-1171Q2575-91 1722-91q-294 0-599 50Q819 9 494 109v635q281-153 581-228t634-75q541 0 856 284 316 284 316 772 0 487-316 771-315 285-856 285-253 0-505-56-251-56-513-175v2344z" transform="scale(.01563)"/> + <path id="DejaVuSans-38" d="M2034 2216q-450 0-708-241-257-241-257-662 0-422 257-663 258-241 708-241t709 242q260 243 260 662 0 421-258 662-257 241-711 241zm-631 268q-406 100-633 378-226 279-226 679 0 559 398 884 399 325 1092 325 697 0 1094-325t397-884q0-400-227-679-226-278-629-378 456-106 710-416 255-309 255-755 0-679-414-1042Q2806-91 2034-91q-771 0-1186 362-414 363-414 1042 0 446 256 755 257 310 713 416zm-231 997q0-362 226-565 227-203 636-203 407 0 636 203 230 203 230 565 0 363-230 566-229 203-636 203-409 0-636-203-226-203-226-566z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-35" transform="translate(0 .094)"/> + <use xlink:href="#DejaVuSans-38" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> </g> </g> <g transform="matrix(0 -.07 -.07 0 14.319 77.037)" id="text_14"> @@ -165,81 +178,66 @@ <use xlink:href="#DejaVuSans-65" x="166.992"/> <use xlink:href="#DejaVuSans-73" x="228.516"/> </g> - <g transform="matrix(.07 0 0 -.07 31.255 14.319)" id="text_15"> - <defs> - <path id="DejaVuSans-39" d="M703 97v575q238-113 481-172 244-59 479-59 625 0 954 420 330 420 377 1277-181-269-460-413-278-144-615-144-700 0-1108 423-408 424-408 1159 0 718 425 1152 425 435 1131 435 810 0 1236-621 427-620 427-1801 0-1103-524-1761Q2575-91 1691-91q-238 0-482 47Q966 3 703 97zm1256 1978q425 0 673 290 249 291 249 798 0 503-249 795-248 292-673 292t-673-292q-248-292-248-795 0-507 248-798 248-290 673-290z" transform="scale(.01563)"/> - </defs> + <g transform="matrix(.07 0 0 -.07 40.145 14.319)" id="text_15"> <use xlink:href="#DejaVuSans-d7" transform="translate(0 .766)"/> <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .766)"/> <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .766)"/> - <use xlink:href="#DejaVuSans-39" transform="matrix(.7 0 0 .7 211.992 39.047)"/> + <use xlink:href="#DejaVuSans-36" transform="matrix(.7 0 0 .7 211.992 39.047)"/> </g> </g> <g id="line2d_23"> - <path d="M37.711 112.57l14.348.003 14.348.002 14.348-.003h28.695l14.348-.001 14.348.002h14.348l14.348-.003" clip-path="url(#p10c715e517)" fill="none" stroke="#1f77b4" stroke-linecap="square"/> + <path d="M46.601 116.9l25.826-.022 25.826.022 25.827-.023 25.826.019 25.826-.019" clip-path="url(#p693c8de2e3)" fill="none" stroke="#1f77b4" stroke-linecap="square"/> <defs> - <path id="me569cba688" d="M0 1.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" stroke="#1f77b4"/> + <path id="m00c9f72e7c" d="M0 1.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" stroke="#1f77b4"/> </defs> - <g clip-path="url(#p10c715e517)" fill="#1f77b4" stroke="#1f77b4"> - <use xlink:href="#me569cba688" x="37.711" y="112.571"/> - <use xlink:href="#me569cba688" x="52.059" y="112.573"/> - <use xlink:href="#me569cba688" x="66.407" y="112.575"/> - <use xlink:href="#me569cba688" x="80.755" y="112.572"/> - <use xlink:href="#me569cba688" x="95.103" y="112.572"/> - <use xlink:href="#me569cba688" x="109.45" y="112.572"/> - <use xlink:href="#me569cba688" x="123.798" y="112.571"/> - <use xlink:href="#me569cba688" x="138.146" y="112.573"/> - <use xlink:href="#me569cba688" x="152.494" y="112.573"/> - <use xlink:href="#me569cba688" x="166.842" y="112.57"/> + <g clip-path="url(#p693c8de2e3)" fill="#1f77b4" stroke="#1f77b4"> + <use xlink:href="#m00c9f72e7c" x="46.601" y="116.9"/> + <use xlink:href="#m00c9f72e7c" x="72.427" y="116.878"/> + <use xlink:href="#m00c9f72e7c" x="98.253" y="116.9"/> + <use xlink:href="#m00c9f72e7c" x="124.08" y="116.877"/> + <use xlink:href="#m00c9f72e7c" x="149.906" y="116.896"/> + <use xlink:href="#m00c9f72e7c" x="175.732" y="116.877"/> </g> </g> <g id="line2d_24"> - <path d="M37.711 103.216l14.348-9.138 14.348-9.103 14.348-9.065 14.348-9.091 14.347-9.034 14.348-9.015 14.348-8.959 14.348-9.006 14.348-8.95" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> + <path d="M46.601 100.297l25.826-15.285 25.826-15.16 25.827-15.029 25.826-15.026 25.826-14.855" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> <defs> - <path id="ma7ee05176d" d="M-1.5 1.5h3v-3h-3z" stroke="#ff7f0e" stroke-linejoin="miter"/> + <path id="m948d9e2144" d="M-1.5 1.5h3v-3h-3z" stroke="#ff7f0e" stroke-linejoin="miter"/> </defs> - <g clip-path="url(#p10c715e517)" fill="#ff7f0e" stroke="#ff7f0e"> - <use xlink:href="#ma7ee05176d" x="37.711" y="103.216"/> - <use xlink:href="#ma7ee05176d" x="52.059" y="94.078"/> - <use xlink:href="#ma7ee05176d" x="66.407" y="84.975"/> - <use xlink:href="#ma7ee05176d" x="80.755" y="75.91"/> - <use xlink:href="#ma7ee05176d" x="95.103" y="66.819"/> - <use xlink:href="#ma7ee05176d" x="109.45" y="57.785"/> - <use xlink:href="#ma7ee05176d" x="123.798" y="48.77"/> - <use xlink:href="#ma7ee05176d" x="138.146" y="39.811"/> - <use xlink:href="#ma7ee05176d" x="152.494" y="30.805"/> - <use xlink:href="#ma7ee05176d" x="166.842" y="21.855"/> + <g clip-path="url(#p693c8de2e3)" fill="#ff7f0e" stroke="#ff7f0e"> + <use xlink:href="#m948d9e2144" x="46.601" y="100.297"/> + <use xlink:href="#m948d9e2144" x="72.427" y="85.012"/> + <use xlink:href="#m948d9e2144" x="98.253" y="69.853"/> + <use xlink:href="#m948d9e2144" x="124.08" y="54.823"/> + <use xlink:href="#m948d9e2144" x="149.906" y="39.797"/> + <use xlink:href="#m948d9e2144" x="175.732" y="24.942"/> </g> </g> <g id="line2d_25"> - <path d="M37.711 101.372L52.06 98.31l14.348-2.952 14.348 2.53 14.348-3.355 14.347.01 14.348-.179 14.348.132 14.348.016 14.348-.519" clip-path="url(#p10c715e517)" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> + <path d="M46.601 54.37l25.826-8.34 25.826-11.668 25.827-14.61 25.826 2.507 25.826.2" clip-path="url(#p693c8de2e3)" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> <defs> - <path id="m87094ea7c4" d="M0 1.5l1.5-3h-3z" stroke="#2ca02c" stroke-linejoin="miter"/> + <path id="m769183cefa" d="M0 1.5l1.5-3h-3z" stroke="#2ca02c" stroke-linejoin="miter"/> </defs> - <g clip-path="url(#p10c715e517)" fill="#2ca02c" stroke="#2ca02c"> - <use xlink:href="#m87094ea7c4" x="37.711" y="101.372"/> - <use xlink:href="#m87094ea7c4" x="52.059" y="98.309"/> - <use xlink:href="#m87094ea7c4" x="66.407" y="95.357"/> - <use xlink:href="#m87094ea7c4" x="80.755" y="97.887"/> - <use xlink:href="#m87094ea7c4" x="95.103" y="94.532"/> - <use xlink:href="#m87094ea7c4" x="109.45" y="94.542"/> - <use xlink:href="#m87094ea7c4" x="123.798" y="94.363"/> - <use xlink:href="#m87094ea7c4" x="138.146" y="94.495"/> - <use xlink:href="#m87094ea7c4" x="152.494" y="94.511"/> - <use xlink:href="#m87094ea7c4" x="166.842" y="93.992"/> + <g clip-path="url(#p693c8de2e3)" fill="#2ca02c" stroke="#2ca02c"> + <use xlink:href="#m769183cefa" x="46.601" y="54.37"/> + <use xlink:href="#m769183cefa" x="72.427" y="46.031"/> + <use xlink:href="#m769183cefa" x="98.253" y="34.362"/> + <use xlink:href="#m769183cefa" x="124.08" y="19.753"/> + <use xlink:href="#m769183cefa" x="149.906" y="22.259"/> + <use xlink:href="#m769183cefa" x="175.732" y="22.46"/> </g> </g> - <path d="M31.255 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_3"/> - <path d="M173.298 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_4"/> - <path d="M31.255 117.11h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_5"/> - <path d="M31.255 17.319h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_6"/> + <path d="M40.145 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_3"/> + <path d="M182.188 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_4"/> + <path d="M40.145 117.11h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_5"/> + <path d="M40.145 17.319h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_6"/> <g id="legend_1"> - <path d="M36.155 50.243h45.64q1.4 0 1.4-1.4V22.219q0-1.4-1.4-1.4h-45.64q-1.4 0-1.4 1.4v26.624q0 1.4 1.4 1.4z" fill="#fff" opacity=".8" stroke="#ccc" id="patch_7"/> + <path d="M131.648 113.61h45.64q1.4 0 1.4-1.4V85.588q0-1.4-1.4-1.4h-45.64q-1.4 0-1.4 1.4v26.624q0 1.4 1.4 1.4z" fill="#fff" opacity=".8" stroke="#ccc" id="patch_7"/> <g id="line2d_26"> - <path d="M37.555 26.488h14" fill="none" stroke="#1f77b4" stroke-linecap="square"/> - <use xlink:href="#me569cba688" x="44.555" y="26.488" fill="#1f77b4" stroke="#1f77b4"/> + <path d="M133.048 89.856h14" fill="none" stroke="#1f77b4" stroke-linecap="square"/> + <use xlink:href="#m00c9f72e7c" x="140.048" y="89.856" fill="#1f77b4" stroke="#1f77b4"/> </g> - <g transform="matrix(.07 0 0 -.07 57.155 28.938)" id="text_16"> + <g transform="matrix(.07 0 0 -.07 152.648 92.306)" id="text_16"> <defs> <path id="DejaVuSans-72" d="M2631 2963q-97 56-211 82-114 27-251 27-488 0-749-317t-261-911V0H581v3500h578v-544q182 319 472 473 291 155 707 155 59 0 131-8 72-7 159-23l3-590z" transform="scale(.01563)"/> <path id="DejaVuSans-64" d="M2906 2969v1894h575V0h-575v525q-181-312-458-464-276-152-664-152-634 0-1033 506-398 507-398 1332t398 1331q399 506 1033 506 388 0 664-152 277-151 458-463zM947 1747q0-634 261-995t717-361q456 0 718 361 263 361 263 995t-263 995q-262 361-718 361t-717-361q-261-361-261-995z" transform="scale(.01563)"/> @@ -252,10 +250,10 @@ <use xlink:href="#DejaVuSans-69" x="216.463"/> </g> <g id="line2d_27"> - <path d="M37.555 35.013h14" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> - <use xlink:href="#ma7ee05176d" x="44.555" y="35.013" fill="#ff7f0e" stroke="#ff7f0e"/> + <path d="M133.048 98.38h14" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> + <use xlink:href="#m948d9e2144" x="140.048" y="98.38" fill="#ff7f0e" stroke="#ff7f0e"/> </g> - <g transform="matrix(.07 0 0 -.07 57.155 37.462)" id="text_17"> + <g transform="matrix(.07 0 0 -.07 152.648 100.83)" id="text_17"> <defs> <path id="DejaVuSans-70" d="M1159 525v-1856H581v4831h578v-531q182 312 458 463 277 152 661 152 638 0 1036-506 399-506 399-1331T3314 415Q2916-91 2278-91q-384 0-661 152-276 152-458 464zm1957 1222q0 634-261 995t-717 361q-457 0-718-361t-261-995q0-634 261-995t718-361q456 0 717 361t261 995z" transform="scale(.01563)"/> </defs> @@ -267,10 +265,10 @@ <use xlink:href="#DejaVuSans-72" x="290.869"/> </g> <g id="line2d_28"> - <path d="M37.555 43.537h14" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> - <use xlink:href="#m87094ea7c4" x="44.555" y="43.537" fill="#2ca02c" stroke="#2ca02c"/> + <path d="M133.048 106.905h14" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> + <use xlink:href="#m769183cefa" x="140.048" y="106.905" fill="#2ca02c" stroke="#2ca02c"/> </g> - <g transform="matrix(.07 0 0 -.07 57.155 45.987)" id="text_18"> + <g transform="matrix(.07 0 0 -.07 152.648 109.355)" id="text_18"> <defs> <path id="DejaVuSans-6f" d="M1959 3097q-462 0-731-361t-269-989q0-628 267-989 268-361 733-361 460 0 728 362 269 363 269 988 0 622-269 986-268 364-728 364zm0 487q750 0 1178-488 429-487 429-1349 0-859-429-1349Q2709-91 1959-91q-753 0-1180 489-426 490-426 1349 0 862 426 1349 427 488 1180 488z" transform="scale(.01563)"/> </defs> @@ -283,8 +281,8 @@ </g> </g> <defs> - <clipPath id="p10c715e517"> - <path d="M31.255 17.319h142.044v99.792H31.255z"/> + <clipPath id="p693c8de2e3"> + <path d="M40.145 17.319h142.044v99.792H40.145z"/> </clipPath> </defs> </svg> diff --git a/doc/serdi-throughput.svg b/doc/serdi-throughput.svg index 33654985..e32c3355 100644 --- a/doc/serdi-throughput.svg +++ b/doc/serdi-throughput.svg @@ -1,82 +1,88 @@ -<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="243.064" height="200.88" viewBox="0 0 182.298 150.66" xmlns="http://www.w3.org/2000/svg"> +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="254.918" height="200.88" viewBox="0 0 191.188 150.66" xmlns="http://www.w3.org/2000/svg"> <defs> <style> *{stroke-linejoin:round;stroke-linecap:butt} </style> </defs> <g id="figure_1"> - <path d="M0 150.66h182.298V0H0z" fill="#fff" id="patch_1"/> + <path d="M0 150.66h191.188V0H0z" fill="#fff" id="patch_1"/> <g id="axes_1"> - <path d="M31.255 117.11h142.043V17.32H31.255z" fill="#fff" id="patch_2"/> + <path d="M40.145 117.11h142.043V17.32H40.145z" fill="#fff" id="patch_2"/> <g id="matplotlib.axis_1"> <g id="xtick_1"> - <path d="M52.06 117.11V17.32" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_1"/> + <path d="M46.601 117.11V17.32" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_1"/> <g id="line2d_2"> <defs> - <path id="m7e832739e1" d="M0 0v3.5" stroke="#000" stroke-width=".75"/> + <path id="m04c57fa67f" d="M0 0v3.5" stroke="#000" stroke-width=".75"/> </defs> - <use xlink:href="#m7e832739e1" x="52.059" y="117.111" stroke="#000" stroke-width=".75"/> + <use xlink:href="#m04c57fa67f" x="46.601" y="117.111" stroke="#000" stroke-width=".75"/> </g> - <g transform="matrix(.07 0 0 -.07 46.67 129.43)" id="text_1"> + <g transform="matrix(.07 0 0 -.07 41.001 129.43)" id="text_1"> <defs> <path id="DejaVuSans-30" d="M2034 4250q-487 0-733-480-245-479-245-1442 0-959 245-1439 246-480 733-480 491 0 736 480 246 480 246 1439 0 963-246 1442-245 480-736 480zm0 500q785 0 1199-621 414-620 414-1801 0-1178-414-1799Q2819-91 2034-91q-784 0-1198 620-414 621-414 1799 0 1181 414 1801 414 621 1198 621z" transform="scale(.01563)"/> <path id="DejaVuSans-2e" d="M684 794h660V0H684v794z" transform="scale(.01563)"/> - <path id="DejaVuSans-32" d="M1228 531h2203V0H469v531q359 372 979 998 621 627 780 809 303 340 423 576 121 236 121 464 0 372-261 606-261 235-680 235-297 0-627-103-329-103-704-313v638q381 153 712 231 332 78 607 78 725 0 1156-363 431-362 431-968 0-288-108-546-107-257-392-607-78-91-497-524-418-433-1181-1211z" transform="scale(.01563)"/> + <path id="DejaVuSans-35" d="M691 4666h2478v-532H1269V2991q137 47 274 70 138 23 276 23 781 0 1237-428 457-428 457-1159 0-753-469-1171Q2575-91 1722-91q-294 0-599 50Q819 9 494 109v635q281-153 581-228t634-75q541 0 856 284 316 284 316 772 0 487-316 771-315 285-856 285-253 0-505-56-251-56-513-175v2344z" transform="scale(.01563)"/> </defs> <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-32" transform="translate(89.91 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_2"> - <path d="M80.755 117.11V17.32" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_3"/> - <use xlink:href="#m7e832739e1" x="80.755" y="117.111" stroke="#000" stroke-width=".75" id="line2d_4"/> - <g transform="matrix(.07 0 0 -.07 75.155 129.43)" id="text_2"> + <path d="M72.427 117.11V17.32" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_3"/> + <use xlink:href="#m04c57fa67f" x="72.427" y="117.111" stroke="#000" stroke-width=".75" id="line2d_4"/> + <g transform="matrix(.07 0 0 -.07 66.827 129.43)" id="text_2"> <defs> - <path id="DejaVuSans-34" d="M2419 4116L825 1625h1594v2491zm-166 550h794V1625h666v-525h-666V0h-628v1100H313v609l1940 2957z" transform="scale(.01563)"/> + <path id="DejaVuSans-31" d="M794 531h1031v3560L703 3866v575l1116 225h631V531h1031V0H794v531z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-34" transform="translate(95.41 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_3"> - <path d="M109.45 117.11V17.32" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_5"/> - <use xlink:href="#m7e832739e1" x="109.45" y="117.111" stroke="#000" stroke-width=".75" id="line2d_6"/> - <g transform="matrix(.07 0 0 -.07 103.85 129.43)" id="text_3"> - <defs> - <path id="DejaVuSans-36" d="M2113 2584q-425 0-674-291-248-290-248-796 0-503 248-796 249-292 674-292t673 292q248 293 248 796 0 506-248 796-248 291-673 291zm1253 1979v-575q-238 112-480 171-242 60-480 60-625 0-955-422-329-422-376-1275 184 272 462 417 279 145 613 145 703 0 1111-427 408-426 408-1160 0-719-425-1154Q2819-91 2113-91q-810 0-1238 620-428 621-428 1799 0 1106 525 1764t1409 658q238 0 480-47t505-140z" transform="scale(.01563)"/> - </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> - <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-36" transform="translate(95.41 .781)"/> + <path d="M98.253 117.11V17.32" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_5"/> + <use xlink:href="#m04c57fa67f" x="98.253" y="117.111" stroke="#000" stroke-width=".75" id="line2d_6"/> + <g transform="matrix(.07 0 0 -.07 92.653 129.43)" id="text_3"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .094)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .094)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .094)"/> </g> </g> <g id="xtick_4"> - <path d="M138.146 117.11V17.32" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_7"/> - <use xlink:href="#m7e832739e1" x="138.146" y="117.111" stroke="#000" stroke-width=".75" id="line2d_8"/> - <g transform="matrix(.07 0 0 -.07 132.651 129.43)" id="text_4"> + <path d="M124.08 117.11V17.32" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_7"/> + <use xlink:href="#m04c57fa67f" x="124.08" y="117.111" stroke="#000" stroke-width=".75" id="line2d_8"/> + <g transform="matrix(.07 0 0 -.07 118.48 129.43)" id="text_4"> <defs> - <path id="DejaVuSans-38" d="M2034 2216q-450 0-708-241-257-241-257-662 0-422 257-663 258-241 708-241t709 242q260 243 260 662 0 421-258 662-257 241-711 241zm-631 268q-406 100-633 378-226 279-226 679 0 559 398 884 399 325 1092 325 697 0 1094-325t397-884q0-400-227-679-226-278-629-378 456-106 710-416 255-309 255-755 0-679-414-1042Q2806-91 2034-91q-771 0-1186 362-414 363-414 1042 0 446 256 755 257 310 713 416zm-231 997q0-362 226-565 227-203 636-203 407 0 636 203 230 203 230 565 0 363-230 566-229 203-636 203-409 0-636-203-226-203-226-566z" transform="scale(.01563)"/> + <path id="DejaVuSans-32" d="M1228 531h2203V0H469v531q359 372 979 998 621 627 780 809 303 340 423 576 121 236 121 464 0 372-261 606-261 235-680 235-297 0-627-103-329-103-704-313v638q381 153 712 231 332 78 607 78 725 0 1156-363 431-362 431-968 0-288-108-546-107-257-392-607-78-91-497-524-418-433-1181-1211z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-38" transform="translate(92.785 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_5"> - <path d="M166.842 117.11V17.32" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_9"/> - <use xlink:href="#m7e832739e1" x="166.842" y="117.111" stroke="#000" stroke-width=".75" id="line2d_10"/> - <g transform="matrix(.07 0 0 -.07 161.242 129.43)" id="text_5"> + <path d="M149.906 117.11V17.32" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_9"/> + <use xlink:href="#m04c57fa67f" x="149.906" y="117.111" stroke="#000" stroke-width=".75" id="line2d_10"/> + <g transform="matrix(.07 0 0 -.07 144.306 129.43)" id="text_5"> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> + </g> + </g> + <g id="xtick_6"> + <path d="M175.732 117.11V17.32" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_11"/> + <use xlink:href="#m04c57fa67f" x="175.732" y="117.111" stroke="#000" stroke-width=".75" id="line2d_12"/> + <g transform="matrix(.07 0 0 -.07 170.132 129.43)" id="text_6"> <defs> - <path id="DejaVuSans-31" d="M794 531h1031v3560L703 3866v575l1116 225h631V531h1031V0H794v531z" transform="scale(.01563)"/> + <path id="DejaVuSans-33" d="M2597 2516q453-97 707-404 255-306 255-756 0-690-475-1069Q2609-91 1734-91q-293 0-604 58T488 141v609q262-153 574-231 313-78 654-78 593 0 904 234t311 681q0 413-289 645-289 233-804 233h-544v519h569q465 0 712 186t247 536q0 359-255 551-254 193-729 193-260 0-557-57-297-56-653-174v562q360 100 674 150t592 50q719 0 1137-327 419-326 419-882 0-388-222-655t-631-370z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-31" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-33" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> - <g transform="matrix(.07 0 0 -.07 82.036 140.204)" id="text_6"> + <g transform="matrix(.07 0 0 -.07 90.926 140.204)" id="text_7"> <defs> <path id="DejaVuSans-53" d="M3425 4513v-616q-359 172-678 256-319 85-616 85-515 0-795-200t-280-569q0-310 186-468 186-157 705-254l381-78q706-135 1042-474t336-907q0-679-455-1029Q2797-91 1919-91q-331 0-705 75-373 75-773 222v650q384-215 753-325 369-109 725-109 540 0 834 212 294 213 294 607 0 343-211 537t-692 291l-385 75q-706 140-1022 440-315 300-315 835 0 619 436 975t1201 356q329 0 669-60 341-59 697-177z" transform="scale(.01563)"/> <path id="DejaVuSans-74" d="M1172 4494v-994h1184v-447H1172V1153q0-428 117-550t477-122h590V0h-590q-666 0-919 248-253 249-253 905v1900H172v447h422v994h578z" transform="scale(.01563)"/> @@ -97,44 +103,71 @@ <use xlink:href="#DejaVuSans-74" x="487.012"/> <use xlink:href="#DejaVuSans-73" x="526.221"/> </g> - <g transform="matrix(.07 0 0 -.07 155.098 139.204)" id="text_7"> + <g transform="matrix(.07 0 0 -.07 163.988 139.204)" id="text_8"> <defs> <path id="DejaVuSans-d7" d="M4488 3438L3059 2003 4488 575l-372-378-1435 1434L1247 197 878 575l1425 1428L878 3438l369 378 1434-1435 1435 1435 372-378z" transform="scale(.01563)"/> - <path id="DejaVuSans-37" d="M525 4666h3000v-269L1831 0h-659l1594 4134H525v532z" transform="scale(.01563)"/> + <path id="DejaVuSans-36" d="M2113 2584q-425 0-674-291-248-290-248-796 0-503 248-796 249-292 674-292t673 292q248 293 248 796 0 506-248 796-248 291-673 291zm1253 1979v-575q-238 112-480 171-242 60-480 60-625 0-955-422-329-422-376-1275 184 272 462 417 279 145 613 145 703 0 1111-427 408-426 408-1160 0-719-425-1154Q2819-91 2113-91q-810 0-1238 620-428 621-428 1799 0 1106 525 1764t1409 658q238 0 480-47t505-140z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-d7" transform="translate(0 .684)"/> - <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .684)"/> - <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .684)"/> - <use xlink:href="#DejaVuSans-37" transform="matrix(.7 0 0 .7 211.992 38.966)"/> + <use xlink:href="#DejaVuSans-d7" transform="translate(0 .766)"/> + <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .766)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .766)"/> + <use xlink:href="#DejaVuSans-36" transform="matrix(.7 0 0 .7 211.992 39.047)"/> </g> </g> <g id="matplotlib.axis_2"> <g id="ytick_1"> - <path d="M31.255 99.453h142.043" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_11"/> - <g id="line2d_12"> + <path d="M40.145 117.11h142.043" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_13"/> + <g id="line2d_14"> <defs> - <path id="m09346f1a52" d="M0 0h-3.5" stroke="#000" stroke-width=".75"/> + <path id="mce6c36552d" d="M0 0h-3.5" stroke="#000" stroke-width=".75"/> </defs> - <use xlink:href="#m09346f1a52" x="31.255" y="99.453" stroke="#000" stroke-width=".75"/> + <use xlink:href="#mce6c36552d" x="40.145" y="117.111" stroke="#000" stroke-width=".75"/> </g> - <use xlink:href="#DejaVuSans-32" transform="matrix(.07 0 0 -.07 19.775 102.058)" id="text_8"/> + <use xlink:href="#DejaVuSans-30" transform="matrix(.07 0 0 -.07 28.665 119.716)" id="text_9"/> </g> <g id="ytick_2"> - <path d="M31.255 76.065h142.043" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_13"/> - <use xlink:href="#m09346f1a52" x="31.255" y="76.065" stroke="#000" stroke-width=".75" id="line2d_14"/> - <use xlink:href="#DejaVuSans-34" transform="matrix(.07 0 0 -.07 19.775 78.718)" id="text_9"/> + <path d="M40.145 94.33h142.043" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_15"/> + <use xlink:href="#mce6c36552d" x="40.145" y="94.329" stroke="#000" stroke-width=".75" id="line2d_16"/> + <g transform="matrix(.07 0 0 -.07 19.775 96.989)" id="text_10"> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> + </g> </g> <g id="ytick_3"> - <path d="M31.255 52.676h142.043" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_15"/> - <use xlink:href="#m09346f1a52" x="31.255" y="52.676" stroke="#000" stroke-width=".75" id="line2d_16"/> - <use xlink:href="#DejaVuSans-36" transform="matrix(.07 0 0 -.07 19.775 55.28)" id="text_10"/> + <path d="M40.145 71.547h142.043" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_17"/> + <use xlink:href="#mce6c36552d" x="40.145" y="71.547" stroke="#000" stroke-width=".75" id="line2d_18"/> + <g transform="matrix(.07 0 0 -.07 19.775 74.207)" id="text_11"> + <defs> + <path id="DejaVuSans-34" d="M2419 4116L825 1625h1594v2491zm-166 550h794V1625h666v-525h-666V0h-628v1100H313v609l1940 2957z" transform="scale(.01563)"/> + </defs> + <use xlink:href="#DejaVuSans-34" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> + </g> </g> <g id="ytick_4"> - <path d="M31.255 29.287h142.043" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_17"/> - <use xlink:href="#m09346f1a52" x="31.255" y="29.287" stroke="#000" stroke-width=".75" id="line2d_18"/> - <use xlink:href="#DejaVuSans-38" transform="matrix(.07 0 0 -.07 19.775 31.892)" id="text_11"/> + <path d="M40.145 48.765h142.043" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_19"/> + <use xlink:href="#mce6c36552d" x="40.145" y="48.765" stroke="#000" stroke-width=".75" id="line2d_20"/> + <g transform="matrix(.07 0 0 -.07 19.775 51.425)" id="text_12"> + <use xlink:href="#DejaVuSans-36" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> + </g> + </g> + <g id="ytick_5"> + <path d="M40.145 25.984h142.043" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_21"/> + <use xlink:href="#mce6c36552d" x="40.145" y="25.984" stroke="#000" stroke-width=".75" id="line2d_22"/> + <g transform="matrix(.07 0 0 -.07 19.775 28.643)" id="text_13"> + <defs> + <path id="DejaVuSans-38" d="M2034 2216q-450 0-708-241-257-241-257-662 0-422 257-663 258-241 708-241t709 242q260 243 260 662 0 421-258 662-257 241-711 241zm-631 268q-406 100-633 378-226 279-226 679 0 559 398 884 399 325 1092 325 697 0 1094-325t397-884q0-400-227-679-226-278-629-378 456-106 710-416 255-309 255-755 0-679-414-1042Q2806-91 2034-91q-771 0-1186 362-414 363-414 1042 0 446 256 755 257 310 713 416zm-231 997q0-362 226-565 227-203 636-203 407 0 636 203 230 203 230 565 0 363-230 566-229 203-636 203-409 0-636-203-226-203-226-566z" transform="scale(.01563)"/> + </defs> + <use xlink:href="#DejaVuSans-38" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(127.246 .781)"/> + </g> </g> - <g transform="matrix(0 -.07 -.07 0 14.319 92.683)" id="text_12"> + <g transform="matrix(0 -.07 -.07 0 14.319 92.683)" id="text_14"> <defs> <path id="DejaVuSans-2f" d="M1625 4666h531L531-594H0l1625 5260z" transform="scale(.01563)"/> </defs> @@ -153,81 +186,66 @@ <use xlink:href="#DejaVuSans-20" x="643.799"/> <use xlink:href="#DejaVuSans-73" x="675.586"/> </g> - <g transform="matrix(.07 0 0 -.07 31.255 14.319)" id="text_13"> - <defs> - <path id="DejaVuSans-35" d="M691 4666h2478v-532H1269V2991q137 47 274 70 138 23 276 23 781 0 1237-428 457-428 457-1159 0-753-469-1171Q2575-91 1722-91q-294 0-599 50Q819 9 494 109v635q281-153 581-228t634-75q541 0 856 284 316 284 316 772 0 487-316 771-315 285-856 285-253 0-505-56-251-56-513-175v2344z" transform="scale(.01563)"/> - </defs> - <use xlink:href="#DejaVuSans-d7" transform="translate(0 .684)"/> - <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .684)"/> - <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .684)"/> - <use xlink:href="#DejaVuSans-35" transform="matrix(.7 0 0 .7 211.992 38.966)"/> + <g transform="matrix(.07 0 0 -.07 40.145 14.319)" id="text_15"> + <use xlink:href="#DejaVuSans-d7" transform="translate(0 .766)"/> + <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .766)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .766)"/> + <use xlink:href="#DejaVuSans-33" transform="matrix(.7 0 0 .7 211.992 39.047)"/> </g> </g> - <g id="line2d_19"> - <path d="M37.711 25.39l14.348-1.234 14.348.962 14.348-2.014 14.348-1.25 14.347 2.163 14.348.789 14.348-1.915 14.348 2.045 14.348.858" clip-path="url(#p881b2e6b17)" fill="none" stroke="#1f77b4" stroke-linecap="square"/> + <g id="line2d_23"> + <path d="M46.601 22.187l25.826 2.315 25.826-2.845 25.827 2.467 25.826-3.874 25.826-.497" clip-path="url(#p7ddd47be6d)" fill="none" stroke="#1f77b4" stroke-linecap="square"/> <defs> - <path id="m05a9ecb041" d="M0 1.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" stroke="#1f77b4"/> + <path id="m480bfd2a44" d="M0 1.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" stroke="#1f77b4"/> </defs> - <g clip-path="url(#p881b2e6b17)" fill="#1f77b4" stroke="#1f77b4"> - <use xlink:href="#m05a9ecb041" x="37.711" y="25.389"/> - <use xlink:href="#m05a9ecb041" x="52.059" y="24.156"/> - <use xlink:href="#m05a9ecb041" x="66.407" y="25.118"/> - <use xlink:href="#m05a9ecb041" x="80.755" y="23.104"/> - <use xlink:href="#m05a9ecb041" x="95.103" y="21.855"/> - <use xlink:href="#m05a9ecb041" x="109.45" y="24.017"/> - <use xlink:href="#m05a9ecb041" x="123.798" y="24.806"/> - <use xlink:href="#m05a9ecb041" x="138.146" y="22.891"/> - <use xlink:href="#m05a9ecb041" x="152.494" y="24.936"/> - <use xlink:href="#m05a9ecb041" x="166.842" y="25.794"/> + <g clip-path="url(#p7ddd47be6d)" fill="#1f77b4" stroke="#1f77b4"> + <use xlink:href="#m480bfd2a44" x="46.601" y="22.187"/> + <use xlink:href="#m480bfd2a44" x="72.427" y="24.502"/> + <use xlink:href="#m480bfd2a44" x="98.253" y="21.657"/> + <use xlink:href="#m480bfd2a44" x="124.08" y="24.124"/> + <use xlink:href="#m480bfd2a44" x="149.906" y="20.25"/> + <use xlink:href="#m480bfd2a44" x="175.732" y="19.753"/> </g> </g> - <g id="line2d_20"> - <path d="M37.711 108.615l14.348.289 14.348.413 14.348-.097 14.348.488 14.347-.195 14.348.187 14.348.242 14.348-.21 14.348.092" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> + <g id="line2d_24"> + <path d="M46.601 103.32l25.826.468 25.826-.141 25.827.49 25.826-.247 25.826.311" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> <defs> - <path id="m2f1d957fc5" d="M-1.5 1.5h3v-3h-3z" stroke="#ff7f0e" stroke-linejoin="miter"/> + <path id="m91453323a4" d="M-1.5 1.5h3v-3h-3z" stroke="#ff7f0e" stroke-linejoin="miter"/> </defs> - <g clip-path="url(#p881b2e6b17)" fill="#ff7f0e" stroke="#ff7f0e"> - <use xlink:href="#m2f1d957fc5" x="37.711" y="108.615"/> - <use xlink:href="#m2f1d957fc5" x="52.059" y="108.904"/> - <use xlink:href="#m2f1d957fc5" x="66.407" y="109.317"/> - <use xlink:href="#m2f1d957fc5" x="80.755" y="109.22"/> - <use xlink:href="#m2f1d957fc5" x="95.103" y="109.708"/> - <use xlink:href="#m2f1d957fc5" x="109.45" y="109.513"/> - <use xlink:href="#m2f1d957fc5" x="123.798" y="109.7"/> - <use xlink:href="#m2f1d957fc5" x="138.146" y="109.942"/> - <use xlink:href="#m2f1d957fc5" x="152.494" y="109.732"/> - <use xlink:href="#m2f1d957fc5" x="166.842" y="109.824"/> + <g clip-path="url(#p7ddd47be6d)" fill="#ff7f0e" stroke="#ff7f0e"> + <use xlink:href="#m91453323a4" x="46.601" y="103.321"/> + <use xlink:href="#m91453323a4" x="72.427" y="103.788"/> + <use xlink:href="#m91453323a4" x="98.253" y="103.647"/> + <use xlink:href="#m91453323a4" x="124.08" y="104.137"/> + <use xlink:href="#m91453323a4" x="149.906" y="103.89"/> + <use xlink:href="#m91453323a4" x="175.732" y="104.201"/> </g> </g> - <g id="line2d_21"> - <path d="M37.711 112.575l14.348-5.03 14.348-2.315 14.348-2.192 14.348-.626 14.347-.923 14.348-.97 14.348-.264 14.348-1.41 14.348.228" clip-path="url(#p881b2e6b17)" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> + <g id="line2d_25"> + <path d="M46.601 112.048l25.826-3.167 25.826-2.68 25.827-1.418 25.826-1.31 25.826-1.194" clip-path="url(#p7ddd47be6d)" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> <defs> - <path id="m24bf662d63" d="M0 1.5l1.5-3h-3z" stroke="#2ca02c" stroke-linejoin="miter"/> + <path id="md2a3e2c3c4" d="M0 1.5l1.5-3h-3z" stroke="#2ca02c" stroke-linejoin="miter"/> </defs> - <g clip-path="url(#p881b2e6b17)" fill="#2ca02c" stroke="#2ca02c"> - <use xlink:href="#m24bf662d63" x="37.711" y="112.575"/> - <use xlink:href="#m24bf662d63" x="52.059" y="107.545"/> - <use xlink:href="#m24bf662d63" x="66.407" y="105.23"/> - <use xlink:href="#m24bf662d63" x="80.755" y="103.038"/> - <use xlink:href="#m24bf662d63" x="95.103" y="102.412"/> - <use xlink:href="#m24bf662d63" x="109.45" y="101.489"/> - <use xlink:href="#m24bf662d63" x="123.798" y="100.519"/> - <use xlink:href="#m24bf662d63" x="138.146" y="100.255"/> - <use xlink:href="#m24bf662d63" x="152.494" y="98.846"/> - <use xlink:href="#m24bf662d63" x="166.842" y="99.073"/> + <g clip-path="url(#p7ddd47be6d)" fill="#2ca02c" stroke="#2ca02c"> + <use xlink:href="#md2a3e2c3c4" x="46.601" y="112.048"/> + <use xlink:href="#md2a3e2c3c4" x="72.427" y="108.881"/> + <use xlink:href="#md2a3e2c3c4" x="98.253" y="106.2"/> + <use xlink:href="#md2a3e2c3c4" x="124.08" y="104.783"/> + <use xlink:href="#md2a3e2c3c4" x="149.906" y="103.472"/> + <use xlink:href="#md2a3e2c3c4" x="175.732" y="102.279"/> </g> </g> - <path d="M31.255 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_3"/> - <path d="M173.298 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_4"/> - <path d="M31.255 117.11h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_5"/> - <path d="M31.255 17.319h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_6"/> + <path d="M40.145 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_3"/> + <path d="M182.188 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_4"/> + <path d="M40.145 117.11h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_5"/> + <path d="M40.145 17.319h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_6"/> <g id="legend_1"> - <path d="M122.758 81.927h45.64q1.4 0 1.4-1.4V53.903q0-1.4-1.4-1.4h-45.64q-1.4 0-1.4 1.4v26.624q0 1.4 1.4 1.4z" fill="#fff" opacity=".8" stroke="#ccc" id="patch_7"/> - <g id="line2d_22"> - <path d="M124.158 58.172h14" fill="none" stroke="#1f77b4" stroke-linecap="square"/> - <use xlink:href="#m05a9ecb041" x="131.158" y="58.172" fill="#1f77b4" stroke="#1f77b4"/> + <path d="M131.648 81.927h45.64q1.4 0 1.4-1.4V53.903q0-1.4-1.4-1.4h-45.64q-1.4 0-1.4 1.4v26.624q0 1.4 1.4 1.4z" fill="#fff" opacity=".8" stroke="#ccc" id="patch_7"/> + <g id="line2d_26"> + <path d="M133.048 58.172h14" fill="none" stroke="#1f77b4" stroke-linecap="square"/> + <use xlink:href="#m480bfd2a44" x="140.048" y="58.172" fill="#1f77b4" stroke="#1f77b4"/> </g> - <g transform="matrix(.07 0 0 -.07 143.758 60.622)" id="text_14"> + <g transform="matrix(.07 0 0 -.07 152.648 60.622)" id="text_16"> <defs> <path id="DejaVuSans-72" d="M2631 2963q-97 56-211 82-114 27-251 27-488 0-749-317t-261-911V0H581v3500h578v-544q182 319 472 473 291 155 707 155 59 0 131-8 72-7 159-23l3-590z" transform="scale(.01563)"/> <path id="DejaVuSans-64" d="M2906 2969v1894h575V0h-575v525q-181-312-458-464-276-152-664-152-634 0-1033 506-398 507-398 1332t398 1331q399 506 1033 506 388 0 664-152 277-151 458-463zM947 1747q0-634 261-995t717-361q456 0 718 361 263 361 263 995t-263 995q-262 361-718 361t-717-361q-261-361-261-995z" transform="scale(.01563)"/> @@ -239,11 +257,11 @@ <use xlink:href="#DejaVuSans-64" x="152.986"/> <use xlink:href="#DejaVuSans-69" x="216.463"/> </g> - <g id="line2d_23"> - <path d="M124.158 66.696h14" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> - <use xlink:href="#m2f1d957fc5" x="131.158" y="66.696" fill="#ff7f0e" stroke="#ff7f0e"/> + <g id="line2d_27"> + <path d="M133.048 66.696h14" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> + <use xlink:href="#m91453323a4" x="140.048" y="66.696" fill="#ff7f0e" stroke="#ff7f0e"/> </g> - <g transform="matrix(.07 0 0 -.07 143.758 69.146)" id="text_15"> + <g transform="matrix(.07 0 0 -.07 152.648 69.146)" id="text_17"> <defs> <path id="DejaVuSans-70" d="M1159 525v-1856H581v4831h578v-531q182 312 458 463 277 152 661 152 638 0 1036-506 399-506 399-1331T3314 415Q2916-91 2278-91q-384 0-661 152-276 152-458 464zm1957 1222q0 634-261 995t-717 361q-457 0-718-361t-261-995q0-634 261-995t718-361q456 0 717 361t261 995z" transform="scale(.01563)"/> </defs> @@ -254,11 +272,11 @@ <use xlink:href="#DejaVuSans-65" x="229.346"/> <use xlink:href="#DejaVuSans-72" x="290.869"/> </g> - <g id="line2d_24"> - <path d="M124.158 75.221h14" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> - <use xlink:href="#m24bf662d63" x="131.158" y="75.221" fill="#2ca02c" stroke="#2ca02c"/> + <g id="line2d_28"> + <path d="M133.048 75.221h14" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> + <use xlink:href="#md2a3e2c3c4" x="140.048" y="75.221" fill="#2ca02c" stroke="#2ca02c"/> </g> - <g transform="matrix(.07 0 0 -.07 143.758 77.671)" id="text_16"> + <g transform="matrix(.07 0 0 -.07 152.648 77.671)" id="text_18"> <defs> <path id="DejaVuSans-6f" d="M1959 3097q-462 0-731-361t-269-989q0-628 267-989 268-361 733-361 460 0 728 362 269 363 269 988 0 622-269 986-268 364-728 364zm0 487q750 0 1178-488 429-487 429-1349 0-859-429-1349Q2709-91 1959-91q-753 0-1180 489-426 490-426 1349 0 862 426 1349 427 488 1180 488z" transform="scale(.01563)"/> </defs> @@ -271,8 +289,8 @@ </g> </g> <defs> - <clipPath id="p881b2e6b17"> - <path d="M31.255 17.319h142.044v99.792H31.255z"/> + <clipPath id="p7ddd47be6d"> + <path d="M40.145 17.319h142.044v99.792H40.145z"/> </clipPath> </defs> </svg> diff --git a/doc/serdi-time.svg b/doc/serdi-time.svg index 30c1340e..3b8e5523 100644 --- a/doc/serdi-time.svg +++ b/doc/serdi-time.svg @@ -1,82 +1,88 @@ -<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="243.064" height="200.88" viewBox="0 0 182.298 150.66" xmlns="http://www.w3.org/2000/svg"> +<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="252.024" height="200.88" viewBox="0 0 189.018 150.66" xmlns="http://www.w3.org/2000/svg"> <defs> <style> *{stroke-linejoin:round;stroke-linecap:butt} </style> </defs> <g id="figure_1"> - <path d="M0 150.66h182.298V0H0z" fill="#fff" id="patch_1"/> + <path d="M0 150.66h189.018V0H0z" fill="#fff" id="patch_1"/> <g id="axes_1"> - <path d="M31.255 117.11h142.043V17.32H31.255z" fill="#fff" id="patch_2"/> + <path d="M37.975 117.11h142.043V17.32H37.975z" fill="#fff" id="patch_2"/> <g id="matplotlib.axis_1"> <g id="xtick_1"> - <path d="M52.06 117.11V17.32" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_1"/> + <path d="M44.431 117.11V17.32" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_1"/> <g id="line2d_2"> <defs> - <path id="mf55c704fa2" d="M0 0v3.5" stroke="#000" stroke-width=".75"/> + <path id="ma4d2dccd2c" d="M0 0v3.5" stroke="#000" stroke-width=".75"/> </defs> - <use xlink:href="#mf55c704fa2" x="52.059" y="117.111" stroke="#000" stroke-width=".75"/> + <use xlink:href="#ma4d2dccd2c" x="44.431" y="117.111" stroke="#000" stroke-width=".75"/> </g> - <g transform="matrix(.07 0 0 -.07 46.67 129.43)" id="text_1"> + <g transform="matrix(.07 0 0 -.07 38.831 129.43)" id="text_1"> <defs> <path id="DejaVuSans-30" d="M2034 4250q-487 0-733-480-245-479-245-1442 0-959 245-1439 246-480 733-480 491 0 736 480 246 480 246 1439 0 963-246 1442-245 480-736 480zm0 500q785 0 1199-621 414-620 414-1801 0-1178-414-1799Q2819-91 2034-91q-784 0-1198 620-414 621-414 1799 0 1181 414 1801 414 621 1198 621z" transform="scale(.01563)"/> <path id="DejaVuSans-2e" d="M684 794h660V0H684v794z" transform="scale(.01563)"/> - <path id="DejaVuSans-32" d="M1228 531h2203V0H469v531q359 372 979 998 621 627 780 809 303 340 423 576 121 236 121 464 0 372-261 606-261 235-680 235-297 0-627-103-329-103-704-313v638q381 153 712 231 332 78 607 78 725 0 1156-363 431-362 431-968 0-288-108-546-107-257-392-607-78-91-497-524-418-433-1181-1211z" transform="scale(.01563)"/> + <path id="DejaVuSans-35" d="M691 4666h2478v-532H1269V2991q137 47 274 70 138 23 276 23 781 0 1237-428 457-428 457-1159 0-753-469-1171Q2575-91 1722-91q-294 0-599 50Q819 9 494 109v635q281-153 581-228t634-75q541 0 856 284 316 284 316 772 0 487-316 771-315 285-856 285-253 0-505-56-251-56-513-175v2344z" transform="scale(.01563)"/> </defs> <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-32" transform="translate(89.91 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_2"> - <path d="M80.755 117.11V17.32" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_3"/> - <use xlink:href="#mf55c704fa2" x="80.755" y="117.111" stroke="#000" stroke-width=".75" id="line2d_4"/> - <g transform="matrix(.07 0 0 -.07 75.155 129.43)" id="text_2"> + <path d="M70.257 117.11V17.32" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_3"/> + <use xlink:href="#ma4d2dccd2c" x="70.257" y="117.111" stroke="#000" stroke-width=".75" id="line2d_4"/> + <g transform="matrix(.07 0 0 -.07 64.657 129.43)" id="text_2"> <defs> - <path id="DejaVuSans-34" d="M2419 4116L825 1625h1594v2491zm-166 550h794V1625h666v-525h-666V0h-628v1100H313v609l1940 2957z" transform="scale(.01563)"/> + <path id="DejaVuSans-31" d="M794 531h1031v3560L703 3866v575l1116 225h631V531h1031V0H794v531z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-34" transform="translate(95.41 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_3"> - <path d="M109.45 117.11V17.32" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_5"/> - <use xlink:href="#mf55c704fa2" x="109.45" y="117.111" stroke="#000" stroke-width=".75" id="line2d_6"/> - <g transform="matrix(.07 0 0 -.07 103.85 129.43)" id="text_3"> - <defs> - <path id="DejaVuSans-36" d="M2113 2584q-425 0-674-291-248-290-248-796 0-503 248-796 249-292 674-292t673 292q248 293 248 796 0 506-248 796-248 291-673 291zm1253 1979v-575q-238 112-480 171-242 60-480 60-625 0-955-422-329-422-376-1275 184 272 462 417 279 145 613 145 703 0 1111-427 408-426 408-1160 0-719-425-1154Q2819-91 2113-91q-810 0-1238 620-428 621-428 1799 0 1106 525 1764t1409 658q238 0 480-47t505-140z" transform="scale(.01563)"/> - </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> - <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-36" transform="translate(95.41 .781)"/> + <path d="M96.083 117.11V17.32" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_5"/> + <use xlink:href="#ma4d2dccd2c" x="96.083" y="117.111" stroke="#000" stroke-width=".75" id="line2d_6"/> + <g transform="matrix(.07 0 0 -.07 90.483 129.43)" id="text_3"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .094)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .094)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .094)"/> </g> </g> <g id="xtick_4"> - <path d="M138.146 117.11V17.32" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_7"/> - <use xlink:href="#mf55c704fa2" x="138.146" y="117.111" stroke="#000" stroke-width=".75" id="line2d_8"/> - <g transform="matrix(.07 0 0 -.07 132.651 129.43)" id="text_4"> + <path d="M121.91 117.11V17.32" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_7"/> + <use xlink:href="#ma4d2dccd2c" x="121.91" y="117.111" stroke="#000" stroke-width=".75" id="line2d_8"/> + <g transform="matrix(.07 0 0 -.07 116.31 129.43)" id="text_4"> <defs> - <path id="DejaVuSans-38" d="M2034 2216q-450 0-708-241-257-241-257-662 0-422 257-663 258-241 708-241t709 242q260 243 260 662 0 421-258 662-257 241-711 241zm-631 268q-406 100-633 378-226 279-226 679 0 559 398 884 399 325 1092 325 697 0 1094-325t397-884q0-400-227-679-226-278-629-378 456-106 710-416 255-309 255-755 0-679-414-1042Q2806-91 2034-91q-771 0-1186 362-414 363-414 1042 0 446 256 755 257 310 713 416zm-231 997q0-362 226-565 227-203 636-203 407 0 636 203 230 203 230 565 0 363-230 566-229 203-636 203-409 0-636-203-226-203-226-566z" transform="scale(.01563)"/> + <path id="DejaVuSans-32" d="M1228 531h2203V0H469v531q359 372 979 998 621 627 780 809 303 340 423 576 121 236 121 464 0 372-261 606-261 235-680 235-297 0-627-103-329-103-704-313v638q381 153 712 231 332 78 607 78 725 0 1156-363 431-362 431-968 0-288-108-546-107-257-392-607-78-91-497-524-418-433-1181-1211z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> - <use xlink:href="#DejaVuSans-38" transform="translate(92.785 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> <g id="xtick_5"> - <path d="M166.842 117.11V17.32" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_9"/> - <use xlink:href="#mf55c704fa2" x="166.842" y="117.111" stroke="#000" stroke-width=".75" id="line2d_10"/> - <g transform="matrix(.07 0 0 -.07 161.242 129.43)" id="text_5"> + <path d="M147.736 117.11V17.32" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_9"/> + <use xlink:href="#ma4d2dccd2c" x="147.736" y="117.111" stroke="#000" stroke-width=".75" id="line2d_10"/> + <g transform="matrix(.07 0 0 -.07 142.136 129.43)" id="text_5"> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> + </g> + </g> + <g id="xtick_6"> + <path d="M173.562 117.11V17.32" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_11"/> + <use xlink:href="#ma4d2dccd2c" x="173.562" y="117.111" stroke="#000" stroke-width=".75" id="line2d_12"/> + <g transform="matrix(.07 0 0 -.07 167.962 129.43)" id="text_6"> <defs> - <path id="DejaVuSans-31" d="M794 531h1031v3560L703 3866v575l1116 225h631V531h1031V0H794v531z" transform="scale(.01563)"/> + <path id="DejaVuSans-33" d="M2597 2516q453-97 707-404 255-306 255-756 0-690-475-1069Q2609-91 1734-91q-293 0-604 58T488 141v609q262-153 574-231 313-78 654-78 593 0 904 234t311 681q0 413-289 645-289 233-804 233h-544v519h569q465 0 712 186t247 536q0 359-255 551-254 193-729 193-260 0-557-57-297-56-653-174v562q360 100 674 150t592 50q719 0 1137-327 419-326 419-882 0-388-222-655t-631-370z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-31" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-33" transform="translate(0 .781)"/> <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> </g> - <g transform="matrix(.07 0 0 -.07 82.036 140.204)" id="text_6"> + <g transform="matrix(.07 0 0 -.07 88.756 140.204)" id="text_7"> <defs> <path id="DejaVuSans-53" d="M3425 4513v-616q-359 172-678 256-319 85-616 85-515 0-795-200t-280-569q0-310 186-468 186-157 705-254l381-78q706-135 1042-474t336-907q0-679-455-1029Q2797-91 1919-91q-331 0-705 75-373 75-773 222v650q384-215 753-325 369-109 725-109 540 0 834 212 294 213 294 607 0 343-211 537t-692 291l-385 75q-706 140-1022 440-315 300-315 835 0 619 436 975t1201 356q329 0 669-60 341-59 697-177z" transform="scale(.01563)"/> <path id="DejaVuSans-74" d="M1172 4494v-994h1184v-447H1172V1153q0-428 117-550t477-122h590V0h-590q-666 0-919 248-253 249-253 905v1900H172v447h422v994h578z" transform="scale(.01563)"/> @@ -97,49 +103,78 @@ <use xlink:href="#DejaVuSans-74" x="487.012"/> <use xlink:href="#DejaVuSans-73" x="526.221"/> </g> - <g transform="matrix(.07 0 0 -.07 155.098 139.204)" id="text_7"> + <g transform="matrix(.07 0 0 -.07 161.818 139.204)" id="text_8"> <defs> <path id="DejaVuSans-d7" d="M4488 3438L3059 2003 4488 575l-372-378-1435 1434L1247 197 878 575l1425 1428L878 3438l369 378 1434-1435 1435 1435 372-378z" transform="scale(.01563)"/> - <path id="DejaVuSans-37" d="M525 4666h3000v-269L1831 0h-659l1594 4134H525v532z" transform="scale(.01563)"/> + <path id="DejaVuSans-36" d="M2113 2584q-425 0-674-291-248-290-248-796 0-503 248-796 249-292 674-292t673 292q248 293 248 796 0 506-248 796-248 291-673 291zm1253 1979v-575q-238 112-480 171-242 60-480 60-625 0-955-422-329-422-376-1275 184 272 462 417 279 145 613 145 703 0 1111-427 408-426 408-1160 0-719-425-1154Q2819-91 2113-91q-810 0-1238 620-428 621-428 1799 0 1106 525 1764t1409 658q238 0 480-47t505-140z" transform="scale(.01563)"/> </defs> - <use xlink:href="#DejaVuSans-d7" transform="translate(0 .684)"/> - <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .684)"/> - <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .684)"/> - <use xlink:href="#DejaVuSans-37" transform="matrix(.7 0 0 .7 211.992 38.966)"/> + <use xlink:href="#DejaVuSans-d7" transform="translate(0 .766)"/> + <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .766)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .766)"/> + <use xlink:href="#DejaVuSans-36" transform="matrix(.7 0 0 .7 211.992 39.047)"/> </g> </g> <g id="matplotlib.axis_2"> <g id="ytick_1"> - <path d="M31.255 113.803h142.043" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_11"/> - <g id="line2d_12"> + <path d="M37.975 117.11h142.043" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_13"/> + <g id="line2d_14"> <defs> - <path id="m5394df87a7" d="M0 0h-3.5" stroke="#000" stroke-width=".75"/> + <path id="mb89c9bd36d" d="M0 0h-3.5" stroke="#000" stroke-width=".75"/> </defs> - <use xlink:href="#m5394df87a7" x="31.255" y="113.803" stroke="#000" stroke-width=".75"/> + <use xlink:href="#mb89c9bd36d" x="37.975" y="117.111" stroke="#000" stroke-width=".75"/> + </g> + <g transform="matrix(.07 0 0 -.07 19.775 119.77)" id="text_9"> + <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> </g> - <use xlink:href="#DejaVuSans-30" transform="matrix(.07 0 0 -.07 19.775 116.408)" id="text_8"/> </g> <g id="ytick_2"> - <path d="M31.255 93.332h142.043" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_13"/> - <use xlink:href="#m5394df87a7" x="31.255" y="93.332" stroke="#000" stroke-width=".75" id="line2d_14"/> - <use xlink:href="#DejaVuSans-32" transform="matrix(.07 0 0 -.07 19.775 95.936)" id="text_9"/> + <path d="M37.975 98.72h142.043" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_15"/> + <use xlink:href="#mb89c9bd36d" x="37.975" y="98.721" stroke="#000" stroke-width=".75" id="line2d_16"/> + <g transform="matrix(.07 0 0 -.07 19.775 101.38)" id="text_10"> + <use xlink:href="#DejaVuSans-30" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> + </g> </g> <g id="ytick_3"> - <path d="M31.255 72.86h142.043" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_15"/> - <use xlink:href="#m5394df87a7" x="31.255" y="72.86" stroke="#000" stroke-width=".75" id="line2d_16"/> - <use xlink:href="#DejaVuSans-34" transform="matrix(.07 0 0 -.07 19.775 75.513)" id="text_10"/> + <path d="M37.975 80.33h142.043" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_17"/> + <use xlink:href="#mb89c9bd36d" x="37.975" y="80.33" stroke="#000" stroke-width=".75" id="line2d_18"/> + <g transform="matrix(.07 0 0 -.07 19.775 82.99)" id="text_11"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> + </g> </g> <g id="ytick_4"> - <path d="M31.255 52.388h142.043" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_17"/> - <use xlink:href="#m5394df87a7" x="31.255" y="52.388" stroke="#000" stroke-width=".75" id="line2d_18"/> - <use xlink:href="#DejaVuSans-36" transform="matrix(.07 0 0 -.07 19.775 54.993)" id="text_11"/> + <path d="M37.975 61.94h142.043" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_19"/> + <use xlink:href="#mb89c9bd36d" x="37.975" y="61.94" stroke="#000" stroke-width=".75" id="line2d_20"/> + <g transform="matrix(.07 0 0 -.07 19.775 64.6)" id="text_12"> + <use xlink:href="#DejaVuSans-31" transform="translate(0 .094)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .094)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .094)"/> + </g> </g> <g id="ytick_5"> - <path d="M31.255 31.917h142.043" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_19"/> - <use xlink:href="#m5394df87a7" x="31.255" y="31.917" stroke="#000" stroke-width=".75" id="line2d_20"/> - <use xlink:href="#DejaVuSans-38" transform="matrix(.07 0 0 -.07 19.775 34.521)" id="text_12"/> + <path d="M37.975 43.55h142.043" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_21"/> + <use xlink:href="#mb89c9bd36d" x="37.975" y="43.55" stroke="#000" stroke-width=".75" id="line2d_22"/> + <g transform="matrix(.07 0 0 -.07 19.775 46.21)" id="text_13"> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-30" transform="translate(95.41 .781)"/> + </g> + </g> + <g id="ytick_6"> + <path d="M37.975 25.16h142.043" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".05,.4" stroke="#000" stroke-width=".25" id="line2d_23"/> + <use xlink:href="#mb89c9bd36d" x="37.975" y="25.16" stroke="#000" stroke-width=".75" id="line2d_24"/> + <g transform="matrix(.07 0 0 -.07 19.775 27.819)" id="text_14"> + <use xlink:href="#DejaVuSans-32" transform="translate(0 .781)"/> + <use xlink:href="#DejaVuSans-2e" transform="translate(63.623 .781)"/> + <use xlink:href="#DejaVuSans-35" transform="translate(95.41 .781)"/> + </g> </g> - <g transform="matrix(0 -.07 -.07 0 14.319 81.445)" id="text_13"> + <g transform="matrix(0 -.07 -.07 0 14.319 81.445)" id="text_15"> <defs> <path id="DejaVuSans-54" d="M-19 4666h3947v-532H2272V0h-634v4134H-19v532z" transform="scale(.01563)"/> <path id="DejaVuSans-69" d="M603 3500h575V0H603v3500zm0 1363h575v-729H603v729z" transform="scale(.01563)"/> @@ -155,78 +190,66 @@ <use xlink:href="#DejaVuSans-73" x="315.479"/> <use xlink:href="#DejaVuSans-29" x="367.578"/> </g> - <g transform="matrix(.07 0 0 -.07 31.255 14.319)" id="text_14"> + <g transform="matrix(.07 0 0 -.07 37.975 14.319)" id="text_16"> <use xlink:href="#DejaVuSans-d7" transform="translate(0 .684)"/> <use xlink:href="#DejaVuSans-31" transform="translate(83.79 .684)"/> <use xlink:href="#DejaVuSans-30" transform="translate(147.412 .684)"/> <use xlink:href="#DejaVuSans-31" transform="matrix(.7 0 0 .7 211.992 38.966)"/> </g> </g> - <g id="line2d_21"> - <path d="M37.711 112.575l14.348-1.198 14.348-1.248 14.348-1.126 14.348-1.126 14.347-1.341 14.348-1.28 14.348-1.034 14.348-1.422 14.348-1.331" clip-path="url(#p19fc02bc89)" fill="none" stroke="#1f77b4" stroke-linecap="square"/> + <g id="line2d_25"> + <path d="M44.431 114.904l25.826-2.317 25.826-2.06 25.827-2.427 25.826-1.803 25.826-2.096" clip-path="url(#ped76838f68)" fill="none" stroke="#1f77b4" stroke-linecap="square"/> <defs> - <path id="m2d79b52d97" d="M0 1.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" stroke="#1f77b4"/> + <path id="m2ed1c57d17" d="M0 1.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z" stroke="#1f77b4"/> </defs> - <g clip-path="url(#p19fc02bc89)" fill="#1f77b4" stroke="#1f77b4"> - <use xlink:href="#m2d79b52d97" x="37.711" y="112.575"/> - <use xlink:href="#m2d79b52d97" x="52.059" y="111.377"/> - <use xlink:href="#m2d79b52d97" x="66.407" y="110.129"/> - <use xlink:href="#m2d79b52d97" x="80.755" y="109.003"/> - <use xlink:href="#m2d79b52d97" x="95.103" y="107.877"/> - <use xlink:href="#m2d79b52d97" x="109.45" y="106.536"/> - <use xlink:href="#m2d79b52d97" x="123.798" y="105.256"/> - <use xlink:href="#m2d79b52d97" x="138.146" y="104.222"/> - <use xlink:href="#m2d79b52d97" x="152.494" y="102.8"/> - <use xlink:href="#m2d79b52d97" x="166.842" y="101.469"/> + <g clip-path="url(#ped76838f68)" fill="#1f77b4" stroke="#1f77b4"> + <use xlink:href="#m2ed1c57d17" x="44.431" y="114.904"/> + <use xlink:href="#m2ed1c57d17" x="70.257" y="112.587"/> + <use xlink:href="#m2ed1c57d17" x="96.083" y="110.527"/> + <use xlink:href="#m2ed1c57d17" x="121.91" y="108.1"/> + <use xlink:href="#m2ed1c57d17" x="147.736" y="106.297"/> + <use xlink:href="#m2ed1c57d17" x="173.562" y="104.201"/> </g> </g> - <g id="line2d_22"> - <path d="M37.711 105.39l14.348-8.762 14.348-9.376 14.348-8.599 14.348-10.42 14.347-8.311 14.348-9.878 14.348-10.47 14.348-7.944 14.348-9.775" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> + <g id="line2d_26"> + <path d="M44.431 101.92l25.826-16.256 25.826-15.228 25.827-17.912 25.826-14.638 25.826-18.133" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> <defs> - <path id="mf9f099e4f9" d="M-1.5 1.5h3v-3h-3z" stroke="#ff7f0e" stroke-linejoin="miter"/> + <path id="m78bb2d44e0" d="M-1.5 1.5h3v-3h-3z" stroke="#ff7f0e" stroke-linejoin="miter"/> </defs> - <g clip-path="url(#p19fc02bc89)" fill="#ff7f0e" stroke="#ff7f0e"> - <use xlink:href="#mf9f099e4f9" x="37.711" y="105.389"/> - <use xlink:href="#mf9f099e4f9" x="52.059" y="96.628"/> - <use xlink:href="#mf9f099e4f9" x="66.407" y="87.252"/> - <use xlink:href="#mf9f099e4f9" x="80.755" y="78.653"/> - <use xlink:href="#mf9f099e4f9" x="95.103" y="68.233"/> - <use xlink:href="#mf9f099e4f9" x="109.45" y="59.922"/> - <use xlink:href="#mf9f099e4f9" x="123.798" y="50.044"/> - <use xlink:href="#mf9f099e4f9" x="138.146" y="39.573"/> - <use xlink:href="#mf9f099e4f9" x="152.494" y="31.63"/> - <use xlink:href="#mf9f099e4f9" x="166.842" y="21.855"/> + <g clip-path="url(#ped76838f68)" fill="#ff7f0e" stroke="#ff7f0e"> + <use xlink:href="#m78bb2d44e0" x="44.431" y="101.921"/> + <use xlink:href="#m78bb2d44e0" x="70.257" y="85.664"/> + <use xlink:href="#m78bb2d44e0" x="96.083" y="70.436"/> + <use xlink:href="#m78bb2d44e0" x="121.91" y="52.524"/> + <use xlink:href="#m78bb2d44e0" x="147.736" y="37.886"/> + <use xlink:href="#m78bb2d44e0" x="173.562" y="19.753"/> </g> </g> - <g id="line2d_23"> - <path d="M37.711 102.145l14.348-3.992 14.348-4.74 14.348-3.787 14.348-5.118 14.347-4.34 14.348-3.9 14.348-4.862 14.348-2.497 14.348-5.466" clip-path="url(#p19fc02bc89)" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> + <g id="line2d_27"> + <path d="M44.431 75.733l25.826-9.526 25.826-6.694L121.91 49.14l25.826-8.827 25.826-7.944" clip-path="url(#ped76838f68)" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> <defs> - <path id="mb927f7b32d" d="M0 1.5l1.5-3h-3z" stroke="#2ca02c" stroke-linejoin="miter"/> + <path id="m73b2b4440e" d="M0 1.5l1.5-3h-3z" stroke="#2ca02c" stroke-linejoin="miter"/> </defs> - <g clip-path="url(#p19fc02bc89)" fill="#2ca02c" stroke="#2ca02c"> - <use xlink:href="#mb927f7b32d" x="37.711" y="102.145"/> - <use xlink:href="#mb927f7b32d" x="52.059" y="98.153"/> - <use xlink:href="#mb927f7b32d" x="66.407" y="93.413"/> - <use xlink:href="#mb927f7b32d" x="80.755" y="89.626"/> - <use xlink:href="#mb927f7b32d" x="95.103" y="84.508"/> - <use xlink:href="#mb927f7b32d" x="109.45" y="80.168"/> - <use xlink:href="#mb927f7b32d" x="123.798" y="76.268"/> - <use xlink:href="#mb927f7b32d" x="138.146" y="71.406"/> - <use xlink:href="#mb927f7b32d" x="152.494" y="68.909"/> - <use xlink:href="#mb927f7b32d" x="166.842" y="63.443"/> + <g clip-path="url(#ped76838f68)" fill="#2ca02c" stroke="#2ca02c"> + <use xlink:href="#m73b2b4440e" x="44.431" y="75.733"/> + <use xlink:href="#m73b2b4440e" x="70.257" y="66.207"/> + <use xlink:href="#m73b2b4440e" x="96.083" y="59.513"/> + <use xlink:href="#m73b2b4440e" x="121.91" y="49.14"/> + <use xlink:href="#m73b2b4440e" x="147.736" y="40.313"/> + <use xlink:href="#m73b2b4440e" x="173.562" y="32.369"/> </g> </g> - <path d="M31.255 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_3"/> - <path d="M173.298 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_4"/> - <path d="M31.255 117.11h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_5"/> - <path d="M31.255 17.319h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_6"/> + <path d="M37.975 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_3"/> + <path d="M180.018 117.11V17.32" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_4"/> + <path d="M37.975 117.11h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_5"/> + <path d="M37.975 17.319h142.043" fill="none" stroke="#000" stroke-width=".8" stroke-linecap="square" id="patch_6"/> <g id="legend_1"> - <path d="M36.155 50.243h45.64q1.4 0 1.4-1.4V22.219q0-1.4-1.4-1.4h-45.64q-1.4 0-1.4 1.4v26.624q0 1.4 1.4 1.4z" fill="#fff" opacity=".8" stroke="#ccc" id="patch_7"/> - <g id="line2d_24"> - <path d="M37.555 26.488h14" fill="none" stroke="#1f77b4" stroke-linecap="square"/> - <use xlink:href="#m2d79b52d97" x="44.555" y="26.488" fill="#1f77b4" stroke="#1f77b4"/> + <path d="M42.875 50.243h45.64q1.4 0 1.4-1.4V22.219q0-1.4-1.4-1.4h-45.64q-1.4 0-1.4 1.4v26.624q0 1.4 1.4 1.4z" fill="#fff" opacity=".8" stroke="#ccc" id="patch_7"/> + <g id="line2d_28"> + <path d="M44.275 26.488h14" fill="none" stroke="#1f77b4" stroke-linecap="square"/> + <use xlink:href="#m2ed1c57d17" x="51.275" y="26.488" fill="#1f77b4" stroke="#1f77b4"/> </g> - <g transform="matrix(.07 0 0 -.07 57.155 28.938)" id="text_15"> + <g transform="matrix(.07 0 0 -.07 63.875 28.938)" id="text_17"> <defs> <path id="DejaVuSans-72" d="M2631 2963q-97 56-211 82-114 27-251 27-488 0-749-317t-261-911V0H581v3500h578v-544q182 319 472 473 291 155 707 155 59 0 131-8 72-7 159-23l3-590z" transform="scale(.01563)"/> <path id="DejaVuSans-64" d="M2906 2969v1894h575V0h-575v525q-181-312-458-464-276-152-664-152-634 0-1033 506-398 507-398 1332t398 1331q399 506 1033 506 388 0 664-152 277-151 458-463zM947 1747q0-634 261-995t717-361q456 0 718 361 263 361 263 995t-263 995q-262 361-718 361t-717-361q-261-361-261-995z" transform="scale(.01563)"/> @@ -237,11 +260,11 @@ <use xlink:href="#DejaVuSans-64" x="152.986"/> <use xlink:href="#DejaVuSans-69" x="216.463"/> </g> - <g id="line2d_25"> - <path d="M37.555 35.013h14" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> - <use xlink:href="#mf9f099e4f9" x="44.555" y="35.013" fill="#ff7f0e" stroke="#ff7f0e"/> + <g id="line2d_29"> + <path d="M44.275 35.013h14" fill="none" stroke-dasharray="2,.75" stroke="#ff7f0e"/> + <use xlink:href="#m78bb2d44e0" x="51.275" y="35.013" fill="#ff7f0e" stroke="#ff7f0e"/> </g> - <g transform="matrix(.07 0 0 -.07 57.155 37.462)" id="text_16"> + <g transform="matrix(.07 0 0 -.07 63.875 37.462)" id="text_18"> <defs> <path id="DejaVuSans-70" d="M1159 525v-1856H581v4831h578v-531q182 312 458 463 277 152 661 152 638 0 1036-506 399-506 399-1331T3314 415Q2916-91 2278-91q-384 0-661 152-276 152-458 464zm1957 1222q0 634-261 995t-717 361q-457 0-718-361t-261-995q0-634 261-995t718-361q456 0 717 361t261 995z" transform="scale(.01563)"/> </defs> @@ -252,11 +275,11 @@ <use xlink:href="#DejaVuSans-65" x="229.346"/> <use xlink:href="#DejaVuSans-72" x="290.869"/> </g> - <g id="line2d_26"> - <path d="M37.555 43.537h14" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> - <use xlink:href="#mb927f7b32d" x="44.555" y="43.537" fill="#2ca02c" stroke="#2ca02c"/> + <g id="line2d_30"> + <path d="M44.275 43.537h14" fill="none" stroke-dasharray=".75,.75" stroke="#2ca02c"/> + <use xlink:href="#m73b2b4440e" x="51.275" y="43.537" fill="#2ca02c" stroke="#2ca02c"/> </g> - <g transform="matrix(.07 0 0 -.07 57.155 45.987)" id="text_17"> + <g transform="matrix(.07 0 0 -.07 63.875 45.987)" id="text_19"> <defs> <path id="DejaVuSans-6f" d="M1959 3097q-462 0-731-361t-269-989q0-628 267-989 268-361 733-361 460 0 728 362 269 363 269 988 0 622-269 986-268 364-728 364zm0 487q750 0 1178-488 429-487 429-1349 0-859-429-1349Q2709-91 1959-91q-753 0-1180 489-426 490-426 1349 0 862 426 1349 427 488 1180 488z" transform="scale(.01563)"/> </defs> @@ -269,8 +292,8 @@ </g> </g> <defs> - <clipPath id="p19fc02bc89"> - <path d="M31.255 17.319h142.044v99.792H31.255z"/> + <clipPath id="ped76838f68"> + <path d="M37.975 17.319h142.044v99.792H37.975z"/> </clipPath> </defs> </svg> diff --git a/scripts/serd_bench.py b/scripts/serd_bench.py index ae2f0f66..e342976b 100755 --- a/scripts/serd_bench.py +++ b/scripts/serd_bench.py @@ -41,6 +41,23 @@ class WorkingDirectory: os.chdir(self.original_dir) +def order_of_magnitude(values): + "Return the order of magnitude to use for an axis with the given values" + if len(values) <= 0: + return 0 + + # Calculate the "best" order of magnitude like ScalarFormatter does + val = max(values) + oom = math.floor(math.log10(max(1.0, val))) + if -3 <= oom <= 3: + return 0 + + # Round down to a sensible (thousand, millions, billions, etc) order + remainder = oom % 3 + oom = oom - remainder + return oom + + def filename(num): "Filename for a generated file with n statements" return "gen%d.ttl" % num @@ -73,7 +90,7 @@ def parse_time(report): if line.startswith("\tUser time"): time = float(line[after_colon:]) elif line.startswith("\tMaximum resident set"): - memory = float(line[after_colon:]) * 1024 + memory = int(float(line[after_colon:]) * 1024) return (time, memory) @@ -94,7 +111,6 @@ def get_dashes(): def plot(in_file, out_filename, x_label, y_label, y_max=None): "Plot a TSV file as SVG" - matplotlib.use("agg") import matplotlib.pyplot as plt @@ -108,22 +124,22 @@ def plot(in_file, out_filename, x_label, y_label, y_max=None): header = next(reader) cols = list(zip(*list(reader))) + # Create a figure with a grid plt.clf() fig = plt.figure(figsize=(fig_height * math.sqrt(2), fig_height)) ax = fig.add_subplot(111) - ax.set_xlabel(x_label) ax.set_ylabel(y_label) ax.grid(linewidth=0.25, linestyle=":", color="0", dashes=[0.2, 1.6]) - ax.ticklabel_format(style="sci", scilimits=(4, 0), useMathText=True) ax.tick_params(axis="both", width=0.75) x = list(map(float, cols[0])) actual_y_max = 0.0 for i, y in enumerate(cols[1::]): y_floats = list(map(float, y)) - actual_y_max = max(actual_y_max, y_floats) + y_floats_max = max(y_floats) + actual_y_max = max(actual_y_max, y_floats_max) ax.plot( x, y_floats, @@ -134,9 +150,17 @@ def plot(in_file, out_filename, x_label, y_label, y_max=None): linewidth=1.0, ) - y_max = actual_y_max if y_max is None else y_max + # Set Y axis limits to go from zero to the maximum value with a small pad + y_max = (1.025 * actual_y_max) if y_max is None else y_max ax.set_ylim([0.0, y_max]) + # Set axis magnitudes + x_m = (order_of_magnitude(x),) * 2 + y_m = (order_of_magnitude([y_max]),) * 2 + ax.ticklabel_format(axis="x", style="sci", scilimits=x_m, useMathText=True) + ax.ticklabel_format(axis="y", style="sci", scilimits=y_m, useMathText=True) + + # Save plot plt.legend(labelspacing=0.25) plt.savefig(out_filename, bbox_inches="tight", pad_inches=0.125) plt.close() @@ -215,7 +239,7 @@ if __name__ == "__main__": formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" example: - %(prog)s --max 100000 \\ + %(prog)s --max 300000 \\ --run 'rapper -i turtle -o turtle' \\ --run 'riot --output=ttl' \\ --run 'rdfpipe -i turtle -o turtle' /path/to/sp2b/src/ @@ -223,7 +247,7 @@ example: ) ap.add_argument( - "--max", type=int, default=1000000, help="maximum triple count" + "--max", type=int, default=3000000, help="maximum triple count" ) ap.add_argument( "--run", @@ -241,12 +265,14 @@ example: ap.add_argument( "--no-plot", action="store_true", help="do not plot benchmarks" ) + ap.add_argument("--steps", type=int, default=6, help="number of steps") + ap.add_argument("sp2b_dir", help="path to sp2b test data generator") args = ap.parse_args(sys.argv[1:]) progs = ["serdi -b -f -i turtle -o turtle"] + args.run - min_n = int(args.max / 10) + min_n = int(args.max / args.steps) max_n = args.max step = min_n |