From bb1952843a88c390c5cd19c625695f555350b2f5 Mon Sep 17 00:00:00 2001 From: BuildTheDocs Date: Wed, 18 Oct 2023 15:07:59 +0000 Subject: [PATCH] update 623f17f59aa2d33fb453fbbe9680ac00f88511f8 --- .buildinfo | 4 + .nojekyll | 0 Doc-License.html | 598 +++++++++++ License.html | 477 +++++++++ _images/logo.png | Bin 0 -> 85940 bytes _images/matrices_array_axis_vcs.png | Bin 0 -> 63106 bytes _images/matrices_vunit_axis_vcs.png | Bin 0 -> 93185 bytes _sources/Doc-License.rst.txt | 299 ++++++ _sources/License.rst.txt | 178 ++++ _sources/ci.rst.txt | 33 + _sources/index.rst.txt | 123 +++ _sources/vhpi/index.rst.txt | 20 + _sources/vhpidirect/declarations.rst.txt | 113 +++ _sources/vhpidirect/dynamic.rst.txt | 111 +++ _sources/vhpidirect/examples/arrays.rst.txt | 267 +++++ _sources/vhpidirect/examples/grt.rst.txt | 17 + _sources/vhpidirect/examples/index.rst.txt | 13 + _sources/vhpidirect/examples/other.rst.txt | 52 + .../vhpidirect/examples/quickstart.rst.txt | 257 +++++ _sources/vhpidirect/examples/shared.rst.txt | 144 +++ .../vhpidirect/examples/vffi_user.rst.txt | 301 ++++++ _sources/vhpidirect/grt.rst.txt | 101 ++ _sources/vhpidirect/index.rst.txt | 26 + _sources/vhpidirect/linking.rst.txt | 75 ++ .../notebook/howtouseghdlfromc.rst.txt | 282 ++++++ _sources/vhpidirect/notebook/index.rst.txt | 14 + .../vhpidirect/notebook/memorylayout.rst.txt | 12 + _sources/vhpidirect/notebook/mistakes.rst.txt | 39 + _sources/vhpidirect/wrapping.rst.txt | 82 ++ _sources/vpi/examples/index.rst.txt | 21 + _sources/vpi/examples/other.rst.txt | 45 + _sources/vpi/examples/quickstart.rst.txt | 17 + _sources/vpi/index.rst.txt | 19 + _static/basic.css | 925 ++++++++++++++++++ _static/debug.css | 69 ++ _static/doctools.js | 156 +++ _static/documentation_options.js | 13 + _static/file.png | Bin 0 -> 286 bytes _static/icon.ico | Bin 0 -> 168862 bytes _static/language_data.js | 199 ++++ _static/logo.png | Bin 0 -> 85940 bytes _static/logo.svg | 662 +++++++++++++ _static/logol.png | Bin 0 -> 173927 bytes _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 258 +++++ _static/scripts/furo-extensions.js | 0 _static/scripts/furo.js | 3 + _static/scripts/furo.js.LICENSE.txt | 7 + _static/scripts/furo.js.map | 1 + _static/searchtools.js | 574 +++++++++++ _static/skeleton.css | 296 ++++++ _static/sphinx_highlight.js | 154 +++ _static/styles/furo-extensions.css | 2 + _static/styles/furo-extensions.css.map | 1 + _static/styles/furo.css | 2 + _static/styles/furo.css.map | 1 + ci.html | 330 +++++++ genindex.html | 333 +++++++ index.html | 362 +++++++ objects.inv | Bin 0 -> 1877 bytes search.html | 285 ++++++ searchindex.js | 1 + vhpi/index.html | 309 ++++++ vhpidirect/declarations.html | 406 ++++++++ vhpidirect/dynamic.html | 411 ++++++++ vhpidirect/examples/arrays.html | 567 +++++++++++ vhpidirect/examples/grt.html | 323 ++++++ vhpidirect/examples/index.html | 388 ++++++++ vhpidirect/examples/other.html | 356 +++++++ vhpidirect/examples/quickstart.html | 543 ++++++++++ vhpidirect/examples/shared.html | 451 +++++++++ vhpidirect/examples/vffi_user.html | 700 +++++++++++++ vhpidirect/grt.html | 396 ++++++++ vhpidirect/index.html | 320 ++++++ vhpidirect/linking.html | 370 +++++++ vhpidirect/notebook/howtouseghdlfromc.html | 535 ++++++++++ vhpidirect/notebook/index.html | 305 ++++++ vhpidirect/notebook/memorylayout.html | 302 ++++++ vhpidirect/notebook/mistakes.html | 328 +++++++ vhpidirect/wrapping.html | 381 ++++++++ vpi/examples/index.html | 322 ++++++ vpi/examples/other.html | 346 +++++++ vpi/examples/quickstart.html | 323 ++++++ vpi/index.html | 306 ++++++ 85 files changed, 17062 insertions(+) create mode 100644 .buildinfo create mode 100644 .nojekyll create mode 100644 Doc-License.html create mode 100644 License.html create mode 100644 _images/logo.png create mode 100644 _images/matrices_array_axis_vcs.png create mode 100644 _images/matrices_vunit_axis_vcs.png create mode 100644 _sources/Doc-License.rst.txt create mode 100644 _sources/License.rst.txt create mode 100644 _sources/ci.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/vhpi/index.rst.txt create mode 100644 _sources/vhpidirect/declarations.rst.txt create mode 100644 _sources/vhpidirect/dynamic.rst.txt create mode 100644 _sources/vhpidirect/examples/arrays.rst.txt create mode 100644 _sources/vhpidirect/examples/grt.rst.txt create mode 100644 _sources/vhpidirect/examples/index.rst.txt create mode 100644 _sources/vhpidirect/examples/other.rst.txt create mode 100644 _sources/vhpidirect/examples/quickstart.rst.txt create mode 100644 _sources/vhpidirect/examples/shared.rst.txt create mode 100644 _sources/vhpidirect/examples/vffi_user.rst.txt create mode 100644 _sources/vhpidirect/grt.rst.txt create mode 100644 _sources/vhpidirect/index.rst.txt create mode 100644 _sources/vhpidirect/linking.rst.txt create mode 100644 _sources/vhpidirect/notebook/howtouseghdlfromc.rst.txt create mode 100644 _sources/vhpidirect/notebook/index.rst.txt create mode 100644 _sources/vhpidirect/notebook/memorylayout.rst.txt create mode 100644 _sources/vhpidirect/notebook/mistakes.rst.txt create mode 100644 _sources/vhpidirect/wrapping.rst.txt create mode 100644 _sources/vpi/examples/index.rst.txt create mode 100644 _sources/vpi/examples/other.rst.txt create mode 100644 _sources/vpi/examples/quickstart.rst.txt create mode 100644 _sources/vpi/index.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/debug.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/file.png create mode 100644 _static/icon.ico create mode 100644 _static/language_data.js create mode 100644 _static/logo.png create mode 100644 _static/logo.svg create mode 100644 _static/logol.png create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/scripts/furo-extensions.js create mode 100644 _static/scripts/furo.js create mode 100644 _static/scripts/furo.js.LICENSE.txt create mode 100644 _static/scripts/furo.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/skeleton.css create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/styles/furo-extensions.css create mode 100644 _static/styles/furo-extensions.css.map create mode 100644 _static/styles/furo.css create mode 100644 _static/styles/furo.css.map create mode 100644 ci.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 vhpi/index.html create mode 100644 vhpidirect/declarations.html create mode 100644 vhpidirect/dynamic.html create mode 100644 vhpidirect/examples/arrays.html create mode 100644 vhpidirect/examples/grt.html create mode 100644 vhpidirect/examples/index.html create mode 100644 vhpidirect/examples/other.html create mode 100644 vhpidirect/examples/quickstart.html create mode 100644 vhpidirect/examples/shared.html create mode 100644 vhpidirect/examples/vffi_user.html create mode 100644 vhpidirect/grt.html create mode 100644 vhpidirect/index.html create mode 100644 vhpidirect/linking.html create mode 100644 vhpidirect/notebook/howtouseghdlfromc.html create mode 100644 vhpidirect/notebook/index.html create mode 100644 vhpidirect/notebook/memorylayout.html create mode 100644 vhpidirect/notebook/mistakes.html create mode 100644 vhpidirect/wrapping.html create mode 100644 vpi/examples/index.html create mode 100644 vpi/examples/other.html create mode 100644 vpi/examples/quickstart.html create mode 100644 vpi/index.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..17017ddc --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: f2296f28fd7fc2c9803172c92da3cf4b +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/Doc-License.html b/Doc-License.html new file mode 100644 index 00000000..803a7b9d --- /dev/null +++ b/Doc-License.html @@ -0,0 +1,598 @@ + + + + + + + + + Creative Commons Attribution 4.0 International - GHDL-cosim latest documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+ +
+

Attention

+

This CC BY 4.0 license applies only to the documentation of this project.

+
+
+

Creative Commons Attribution 4.0 International#

+

Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. +Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. +Creative Commons makes its licenses and related information available on an “as-is” basis. +Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or +any related information. +Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.

+
+

Using Creative Commons Public Licenses#

+

Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders +may use to share original works of authorship and other material subject to copyright and certain other rights specified +in the public license below. +The following considerations are for informational purposes only, are not exhaustive, and do not form part of our +licenses.

+
    +
  • Considerations for licensors: Our public licenses are intended for use by those authorized to give the public +permission to use material in ways otherwise restricted by copyright and certain other rights. +Our licenses are irrevocable. +Licensors should read and understand the terms and conditions of the license they choose before applying it. +Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the +material as expected. +Licensors should clearly mark any material not subject to the license. +This includes other CC-licensed material, or material used under an exception or limitation to copyright. +More considerations for licensors.

  • +
  • Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use +the licensed material under specified terms and conditions. +If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or +limitation to copyright–then that use is not regulated by the license. +Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. +Use of the licensed material may still be restricted for other reasons, including because others have copyright or +other rights in the material. +A licensor may make special requests, such as asking that all changes be marked or described. +Although not required by our licenses, you are encouraged to respect those requests where reasonable. +More considerations for the public.

  • +
+
+
+

Creative Commons Attribution 4.0 International Public License#

+

By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this +Creative Commons Attribution 4.0 International Public License (“Public License”). +To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration +of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits +the Licensor receives from making the Licensed Material available under these terms and conditions.

+
+

Section 1 – Definitions#

+
    +
  1. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the +Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise +modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. +For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, +Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.

  2. +
  3. Adapter’s License means the license You apply to Your Copyright and Similar Rights in Your contributions to +Adapted Material in accordance with the terms and conditions of this Public License.

  4. +
  5. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, +without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how +the rights are labeled or categorized. +For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.

  6. +
  7. Effective Technological Measures means those measures that, in the absence of proper authority, may not be +circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, +1996, and/or similar international agreements.

  8. +
  9. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright +and Similar Rights that applies to Your use of the Licensed Material.

  10. +
  11. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied +this Public License.

  12. +
  13. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which +are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor +has authority to license.

  14. +
  15. Licensor means the individual(s) or entity(ies) granting rights under this Public License.

  16. +
  17. Share means to provide material to the public by any means or process that requires permission under the Licensed +Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or +importation, and to make material available to the public including in ways that members of the public may access the +material from a place and at a time individually chosen by them.

  18. +
  19. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European +Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as +well as other essentially equivalent rights anywhere in the world.

  20. +
  21. You means the individual or entity exercising the Licensed Rights under this Public License. +Your has a corresponding meaning.

  22. +
+
+
+

Section 2 – Scope#

+
    +
  1. License grant.

    +
      +
    1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, +royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the +Licensed Material to:

      +
      +
        +
      1. reproduce and Share the Licensed Material, in whole or in part; and

      2. +
      3. produce, reproduce, and Share Adapted Material.

      4. +
      +
      +
    2. +
    3. Exceptions and Limitations. +For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not +apply, and You do not need to comply with its terms and conditions.

    4. +
    5. Term. +The term of this Public License is specified in Section 6(a).

    6. +
    7. Media and formats; technical modifications allowed. +The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or +hereafter created, and to make technical modifications necessary to do so. +The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical +modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent +Effective Technological Measures. +For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces +Adapted Material.

    8. +
    9. Downstream recipients.

      +
      +
        +
      1. Offer from the Licensor – Licensed Material. +Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the +Licensed Rights under the terms and conditions of this Public License.

      2. +
      3. No downstream restrictions. +You may not offer or impose any additional or different terms or conditions on, or apply any Effective +Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any +recipient of the Licensed Material.

      4. +
      +
      +
    10. +
    11. No endorsement. +Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or +that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, +the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).

    12. +
    +
  2. +
  3. Other rights.

    +
      +
    1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, +privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or +agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise +the Licensed Rights, but not otherwise.

    2. +
    3. Patent and trademark rights are not licensed under this Public License.

    4. +
    5. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the +Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or +compulsory licensing scheme. +In all other cases the Licensor expressly reserves any right to collect such royalties.

    6. +
    +
  4. +
+
+
+

Section 3 – License Conditions#

+

Your exercise of the Licensed Rights is expressly made subject to the following conditions.

+
    +
  1. Attribution.

    +
      +
    1. If You Share the Licensed Material (including in modified form), You must:

      +
      +
        +
      1. retain the following if it is supplied by the Licensor with the Licensed Material:

      2. +
      +
      +
        +
      1. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, +in any reasonable manner requested by the Licensor (including by pseudonym if designated);

      2. +
      3. a copyright notice;

      4. +
      5. a notice that refers to this Public License;

      6. +
      7. a notice that refers to the disclaimer of warranties;

      8. +
      9. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;

      10. +
      +
      +
        +
      1. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and

      2. +
      3. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or +hyperlink to, this Public License.

      4. +
      +
      +
    2. +
    3. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context +in which You Share the Licensed Material. +For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that +includes the required information.

    4. +
    5. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent +reasonably practicable.

    6. +
    7. If You Share Adapted Material You produce, the Adapter’s License You apply must not prevent recipients of the +Adapted Material from complying with this Public License.

    8. +
    +
  2. +
+
+
+

Section 4 – Sui Generis Database Rights#

+

Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:

+
    +
  1. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a +substantial portion of the contents of the database;

  2. +
  3. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis +Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is +Adapted Material; and

  4. +
  5. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the +database.

  6. +
+

For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License +where the Licensed Rights include other Copyright and Similar Rights.

+
+
+

Section 5 – Disclaimer of Warranties and Limitation of Liability#

+
    +
  1. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed +Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed +Material, whether express, implied, statutory, or other. +This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, +non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not +known or discoverable. +Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.

  2. +
  3. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without +limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, +exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed +Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. +Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.

  4. +
  5. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the +extent possible, most closely approximates an absolute disclaimer and waiver of all liability.

  6. +
+
+
+

Section 6 – Term and Termination#

+
    +
  1. This Public License applies for the term of the Copyright and Similar Rights licensed here. +However, if You fail to comply with this Public License, then Your rights under this Public License terminate +automatically.

  2. +
  3. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:

    +
      +
    1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the +violation; or

    2. +
    3. upon express reinstatement by the Licensor.

    4. +
    +

    For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for +Your violations of this Public License.

    +
  4. +
  5. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or +stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.

  6. +
  7. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.

  8. +
+
+
+

Section 7 – Other Terms and Conditions#

+
    +
  1. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless +expressly agreed.

  2. +
  3. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from +and independent of the terms and conditions of this Public License.

  4. +
+
+
+

Section 8 – Interpretation#

+
    +
  1. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, +or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this +Public License.

  2. +
  3. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically +reformed to the minimum extent necessary to make it enforceable. +If the provision cannot be reformed, it shall be severed from this Public License without affecting the +enforceability of the remaining terms and conditions.

  4. +
  5. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly +agreed to by the Licensor.

  6. +
  7. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges +and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or +authority.

  8. +
+
+

Creative Commons is not a party to its public licenses. +Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those +instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under +a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of +Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of +licensed material. +For the avoidance of doubt, this paragraph does not form part of the public licenses.

+

Creative Commons may be contacted at creativecommons.org

+
+
+
+ +
+
+ +
+ +
+
+ + + + + \ No newline at end of file diff --git a/License.html b/License.html new file mode 100644 index 00000000..a5d4471c --- /dev/null +++ b/License.html @@ -0,0 +1,477 @@ + + + + + + + + + Apache License 2.0 - GHDL-cosim latest documentation + + + + + + + + + + + + + + + + Contents + + + + + + Menu + + + + + + + + Expand + + + + + + Light mode + + + + + + + + + + + + + + Dark mode + + + + + + + Auto light/dark mode + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+
+ + + + + Back to top + +
+ +
+ +
+ +
+
+
+

Note

+

This is a local copy of the Apache License Version 2.0.

+
+
+

Attention

+

This Apache License, 2.0 applies to all source and configuration files of project, except documentation.

+
+
+

Apache License 2.0#

+

Version 2.0, January 2004

+

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

+
+

1. Definitions#

+

“License” shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 +through 9 of this document.

+

“Licensor” shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.

+

“Legal Entity” shall mean the union of the acting entity and all other entities that control, are controlled by, or +are under common control with that entity. +For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or +management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity.

+

“You” (or “Your”) shall mean an individual or Legal Entity exercising permissions granted by this License.

+

“Source” form shall mean the preferred form for making modifications, including but not limited to software source +code, documentation source, and configuration files.

+

“Object” form shall mean any form resulting from mechanical transformation or translation of a Source form, +including but not limited to compiled object code, generated documentation, and conversions to other media types.

+

“Work” shall mean the work of authorship, whether in Source or Object form, made available under the License, as +indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix +below).

+

“Derivative Works” shall mean any work, whether in Source or Object form, that is based on (or derived from) the +Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. +For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link +(or bind by name) to the interfaces of, the Work and Derivative Works thereof.

+

“Contribution” shall mean any work of authorship, including the original version of the Work and any modifications +or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the +Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. +For the purposes of this definition, “submitted” means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source +code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of +discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in +writing by the copyright owner as “Not a Contribution.”

+

“Contributor” shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been +received by Licensor and subsequently incorporated within the Work.

+
+ +
+

3. Grant of Patent License#

+

Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent +claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of +their Contribution(s) with the Work to which such Contribution(s) was submitted. +If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging +that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation +is filed.

+
+
+

4. Redistribution#

+

You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You meet the following conditions:

+
    +
  • You must give any other recipients of the Work or Derivative Works a copy of this License; and

  • +
  • You must cause any modified files to carry prominent notices stating that You changed the files; and

  • +
  • You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and

  • +
  • If the Work includes a “NOTICE” text file as part of its distribution, then any Derivative Works that You +distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those +notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a +NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided +along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such +third-party notices normally appear. +The contents of the NOTICE file are for informational purposes only and do not modify the License. +You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to +the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the +License.

  • +
+

You may add Your own copyright statement to Your modifications and may provide additional or different license terms and +conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this +License.

+
+
+

5. Submission of Contributions#

+

Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the +Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may +have executed with Licensor regarding such Contributions.

+
+
+

6. Trademarks#

+

This License does not grant permission to use the trade names, trademarks, service marks, or product names of the +Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the +content of the NOTICE file.

+
+
+

7. Disclaimer of Warranty#

+

Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its +Contributions) on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, +without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. +You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks +associated with Your exercise of permissions under this License.

+
+
+

8. Limitation of Liability#

+

In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required +by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any +character arising as a result of this License or out of the use or inability to use the Work (including but not limited +to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages +or losses), even if such Contributor has been advised of the possibility of such damages.

+
+
+

9. Accepting Warranty or Additional Liability#

+

While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of +support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. +However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on +behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any +liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or +additional liability.

+
+
+

Appendix: How to apply the Apache License to your work#

+

To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets +“[]” replaced with your own identifying information. +(Don’t include the brackets!) +The text should be enclosed in the appropriate comment syntax for the file format. +We also recommend that a file or class name and description of purpose be included on the same “printed page” as the +copyright notice for easier identification within third-party archives.

+
Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+
+
+ +
+
+ +
+ +
+
+ + + + + \ No newline at end of file diff --git a/_images/logo.png b/_images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..56804ec613ec6224ce272ac722e3c552c87a239f GIT binary patch literal 85940 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ⅅ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 z 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 C1=uYB literal 0 HcmV?d00001 diff --git a/_images/matrices_vunit_axis_vcs.png b/_images/matrices_vunit_axis_vcs.png new file mode 100644 index 0000000000000000000000000000000000000000..e3087345a599aefd1e88313071f7d82b3ca4d4aa GIT binary patch literal 93185 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�? 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 literal 0 HcmV?d00001 diff --git a/_sources/Doc-License.rst.txt b/_sources/Doc-License.rst.txt new file mode 100644 index 00000000..86dc3d10 --- /dev/null +++ b/_sources/Doc-License.rst.txt @@ -0,0 +1,299 @@ +.. _DOCLICENSE: + +.. Note:: This is a local copy of the `Creative Commons - Attribution 4.0 International (CC BY 4.0) `__. + +.. Attention:: This **CC BY 4.0** license applies only to the **documentation** of this project. + + +Creative Commons Attribution 4.0 International +############################################## + +Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. +Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. +Creative Commons makes its licenses and related information available on an “as-is” basis. +Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or +any related information. +Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses +====================================== + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders +may use to share original works of authorship and other material subject to copyright and certain other rights specified +in the public license below. +The following considerations are for informational purposes only, are not exhaustive, and do not form part of our +licenses. + +* **Considerations for licensors:** Our public licenses are intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by copyright and certain other rights. + Our licenses are irrevocable. + Licensors should read and understand the terms and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the + material as expected. + Licensors should clearly mark any material not subject to the license. + This includes other CC-licensed material, or material used under an exception or limitation to copyright. + `More considerations for licensors `__. + +* **Considerations for the public:** By using one of our public licenses, a licensor grants the public permission to use + the licensed material under specified terms and conditions. + If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or + limitation to copyright–then that use is not regulated by the license. + Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. + Use of the licensed material may still be restricted for other reasons, including because others have copyright or + other rights in the material. + A licensor may make special requests, such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to respect those requests where reasonable. + `More considerations for the public `__. + +Creative Commons Attribution 4.0 International Public License +============================================================= + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this +Creative Commons Attribution 4.0 International Public License ("Public License"). +To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration +of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits +the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions +----------------------- + +a. **Adapted Material** means material subject to Copyright and Similar Rights that is derived from or based upon the + Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise + modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. + For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + +b. **Adapter's License** means the license You apply to Your Copyright and Similar Rights in Your contributions to + Adapted Material in accordance with the terms and conditions of this Public License. + +c. **Copyright and Similar Rights** means copyright and/or similar rights closely related to copyright including, + without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how + the rights are labeled or categorized. + For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +d. **Effective Technological Measures** means those measures that, in the absence of proper authority, may not be + circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, + 1996, and/or similar international agreements. + +e. **Exceptions and Limitations** means fair use, fair dealing, and/or any other exception or limitation to Copyright + and Similar Rights that applies to Your use of the Licensed Material. + +f. **Licensed Material** means the artistic or literary work, database, or other material to which the Licensor applied + this Public License. + +g. **Licensed Rights** means the rights granted to You subject to the terms and conditions of this Public License, which + are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor + has authority to license. + +h. **Licensor** means the individual(s) or entity(ies) granting rights under this Public License. + +i. **Share** means to provide material to the public by any means or process that requires permission under the Licensed + Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or + importation, and to make material available to the public including in ways that members of the public may access the + material from a place and at a time individually chosen by them. + +j. **Sui Generis Database Rights** means rights other than copyright resulting from Directive 96/9/EC of the European + Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as + well as other essentially equivalent rights anywhere in the world. + +k. **You** means the individual or entity exercising the Licensed Rights under this Public License. + **Your** has a corresponding meaning. + +Section 2 – Scope +----------------- + +a. **License grant.** + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, + royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the + Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. **Exceptions and Limitations.** + For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not + apply, and You do not need to comply with its terms and conditions. + + 3. **Term.** + The term of this Public License is specified in Section 6(a). + + 4. **Media and formats; technical modifications allowed.** + The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or + hereafter created, and to make technical modifications necessary to do so. + The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical + modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent + Effective Technological Measures. + For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces + Adapted Material. + + 5. **Downstream recipients.** + + A. **Offer from the Licensor – Licensed Material.** + Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this Public License. + + B. **No downstream restrictions.** + You may not offer or impose any additional or different terms or conditions on, or apply any Effective + Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any + recipient of the Licensed Material. + + 6. **No endorsement.** + Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or + that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +b. **Other rights.** + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or + agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise + the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the + Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or + compulsory licensing scheme. + In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions +------------------------------ + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + +a. **Attribution.** + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, + in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context + in which You Share the Licensed Material. + For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that + includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the + Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights +--------------------------------------- + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a + substantial portion of the contents of the database; + +b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis + Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is + Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the + database. + +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License +where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability +---------------------------------------------------------------- + +a. **Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed + Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed + Material, whether express, implied, statutory, or other. + This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, + non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not + known or discoverable. + Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.** + +b. **To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without + limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, + exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed + Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. + Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.** + +c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the + extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination +-------------------------------- + +a. This Public License applies for the term of the Copyright and Similar Rights licensed here. + However, if You fail to comply with this Public License, then Your rights under this Public License terminate + automatically. + +b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for + Your violations of this Public License. + +c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or + stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + +d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions +-------------------------------------- + +a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless + expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from + and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation +-------------------------- + +a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, + or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this + Public License. + +b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically + reformed to the minimum extent necessary to make it enforceable. + If the provision cannot be reformed, it shall be severed from this Public License without affecting the + enforceability of the remaining terms and conditions. + +c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly + agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges + and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or + authority. + +------------------ + +Creative Commons is not a party to its public licenses. +Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those +instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under +a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at `creativecommons.org/policies `__, +Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of +Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of +licensed material. +For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at `creativecommons.org `__ diff --git a/_sources/License.rst.txt b/_sources/License.rst.txt new file mode 100644 index 00000000..5a5f3ea1 --- /dev/null +++ b/_sources/License.rst.txt @@ -0,0 +1,178 @@ +.. _SRCLICENSE: + +.. Note:: + This is a local copy of the `Apache License Version 2.0 `__. + +.. Attention:: + This **Apache License, 2.0** applies to all **source and configuration files of project**, **except documentation**. + +Apache License 2.0 +################## + +Version 2.0, January 2004 + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + +1. Definitions +============== + +**"License"** shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 +through 9 of this document. + +**"Licensor"** shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +**"Legal Entity"** shall mean the union of the acting entity and all other entities that control, are controlled by, or +are under common control with that entity. +For the purposes of this definition, **"control"** means (i) the power, direct or indirect, to cause the direction or +management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +**"You"** (or **"Your"**) shall mean an individual or Legal Entity exercising permissions granted by this License. + +**"Source"** form shall mean the preferred form for making modifications, including but not limited to software source +code, documentation source, and configuration files. + +**"Object"** form shall mean any form resulting from mechanical transformation or translation of a Source form, +including but not limited to compiled object code, generated documentation, and conversions to other media types. + +**"Work"** shall mean the work of authorship, whether in Source or Object form, made available under the License, as +indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix +below). + +**"Derivative Works"** shall mean any work, whether in Source or Object form, that is based on (or derived from) the +Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. +For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link +(or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +**"Contribution"** shall mean any work of authorship, including the original version of the Work and any modifications +or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the +Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. +For the purposes of this definition, **"submitted"** means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source +code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of +discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in +writing by the copyright owner as **"Not a Contribution."** + +**"Contributor"** shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been +received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License +============================= + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object +form. + +3. Grant of Patent License +========================== + +Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, +non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent +claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of +their Contribution(s) with the Work to which such Contribution(s) was submitted. +If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging +that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation +is filed. + +4. Redistribution +================= + +You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You meet the following conditions: + +* You must give any other recipients of the Work or Derivative Works a copy of this License; and +* You must cause any modified files to carry prominent notices stating that You changed the files; and +* You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the + Derivative Works; and +* If the Work includes a **"NOTICE"** text file as part of its distribution, then any Derivative Works that You + distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those + notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a + NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided + along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such + third-party notices normally appear. + The contents of the NOTICE file are for informational purposes only and do not modify the License. + You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to + the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the + License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and +conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this +License. + +5. Submission of Contributions +============================== + +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the +Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may +have executed with Licensor regarding such Contributions. + +6. Trademarks +============= + +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the +Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the +content of the NOTICE file. + +7. Disclaimer of Warranty +========================= + +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its +Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, +without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. +You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks +associated with Your exercise of permissions under this License. + +8. Limitation of Liability +========================== + +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required +by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any +character arising as a result of this License or out of the use or inability to use the Work (including but not limited +to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages +or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability +============================================= + +While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of +support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. +However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on +behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any +liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or +additional liability. + +Appendix: How to apply the Apache License to your work +====================================================== + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets +"[]" replaced with your own identifying information. +(Don't include the brackets!) +The text should be enclosed in the appropriate comment syntax for the file format. +We also recommend that a file or class name and description of purpose be included on the same "printed page" as the +copyright notice for easier identification within third-party archives. + +.. code-block:: none + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/_sources/ci.rst.txt b/_sources/ci.rst.txt new file mode 100644 index 00000000..e7086149 --- /dev/null +++ b/_sources/ci.rst.txt @@ -0,0 +1,33 @@ +.. program:: ghdl +.. _COSIM:CI: + +Continuous Integration +###################### + +Since the main purpose of this repository is to provide reproducible and documented examples for users to learn, all of +them are tested periodically in a `Continuous Integration (CI) `_ +service. Currently, `GitHub Actions `_ is used and four different jobs/environments +are tested: + +* GNU/Linux: + + * Docker image ``ghdl/vunit:llvm`` from `ghdl/docker `_. + * Latest *nightly* release installed through Action `ghdl/setup-ghdl-ci `_ on + Ubuntu. + +* Windows: + + * Latest stable release for MINGW64 with LLVM backend. + * Latest *nightly* release installed through Action `ghdl/setup-ghdl-ci `_ on + MINGW64. + + .. NOTE:: + MSYS2 is set up with Action `msys2/setup-msys2 `_. + +The entrypoints of the examples are shell scripts (``run.sh``), makefiles (see :cosimsharp:`24`), or Python scripts +(``run.py``). To handle all of them with a common interface, `pytest `_ is used. Hence the full test suite +is defined in :cosimtree:`test.py `. Details about which examples are not supported on specific platforms can +be found there. + +Past runs can be inspected at `ghdl/ghdl-cosim/actions `_. +It can be useful for users to know what to expect before executing the examples themselves. diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..b29ff788 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,123 @@ +.. program:: ghdl + +.. _COSIM: + +Co-simulation with GHDL +####################### + +.. index:: interfacing + +.. index:: other languages + +.. index:: foreign + +.. index:: VPI + +.. index:: VHPI + +.. index:: VHPIDIRECT + +.. index:: SystemC + + +.. image:: _static/logo.png + :width: 500 px + :align: center + :target: https://github.com/ghdl/ghdl-cosim + +.. raw:: html + +
+ +

+ + + + + +

+ +
+ +This repository contains **documentation** and **working examples** about how to co-simulate VHDL and other languages through +GHDL's foreign interfaces. Since specific features of the language and the tool are used, it is suggested for users +who are new to either `GHDL` or `VHDL` to first read the :ref:`USING:QuickStart` in the main documentation +(`ghdl.github.io/ghdl `_). + +Three main approaches are used to co-simulate (co-execute) VHDL sources along with software applications written in a +language other than VHDL (typically C/C++/SystemC): + +* `Verilog Procedural Interface `_ (VPI), also known as + Program Language Interface (PLI) 2.0. + +* `VHDL Programming Interface `_ (VHPI), or specific implementations, + such as Foreign Language Interface (FLI). + +* Generation of C/C++ models/sources through a transpiler. + +VPI and VHPI are complex APIs which allow to inspect the hierarchy, set callbacks and/or assign signals. Because +provided features are similar but VPI was published years before VHPI, GHDL supports VPI only. Furthermore, as an +easier to use alternative, GHDL features a custom coexecution interface named VHPIDIRECT, similar to SystemVerilog's +DPI (`Direct Programming Interface `_). +As of today, generation of C++/SystemC models à la `Verilator `_ is not +supported. However, a *vhdlator*/*ghdlator* might be available in the future. + +.. ATTENTION:: In fact, VHPIDIRECT is defined as part of VHPI in VHDL 2008 LRM. However, GHDL's implementation is not + compliant with the standard. This is probably because VHPIDIRECT was implemented in GHDL based on some draft, + before VHDL 2008 was official. Nevertheless, the VASG is currently discussing the addition of a Foreign Function + Interface (FFI) or Direct Programming Interface (DPI) to the next revision of the standard. See `[LCS-202x] VHDL DPI/FFI based on GHDL’s implementation of VHPIDIRECT `_ + (`PDF `_). + +:ref:`VHPIDIRECT ` is easier to use than :ref:`VPI `/:ref:`VHPI ` +because, as the name suggests, it is a direct interface. However, on the one hand VHPIDIRECT requires modification of +VHDL sources, which might not be possible or desirable in certain contexts. On the other hand, VPI/VHPI allow use cases +which are not yet possible with VHPIDIRECT, such as controlling execution time steps. It is suggested to read the quick +start examples of both interfacing mechanisms, in order to get a feel for the differences. + + +.. toctree:: + :hidden: + + ci + + +.. toctree:: + :caption: VHPIDIRECT + :hidden: + + vhpidirect/index + vhpidirect/declarations + vhpidirect/wrapping + vhpidirect/linking + vhpidirect/dynamic + vhpidirect/grt + vhpidirect/examples/index + vhpidirect/notebook/index + + +.. toctree:: + :caption: VPI + :hidden: + + vpi/index + vpi/examples/index + + +.. toctree:: + :caption: VPHI + :hidden: + + vhpi/index + + +.. toctree:: + :caption: Appendix + :hidden: + + License + Doc-License diff --git a/_sources/vhpi/index.rst.txt b/_sources/vhpi/index.rst.txt new file mode 100644 index 00000000..7f85ede2 --- /dev/null +++ b/_sources/vhpi/index.rst.txt @@ -0,0 +1,20 @@ +.. program:: ghdl + +.. _COSIM:VHPI:Intro: + +Introduction +============ + +.. ATTENTION:: + Since VPI and VHPI provide very similar features, and because VPI is already supported in GHDL, VHPI is not available + (yet). Hence, the information in this section is provided for completeness only. + +VHDL Programming Interface (VHPI) was introduced in 2007, as an ammendment to IEEE Std 1076-2002: `1076c-2007 - IEEE Standard VHDL Language Reference Manual - Procedural Language Application Interface `_. +In the 2009, the programming interface was published as part of `1076-2008 - IEEE Standard VHDL Language Reference Manual `_. +The latest version was published in 2019: `1076-2019 - IEEE Standard for VHDL Language Reference Manual `_. + +Some vendors support C programming interfaces similar to VHPI. For example, Mentor Graphics' ModelSim/QuestaSim supports +a Foreign Language Interface (FLI) that provides functions to have procedural access to information within the simulator, +``vsim``. These functions allow traversing the hierarchy, getting/setting values and controlling a simulation run. See +`Using ModelSim Foreign Language Interface for c – VHDL CoSimulation and for Simulator Control on Linux x86 Platform `_ +and `github.com/andrepool/fli `_. diff --git a/_sources/vhpidirect/declarations.rst.txt b/_sources/vhpidirect/declarations.rst.txt new file mode 100644 index 00000000..7ee0938c --- /dev/null +++ b/_sources/vhpidirect/declarations.rst.txt @@ -0,0 +1,113 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Declarations: + +Type declarations +================= + +Only subprograms (**functions** or **procedures**) can be imported using the foreign +attribute. In the following minimal :ref:`example `, +the `sin` function is imported: + +.. code-block:: VHDL + + package math is + function sin (v : real) return real; + attribute foreign of sin : function is "VHPIDIRECT sin"; + end math; + + package body math is + function sin (v : real) return real is + begin + assert false severity failure; + end sin; + end math; + +Requirements: + +* A subprogram is made foreign if the ``foreign`` attribute decorates + it. + +* The ``attribute`` specification must be in the same declarative part as the + subprogram and must be after it. This is a general rule for specifications. + +* The value of the specification must be a locally static string. + +* The value of the attribute must start with ``VHPIDIRECT`` (an upper-case keyword + followed by one or more blanks). The linkage name of the subprogram follows. The + path to a shared library can be optionally specified between the keyword and the + name of the subprogram (see :ref:`COSIM:VHPIDIRECT:Examples:shared:shlib`). + +* Even when a subprogram is foreign, its body must be present in VHDL. However, since + it won't be called, you can make it empty or simply put an assertion. If the body + is ever executed, that will mean that the foreign resource was not properly linked. + +* Except for resources in the standard C library (which is linked by default), the + object file with the source code for foreign subprogram(s) must then be linked to + GHDL, expanded upon in :ref:`COSIM:VHPIDIRECT:Linking`. + +.. NOTE:: + Attribute ``foreign`` is declared in the 1993 revision of the ``std.standard`` package. + Therefore, it cannot be used in VHDL 1987. + +.. _Restrictions_on_foreign_declarations: + +Restrictions on type declarations +--------------------------------- + +Any subprogram can be imported. GHDL puts no restrictions on foreign +subprograms. However, the representation of a type or of an interface in a +foreign language may be obscure. Most non-composite types are easily imported: + +*integer types* + 32 bit word. Generally, `int` for `C` or `Integer` for `Ada`. + +*physical types* + 64 bit word. Generally, `long long` for `C` or `Long_Long_Integer` for `Ada`. + +*floating point types* + 64 bit floating point word. Generally, `double` for `C` or `Long_Float` for `Ada`. + +*enumeration types* + 8 bit word, or, if the number of literals is greater than 256, by a 32 bit word. + There is no corresponding C type, since arguments are not promoted. + +Non-composite types are passed by value. For the `in` mode (default), this corresponds +to the `C` or `Ada` mechanism. `out` and `inout` interfaces are gathered in a record and +this record is passed by reference as the first argument to the subprogram. As a +consequence, it is not suggested to use `out` and/or `inout` modes in foreign +subprograms, since they are not portable. + +Composite types: + +* Records are represented like a `C` structure and are passed by reference to subprograms. + +* Arrays with static bounds are represented like a `C` array, whose length is the number + of elements, and are passed by reference to subprograms. + +* Unconstrained arrays are represented by a fat pointer. It is not suggested to use + unconstrained arrays in foreign subprograms. + +* Accesses to an unconstrained array are fat pointers. Other accesses correspond to an + address/pointer and are passed to a subprogram like other non-composite types. + +* Files are represented by a 32 bit word, which corresponds to an index in a table. + +.. ATTENTION:: + The internal representation of arrays is little-endian left-to-right, regardless of the + bounds. As a result, when used from C, indexes always correspond to direction ``to``; thus, + indexes for arrays with direction ``downto`` are reversed between VHDL and C: + + .. code-block:: vhdl + + constant stdv: std_logic_vector(3 downto 0) := "UX10"; -- a(0) in VHDL corresponds to a[3] in C, both print '0' + constant stdv: std_logic_vector(0 to 3) := "UX10"; -- a(0) in VHDL corresponds to a[0] in C, both print 'U' + +.. ATTENTION:: + Since both constrained arrays and accesses to constrained arrays are passed by reference, + distinct VHDL types are mapped to the same types in C. For example, an array of integers and + an access to array of integers are both passed as ``int*``. + + As a result, it is typically possible to reuse the same C implementation for handling VHDL + arrays/records or their accesses/pointers. See, for example, :ref:`COSIM:VHPIDIRECT:Examples:arrays:intvector:vhdlsized` + and/or :ref:`COSIM:VHPIDIRECT:Examples:quickstart:shrecord`. diff --git a/_sources/vhpidirect/dynamic.rst.txt b/_sources/vhpidirect/dynamic.rst.txt new file mode 100644 index 00000000..f488d4fc --- /dev/null +++ b/_sources/vhpidirect/dynamic.rst.txt @@ -0,0 +1,111 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Dynamic: + +Dynamic loading +############### + +Building either foreign resources or the VHDL simulation model as shared libraries allows to decouple the build procedures. + +.. _COSIM:VHPIDIRECT:Dynamic:loading_within_a_simulation: + +Loading foreign objects from within a simulation +================================================ + +Instead of linking and building foreign objects along with GHDL, it is also possible to load foreign resources dynamically. +In order to do so, provide the path and name of the shared library where the resource is to be loaded from. For example: + +.. code-block:: VHDL + + attribute foreign of get_rand: function is "VHPIDIRECT ./getrand.so get_rand"; + +.. _COSIM:VHPIDIRECT:Dynamic:generating_shared_libraries: + +Generating shared libraries +=========================== + +.. TIP:: + Ensure reading and understanding :ref:`COSIM:VHPIDIRECT:Linking` before this one. + +There are three possibilities to elaborate simulation models as shared libraries, instead of executable binaries: + +* ``ghdl -e -shared [options...] primary_unit [secondary_unit]`` + +* ``ghdl -e -Wl,-shared -Wl,-Wl,--version-script=./file.ver -Wl,-Wl,-u,ghdl_main [options...] primary_unit [secondary_unit]`` + +* ``gcc -shared -Wl,`ghdl --list-link tb` -Wl,--version-script=./file.ver -Wl,-u,ghdl_main`` + +The only difference between the two later procedures is the entrypoint (GHDL or GCC). Preference depends on the additional +options that users need to provide. The main difference with the former is that it will make all symbols visible in the +resulting shared library. In the other two procedures, visible symbols will be the ones defined in the default ``grt.ver`` +added by GHDL and the ``file.ver`` provided by the user. Note that ``file.ver`` must include ``ghdl_main`` and any other +added by the user. See example :ref:`COSIM:VHPIDIRECT:Examples:shared:shghdl` and :cosimsharp:`2`. + +.. HINT:: + When GHDL is configured with ``--default-pic`` explicitly, it uses it implicitly when executing any :option:`-a`, + :option:`-e` or :option:`-r` command. Hence, it is not required to provide these arguments (fPIC/PIE) to GHDL. However, + these might need to be provided when building C sources with GCC. Otherwise linker errors such as the following are produced: + + .. code-block:: + + relocation R_X86_64_PC32 against symbol * can not be used when making a shared object; recompile with -fPIC + +.. HINT:: + For further details regarding how to call ``ghdl_main`` see :ref:`Starting_a_simulation_from_a_foreign_program`. + +.. NOTE:: + Alternatively, if the shared library is built with :option:`--bind` and :option:`--list-link`, the output from the later + can be filtered with tools such as ``sed`` in order to remove the default version script (accomplished in :ghdlsharp:`640`), + and make all symbols visible by default. However, this procedure is only recommended in edge cases where other solutions + don't fit. + +.. _COSIM:VHPIDIRECT:Dynamic:loading_a_simulation: + +Loading a simulation +==================== + +.. ATTENTION:: + By default, GHDL uses ``grt.ver`` to limit which symbols are exposed in the generated artifacts, and ``ghdl_main`` is not + included. See :ref:`COSIM:VHPIDIRECT:Dynamic:generating_shared_libraries` for guidelines to generate shared objects with + visible or filtered symbols. + +In order to generate a position independent executable (PIE), be it an executable binary +or a shared library, GHDL must be built with config option ``--default-pic``. This will ensure +that all the libraries and sources analyzed by GHDL generate position independent code (PIC). + +PIE binaries can be loaded and executed from any language that supports C-alike signatures and types +(C, C++, golang, Python, Rust, etc.). This allows seamless co-simulation using concurrent/parallel execution features available +in each language: pthreads, goroutines/gochannels, multiprocessing/queues, etc. Moreover, it provides a mechanism to execute +multiple GHDL simulations in parallel. + +For example, in Python: + +.. code-block:: Python + + import ctypes + gbin = ctypes.CDLL(bin_path) + + args = ['-gGENA="value"', 'gGENB="value"'] + + xargs = (ctypes.POINTER(ctypes.c_char) * (len(args)+1))() + for idx, arg in enumerate(args): + xargs[idx+1] = ctypes.create_string_buffer(arg.encode('utf-8')) + + gbin.main(len(xargs)-1, xargs) + + import _ctypes + # On GNU/Linux + _ctypes.dlclose(gbin._handle) + # On Windows + #_ctypes.FreeLibrary(gbin._handle) + +See a complete example written in C in :ref:`COSIM:VHPIDIRECT:Examples:shared:shghdl`. + +.. TIP:: + As explained in :ref:`Starting_a_simulation_from_a_foreign_program`, ``ghdl_main`` must be called once, since reseting/restarting + the simulation runtime is not supported yet (see :ghdlsharp:`1184`). When it is loaded dynamically, this means that the binary + file/library needs to be unloaded from memory and loaded again (as in :ref:`COSIM:VHPIDIRECT:Examples:shared:shghdl`). + +.. TIP:: + See :ghdlsharp:`803` for details about expected differences in the exit codes, depending on the version of the VHDL standard + that is used. diff --git a/_sources/vhpidirect/examples/arrays.rst.txt b/_sources/vhpidirect/examples/arrays.rst.txt new file mode 100644 index 00000000..212bf2dc --- /dev/null +++ b/_sources/vhpidirect/examples/arrays.rst.txt @@ -0,0 +1,267 @@ +.. program:: ghdl +.. _COSIM:VHPIDIRECT:Examples:arrays: + +Arrays +####### + +.. IMPORTANT:: + A VHDL access that is used for a constrained/bounded array is tied to a type that specifies its length. In + :ref:`COSIM:VHPIDIRECT:Examples:arrays:intvector` and :ref:`COSIM:VHPIDIRECT:Examples:arrays:matrices` below, one and + two dimensional lengths are specified, respectively. + This means that a separate type needs to be declared for an array with different dimensions and/or different sizes in + any dimension. In order to create a single type for many differently shaped arrays, it would need to be unconstrained. + See :cosimsharp:`3` for work in progress regarding unconstrained types. + +.. _COSIM:VHPIDIRECT:Examples:arrays:intvector: + +Constrained/bounded integer arrays +********************************** + +As explained in :ref:`Restrictions_on_foreign_declarations`, unconstrained arrays are represented by a fat pointer in C, +and it is not suggested to use fat pointers unless it is unavoidable. Hence, it is desirable for data buffers which are +to be represented as arrays to be constrained. However, constraining arrays in VHDL and C separately is error prone. + +This example includes multiple solutions to set the bounding size once only (either in C or in VHDL), and have the +parameter passed to the other language so that matching types are defined. Moreover, independently of where the size is +defined, it is possible to allocate and free the buffers in any of the languages. The following examples show how to +define them in C or VHDL and have them (de)allocated in either of them. + +.. ATTENTION:: + Pointers/accesses MUST be freed/deallocated in the same language that was used to allocate them. Hence, it is not + possible to allocate in VHDL and free in C, nor *vice versa*. + +.. _COSIM:VHPIDIRECT:Examples:arrays:intvector:csized: + +:cosimtree:`Sized in C ` +============================================================ + +Integer arrays with the content fully defined in C can be passed to VHDL by first passing their size, so that an +appropriate array type can be created in VHDL. After that, another VHPIDIRECT subprogram can be defined either to pass +the array to be filled (allocated in VHDL), or to return the array access (pointer) allocated in C. + +This example shows how to hardcode both the length and the content of an array in C, with matching types are created in +VHDL: + +* :cosimtree:`proc `: an array is allocated in VHDL and a procedure is used. + After filling the array in C, it is read and modified from VHDL. + +* :cosimtree:`fcn `: an array is allocated in C and the pointer is passed to + VHDL, where the content is read and modified. + + If the integer array must be created or filled at runtime by some more advanced process, it is possible to execute the GHDL + simulation within a custom ``main()`` entrypoint (see :ref:`COSIM:VHPIDIRECT:Examples:quickstart:wrapping:basic`). By using + ``main.c`` instead of ``caux.c``, the content of the array is written programatically in C, before calling ``ghdl_main``. + Note that the content of the array is read from C both before and after executing the simulation. + +.. NOTE:: + The length (or any other argument) can also be set through top level generics and/or as a custom CLI argument. See + :ref:`COSIM:VHPIDIRECT:Examples:quickstart:cli`. + +.. _COSIM:VHPIDIRECT:Examples:arrays:intvector:vhdlsized: + +:cosimtree:`Sized in VHDL ` +================================================================== + +Complementing the examples above, when the size of a bounded/constrained array is defined in VHDL, it is possible to have +the (de)allocation performed in either VHDL or C. However, while accesses to constrained VHDL types do contain metada about +the bounds, pointers in C do not. Hence, in these examples, the length is explicitly passed along with the pointer/access. +Note that other possible implementations would save the length in a variable in C, so that it does not need to be passed +each time. This is done in ``fcn`` :ref:`above `. + +In this example three equivalent architectures are provided. + +* **calloc**: allocation and deallocation is done in C, invoked from VHDL through ``[c_]allocIntArr`` and ``[c_]freePointer``, + respectively. +* **vhdlallocarr**: allocation of an array is done in VHDL. +* **vhdlallocacc**: allocation of an access is done in VHDL. + +Apart from that, all three implementations are functionally equivalent: + +* A constrained array is allocated. +* The content is initialized from C. +* The content is read and modified from VHDL. +* A function in C is used to assert the modifications and to print the results. +* The array is deallocated. + +Note that VHPIDIRECT resources are defined in a package (as shown in :ref:`COSIM:VHPIDIRECT:Examples:quickstart:package`). +The same package and the corresponding C source file (``caux.c``) are used in all three examples; however: + +* ``[c_]allocIntArr`` and ``[c_]freePointer`` are used by ``calloc`` only. +* The C implementation of the functions used in ``vhdlallocarr`` and ``vhdlallocacc`` is the same, even though the definitions + in VHDL are different. This is because both constrained arrays and accesses to constrained arrays are mapped to the same types + in C. See :ref:`Restrictions_on_foreign_declarations`. + +.. _COSIM:VHPIDIRECT:Examples:arrays:logicvectors: + +:cosimtree:`Vector of std_logic ` +**************************************************************** + +Commonly signals in VHDL are of a logic type or a vector thereof (``std_logic`` and ``std_logic_vector``), coming from IEEE's +``std_logic_1164`` package. These types can hold values other than high and low (``1`` and ``0``) and are enumerated as: +``0 = 'U'``, ``1 = 'X'``, ``2 = '0'``, ``3 = '1'``, ``4 = 'Z'``, ``5 = 'W'``, ``6 = 'L'``, ``7 = 'H'`` and ``8 = '-'``. +As mentioned in :ref:`Restrictions_on_foreign_declarations`: + +* Because the number of enumeration values is less than 256, logic values are transported in 8 bit words (a ``char`` type in C). + + * In this example two declarations make handling logic values in C a bit easier: + + * Providing logic values in C as their enumeration numbers is simplified with the use of a matching enumeration, + ``HDL_LOGIC_STATES``. + * Printing out a logic value's associated character is also simplified with the ``const char HDL_LOGIC_CHAR[]`` + declaration. + + * Logic vectors, of a bounded size, can be easily used in C as a ``char[]`` and passed to VHDL. These can be read as either + an ``access`` of a subtype of ``std_logic_vector``, or as the subtype itself. + +This example builds on the integer vector example (:ref:`COSIM:VHPIDIRECT:Examples:arrays:intvector`), by instead passing an +array of logic values. Foreign subprograms are declared that enable receiving the size of two different logic vectors from C. +There is only one subprogram to get the size of both C arrays, and it takes in an argument to determine which array's size gets +returned. + +.. HINT:: + The ``getLogicVecSize`` in VHDL is declared as receiving a ``boolean`` argument. In C the function is declared to receive a + ``char`` argument. The VHDL booleans ``false`` and ``true`` are enumerations, and have integer values, ``0`` and ``1`` + respectively. As with the logic values, the boolean enumerations use fewer than 8 bits, so the single byte in C's ``char`` + variable receives the VHDL enumeration correctly. + +For illustrative purposes, the two vectors are allocated and populated with logic values in different ways: + +* logicVecA is allocated in C, it is returned as an access type through a function, and indices are manually filled with + enumeration values from ``HDL_LOGIC_STATES``: ``vec[0] = HDL_U;``. + +* logicVecB is allocated in VHDL, it is passed as an ``std_logic_vector`` subtype (by reference) through a procedure, and + indices are filled with integer values: ``for(int i = 0; i < SIZE_LOGIC_VEC_B; i++){ vec[i] = 8-i; }``. + +.. ATTENTION:: + The integer values that are given to ``char`` variables in C which are intended to be read as VHDL logic values, must be + limited to [0, 8]. This ensures that they represent one of the 9 enumerated logic values. + +.. _COSIM:VHPIDIRECT:Examples:arrays:matrices: + +:cosimtree:`Matrices ` +************************************************** + +Constrained multidimensional arrays of doubles/reals +==================================================== + +In many signal and image processing applications, large amounts of data need to be transferred between software and +hardware. In software, it is common to use floating-point data types, since most general-purpose processors include +hard floating-point units. Conversely, fixed-point formats are used in hardware, in order to optimise area and power. +Converting data formats and using intermediate files to transfer test data to/from a simulation model can be tedious +and error-prone. + +This example builds on :ref:`intvector `. Precisely, it's an extension of +case :ref:`COSIM:VHPIDIRECT:Examples:arrays:intvector:csized`. A general procedure to share constrained multidimensional +arrays of any size is shown. Dimensions of a 2D matrix of doubles are defined in C and a helper function is used for +VHDL to read those values into the declaration of an *array of reals* type. Then, the pointer to the matrix (in C) is +retrieved as an access (in VHDL), through another helper function. + +For completeness, IEEE's ``fixed_generic_pkg`` package is used to multiply each value with a constant using fixed-point +formats. This is to illustrate that VHDL 2008 can be used as *fixed-point toolbox* in numerical processing environments. + +.. _COSIM:VHPIDIRECT:Examples:arrays:matrices:axis: + +:cosimtree:`Array and AXI4 Stream Verification Components ` +====================================================================================================== + +.. HINT:: + This example is based on `VUnit `_, an open source unit testing framework for VHDL/SystemVerilog. + Instead of a shell script, the main entrypoint to this example is a ``run.py`` Python script. Users who are not familiar + with VUnit are encouraged to first read :ref:`vunit:user_guide` and get familiar with VUnit example `array_axis_vcs `_. + +.. figure:: img/matrices_array_axis_vcs.png + :alt: VUnit example `array_axis_vcs `_ + :align: center + :width: 500px + + Block diagram of VUnit example ``array_axis_vcs``. + +`VUnit `_ provides an :ref:`integer_array ` package with ``load_csv`` +and ``save_csv`` functions. Those are used in `Array and AXI4 Stream Verification Components `_, +along with AXI4 Stream components from the :ref:`vunit:vc_library`, to load data from CSV files to a UUT. While CSVs as +intermediate files are useful for integration with Matlab, Octave, NumPy, etc., not having an equivalent `real_array` +package posses an additional complexity in applications such as DSP or machine learning. This is because values to be +handled in fixed-point need to be first converted from doubles to integers. + +.. figure:: img/matrices_vunit_axis_vcs.png + :alt: Modified version of the example, renamed to :cosimtree:`vunit_axis_vcs ` + :align: center + :width: 500px + + Block diagram of the modified version of the VUnit example, renamed to :cosimtree:`vunit_axis_vcs `. + +Subdir :cosimtree:`vunit_axis_vcs ` of this example contains a modified +version of a VUnit example (`array_axis_vcs `_), where ``integer_array`` +and CSV files are replaced with VHPIDIRECT functions, so that data is read from C directly. In fact, no additional +co-simulation sources are included in the subdir because the ``main.c`` and ``pkg.vhd`` from the parent dir are used. +These will share the matrix as in the parent example, which is then passed to/from the verification components to test +the AXI Stream master/slave setup. The top-level processes ``stimuli`` and ``receive`` are the master sending and the +slave receiving, respectively, data from/to the matrix variable. For completeness only, ``stimuli`` verifies the contents +of the matrix before sending it, row by row. + +This example illustrates how to separate sources for synthesis from testbench/simulation resources, enhanced with GHDL's +co-simulation features and with VUnit's verification components. At the same time, this is a showcase of how to combine +a VUnit ``run.py`` script (for building and test management) along with custom VHPIDIRECT resources. + +.. HINT:: + Combining VUnit's verification components with VHPIDIRECT allows to build simulation models for VHDL designs + with complex top-level interfaces, while providing a C API to interact with them. Find work in progress in this regard + at `VUnit/cosim `_. + +.. _COSIM:VHPIDIRECT:Examples:arrays:matrices:vga: + +:cosimtree:`VGA (RGB image buffer) ` +============================================================================ + +.. ATTENTION:: + These examples require `ImageMagick `_ and/or `Xlib `_. + +In image generation and processing applications, it can be tedious to debug the designs by looking at waveforms or +logs. Saving data from RAMs and/or typical graphics standards to images or video allows to spot visual artifacts easily. + +This example is based on :ref:`COSIM:VHPIDIRECT:Examples:arrays:intvector:vhdlsized` from :ref:`intvector `. +A 2D array of integers is allocated in a (generic) VHDL package and it is used as a frame buffer. Each integer represents a +pixel: the 24 least significant bits are used for R, G and B (8 bits each); while the 8 most significant are not used. +See `Wikipedia: Color_depth#True_color_(24-bit) `_. + +In the same package, foreign function ``save_screenshot`` is defined. It accepts a pointer to an array of integers, along +with integers defining the width and the height, and an integer used as an identifier of the frame number. Hence, unlike +previous examples with matrices, in this example calls to the VHPIDIRECT function are atomic and do not depend on passing +any parameter beforehand. + +In practice, this example provides the foundation to build *virtual screens* for simulation purposes. Two different +implementations are shown: + +* With :cosimtree:`caux.c `, the content of the frame buffer is saved to a binary + file in RGB24 format. Then, ``convert`` from `ImageMagick `_ is used to convert it to PNG. + When the simulation ends, ``convert`` is used again, to merge all the PNGs into an animated GIF. + +* With :cosimtree:`caux_x11.c `, X11 libraries are used to generate a + window on the desktop. Then, when ``save_screenshot`` is called, the canvas is updated with the content of the frame buffer. + +.. HINT:: + The resolution of the screen (frame buffer) is defined in :cosimtree:`pkg.vhd `, + which is a generic package. Corresponding generics are defined in the top-level entity (testbench). Hence, it is possible to + modify the size of the screen through CLI args. + At the same time, the size of the canvas (X11 window) is defined in the testbench and passed to C as arguments of ``sim_init`` + (see :cosimtree:`caux.c `). By default, the size of the window matches the + size of the screen (frame buffer). However, this is not a requirement. + +Moreover, two different architectures are provided for the testbench (:cosimtree:`tb.vhd `): + +* In architecture ``test``, 16 frames/images are generated. The content of the buffer is set through literal assignments + such as ``screen(j,i) := 16#FFFF00#;``. The generated pattern is a yellow background and an animated cyan box (it is moved to the + right and to the bottom as frames advance). + +* In architecture ``bars``, a single frame/image is generated. The content of the buffer is set through an ``std_logic_vector(2 downto 0)`` + (RGB) signal. A helper function (``RGB_to_integer``, provided in the package) is used to convert the 3 bit signal into + RGB24. The generated static pattern is eight equally spaced vertical bars, each correponding to a value of the 3 bit + signal; from left to right: black, red, green, yellow, blue, magenta, cyan and white. + +.. TIP:: + In `dbhi/vboard: VGA test pattern `_ a *virtual VGA screen* is implemented based + on this shared frame buffer example. A test core is provided, which captures the VSYNC, HSYNC and RGB signals of a UUT, and writes + RGB24 integers to the buffer. Then, apart from Imagemagick, `Tkinter `_ + is supported. Tkinter is the Tcl/Tk interface built in Python. Hence, `dbhi/vboard: vga/test/tkinter `_ + shows how to combine this framebuffer example with :ref:`COSIM:VHPIDIRECT:Examples:shared:pycb`. The result is similar to + using ``X11/Xlib.h``, but `NumPy `_ and `Pillow `_ are used, instead of coding in C. diff --git a/_sources/vhpidirect/examples/grt.rst.txt b/_sources/vhpidirect/examples/grt.rst.txt new file mode 100644 index 00000000..f695c59f --- /dev/null +++ b/_sources/vhpidirect/examples/grt.rst.txt @@ -0,0 +1,17 @@ +.. program:: ghdl +.. _COSIM:VHPIDIRECT:Examples:grt: + +GRT +### + +.. _COSIM:VHPIDIRECT:Examples:grt:step: + +:cosimtree:`step ` +*************************************** + +As explained in :ref:`COSIM:VHPIDIRECT:Wrapping:Step`, GHDL allows executing simulations step by step when wrapped in a +foreign language. This is a minimal showcase. + +The testbench in this example is a single process that prints a message 10 times, every ``10 ns``; then it waits indefinitely. +The wrapper uses a ``do {} while`` loop for printing the return code of each step. If/when the return code is ``>2``, the +simulation is either finished or stopped, so the program exits. diff --git a/_sources/vhpidirect/examples/index.rst.txt b/_sources/vhpidirect/examples/index.rst.txt new file mode 100644 index 00000000..cd295f9a --- /dev/null +++ b/_sources/vhpidirect/examples/index.rst.txt @@ -0,0 +1,13 @@ +.. _COSIM:VHPIDIRECT:Examples: + +Examples +######## + +.. toctree:: + + quickstart + grt + shared + arrays + vffi_user + other diff --git a/_sources/vhpidirect/examples/other.rst.txt b/_sources/vhpidirect/examples/other.rst.txt new file mode 100644 index 00000000..f7711fe8 --- /dev/null +++ b/_sources/vhpidirect/examples/other.rst.txt @@ -0,0 +1,52 @@ +.. _COSIM:VHPIDIRECT:Examples:other: + +Other co-simulation projects +############################ + +This section contains references to other co-simulation projects based on GHDL and VHPIDIRECT. + + +ghdlex and netpp +================ + +`netpp (network property protocol) `_ is a communication library allowing to expose +variables or other properties of an application to the network as abstract 'Properties'. Its basic philosophy is that a +device always knows its capabilities. netpp capable devices can be explored by command line, Python scripts or GUI applications. +Properties of a device - be it virtual or real - are typically described by a static description in an XML device description +language, but they can also be constructed on the fly. + +`ghdlex `_ is a set of C extensions to facilitate data exchange between a GHDL simulation +and external applications. VHPIDIRECT mechanisms are used to wrap GHDL data types into structures usable from a C library. +`ghdlex` uses the `netpp `_ library to expose virtual entities (such as pins or RAM) +to the network. It also demonstrates simple data I/O through unix pipes. A few VHDL example entities are provided, such as +a virtual console, FIFOs, RAM. + +The author of `netpp` and `ghdlex` is also working on `MaSoCist `_, a linux'ish build +system for System on Chip designs, based on GHDL. It allows to handle more complex setup, e.g. how a RISC-V architecture +(for example) is regress-tested using a virtual debug interface. + + +VUnit +===== + +`VUnit `_ is an open source unit testing framework for VHDL/SystemVerilog. Sharing memory +buffers between foreign C or Python applications and VHDL testbenches is supported through GHDL's VHPIDIRECT features. +Buffers are accessed from VHDL as either strings, arrays of bytes or arrays of 32 bit integers. See +`VUnit/cosim `_ for details about the API. + + +ygdes.com +========= + +Yann Guidon is a many-hack who tried to push GHDL's VHPIDIRECT over the edge in a series of articles around 2010 (as +you can read this, GHDL recovered very well since). + +GHDL is an essential tool to design Free HW designs and Yann is still trying to hack it beyond its intended scope, to +fill voids in the Free Software landscape that keep him from designing more microprocessor cores. +He is mostly active on Hackaday.io (`hackaday.io/whygee `_) and working on converging +projects such as: + +* The YGREC8 microcontroller core: `ygrec8.com `_. +* An embedded webserver for co-simulations: `micro HTTP server in C `_. +* A VHDL library of gates that doubles as other verification tool (including hopefully an Automatic Test Pattern Generator): + `VHDL library for gate-level verification `_. diff --git a/_sources/vhpidirect/examples/quickstart.rst.txt b/_sources/vhpidirect/examples/quickstart.rst.txt new file mode 100644 index 00000000..90eb3715 --- /dev/null +++ b/_sources/vhpidirect/examples/quickstart.rst.txt @@ -0,0 +1,257 @@ +.. program:: ghdl +.. _COSIM:VHPIDIRECT:Examples:quickstart: + +Quick Start +########### + +.. _COSIM:VHPIDIRECT:Examples:quickstart:random: + +:cosimtree:`'rand' from stdlib ` +************************************************************** + +By default, GHDL includes the standard C library in the generated simulation models. Hence, resources from ``stdlib`` +can be used without any modification to the build procedure. + +This example shows how to import and use ``rand`` to generate and print 10 integer numbers. The VHDL code is equivalent +to the following C snippet. However, note that this C source is NOT required, because ``stdlib`` is already built in. + +.. code-block:: C + + #include + #include + + int main (void) { + int i; + for (i = 0; i < 10; i++) + printf ("%d\n", rand ()); + return 0; + } + +.. _COSIM:VHPIDIRECT:Examples:quickstart:math: + +:cosimtree:`'sin' from libmath ` +************************************************************ + +By the same token, it is possible to include functions from system library by just providing the corresponding linker +flag. + +In this example, function ``sin`` from the ``math`` library is used to compute 10 values. As in the previous example, +no additional C sources are required, because the ``math`` library is already compiled and installed in the system. + +.. _COSIM:VHPIDIRECT:Examples:quickstart:customc: + +:cosimtree:`custom C ` +***************************************************** + +When the required functionality is not available in pre-built libraries, custom C sources and/or objects can be added +to the elaboration and/or linking. + +This example shows how to bind custom C functions in VHDL as either procedures or functions. Four cases are included: +``custom_procedure``, ``custom_procedure_withargs``, ``custom_function`` and ``custom_function_withargs``. In all +cases, the parameters are defined as integers, in order to keep it simple. See :ref:`COSIM:VHPIDIRECT:Declarations` +for further details. + +Since either C sources or pre-compiled ``.o`` objects can be added, in C/C++ projects of moderate complexity, it might +be desirable to merge all the C sources in a single object before elaborating the design. + +.. _COSIM:VHPIDIRECT:Examples:wrapping: + +Wrapping ghdl_main +****************** + +.. _COSIM:VHPIDIRECT:Examples:quickstart:wrapping:basic: + +:cosimtree:`basic ` +--------------------------------------------------------- + +Instead of using GHDL's own entrypoint to the execution, it is possible to wrap it by providing a custom program +entrypoint (``main`` function), wherein the execution of the simulation is triggered by calling ``ghdl_main``. + +This example shows the most basic of such usage. ``ghdl_main`` is declared as ``extern`` in C, and arguments ``argc`` +and ``argv`` are passed without modification. However, this sets the ground for custom prepocessing and postprocessing +in a foreign language. + +Other options are to just pass empty arguments (``ghdl_main(0, NULL)``) or to customize them: + +.. code-block:: C + + char* args[] = {NULL, "--wave=wave.ghw"}; + ghdl_main(2, args); + +See :ref:`COSIM:VHPIDIRECT:Wrapping` for further details about the constraints of ``argv``. Furthermore, section +:ref:`COSIM:VHPIDIRECT:Examples:quickstart:cli` below shows argument parsing/manipulation strategies. + +:cosimtree:`time ` +------------------------------------------------------- + +Although most of the provided examples are written in C, VHPIDIRECT can be used with any language that supports a +C-like compile and link model. + +This example shows how to time the execution of a simulation from either C or Ada. In both cases, function ``clock`` is +used to get the time before and after calling ``ghdl_main``. Regarding the build procedure, it is to be noted that C +sources are elaborated with :option:`-e`, because GHDL allows passing parameters (in this case, additional C sources) +to the compiler and/or linker. However, since it is not possible to do so with Ada, ``gnatmake``, :option:`--bind` and +:option:`--list-link` are used instead. See :ref:`COSIM:VHPIDIRECT:Linking` for further info about custom linking setups. + +.. HINT:: + Compared to the previous example, the declaration of ``ghdl_main`` includes three arguments in this example: + ``int argc, void** argv, void** envp``. This is done for illustration purposes only, as it has no real effect on the + exercise. + +.. _COSIM:VHPIDIRECT:Examples:quickstart:wrapping:exitcb: + +:cosimtree:`exitcb ` +----------------------------------------------------------- + +When wrapped in a foreign language, calls to ``ghdl_main`` should return an exit code and allow the regular execution of the +wrapper, so that users can handle simulation results in there. However, bugs might result in failures that exit immediately +through an abortion signal. This example shows how to register an exit handler and a signal handler, to allow executing +custom code regardless of crashes in the simulation. + +In VHDL 1993, simulation termination statements and exit codes that simulators should produce were undefined. Therefore, it was +common practice to termine the simulations through reports of severity ``failure``. When wrapping GHDL, such strategies +might result in undesired exit procedures. Using VHDL 2008 is suggested. + +.. _COSIM:VHPIDIRECT:Examples:quickstart:linking: + +Linking +******* + +:cosimtree:`bind ` +------------------------------------------------------ + +Although GHDL's elaborate command can compile and link C sources, it is sometimes preferred or required to call a +compiler explicitly with custom arguments. This is useful, e.g., when a simulation is to be embedded in the build of an +existing C/C++ application. + +This example is equivalent to :ref:`COSIM:VHPIDIRECT:Examples:quickstart:wrapping:basic`, but it shows how to use +:option:`--bind` and :option:`--list-link` instead of :option:`-e`. See :ref:`COSIM:VHPIDIRECT:Linking` for further +details. + +.. HINT:: + Objects generated by :option:`--bind` are created in the working directory. See :ref:`gccllvm-only-programs` and + :ghdlsharp:`781`. + + +.. _COSIM:VHPIDIRECT:Examples:quickstart:package: + +:cosimtree:`package ` +**************************************************** + +If the auxillary VHPIDIRECT subprograms need to be accessed in more than one entity, it is possible to package the +subprograms. This also makes it very easy to reuse the VHPIDIRECT declarations in different projects. + +In this example two different entities use a C defined ``c_printInt(val: integer)`` subprogram to print two different +numbers. Subprogram declaration requirements are detailed under the :ref:`COSIM:VHPIDIRECT:Declarations` section. + +.. _COSIM:VHPIDIRECT:Examples:quickstart:sharedvar: + +:cosimtree:`sharedvar ` +******************************************************** + +While sharing variables through packages in VHDL 1993 is flexible, in VHDL 2008 protected types need to be used. +However, GHDL allows to relax some rules of the LRM through :option:`-frelaxed`. + +This example showcases multiple ways of sharing variables through packages, depending on the target version of the +standard. Three different binaries are built from the same entity, using: + +* A VHDL 1993 package with ``--std=93``. +* A VHDL 1993 package with ``--std=08 -frelaxed``. +* A VHDL 2008 package with ``--std=08``. + +.. NOTE:: + Procedure ``setVar`` is not strictly required. It is used to allow the same descriptions of the entity/architectures + to work with both VHDL 1993 and VHDL 2008. See the bodies of the procedure in :cosimtree:`pkg_93.vhd ` and :cosimtree:`pkg_08.vhd `. + +.. _COSIM:VHPIDIRECT:Examples:quickstart:shint: + +:cosimtree:`shint ` +------------------------------------------------------------- + +As an alternative to using a shared variable in VHDL, subdir :cosimtree:`shint ` +contains an approach based on a helper record type which is used as a handle. Mimicking the concept of *methods* from +Object Oriented (OO) programming, helper C functions are used to read/write the actual variables, instead of sharing +data through an access/pointer. This approach is more verbose than others, but it works with either VHDL 1993 or VHDL +2008 without modification and without requiring :option:`-frelaxed`. Moreover, it enhances encapsulation, as it provides +a user-defined API between VHDL and C, which can improve maintainability when sources are reused. As a matter of fact, +this approach is found in verification projects such as `VUnit `_ and `OSVVM `_. + +.. _COSIM:VHPIDIRECT:Examples:quickstart:shrecord: + +:cosimtree:`shrecord ` +---------------------------------------------------------------- + +Records are contiguous collections of types in VHDL, analogous to ``struct`` in C. This subexample quickly showcases: + + - sharing a C declared struct between VHDL entities + - sharing a VHDL declared record with C functions + +This example only uses two subprograms, and does not have a globally shared variable like the other *sharedvar* examples. +This is in order to keep the package compatible with both VHDL 93 and 08, and keep the focus on sharing a record variable. + +.. NOTE:: + The records/structs have a field of type `std_logic_vector`/`char[]`, which is a variable that is more complicated than + the integer's in previous examples. The :ref:`COSIM:VHPIDIRECT:Examples:arrays:logicvectors` example fully explains this + variable. + +As mentioned in :ref:`Restrictions_on_foreign_declarations`, both records and accesses to records are passed by reference. +This means that the functions in C receive and return ``struct *``, regardless of the VHDL type being an access. + +.. _COSIM:VHPIDIRECT:Examples:quickstart:cli: + +:cosimtree:`Command-Line Arguments ` +*************************************************************** + +Top-level generics +------------------ + +As explained in :ref:`simulation_options`, there is no standard method in VHDL to obtain command-line arguments. However, +GHDL allows to override top-level generics, with certain restrictions. See :option:`-gGENERIC` and :ghdlsharp:`1388` for +further details. + +In this example, two top-level generics of types ``string`` and ``integer`` are used. First, default values are +used. Then, both are overriden through CLI arguments. Note that top-level generics cannot be undefined; hence, the user must +provide either default values or CLI arguments. + +Parsing/customizing ``argv`` +---------------------------- + +By the same token, when wrapping a simulation, ``ghdl_main`` receives ``argc``, ``argv`` and ``env`` as any regular +``main`` function in C. Hence, when GHDL is wrapped as explained in :ref:`Starting_a_simulation_from_a_foreign_program`, +it is possible to either pass raw arguments or to process them before calling ``ghdl_main``. As a result, overrides for +top-level generics can be defined in C sources. Otherwise, GHDL will complain by producing an error. + +These examples showcase multiple approaches to manipulate top-level generics when GHDL is wrapped: + +* :cosimtree:`rawargs `: pass arguments without modification. This, which is equivalent + to :ref:`COSIM:VHPIDIRECT:Examples:quickstart:wrapping:basic` above, is the minimal requirement for default CLI features + to be available when wrapping GHDL. +* :cosimtree:`procargs `: pass arguments and set/add some. First, no argument is + provided and ``genStr`` is assigned a value in C. Then, ``genInt`` is provided and ``genStr`` is added in C. + + .. NOTE:: + This is a naive approach without any specific library. `getopt `_ + and/or `Argp `_ are popular ways to parse arguments + in C. A complete example that uses *getopt* or *Argp* would be very welcome, since it would allow non trivial arguments + (``[c options] -- [ghdl options]`` or ``[ghdl options] -- [c options]``). Feel free to `open a PR `_! + +* :cosimtree:`fcnargs `: pass arguments without modification, but use a function call + to set the default of top-level generics. That is, when no arguments are provided, the value defined in C is used. However, + when ``-ggenInt=`` is provided, it overrides the value of the top-level generic. + +:cosimtree:`Setting parameters in C through VHDL generics ` +--------------------------------------------------------------------------------------------- + +This example is the opposite of ``fcnargs``. A VHDL generic is passed to C when calling an external subprogram. Although +this might feel as a rare use case, it is common when adapting designs that are not aware of VHPIDIRECT features, to +enhance them with external snippets/libraries in a testbench. + +JSON-for-VHDL +------------- + +`JSON-for-VHDL `_ is a synthesizable VHDL library that allows to provide +configuration parameters through either a JSON file or an stringified (and optionally base16 encoded) top-level generic. +Together with `jq `_ or the libraries available for almost any language, it is a very +powerful resource to pass large amounts of params with minimal maintenance effort. + +Examples are available at `Paebbels/JSON-for-VHDL:tests `_. diff --git a/_sources/vhpidirect/examples/shared.rst.txt b/_sources/vhpidirect/examples/shared.rst.txt new file mode 100644 index 00000000..61d0b694 --- /dev/null +++ b/_sources/vhpidirect/examples/shared.rst.txt @@ -0,0 +1,144 @@ +.. program:: ghdl +.. _COSIM:VHPIDIRECT:Examples:shared: + +Shared libs and dynamic loading +############################### + +.. IMPORTANT:: + As explained in :ref:`COSIM:VHPIDIRECT:Dynamic:loading_a_simulation`, in order to load binaries/libraries dynamically, + those need to be built as position independent code/executables (PIC/PIE). + +This set of examples is an introduction from scratch for users who are familiar with C, but who have never built or loaded +shared libraries (``*.so``, ``*.dll`` or ``*.dyn``): + +* :ref:`COSIM:VHPIDIRECT:Examples:shared:shlib`: write C code and compile it as a shared library. +* :ref:`COSIM:VHPIDIRECT:Examples:shared:dlopen`: write two shared libraries in C, and write a main C program for loading and executing both of them. +* :ref:`COSIM:VHPIDIRECT:Examples:shared:shghdl`: build a simulation as a shared library, and write a main C program for loading and executing it. +* :ref:`COSIM:VHPIDIRECT:Examples:shared:py`: build a simulation as a shared library, and write a Python script for loading and executing it. +* :ref:`COSIM:VHPIDIRECT:Examples:shared:pycb`: build a simulation as a shared library, and write a Python script for loading it and replacing callbacks + through ``ctypes`` before executing the simulation. + +.. _COSIM:VHPIDIRECT:Examples:shared:shlib: + +:cosimtree:`shlib ` +******************************************** + +This example features the same functionality as :ref:`COSIM:VHPIDIRECT:Examples:quickstart:random`. However, custom C +sources are used (as in :ref:`COSIM:VHPIDIRECT:Examples:quickstart:customc`) and these are built as a shared library. +See :ref:`COSIM:VHPIDIRECT:Dynamic:loading_within_a_simulation` for further info. + +.. _COSIM:VHPIDIRECT:Examples:shared:dlopen: + +:cosimtree:`dlopen ` +********************************************** + +Although this example does not include a simulation built with GHDL, it is a test and the introduction to the next +example. In this test, two separate shared libraries are built from C sources, both including a function named +``ghdl_main``. Then, in a main C application, both shared libraries are dynamically loaded at the same time, and both +are executed (one after the other). + +This example tests whether symbol ``ghdl_main`` is visible in the shared libraries, and whether the same symbol name +can be loaded from multiple shared libraries (and used) at the same time. + +.. TIP:: + If the symbol is not found, try adding `-g`, `-rdynamic` and/or `-O0` when building the shared libraries. Tools such + as ``objdump``, ``readelf`` or ``nm`` can be used to check if a symbol is visible. For instance, ``objdump -d corea.so | grep ghdl_main``. + +.. HINT:: + Building multiple designs as separate artifacts and dynamically loading them at the same time is a naive approach to + multi-core simulation with GHDL. It is also a possible solution for coarse grained co-simulation with Verilator. + +.. _COSIM:VHPIDIRECT:Examples:shared:shghdl: + +:cosimtree:`shghdl ` +********************************************** + +This example is complementary to :ref:`COSIM:VHPIDIRECT:Examples:shared:shlib`, since the VHDL simulation is built as a +shared library, which is then loaded from a main C application (as in :ref:`COSIM:VHPIDIRECT:Examples:shared:dlopen`). + +When ``main`` is executed: + +* The shared libray is loaded, symbol ``print_something`` is searched for, and it is executed. +* Symbol ``ghdl_main`` is searched for, and it is executed three times. Unfortunately, GHDL does not currently support + reseting/restarting the simulation runtime. Hence, in this example the shared library is unloaded and loaded again + before calling ``ghdl_main`` after the first time. + +See :ref:`COSIM:VHPIDIRECT:Dynamic:generating_shared_libraries` for further details with regard to the visibility of +symbols in the shared libraries. + +.. NOTE:: + On GNU/linux, both executable binaries and shared libraries use the ELF format. As a result, although hackish, it is + possible to load an executable binary dynamically, i.e. without using any of the ``shared`` options explained in + :ref:`COSIM:VHPIDIRECT:Dynamic:generating_shared_libraries`. In this example, this case is also tested. However, this + is not suggested at all, since it won't work on all platforms. + +.. _COSIM:VHPIDIRECT:Examples:shared:py: + +:cosimtree:`py ` +************************************** + +`Python `_'s :py:mod:`ctypes` module is a built-in "*foreign function library for Python*", which +"*provides C compatible data types, and allows calling functions in DLLs or shared libraries*". Thus, it is posible to +reproduce :ref:`COSIM:VHPIDIRECT:Examples:shared:shghdl` by loading and executing the simulation from Python, instead of +C. + +This example uses the testbench and C sources from :ref:`COSIM:VHPIDIRECT:Examples:quickstart:wrapping:exitcb`, but the simulation +is built as a shared library and loaded dynamically from Python. A helper Python module is used for providing OS agnostic +utilities (see :cosimtree:`pyaux.py `). + +.. WARNING:: + On some Linux environments, failing simulations that are dynamically loaded from Python do produce an *Abortion*. This + forces the wrapper/caller to exit inmediately, without running any post-check. See :ghdlsharp:`803` and :cosimsharp:`15` for + further details. + +:cosimtree:`py/vunit ` +================================================== + +This is equivalent to the previous example (:ref:`COSIM:VHPIDIRECT:Examples:shared:py`). Instead of calling GHDL's CLI explicitly, +VUnit's Python aided plumbing is used. This allows including any of VUnit's VHDL features into the simulation models, which +are then to be loaded dynamically from Python. In fact, this is the foundation of `VUnit/cosim `_. + +.. WARNING:: + On some Linux environments, using VHDL 2008 works but VHDL 1993 does not return cleanly in case of failure. An *Abortion* is + produced, which prevents the regular after-simulation execution of VUnit. See :ghdlsharp:`803` and :cosimsharp:`15` for + further details. + +.. _COSIM:VHPIDIRECT:Examples:shared:pycb: + +:cosimtree:`pycb ` +****************************************** + +.. ATTENTION:: + This example is conceptually built on top of :ref:`COSIM:VHPIDIRECT:Examples:shared:shghdl` and :ref:`COSIM:VHPIDIRECT:Examples:shared:py`; + so it is strongly suggested to carefully read those first. Since Pyhon and :py:mod:`ctypes` are used, a good understanding of + the underlaying C syntax and semantics is required. + +The main purpose of this example is to showcase how to execute an arbitrary Python function from a VHDL testbench, by calling +it as a regular VHDL procedure/function and passing (complex) parameters from the VHDL domain. Precisely, function ``plot(x,y)`` +from :mod:`matplotlib.pyplot` is used to draw ``x,y`` graphs from constrained arrays of integers in VHDL. The scheme is as +follows: + +* A **function prototype is defined in C**. This is the definition that will be *common* to C, VHDL and Python. The prototype + in this example is ``(int* x, int* y, int l)``, i.e. two pointers to arrays of integers are passed, and a third argument + tells the length. +* (optional) A default implementation of the function is written in C. This is just a placeholder/canary. +* A **function pointer variable is created**, and it is initialized to the address of the default implementation. +* The **function pointer variable is used** (dereferenced and executed) **either from C, or from VHDL through VHPIDIRECT**. +* **C/VHDL sources are built as a shared library**. +* **From Python**, an alternative implementation of the function is written. **After loading the library, but before executing + the simulation, the function pointer variable is set** to the address of the alternative implementation. + +As a result, at runtime, when VHDL calls the external function, the Python callback is executed. + +.. NOTE:: + For didactic purposes, the run script in this example first uses C and Python only. I.e., arrays are initialized in C and + plotted in Python. Then, in subdir :cosimtree:`pycb `, arrays are initialized in a VHDL + testbench instead. + +.. TIP:: + In `dbhi/vboard: VGA test pattern `_, this example and :ref:`COSIM:VHPIDIRECT:Examples:arrays:matrices:vga` + are combined for providing a *virtual VGA screen* using Python's `NumPy `_, `Pillow `_ + and `Tkinter `_. + Equivalent solutions can be implemented using Python libraries such as `matplotlib `_, + `panda3d `_, `pygame `_, `cocos2dpy `_, `pyglet `_, etc. + Do you want to take up the challenge? `Propose a PR `_! diff --git a/_sources/vhpidirect/examples/vffi_user.rst.txt b/_sources/vhpidirect/examples/vffi_user.rst.txt new file mode 100644 index 00000000..21936e9d --- /dev/null +++ b/_sources/vhpidirect/examples/vffi_user.rst.txt @@ -0,0 +1,301 @@ +.. program:: ghdl +.. _COSIM:VHPIDIRECT:Examples:cinterface: + +FFI/DPI Header +############## + +As explained in :ref:`COSIM:VHPIDIRECT:Declarations`, dealing with some types directly as exported to C can be cumbersome: + +* Some VHDL types are exposed as fat pointers. Hence, dealing with unconstrained arrays and accesses is not straightforward. +* Indexes of arrays with bounds of direction ``downto`` are reversed. +* ``std_logic`` values correspond to an specific enumeration. +* Etc. + +:cosimtree:`vffi_user.h ` and :cosimtree:`vffi_user.vhd ` are utility headers/packages +for easing the usage of those complex types. The examples in this section showcase the usage of those utilities. +These examples are based on the foundations shown in previous examples. Hence, reading those is strongly suggested for understanding +the implementation details. + +.. ATTENTION:: As explained in the :ref:`home page `, GHDL's implementation of VHPIDIRECT is not compliant with the standard, + and the standarization of a FFI/DPI is being discussed in the VASG (see `[LCS-202x] VHDL DPI/FFI based on GHDL’s implementation of VHPIDIRECT `_). + The ``vffi_user.h`` file available in this repo corresponds to the current implementation in GHDL. As the standarization process + goes forward, GHDL is expected to be adapted. Therefore, users should expect probably breaking changes in the header file. + +.. _COSIM:VHPIDIRECT:Examples:vffi_user:demo: + +:cosimtree:`demo ` +********************************************* + +This is a synthetic example that uses all the supported/defined data types and the helper functions in ``vffi_user.h`` for converting +simple values, constrained arrays and multidimensional unconstrained arrays (fat pointers) to sets of C types. Hence, it is a +regression test for the header file. + +.. _COSIM:VHPIDIRECT:Examples:vffi_user:crypto: + +:cosimtree:`crypto ` +************************************************* + +In this example, a data value and key generated in VHDL are used to compute the AES cypher using `OpenSSL `_. +The data, the key and the output are of type ``std_logic_vector(0 to 127)`` and all of them are allocated in VHDL and passed to C +by reference, as shown in ``vhdlallocarr`` from :ref:`COSIM:VHPIDIRECT:Examples:arrays:intvector:vhdlsized`. + +.. HINT:: + This example is a reduced version of the testing infrastructure of `tmeissner/cryptocores `_. + In that repository both encryption and decryption features of an AES IP core written in VHDL are tested using VHPIDIRECT and OpenSSL. + See `tmeissner/cryptocores: aes/sim/vhdl `_. + +As explained in :ref:`Restrictions_on_foreign_declarations` and shown in :ref:`COSIM:VHPIDIRECT:Examples:arrays:logicvectors`, VHDL +variables of types ``std_logic``or ``std_logic_vector`` are not very usable in C being arrays of ``char``. That's specially so because +the default encoding of ``HDL_0`` and ``HDL_1`` is ``2`` and ``3``, respectively. Hence, it is almost a requirement to convert them +into a format that is suitable for the target C function. + +In C, the function provided by OpenSSL expects data as arrays of bits. Hence, variables need to be converted for the memory layout +of the data to match. This can be done in C only, and/or in VHDL too. Apart from the encryption function (:cosimtree:`encrypt.c `), +an intermediate function (``cryptData``) is used (:cosimtree:`caux.c `). The intermediate +function uses enums and two helper functions (``vfficharArr2bitArr`` and ``vffibitArr2charArr``) defined in :cosimtree:`vffi_user.h `. +Furthermore, a ``reverseBitsInBytes`` function written in VHDL is used for reordering (see :cosimtree:`vffi_user-body.vhd `). + +.. TIP:: This example is based on VHDL and C. However, as show in :ref:`COSIM:VHPIDIRECT:Examples:shared:pycb`, using Python modules/functions + from VHDL is also possible. Projects such as `pyca/cryptography `_ provide equivalent features + to OpenSSL. Are you up to writting a variant of this example using Python? `Propose a PR `_! + +.. _COSIM:VHPIDIRECT:Examples:vffi_user:xyce: + +:cosimtree:`xyce ` +********************************************* + +.. + + "*Xyce is an open source, SPICE-compatible, high-performance analog circuit simulator, capable of solving extremely + large circuit problems by supporting large-scale parallel computing platforms. + It also supports serial execution on all common desktop platforms, and small-scale parallel runs on Unix-like + systems*". + + -- `xyce.sandia.gov `_ + +Xyce provides two mechanisms for external tools/simulation codes to use it: + +**General External Interface (GenExt)** + Comprenhensive interface aimed at developers who wish to couple other external codes written in C++. See AppNote + `Coupled Simulation with the Xyce General External Interface `_. + +**Mixed Signal Interface (MixedSignal)** + Interface to use Xyce as a shared library/object, either from C/C++ codes or through Python's ``ctypes``. Class + `XyceCInterface `_ provides methods to work with a + pointer to the topmost object in a Xyce simulation; and corresponding Python bindings are provided. See AppNote + `Mixed Signal Simulation with Xyce 6.11 `_ + (other versions: `October 2018 `_, `June 2020 `_). + +Regarding integration with GHDL, both interfaces might be suitable for different targets: + +* ``GenExt`` might allow GHDL to provide VHDL-AMS support to Xyce, as the interface allows Xyce to execute callbacks defined in + a foreign tool. However, VHDL-AMS support in GHDL is incomplete. Currently, the parsing stage is implemented only. See + :ghdlsharp:`1052`. +* ``MixedSignal`` provides a higher abstraction level mechanism, which allows for co-execution of otherwise atomic modules. + +In this examples, a simplified C API based on ``MixedSignal`` is used. Moreover, VHDL bindings based on :cosimtree:`vffi_user.h ` +are used for driving the co-simulation from VHDL. The main differences between this simplified API and ``XyceCInterface`` are: + +* ``XyceCInterface`` is designed to use a variable of type ``void**`` as the handler of a simulation object. + Unfortunately, such a type is not cleanly mapped to VHDL. Instead, identifiers of type `string` are used in VHDL, + and this bridge provides a storage mechanism to keep track of the correspondence. +* VHDL's type system, which is based on Ada's, avoids the requirement of using additional function/procedure parameters + for passing array constraints. + +This simplified API is targeted at developers who use VHDL as the main language to orchestrate the co-execution. Hence, +existence of C sources is expected to be transparent. :ref:`xyce_pkg` provides the public VHDL API for end-users. Note that +it is possible to run multiple analog simulations by handling multiple instances of ``xyce_t`` from different VHDL +modules. Find usage details in :ref:`xyce_egs`. + +.. note:: Currently, the C implementation is based on :cosimtree:`vffi_user.h `; hence, it is + specific to GHDL. Nevertheless, it should be possible to adapt it for simulators that support FLI or XSI. Contributions + are welcome! + +.. note:: Although the C implementation is not expected to be used directly, it can be useful to access it when the + simulation executable is to be dynamically loaded. In these contexts, it might be handy to initialize and close the Xyce + simulations from, say, Python, while VHDL is used to run steps and handle I/O. Even though specific examples are not + available yet, this is a supported use case. + +.. note:: The current implementation of the storage mechanism is likely to be replaced as a result of the discussions + in `VUnit/vunit#603 `_. Such a replacement should be transparent to + end-users. However, since this is a very experimental project yet, note that disruptive changes might be required. + +.. _xyce_c: + +Xyce: C interface +================= + +This is a simplified API based on `XyceCInterface `_. It +seems that binding ``void** ptr`` from C to VHDL is not supported. So, unconstrained strings are used instead. Unconstrained +strings can be accesed as ``char** id`` from C. A storage mechanism is used to manage actual pointers associated to each id +(string). + +.. code-block:: c + + uint32_t xhdl_init( + vffiNaturalDimArr_t* ptr, + vffiNaturalDimArr_t* cir + ); + + uint32_t xhdl_run( + vffiNaturalDimArr_t* ptr, + double requestedUntilTime + ); + + uint32_t xhdl_run_1D( + vffiNaturalDimArr_t* ptr, + double requestedUntilTime, + vffiNaturalDimArr_t* tArray, + vffiNaturalDimArr_t* vArray + ); + + uint32_t xhdl_run_2D( + vffiNaturalDimArr_t* ptr, + double requestedUntilTime, + vffiNaturalDimArr_t* array2D + ); + + double xhdl_read( + vffiNaturalDimArr_t* ptr, + vffiNaturalDimArr_t* name + ); + + void xhdl_close( + vffiNaturalDimArr_t* ptr + ); + +.. NOTE:: + Given the similarity between ``void**`` and ``char**`` (pointers), it might be possible to define a custom subtype of any + type and use an access type to it as a placeholder for managing C void pointers in VHDL. To be investigated... + +.. _xyce_vhdl: + +Xyce: VHDL interface +==================== + +.. _xyce_pkg: + +*xyce* package +-------------- + +Provides the user interface to co-execute Xyce simulations from VHDL. It is a protected type, which resembles OOP. + +.. literalinclude:: ../../../vhpidirect/vffi_user/xyce/pkg/xyce_pkg.vhd + :language: vhdl + +.. _xyce_xhdl_pkg: + +*xyce_xhdl* package +------------------- + +Provides bindings between VHDL and a foreign language through VHPIDIRECT. This source needs to be included in the design, but users are not expected to use it explicitly. + +.. literalinclude:: ../../../vhpidirect/vffi_user/xyce/pkg/xyce_xhdl_pkg.vhd + :language: vhdl + +.. _xyce_egs: + +Examples +======== + +Xyce developers provide two versions of the same three examples (`utils/XyceCInterface `_): + +**Python_examples** + Use ``xyce_interface.py`` to manage a Xyce simulation from Python. No HDL is used. + +**VPI_examples** + Use Verilog to trigger the Xyce simulations. However, all the logic is implemented in C. + As explained in Section 7 of `Mixed Signal Simulation with Xyce 6.11 `_: + + "*The primary issue with the VPI capability is the lack of standards compliance. The example (...) uses the C++ + features of the `XyceCInterface` directly. Wrapper functions, that only use ANSI C and the native PLI + data-types in their function calls, still need to beimplemented.*" + +The examples in this repo are an adaptation of the VPI_examples from Xyce's repo. Here, VHDL is used through VHPIDIRECT +bindings, instead of Verilog. The management of the execution flow is handled from VHDL, so that developers don't need to +code in C/C++. Regarding data types, native VHDL types are used. Precisely, unconstrained strings and unconstrained +``real_vector``. + +:cosimtree:`runACircuit ` +---------------------------------------------------------------- + +``runACircuit`` is the most simple use case, where a single VHDL test bench and a single C file are used. It shows how to +call Xyce from VHDL, but no data is passed and neither :ref:`xyce_c` nor :ref:`xyce_vhdl` are used. + +.. NOTE:: Currently, ``XyceCInterface`` requires circuit models to be passed as a path to a file. Providing a pointer to a + string or using ``stdin`` is not supported yet. However, the feature has been requested to developers of Xyce and + it might be available in future versions. + +:cosimtree:`runACircuitInSteps ` +------------------------------------------------------------------------------ + +``runACircuitInSteps`` is based on :ref:`xyce_c` and :ref:`xyce_vhdl`. Precisely, ``xyce_t`` and +from :ref:`xyce_pkg` is used. This allows controlling the execution flow from VHDL, unlike ``runACircuit`` +or the versions in Xyce's repo; where all the relevant logic is implemented in C and HDL is only used as a trigger. + +.. NOTE:: See Section 7.1 of `Mixed Signal Simulation with Xyce 6.11 `_ + for information regarding *known issues with coordinated timestepping*. + +:cosimtree:`runWithDACs ` +---------------------------------------------------------------- + +``runWithDACs`` is also based on :ref:`xyce_c` and :ref:`xyce_vhdl`. On top of controlling the execution flow, in this example +DAC/ADC models provided by Xyce are used for passing data between the digital domain and the analog domain. So, the previous +two examples (``runACircuit`` and ``runACircuitInSteps``) are not proper digital/analog co-simulations, because there +is no communication between digital and analog domains. Those examples are provided for illustrative purposes only, as an +introduction to this one. Here, vectors containing voltage and time need to be passed from VHDL to C. Then, an a value from +the analog circuit is read and passed to VHDL. Two equivalent implementations/tests are shown: + +* :cosimtree:`tb_xyce_eg_with_dacs_1D `: two `real_vector` variables are used for passing an array of time values and an array of voltage values as separate arguments. Checking that the length of both arrays match is done explicitly. +* :cosimtree:`tb_xyce_eg_with_dacs_2D `: a single multidimensional array of `real` is used for passing time and voltage values in a single argument. As a result, all the vectors are guaranteed to have the same length. + +The behaviour of both tests is exactly the same. However, the 2D variant makes it easier to extend the example for handling multiple DACs. Overall, both cases are provided for illustrative purposes, as both 1D and 2D unconstrained arrays are fat pointers and helper functions from :cosimtree:`vffi_user.h ` are used. + +.. NOTE:: The YADC and YDAC device models in Xyce, are not realistic device models. Important issues like rise/fall times and + drive/sink currents are not modelled. Hence, they are adequate for artificial transferring signal values between digital + and analog domains, but those models need to be improved. See Section 5 of `Mixed Signal Simulation with Xyce 6.11 `_. + +Usage +----- + +Two `VUnit `_ scripts are provided: :cosimtree:`run_minimal.py ` +builds and executes ``runACircuit``, and :cosimtree:`run.py ` takes care of the others. + +Since Xyce's Mixed Signal Interface is an experimental feature yet, specific versions of the tools are required, and +configuration options need to be correctly chosen for producing shared libraries. In order to make getting a working +environment easier, a :cosimtree:`Dockerfile ` is provided. Moreover, an image is built +periodically and published as `umarcor/cosim:xyce `_. +The image is based on `ghdl/vunit:llvm-master `_ and includes GHDL (``master``), +Python 3, VUnit (``master``) and Xyce. + +.. NOTE:: In these examples, VUnit is used for automatic dependency scanning, incremental builds and unit testing only. + Other features, such as communication libraries and verification components, are not used. + + Moreover, should :cosimtree:`vffi_user.h ` be standardized (see `VHDL DPI/FFI based on GHDL + `_), VUnit would allow testing multiple simulators easily. + +.. NOTE:: As explained in AppNote `Digital/Analog Cosimulation using CocoTB and Xyce `_, + cocotb can be used to co-simulate GHDL and Xyce through VPI, as an alternative to using VHPIDIRECT. Such an approach + might be preferred when Python is to be used as the orchestrator. Moreover, the report introduces an interesting use + case where digital and analog versions of the same module are used. Unfortunately, sources of that example are not + publicly available. + +GUI features +============ + +Neither GHDL nor Xyce provide built-in features for graphical schematic capture or plotting/viewing of simulation +signals. Fortunately, both of them support generating traces that can be visualised with specific free and open source +tools. If GHDL is used for generating waveforms, which might include digitalised analog signals, `GTKWave `_ +can be used. Note that GTKWave provides an *analog* visualization type. Regarding Xyce, see AppNote `Using Open Source Schematic +Capture Tools With Xyce `_ for information about +schematic capture and plotting tools. See also `Reading waveforms from HDL simulators with PulseView `_ +and `Data type exploration and visualization in arithmetic algorithms/circuits `_. + +Analog modelling +================ + +Xyce supports Verilog-A through Automatic Device Model Synthesizer (ADMS), an open-source translator. Xyce/ADMS is a +set of XML templates for use with ADMS, which allows to emit C++ for a device model. See `Xyce/ADMS Users Guide `_. + +Unfortunately, for VHDL-AMS there is neither built-in support nor a similar translation tool (yet). See related +discussion in `ghdl/ghdl#1052 `_. diff --git a/_sources/vhpidirect/grt.rst.txt b/_sources/vhpidirect/grt.rst.txt new file mode 100644 index 00000000..02fcc51e --- /dev/null +++ b/_sources/vhpidirect/grt.rst.txt @@ -0,0 +1,101 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:GRT: + +Using GRT +######### + +From Ada +======== + +.. WARNING:: + This topic is only for advanced users who know how to use `Ada` + and `GNAT`. This is provided only for reference; we have tested + this once before releasing `GHDL` 0.19, but this is not checked at + each release. + +The simulator kernel of `GHDL` named :dfn:`GRT` is written in +`Ada95` and contains a very light and slightly adapted version +of `VHPI`. Since it is an `Ada` implementation it is +called :dfn:`AVHPI`. Although being tough, you may interface to `AVHPI`. + +For using `AVHPI`, you need the sources of `GHDL` and to recompile +them (at least the `GRT` library). This library is usually compiled with +a `No_Run_Time` pragma, so that the user does not need to install the +`GNAT` runtime library. However, you certainly want to use the usual +runtime library and want to avoid this pragma. For this, reset the +`GRT_PRAGMA_FLAG` variable. + +:: + + $ make GRT_PRAGMA_FLAG= grt-all + + +Since `GRT` is a self-contained library, you don't want +`gnatlink` to fetch individual object files (furthermore this +doesn't always work due to tricks used in `GRT`). For this, +remove all the object files and make the :file:`.ali` files read-only. + +:: + + $ rm *.o + $ chmod -w *.ali + + +You may then install the sources files and the :file:`.ali` files. I have never +tested this step. + +You are now ready to use it. + +Here is an example, :file:`test_grt.adb` which displays the top +level design name. + +.. code-block:: Ada + + with System; use System; + with Grt.Avhpi; use Grt.Avhpi; + with Ada.Text_IO; use Ada.Text_IO; + with Ghdl_Main; + + procedure Test_Grt is + -- VHPI handle. + H : VhpiHandleT; + Status : Integer; + + -- Name. + Name : String (1 .. 64); + Name_Len : Integer; + begin + -- Elaborate and run the design. + Status := Ghdl_Main (0, Null_Address); + + -- Display the status of the simulation. + Put_Line ("Status is " & Integer'Image (Status)); + + -- Get the root instance. + Get_Root_Inst(H); + + -- Disp its name using vhpi API. + Vhpi_Get_Str (VhpiNameP, H, Name, Name_Len); + Put_Line ("Root instance name: " & Name (1 .. Name_Len)); + end Test_Grt; + + +First, analyze and bind your design:: + + $ ghdl -a counter.vhdl + $ ghdl --bind counter + + +Then build the whole:: + + $ gnatmake test_grt -aL`grt_ali_path` -aI`grt_src_path` -largs + `ghdl --list-link counter` + + +Finally, run your design:: + + $ ./test_grt + Status is 0 + Root instance name: counter + diff --git a/_sources/vhpidirect/index.rst.txt b/_sources/vhpidirect/index.rst.txt new file mode 100644 index 00000000..b825e766 --- /dev/null +++ b/_sources/vhpidirect/index.rst.txt @@ -0,0 +1,26 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Intro: + +Introduction +============ + +.. ATTENTION:: As explained in the :ref:`home page `, GHDL's implementation of VHPIDIRECT is not compliant with the standard, + and the standarization of a FFI/DPI is being discussed in the VASG. As a result, in this documentation VHPIDIRECT, VFFI, FFI, + VDPI and/or DPI might be used as synonyms for referring to the new standardized interface, which is currently work in progress. + +Interfacing with foreign languages through VHPIDIRECT is possible on any platform. You can reuse or define a subprogram +in a foreign language (such as `C` or `Ada`) and import it into a VHDL design. + +.. NOTE:: + GHDL supports different backends, and not all of them generate binary artifacts. Precisely, ``mcode`` is an in-memory + backend. Hence, the examples need to be built/executed with either LLVM or GCC backends. A few of them, the ones that + do not require linking object files, can be used with mcode. + +.. ATTENTION:: + As a consequence of the runtime copyright, you are not allowed to distribute an + executable produced by GHDL without allowing access to the VHDL sources. See + :ref:`INTRO:Copyrights`. + +.. TIP:: + See :ghdlsharp:`1053` for on-going work with regard to VHPIDIRECT. diff --git a/_sources/vhpidirect/linking.rst.txt b/_sources/vhpidirect/linking.rst.txt new file mode 100644 index 00000000..b2a4588f --- /dev/null +++ b/_sources/vhpidirect/linking.rst.txt @@ -0,0 +1,75 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Linking: + +Linking object files +#################### + +.. _Linking_with_foreign_object_files: + +Linking foreign object files to GHDL +==================================== + +You may add additional files or options during the link of `GHDL` using +``-Wl,`` as described in :ref:`passing-options-to-other-programs`. +For example:: + + ghdl -e -Wl,-lm math_tb + +will create the :file:`math_tb` executable with the :file:`lm` (mathematical) +library. + +Note the :file:`c` library is always linked with an executable. + +.. HINT:: + The process for personal code is the same, provided the code is provided as a C source or compiled to an object file. + Analysis must be made of the HDL files, then elaboration with ``-e -Wl,personal.c [options...] primary_unit [secondary_unit]`` as arguments. + Additional C or object files are flagged as separate ``-Wl,*`` arguments. The elaboration step will compile the executable with the custom resources. + Further reading (particularly about the backend particularities) is at :ref:`Elaboration:command` and :ref:`Run:command`. + +.. _Linking_with_Ada: + +Linking GHDL object files to Ada/C +================================== + +As explained previously in :ref:`Starting_a_simulation_from_a_foreign_program`, +you can start a simulation from an `Ada` or `C` program. However the build +process is not trivial: you have to elaborate your program and your +`VHDL` design. + +.. HINT:: + If the foreign language is C, this procedure is equivalent to the one described in + :ref:`Linking_with_foreign_object_files`, which is easier. Thus, this procedure is + explained for didactic purposes. When suitable, we suggest to use :option:`-e`, instead + of :option:`--bind` and :option:`--list-link`. + +First, you have to analyze all your design files. In this example, we +suppose there is only one design file, :file:`design.vhdl`. + +:: + + $ ghdl -a design.vhdl + +Then, bind your design. In this example, we suppose the entity at the +design apex is ``design``. + +:: + + $ ghdl --bind design + +Finally, compile/bind your program and link it with your `VHDL` +design: + +in C: + +:: + + gcc my_prog.c -Wl,`ghdl --list-link design` + +in Ada: + +:: + + $ gnatmake my_prog -largs `ghdl --list-link design` + +See :ref:`gccllvm-only-programs` for further details about :option:`--bind` and :option:`--list-link`. diff --git a/_sources/vhpidirect/notebook/howtouseghdlfromc.rst.txt b/_sources/vhpidirect/notebook/howtouseghdlfromc.rst.txt new file mode 100644 index 00000000..6c9621b1 --- /dev/null +++ b/_sources/vhpidirect/notebook/howtouseghdlfromc.rst.txt @@ -0,0 +1,282 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Notebook:HowToUseGHDLFromC: + +How to use GHDL from an external C program? +=========================================== + +.. NOTE:: This content was a dialogue between `@hrvach `_ and `@umarcor `_ + in a question/issue in GHDL's repo, about co-simulation of a Verilog machine around a VHDL CPU: :ghdlsharp:`1512`. + +---- + +@hrvach: + +I would be very grateful for some advice. I'm trying to do a project and the CPU core I need to test against only has a VHDL +implementation. My question is - what is the easiest way for me to include the generated ``.o`` in my own project, and then provide +a set of values to the CPU pins and a single clock pulse, read the output, provide new set of values, repeat etc. + +---- + +@umarcor: + +HDL simulators need to be the root and absolute managers of their own execution. You can instruct them to execute your foreign +software routines at specific instants or under specific circumstances, but you cannot dethrone them. This is because +"standard" co-simulation interfaces define how to import foreign resources only, not how to export HDL subprograms/components. +That is true for VPI, VHPI, DPI, whatever... + +Nevertheless, what you want to achieve is possible for sure, since that is one of the main use cases for co-simulation. +You/we just need to think it upside down. + +Before going into further detail, which of the following alternatives do you prefer? + +- Write a VHDL testbench where VHDL sources are instantiated, and combine that with C and/or Python resources. +- Keep the VHDL sources untouched and write C and/or Python only. + +Both alternatives are functionally equivalent, require a similar level of expertise, and take a similar amount of work/code +length. The answer depends mostly on how comfortable you feel with "writing software in HDL", or whether you identify yourself +as a "mostly software guy who is happier with Python". If you are a C guy, you will lie in-between. In the former, I'll recommend +you to use GHDL's VHPIDIRECT interface, which is what ghdl-cosim repo is mostly about. Otherwise, I'll suggest to use VPI, either +in C or through cocotb. + +---- + +@hrvach: + +My goal is to recreate a very old Unix 68010 based machine in Verilog. I use Verilator, the Verilog -> C++ translation and splice +in a software CPU core in C because that's fast enough for a near realtime simulation. + +However, after getting the basic functionality done, in order to make it work with actual CPU, I need to get the bus timings +correctly (test and verify handling acknowledgments, cpu-space cycles etc) and the only 68010 model I know of is in VHDL. So, +at the moment I have the memory, bus, logic and peripherals in Verilog, testbench in C that actually has UI in SDL and soft CPU +in C I am looking to replace with the compiled VHDL. All of this is to avoid having to to actual FPGA synthesis for every change +because that takes forever. + +I am not that skilled in VHDL, but I could learn how to make a wrapper around the VHDL CPU model if needed. Now that you know +what I'm after, what do you suggest? Once again, thanks for your time and advice! + +---- + +@umarcor: + +For clarification, regarding my previous explanation about HDL simulators needing "*to be the root and absolute managers*", +note that Verilator is precisely a way to work around that: it provides everything except the root of the runtime, which you +are in charge of. The concept of a 'ghdlator'|'vhdlator' has been discussed before, but it's not implemented. + +The quick answer is, you cannot generate ``*.o`` objects from VHDL (components) and have them included in your C root, the same +way you are including you Verilated (C++) modules. You need to forget about that code structure/architecture. I'm not saying +it is not technically possible; it might be, but not with the currently available open source tools. + +Let's leave the VHDL-Verilog co-simulation aside, for now. We'll get back to that later. Let's focus on testing an existing +CPU in VHDL only. As a reference, the CPU will have a single (registered) input port and a single output port, apart from CLK +and RST. + +.. code-block:: vhdl + + entity tb is + end entity; + + architecture test of tb is + + signal clk, rst : std_logic := '0'; + signal iport, oport : std_logic_vector(31 downto 0); + + begin + + clk <= not clk after 10 ns; -- 50 MHz + + process + begin + report "Start simulation"; + rst <= '0'; + wait for 100 ns; + rst <= '1'; + wait for 1 ms; + report "End simulation"; + std.env.stop(0); + wait; + end process; + + process(clk) + begin + if rising_edge(clk) then + + iport <= COSIM_FUNCTION(oport); + + end if; + end process; + + UUT: entity work.CPU + port map ( + CLK => clk, + RST => rst, + IPORT => iport, + OPORT => oport + ); + + end; + +That's a very basic VHDL testbench, where RST is kept high for 100 ns and the simulation lasts 1 ms. In each rising edge of +clk, a function receives ``oport`` (the output of the CPU) and generates ``iport`` (the input of the CPU). + +You might implement that COSIM_FUNCTION as a plain VHDL function that reads a text file (maybe a CSV) or a binary file (see +`Files – theory & examples `_). It would be a two column table. In +each execution after the first one, you compare the ``oport`` with the expected output from the previous cycle, and you load +the new value for ``iport``. + +However, generating text files in a different language and reading them in VHDL is cumbersome. Binary files make it slightly +easier, but it is not comfortable for handling tables/matrices. Instead, we can implement COSIM_FUNCTION in C. That's what +the VHPIDIRECT examples are about. These are the prototypes of the VHDL function and the corresponding C function: + +.. code-block:: vhdl + + function COSIM_FUNCTION ( oport : std_logic_vector(31 downto 0) ) return std_logic_vector(31 downto 0); + +.. code-block:: c + + char* COSIM_FUNCTION (char* oport); + +``std_logic`` are 9-value enumerations (see :ref:`COSIM:VHPIDIRECT:Declarations`). That's why the vectors are ``char*`` in C. +Typically, we will want to manipulate 32 bit vectors as signed/unsigned integers. Let's fix that: + +.. code-block:: vhdl + + process(clk) + begin + if rising_edge(clk) then + iport := std_logic_vector(to_signed( + COSIM_FUNCTION( integer(signed(oport)) ) + , 32)); + end if; + end process; + +.. code-block:: vhdl + + function COSIM_FUNCTION ( oport : integer ) return integer; + +.. code-block:: c + + int32_t COSIM_FUNCTION (int32_t oport); + +Now, we can use C for evaluating each call to ``COSIM_FUNCTION`` by using an integer representing 32 bit input/output ports. +For example, assuming that the CPU adds 10 to the input every clock cycle and provides it through the output: + +.. code-block:: c + + int32_t TABLE[5][2] = { + { 0, 10 }, + { 1, 11 }, + { 2, 12 }, + { 3, 13 }, + { 4, 14 }, + } + + uint8_t id = 0; + + int32_t COSIM_FUNCTION (int32_t oport) { + if ( id == 0 ) { + return TABLE[0][0]; + } + // Avoid crashing if the simulation is 'too long' + if ( id > 4 ) { + return 0; + } + assert( oport == TABLE[id++][0]); + return TABLE[id][1]; + } + +In practice, all the C code is loaded in the same memory space as the simulation. Hence, the global variables in the C sources +retain their values for all the duration. Nevertheless, we might keep track of ``id`` in VHDL instead, and pass it as an +additional argument to ``COSIM_FUNCTION``. That's how "frames" are marked in :ref:`COSIM:VHPIDIRECT:Examples:arrays:matrices:vga` +(see also `VGA test pattern `_). + +If you don't provide your own ``main`` function, GHDL will take care of that. Yet, you can provide it: + +.. code-block:: c + + int32_t TABLE[5][2]; + + uint8_t id; + + int32_t COSIM_FUNCTION (int32_t oport) { + if ( id == 0 ) { + return TABLE[0][0]; + } + // Avoid crashing if the simulation is 'too long' + if ( id > 4 ) { + return 0; + } + assert( oport == TABLE[id++][0]); + return TABLE[id][1]; + } + + int main(int argc, char* argv) { + id = 0; + TABLE = { + { 0, 10 }, + { 1, 11 }, + { 2, 12 }, + { 3, 13 }, + { 4, 14 }, + }; + return ghdl_main(argc, argv); + } + +Writing your custom ``main`` allows dynamically generating test data before starting the simulation, and/or manipulating GHDL's +CLI arguments. This is explained in :ref:`COSIM:VHPIDIRECT:Wrapping` (see examples in :ref:`COSIM:VHPIDIRECT:Examples:wrapping`). + +Effectively, we now have a C interface. Instead of generating an executable binary, we can let GHDL generate a shared library. +That allows loading it in e.g. Python, to have the TABLE generated with, say, some SciPy module. That's what :ref:`COSIM:VHPIDIRECT:Examples:shared` +is about. See also :ghdlsharp:`1398`. Note that you cannot generate a shared lib with a ``main`` function. That's why Python examples +use something else. + +Summarising, we defined a callback using VHDL for describing precisely where in the hierarchy to call it and with which frequency +it needs to be called. We also used VHDL for converting the data types to some which are friendly for binding to C. This meaningful +because VHDL is much better designed for manipulating bits/slices that C. + +At this point, from a higher level perspective, it is easy to understand VPI. With VPI, you don't need to write the VHDL testbench, +and you don't need to define a ``COSIM_FUNCTION`` providing prototypes in VHDL and C. Instead, you can use the UUT as the top level +of the HDL hierarchy, and there is an interface in C that allows you to "register a callback that is executed every X time". That +callback receives the model/hierarchy of the simulation, which you can navigate through the API for reading/writing values. It +might be misleading with VPI that, despite writting the entrypoint and registering everythin in C, the simulator is still the root +of the execution. + +In my opinion, the main limitation of not writing any VHDL testbench is that you are forced to doing all hierarchy navigation and +the type manipulation in C. Moreover, accessing arrays/records through VPI is not supported in GHDL yet (see #1249). However, if +you want to manipulate top-level ports only, it fits the purpose. + +Instead of dealing with VPI in C, you can use cocotb, which is a Python wrapper around VPI. Although not exactly my cup of tea +(I'm a VHDL person), cocotb is the fastest growing verification/testing approach: `GitHub Facts About the HDL Industry: Verification Practices `_. +You might want to have a look at this WIP discussion about combining cocotb and a top-level VHDL testbench: `umarcor/vunit-cocotb `_. + +Therefore, and this is very important, GHDL's VHPIDIRECT and VPI are mostly equivalent. The main difference is the language you +use for writing your test code. In both cases, GHDL is the root and it executes callbacks. Verbosity is different, each has some +specific features which make things easier/harder, etc. so it's not exactly the same, but almost. + +Now, back to your context. You don't want to generate ``iport`` values and/or to assert ``oport`` values in C/Python. You want to +plug the rest of the machine (written in Verilog): + +- Option 1. Take ``COSIM_FUNCTION`` and put all your Verilated models inside. That is, let GHDL be the root, and evaluate the C++ + models with a fixed frequency (in terms of simulation time). See :ghdlsharp:`1335`, where a user reported co-simulating microwatt + (VHDL) and Litedram (Verilog) using this approach. I am not aware of a similar example using VPI, but it should be equivalent. +- Option 2. Forget about this issue. Take VHDL + Verilog sources and synthesise them with ghdl-yosys-plugin + Yosys. + + * Option 2.a. Use Yosys' ``write_verilog`` command for generating post-synthesis Verilog sources. Process those with Verilator. + * Option 2.b. Use CXXRTL, instead of ``write_verilog``. + * In any case, simulate as if VHDL or GHDL did never exist; i.e., be the manager of the simulation as you are used to doing with Verilator. + +Naturally, options 2.a and 2.b have some caveats, such as not being able to simulate non-synthesisable VHDL models (Verilator is +constrained to the synthesisable subset of Verilog anyway), or being lost in the conversion/mangling/flattening/casing. That's +why I explained all the details about VHPIDIRECT, and that's why I think that VHPIDIRECT + Verilator is the way to go. Still, +if you want to treat VHDL sources as a black box with "simple" port types, Yosys might be the best approach. Yosys/CXXRTL is +also useful for comparing pre-synthesis and post-synthesis behaviour, even if you pick VHPIDIRECT/VPI + Verilator for development. + +Closing remarks: + +* I wrote all the code examples above off the top of my head. There might be a lot of typos/bugs. Please, find working examples + in :ref:`COSIM:VHPIDIRECT:Examples` (all of those are tested in CI). +* I did never use CXXRTL, and I just run a couple of examples with cocotb. +* GHDL's implementation of VHPIDIRECT is not compliant with the usage of the term/keyword VHPIDIRECT in the VHDL LRM, where it's + part of VHPI. The concept of how VHPI/VHPIDIRECT work in the LRM is closer to VPI than to a Foreign Function Interface (FFI). + However, what I explained above is essentially a FFI. That's why there is an on-going discussion in the VHDL Analysis and + Standardisation Group (VASG) about including a FFI in the next revision of the standard: `[LCS-202x] VHDL DPI/FFI based on GHDL’s implementation of VHPIDIRECT `_. diff --git a/_sources/vhpidirect/notebook/index.rst.txt b/_sources/vhpidirect/notebook/index.rst.txt new file mode 100644 index 00000000..9c61f681 --- /dev/null +++ b/_sources/vhpidirect/notebook/index.rst.txt @@ -0,0 +1,14 @@ +.. program:: ghdl +.. _COSIM:Notebook: + +Notebook +######## + +While other sections related to VHPIDIRECT are meant for reference or for showcasing specific features, this section +contains articles and discussions to address common questions and mistakes. + +.. toctree:: + + howtouseghdlfromc + memorylayout + mistakes diff --git a/_sources/vhpidirect/notebook/memorylayout.rst.txt b/_sources/vhpidirect/notebook/memorylayout.rst.txt new file mode 100644 index 00000000..797292a3 --- /dev/null +++ b/_sources/vhpidirect/notebook/memorylayout.rst.txt @@ -0,0 +1,12 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Notebook:MemoryLayout: + +Memory Layout +============= + +*TBC* + +* ``to`` vs ``downto`` +* Bit ordering within bytes. ``reverseBitsInBytes``, ``vfficharArr2bitArr`` and ``vffibitArr2charArr``. +* Multidimensional arrays. diff --git a/_sources/vhpidirect/notebook/mistakes.rst.txt b/_sources/vhpidirect/notebook/mistakes.rst.txt new file mode 100644 index 00000000..6a50d01e --- /dev/null +++ b/_sources/vhpidirect/notebook/mistakes.rst.txt @@ -0,0 +1,39 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Notebook:Mistakes: + +Common mistakes +=============== + +* Although function overloading is supported in VHDL, it is not possible in C. + Hence, it should be avoided to declare multiple procedures/functions which map to the same foreign subprogram. + For the compiler, there is only one definition of the imported function. + So, if different prototypes/profiles are declared, weird things may happen. + See :ghdlsharp:`639`. + +* If a procedure/function is decorated with the ``foreign`` attribute, apart from a matching body in VHDL, the foreign + subprogram **must** be defined (linked) for elaboration to succeed. + This is required even when it is not used in the design. + In context where conditional inclusion of VHPIDIRECT features is required, it is suggested to provide alternative + (dummy) sources for either VHDL packages or C sources (see :ghdlsharp:`793`). + +* There are some corner cases when using large variables/signals. + When you try to allocate a single object which is too large, GHDL will complain. + That can be fixed with :option:`--max-stack-alloc`. + However, when you allocate multiple objects which are smaller than the limit, but the last one overflows, GHDL will + not complain, it will crash instead. + In this case, ``ulimit`` needs to be modified/increased. + To remove the limit, set ``ulimit -s unlimited``. + See :ghdlsharp:`1112`. + + * In Python (say, when using VUnit or cocotb), the stack size can be increased by using the `resource module`_. + For example ``resource.setrlimit(resource.RLIMIT_STACK, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))``. + +.. _resource module: https://docs.python.org/3/library/resource.html#resource.setrlimit + +* The size of objects is supposed to be limited to 4GB. + However, users finding the limit might get different constraints, depending on the backend. See :ghdlsharp:`822`. + +* Waveform buffering can prevent the last cycles being flushed when a foreign subprogram is executed. + Use ``fflush(NULL);`` at the beginning of the foreign subprogram. + See :ghdlsharp:`1855`. diff --git a/_sources/vhpidirect/wrapping.rst.txt b/_sources/vhpidirect/wrapping.rst.txt new file mode 100644 index 00000000..a94d4d15 --- /dev/null +++ b/_sources/vhpidirect/wrapping.rst.txt @@ -0,0 +1,82 @@ +.. program:: ghdl + +.. _COSIM:VHPIDIRECT:Wrapping: + +.. _Starting_a_simulation_from_a_foreign_program: + +Wrapping a simulation +##################### + +By default, GHDL generates an internal ``main`` function, which is the entrypoint to executable binaries/simulations. However, +simulation can be optionally executed from external programs, by declaring given functions as externally defined resources. Should +an alternative ``main`` function be defined, that will be used by the executable, instead of the one from GHDL. + +Wrapping the simulation allows dynamically generating test data, and/or manipulating CLI arguments. + +.. ATTENTION:: + Shared libraries should not contain a ``main`` symbol, but explicitly named entrypoints. When :ref:`COSIM:VHPIDIRECT:Dynamic:generating_shared_libraries` + or :ref:`COSIM:VHPIDIRECT:Dynamic:loading_a_simulation`, wrapping ``ghdl_main`` is required. + +Single function exection (ghdl_main) +==================================== + +Function ``ghdl_main`` allows executing the simulation until termination. When called, GRT takes control and drives the simulation, +without intervention from the wrapper. However, if VHPIDIRECT or VPI functions/callbacks were registered, those are triggered +at the corresponding simulation time. + +In your foreign sources, define the external prototype of ``ghdl_main`` as follows: + +in C: + +.. code-block:: C + + extern int ghdl_main (int argc, char **argv); + +in Ada: + +.. code-block:: Ada + + with System; + ... + function Ghdl_Main (Argc : Integer; Argv : System.Address) + return Integer; + pragma import (C, Ghdl_Main, "ghdl_main"); + +.. TIP:: + Don't forget to list the object file(s) of this entry point and other foreign sources, as per + :ref:`Linking_with_foreign_object_files`. + +.. ATTENTION:: + The ``ghdl_main`` function must be called once, since reseting/restarting the simulation runtime is not supported yet. A + workaround is to build the simulation as a shared object and load the ``ghdl_main`` symbol from it (see :ref:`COSIM:VHPIDIRECT:Examples:shared:shghdl`). + +.. HINT:: + Immitating the run time flags, such as ``-gDEPTH=12`` from :option:`-gGENERIC`, requires the ``argv`` to have the + executable's path at index 0, effectively shifting all other indicies along by 1. This can be taken from the 0 index of the + ``argv`` passed to ``main()``, or (not suggested, despite a lack of consequences) left empty/null. + + Since ``ghdl_main`` is the entrypoint to the design (the simulation kernel/runtime named GRT), the supported CLI options + are the ones shown in :ref:`USING:Simulation`. Options for analysis/elaboration are not required and will NOT work. See :option:`-r`. + +.. _COSIM:VHPIDIRECT:Wrapping:Step: + +Step by step execution +====================== + +For finer grained control of the simulation steps, a set of lower level functions can be used instead of ``ghdl_main``. +Those are provided in :cosimtree:`grt.h `. After initializing GRT, providing arguments and initializing +the simulation, a loop allows checking the return value of each step: + +.. code-block:: C + + // 0: delta cycle + // 1: non-delta cycle + // 2: stop + // 3: finished + // 4: stop-time reached + // 5: stop-delta reached + int ecode; + do { + ecode = __ghdl_simulation_step (); + printf("ecode: %d\n", ecode); + } while (ecode<3); diff --git a/_sources/vpi/examples/index.rst.txt b/_sources/vpi/examples/index.rst.txt new file mode 100644 index 00000000..90e20203 --- /dev/null +++ b/_sources/vpi/examples/index.rst.txt @@ -0,0 +1,21 @@ +.. program:: ghdl +.. _COSIM:VPI:Examples: + +Examples +######## + +A very brief description of how to use VPI is that ``vpi_user.h`` provides dozens of functions to scan/navigate the hierarchy +of the elaborated hardware design, and it allows setting callbacks for specific events/signals. + +.. NOTE:: + Since VHDL sources are agnostic to the usage of VPI modules, most of the examples in this section reuse the same VHDL + sources. Readers should focus on the differences between the provided C files. + +.. ATTENTION:: + On Windows, the directory containing ``libghdlvpi.dll`` needs to be added to the ``PATH``. This can be achieved with + :option:`--vpi-library-dir`, :option:`--vpi-library-dir-unix` or ``$(cd $(dirname $(which ghdl))/../lib; pwd)``. + +.. toctree:: + + quickstart + other diff --git a/_sources/vpi/examples/other.rst.txt b/_sources/vpi/examples/other.rst.txt new file mode 100644 index 00000000..4e3dd5bb --- /dev/null +++ b/_sources/vpi/examples/other.rst.txt @@ -0,0 +1,45 @@ +.. _COSIM:VPI:Examples:other: + +Other co-simulation projects +############################ + +This section contains references to other co-simulation projects based on GHDL and VPI. + +cocotb +====== + +`cocotb `__ is a coroutine based cosimulation library for writing VHDL and Verilog +testbenches in Python. It provides a shared library for binding the VPI interface to Python scripts. As a result, from +Python, users can read/set top-level ports or signals in the testbench, without modifying HDL sources at all. Cocotb +supports other open source simulators (Icarus Verilog or Verilator) and it can also interact with commercial tools through +VHPI. + +GHDL VPI virtual board +====================== + +`GHDL VPI virtual board `__ is a VPI application that +virtualizes the IOs of a Digilent Nexys-4 like board. It provides a testbench and a matching GUI for users/students to test +their designs as if they had a physical board, instead of examining waveforms. Yet, waves are dumped and can be inspected in +GTKWave, as in a traditional workflow. Available peripherals are 7 segment displays, buttons, switches and LEDs. + +.. image:: https://gitlab.ensta-bretagne.fr/bollenth/ghdl-vpi-virtual-board/-/raw/master/images/screenshot_main_window.png + :align: center + :target: https://gitlab.ensta-bretagne.fr/bollenth/ghdl-vpi-virtual-board + +|br| + +GHDL-Cocotb GUI Simulation +========================== + +`blog.chuckstechtalk.com: An Interactive VHDL Testbench Using GHDL, Python, and Cocotb `__ +is a VPI application that demonstrates how to create a Python-based interactive GUI simulation using ghdl, cocotb, and +pygame. +It provides a testbench and a matching GUI with I/O peripherals for testing a design, instead of examining waveforms. +While similar to the `GHDL VPI virtual board `__ +example, using `cocotb `__ and `pygame `__ makes interactive +GUI creation more dynamic than using a compiled language (such as C++). + +.. image:: https://github.com/chuckb/ghdl-interactive-sim/raw/8a466215dd18c6c809dd96f8d03fa53cad8417c2/test/images/screen_shot.png + :align: center + :height: 400px + :target: https://github.com/chuckb/ghdl-interactive-sim diff --git a/_sources/vpi/examples/quickstart.rst.txt b/_sources/vpi/examples/quickstart.rst.txt new file mode 100644 index 00000000..bce914eb --- /dev/null +++ b/_sources/vpi/examples/quickstart.rst.txt @@ -0,0 +1,17 @@ +.. program:: ghdl +.. _COSIM:VPI:Examples:quickstart: + +Quick Start +########### + +.. _COSIM:VPI:Examples:quickstart:hello: + +:cosimtree:`hello ` +*********************************************** + +This is the most minimal example, where a single callback is registered at the beginning of the simulation. The callback just +prints ``Hello!``. Then, the simulation is executed as usual. + +VPI allows registering callbacks at multiple events and to optionally delay their execution after the event is triggered. +The list of available callback reasons is defined in :ghdlsrc:`vpi_user.h `. The structure type that is used +and required to register a callback, ``s_cb_data``, is also defined in the same header file. diff --git a/_sources/vpi/index.rst.txt b/_sources/vpi/index.rst.txt new file mode 100644 index 00000000..3a7e337d --- /dev/null +++ b/_sources/vpi/index.rst.txt @@ -0,0 +1,19 @@ +.. program:: ghdl +.. _COSIM:VPI:Intro: + +Introduction +============ + +Verilog Procedural Interface (VPI) is part of the IEEE Std 1364: `1364-2005 - IEEE Standard for Verilog Hardware Description Language `_. +It allows Verilog code to invoke C functions, and C functions to invoke Verilog system tasks. VPI is sometimes referred to +as PLI 2, because it replaced the deprecated Program Language Interface (PLI). + +VPI provides advanced features, at the cost of having to learn the API. Since this is the user and reference manual for GHDL, +an introduction to VPI is not included. Thus, the reader should have at least a basic knowledge of the interface. A good knowledge of the reference manual. + +Unlike VHPIDIRECT, which allows and requires the user to define a custom API between VHDL and C, VPI is itself a pre-defined +API. Hence, all VPI modules need to include a standard header file, ``vpi_user.h``. At the same time, VPI modules need to be +built as shared libraries, and they are dynamically loaded at runtime. This is similar to example :ref:`COSIM:VHPIDIRECT:Examples:shared:shlib`. +However, when using VPI, VHDL sources are agnostic to the existence of C sources. + +Information about GHDL's commands related to VPI is available at :ref:`VPI_build_commands` and :option:`--vpi`. diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..30fee9d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/debug.css b/_static/debug.css new file mode 100644 index 00000000..74d4aec3 --- /dev/null +++ b/_static/debug.css @@ -0,0 +1,69 @@ +/* + This CSS file should be overridden by the theme authors. It's + meant for debugging and developing the skeleton that this theme provides. +*/ +body { + font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + background: lavender; +} +.sb-announcement { + background: rgb(131, 131, 131); +} +.sb-announcement__inner { + background: black; + color: white; +} +.sb-header { + background: lightskyblue; +} +.sb-header__inner { + background: royalblue; + color: white; +} +.sb-header-secondary { + background: lightcyan; +} +.sb-header-secondary__inner { + background: cornflowerblue; + color: white; +} +.sb-sidebar-primary { + background: lightgreen; +} +.sb-main { + background: blanchedalmond; +} +.sb-main__inner { + background: antiquewhite; +} +.sb-header-article { + background: lightsteelblue; +} +.sb-article-container { + background: snow; +} +.sb-article-main { + background: white; +} +.sb-footer-article { + background: lightpink; +} +.sb-sidebar-secondary { + background: lightgoldenrodyellow; +} +.sb-footer-content { + background: plum; +} +.sb-footer-content__inner { + background: palevioletred; +} +.sb-footer { + background: pink; +} +.sb-footer__inner { + background: salmon; +} +.sb-article { + background: white; +} diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..d06a71d7 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..08886833 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: 'latest', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/icon.ico b/_static/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..18b7a7d156f6b748679734fb5758d197d78a313e GIT binary patch literal 168862 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%0As=X%$F}N=+-og4>!#p<_-%kZdJxu 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 literal 0 HcmV?d00001 diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..250f5665 --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/logo.png b/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..56804ec613ec6224ce272ac722e3c552c87a239f GIT binary patch literal 85940 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ⅅ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 a?f(M_Z^75k^+weI0000 +image/svg+xml + + + +co-simulation + \ No newline at end of file diff --git a/_static/logol.png b/_static/logol.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2d133fd76ba0fee466bc06d485747ed00f7350 GIT binary patch literal 173927 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

43# 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

F2F_p2_zoU5k5*lKEaZ3 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

g)4tsM5B# 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 literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..c2e07c71 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,258 @@ +.highlight pre { line-height: 125%; } +.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #204a87; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #000000; font-style: italic } /* Generic.Output */ +.highlight .gp { color: #8f5902 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #204a87 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */ +.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */ +.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */ +.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */ +.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */ +@media not print { +body[data-theme="dark"] .highlight pre { line-height: 125%; } +body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body[data-theme="dark"] .highlight .hll { background-color: #404040 } +body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 } +body[data-theme="dark"] .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */ +body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */ +body[data-theme="dark"] .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */ +body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */ +body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */ +body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */ +body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */ +body[data-theme="dark"] .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body[data-theme="dark"] .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body[data-theme="dark"] .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body[data-theme="dark"] .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body[data-theme="dark"] .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body[data-theme="dark"] .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */ +body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ +body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */ +body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body[data-theme="dark"] .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body[data-theme="dark"] .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body[data-theme="dark"] .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body[data-theme="dark"] .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body[data-theme="dark"] .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body[data-theme="dark"] .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body[data-theme="dark"] .highlight .m { color: #51b2fd } /* Literal.Number */ +body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */ +body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body[data-theme="dark"] .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body[data-theme="dark"] .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */ +body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body[data-theme="dark"] .highlight .nf { color: #71adff } /* Name.Function */ +body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body[data-theme="dark"] .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */ +body[data-theme="dark"] .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */ +body[data-theme="dark"] .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body[data-theme="dark"] .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */ +body[data-theme="dark"] .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body[data-theme="dark"] .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body[data-theme="dark"] .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body[data-theme="dark"] .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body[data-theme="dark"] .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body[data-theme="dark"] .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body[data-theme="dark"] .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body[data-theme="dark"] .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +@media (prefers-color-scheme: dark) { +body:not([data-theme="light"]) .highlight pre { line-height: 125%; } +body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } +body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 } +body:not([data-theme="light"]) .highlight .c { color: #ababab; font-style: italic } /* Comment */ +body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */ +body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */ +body:not([data-theme="light"]) .highlight .k { color: #6ebf26; font-weight: bold } /* Keyword */ +body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */ +body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */ +body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */ +body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */ +body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */ +body:not([data-theme="light"]) .highlight .ch { color: #ababab; font-style: italic } /* Comment.Hashbang */ +body:not([data-theme="light"]) .highlight .cm { color: #ababab; font-style: italic } /* Comment.Multiline */ +body:not([data-theme="light"]) .highlight .cp { color: #ff3a3a; font-weight: bold } /* Comment.Preproc */ +body:not([data-theme="light"]) .highlight .cpf { color: #ababab; font-style: italic } /* Comment.PreprocFile */ +body:not([data-theme="light"]) .highlight .c1 { color: #ababab; font-style: italic } /* Comment.Single */ +body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ +body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */ +body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */ +body:not([data-theme="light"]) .highlight .ges { color: #d0d0d0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */ +body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */ +body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ +body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */ +body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */ +body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */ +body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */ +body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */ +body:not([data-theme="light"]) .highlight .kc { color: #6ebf26; font-weight: bold } /* Keyword.Constant */ +body:not([data-theme="light"]) .highlight .kd { color: #6ebf26; font-weight: bold } /* Keyword.Declaration */ +body:not([data-theme="light"]) .highlight .kn { color: #6ebf26; font-weight: bold } /* Keyword.Namespace */ +body:not([data-theme="light"]) .highlight .kp { color: #6ebf26 } /* Keyword.Pseudo */ +body:not([data-theme="light"]) .highlight .kr { color: #6ebf26; font-weight: bold } /* Keyword.Reserved */ +body:not([data-theme="light"]) .highlight .kt { color: #6ebf26; font-weight: bold } /* Keyword.Type */ +body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */ +body:not([data-theme="light"]) .highlight .m { color: #51b2fd } /* Literal.Number */ +body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */ +body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */ +body:not([data-theme="light"]) .highlight .nb { color: #2fbccd } /* Name.Builtin */ +body:not([data-theme="light"]) .highlight .nc { color: #71adff; text-decoration: underline } /* Name.Class */ +body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */ +body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */ +body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */ +body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */ +body:not([data-theme="light"]) .highlight .nf { color: #71adff } /* Name.Function */ +body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */ +body:not([data-theme="light"]) .highlight .nn { color: #71adff; text-decoration: underline } /* Name.Namespace */ +body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */ +body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */ +body:not([data-theme="light"]) .highlight .nt { color: #6ebf26; font-weight: bold } /* Name.Tag */ +body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */ +body:not([data-theme="light"]) .highlight .ow { color: #6ebf26; font-weight: bold } /* Operator.Word */ +body:not([data-theme="light"]) .highlight .pm { color: #d0d0d0 } /* Punctuation.Marker */ +body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */ +body:not([data-theme="light"]) .highlight .mb { color: #51b2fd } /* Literal.Number.Bin */ +body:not([data-theme="light"]) .highlight .mf { color: #51b2fd } /* Literal.Number.Float */ +body:not([data-theme="light"]) .highlight .mh { color: #51b2fd } /* Literal.Number.Hex */ +body:not([data-theme="light"]) .highlight .mi { color: #51b2fd } /* Literal.Number.Integer */ +body:not([data-theme="light"]) .highlight .mo { color: #51b2fd } /* Literal.Number.Oct */ +body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */ +body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */ +body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */ +body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */ +body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */ +body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */ +body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */ +body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */ +body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */ +body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */ +body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */ +body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */ +body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */ +body:not([data-theme="light"]) .highlight .bp { color: #2fbccd } /* Name.Builtin.Pseudo */ +body:not([data-theme="light"]) .highlight .fm { color: #71adff } /* Name.Function.Magic */ +body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */ +body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */ +body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */ +body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */ +body:not([data-theme="light"]) .highlight .il { color: #51b2fd } /* Literal.Number.Integer.Long */ +} +} \ No newline at end of file diff --git a/_static/scripts/furo-extensions.js b/_static/scripts/furo-extensions.js new file mode 100644 index 00000000..e69de29b diff --git a/_static/scripts/furo.js b/_static/scripts/furo.js new file mode 100644 index 00000000..32e7c05b --- /dev/null +++ b/_static/scripts/furo.js @@ -0,0 +1,3 @@ +/*! For license information please see furo.js.LICENSE.txt */ +(()=>{var t={212:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(212),e=n.n(t),o=null,r=null,c=window.pageYOffset||document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;n=t,0==Math.floor(r.getBoundingClientRect().top)?r.classList.add("scrolled"):r.classList.remove("scrolled"),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); +//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/_static/scripts/furo.js.LICENSE.txt b/_static/scripts/furo.js.LICENSE.txt new file mode 100644 index 00000000..1632189c --- /dev/null +++ b/_static/scripts/furo.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * gumshoejs v5.1.2 (patched by @pradyunsg) + * A simple, framework-agnostic scrollspy script. + * (c) 2019 Chris Ferdinandi + * MIT License + * http://github.com/cferdinandi/gumshoe + */ diff --git a/_static/scripts/furo.js.map b/_static/scripts/furo.js.map new file mode 100644 index 00000000..7b7ddb11 --- /dev/null +++ b/_static/scripts/furo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader() {\n if (Math.floor(header.getBoundingClientRect().top) == 0) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader();\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 0.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","floor","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..7918c3fa --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/skeleton.css b/_static/skeleton.css new file mode 100644 index 00000000..467c878c --- /dev/null +++ b/_static/skeleton.css @@ -0,0 +1,296 @@ +/* Some sane resets. */ +html { + height: 100%; +} + +body { + margin: 0; + min-height: 100%; +} + +/* All the flexbox magic! */ +body, +.sb-announcement, +.sb-content, +.sb-main, +.sb-container, +.sb-container__inner, +.sb-article-container, +.sb-footer-content, +.sb-header, +.sb-header-secondary, +.sb-footer { + display: flex; +} + +/* These order things vertically */ +body, +.sb-main, +.sb-article-container { + flex-direction: column; +} + +/* Put elements in the center */ +.sb-header, +.sb-header-secondary, +.sb-container, +.sb-content, +.sb-footer, +.sb-footer-content { + justify-content: center; +} +/* Put elements at the ends */ +.sb-article-container { + justify-content: space-between; +} + +/* These elements grow. */ +.sb-main, +.sb-content, +.sb-container, +article { + flex-grow: 1; +} + +/* Because padding making this wider is not fun */ +article { + box-sizing: border-box; +} + +/* The announcements element should never be wider than the page. */ +.sb-announcement { + max-width: 100%; +} + +.sb-sidebar-primary, +.sb-sidebar-secondary { + flex-shrink: 0; + width: 17rem; +} + +.sb-announcement__inner { + justify-content: center; + + box-sizing: border-box; + height: 3rem; + + overflow-x: auto; + white-space: nowrap; +} + +/* Sidebars, with checkbox-based toggle */ +.sb-sidebar-primary, +.sb-sidebar-secondary { + position: fixed; + height: 100%; + top: 0; +} + +.sb-sidebar-primary { + left: -17rem; + transition: left 250ms ease-in-out; +} +.sb-sidebar-secondary { + right: -17rem; + transition: right 250ms ease-in-out; +} + +.sb-sidebar-toggle { + display: none; +} +.sb-sidebar-overlay { + position: fixed; + top: 0; + width: 0; + height: 0; + + transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; + + opacity: 0; + background-color: rgba(0, 0, 0, 0.54); +} + +#sb-sidebar-toggle--primary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], +#sb-sidebar-toggle--secondary:checked + ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { + width: 100%; + height: 100%; + opacity: 1; + transition: width 0ms ease, height 0ms ease, opacity 250ms ease; +} + +#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { + left: 0; +} +#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { + right: 0; +} + +/* Full-width mode */ +.drop-secondary-sidebar-for-full-width-content + .hide-when-secondary-sidebar-shown { + display: none !important; +} +.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { + display: none !important; +} + +/* Mobile views */ +.sb-page-width { + width: 100%; +} + +.sb-article-container, +.sb-footer-content__inner, +.drop-secondary-sidebar-for-full-width-content .sb-article, +.drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 100vw; +} + +.sb-article, +.match-content-width { + padding: 0 1rem; + box-sizing: border-box; +} + +@media (min-width: 32rem) { + .sb-article, + .match-content-width { + padding: 0 2rem; + } +} + +/* Tablet views */ +@media (min-width: 42rem) { + .sb-article-container { + width: auto; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 42rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 46rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 46rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 50rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 50rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Tablet views */ +@media (min-width: 59rem) { + .sb-sidebar-secondary { + position: static; + } + .hide-when-secondary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} +@media (min-width: 63rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } + .sb-article, + .match-content-width { + width: 46rem; + } +} +@media (min-width: 67rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-article, + .match-content-width { + width: 50rem; + } +} + +/* Desktop views */ +@media (min-width: 76rem) { + .sb-sidebar-primary { + position: static; + } + .hide-when-primary-sidebar-shown { + display: none !important; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 59rem; + } + .sb-article, + .match-content-width { + width: 42rem; + } +} + +/* Full desktop views */ +@media (min-width: 80rem) { + .sb-article, + .match-content-width { + width: 46rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 63rem; + } +} + +@media (min-width: 84rem) { + .sb-article, + .match-content-width { + width: 50rem; + } + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } +} + +@media (min-width: 88rem) { + .sb-footer-content__inner, + .drop-secondary-sidebar-for-full-width-content .sb-article, + .drop-secondary-sidebar-for-full-width-content .match-content-width { + width: 67rem; + } + .sb-page-width { + width: 88rem; + } +} diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/_static/styles/furo-extensions.css b/_static/styles/furo-extensions.css new file mode 100644 index 00000000..bc447f22 --- /dev/null +++ b/_static/styles/furo-extensions.css @@ -0,0 +1,2 @@ +#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;opacity:1;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} +/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo-extensions.css.map b/_static/styles/furo-extensions.css.map new file mode 100644 index 00000000..9ba5637f --- /dev/null +++ b/_static/styles/furo-extensions.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAKE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cALA,UASA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UC5CN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Make it visible\n opacity: 1\n\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/_static/styles/furo.css b/_static/styles/furo.css new file mode 100644 index 00000000..3d29a218 --- /dev/null +++ b/_static/styles/furo.css @@ -0,0 +1,2 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.15}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{clip:rect(0,0,0,0)!important;border:0!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#646776;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2962ff;--color-brand-content:#2a5adf;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link--hover:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link-underline--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#ffffffcc;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#2b8cee;--color-brand-content:#368ce2;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto,body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link);text-decoration-color:var(--color-link-underline--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{background:var(--color-background-primary);color:var(--color-foreground-primary);height:100%}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{vertical-align:middle}.theme-toggle{background:transparent;border:none;cursor:pointer;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1rem;vertical-align:middle;width:1rem}.theme-toggle-header{float:left;padding:1rem .5rem}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1rem;width:1rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg{color:inherit;height:1rem;width:1rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{fill:currentColor;display:inline-block;height:1rem;width:1rem}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.theme-toggle-header{display:block}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.25rem;width:1.25rem}:target{scroll-margin-top:var(--header-height)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}.content{margin-left:auto;margin-right:auto}}@media(max-width:52em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){.content{padding:0 1em}article aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:3.5rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}.versionmodified{font-style:italic}div.deprecated p,div.versionadded p,div.versionchanged p{margin-bottom:.125rem;margin-top:.125rem}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>p,div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}.table-wrapper{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree .reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling.Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} +/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/_static/styles/furo.css.map b/_static/styles/furo.css.map new file mode 100644 index 00000000..d1dfb109 --- /dev/null +++ b/_static/styles/furo.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles/furo.css","mappings":"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0CACE,CAFF,kBACA,CACE,wEACA,CARA,YACA,CAKF,mBAFF,OAII,eACA,CAJF,iCAJE,cAGJ,CANI,oBAEA,CAKF,SAIE,2BADA,UACA,kBAGF,sCACA,CAFF,WACE,WACA,qCACE,gCACA,2EACA,sDAKJ,aACE,mDAII,CAJJ,6CAII,kEACA,iBACE,iDACA,+CACE,aACA,WADA,+BACA,uEANN,YACE,mDAEE,mBADF,0CACE,CADF,qBACE,0DACA,YACE,4DACA,sEANN,YACE,8CACA,kBADA,UACA,2CACE,2EACA,cACE,kEACA,mEANN,yBACE,4DACA,sBACE,+EAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kEAGA,8CAEA,uDAKA,oCAEA,yDAEE,gEAKF,+CC5FA,0EAGE,CACA,qDCLJ,+DAIE,sCAIA,kEACE,yBACA,2FAMA,gBACA,yGCbF,mBAOA,2MAIA,4HAYA,0DACE,8GAYF,8HAQE,mBAEA,6HAOF,YAGA,mIAME,eACA,CAFF,YAEE,4FAMJ,8BAEE,uBAYA,sCAEE,CAJF,oBAEA,CARA,wCAEA,CAHA,8BACA,CAFA,eACA,CAGA,wCAEA,CAEA,mDAIE,kCACE,6BACA,4CAKJ,kDAIA,eACE,aAGF,8BACE,uDACA,sCACA,cAEA,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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto\n display: block\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #646776; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2962ff;\n --color-brand-content: #2a5adf;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link-underline--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #ffffffcc; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #2b8cee;\n --color-brand-content: #368ce2;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n vertical-align: middle\n\n.theme-toggle\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n vertical-align: middle\n height: 1rem\n width: 1rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n float: left\n padding: 1rem 0.5rem\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1rem\n width: 1rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page svg\n color: inherit\n height: 1rem\n width: 1rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $full-width - $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n .theme-toggle-header\n display: block\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: var(--header-height)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Center the page, and accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n .content\n margin-left: auto\n margin-right: auto\n\n@media (max-width: $content-width + 2* $content-padding)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n .content\n padding: 0 $content-padding--small\n // Don't float sidebars to the right.\n article aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 3.5rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\n.versionmodified\n font-style: italic\ndiv.versionadded, div.versionchanged, div.deprecated\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > p,\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n",".table-wrapper\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 0.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(0.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(0.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the