diff --git a/.github/workflows/trufflehog.yml b/.github/workflows/trufflehog.yml new file mode 100644 index 00000000..9cbbf680 --- /dev/null +++ b/.github/workflows/trufflehog.yml @@ -0,0 +1,15 @@ +on: + push: + +name: Secret Leaks + +jobs: + trufflehog: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Secret Scanning + uses: trufflesecurity/trufflehog@main diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..b23f3150 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,133 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +feedback@huggingface.co. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..57901164 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,111 @@ + + +# Contribute to text-embeddings-inference + +Everyone is welcome to contribute, and we value everybody's contribution. Code +contributions are not the only way to help the community. Answering questions, helping +others, and improving the documentation are also immensely valuable. + +It also helps us if you spread the word! Reference the library in blog posts +about the awesome projects it made possible, shout out on Twitter every time it has +helped you, or simply ⭐️ the repository to say thank you. + +However you choose to contribute, please be mindful and respect our +[code of conduct](https://github.com/huggingface/text-embeddings-inference/blob/main/CODE_OF_CONDUCT.md). + +**This guide was heavily inspired by the awesome [scikit-learn guide to contributing](https://github.com/scikit-learn/scikit-learn/blob/main/CONTRIBUTING.md).** + +## Ways to contribute + +There are several ways you can contribute to text-embeddings-inference. + +* Fix outstanding issues with the existing code. +* Submit issues related to bugs or desired new features. +* Contribute to the examples or to the documentation. + +> All contributions are equally valuable to the community. 🥰 + +## Fixing outstanding issues + +If you notice an issue with the existing code and have a fix in mind, feel free to [start contributing](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) and open +a Pull Request! + +## Submitting a bug-related issue or feature request + +Do your best to follow these guidelines when submitting a bug-related issue or a feature +request. It will make it easier for us to come back to you quickly and with good +feedback. + +### Did you find a bug? + +The text-embeddings-inference library is robust and reliable thanks to users who report the problems they encounter. + +Before you report an issue, we would really appreciate it if you could **make sure the bug was not +already reported** (use the search bar on GitHub under Issues). Your issue should also be related to bugs in the +library itself, and not your code. + +Once you've confirmed the bug hasn't already been reported, please include the following information in your issue so +we can quickly resolve it: + +* Your **OS type and version**, as well as your environment versions (versions of rust, python, and dependencies). +* A short, self-contained, code snippet that allows us to reproduce the bug. +* The *full* traceback if an exception is raised. +* Attach any other additional information, like screenshots, you think may help. + +### Do you want a new feature? + +If there is a new feature you'd like to see in text-embeddings-inference, please open an issue and describe: + +1. What is the *motivation* behind this feature? Is it related to a problem or frustration with the library? Is it + a feature related to something you need for a project? Is it something you worked on and think it could benefit + the community? + + Whatever it is, we'd love to hear about it! + +2. Describe your requested feature in as much detail as possible. The more you can tell us about it, the better + we'll be able to help you. +3. Provide a *code snippet* that demonstrates the feature's usage. +4. If the feature is related to a paper, please include a link. + +If your issue is well written we're already 80% of the way there by the time you create it. + +We have added [templates](https://github.com/huggingface/text-embeddings-inference/tree/main/.github/ISSUE_TEMPLATE) +to help you get started with your issue. + +## Do you want to implement a new model? + +New models are constantly released and if you want to implement a new model, please provide the following information: + +* A short description of the model and a link to the paper. +* Link to the implementation if it is open-sourced. +* Link to the model weights if they are available. + +If you are willing to contribute the model yourself, let us know so we can help you add it to text-embeddings-inference! + +## Do you want to add documentation? + +We're always looking for improvements to the documentation that make it more clear and accurate. Please let us know +how the documentation can be improved such as typos and any content that is missing, unclear or inaccurate. We'll be +happy to make the changes or help you make a contribution if you're interested! + +## I want to become a maintainer of the project. How do I get there? + +TGI is a project led and managed by Hugging Face as it powers our internal services. However, we are happy to have +motivated individuals from other organizations join us as maintainers with the goal of making TGI the best inference +service. + +If you are such an individual (or organization), please reach out to us and let's collaborate. diff --git a/Cargo.lock b/Cargo.lock index dba09726..e29254ad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,9 +10,9 @@ checksum = "415ed64958754dbe991900f3940677e6a7eefb4d7367afd70d642677b0c7d19d" [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -61,47 +61,48 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", @@ -109,13 +110,34 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" dependencies = [ "backtrace", ] +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-stream" version = "0.3.5" @@ -135,7 +157,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -146,14 +168,47 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "aws-lc-rs" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a47f2fb521b70c11ce7369a6c5fa4bd6af7e5d62ec06303875bafe7c6ba245" +dependencies = [ + "aws-lc-sys", + "mirai-annotations", + "paste", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "2927c7af777b460b7ccd95f8b67acd7b4c04ec8896bf0c8e80ba30523cffc057" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", + "libc", + "paste", +] [[package]] name = "axum" @@ -168,7 +223,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.29", "itoa", "matchit", "memchr", @@ -196,7 +251,7 @@ dependencies = [ "http 1.1.0", "http-body 1.0.0", "http-body-util", - "hyper 1.3.1", + "hyper 1.4.0", "hyper-util", "itoa", "matchit", @@ -257,25 +312,25 @@ dependencies = [ [[package]] name = "axum-tracing-opentelemetry" -version = "0.17.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91387a3e9f6aa45f112cd05d1e5430f9ba40b51440849e4760a5dd51b736149f" +checksum = "f26965dca35be1ca4a128177b9302c4c04f0661443621171adb09d002dcdf1d5" dependencies = [ "axum 0.7.5", "futures-core", "futures-util", "http 1.1.0", - "opentelemetry 0.21.0", + "opentelemetry 0.22.0", "pin-project-lite", "tower", "tracing", - "tracing-opentelemetry 0.22.0", + "tracing-opentelemetry 0.23.0", "tracing-opentelemetry-instrumentation-sdk", ] [[package]] name = "backend-grpc-client" -version = "1.2.2" +version = "1.3.0" dependencies = [ "grpc-metadata", "prost 0.11.9", @@ -290,9 +345,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -323,9 +378,32 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.69.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease 0.2.20", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.68", + "which", +] [[package]] name = "bindgen_cuda" @@ -361,9 +439,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block" @@ -388,22 +466,22 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" +checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -442,7 +520,7 @@ dependencies = [ "safetensors", "thiserror", "yoke", - "zip", + "zip 0.6.6", ] [[package]] @@ -558,9 +636,23 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.94" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74b6a57f98764a267ff415d50a25e6e166f3831a5071af4995296ea97d210490" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cexpr" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] [[package]] name = "cfg-if" @@ -582,11 +674,22 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] + [[package]] name = "clap" -version = "4.5.4" +version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" dependencies = [ "clap_builder", "clap_derive", @@ -594,39 +697,57 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", ] [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "cmake" +version = "0.1.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +dependencies = [ + "cc", +] [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] [[package]] name = "console" @@ -679,18 +800,18 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -716,9 +837,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -746,72 +867,37 @@ dependencies = [ [[package]] name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - -[[package]] -name = "darling" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ - "darling_core 0.20.8", - "darling_macro 0.20.8", + "darling_core", + "darling_macro", ] [[package]] name = "darling_core" -version = "0.14.4" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_core" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 2.0.59", -] - -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", + "strsim", + "syn 2.0.68", ] [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ - "darling_core 0.20.8", + "darling_core", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -821,7 +907,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -837,12 +923,14 @@ dependencies = [ ] [[package]] -name = "derive_builder" -version = "0.12.0" +name = "derive_arbitrary" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ - "derive_builder_macro 0.12.0", + "proc-macro2", + "quote", + "syn 2.0.68", ] [[package]] @@ -851,19 +939,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0350b5cb0331628a5916d6c5c0b72e97393b8b6b03b47a9284f4e7f5a405ffd7" dependencies = [ - "derive_builder_macro 0.20.0", -] - -[[package]] -name = "derive_builder_core" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" -dependencies = [ - "darling 0.14.4", - "proc-macro2", - "quote", - "syn 1.0.109", + "derive_builder_macro", ] [[package]] @@ -872,20 +948,10 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d48cda787f839151732d396ac69e3473923d54312c070ee21e9effcaa8ca0b1d" dependencies = [ - "darling 0.20.8", + "darling", "proc-macro2", "quote", - "syn 2.0.59", -] - -[[package]] -name = "derive_builder_macro" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" -dependencies = [ - "derive_builder_core 0.12.0", - "syn 1.0.109", + "syn 2.0.68", ] [[package]] @@ -894,8 +960,8 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206868b8242f27cecce124c19fd88157fbd0dd334df2587f36417bafbc85097b" dependencies = [ - "derive_builder_core 0.20.0", - "syn 2.0.59", + "derive_builder_core", + "syn 2.0.68", ] [[package]] @@ -938,6 +1004,23 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + [[package]] name = "dyn-stack" version = "0.10.0" @@ -950,9 +1033,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" @@ -978,7 +1061,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -989,9 +1072,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1006,6 +1089,27 @@ dependencies = [ "cc", ] +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "fancy-regex" version = "0.13.0" @@ -1013,15 +1117,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2" dependencies = [ "bit-set", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] name = "fastrand" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "filetime" @@ -1031,7 +1135,7 @@ checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "windows-sys 0.52.0", ] @@ -1043,9 +1147,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ "crc32fast", "miniz_oxide", @@ -1084,7 +1188,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -1108,6 +1212,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" version = "0.3.30" @@ -1164,7 +1274,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -1213,7 +1323,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1228,7 +1338,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1243,7 +1353,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1261,7 +1371,7 @@ dependencies = [ "once_cell", "paste", "pulp", - "raw-cpuid", + "raw-cpuid 10.7.0", "rayon", "seq-macro", "sysctl", @@ -1280,7 +1390,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "rayon", "seq-macro", ] @@ -1296,7 +1406,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1311,7 +1421,7 @@ dependencies = [ "num-complex", "num-traits", "paste", - "raw-cpuid", + "raw-cpuid 10.7.0", "seq-macro", ] @@ -1327,9 +1437,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1350,9 +1460,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "glob" @@ -1389,6 +1499,25 @@ dependencies = [ "tracing", ] +[[package]] +name = "h2" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.2.6", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "half" version = "2.4.1" @@ -1411,19 +1540,13 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.13.1" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", ] -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - [[package]] name = "heck" version = "0.4.1" @@ -1445,17 +1568,17 @@ checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hf-hub" version = "0.3.2" -source = "git+https://github.com/huggingface/hf-hub?rev=b167f69692be5f49eb8003788f7f8a499a98b096#b167f69692be5f49eb8003788f7f8a499a98b096" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b780635574b3d92f036890d8373433d6f9fc7abb320ee42a5c25897fc8ed732" dependencies = [ "dirs", "futures", - "http 1.1.0", "indicatif", "log", "native-tls", "num_cpus", "rand", - "reqwest", + "reqwest 0.11.27", "serde", "serde_json", "thiserror", @@ -1517,12 +1640,12 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", + "futures-util", "http 1.1.0", "http-body 1.0.0", "pin-project-lite", @@ -1530,9 +1653,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" @@ -1542,15 +1665,15 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", "httparse", @@ -1566,13 +1689,14 @@ dependencies = [ [[package]] name = "hyper" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "c4fe55fb7a772d59a5ff1dfbff4fe0258d19b89fec4b233e75d35d5d2316badc" dependencies = [ "bytes", "futures-channel", "futures-util", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "httparse", @@ -1581,6 +1705,27 @@ dependencies = [ "pin-project-lite", "smallvec", "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.0", + "hyper-util", + "log", + "rustls 0.23.10", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] @@ -1589,7 +1734,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.28", + "hyper 0.14.29", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -1602,26 +1747,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.28", + "hyper 0.14.29", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" dependencies = [ "bytes", + "futures-channel", "futures-util", "http 1.1.0", "http-body 1.0.0", - "hyper 1.3.1", + "hyper 1.4.0", "pin-project-lite", "socket2", "tokio", + "tower", + "tower-service", + "tracing", ] [[package]] @@ -1680,7 +1845,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "serde", ] @@ -1699,15 +1864,16 @@ dependencies = [ [[package]] name = "init-tracing-opentelemetry" -version = "0.14.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bd26b1b737bc11f183620072e188d1c6ede67e0e78682228d66b49ec510e17" +checksum = "754367a7e7f9314afe3ee9780ba8b8ea2cab487cdc8017c9794793051242f878" dependencies = [ - "opentelemetry 0.20.0", - "opentelemetry-otlp", + "opentelemetry 0.22.0", + "opentelemetry-otlp 0.15.0", + "opentelemetry_sdk 0.22.1", "thiserror", "tracing", - "tracing-opentelemetry 0.21.0", + "tracing-opentelemetry 0.23.0", ] [[package]] @@ -1726,9 +1892,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -1770,6 +1936,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itertools" version = "0.10.5" @@ -1803,6 +1975,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" version = "0.3.69" @@ -1814,15 +1995,31 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libloading" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +dependencies = [ + "cfg-if", + "windows-targets 0.52.5", +] [[package]] name = "libm" @@ -1832,9 +2029,9 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libmimalloc-sys" -version = "0.1.35" +version = "0.1.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3979b5c37ece694f1f5e51e7ecc871fdb0f517ed04ee45f88d15d6d553cb9664" +checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" dependencies = [ "cc", "libc", @@ -1846,7 +2043,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", ] @@ -1858,15 +2055,15 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1874,18 +2071,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" - -[[package]] -name = "mach2" -version = "0.4.2" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" -dependencies = [ - "libc", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "macro_rules_attribute" @@ -1929,9 +2117,9 @@ checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -1949,7 +2137,7 @@ version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "block", "core-graphics-types", "foreign-types 0.5.0", @@ -1960,24 +2148,26 @@ dependencies = [ [[package]] name = "metrics" -version = "0.21.1" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5" +checksum = "884adb57038347dfbaf2d5065887b6cf4312330dc8e94bc30a1a839bd79d3261" dependencies = [ "ahash", - "metrics-macros", "portable-atomic", ] [[package]] name = "metrics-exporter-prometheus" -version = "0.12.2" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d4fa7ce7c4862db464a37b0b31d89bca874562f034bd7993895572783d02950" +checksum = "bf0af7a0d7ced10c0151f870e5e3f3f8bc9ffc5992d32873566ca1f9169ae776" dependencies = [ - "base64 0.21.7", - "hyper 0.14.28", - "indexmap 1.9.3", + "base64 0.22.1", + "http-body-util", + "hyper 1.4.0", + "hyper-rustls", + "hyper-util", + "indexmap 2.2.6", "ipnet", "metrics", "metrics-util", @@ -1987,26 +2177,15 @@ dependencies = [ "tracing", ] -[[package]] -name = "metrics-macros" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b4faf00617defe497754acde3024865bc143d44a86799b24e191ecff91354f" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.59", -] - [[package]] name = "metrics-util" -version = "0.15.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e" +checksum = "4259040465c955f9f2f1a4a8a16dc46726169bca0f88e8fb2dbeced487c3e828" dependencies = [ "crossbeam-epoch", "crossbeam-utils", - "hashbrown 0.13.1", + "hashbrown 0.14.5", "metrics", "num_cpus", "quanta", @@ -2015,9 +2194,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.39" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa01922b5ea280a911e323e4d2fd24b7fe5cc4042e0d2cda3c40775cdc4bdc9c" +checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" dependencies = [ "libmimalloc-sys", ] @@ -2030,9 +2209,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.4" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" dependencies = [ "mime", "unicase", @@ -2046,9 +2225,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] @@ -2064,11 +2243,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mirai-annotations" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" + [[package]] name = "monostate" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20fffcd8ca4c69d31e036a71abc400147b41f90895df4edcb36497a1f8af8bf" +checksum = "0d208407d7552cd041d8cdb69a1bc3303e029c598738177a3d87082004dc0e1e" dependencies = [ "monostate-impl", "serde", @@ -2076,13 +2261,13 @@ dependencies = [ [[package]] name = "monostate-impl" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf307cbbbd777a9c10cec88ddafee572b3484caad5cce0c9236523c3803105a6" +checksum = "a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -2099,11 +2284,10 @@ checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2143,9 +2327,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "bytemuck", "num-traits", @@ -2159,9 +2343,9 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -2177,6 +2361,27 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.68", +] + [[package]] name = "num_threads" version = "0.1.7" @@ -2213,23 +2418,25 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" dependencies = [ "memchr", ] [[package]] name = "oci-spec" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e423c4f827362c0d8d8da4b1f571270f389ebde73bcd3240a3d23c6d6f61d0f0" +checksum = "098bc31d7c87110e22090eb082903caaed19f06319f63b6f7d7ed273bc8bdaec" dependencies = [ - "derive_builder 0.20.0", + "derive_builder", "getset", "serde", "serde_json", + "strum", + "strum_macros", "thiserror", ] @@ -2240,7 +2447,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb3293021f06540803301af45e7ab81693d50e89a7398a3420bdab139e7ba5e" dependencies = [ "base16ct", - "base64 0.22.0", + "base64 0.22.1", "chrono", "directories", "flate2", @@ -2294,7 +2501,7 @@ version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types 0.3.2", "libc", @@ -2311,7 +2518,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -2338,102 +2545,116 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" dependencies = [ - "opentelemetry_api 0.19.0", + "opentelemetry_api", "opentelemetry_sdk 0.19.0", ] [[package]] name = "opentelemetry" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54" +checksum = "900d57987be3f2aeb70d385fff9b27fb74c5723cc9a52d904d4f9c807a0667bf" dependencies = [ - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", + "futures-core", + "futures-sink", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", ] [[package]] name = "opentelemetry" -version = "0.21.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a" +checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" dependencies = [ "futures-core", "futures-sink", - "indexmap 2.2.6", "js-sys", "once_cell", "pin-project-lite", "thiserror", - "urlencoding", ] [[package]] name = "opentelemetry-otlp" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e5e5a5c4135864099f3faafbe939eb4d7f9b80ebf68a8448da961b32a7c1275" +checksum = "1a016b8d9495c639af2145ac22387dcb88e44118e45320d9238fbf4e7889abcb" dependencies = [ "async-trait", "futures-core", "http 0.2.12", - "opentelemetry-proto", + "opentelemetry 0.22.0", + "opentelemetry-proto 0.5.0", "opentelemetry-semantic-conventions", - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", - "prost 0.11.9", + "opentelemetry_sdk 0.22.1", + "prost 0.12.6", "thiserror", "tokio", - "tonic 0.9.2", + "tonic 0.11.0", ] [[package]] -name = "opentelemetry-proto" -version = "0.3.0" +name = "opentelemetry-otlp" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e3f814aa9f8c905d0ee4bde026afd3b2577a97c10e1699912e3e44f0c4cbeb" +checksum = "a94c69209c05319cdf7460c6d4c055ed102be242a0a6245835d7bc42c6ec7f54" dependencies = [ - "opentelemetry_api 0.20.0", - "opentelemetry_sdk 0.20.0", - "prost 0.11.9", - "tonic 0.9.2", + "async-trait", + "futures-core", + "http 0.2.12", + "opentelemetry 0.23.0", + "opentelemetry-proto 0.6.0", + "opentelemetry_sdk 0.23.0", + "prost 0.12.6", + "thiserror", + "tokio", + "tonic 0.11.0", ] [[package]] -name = "opentelemetry-semantic-conventions" -version = "0.12.0" +name = "opentelemetry-proto" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73c9f9340ad135068800e7f1b24e9e09ed9e7143f5bf8518ded3d3ec69789269" +checksum = "3a8fddc9b68f5b80dae9d6f510b88e02396f006ad48cac349411fbecc80caae4" dependencies = [ - "opentelemetry 0.20.0", + "opentelemetry 0.22.0", + "opentelemetry_sdk 0.22.1", + "prost 0.12.6", + "tonic 0.11.0", ] [[package]] -name = "opentelemetry_api" -version = "0.19.0" +name = "opentelemetry-proto" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +checksum = "984806e6cf27f2b49282e2a05e288f30594f3dbc74eb7a6e99422bc48ed78162" dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "once_cell", - "pin-project-lite", - "thiserror", - "urlencoding", + "opentelemetry 0.23.0", + "opentelemetry_sdk 0.23.0", + "prost 0.12.6", + "tonic 0.11.0", ] +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9ab5bd6c42fb9349dcf28af2ba9a0667f697f9bdcca045d39f2cec5543e2910" + [[package]] name = "opentelemetry_api" -version = "0.20.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a81f725323db1b1206ca3da8bb19874bbd3f57c3bcd59471bfb04525b265b9b" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" dependencies = [ + "fnv", "futures-channel", "futures-util", "indexmap 1.9.3", - "js-sys", "once_cell", "pin-project-lite", "thiserror", @@ -2454,7 +2675,7 @@ dependencies = [ "futures-executor", "futures-util", "once_cell", - "opentelemetry_api 0.19.0", + "opentelemetry_api", "percent-encoding", "rand", "thiserror", @@ -2462,22 +2683,21 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.20.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026" +checksum = "9e90c7113be649e31e9a0f8b5ee24ed7a16923b322c3c5ab6367469c049d6b7e" dependencies = [ "async-trait", "crossbeam-channel", "futures-channel", "futures-executor", "futures-util", + "glob", "once_cell", - "opentelemetry_api 0.20.0", - "ordered-float 3.9.2", + "opentelemetry 0.22.0", + "ordered-float", "percent-encoding", "rand", - "regex", - "serde_json", "thiserror", "tokio", "tokio-stream", @@ -2485,22 +2705,24 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.21.2" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f16aec8a98a457a52664d69e0091bac3a0abd18ead9b641cb00202ba4e0efe4" +checksum = "ae312d58eaa90a82d2e627fd86e075cf5230b3f11794e2ed74199ebbe572d4fd" dependencies = [ "async-trait", - "crossbeam-channel", "futures-channel", "futures-executor", "futures-util", "glob", + "lazy_static", "once_cell", - "opentelemetry 0.21.0", - "ordered-float 4.2.0", + "opentelemetry 0.23.0", + "ordered-float", "percent-encoding", "rand", "thiserror", + "tokio", + "tokio-stream", ] [[package]] @@ -2511,18 +2733,9 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "ordered-float" -version = "3.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" -dependencies = [ - "num-traits", -] - -[[package]] -name = "ordered-float" -version = "4.2.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e" +checksum = "19ff2cf528c6c03d9ed653d6c4ce1dc0582dc4af309790ad92f07c1cd551b0be" dependencies = [ "num-traits", ] @@ -2533,11 +2746,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2545,22 +2764,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.2", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -2570,9 +2789,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap 2.2.6", @@ -2595,7 +2814,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -2646,12 +2865,21 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.59", + "syn 2.0.68", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", ] [[package]] @@ -2680,9 +2908,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.80" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56dea16b0a29e94408b9aa5e2940a4eedbd128a1ba20e8f7ae60fd3d465af0e" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -2699,12 +2927,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0f5d036824e4761737860779c906171497f6d55681139d8312388f8fe398922" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.12.4", + "prost-derive 0.12.6", ] [[package]] @@ -2731,9 +2959,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80b776a1b2dc779f5ee0641f8ade0125bc1298dd41a9a0c16d8bd57b42d222b1" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", "heck 0.5.0", @@ -2742,11 +2970,11 @@ dependencies = [ "multimap 0.10.0", "once_cell", "petgraph", - "prettyplease 0.2.19", - "prost 0.12.4", - "prost-types 0.12.4", + "prettyplease 0.2.20", + "prost 0.12.6", + "prost-types 0.12.6", "regex", - "syn 2.0.59", + "syn 2.0.68", "tempfile", ] @@ -2765,15 +2993,15 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -2787,18 +3015,18 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.12.4" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "prost 0.12.4", + "prost 0.12.6", ] [[package]] name = "pulp" -version = "0.18.10" +version = "0.18.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14989307e408d9f4245d4fda09a7b144a08114ba124e26cab60ab83dc98db10" +checksum = "0ec8d02258294f59e4e223b41ad7e81c874aa6b15bc4ced9ba3965826da0eed5" dependencies = [ "bytemuck", "libm", @@ -2808,20 +3036,66 @@ dependencies = [ [[package]] name = "quanta" -version = "0.11.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" dependencies = [ "crossbeam-utils", "libc", - "mach2", "once_cell", - "raw-cpuid", + "raw-cpuid 11.0.2", "wasi", "web-sys", "winapi", ] +[[package]] +name = "quinn" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.10", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash", + "rustls 0.23.10", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -2880,6 +3154,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "raw-cpuid" +version = "11.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e29830cbb1290e404f24c73af91c5d8d631ce7e128691e9477556b540cd01ecd" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "rayon" version = "1.10.0" @@ -2926,6 +3209,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "redox_users" version = "0.4.5" @@ -2939,14 +3231,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -2960,13 +3252,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", ] [[package]] @@ -2977,9 +3269,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "reqwest" @@ -2992,11 +3284,11 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", - "hyper-tls", + "hyper 0.14.29", + "hyper-tls 0.5.0", "ipnet", "js-sys", "log", @@ -3005,7 +3297,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", @@ -3018,7 +3310,56 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.4.5", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.4.0", + "hyper-rustls", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.10", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg 0.52.0", ] [[package]] @@ -3038,9 +3379,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.3.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb78f46d0066053d16d4ca7b898e9343bc3530f71c61d5ad84cd404ada068745" +checksum = "19549741604902eb99a7ed0ee177a0663ee1eda51a29f71401f166e47e77806a" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -3049,22 +3390,22 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.3.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91ac2a3c6c0520a3fb3dd89321177c3c692937c4eb21893378219da10c44fc8" +checksum = "cb9f96e283ec64401f30d3df8ee2aaeb2561f34c824381efa24a35f79bf40ee4" dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.59", + "syn 2.0.68", "walkdir", ] [[package]] name = "rust-embed-utils" -version = "8.3.0" +version = "8.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f69089032567ffff4eada41c573fc43ff466c7db7c5688b2e7969584345581" +checksum = "38c74a686185620830701348de757fd36bef4aa9680fd23c49fc539ddcc1af32" dependencies = [ "sha2", "walkdir", @@ -3072,17 +3413,23 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.32" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", @@ -3091,11 +3438,27 @@ dependencies = [ [[package]] name = "rustls" -version = "0.22.3" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" +dependencies = [ + "log", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls" +version = "0.23.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99008d7ad0bbbea527ec27bddbc0e432c5b87d8175178cee68d2eec9c4a1813c" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" dependencies = [ + "aws-lc-rs", "log", + "once_cell", "ring", "rustls-pki-types", "rustls-webpki", @@ -3103,6 +3466,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.2", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -3112,18 +3488,29 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + [[package]] name = "rustls-pki-types" -version = "1.4.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" -version = "0.102.2" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -3131,15 +3518,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "safetensors" @@ -3177,11 +3564,11 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -3190,9 +3577,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -3206,29 +3593,29 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ "itoa", "ryu", @@ -3256,9 +3643,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -3310,7 +3697,7 @@ checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -3333,11 +3720,17 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -3371,25 +3764,14 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", ] -[[package]] -name = "socks" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b" -dependencies = [ - "byteorder", - "libc", - "winapi", -] - [[package]] name = "spin" version = "0.9.8" @@ -3416,21 +3798,34 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "strsim" -version = "0.11.1" +name = "strum" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.68", +] [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3445,9 +3840,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.59" +version = "2.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6531ffc7b071655e4ce2e04bd464c4830bb585a61cabb96cf808f05172615a" +checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" dependencies = [ "proc-macro2", "quote", @@ -3474,7 +3869,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -3483,7 +3878,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec7dddc5f0fee506baf8b9fdb989e242f17e4b11c61dfbb0635b705217199eea" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "byteorder", "enum-as-inner", "libc", @@ -3514,9 +3909,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" dependencies = [ "filetime", "libc", @@ -3537,7 +3932,7 @@ dependencies = [ [[package]] name = "text-embeddings-backend" -version = "1.2.2" +version = "1.3.0" dependencies = [ "clap", "rand", @@ -3550,7 +3945,7 @@ dependencies = [ [[package]] name = "text-embeddings-backend-candle" -version = "1.2.2" +version = "1.3.0" dependencies = [ "accelerate-src", "anyhow", @@ -3580,7 +3975,7 @@ dependencies = [ [[package]] name = "text-embeddings-backend-core" -version = "1.2.2" +version = "1.3.0" dependencies = [ "clap", "nohash-hasher", @@ -3589,7 +3984,7 @@ dependencies = [ [[package]] name = "text-embeddings-backend-python" -version = "1.2.2" +version = "1.3.0" dependencies = [ "backend-grpc-client", "nohash-hasher", @@ -3603,10 +3998,12 @@ dependencies = [ [[package]] name = "text-embeddings-core" -version = "1.2.2" +version = "1.3.0" dependencies = [ + "async-channel", "hf-hub", "metrics", + "serde_json", "text-embeddings-backend", "thiserror", "tokenizers", @@ -3616,12 +4013,13 @@ dependencies = [ [[package]] name = "text-embeddings-router" -version = "1.2.2" +version = "1.3.0" dependencies = [ "anyhow", "async-stream", "axum 0.7.5", "axum-tracing-opentelemetry", + "base64 0.22.1", "clap", "futures", "hf-hub", @@ -3629,14 +4027,16 @@ dependencies = [ "init-tracing-opentelemetry", "insta", "is_close", + "libc", "metrics", "metrics-exporter-prometheus", "mimalloc", "num_cpus", - "opentelemetry 0.20.0", - "opentelemetry-otlp", - "prost 0.12.4", - "reqwest", + "opentelemetry 0.23.0", + "opentelemetry-otlp 0.16.0", + "opentelemetry_sdk 0.23.0", + "prost 0.12.6", + "reqwest 0.12.5", "serde", "serde_json", "text-embeddings-backend", @@ -3646,12 +4046,12 @@ dependencies = [ "tokio", "tokio-stream", "tonic 0.11.0", - "tonic-build 0.10.2", + "tonic-build 0.11.0", "tonic-health", "tonic-reflection", "tower-http", "tracing", - "tracing-opentelemetry 0.21.0", + "tracing-opentelemetry 0.24.0", "tracing-subscriber", "utoipa", "utoipa-swagger-ui", @@ -3661,22 +4061,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -3724,9 +4124,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "c55115c6fbe2d2bef26eb09ad74bde02d8255476fc0c7b515ef09fbb35742d82" dependencies = [ "tinyvec_macros", ] @@ -3739,12 +4139,12 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokenizers" -version = "0.15.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dd47962b0ba36e7fd33518fbf1754d136fd1474000162bbf2a8b5fcb2d3654d" +checksum = "e500fad1dd3af3d626327e6a3fe5050e664a6eaa4708b8ca92f1794aaf73e6fd" dependencies = [ "aho-corasick", - "derive_builder 0.12.0", + "derive_builder", "esaxx-rs", "getrandom", "itertools 0.12.1", @@ -3758,7 +4158,7 @@ dependencies = [ "rayon", "rayon-cond", "regex", - "regex-syntax 0.8.3", + "regex-syntax 0.8.4", "serde", "serde_json", "spm_precompiled", @@ -3770,9 +4170,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -3799,13 +4199,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -3818,6 +4218,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.10", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.15" @@ -3831,50 +4242,60 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "toml" -version = "0.8.12" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.22.14", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.9" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.13", ] [[package]] @@ -3889,10 +4310,10 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.29", "hyper-timeout", "percent-encoding", "pin-project", @@ -3916,14 +4337,14 @@ dependencies = [ "axum 0.6.20", "base64 0.21.7", "bytes", - "h2", + "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.29", "hyper-timeout", "percent-encoding", "pin-project", - "prost 0.12.4", + "prost 0.12.6", "tokio", "tokio-stream", "tower", @@ -3947,15 +4368,15 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889" +checksum = "be4ef6dd70a610078cb4e338a0f79d06bc759ff1b22d2120c2ff02ae264ba9c2" dependencies = [ - "prettyplease 0.2.19", + "prettyplease 0.2.20", "proc-macro2", - "prost-build 0.12.4", + "prost-build 0.12.6", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -3965,7 +4386,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cef6e24bc96871001a7e48e820ab240b3de2201e59b517cf52835df2f1d2350" dependencies = [ "async-stream", - "prost 0.12.4", + "prost 0.12.6", "tokio", "tokio-stream", "tonic 0.11.0", @@ -3977,8 +4398,8 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "548c227bd5c0fae5925812c4ec6c66ffcfced23ea370cb823f4d18f0fc1cb6a7" dependencies = [ - "prost 0.12.4", - "prost-types 0.12.4", + "prost 0.12.6", + "prost-types 0.12.6", "tokio", "tokio-stream", "tonic 0.11.0", @@ -4010,7 +4431,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "http 1.1.0", "http-body 1.0.0", @@ -4052,7 +4473,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -4103,30 +4524,32 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.21.0" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75327c6b667828ddc28f5e3f169036cb793c3f588d83bf0f262a7f062ffed3c8" +checksum = "a9be14ba1bbe4ab79e9229f7f89fab8d120b865859f10527f31c033e599d2284" dependencies = [ + "js-sys", "once_cell", - "opentelemetry 0.20.0", - "opentelemetry_sdk 0.20.0", + "opentelemetry 0.22.0", + "opentelemetry_sdk 0.22.1", "smallvec", "tracing", "tracing-core", - "tracing-log 0.1.4", + "tracing-log 0.2.0", "tracing-subscriber", + "web-time", ] [[package]] name = "tracing-opentelemetry" -version = "0.22.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596" +checksum = "f68803492bf28ab40aeccaecc7021096bd256baf7ca77c3d425d89b35a7be4e4" dependencies = [ "js-sys", "once_cell", - "opentelemetry 0.21.0", - "opentelemetry_sdk 0.21.2", + "opentelemetry 0.23.0", + "opentelemetry_sdk 0.23.0", "smallvec", "tracing", "tracing-core", @@ -4137,14 +4560,14 @@ dependencies = [ [[package]] name = "tracing-opentelemetry-instrumentation-sdk" -version = "0.17.1" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9db99a4f5224920c499515a737e2749eb9a19b729b3880afc24594524e9861de" +checksum = "9a276058193f1b03d8279356215ec4c8c1bb21e40e5554bb239aa94fb2d8e189" dependencies = [ "http 1.1.0", - "opentelemetry 0.21.0", + "opentelemetry 0.22.0", "tracing", - "tracing-opentelemetry 0.22.0", + "tracing-opentelemetry 0.23.0", ] [[package]] @@ -4237,9 +4660,9 @@ checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode_categories" @@ -4261,30 +4684,29 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.9.6" +version = "2.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f214ce18d8b2cbe84ed3aa6486ed3f5b285cf8d8fbdbce9f3f767a724adc35" +checksum = "d11a831e3c0b56e438a28308e7c810799e3c118417f342d30ecec080105395cd" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "flate2", "log", "native-tls", "once_cell", - "rustls", + "rustls 0.22.4", "rustls-pki-types", "rustls-webpki", "serde", "serde_json", - "socks", "url", "webpki-roots", ] [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -4299,15 +4721,15 @@ checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utoipa" -version = "4.2.0" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "272ebdfbc99111033031d2f10e018836056e4d2c8e2acda76450ec7974269fa7" +checksum = "c5afb1a60e207dca502682537fefcfd9921e71d0b83e9576060f09abc6efab23" dependencies = [ "indexmap 2.2.6", "serde", @@ -4317,38 +4739,40 @@ dependencies = [ [[package]] name = "utoipa-gen" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c9f4d08338c1bfa70dde39412a040a884c6f318b3d09aaaf3437a1e52027fc" +checksum = "7bf0e16c02bc4bf5322ab65f10ab1149bdbcaa782cba66dc7057370a3f8190be" dependencies = [ "proc-macro-error", "proc-macro2", "quote", "regex", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] name = "utoipa-swagger-ui" -version = "6.0.0" +version = "7.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b39868d43c011961e04b41623e050aedf2cc93652562ff7935ce0f819aaf2da" +checksum = "943e0ff606c6d57d410fd5663a4d7c074ab2c5f14ab903b9514565e59fa1189e" dependencies = [ "axum 0.7.5", "mime_guess", "regex", + "reqwest 0.12.5", "rust-embed", "serde", "serde_json", + "url", "utoipa", - "zip", + "zip 1.1.4", ] [[package]] name = "uuid" -version = "1.8.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "5de17fd2f7da591098415cff336e12965a28061ddace43b59cb3c430179c9439" dependencies = [ "getrandom", ] @@ -4383,7 +4807,7 @@ checksum = "cff2381c6b31ab2555441e382d699a56c3551d0cfdf0c4df5617bf271c1dd102" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] @@ -4450,7 +4874,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", "wasm-bindgen-shared", ] @@ -4484,7 +4908,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4507,9 +4931,9 @@ dependencies = [ [[package]] name = "web-time" -version = "0.2.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -4517,9 +4941,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.1" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" dependencies = [ "rustls-pki-types", ] @@ -4554,11 +4978,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -4717,9 +5141,18 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" -version = "0.6.6" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" +checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" dependencies = [ "memchr", ] @@ -4734,6 +5167,16 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "xattr" version = "1.3.1" @@ -4756,9 +5199,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e71b2e4f287f467794c671e2b8f8a5f3716b3c829079a1c44740148eff07e4" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" dependencies = [ "serde", "stable_deref_trait", @@ -4768,62 +5211,76 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6936f0cce458098a201c245a11bef556c6a0181129c7034d10d76d1ec3a2b8" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", "synstructure", ] [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", ] [[package]] name = "zerofrom" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.59", + "syn 2.0.68", "synstructure", ] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] [[package]] name = "zip" @@ -4834,5 +5291,20 @@ dependencies = [ "byteorder", "crc32fast", "crossbeam-utils", +] + +[[package]] +name = "zip" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cc23c04387f4da0374be4533ad1208cbb091d5c11d070dfef13676ad6497164" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", "flate2", + "indexmap 2.2.6", + "num_enum", + "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index f392fb9b..9e1c26cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,25 +11,43 @@ members = [ resolver = "2" [workspace.package] -version = "1.2.2" +version = "1.4.0" edition = "2021" authors = ["Olivier Dehaene"] homepage = "https://github.com/huggingface/text-embeddings-inference" +[workspace.dependencies] +anyhow = "1.0.75" +clap = { version = "4.1", features = ["derive", "env"] } +hf-hub = { version = "0.3.2", features = ["tokio", "online"], default-features = false } +metrics = "0.23" +nohash-hasher = "0.2" +tokenizers = { version = "0.19.1", default-features = false, features = ["onig", "esaxx_fast"] } +tokio = { version = "1.25", features = ["rt", "rt-multi-thread", "parking_lot", "sync", "signal"] } +tracing = "0.1" +serde = { version = "1.0", features = ["serde_derive"] } +serde_json = "1.0" +thiserror = "1.0" + + [patch.crates-io] cudarc = { git = "https://github.com/coreylowman/cudarc", rev = "c388e724af93a3e8fbe484f5ded2d8b3c1badd8e" } candle = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-core" } candle-nn = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-nn" } candle-transformers = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-transformers" } candle-flash-attn = { git = "https://github.com/OlivierDehaene/candle", rev = "33b7ecf9ed82bb7c20f1a94555218fabfbaa2fe3", package = "candle-flash-attn" } -hf-hub = { git = "https://github.com/huggingface/hf-hub", rev = "b167f69692be5f49eb8003788f7f8a499a98b096" } - [profile.release] debug = 0 -incremental = true lto = "fat" opt-level = 3 codegen-units = 1 strip = "symbols" panic = "abort" + +[profile.release-debug] +inherits = "release" +debug = 1 +lto = "thin" +codegen-units = 16 +strip = "none" diff --git a/Dockerfile b/Dockerfile index 625d165f..8c1368c0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ WORKDIR /usr/src ENV SCCACHE=0.5.4 ENV RUSTC_WRAPPER=/usr/local/bin/sccache -# Donwload and configure sccache +# Donwload, configure sccache RUN curl -fsSL https://github.com/mozilla/sccache/releases/download/v$SCCACHE/sccache-v$SCCACHE-x86_64-unknown-linux-musl.tar.gz | tar -xzv --strip-components=1 -C /usr/local/bin sccache-v$SCCACHE-x86_64-unknown-linux-musl/sccache && \ chmod +x /usr/local/bin/sccache diff --git a/Dockerfile-cuda b/Dockerfile-cuda index 990e4261..d67eba93 100644 --- a/Dockerfile-cuda +++ b/Dockerfile-cuda @@ -35,6 +35,11 @@ ARG CUDA_COMPUTE_CAP=80 ARG GIT_SHA ARG DOCKER_LABEL +# Limit parallelism +ARG RAYON_NUM_THREADS +ARG CARGO_BUILD_JOBS +ARG CARGO_BUILD_INCREMENTAL + # sccache specific variables ARG ACTIONS_CACHE_URL ARG ACTIONS_RUNTIME_TOKEN diff --git a/Dockerfile-cuda-all b/Dockerfile-cuda-all index aa9fe1f9..43150277 100644 --- a/Dockerfile-cuda-all +++ b/Dockerfile-cuda-all @@ -33,49 +33,48 @@ FROM base-builder AS builder ARG GIT_SHA ARG DOCKER_LABEL -ARG VERTEX +ARG VERTEX="false" # sccache specific variables ARG ACTIONS_CACHE_URL ARG ACTIONS_RUNTIME_TOKEN ARG SCCACHE_GHA_ENABLED -# limit the number of kernels built at the same time -ARG RAYON_NUM_THREADS=2 +# Limit parallelism +ARG RAYON_NUM_THREADS=4 +ARG CARGO_BUILD_JOBS +ARG CARGO_BUILD_INCREMENTAL WORKDIR /usr/src COPY --from=planner /usr/src/recipe.json recipe.json -FROM builder as builder-75 - RUN if [ $VERTEX = "true" ]; \ then \ - CUDA_COMPUTE_CAP=75 cargo chef cook --release --features google --features candle-cuda-turing --features http --no-default-features --recipe-path recipe.json && sccache -s; \ + cargo chef cook --release --features google --recipe-path recipe.json && sccache -s; \ else \ - CUDA_COMPUTE_CAP=75 cargo chef cook --release --features candle-cuda-turing --no-default-features --features http --recipe-path recipe.json && sccache -s; \ + cargo chef cook --release --recipe-path recipe.json && sccache -s; \ fi; -COPY backends backends -COPY core core -COPY router router -COPY Cargo.toml ./ -COPY Cargo.lock ./ - RUN if [ $VERTEX = "true" ]; \ then \ - CUDA_COMPUTE_CAP=75 cargo build --release --bin text-embeddings-router -F candle-cuda-turing -F http -F google --no-default-features && sccache -s; \ + CUDA_COMPUTE_CAP=75 cargo chef cook --release --features google --features candle-cuda-turing --recipe-path recipe.json && sccache -s; \ else \ - CUDA_COMPUTE_CAP=75 cargo build --release --bin text-embeddings-router -F candle-cuda-turing -F http --no-default-features && sccache -s; \ + CUDA_COMPUTE_CAP=75 cargo chef cook --release --features candle-cuda-turing --recipe-path recipe.json && sccache -s; \ fi; -FROM builder as builder-80 +RUN if [ $VERTEX = "true" ]; \ + then \ + CUDA_COMPUTE_CAP=80 cargo chef cook --release --features google --features candle-cuda --recipe-path recipe.json && sccache -s; \ + else \ + CUDA_COMPUTE_CAP=80 cargo chef cook --release --features candle-cuda --recipe-path recipe.json && sccache -s; \ + fi; RUN if [ $VERTEX = "true" ]; \ then \ - CUDA_COMPUTE_CAP=80 cargo chef cook --release --features google --features candle-cuda --features http --no-default-features --recipe-path recipe.json && sccache -s; \ + CUDA_COMPUTE_CAP=90 cargo chef cook --release --features google --features candle-cuda --recipe-path recipe.json && sccache -s; \ else \ - CUDA_COMPUTE_CAP=80 cargo chef cook --release --features candle-cuda --no-default-features --features http --recipe-path recipe.json && sccache -s; \ + CUDA_COMPUTE_CAP=90 cargo chef cook --release --features candle-cuda --recipe-path recipe.json && sccache -s; \ fi; COPY backends backends @@ -86,33 +85,31 @@ COPY Cargo.lock ./ RUN if [ $VERTEX = "true" ]; \ then \ - CUDA_COMPUTE_CAP=80 cargo build --release --bin text-embeddings-router -F candle-cuda -F http -F google --no-default-features && sccache -s; \ + CUDA_COMPUTE_CAP=75 cargo build --release --bin text-embeddings-router -F candle-cuda-turing -F http -F google --no-default-features && sccache -s; \ else \ - CUDA_COMPUTE_CAP=80 cargo build --release --bin text-embeddings-router -F candle-cuda -F http --no-default-features && sccache -s; \ + CUDA_COMPUTE_CAP=75 cargo build --release --bin text-embeddings-router -F candle-cuda-turing -F http --no-default-features && sccache -s; \ fi; -FROM builder as builder-90 +RUN mv /usr/src/target/release/text-embeddings-router /usr/src/target/release/text-embeddings-router-75 RUN if [ $VERTEX = "true" ]; \ then \ - CUDA_COMPUTE_CAP=90 cargo chef cook --release --features google --features candle-cuda --features http --no-default-features --recipe-path recipe.json && sccache -s; \ + CUDA_COMPUTE_CAP=80 cargo build --release --bin text-embeddings-router -F candle-cuda -F google && sccache -s; \ else \ - CUDA_COMPUTE_CAP=90 cargo chef cook --release --features candle-cuda --features http --no-default-features --recipe-path recipe.json && sccache -s; \ + CUDA_COMPUTE_CAP=80 cargo build --release --bin text-embeddings-router -F candle-cuda && sccache -s; \ fi; -COPY backends backends -COPY core core -COPY router router -COPY Cargo.toml ./ -COPY Cargo.lock ./ +RUN mv /usr/src/target/release/text-embeddings-router /usr/src/target/release/text-embeddings-router-80 RUN if [ $VERTEX = "true" ]; \ then \ - CUDA_COMPUTE_CAP=90 cargo build --release --bin text-embeddings-router -F candle-cuda -F http -F google --no-default-features && sccache -s; \ + CUDA_COMPUTE_CAP=90 cargo build --release --bin text-embeddings-router -F candle-cuda -F google && sccache -s; \ else \ - CUDA_COMPUTE_CAP=90 cargo build --release --bin text-embeddings-router -F candle-cuda -F http --no-default-features && sccache -s; \ + CUDA_COMPUTE_CAP=90 cargo build --release --bin text-embeddings-router -F candle-cuda && sccache -s; \ fi; +RUN mv /usr/src/target/release/text-embeddings-router /usr/src/target/release/text-embeddings-router-90 + FROM nvidia/cuda:12.2.0-runtime-ubuntu22.04 as base ARG DEFAULT_USE_FLASH_ATTENTION=True @@ -121,9 +118,9 @@ ENV HUGGINGFACE_HUB_CACHE=/data \ PORT=80 \ USE_FLASH_ATTENTION=$DEFAULT_USE_FLASH_ATTENTION -COPY --from=builder-75 /usr/src/target/release/text-embeddings-router /usr/local/bin/text-embeddings-router-75 -COPY --from=builder-80 /usr/src/target/release/text-embeddings-router /usr/local/bin/text-embeddings-router-80 -COPY --from=builder-90 /usr/src/target/release/text-embeddings-router /usr/local/bin/text-embeddings-router-90 +COPY --from=builder /usr/src/target/release/text-embeddings-router-75 /usr/local/bin/text-embeddings-router-75 +COPY --from=builder /usr/src/target/release/text-embeddings-router-80 /usr/local/bin/text-embeddings-router-80 +COPY --from=builder /usr/src/target/release/text-embeddings-router-90 /usr/local/bin/text-embeddings-router-90 # Amazon SageMaker compatible image FROM base AS sagemaker diff --git a/Makefile b/Makefile index 1af63144..99a5ff59 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ integration-tests: - cargo test --release + cargo test cuda-integration-tests: - cargo test -F text-embeddings-backend-candle/cuda -F text-embeddings-backend-candle/flash-attn -F text-embeddings-router/candle-cuda --release + cargo test -F text-embeddings-backend-candle/cuda -F text-embeddings-backend-candle/flash-attn -F text-embeddings-router/candle-cuda --profile release-debug integration-tests-review: - cargo insta test --review --release + cargo insta test --review cuda-integration-tests-review: - cargo insta test --review --features "text-embeddings-backend-candle/cuda text-embeddings-backend-candle/flash-attn text-embeddings-router/candle-cuda" --release + cargo insta test --review --features "text-embeddings-backend-candle/cuda text-embeddings-backend-candle/flash-attn text-embeddings-router/candle-cuda" --profile release-debug diff --git a/backends/Cargo.toml b/backends/Cargo.toml index 09cef744..3efbc52d 100644 --- a/backends/Cargo.toml +++ b/backends/Cargo.toml @@ -6,13 +6,14 @@ authors.workspace = true homepage.workspace = true [dependencies] -clap = { version = "4.1.4", features = ["derive"], optional = true } +clap = { workspace = true, optional = true } text-embeddings-backend-core = { path = "core" } text-embeddings-backend-python = { path = "python", optional = true } text-embeddings-backend-candle = { path = "candle", optional = true } tokio = { version = "^1.25", features = ["sync"] } tracing = "^0.1" rand = "^0.8" + [features] clap = ["dep:clap", "text-embeddings-backend-core/clap"] python = ["dep:text-embeddings-backend-python"] diff --git a/backends/candle/Cargo.toml b/backends/candle/Cargo.toml index f80998f4..f26d213a 100644 --- a/backends/candle/Cargo.toml +++ b/backends/candle/Cargo.toml @@ -6,6 +6,7 @@ authors.workspace = true homepage.workspace = true [dependencies] +anyhow = { workspace = true } accelerate-src = { version = "0.3.2", optional = true } intel-mkl-src = { version = "0.8.1", optional = true } candle = { version = "*", package = "candle-core", default-features = false } @@ -16,21 +17,21 @@ candle-flash-attn-v1 = { git = "https://github.com/huggingface/candle-flash-attn candle-cublaslt = { git = "https://github.com/huggingface/candle-cublaslt", rev = "cf789b7dd6d4abb19b03b9556442f94f0588b4a0", optional = true } candle-layer-norm = { git = "https://github.com/huggingface/candle-layer-norm", rev = "94c2add7d94c2d63aebde77f7534614e04dbaea1", optional = true } candle-rotary = { git = "https://github.com/huggingface/candle-rotary", rev = "0a718a0856569a92f3112e64f10d07e4447822e8", optional = true } -nohash-hasher = "^0.2" +nohash-hasher = { workspace = true } text-embeddings-backend-core = { path = "../core" } -tracing = "^0.1" +tracing = { workspace = true } safetensors = "^0.4" -thiserror = "^1.0" -serde = { version = "^1.0", features = ["serde_derive"] } -serde_json = "^1.0" +thiserror = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } memmap2 = "^0.9" [dev-dependencies] insta = { git = "https://github.com/OlivierDehaene/insta", rev = "f4f98c0410b91fb5a28b10df98e4422955be9c2c", features = ["yaml"] } is_close = "0.1.3" hf-hub = "0.3.2" -anyhow = "1.0.75" -tokenizers = { version = "^0.15.0", default-features = false, features = ["onig", "esaxx_fast"] } +anyhow = { workspace = true } +tokenizers = { workspace = true } serial_test = "2.0.0" [build-dependencies] diff --git a/backends/candle/src/compute_cap.rs b/backends/candle/src/compute_cap.rs index a1c391ee..ac79fcf1 100644 --- a/backends/candle/src/compute_cap.rs +++ b/backends/candle/src/compute_cap.rs @@ -1,41 +1,26 @@ +use anyhow::Context; +use candle::cuda_backend::cudarc::driver; use candle::cuda_backend::cudarc::driver::sys::CUdevice_attribute::{ CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, }; use candle::cuda_backend::cudarc::driver::CudaDevice; -use std::sync::Once; -static INIT: Once = Once::new(); -static mut RUNTIME_COMPUTE_CAP: usize = 0; -static mut COMPILE_COMPUTE_CAP: usize = 0; - -fn init_compute_caps() { - unsafe { - INIT.call_once(|| { - let device = CudaDevice::new(0).expect("cuda is not available"); - let major = device - .attribute(CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) - .unwrap(); - let minor = device - .attribute(CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) - .unwrap(); - RUNTIME_COMPUTE_CAP = (major * 10 + minor) as usize; - COMPILE_COMPUTE_CAP = env!("CUDA_COMPUTE_CAP").parse::().unwrap(); - }); - } -} - -pub fn get_compile_compute_cap() -> usize { - unsafe { - init_compute_caps(); - COMPILE_COMPUTE_CAP - } +pub fn get_compile_compute_cap() -> Result { + env!("CUDA_COMPUTE_CAP") + .parse::() + .context("Could not retrieve compile time CUDA_COMPUTE_CAP") } -pub fn get_runtime_compute_cap() -> usize { - unsafe { - init_compute_caps(); - RUNTIME_COMPUTE_CAP - } +pub fn get_runtime_compute_cap() -> Result { + driver::result::init().context("CUDA is not available")?; + let device = CudaDevice::new(0).context("CUDA is not available")?; + let major = device + .attribute(CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) + .context("Could not retrieve device compute capability major")?; + let minor = device + .attribute(CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) + .context("Could not retrieve device compute capability minor")?; + Ok((major * 10 + minor) as usize) } fn compute_cap_matching(runtime_compute_cap: usize, compile_compute_cap: usize) -> bool { @@ -49,10 +34,13 @@ fn compute_cap_matching(runtime_compute_cap: usize, compile_compute_cap: usize) } } -pub fn incompatible_compute_cap() -> bool { - let compile_compute_cap = get_compile_compute_cap(); - let runtime_compute_cap = get_runtime_compute_cap(); - !compute_cap_matching(runtime_compute_cap, compile_compute_cap) +pub fn compatible_compute_cap() -> Result { + let compile_compute_cap = get_compile_compute_cap()?; + let runtime_compute_cap = get_runtime_compute_cap()?; + Ok(compute_cap_matching( + runtime_compute_cap, + compile_compute_cap, + )) } #[cfg(test)] diff --git a/backends/candle/src/flash_attn.rs b/backends/candle/src/flash_attn.rs index 556fd375..f2016928 100644 --- a/backends/candle/src/flash_attn.rs +++ b/backends/candle/src/flash_attn.rs @@ -1,5 +1,23 @@ -use crate::compute_cap::get_runtime_compute_cap; use candle::Tensor; +use std::sync::Once; + +static INIT: Once = Once::new(); +static mut RUNTIME_COMPUTE_CAP: usize = 0; +fn init_runtime_compute_cap() { + unsafe { + INIT.call_once(|| { + use crate::compute_cap::get_runtime_compute_cap; + RUNTIME_COMPUTE_CAP = get_runtime_compute_cap().unwrap(); + }); + } +} + +pub fn get_runtime_compute_cap() -> usize { + unsafe { + init_runtime_compute_cap(); + RUNTIME_COMPUTE_CAP + } +} #[allow(clippy::too_many_arguments, unused)] pub(crate) fn flash_attn_varlen( @@ -13,6 +31,7 @@ pub(crate) fn flash_attn_varlen( max_seqlen_k: usize, softmax_scale: f32, causal: bool, + window_size_left: Option, ) -> Result { let runtime_compute_cap = get_runtime_compute_cap(); @@ -20,6 +39,9 @@ pub(crate) fn flash_attn_varlen( if alibi_slopes.is_some() { candle::bail!("Flash attention v1 does not support alibi"); } + if window_size_left.is_some() { + candle::bail!("Flash attention v1 does not support attention windowing"); + } #[cfg(feature = "flash-attn-v1")] { @@ -41,10 +63,12 @@ pub(crate) fn flash_attn_varlen( } else if (80..90).contains(&runtime_compute_cap) || runtime_compute_cap == 90 { #[cfg(feature = "flash-attn")] { - use candle_flash_attn::{flash_attn_varlen, flash_attn_varlen_alibi}; + use candle_flash_attn::{flash_attn_varlen_alibi_windowed, flash_attn_varlen_windowed}; + + let window_size_right = if causal { Some(0) } else { None }; let attention = if let Some(alibi_slopes) = alibi_slopes { - flash_attn_varlen_alibi( + flash_attn_varlen_alibi_windowed( q, k, v, @@ -54,10 +78,11 @@ pub(crate) fn flash_attn_varlen( max_seqlen_q, max_seqlen_k, softmax_scale, - causal, + window_size_left, + window_size_right, ) } else { - flash_attn_varlen( + flash_attn_varlen_windowed( q, k, v, @@ -66,7 +91,8 @@ pub(crate) fn flash_attn_varlen( max_seqlen_q, max_seqlen_k, softmax_scale, - causal, + window_size_left, + window_size_right, ) }; diff --git a/backends/candle/src/layers/cublaslt.rs b/backends/candle/src/layers/cublaslt.rs index e35601e8..bfa2d182 100644 --- a/backends/candle/src/layers/cublaslt.rs +++ b/backends/candle/src/layers/cublaslt.rs @@ -11,21 +11,27 @@ static mut CUBLASLT: Option = None; pub fn get_cublas_lt_wrapper() -> Option<&'static CublasLtWrapper> { unsafe { INIT.call_once(|| { - CUBLASLT = match Device::cuda_if_available(0) { - Ok(device) => { - #[cfg(feature = "cuda")] - { - Some(CublasLtWrapper { + #[cfg(not(feature = "cuda"))] + { + CUBLASLT = None; + } + + #[cfg(feature = "cuda")] + { + // Check if we can call the driver + // Then check if we can create a device + // Then check that the device is CUDA + use candle::cuda_backend::cudarc::driver; + CUBLASLT = driver::result::init() + .ok() + .and_then(|_| Device::cuda_if_available(0).ok()) + .and_then(|device| match device { + Device::Cuda(_) => Some(CublasLtWrapper { cublaslt: CublasLt::new(&device).unwrap(), - }) - } - #[cfg(not(feature = "cuda"))] - { - None - } - } - Err(_) => None, - }; + }), + _ => None, + }); + } }); CUBLASLT.as_ref() } diff --git a/backends/candle/src/layers/linear.rs b/backends/candle/src/layers/linear.rs index 3fdd025b..fc8af1dd 100644 --- a/backends/candle/src/layers/linear.rs +++ b/backends/candle/src/layers/linear.rs @@ -7,6 +7,7 @@ use serde::Deserialize; pub enum HiddenAct { Gelu, Relu, + #[serde(alias = "silu")] Swiglu, } diff --git a/backends/candle/src/layers.rs b/backends/candle/src/layers/mod.rs similarity index 65% rename from backends/candle/src/layers.rs rename to backends/candle/src/layers/mod.rs index 8e108fc2..81f63310 100644 --- a/backends/candle/src/layers.rs +++ b/backends/candle/src/layers/mod.rs @@ -2,7 +2,11 @@ mod cublaslt; mod layer_norm; mod linear; +#[allow(dead_code, unused)] +mod rms_norm; pub use cublaslt::get_cublas_lt_wrapper; pub use layer_norm::LayerNorm; pub use linear::{HiddenAct, Linear}; +#[allow(unused_imports)] +pub use rms_norm::RMSNorm; diff --git a/backends/candle/src/layers/rms_norm.rs b/backends/candle/src/layers/rms_norm.rs new file mode 100644 index 00000000..e7dab642 --- /dev/null +++ b/backends/candle/src/layers/rms_norm.rs @@ -0,0 +1,96 @@ +use candle::{DType, Device, Result, Tensor, D}; +use candle_nn::VarBuilder; + +#[derive(Debug)] +pub struct RMSNorm { + weight: Tensor, + epsilon: f32, + span: tracing::Span, +} + +impl RMSNorm { + pub fn load(vb: VarBuilder, hidden_size: usize, epsilon: f32) -> Result { + Ok(Self { + weight: vb + .get(hidden_size, "weight") + .or_else(|_| vb.get(hidden_size, "gamma"))?, + epsilon, + span: tracing::span!(tracing::Level::TRACE, "rms-norm"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + residual: Option<&Tensor>, + ) -> Result<(Tensor, Tensor)> { + let _enter = self.span.enter(); + + match hidden_states.device() { + Device::Cpu | Device::Metal(_) => { + let mut hidden_states = hidden_states.clone(); + let residual_add = if let Some(residual) = residual { + let residual_add = hidden_states.add(residual)?; + hidden_states = residual_add.clone(); + residual_add + } else { + hidden_states.clone() + }; + + let hidden_states_dtype = hidden_states.dtype(); + let internal_dtype = match hidden_states_dtype { + DType::F16 | DType::BF16 => DType::F32, + d => d, + }; + let hidden_size = hidden_states.dim(D::Minus1)?; + let hidden_states = hidden_states.to_dtype(internal_dtype)?; + let norm_hidden_states = + (hidden_states.sqr()?.sum_keepdim(D::Minus1)? / hidden_size as f64)?; + let hidden_states_normed = hidden_states + .broadcast_div(&(norm_hidden_states + self.epsilon as f64)?.sqrt()?)?; + Ok(( + hidden_states_normed + .to_dtype(hidden_states_dtype)? + .broadcast_mul(&self.weight)?, + residual_add, + )) + } + Device::Cuda(_) => { + #[cfg(feature = "cuda")] + { + use candle_layer_norm::{fused_add_rms_norm, rms_norm}; + + let original_shape = hidden_states.shape(); + let hidden_states = hidden_states.flatten_to(D::Minus2)?; + + if let Some(residual) = residual { + let residual = residual.flatten_to(D::Minus2)?; + + let (result, residual_add) = fused_add_rms_norm( + &hidden_states, + &residual, + &self.weight, + None, + self.epsilon, + )?; + Ok(( + result.reshape(original_shape)?, + residual_add.reshape(original_shape)?, + )) + } else { + let residual_add = hidden_states.clone(); + + let result = rms_norm(&hidden_states, &self.weight, None, self.epsilon)?; + + Ok(( + result.reshape(original_shape)?, + residual_add.reshape(original_shape)?, + )) + } + } + #[cfg(not(feature = "cuda"))] + candle::bail!("`cuda` feature is not enabled") + } + } + } +} diff --git a/backends/candle/src/lib.rs b/backends/candle/src/lib.rs index 9b9ab832..acd93750 100644 --- a/backends/candle/src/lib.rs +++ b/backends/candle/src/lib.rs @@ -8,19 +8,20 @@ mod models; #[cfg(feature = "cuda")] use crate::compute_cap::{ - get_compile_compute_cap, get_runtime_compute_cap, incompatible_compute_cap, + compatible_compute_cap, get_compile_compute_cap, get_runtime_compute_cap, }; use crate::models::{ - BertModel, DistilBertConfig, DistilBertModel, JinaBertModel, Model, NomicBertModel, - NomicConfig, PositionEmbeddingType, + BertConfig, BertModel, DistilBertConfig, DistilBertModel, GTEConfig, JinaBertModel, + JinaCodeBertModel, MistralConfig, Model, NomicBertModel, NomicConfig, Qwen2Config, }; #[cfg(feature = "cuda")] use crate::models::{ - FlashBertModel, FlashDistilBertModel, FlashJinaBertModel, FlashNomicBertModel, + FlashBertModel, FlashDistilBertModel, FlashGTEModel, FlashJinaBertModel, + FlashJinaCodeBertModel, FlashMistralModel, FlashNomicBertModel, FlashQwen2Model, }; +use anyhow::Context; use candle::{DType, Device}; use candle_nn::VarBuilder; -use models::BertConfig; use nohash_hasher::BuildNoHashHasher; use serde::Deserialize; use std::collections::HashMap; @@ -29,10 +30,25 @@ use text_embeddings_backend_core::{ Backend, BackendError, Batch, Embedding, Embeddings, ModelType, Predictions, }; +/// This enum is needed to be able to differentiate between jina models that also use +/// the `bert` model type and valid Bert models. +/// We use the `_name_or_path` field in the config to do so. This might not be robust in the long +/// run but is still better than the other options... +#[derive(Debug, Clone, PartialEq, Deserialize)] +#[serde(tag = "_name_or_path")] +pub enum BertConfigWrapper { + #[serde(rename = "jinaai/jina-bert-implementation")] + JinaBert(BertConfig), + #[serde(rename = "jinaai/jina-bert-v2-qk-post-norm")] + JinaCodeBert(BertConfig), + #[serde(untagged)] + Bert(BertConfig), +} + #[derive(Deserialize)] #[serde(tag = "model_type", rename_all = "kebab-case")] enum Config { - Bert(BertConfig), + Bert(BertConfigWrapper), XlmRoberta(BertConfig), Camembert(BertConfig), Roberta(BertConfig), @@ -40,9 +56,14 @@ enum Config { DistilBert(DistilBertConfig), #[serde(rename(deserialize = "nomic_bert"))] NomicBert(NomicConfig), + Mistral(MistralConfig), + #[serde(rename = "new")] + Gte(GTEConfig), + Qwen2(Qwen2Config), } pub struct CandleBackend { + device: Device, model: Box, } @@ -52,23 +73,82 @@ impl CandleBackend { dtype: String, model_type: ModelType, ) -> Result { + // Default files + let default_safetensors = model_path.join("model.safetensors"); + let default_pytorch = model_path.join("pytorch_model.bin"); + + // Single Files + let model_files = if default_safetensors.exists() { + vec![default_safetensors] + } else if default_pytorch.exists() { + vec![default_pytorch] + } + // Sharded weights + else { + // Get index file + let index_file = model_path.join("model.safetensors.index.json"); + + // Parse file + let index_file_string: String = std::fs::read_to_string(&index_file) + .map_err(|err| BackendError::Start(err.to_string()))?; + let json: serde_json::Value = serde_json::from_str(&index_file_string) + .map_err(|err| BackendError::Start(err.to_string()))?; + + let weight_map = match json.get("weight_map") { + None => { + return Err(BackendError::Start(format!( + "no weight map in {index_file:?}" + ))); + } + Some(serde_json::Value::Object(map)) => map, + Some(_) => { + return Err(BackendError::Start(format!( + "weight map in {index_file:?} is not a map" + ))); + } + }; + let mut safetensors_files = std::collections::HashSet::new(); + for value in weight_map.values() { + if let Some(file) = value.as_str() { + safetensors_files.insert(file.to_string()); + } + } + + // Collect paths + safetensors_files + .iter() + .map(|n| model_path.join(n)) + .collect() + }; + // Load config let config: String = std::fs::read_to_string(model_path.join("config.json")) - .map_err(|err| BackendError::Start(err.to_string()))?; + .context("Unable to read config file") + .map_err(|err| BackendError::Start(format!("{err:?}")))?; let config: Config = serde_json::from_str(&config) - .map_err(|err| BackendError::Start(format!("Model is not supported: {}", err)))?; + .context("Model is not supported") + .map_err(|err| BackendError::Start(format!("{err:?}")))?; // Get candle device let device = if candle::utils::cuda_is_available() { #[cfg(feature = "cuda")] - if incompatible_compute_cap() { - return Err(BackendError::Start(format!( - "Runtime compute cap {} is not compatible with compile time compute cap {}", - get_runtime_compute_cap(), - get_compile_compute_cap() - ))); + match compatible_compute_cap() { + Ok(true) => Device::new_cuda(0), + Ok(false) => { + return Err(BackendError::Start(format!( + "Runtime compute cap {} is not compatible with compile time compute cap {}", + get_runtime_compute_cap().unwrap(), + get_compile_compute_cap().unwrap() + ))); + } + Err(err) => { + tracing::warn!("Could not find a compatible CUDA device on host: {err:?}"); + tracing::warn!("Using CPU instead"); + Ok(Device::Cpu) + } } - Device::new_cuda(0) + #[cfg(not(feature = "cuda"))] + Ok(Device::Cpu) } else if candle::utils::metal_is_available() { Device::new_metal(0) } else { @@ -87,17 +167,10 @@ impl CandleBackend { ))) }?; - let safetensors_path = model_path.join("model.safetensors"); - let vb = if safetensors_path.exists() { - unsafe { - VarBuilder::from_mmaped_safetensors( - &[model_path.join("model.safetensors")], - dtype, - &device, - ) - } + let vb = if model_files.len() == 1 && model_files[0].extension().unwrap() == "bin" { + VarBuilder::from_pth(&model_files[0], dtype, &device) } else { - VarBuilder::from_pth(model_path.join("pytorch_model.bin"), dtype, &device) + unsafe { VarBuilder::from_mmaped_safetensors(&model_files, dtype, &device) } } .s()?; @@ -106,15 +179,22 @@ impl CandleBackend { (_, Device::Cuda(_)) => Err(BackendError::Start( "`cuda` feature is not enabled".to_string(), )), - (Config::Bert(config), Device::Cpu | Device::Metal(_)) => { - if config.position_embedding_type == PositionEmbeddingType::Alibi { - tracing::info!("Starting JinaBertModel model on {:?}", device); + (Config::Bert(config), Device::Cpu | Device::Metal(_)) => match config { + BertConfigWrapper::JinaBert(config) => { + tracing::info!("Starting JinaBert model on {:?}", device); Ok(Box::new(JinaBertModel::load(vb, &config, model_type).s()?)) - } else { + } + BertConfigWrapper::JinaCodeBert(config) => { + tracing::info!("Starting JinaCodeBert model on {:?}", device); + Ok(Box::new( + JinaCodeBertModel::load(vb, &config, model_type).s()?, + )) + } + BertConfigWrapper::Bert(config) => { tracing::info!("Starting Bert model on {:?}", device); Ok(Box::new(BertModel::load(vb, &config, model_type).s()?)) } - } + }, ( Config::XlmRoberta(config) | Config::Camembert(config) | Config::Roberta(config), Device::Cpu | Device::Metal(_), @@ -125,40 +205,69 @@ impl CandleBackend { )) } (Config::DistilBert(config), Device::Cpu | Device::Metal(_)) => { - tracing::info!("Starting DistilBertModel model on {:?}", device); + tracing::info!("Starting DistilBert model on {:?}", device); Ok(Box::new( DistilBertModel::load(vb, &config, model_type).s()?, )) } (Config::NomicBert(config), Device::Cpu | Device::Metal(_)) => { - tracing::info!("Starting NomicBertModel model on {:?}", device); + tracing::info!("Starting NomicBert model on {:?}", device); Ok(Box::new(NomicBertModel::load(vb, &config, model_type).s()?)) } + (Config::Mistral(_), Device::Cpu | Device::Metal(_)) => Err(BackendError::Start( + "Mistral is only supported on Cuda devices in fp16 with flash attention enabled" + .to_string(), + )), + (Config::Gte(_), Device::Cpu | Device::Metal(_)) => Err(BackendError::Start( + "GTE is only supported on Cuda devices in fp16 with flash attention enabled" + .to_string(), + )), + (Config::Qwen2(_), Device::Cpu | Device::Metal(_)) => Err(BackendError::Start( + "Qwen2 is only supported on Cuda devices in fp16 with flash attention enabled" + .to_string(), + )), #[cfg(feature = "cuda")] (Config::Bert(config), Device::Cuda(_)) => { if cfg!(any(feature = "flash-attn", feature = "flash-attn-v1")) && dtype == DType::F16 - && ((config.position_embedding_type == PositionEmbeddingType::Absolute) | (config.position_embedding_type == PositionEmbeddingType::Alibi)) // Allow disabling because of flash attention v1 precision problems // See: https://github.com/huggingface/text-embeddings-inference/issues/37 && &std::env::var("USE_FLASH_ATTENTION").unwrap_or("True".to_string()).to_lowercase() == "true" { - if config.position_embedding_type == PositionEmbeddingType::Alibi { - tracing::info!("Starting FlashJinaBertModel model on {:?}", device); - Ok(Box::new( - FlashJinaBertModel::load(vb, &config, model_type).s()?, - )) - } else { - tracing::info!("Starting FlashBert model on {:?}", device); - Ok(Box::new(FlashBertModel::load(vb, &config, model_type).s()?)) + match config { + BertConfigWrapper::JinaBert(config) => { + tracing::info!("Starting FlashJinaBert model on {:?}", device); + Ok(Box::new( + FlashJinaBertModel::load(vb, &config, model_type).s()?, + )) + } + BertConfigWrapper::JinaCodeBert(config) => { + tracing::info!("Starting FlashJinaCodeBert model on {:?}", device); + Ok(Box::new( + FlashJinaCodeBertModel::load(vb, &config, model_type).s()?, + )) + } + BertConfigWrapper::Bert(config) => { + tracing::info!("Starting FlashBert model on {:?}", device); + Ok(Box::new(FlashBertModel::load(vb, &config, model_type).s()?)) + } } } else { - if config.position_embedding_type == PositionEmbeddingType::Alibi { - tracing::info!("Starting JinaBertModel model on {:?}", device); - Ok(Box::new(JinaBertModel::load(vb, &config, model_type).s()?)) - } else { - tracing::info!("Starting Bert model on {:?}", device); - Ok(Box::new(BertModel::load(vb, &config, model_type).s()?)) + match config { + BertConfigWrapper::JinaBert(config) => { + tracing::info!("Starting JinaBert model on {:?}", device); + Ok(Box::new(JinaBertModel::load(vb, &config, model_type).s()?)) + } + BertConfigWrapper::JinaCodeBert(config) => { + tracing::info!("Starting JinaCodeBert model on {:?}", device); + Ok(Box::new( + JinaCodeBertModel::load(vb, &config, model_type).s()?, + )) + } + BertConfigWrapper::Bert(config) => { + tracing::info!("Starting Bert model on {:?}", device); + Ok(Box::new(BertModel::load(vb, &config, model_type).s()?)) + } } } } @@ -169,7 +278,6 @@ impl CandleBackend { ) => { if cfg!(any(feature = "flash-attn", feature = "flash-attn-v1")) && dtype == DType::F16 - && ((config.position_embedding_type == PositionEmbeddingType::Absolute) | (config.position_embedding_type == PositionEmbeddingType::Alibi)) // Allow disabling because of flash attention v1 precision problems // See: https://github.com/huggingface/text-embeddings-inference/issues/37 && &std::env::var("USE_FLASH_ATTENTION").unwrap_or("True".to_string()).to_lowercase() == "true" @@ -194,7 +302,7 @@ impl CandleBackend { .to_lowercase() == "true" { - tracing::info!("Starting FlashDistilBertModel model on {:?}", device); + tracing::info!("Starting FlashDistilBert model on {:?}", device); Ok(Box::new( FlashDistilBertModel::load(vb, &config, model_type).s()?, )) @@ -214,22 +322,68 @@ impl CandleBackend { .to_lowercase() == "true" { - tracing::info!("Starting FlashNomicBertModel model on {:?}", device); + tracing::info!("Starting FlashNomicBert model on {:?}", device); Ok(Box::new( FlashNomicBertModel::load(vb, &config, model_type).s()?, )) } else { - tracing::info!("Starting NomicBertModel model on {:?}", device); + tracing::info!("Starting NomicBert model on {:?}", device); Ok(Box::new(NomicBertModel::load(vb, &config, model_type).s()?)) } } + #[cfg(feature = "cuda")] + (Config::Mistral(config), Device::Cuda(_)) => { + if dtype != DType::F16 + || !cfg!(feature = "flash-attn") + || get_runtime_compute_cap().unwrap() < 80 + { + return Err(BackendError::Start("Mistral is only supported on Cuda devices in fp16 with flash attention v2 enabled".to_string())); + } + tracing::info!("Starting FlashMistral model on {:?}", device); + Ok(Box::new( + FlashMistralModel::load(vb, &config, model_type).s()?, + )) + } + #[cfg(feature = "cuda")] + (Config::Gte(config), Device::Cuda(_)) => { + if dtype != DType::F16 + || !cfg!(any(feature = "flash-attn", feature = "flash-attn-v1")) + { + return Err(BackendError::Start("GTE is only supported on Cuda devices in fp16 with flash attention enabled".to_string())); + } + tracing::info!("Starting FlashGTE model on {:?}", device); + Ok(Box::new(FlashGTEModel::load(vb, &config, model_type).s()?)) + } + #[cfg(feature = "cuda")] + (Config::Qwen2(config), Device::Cuda(_)) => { + if dtype != DType::F16 + || !cfg!(any(feature = "flash-attn", feature = "flash-attn-v1")) + { + return Err(BackendError::Start("Qwen2 is only supported on Cuda devices in fp16 with flash attention v2 enabled".to_string())); + } + tracing::info!("Starting FlashQwen2 model on {:?}", device); + Ok(Box::new( + FlashQwen2Model::load(vb, &config, model_type).s()?, + )) + } }; - Ok(Self { model: model? }) + Ok(Self { + device, + model: model?, + }) } } impl Backend for CandleBackend { + fn max_batch_size(&self) -> Option { + // Limit max batch size to 4 on CPU + if matches!(self.device, Device::Cpu) { + return Some(4); + } + None + } + fn health(&self) -> Result<(), BackendError> { Ok(()) } diff --git a/backends/candle/src/models/bert.rs b/backends/candle/src/models/bert.rs index 200e41de..a36a1555 100644 --- a/backends/candle/src/models/bert.rs +++ b/backends/candle/src/models/bert.rs @@ -35,6 +35,7 @@ pub enum PositionEmbeddingType { #[default] Absolute, Alibi, + Rope, } #[derive(Debug)] @@ -405,13 +406,14 @@ impl ClassificationHead for BertClassificationHead { fn forward(&self, hidden_states: &Tensor) -> Result { let _enter = self.span.enter(); - let mut hidden_states = hidden_states.clone(); + let mut hidden_states = hidden_states.unsqueeze(1)?; if let Some(pooler) = self.pooler.as_ref() { hidden_states = pooler.forward(&hidden_states)?; hidden_states = hidden_states.tanh()?; } let hidden_states = self.output.forward(&hidden_states)?; + let hidden_states = hidden_states.squeeze(1)?; Ok(hidden_states) } } @@ -453,10 +455,11 @@ impl ClassificationHead for RobertaClassificationHead { fn forward(&self, hidden_states: &Tensor) -> Result { let _enter = self.span.enter(); - let hidden_states = self.intermediate.forward(hidden_states)?; + let hidden_states = hidden_states.unsqueeze(1)?; + let hidden_states = self.intermediate.forward(&hidden_states)?; let hidden_states = hidden_states.tanh()?; let hidden_states = self.output.forward(&hidden_states)?; - + let hidden_states = hidden_states.squeeze(1)?; Ok(hidden_states) } } @@ -636,6 +639,10 @@ impl BertModel { (pool, Some(classifier), None) } ModelType::Embedding(pool) => { + if pool == Pool::LastToken { + candle::bail!("`last_token` is not supported for Bert"); + } + let splade = if pool == Pool::Splade { Some(BertSpladeHead::load_roberta(vb.clone(), config)?) } else { @@ -830,6 +837,8 @@ impl BertModel { let pooled_embeddings = match self.pool { // CLS pooling Pool::Cls => outputs.i((.., 0))?, + // Last token pooling is not supported for this model + Pool::LastToken => unreachable!(), // Mean pooling Pool::Mean => { if let Some(ref attention_mask) = attention_mask { diff --git a/backends/candle/src/models/distilbert.rs b/backends/candle/src/models/distilbert.rs index e7145309..2cf62081 100644 --- a/backends/candle/src/models/distilbert.rs +++ b/backends/candle/src/models/distilbert.rs @@ -389,7 +389,12 @@ impl DistilBertModel { ModelType::Classifier => { candle::bail!("`classifier` model type is not supported for DistilBert") } - ModelType::Embedding(pool) => pool, + ModelType::Embedding(pool) => { + if pool == Pool::LastToken { + candle::bail!("`last_token` is not supported for DistilBert"); + } + pool + } }; let (embeddings, encoder) = match ( @@ -564,6 +569,8 @@ impl DistilBertModel { let pooled_embeddings = match self.pool { // CLS pooling Pool::Cls => outputs.i((.., 0))?, + // Last token pooling is not supported for this model + Pool::LastToken => unreachable!(), // Mean pooling Pool::Mean => { if let Some(ref attention_mask) = attention_mask { diff --git a/backends/candle/src/models/flash_bert.rs b/backends/candle/src/models/flash_bert.rs index d248c91f..8951dcc1 100644 --- a/backends/candle/src/models/flash_bert.rs +++ b/backends/candle/src/models/flash_bert.rs @@ -5,7 +5,7 @@ use crate::models::bert::{ PositionEmbeddingType, RobertaClassificationHead, }; use crate::models::Model; -use candle::{DType, Device, Result, Tensor}; +use candle::{DType, Device, IndexOp, Result, Tensor}; use candle_nn::VarBuilder; use text_embeddings_backend_core::{Batch, ModelType, Pool}; @@ -103,6 +103,7 @@ impl BertAttention { max_s, self.softmax_scale, false, + None, )?; let attention = attention.flatten_from(candle::D::Minus2)?; @@ -393,27 +394,47 @@ impl FlashBertModel { let pooled_embeddings = if has_pooling_requests { match self.pool { - // CLS pooling - Pool::Cls => { - // Get the indices of the cls tokens from cu_seqlens - let mut cls_indices = cu_seqlens.narrow(0, 0, batch_size)?; - - // If raw_indices is empty, we don't need to do anything with - // the pooled_indices - if has_raw_requests { - // We need the pooled indices to select the correct cls indices - let pooled_indices = Tensor::from_vec( - batch.pooled_indices.clone(), - batch.pooled_indices.len(), - &self.device, - )?; - - // Only select indices that requires pooling - cls_indices = cls_indices.index_select(&pooled_indices, 0)? + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { + if batch_size > 1 { + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; + + // If raw_indices is empty, we don't need to do anything with + // the pooled_indices + if has_raw_requests { + // We need the pooled indices to select the correct cls indices + let pooled_indices = Tensor::from_vec( + batch.pooled_indices.clone(), + batch.pooled_indices.len(), + &self.device, + )?; + + // Only select indices that requires pooling + indices = indices.index_select(&pooled_indices, 0)? + } + + // Select tokens + Some(outputs.index_select(&indices, 0)?) + } else { + Some( + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)?, + ) } - - // Select cls tokens - Some(outputs.index_select(&cls_indices, 0)?) } // Mean pooling Pool::Mean => { diff --git a/backends/candle/src/models/flash_distilbert.rs b/backends/candle/src/models/flash_distilbert.rs index 3d30c3a8..7f060601 100644 --- a/backends/candle/src/models/flash_distilbert.rs +++ b/backends/candle/src/models/flash_distilbert.rs @@ -4,7 +4,7 @@ use crate::models::distilbert::{ DistilBertConfig, DistilBertEmbeddings, DistilBertMLP, DistilBertSpladeHead, }; use crate::models::Model; -use candle::{DType, Device, Result, Tensor}; +use candle::{DType, Device, IndexOp, Result, Tensor}; use candle_nn::VarBuilder; use text_embeddings_backend_core::{Batch, ModelType, Pool}; @@ -84,6 +84,7 @@ impl DistilBertAttention { max_s, self.softmax_scale, false, + None, )?; let attention = attention.flatten_from(candle::D::Minus2)?; @@ -259,27 +260,45 @@ impl FlashDistilBertModel { let pooled_embeddings = if has_pooling_requests { let pooled_embeddings = match self.pool { - // CLS pooling - Pool::Cls => { - // Get the indices of the cls tokens from cu_seqlens - let mut cls_indices = cu_seqlens.narrow(0, 0, batch_size)?; - - // If raw_indices is empty, we don't need to do anything with - // the pooled_indices - if has_raw_requests { - // We need the pooled indices to select the correct cls indices - let pooled_indices = Tensor::from_vec( - batch.pooled_indices.clone(), - batch.pooled_indices.len(), - &self.device, - )?; - - // Only select indices that requires pooling - cls_indices = cls_indices.index_select(&pooled_indices, 0)? + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { + if batch_size > 1 { + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; + + // If raw_indices is empty, we don't need to do anything with + // the pooled_indices + if has_raw_requests { + // We need the pooled indices to select the correct cls indices + let pooled_indices = Tensor::from_vec( + batch.pooled_indices.clone(), + batch.pooled_indices.len(), + &self.device, + )?; + + // Only select indices that requires pooling + indices = indices.index_select(&pooled_indices, 0)? + } + + // Select tokens + outputs.index_select(&indices, 0)? + } else { + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)? } - - // Select cls tokens - outputs.index_select(&cls_indices, 0)? } // Mean pooling Pool::Mean => { diff --git a/backends/candle/src/models/flash_gte.rs b/backends/candle/src/models/flash_gte.rs new file mode 100644 index 00000000..f3aec220 --- /dev/null +++ b/backends/candle/src/models/flash_gte.rs @@ -0,0 +1,463 @@ +use crate::flash_attn::flash_attn_varlen; +use crate::layers::{HiddenAct, LayerNorm, Linear}; +use crate::models::{GTEConfig, Model, NTKScaling, PositionEmbeddingType, RopeScaling}; +use candle::{DType, Device, IndexOp, Result, Tensor}; +use candle_nn::{Embedding, Module, VarBuilder}; +use text_embeddings_backend_core::{Batch, ModelType, Pool}; + +struct GTEAttention { + qkv_linear: Linear, + o_proj: Linear, + + num_attention_heads: usize, + attention_head_size: usize, + + softmax_scale: f32, + + span: tracing::Span, +} + +impl GTEAttention { + pub fn load(vb: VarBuilder, config: >EConfig) -> Result { + let num_attention_heads = config.num_attention_heads; + let attention_head_size = config.hidden_size / config.num_attention_heads; + let hidden_size = config.hidden_size; + + let qkv_weight = vb + .pp("qkv_proj") + .get((hidden_size * 3, hidden_size), "weight")?; + let qkv_bias = vb.pp("qkv_proj").get(hidden_size * 3, "bias")?; + + let qkv_linear = Linear::new(qkv_weight, Some(qkv_bias), None); + + let o_proj_weight = vb.pp("o_proj").get((hidden_size, hidden_size), "weight")?; + let o_proj_bias = vb.pp("o_proj").get(hidden_size, "bias")?; + + let o_proj = Linear::new(o_proj_weight, Some(o_proj_bias), None); + + let softmax_scale = (1. / (attention_head_size as f64).sqrt()) as f32; + + Ok(Self { + qkv_linear, + o_proj, + num_attention_heads, + attention_head_size, + softmax_scale, + span: tracing::span!(tracing::Level::TRACE, "attention"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + cu_seqlens: &Tensor, + cos: &Tensor, + sin: &Tensor, + max_s: usize, + ) -> Result { + let _enter = self.span.enter(); + + let qkv = self.qkv_linear.forward(hidden_states)?; + + // Reshape to [tokens, heads, head_size] + let mut new_qkv_shape = qkv.dims().to_vec(); + new_qkv_shape.pop(); + new_qkv_shape.push(self.num_attention_heads * 3); + new_qkv_shape.push(self.attention_head_size); + + let qkv = qkv.reshape(new_qkv_shape)?; + + // Split qkv tensor + let q = qkv.narrow(1, 0, self.num_attention_heads)?; + let k = qkv.narrow(1, self.num_attention_heads, self.num_attention_heads)?; + let v = qkv.narrow(1, self.num_attention_heads * 2, self.num_attention_heads)?; + + candle_rotary::apply_rotary_inplace(&q, &k, &cos, &sin, true)?; + + let attention = flash_attn_varlen( + &q, + &k, + &v, + None, + cu_seqlens, + cu_seqlens, + max_s, + max_s, + self.softmax_scale, + false, + None, + )?; + let attention = attention.flatten_from(candle::D::Minus2)?; + + self.o_proj.forward(&attention) + } +} + +struct GTEMLP { + up_gate_proj: Linear, + down_proj: Linear, + + act: HiddenAct, + intermediate_size: usize, + + span: tracing::Span, +} + +impl GTEMLP { + pub fn load(vb: VarBuilder, config: >EConfig) -> Result { + let intermediate_size = config.intermediate_size; + + let up_gate_proj_weight = vb + .pp("up_gate_proj") + .get((intermediate_size * 2, config.hidden_size), "weight")?; + + let up_gate_proj = Linear::new(up_gate_proj_weight, None, None); + + let down_proj_weight = vb + .pp("down_proj") + .get((config.hidden_size, intermediate_size), "weight")?; + let down_proj_bias = vb.pp("down_proj").get(config.hidden_size, "bias")?; + let down_proj = Linear::new(down_proj_weight, Some(down_proj_bias), None); + + Ok(Self { + up_gate_proj, + down_proj, + intermediate_size, + act: config.hidden_act.clone(), + span: tracing::span!(tracing::Level::TRACE, "mlp"), + }) + } + + pub fn forward(&self, hidden_states: &Tensor) -> Result { + let _enter = self.span.enter(); + + let up_gate_states = self.up_gate_proj.forward(hidden_states)?; + let up_states = up_gate_states.narrow(1, 0, self.intermediate_size)?; + let gate_states = + up_gate_states.narrow(1, self.intermediate_size, self.intermediate_size)?; + + let gate_states = match self.act { + HiddenAct::Gelu => gate_states.gelu(), + HiddenAct::Relu => gate_states.relu(), + HiddenAct::Swiglu => gate_states.silu(), + }?; + let r = self.down_proj.forward(&(gate_states * up_states)?); + r + } +} + +struct GTELayer { + attention: GTEAttention, + mlp: GTEMLP, + attention_layer_norm: LayerNorm, + mlp_layer_norm: LayerNorm, + + span: tracing::Span, +} + +impl GTELayer { + pub fn load(vb: VarBuilder, config: >EConfig) -> Result { + let attention = GTEAttention::load(vb.pp("attention"), config)?; + let mlp = GTEMLP::load(vb.pp("mlp"), config)?; + + let attention_layer_norm = + LayerNorm::load(vb.pp("attn_ln"), config.hidden_size, config.layer_norm_eps)?; + let mlp_layer_norm = + LayerNorm::load(vb.pp("mlp_ln"), config.hidden_size, config.layer_norm_eps)?; + + Ok(Self { + attention, + mlp, + attention_layer_norm, + mlp_layer_norm, + span: tracing::span!(tracing::Level::TRACE, "layer"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + cu_seqlens: &Tensor, + cos: &Tensor, + sin: &Tensor, + max_s: usize, + ) -> Result { + let _enter = self.span.enter(); + let attn_output = self + .attention + .forward(&hidden_states, cu_seqlens, cos, sin, max_s)?; + let normed_attn_res_output = self + .attention_layer_norm + .forward(&attn_output, Some(hidden_states))?; + + let mlp_output = self.mlp.forward(&normed_attn_res_output)?; + let normed_mlp_res_output = self + .mlp_layer_norm + .forward(&mlp_output, Some(&normed_attn_res_output))?; + Ok(normed_mlp_res_output) + } +} + +pub struct FlashGTEModel { + word_embeddings: Embedding, + token_type_embeddings: Option, + layers: Vec, + embeddings_norm: LayerNorm, + cos_cache: Tensor, + sin_cache: Tensor, + pool: Pool, + pub device: Device, + + span: tracing::Span, +} + +impl FlashGTEModel { + pub fn load(vb: VarBuilder, config: >EConfig, model_type: ModelType) -> Result { + match vb.device() { + Device::Cuda(_) => {} + _ => candle::bail!("FlashGTE requires Cuda"), + } + + if vb.dtype() != DType::F16 { + candle::bail!("FlashGTE requires DType::F16") + } + + if config.logn_attention_clip1 { + candle::bail!("`logn_attention_clip1` is not supported"); + } + if config.logn_attention_scale { + candle::bail!("`logn_attention_scale` is not supported"); + } + + if config.position_embedding_type != PositionEmbeddingType::Rope { + candle::bail!("Only `PositionEmbeddingType::Rope` is supported"); + } + + let pool = match model_type { + ModelType::Classifier => { + candle::bail!("`classifier` model type is not supported for GTE") + } + ModelType::Embedding(pool) => pool, + }; + + let word_embeddings = Embedding::new( + vb.pp("embeddings.word_embeddings") + .get((config.vocab_size, config.hidden_size), "weight")?, + config.hidden_size, + ); + + let token_type_embeddings = if config.type_vocab_size > 0 { + Some(Embedding::new( + vb.pp("embeddings.token_type_embeddings") + .get((config.type_vocab_size, config.hidden_size), "weight")?, + config.hidden_size, + )) + } else { + None + }; + + let layers = (0..config.num_hidden_layers) + .map(|index| GTELayer::load(vb.pp(format!("encoder.layer.{index}")), config)) + .collect::>>()?; + + let embeddings_norm = LayerNorm::load( + vb.pp("embeddings.LayerNorm"), + config.hidden_size, + config.layer_norm_eps, + )?; + + let inv_freqs = if let Some(RopeScaling::Ntk(NTKScaling { factor })) = config.rope_scaling { + let inv_freqs = candle_rotary::inv_freqs( + layers[0].attention.attention_head_size, + config.rope_theta * factor, + vb.device(), + )?; + let s = factor.powf(2.0 / layers[0].attention.attention_head_size as f32) as f64; + inv_freqs / s + } else { + candle_rotary::inv_freqs( + layers[0].attention.attention_head_size, + config.rope_theta, + vb.device(), + ) + }?; + + let (cos_cache, sin_cache) = + candle_rotary::cos_sin(config.max_position_embeddings, &inv_freqs, vb.dtype())?; + + Ok(Self { + word_embeddings, + token_type_embeddings, + layers, + embeddings_norm, + cos_cache, + sin_cache, + pool, + device: vb.device().clone(), + span: tracing::span!(tracing::Level::TRACE, "model"), + }) + } + + pub fn forward(&self, batch: Batch) -> Result<(Option, Option)> { + let _enter = self.span.enter(); + + let batch_size = batch.cumulative_seq_lengths.len() - 1; + let shape = batch.input_ids.len(); + + // Create Cuda tensors + let input_ids = Tensor::from_vec(batch.input_ids, shape, &self.device)?; + let token_type_ids = Tensor::from_vec(batch.token_type_ids, shape, &self.device)?; + let position_ids = Tensor::from_vec(batch.position_ids, shape, &self.device)?; + let cu_seqlens = Tensor::from_vec( + batch.cumulative_seq_lengths.clone(), + batch_size + 1, + &self.device, + )?; + + let word_embeddings = self.word_embeddings.forward(&input_ids)?; + let token_type_embeddings = self + .token_type_embeddings + .as_ref() + .map(|emb| emb.forward(&token_type_ids)) + .transpose()?; + + let mut hidden_states = self + .embeddings_norm + .forward(&word_embeddings, token_type_embeddings.as_ref())?; + + let cos = self.cos_cache.index_select(&position_ids, 0)?; + let sin = self.sin_cache.index_select(&position_ids, 0)?; + + for layer in &self.layers { + let h = layer.forward( + &hidden_states, + &cu_seqlens, + &cos, + &sin, + batch.max_length as usize, + )?; + hidden_states = h; + } + + let outputs = hidden_states; + + let has_pooling_requests = !batch.pooled_indices.is_empty(); + let has_raw_requests = !batch.raw_indices.is_empty(); + + let pooled_embeddings = if has_pooling_requests { + match self.pool { + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { + if batch_size > 1 { + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; + + // If raw_indices is empty, we don't need to do anything with + // the pooled_indices + if has_raw_requests { + // We need the pooled indices to select the correct cls indices + let pooled_indices = Tensor::from_vec( + batch.pooled_indices.clone(), + batch.pooled_indices.len(), + &self.device, + )?; + + // Only select indices that requires pooling + indices = indices.index_select(&pooled_indices, 0)? + } + + // Select tokens + Some(outputs.index_select(&indices, 0)?) + } else { + Some( + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)?, + ) + } + } + // Mean pooling + Pool::Mean => { + if batch_size > 1 { + // for each request that requires pooling + let results: Result> = batch + .pooled_indices + .into_iter() + .map(|i| { + let i = i as usize; + let start = batch.cumulative_seq_lengths[i]; + let len = batch.cumulative_seq_lengths[i + 1] - start; + + // Mean + let embeddings = outputs.narrow(0, start as usize, len as usize)?; + embeddings.sum_keepdim(0)? / (len as f64) + }) + .collect(); + + // Concatenate all results + Some(Tensor::cat(&results?, 0)?) + } else { + Some((outputs.sum_keepdim(0)? / (batch.max_length as f64))?) + } + } + Pool::Splade => { + unreachable!(); + } + } + } else { + None + }; + + let raw_embeddings = if has_raw_requests { + if batch_size > 1 && has_pooling_requests { + // Create indexing vector for the embeddings + let mut final_indices: Vec = Vec::with_capacity(shape); + for i in batch.raw_indices.into_iter() { + let i = i as usize; + // Get start/end token index of this specific member of the batch + let start = batch.cumulative_seq_lengths[i]; + let end = batch.cumulative_seq_lengths[i + 1]; + + for j in start..end { + // Add indices for the tokens of this specific member of the batch + final_indices.push(j); + } + } + + let final_indices_length = final_indices.len(); + let final_indices = + Tensor::from_vec(final_indices, final_indices_length, &self.device)?; + + // Select the tokens with final indices + Some(outputs.index_select(&final_indices, 0)?) + } else { + Some(outputs) + } + } else { + None + }; + + Ok((pooled_embeddings, raw_embeddings)) + } +} + +impl Model for FlashGTEModel { + fn is_padded(&self) -> bool { + false + } + fn embed(&self, batch: Batch) -> Result<(Option, Option)> { + self.forward(batch) + } +} diff --git a/backends/candle/src/models/flash_jina.rs b/backends/candle/src/models/flash_jina.rs index ebf2c292..83c5b0a4 100644 --- a/backends/candle/src/models/flash_jina.rs +++ b/backends/candle/src/models/flash_jina.rs @@ -1,14 +1,14 @@ use crate::alibi::alibi_head_slopes; use crate::flash_attn::flash_attn_varlen; use crate::layers::{HiddenAct, LayerNorm, Linear}; -use crate::models::bert::{BertConfig, PositionEmbeddingType}; -use crate::models::jina::BertEmbeddings; -use crate::models::Model; +use crate::models::bert::PositionEmbeddingType; +use crate::models::jina::JinaEmbeddings; +use crate::models::{BertConfig, Model}; use candle::{DType, Device, IndexOp, Result, Tensor}; use candle_nn::VarBuilder; use text_embeddings_backend_core::{Batch, ModelType, Pool}; -struct AlibiBertAttention { +struct JinaAttention { qkv_linear: Linear, dense: Linear, layer_norm: LayerNorm, @@ -22,7 +22,7 @@ struct AlibiBertAttention { span: tracing::Span, } -impl AlibiBertAttention { +impl JinaAttention { pub fn load(vb: VarBuilder, config: &BertConfig, alibi_slopes: Option) -> Result { let attention_head_size = config.hidden_size / config.num_attention_heads; let all_head_size = config.num_attention_heads * attention_head_size; @@ -105,6 +105,7 @@ impl AlibiBertAttention { max_s, self.softmax_scale, false, + None, )?; let attention = attention.flatten_from(candle::D::Minus2)?; @@ -116,7 +117,7 @@ impl AlibiBertAttention { } struct JinaBertLayer { - attention: AlibiBertAttention, + attention: JinaAttention, gated: Linear, output: Linear, layer_norm: LayerNorm, @@ -129,7 +130,7 @@ struct JinaBertLayer { impl JinaBertLayer { pub fn load(vb: VarBuilder, config: &BertConfig, alibi: Option) -> Result { - let attention = AlibiBertAttention::load(vb.pp("attention"), config, alibi)?; + let attention = JinaAttention::load(vb.pp("attention"), config, alibi)?; let gated_weight = vb .pp("mlp") @@ -173,14 +174,14 @@ impl JinaBertLayer { let residual = hidden_states.clone(); let hidden_states = self.gated.forward(&hidden_states)?; - let gated = hidden_states.i((.., 0..self.intermediate_size))?; + let gated = hidden_states.narrow(1, 0, self.intermediate_size)?; let gated = match self.act { HiddenAct::Gelu => gated.gelu(), HiddenAct::Relu => gated.relu(), HiddenAct::Swiglu => gated.silu(), }?; - let non_gated = hidden_states.i((.., self.intermediate_size..))?; + let non_gated = hidden_states.narrow(1, self.intermediate_size, self.intermediate_size)?; let hidden_states = (gated * non_gated)?; let hidden_states = self.output.forward(&hidden_states)?; @@ -190,12 +191,12 @@ impl JinaBertLayer { } } -struct BertEncoder { +struct JinaBertEncoder { layers: Vec, span: tracing::Span, } -impl BertEncoder { +impl JinaBertEncoder { pub fn load(vb: VarBuilder, config: &BertConfig, alibi: Option) -> Result { let layers = (0..config.num_hidden_layers) .map(|index| { @@ -204,7 +205,7 @@ impl BertEncoder { .collect::>>()?; let span = tracing::span!(tracing::Level::TRACE, "encoder"); - Ok(BertEncoder { layers, span }) + Ok(JinaBertEncoder { layers, span }) } fn forward(&self, hidden_states: &Tensor, cu_seqlens: &Tensor, max_s: usize) -> Result { @@ -222,8 +223,8 @@ impl BertEncoder { } pub struct FlashJinaBertModel { - embeddings: BertEmbeddings, - encoder: BertEncoder, + embeddings: JinaEmbeddings, + encoder: JinaBertEncoder, pool: Pool, pub device: Device, @@ -241,6 +242,7 @@ impl FlashJinaBertModel { ) } PositionEmbeddingType::Absolute => None, + _ => candle::bail!("not supported"), }; match vb.device() { @@ -265,14 +267,14 @@ impl FlashJinaBertModel { }; let (embeddings, encoder) = match ( - BertEmbeddings::load(vb.pp("embeddings"), config), - BertEncoder::load(vb.pp("encoder"), config, alibi.clone()), + JinaEmbeddings::load(vb.pp("embeddings"), config), + JinaBertEncoder::load(vb.pp("encoder"), config, alibi.clone()), ) { (Ok(embeddings), Ok(encoder)) => (embeddings, encoder), (Err(err), _) | (_, Err(err)) => { if let (Ok(embeddings), Ok(encoder)) = ( - BertEmbeddings::load(vb.pp("bert.embeddings"), config), - BertEncoder::load(vb.pp("bert.encoder"), config, alibi.clone()), + JinaEmbeddings::load(vb.pp("bert.embeddings"), config), + JinaBertEncoder::load(vb.pp("bert.encoder"), config, alibi.clone()), ) { (embeddings, encoder) } else { @@ -319,11 +321,18 @@ impl FlashJinaBertModel { let pooled_embeddings = if has_pooling_requests { match self.pool { - // CLS pooling - Pool::Cls => { + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { if batch_size > 1 { - // Get the indices of the cls tokens from cu_seqlens - let mut cls_indices = cu_seqlens.narrow(0, 0, batch_size)?; + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; // If raw_indices is empty, we don't need to do anything with // the pooled_indices @@ -336,13 +345,22 @@ impl FlashJinaBertModel { )?; // Only select indices that requires pooling - cls_indices = cls_indices.index_select(&pooled_indices, 0)? + indices = indices.index_select(&pooled_indices, 0)? } - // Select cls tokens - Some(outputs.index_select(&cls_indices, 0)?) + // Select tokens + Some(outputs.index_select(&indices, 0)?) } else { - Some(outputs.i(0)?) + Some( + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)?, + ) } } // Mean pooling diff --git a/backends/candle/src/models/flash_jina_code.rs b/backends/candle/src/models/flash_jina_code.rs new file mode 100644 index 00000000..56ab1976 --- /dev/null +++ b/backends/candle/src/models/flash_jina_code.rs @@ -0,0 +1,491 @@ +use crate::alibi::alibi_head_slopes; +use crate::flash_attn::flash_attn_varlen; +use crate::layers::{HiddenAct, LayerNorm, Linear}; +use crate::models::bert::PositionEmbeddingType; +use crate::models::jina::JinaEmbeddings; +use crate::models::{BertConfig, Model}; +use candle::{DType, Device, IndexOp, Result, Tensor}; +use candle_nn::VarBuilder; +use text_embeddings_backend_core::{Batch, ModelType, Pool}; + +struct JinaCodeAttention { + qkv_linear: Linear, + + dense: Linear, + layer_norm_q: LayerNorm, + layer_norm_k: LayerNorm, + layer_norm_out: LayerNorm, + + alibi_slopes: Option, + + num_attention_heads: usize, + attention_head_size: usize, + softmax_scale: f32, + + span: tracing::Span, +} + +impl JinaCodeAttention { + pub fn load(vb: VarBuilder, config: &BertConfig, alibi_slopes: Option) -> Result { + let attention_head_size = config.hidden_size / config.num_attention_heads; + let all_head_size = config.num_attention_heads * attention_head_size; + let hidden_size = config.hidden_size; + + let query_weight = vb + .pp("self.query") + .get((all_head_size, hidden_size), "weight")?; + let query_bias = vb.pp("self.query").get(all_head_size, "bias")?; + let key_weight = vb + .pp("self.key") + .get((all_head_size, hidden_size), "weight")?; + let key_bias = vb.pp("self.key").get(all_head_size, "bias")?; + let value_weight = vb + .pp("self.value") + .get((all_head_size, hidden_size), "weight")?; + let value_bias = vb.pp("self.value").get(all_head_size, "bias")?; + + let qkv_weight = Tensor::cat(&[&query_weight, &key_weight, &value_weight], 0)?; + let qkv_bias = Tensor::cat(&[&query_bias, &key_bias, &value_bias], 0)?; + + let qkv_linear = Linear::new(qkv_weight, Some(qkv_bias), None); + + let layer_norm_q = LayerNorm::load( + vb.pp("self").pp("layer_norm_q"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + let layer_norm_k = LayerNorm::load( + vb.pp("self").pp("layer_norm_k"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + + let dense_weight = vb + .pp("output") + .pp("dense") + .get((hidden_size, hidden_size), "weight")?; + let dense_bias = vb.pp("output").pp("dense").get(hidden_size, "bias")?; + + let dense = Linear::new(dense_weight, Some(dense_bias), None); + + let layer_norm_out = LayerNorm::load( + vb.pp("output").pp("LayerNorm"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + + let softmax_scale = (1. / (attention_head_size as f64).sqrt()) as f32; + + Ok(Self { + qkv_linear, + dense, + layer_norm_q, + layer_norm_k, + layer_norm_out, + alibi_slopes, + num_attention_heads: config.num_attention_heads, + attention_head_size, + softmax_scale, + span: tracing::span!(tracing::Level::TRACE, "attention"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + cu_seqlens: &Tensor, + max_s: usize, + ) -> Result { + let _enter = self.span.enter(); + + let residual = hidden_states.clone(); + + let qkv = self.qkv_linear.forward(hidden_states)?; + + let mut new_qkv_shape = qkv.dims().to_vec(); + new_qkv_shape.pop(); + new_qkv_shape.push(self.num_attention_heads * 3); + new_qkv_shape.push(self.attention_head_size); + + let qkv = qkv.reshape(new_qkv_shape.as_slice())?; + // Splits heads + let qkv = qkv.chunk(3, 1)?; + + // Flatten last dims again to go through the layer norm + let query_layer = &qkv[0].flatten_from(candle::D::Minus2)?; + let key_layer = &qkv[1].flatten_from(candle::D::Minus2)?; + + // Layer norm on q and k + let query_layer = self.layer_norm_q.forward(&query_layer, None)?; + let key_layer = self.layer_norm_k.forward(&key_layer, None)?; + + // Reshape back + let mut new_qk_shape = query_layer.dims().to_vec(); + new_qk_shape.pop(); + new_qk_shape.push(self.num_attention_heads); + new_qk_shape.push(self.attention_head_size); + + let query_layer = query_layer.reshape(new_qk_shape.as_slice())?; + let key_layer = key_layer.reshape(new_qk_shape.as_slice())?; + + let value_layer = &qkv[2]; + + let attention = flash_attn_varlen( + &query_layer, + &key_layer, + value_layer, + self.alibi_slopes.as_ref(), + cu_seqlens, + cu_seqlens, + max_s, + max_s, + self.softmax_scale, + false, + None, + )?; + let attention = attention.flatten_from(candle::D::Minus2)?; + + let hidden_states = self.dense.forward(&attention)?; + let hidden_states = self + .layer_norm_out + .forward(&hidden_states, Some(&residual))?; + + Ok(hidden_states) + } +} + +struct JinaCodeBertLayer { + attention: JinaCodeAttention, + up_gated_layer: Linear, + down_layer: Linear, + layer_norm_1: LayerNorm, + layer_norm_2: LayerNorm, + act: HiddenAct, + + intermediate_size: usize, + + span: tracing::Span, +} + +impl JinaCodeBertLayer { + pub fn load(vb: VarBuilder, config: &BertConfig, alibi: Option) -> Result { + let attention = JinaCodeAttention::load(vb.pp("attention"), config, alibi)?; + + let up_gated_weight = vb + .pp("mlp") + .pp("up_gated_layer") + .get((config.intermediate_size * 2, config.hidden_size), "weight")?; + let up_gated_layer = Linear::new(up_gated_weight, None, None); + + let down_weight = vb + .pp("mlp") + .pp("down_layer") + .get((config.hidden_size, config.intermediate_size), "weight")?; + let down_bias = vb + .pp("mlp") + .pp("down_layer") + .get(config.hidden_size, "bias")?; + let down_layer = Linear::new(down_weight, Some(down_bias), None); + + let layer_norm_1 = LayerNorm::load( + vb.pp("layer_norm_1"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + let layer_norm_2 = LayerNorm::load( + vb.pp("layer_norm_2"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + + Ok(Self { + attention, + up_gated_layer, + down_layer, + layer_norm_1, + layer_norm_2, + act: config.hidden_act.clone(), + intermediate_size: config.intermediate_size, + span: tracing::span!(tracing::Level::TRACE, "layer"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + cu_seqlens: &Tensor, + max_s: usize, + ) -> Result { + let _enter = self.span.enter(); + + let residual = hidden_states.clone(); + let hidden_states = self.attention.forward(hidden_states, cu_seqlens, max_s)?; + + // Pre-MLP LayerNorm + let hidden_states = self.layer_norm_1.forward(&hidden_states, Some(&residual))?; + + // MLP block + let residual = hidden_states.clone(); + let hidden_states = self.up_gated_layer.forward(&hidden_states)?; + let non_gated = hidden_states.narrow(1, 0, self.intermediate_size)?; + let gated = hidden_states.narrow(1, self.intermediate_size, self.intermediate_size)?; + let gated = match self.act { + HiddenAct::Gelu => gated.gelu(), + HiddenAct::Relu => gated.relu(), + HiddenAct::Swiglu => gated.silu(), + }?; + let hidden_states = (non_gated * gated)?; + let hidden_states = self.down_layer.forward(&hidden_states)?; + + // Post-MLP LayerNorm + let hidden_states = self.layer_norm_2.forward(&hidden_states, Some(&residual))?; + + Ok(hidden_states) + } +} + +struct JinaCodeBertEncoder { + layers: Vec, + span: tracing::Span, +} + +impl JinaCodeBertEncoder { + pub fn load(vb: VarBuilder, config: &BertConfig, alibi: Option) -> Result { + let layers = (0..config.num_hidden_layers) + .map(|index| { + JinaCodeBertLayer::load(vb.pp(format!("layer.{index}")), config, alibi.clone()) + }) + .collect::>>()?; + let span = tracing::span!(tracing::Level::TRACE, "encoder"); + + Ok(JinaCodeBertEncoder { layers, span }) + } + + fn forward(&self, hidden_states: &Tensor, cu_seqlens: &Tensor, max_s: usize) -> Result { + let _enter = self.span.enter(); + + let mut hidden_states = hidden_states.clone(); + + // Use a loop rather than a fold as it's easier to modify when adding debug/... + for layer in self.layers.iter() { + hidden_states = layer.forward(&hidden_states, cu_seqlens, max_s)? + } + + Ok(hidden_states) + } +} + +pub struct FlashJinaCodeBertModel { + embeddings: JinaEmbeddings, + encoder: JinaCodeBertEncoder, + pool: Pool, + pub device: Device, + + span: tracing::Span, +} + +impl FlashJinaCodeBertModel { + pub fn load(vb: VarBuilder, config: &BertConfig, model_type: ModelType) -> Result { + let alibi = match config.position_embedding_type { + PositionEmbeddingType::Alibi => { + let alibi_slopes = alibi_head_slopes(config.num_attention_heads); + Some( + Tensor::from_vec(alibi_slopes, config.num_attention_heads, vb.device())? + .to_dtype(DType::F32)?, + ) + } + PositionEmbeddingType::Absolute => None, + _ => candle::bail!("not supported"), + }; + + match vb.device() { + Device::Cuda(_) => {} + _ => candle::bail!("FlashJinaCodeBertModel requires Cuda"), + } + + if vb.dtype() != DType::F16 { + candle::bail!("FlashJinaCodeBertModel requires DType::F16") + } + + let pool = match model_type { + ModelType::Classifier => { + candle::bail!("`classifier` model type is not supported for Jina Code") + } + ModelType::Embedding(pool) => { + if pool == Pool::Splade { + candle::bail!("`splade` is not supported for Jina Code") + } + pool + } + }; + + let (embeddings, encoder) = match ( + JinaEmbeddings::load(vb.pp("embeddings"), config), + JinaCodeBertEncoder::load(vb.pp("encoder"), config, alibi.clone()), + ) { + (Ok(embeddings), Ok(encoder)) => (embeddings, encoder), + (Err(err), _) | (_, Err(err)) => { + if let (Ok(embeddings), Ok(encoder)) = ( + JinaEmbeddings::load(vb.pp("bert.embeddings"), config), + JinaCodeBertEncoder::load(vb.pp("bert.encoder"), config, alibi.clone()), + ) { + (embeddings, encoder) + } else { + return Err(err); + } + } + }; + + Ok(Self { + embeddings, + encoder, + pool, + device: vb.device().clone(), + span: tracing::span!(tracing::Level::TRACE, "model"), + }) + } + + pub fn forward(&self, batch: Batch) -> Result<(Option, Option)> { + let _enter = self.span.enter(); + + let batch_size = batch.len(); + let shape = batch.input_ids.len(); + + // Create Cuda tensors + let input_ids = Tensor::from_vec(batch.input_ids, shape, &self.device)?; + let type_ids = Tensor::from_vec(batch.token_type_ids, shape, &self.device)?; + let position_ids = Tensor::from_vec(batch.position_ids, shape, &self.device)?; + let cu_seqlens = Tensor::from_vec( + batch.cumulative_seq_lengths.clone(), + batch_size + 1, + &self.device, + )?; + + let embedding_output = self + .embeddings + .forward(&input_ids, &type_ids, &position_ids)?; + + let outputs = + self.encoder + .forward(&embedding_output, &cu_seqlens, batch.max_length as usize)?; + + let has_pooling_requests = !batch.pooled_indices.is_empty(); + let has_raw_requests = !batch.raw_indices.is_empty(); + + let pooled_embeddings = if has_pooling_requests { + match self.pool { + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { + if batch_size > 1 { + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; + + // If raw_indices is empty, we don't need to do anything with + // the pooled_indices + if has_raw_requests { + // We need the pooled indices to select the correct cls indices + let pooled_indices = Tensor::from_vec( + batch.pooled_indices.clone(), + batch.pooled_indices.len(), + &self.device, + )?; + + // Only select indices that requires pooling + indices = indices.index_select(&pooled_indices, 0)? + } + + // Select tokens + Some(outputs.index_select(&indices, 0)?) + } else { + Some( + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)?, + ) + } + } + // Mean pooling + Pool::Mean => { + if batch_size > 1 { + // for each request that requires pooling + let results: Result> = batch + .pooled_indices + .into_iter() + .map(|i| { + let i = i as usize; + let start = batch.cumulative_seq_lengths[i]; + let len = batch.cumulative_seq_lengths[i + 1] - start; + + // Mean + let embeddings = outputs.narrow(0, start as usize, len as usize)?; + embeddings.sum_keepdim(0)? / (len as f64) + }) + .collect(); + + // Concatenate all results + Some(Tensor::cat(&results?, 0)?) + } else { + Some((outputs.sum_keepdim(0)? / (batch.max_length as f64))?) + } + } + Pool::Splade => { + unreachable!(); + } + } + } else { + None + }; + + let raw_embeddings = if has_raw_requests { + if batch_size > 1 && has_pooling_requests { + // Create indexing vector for the embeddings + let mut final_indices: Vec = Vec::with_capacity(shape); + for i in batch.raw_indices.into_iter() { + let i = i as usize; + // Get start/end token index of this specific member of the batch + let start = batch.cumulative_seq_lengths[i]; + let end = batch.cumulative_seq_lengths[i + 1]; + + for j in start..end { + // Add indices for the tokens of this specific member of the batch + final_indices.push(j); + } + } + + let final_indices_length = final_indices.len(); + let final_indices = + Tensor::from_vec(final_indices, final_indices_length, &self.device)?; + + // Select the tokens with final indices + Some(outputs.index_select(&final_indices, 0)?) + } else { + Some(outputs) + } + } else { + None + }; + + Ok((pooled_embeddings, raw_embeddings)) + } +} + +impl Model for FlashJinaCodeBertModel { + fn is_padded(&self) -> bool { + false + } + fn embed(&self, batch: Batch) -> Result<(Option, Option)> { + self.forward(batch) + } +} diff --git a/backends/candle/src/models/flash_mistral.rs b/backends/candle/src/models/flash_mistral.rs new file mode 100644 index 00000000..eb94c913 --- /dev/null +++ b/backends/candle/src/models/flash_mistral.rs @@ -0,0 +1,445 @@ +use crate::flash_attn::flash_attn_varlen; +use crate::layers::{HiddenAct, Linear, RMSNorm}; +use crate::models::{MistralConfig, Model}; +use candle::{DType, Device, IndexOp, Result, Tensor}; +use candle_nn::{Embedding, Module, VarBuilder}; +use text_embeddings_backend_core::{Batch, ModelType, Pool}; + +struct MistralAttention { + qkv_linear: Linear, + o_proj: Linear, + + window_size_left: Option, + + num_attention_heads: usize, + num_key_value_heads: usize, + attention_head_size: usize, + + softmax_scale: f32, + + span: tracing::Span, +} + +impl MistralAttention { + pub fn load(vb: VarBuilder, config: &MistralConfig) -> Result { + let window_size_left = config.sliding_window; + let num_attention_heads = config.num_attention_heads; + let attention_head_size = config.hidden_size / config.num_attention_heads; + let num_key_value_heads = config.num_key_value_heads; + let hidden_size = config.hidden_size; + + let query_weight = vb.pp("q_proj").get((hidden_size, hidden_size), "weight")?; + + let key_weight = vb.pp("k_proj").get( + (num_key_value_heads * attention_head_size, hidden_size), + "weight", + )?; + + let value_weight = vb.pp("v_proj").get( + (num_key_value_heads * attention_head_size, hidden_size), + "weight", + )?; + + let qkv_weight = Tensor::cat(&[&query_weight, &key_weight, &value_weight], 0)?; + let qkv_linear = Linear::new(qkv_weight, None, None); + + let o_proj_weight = vb.pp("o_proj").get((hidden_size, hidden_size), "weight")?; + + let o_proj = Linear::new(o_proj_weight, None, None); + + let softmax_scale = (1. / (attention_head_size as f64).sqrt()) as f32; + + Ok(Self { + qkv_linear, + o_proj, + window_size_left, + num_attention_heads, + num_key_value_heads, + attention_head_size, + softmax_scale, + span: tracing::span!(tracing::Level::TRACE, "attention"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + cu_seqlens: &Tensor, + cos: &Tensor, + sin: &Tensor, + max_s: usize, + ) -> Result { + let _enter = self.span.enter(); + + let qkv = self.qkv_linear.forward(hidden_states)?; + + // Reshape to [tokens, heads, head_size] + let mut new_qkv_shape = qkv.dims().to_vec(); + new_qkv_shape.pop(); + new_qkv_shape.push(self.num_attention_heads + 2 * self.num_key_value_heads); + new_qkv_shape.push(self.attention_head_size); + + let qkv = qkv.reshape(new_qkv_shape)?; + + // Split qkv tensor + let q = qkv.narrow(1, 0, self.num_attention_heads)?; + let k = qkv.narrow(1, self.num_attention_heads, self.num_key_value_heads)?; + let v = qkv.narrow( + 1, + self.num_attention_heads + self.num_key_value_heads, + self.num_key_value_heads, + )?; + + candle_rotary::apply_rotary_inplace(&q, &k, &cos, &sin, true)?; + + let attention = flash_attn_varlen( + &q, + &k, + &v, + None, + cu_seqlens, + cu_seqlens, + max_s, + max_s, + self.softmax_scale, + true, + self.window_size_left, + )?; + let attention = attention.flatten_from(candle::D::Minus2)?; + + self.o_proj.forward(&attention) + } +} + +struct MistralMLP { + gate_up_proj: Linear, + down_proj: Linear, + + act: HiddenAct, + intermediate_size: usize, + + span: tracing::Span, +} + +impl MistralMLP { + pub fn load(vb: VarBuilder, config: &MistralConfig) -> Result { + let intermediate_size = config.intermediate_size; + + let gate_proj_weight = vb + .pp("gate_proj") + .get((intermediate_size, config.hidden_size), "weight")?; + + let up_proj_weight = vb + .pp("up_proj") + .get((intermediate_size, config.hidden_size), "weight")?; + + let gate_up_proj_weight = Tensor::cat(&[&gate_proj_weight, &up_proj_weight], 0)?; + let gate_up_proj = Linear::new(gate_up_proj_weight, None, None); + + let down_proj_weight = vb + .pp("down_proj") + .get((config.hidden_size, intermediate_size), "weight")?; + let down_proj = Linear::new(down_proj_weight, None, None); + + Ok(Self { + gate_up_proj, + down_proj, + intermediate_size, + act: config.hidden_act.clone(), + span: tracing::span!(tracing::Level::TRACE, "mlp"), + }) + } + + pub fn forward(&self, hidden_states: &Tensor) -> Result { + let _enter = self.span.enter(); + + let gate_up_states = self.gate_up_proj.forward(hidden_states)?; + let gate_states = gate_up_states.narrow(1, 0, self.intermediate_size)?; + let up_states = gate_up_states.narrow(1, self.intermediate_size, self.intermediate_size)?; + + let gate_states = match self.act { + HiddenAct::Gelu => gate_states.gelu(), + HiddenAct::Relu => gate_states.relu(), + HiddenAct::Swiglu => gate_states.silu(), + }?; + let r = self.down_proj.forward(&(gate_states * up_states)?); + r + } +} + +struct MistralLayer { + attention: MistralAttention, + mlp: MistralMLP, + input_layer_norm: RMSNorm, + post_attention_layer_norm: RMSNorm, + + span: tracing::Span, +} + +impl MistralLayer { + pub fn load(vb: VarBuilder, config: &MistralConfig) -> Result { + let attention = MistralAttention::load(vb.pp("self_attn"), config)?; + let mlp = MistralMLP::load(vb.pp("mlp"), config)?; + + let input_layer_norm = RMSNorm::load( + vb.pp("input_layernorm"), + config.hidden_size, + config.rms_norm_eps, + )?; + let post_attention_layer_norm = RMSNorm::load( + vb.pp("post_attention_layernorm"), + config.hidden_size, + config.rms_norm_eps, + )?; + + Ok(Self { + attention, + mlp, + input_layer_norm, + post_attention_layer_norm, + span: tracing::span!(tracing::Level::TRACE, "layer"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + residual: Option<&Tensor>, + cu_seqlens: &Tensor, + cos: &Tensor, + sin: &Tensor, + max_s: usize, + ) -> Result<(Tensor, Tensor)> { + let _enter = self.span.enter(); + + let (normed_hidden_states, res) = self.input_layer_norm.forward(hidden_states, residual)?; + let attn_output = + self.attention + .forward(&normed_hidden_states, cu_seqlens, cos, sin, max_s)?; + let (normed_attn_res_output, attn_res) = self + .post_attention_layer_norm + .forward(&attn_output, Some(&res))?; + let mlp_output = self.mlp.forward(&normed_attn_res_output)?; + + Ok((mlp_output, attn_res)) + } +} + +pub struct FlashMistralModel { + embeddings: Embedding, + layers: Vec, + norm: RMSNorm, + cos_cache: Tensor, + sin_cache: Tensor, + pool: Pool, + pub device: Device, + + span: tracing::Span, +} + +impl FlashMistralModel { + pub fn load(vb: VarBuilder, config: &MistralConfig, model_type: ModelType) -> Result { + match vb.device() { + Device::Cuda(_) => {} + _ => candle::bail!("FlashMistral requires Cuda"), + } + + if vb.dtype() != DType::F16 { + candle::bail!("FlashMistral requires DType::F16") + } + + let pool = match model_type { + ModelType::Classifier => { + candle::bail!("`classifier` model type is not supported for Mistral") + } + ModelType::Embedding(pool) => pool, + }; + + let embeddings = Embedding::new( + vb.pp("embed_tokens") + .get((config.vocab_size, config.hidden_size), "weight")?, + config.hidden_size, + ); + + let layers = (0..config.num_hidden_layers) + .map(|index| MistralLayer::load(vb.pp(format!("layers.{index}")), config)) + .collect::>>()?; + + let norm = RMSNorm::load(vb.pp("norm"), config.hidden_size, config.rms_norm_eps)?; + + let inv_freqs = candle_rotary::inv_freqs( + layers[0].attention.attention_head_size, + config.rope_theta, + vb.device(), + )?; + let (cos_cache, sin_cache) = + candle_rotary::cos_sin(config.max_position_embeddings, &inv_freqs, vb.dtype())?; + + Ok(Self { + embeddings, + layers, + norm, + cos_cache, + sin_cache, + pool, + device: vb.device().clone(), + span: tracing::span!(tracing::Level::TRACE, "model"), + }) + } + + pub fn forward(&self, batch: Batch) -> Result<(Option, Option)> { + let _enter = self.span.enter(); + + let batch_size = batch.cumulative_seq_lengths.len() - 1; + let shape = batch.input_ids.len(); + + // Create Cuda tensors + let input_ids = Tensor::from_vec(batch.input_ids, shape, &self.device)?; + let position_ids = Tensor::from_vec(batch.position_ids, shape, &self.device)?; + let cu_seqlens = Tensor::from_vec( + batch.cumulative_seq_lengths.clone(), + batch_size + 1, + &self.device, + )?; + + let mut hidden_states = self.embeddings.forward(&input_ids)?; + + let cos = self.cos_cache.index_select(&position_ids, 0)?; + let sin = self.sin_cache.index_select(&position_ids, 0)?; + + let mut residual = None; + for layer in &self.layers { + let (h, r) = layer.forward( + &hidden_states, + residual.as_ref(), + &cu_seqlens, + &cos, + &sin, + batch.max_length as usize, + )?; + hidden_states = h; + residual = Some(r); + } + + let (outputs, _) = self.norm.forward(&hidden_states, residual.as_ref())?; + + let has_pooling_requests = !batch.pooled_indices.is_empty(); + let has_raw_requests = !batch.raw_indices.is_empty(); + + let pooled_embeddings = if has_pooling_requests { + match self.pool { + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { + if batch_size > 1 { + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; + + // If raw_indices is empty, we don't need to do anything with + // the pooled_indices + if has_raw_requests { + // We need the pooled indices to select the correct cls indices + let pooled_indices = Tensor::from_vec( + batch.pooled_indices.clone(), + batch.pooled_indices.len(), + &self.device, + )?; + + // Only select indices that requires pooling + indices = indices.index_select(&pooled_indices, 0)? + } + + // Select tokens + Some(outputs.index_select(&indices, 0)?) + } else { + Some( + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)?, + ) + } + } + // Mean pooling + Pool::Mean => { + if batch_size > 1 { + // for each request that requires pooling + let results: Result> = batch + .pooled_indices + .into_iter() + .map(|i| { + let i = i as usize; + let start = batch.cumulative_seq_lengths[i]; + let len = batch.cumulative_seq_lengths[i + 1] - start; + + // Mean + let embeddings = outputs.narrow(0, start as usize, len as usize)?; + embeddings.sum_keepdim(0)? / (len as f64) + }) + .collect(); + + // Concatenate all results + Some(Tensor::cat(&results?, 0)?) + } else { + Some((outputs.sum_keepdim(0)? / (batch.max_length as f64))?) + } + } + Pool::Splade => { + unreachable!(); + } + } + } else { + None + }; + + let raw_embeddings = if has_raw_requests { + if batch_size > 1 && has_pooling_requests { + // Create indexing vector for the embeddings + let mut final_indices: Vec = Vec::with_capacity(shape); + for i in batch.raw_indices.into_iter() { + let i = i as usize; + // Get start/end token index of this specific member of the batch + let start = batch.cumulative_seq_lengths[i]; + let end = batch.cumulative_seq_lengths[i + 1]; + + for j in start..end { + // Add indices for the tokens of this specific member of the batch + final_indices.push(j); + } + } + + let final_indices_length = final_indices.len(); + let final_indices = + Tensor::from_vec(final_indices, final_indices_length, &self.device)?; + + // Select the tokens with final indices + Some(outputs.index_select(&final_indices, 0)?) + } else { + Some(outputs) + } + } else { + None + }; + + Ok((pooled_embeddings, raw_embeddings)) + } +} + +impl Model for FlashMistralModel { + fn is_padded(&self) -> bool { + false + } + fn embed(&self, batch: Batch) -> Result<(Option, Option)> { + self.forward(batch) + } +} diff --git a/backends/candle/src/models/flash_nomic.rs b/backends/candle/src/models/flash_nomic.rs index 12eff0f1..7f558b9e 100644 --- a/backends/candle/src/models/flash_nomic.rs +++ b/backends/candle/src/models/flash_nomic.rs @@ -81,6 +81,7 @@ impl NomicAttention { max_s, self.softmax_scale, false, + None, )?; let attention = attention.flatten_from(D::Minus2)?; @@ -304,11 +305,18 @@ impl FlashNomicBertModel { let pooled_embeddings = if has_pooling_requests { match self.pool { - // CLS pooling - Pool::Cls => { + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { if batch_size > 1 { - // Get the indices of the cls tokens from cu_seqlens - let mut cls_indices = cu_seqlens.narrow(0, 0, batch_size)?; + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; // If raw_indices is empty, we don't need to do anything with // the pooled_indices @@ -321,13 +329,22 @@ impl FlashNomicBertModel { )?; // Only select indices that requires pooling - cls_indices = cls_indices.index_select(&pooled_indices, 0)? + indices = indices.index_select(&pooled_indices, 0)? } - // Select cls tokens - Some(outputs.index_select(&cls_indices, 0)?) + // Select tokens + Some(outputs.index_select(&indices, 0)?) } else { - Some(outputs.i(0)?) + Some( + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)?, + ) } } // Mean pooling diff --git a/backends/candle/src/models/flash_qwen2.rs b/backends/candle/src/models/flash_qwen2.rs new file mode 100644 index 00000000..4dba7868 --- /dev/null +++ b/backends/candle/src/models/flash_qwen2.rs @@ -0,0 +1,455 @@ +use crate::flash_attn::flash_attn_varlen; +use crate::layers::{HiddenAct, Linear, RMSNorm}; +use crate::models::{Model, Qwen2Config}; +use candle::{DType, Device, IndexOp, Result, Tensor}; +use candle_nn::{Embedding, Module, VarBuilder}; +use text_embeddings_backend_core::{Batch, ModelType, Pool}; + +struct Qwen2Attention { + qkv_linear: Linear, + o_proj: Linear, + + num_attention_heads: usize, + num_key_value_heads: usize, + attention_head_size: usize, + + softmax_scale: f32, + + span: tracing::Span, +} + +impl Qwen2Attention { + pub fn load(vb: VarBuilder, config: &Qwen2Config) -> Result { + if config.use_sliding_window { + candle::bail!("Sliding window is not supported"); + } + + let num_attention_heads = config.num_attention_heads; + let attention_head_size = config.hidden_size / config.num_attention_heads; + let num_key_value_heads = config.num_key_value_heads; + let hidden_size = config.hidden_size; + + let query_weight = vb.pp("q_proj").get((hidden_size, hidden_size), "weight")?; + let query_bias = vb.pp("q_proj").get(hidden_size, "bias")?; + + let key_weight = vb.pp("k_proj").get( + (num_key_value_heads * attention_head_size, hidden_size), + "weight", + )?; + let key_bias = vb + .pp("k_proj") + .get(num_key_value_heads * attention_head_size, "bias")?; + + let value_weight = vb.pp("v_proj").get( + (num_key_value_heads * attention_head_size, hidden_size), + "weight", + )?; + let value_bias = vb + .pp("v_proj") + .get(num_key_value_heads * attention_head_size, "bias")?; + + let qkv_weight = Tensor::cat(&[&query_weight, &key_weight, &value_weight], 0)?; + let qkv_bias = Tensor::cat(&[&query_bias, &key_bias, &value_bias], 0)?; + let qkv_linear = Linear::new(qkv_weight, Some(qkv_bias), None); + + let o_proj_weight = vb.pp("o_proj").get((hidden_size, hidden_size), "weight")?; + + let o_proj = Linear::new(o_proj_weight, None, None); + + let softmax_scale = (1. / (attention_head_size as f64).sqrt()) as f32; + + Ok(Self { + qkv_linear, + o_proj, + num_attention_heads, + num_key_value_heads, + attention_head_size, + softmax_scale, + span: tracing::span!(tracing::Level::TRACE, "attention"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + cu_seqlens: &Tensor, + cos: &Tensor, + sin: &Tensor, + max_s: usize, + ) -> Result { + let _enter = self.span.enter(); + + let qkv = self.qkv_linear.forward(hidden_states)?; + + // Reshape to [tokens, heads, head_size] + let mut new_qkv_shape = qkv.dims().to_vec(); + new_qkv_shape.pop(); + new_qkv_shape.push(self.num_attention_heads + 2 * self.num_key_value_heads); + new_qkv_shape.push(self.attention_head_size); + + let qkv = qkv.reshape(new_qkv_shape)?; + + // Split qkv tensor + let q = qkv.narrow(1, 0, self.num_attention_heads)?; + let k = qkv.narrow(1, self.num_attention_heads, self.num_key_value_heads)?; + let v = qkv.narrow( + 1, + self.num_attention_heads + self.num_key_value_heads, + self.num_key_value_heads, + )?; + + candle_rotary::apply_rotary_inplace(&q, &k, &cos, &sin, true)?; + + let attention = flash_attn_varlen( + &q, + &k, + &v, + None, + cu_seqlens, + cu_seqlens, + max_s, + max_s, + self.softmax_scale, + false, + None, + )?; + let attention = attention.flatten_from(candle::D::Minus2)?; + + self.o_proj.forward(&attention) + } +} + +struct Qwen2MLP { + gate_up_proj: Linear, + down_proj: Linear, + + act: HiddenAct, + intermediate_size: usize, + + span: tracing::Span, +} + +impl Qwen2MLP { + pub fn load(vb: VarBuilder, config: &Qwen2Config) -> Result { + let intermediate_size = config.intermediate_size; + + let gate_proj_weight = vb + .pp("gate_proj") + .get((intermediate_size, config.hidden_size), "weight")?; + + let up_proj_weight = vb + .pp("up_proj") + .get((intermediate_size, config.hidden_size), "weight")?; + + let gate_up_proj_weight = Tensor::cat(&[&gate_proj_weight, &up_proj_weight], 0)?; + let gate_up_proj = Linear::new(gate_up_proj_weight, None, None); + + let down_proj_weight = vb + .pp("down_proj") + .get((config.hidden_size, intermediate_size), "weight")?; + let down_proj = Linear::new(down_proj_weight, None, None); + + Ok(Self { + gate_up_proj, + down_proj, + intermediate_size, + act: config.hidden_act.clone(), + span: tracing::span!(tracing::Level::TRACE, "mlp"), + }) + } + + pub fn forward(&self, hidden_states: &Tensor) -> Result { + let _enter = self.span.enter(); + + let gate_up_states = self.gate_up_proj.forward(hidden_states)?; + let gate_states = gate_up_states.narrow(1, 0, self.intermediate_size)?; + let up_states = gate_up_states.narrow(1, self.intermediate_size, self.intermediate_size)?; + + let gate_states = match self.act { + HiddenAct::Gelu => gate_states.gelu(), + HiddenAct::Relu => gate_states.relu(), + HiddenAct::Swiglu => gate_states.silu(), + }?; + let r = self.down_proj.forward(&(gate_states * up_states)?); + r + } +} + +struct Qwen2Layer { + attention: Qwen2Attention, + mlp: Qwen2MLP, + input_layer_norm: RMSNorm, + post_attention_layer_norm: RMSNorm, + + span: tracing::Span, +} + +impl Qwen2Layer { + pub fn load(vb: VarBuilder, config: &Qwen2Config) -> Result { + let attention = Qwen2Attention::load(vb.pp("self_attn"), config)?; + let mlp = Qwen2MLP::load(vb.pp("mlp"), config)?; + + let input_layer_norm = RMSNorm::load( + vb.pp("input_layernorm"), + config.hidden_size, + config.rms_norm_eps, + )?; + let post_attention_layer_norm = RMSNorm::load( + vb.pp("post_attention_layernorm"), + config.hidden_size, + config.rms_norm_eps, + )?; + + Ok(Self { + attention, + mlp, + input_layer_norm, + post_attention_layer_norm, + span: tracing::span!(tracing::Level::TRACE, "layer"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + residual: Option<&Tensor>, + cu_seqlens: &Tensor, + cos: &Tensor, + sin: &Tensor, + max_s: usize, + ) -> Result<(Tensor, Tensor)> { + let _enter = self.span.enter(); + + let (normed_hidden_states, res) = self.input_layer_norm.forward(hidden_states, residual)?; + let attn_output = + self.attention + .forward(&normed_hidden_states, cu_seqlens, cos, sin, max_s)?; + let (normed_attn_res_output, attn_res) = self + .post_attention_layer_norm + .forward(&attn_output, Some(&res))?; + let mlp_output = self.mlp.forward(&normed_attn_res_output)?; + + Ok((mlp_output, attn_res)) + } +} + +pub struct FlashQwen2Model { + embeddings: Embedding, + layers: Vec, + norm: RMSNorm, + cos_cache: Tensor, + sin_cache: Tensor, + pool: Pool, + pub device: Device, + + span: tracing::Span, +} + +impl FlashQwen2Model { + pub fn load(vb: VarBuilder, config: &Qwen2Config, model_type: ModelType) -> Result { + match vb.device() { + Device::Cuda(_) => {} + _ => candle::bail!("FlashQwen2 requires Cuda"), + } + + if vb.dtype() != DType::F16 { + candle::bail!("FlashQwen2 requires DType::F16") + } + + let pool = match model_type { + ModelType::Classifier => { + candle::bail!("`classifier` model type is not supported for Qwen2") + } + ModelType::Embedding(pool) => pool, + }; + + let vb = vb.pp("model"); + + let embeddings = Embedding::new( + vb.pp("embed_tokens") + .get((config.vocab_size, config.hidden_size), "weight")?, + config.hidden_size, + ); + + let layers = (0..config.num_hidden_layers) + .map(|index| Qwen2Layer::load(vb.pp(format!("layers.{index}")), config)) + .collect::>>()?; + + let norm = RMSNorm::load(vb.pp("norm"), config.hidden_size, config.rms_norm_eps)?; + + let inv_freqs = candle_rotary::inv_freqs( + layers[0].attention.attention_head_size, + config.rope_theta, + vb.device(), + )?; + let (cos_cache, sin_cache) = + candle_rotary::cos_sin(config.max_position_embeddings, &inv_freqs, vb.dtype())?; + + Ok(Self { + embeddings, + layers, + norm, + cos_cache, + sin_cache, + pool, + device: vb.device().clone(), + span: tracing::span!(tracing::Level::TRACE, "model"), + }) + } + + pub fn forward(&self, batch: Batch) -> Result<(Option, Option)> { + let _enter = self.span.enter(); + + let batch_size = batch.cumulative_seq_lengths.len() - 1; + let shape = batch.input_ids.len(); + + // Create Cuda tensors + let input_ids = Tensor::from_vec(batch.input_ids, shape, &self.device)?; + let position_ids = Tensor::from_vec(batch.position_ids, shape, &self.device)?; + let cu_seqlens = Tensor::from_vec( + batch.cumulative_seq_lengths.clone(), + batch_size + 1, + &self.device, + )?; + + let mut hidden_states = self.embeddings.forward(&input_ids)?; + + let cos = self.cos_cache.index_select(&position_ids, 0)?; + let sin = self.sin_cache.index_select(&position_ids, 0)?; + + let mut residual = None; + for layer in &self.layers { + let (h, r) = layer.forward( + &hidden_states, + residual.as_ref(), + &cu_seqlens, + &cos, + &sin, + batch.max_length as usize, + )?; + hidden_states = h; + residual = Some(r); + } + + let (outputs, _) = self.norm.forward(&hidden_states, residual.as_ref())?; + + let has_pooling_requests = !batch.pooled_indices.is_empty(); + let has_raw_requests = !batch.raw_indices.is_empty(); + + let pooled_embeddings = if has_pooling_requests { + match self.pool { + // CLS and LastToken pooling + Pool::Cls | Pool::LastToken => { + if batch_size > 1 { + // Get token indices form cu_seqlens + let mut indices = match self.pool { + Pool::Cls => cu_seqlens.narrow(0, 0, batch_size)?, + Pool::LastToken => { + let end = cu_seqlens.narrow(0, 1, batch_size)?; + (&end - &end.ones_like()?)? + } + _ => unreachable!(), + }; + + // If raw_indices is empty, we don't need to do anything with + // the pooled_indices + if has_raw_requests { + // We need the pooled indices to select the correct cls indices + let pooled_indices = Tensor::from_vec( + batch.pooled_indices.clone(), + batch.pooled_indices.len(), + &self.device, + )?; + + // Only select indices that requires pooling + indices = indices.index_select(&pooled_indices, 0)? + } + + // Select tokens + Some(outputs.index_select(&indices, 0)?) + } else { + Some( + match self.pool { + Pool::Cls => outputs.i(0)?, + Pool::LastToken => { + outputs.i(batch.cumulative_seq_lengths[1] as usize - 1)? + } + _ => unreachable!(), + } + .unsqueeze(0)?, + ) + } + } + // Mean pooling + Pool::Mean => { + if batch_size > 1 { + // for each request that requires pooling + let results: Result> = batch + .pooled_indices + .into_iter() + .map(|i| { + let i = i as usize; + let start = batch.cumulative_seq_lengths[i]; + let len = batch.cumulative_seq_lengths[i + 1] - start; + + // Mean + let embeddings = outputs.narrow(0, start as usize, len as usize)?; + embeddings.sum_keepdim(0)? / (len as f64) + }) + .collect(); + + // Concatenate all results + Some(Tensor::cat(&results?, 0)?) + } else { + Some((outputs.sum_keepdim(0)? / (batch.max_length as f64))?) + } + } + Pool::Splade => { + unreachable!(); + } + } + } else { + None + }; + + let raw_embeddings = if has_raw_requests { + if batch_size > 1 && has_pooling_requests { + // Create indexing vector for the embeddings + let mut final_indices: Vec = Vec::with_capacity(shape); + for i in batch.raw_indices.into_iter() { + let i = i as usize; + // Get start/end token index of this specific member of the batch + let start = batch.cumulative_seq_lengths[i]; + let end = batch.cumulative_seq_lengths[i + 1]; + + for j in start..end { + // Add indices for the tokens of this specific member of the batch + final_indices.push(j); + } + } + + let final_indices_length = final_indices.len(); + let final_indices = + Tensor::from_vec(final_indices, final_indices_length, &self.device)?; + + // Select the tokens with final indices + Some(outputs.index_select(&final_indices, 0)?) + } else { + Some(outputs) + } + } else { + None + }; + + Ok((pooled_embeddings, raw_embeddings)) + } +} + +impl Model for FlashQwen2Model { + fn is_padded(&self) -> bool { + false + } + fn embed(&self, batch: Batch) -> Result<(Option, Option)> { + self.forward(batch) + } +} diff --git a/backends/candle/src/models/gte.rs b/backends/candle/src/models/gte.rs new file mode 100644 index 00000000..e5e75638 --- /dev/null +++ b/backends/candle/src/models/gte.rs @@ -0,0 +1,35 @@ +use crate::layers::HiddenAct; +use crate::models::PositionEmbeddingType; +use serde::Deserialize; + +#[derive(Debug, Clone, PartialEq, Deserialize)] +pub struct NTKScaling { + pub factor: f32, +} + +#[derive(Debug, Clone, PartialEq, Deserialize)] +#[serde(tag = "type", rename_all = "kebab-case")] +pub enum RopeScaling { + Ntk(NTKScaling), +} + +#[derive(Debug, Clone, PartialEq, Deserialize)] +pub struct GTEConfig { + pub vocab_size: usize, + pub hidden_size: usize, + pub num_hidden_layers: usize, + pub num_attention_heads: usize, + pub intermediate_size: usize, + pub hidden_act: HiddenAct, + pub max_position_embeddings: usize, + pub type_vocab_size: usize, + pub layer_norm_type: String, + pub layer_norm_eps: f32, + pub position_embedding_type: PositionEmbeddingType, + pub rope_theta: f32, + pub rope_scaling: Option, + #[serde(default)] + pub logn_attention_scale: bool, + #[serde(default)] + pub logn_attention_clip1: bool, +} diff --git a/backends/candle/src/models/jina.rs b/backends/candle/src/models/jina.rs index 97bc7f96..ecee8bfe 100644 --- a/backends/candle/src/models/jina.rs +++ b/backends/candle/src/models/jina.rs @@ -1,13 +1,13 @@ use crate::alibi::build_alibi_tensor; use crate::layers::{get_cublas_lt_wrapper, HiddenAct, LayerNorm, Linear}; -use crate::models::Model; -use crate::models::{BertConfig, PositionEmbeddingType}; +use crate::models::PositionEmbeddingType; +use crate::models::{BertConfig, Model}; use candle::{DType, Device, IndexOp, Module, Result, Tensor, D}; use candle_nn::{Embedding, VarBuilder}; use text_embeddings_backend_core::{Batch, ModelType, Pool}; #[derive(Debug)] -pub struct BertEmbeddings { +pub struct JinaEmbeddings { word_embeddings: Embedding, token_type_embeddings: Embedding, position_embeddings: Option, @@ -15,7 +15,7 @@ pub struct BertEmbeddings { span: tracing::Span, } -impl BertEmbeddings { +impl JinaEmbeddings { pub fn load(vb: VarBuilder, config: &BertConfig) -> Result { let position_embeddings = if config.position_embedding_type == PositionEmbeddingType::Absolute { @@ -74,7 +74,7 @@ impl BertEmbeddings { } } -struct BertAttention { +struct JinaAttention { qkv_linear: Linear, dense: Linear, @@ -87,7 +87,7 @@ struct BertAttention { span: tracing::Span, } -impl BertAttention { +impl JinaAttention { pub fn load(vb: VarBuilder, config: &BertConfig) -> Result { let attention_head_size = config.hidden_size / config.num_attention_heads; let all_head_size = config.num_attention_heads * attention_head_size; @@ -237,7 +237,7 @@ impl BertAttention { } struct JinaBertLayer { - attention: BertAttention, + attention: JinaAttention, gated: Linear, output: Linear, layer_norm: LayerNorm, @@ -250,7 +250,7 @@ struct JinaBertLayer { impl JinaBertLayer { pub fn load(vb: VarBuilder, config: &BertConfig) -> Result { - let attention = BertAttention::load(vb.pp("attention"), config)?; + let attention = JinaAttention::load(vb.pp("attention"), config)?; let gated_weight = vb .pp("mlp") @@ -310,19 +310,19 @@ impl JinaBertLayer { } } -struct BertEncoder { +struct JinaBertEncoder { layers: Vec, span: tracing::Span, } -impl BertEncoder { +impl JinaBertEncoder { pub fn load(vb: VarBuilder, config: &BertConfig) -> Result { let layers = (0..config.num_hidden_layers) .map(|index| JinaBertLayer::load(vb.pp(format!("layer.{index}")), config)) .collect::>>()?; let span = tracing::span!(tracing::Level::TRACE, "encoder"); - Ok(BertEncoder { layers, span }) + Ok(JinaBertEncoder { layers, span }) } fn forward(&self, hidden_states: &Tensor, attention_bias: Option<&Tensor>) -> Result { @@ -340,8 +340,8 @@ impl BertEncoder { } pub struct JinaBertModel { - embeddings: BertEmbeddings, - encoder: BertEncoder, + embeddings: JinaEmbeddings, + encoder: JinaBertEncoder, pool: Pool, alibi: Option, @@ -363,6 +363,7 @@ impl JinaBertModel { vb.dtype(), )?), PositionEmbeddingType::Absolute => None, + _ => candle::bail!("not supported"), }; let pool = match model_type { @@ -373,19 +374,22 @@ impl JinaBertModel { if pool == Pool::Splade { candle::bail!("`splade` is not supported for Jina") } + if pool == Pool::LastToken { + candle::bail!("`last_token` is not supported for Jina"); + } pool } }; let (embeddings, encoder) = match ( - BertEmbeddings::load(vb.pp("embeddings"), config), - BertEncoder::load(vb.pp("encoder"), config), + JinaEmbeddings::load(vb.pp("embeddings"), config), + JinaBertEncoder::load(vb.pp("encoder"), config), ) { (Ok(embeddings), Ok(encoder)) => (embeddings, encoder), (Err(err), _) | (_, Err(err)) => { if let (Ok(embeddings), Ok(encoder)) = ( - BertEmbeddings::load(vb.pp("bert.embeddings"), config), - BertEncoder::load(vb.pp("bert.encoder"), config), + JinaEmbeddings::load(vb.pp("bert.embeddings"), config), + JinaBertEncoder::load(vb.pp("bert.encoder"), config), ) { (embeddings, encoder) } else { @@ -594,6 +598,8 @@ impl JinaBertModel { let pooled_embeddings = match self.pool { // CLS pooling Pool::Cls => outputs.i((.., 0))?, + // Last token pooling is not supported for this model + Pool::LastToken => unreachable!(), // Mean pooling Pool::Mean => { if let Some(ref attention_mask) = attention_mask { diff --git a/backends/candle/src/models/jina_code.rs b/backends/candle/src/models/jina_code.rs new file mode 100644 index 00000000..5f13fe08 --- /dev/null +++ b/backends/candle/src/models/jina_code.rs @@ -0,0 +1,662 @@ +use crate::alibi::build_alibi_tensor; +use crate::layers::{get_cublas_lt_wrapper, HiddenAct, LayerNorm, Linear}; +use crate::models::jina::JinaEmbeddings; +use crate::models::PositionEmbeddingType; +use crate::models::{BertConfig, Model}; +use candle::{DType, Device, IndexOp, Result, Tensor, D}; +use candle_nn::VarBuilder; +use text_embeddings_backend_core::{Batch, ModelType, Pool}; + +struct JinaCodeAttention { + qkv_linear: Linear, + + dense: Linear, + layer_norm_q: LayerNorm, + layer_norm_k: LayerNorm, + layer_norm_out: LayerNorm, + + num_attention_heads: usize, + attention_head_size: usize, + softmax_scale: f64, + + span: tracing::Span, +} + +impl JinaCodeAttention { + pub fn load(vb: VarBuilder, config: &BertConfig) -> Result { + let attention_head_size = config.hidden_size / config.num_attention_heads; + let all_head_size = config.num_attention_heads * attention_head_size; + let hidden_size = config.hidden_size; + + let query_weight = vb + .pp("self.query") + .get((all_head_size, hidden_size), "weight")?; + let query_bias = vb.pp("self.query").get(all_head_size, "bias")?; + + let key_weight = vb + .pp("self.key") + .get((all_head_size, hidden_size), "weight")?; + let key_bias = vb.pp("self.key").get(all_head_size, "bias")?; + + let value_weight = vb + .pp("self.value") + .get((all_head_size, hidden_size), "weight")?; + let value_bias = vb.pp("self.value").get(all_head_size, "bias")?; + + let qkv_weight = Tensor::cat(&[&query_weight, &key_weight, &value_weight], 0)?; + let qkv_bias = Tensor::cat(&[&query_bias, &key_bias, &value_bias], 0)?; + + let qkv_linear = Linear::new(qkv_weight, Some(qkv_bias), None); + + let layer_norm_q = LayerNorm::load( + vb.pp("self").pp("layer_norm_q"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + let layer_norm_k = LayerNorm::load( + vb.pp("self").pp("layer_norm_k"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + + let dense_weight = vb + .pp("output") + .pp("dense") + .get((hidden_size, hidden_size), "weight")?; + let dense_bias = vb.pp("output").pp("dense").get(hidden_size, "bias")?; + + let dense = Linear::new(dense_weight, Some(dense_bias), None); + + let layer_norm_out = LayerNorm::load( + vb.pp("output").pp("LayerNorm"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + + let softmax_scale = 1. / (attention_head_size as f64).sqrt(); + + Ok(Self { + qkv_linear, + dense, + layer_norm_q, + layer_norm_k, + layer_norm_out, + num_attention_heads: config.num_attention_heads, + attention_head_size, + softmax_scale, + span: tracing::span!(tracing::Level::TRACE, "attention"), + }) + } + + fn forward(&self, hidden_states: &Tensor, attention_bias: Option<&Tensor>) -> Result { + let _enter = self.span.enter(); + let device = hidden_states.device(); + let residual = hidden_states.clone(); + + let qkv = self.qkv_linear.forward(hidden_states)?; + + let mut new_qkv_shape = qkv.dims().to_vec(); + new_qkv_shape.pop(); + new_qkv_shape.push(self.num_attention_heads * 3); + new_qkv_shape.push(self.attention_head_size); + + let qkv = qkv.reshape(new_qkv_shape.as_slice())?; + + // Split heads + let qkv = qkv.chunk(3, 2)?; + + // Flatten last dims again to go through the layer norm + let query_layer = &qkv[0].flatten_from(D::Minus2)?; + let key_layer = &qkv[1].flatten_from(D::Minus2)?; + + // Layer norm on q and k + let query_layer = self.layer_norm_q.forward(query_layer, None)?; + let key_layer = self.layer_norm_k.forward(key_layer, None)?; + + let mut new_qk_shape = query_layer.dims().to_vec(); + new_qk_shape.pop(); + new_qk_shape.push(self.num_attention_heads); + new_qk_shape.push(self.attention_head_size); + + let query_layer = query_layer + .reshape(new_qk_shape.as_slice())? + .transpose(1, 2)? + .contiguous()?; + let key_layer = key_layer + .reshape(new_qk_shape.as_slice())? + .transpose(1, 2)? + .contiguous()?; + let value_layer = &qkv[2].transpose(1, 2)?.contiguous()?; + + #[allow(unused_variables)] + let context_layer = if let (Device::Cuda(_), Some(cublaslt)) = + (device, get_cublas_lt_wrapper()) + { + #[cfg(feature = "cuda")] + { + // cuBLASLt batch matmul implementation requires inputs to be dims3 + let (batch_size, _, seq_len, _) = key_layer.shape().dims4()?; + let key_layer = key_layer.flatten(0, 1)?; + let query_layer = query_layer.flatten(0, 1)?; + let value_layer = value_layer.flatten(0, 1)?; + let attention_bias = attention_bias.map(|mask| mask.flatten(0, 1)).transpose()?; + + // If attention_bias is set, we fuse the add by giving it as the output matrix + // and setting beta to 1.0 + let beta = match attention_bias.is_some() { + true => Some(1.0), + false => None, + }; + + // Batch matrix multiplication + // Fuse softmax scale and attention_bias add + let attention_scores = cublaslt.batch_matmul( + &key_layer, + &query_layer, + attention_bias.as_ref(), + Some(self.softmax_scale as f32), + beta, + None, + None, + )?; + let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?; + + let context_layer = cublaslt.batch_matmul( + &value_layer.t()?.contiguous()?, + &attention_probs, + // We save one allocation + Some(&query_layer), + None, + None, + None, + None, + )?; + + // Reshape to dims4 + context_layer.reshape(( + batch_size, + self.num_attention_heads, + seq_len, + self.attention_head_size, + )) + } + #[cfg(not(feature = "cuda"))] + { + candle::bail!("`cuda` feature is not enabled") + } + } else { + let attention_scores = query_layer.matmul(&key_layer.t()?)?; + let mut attention_scores = (attention_scores * self.softmax_scale)?; + + if let Some(attention_bias) = attention_bias { + attention_scores = attention_scores.add(attention_bias)?; + } + + let attention_probs = candle_nn::ops::softmax_last_dim(&attention_scores)?; + attention_probs.matmul(&value_layer.contiguous()?) + }?; + + let context_layer = context_layer.transpose(1, 2)?.flatten_from(D::Minus2)?; + + let hidden_states = self.dense.forward(&context_layer)?; + let hidden_states = self + .layer_norm_out + .forward(&hidden_states, Some(&residual))?; + + Ok(hidden_states) + } +} + +struct JinaCodeBertLayer { + attention: JinaCodeAttention, + up_gated_layer: Linear, + down_layer: Linear, + layer_norm_1: LayerNorm, + layer_norm_2: LayerNorm, + act: HiddenAct, + + intermediate_size: usize, + + span: tracing::Span, +} + +impl JinaCodeBertLayer { + pub fn load(vb: VarBuilder, config: &BertConfig) -> Result { + let attention = JinaCodeAttention::load(vb.pp("attention"), config)?; + + let up_gated_weight = vb + .pp("mlp") + .pp("up_gated_layer") + .get((config.intermediate_size * 2, config.hidden_size), "weight")?; + let up_gated_layer = Linear::new(up_gated_weight, None, None); + + let down_weight = vb + .pp("mlp") + .pp("down_layer") + .get((config.hidden_size, config.intermediate_size), "weight")?; + let down_bias = vb + .pp("mlp") + .pp("down_layer") + .get(config.hidden_size, "bias")?; + let down_layer = Linear::new(down_weight, Some(down_bias), None); + + let layer_norm_1 = LayerNorm::load( + vb.pp("layer_norm_1"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + let layer_norm_2 = LayerNorm::load( + vb.pp("layer_norm_2"), + config.hidden_size, + config.layer_norm_eps as f32, + )?; + + Ok(Self { + attention, + up_gated_layer, + down_layer, + layer_norm_1, + layer_norm_2, + act: config.hidden_act.clone(), + intermediate_size: config.intermediate_size, + span: tracing::span!(tracing::Level::TRACE, "layer"), + }) + } + + pub fn forward( + &self, + hidden_states: &Tensor, + attention_bias: Option<&Tensor>, + ) -> Result { + let _enter = self.span.enter(); + + // Pre-Norm + let residual = hidden_states.clone(); + + // Self-Attention block + let hidden_states = self.attention.forward(hidden_states, attention_bias)?; + + // Pre-MLP LayerNorm + let hidden_states = self.layer_norm_1.forward(&hidden_states, Some(&residual))?; + + // MLP block + let residual = hidden_states.clone(); + let hidden_states = self.up_gated_layer.forward(&hidden_states)?; + let non_gated = hidden_states.i((.., .., 0..self.intermediate_size))?; + let gated = hidden_states.i((.., .., self.intermediate_size..))?; + let gated = match self.act { + HiddenAct::Gelu => gated.gelu(), + HiddenAct::Relu => gated.relu(), + HiddenAct::Swiglu => gated.silu(), + }?; + let hidden_states = (non_gated * gated)?; + let hidden_states = self.down_layer.forward(&hidden_states)?; + + // Post-MLP LayerNorm + let hidden_states = self.layer_norm_2.forward(&hidden_states, Some(&residual))?; + + Ok(hidden_states) + } +} + +struct JinaCodeBertEncoder { + layers: Vec, + span: tracing::Span, +} + +impl JinaCodeBertEncoder { + pub fn load(vb: VarBuilder, config: &BertConfig) -> Result { + let layers = (0..config.num_hidden_layers) + .map(|index| JinaCodeBertLayer::load(vb.pp(format!("layer.{index}")), config)) + .collect::>>()?; + let span = tracing::span!(tracing::Level::TRACE, "encoder"); + + Ok(JinaCodeBertEncoder { layers, span }) + } + + fn forward(&self, hidden_states: &Tensor, attention_bias: Option<&Tensor>) -> Result { + let _enter = self.span.enter(); + + let mut hidden_states = hidden_states.clone(); + + // Use a loop rather than a fold as it's easier to modify when adding debug/... + for layer in self.layers.iter() { + hidden_states = layer.forward(&hidden_states, attention_bias)?; + } + + Ok(hidden_states) + } +} + +pub struct JinaCodeBertModel { + embeddings: JinaEmbeddings, + encoder: JinaCodeBertEncoder, + pool: Pool, + alibi: Option, + + num_attention_heads: usize, + + device: Device, + dtype: DType, + + span: tracing::Span, +} + +impl JinaCodeBertModel { + pub fn load(vb: VarBuilder, config: &BertConfig, model_type: ModelType) -> Result { + let alibi = match config.position_embedding_type { + PositionEmbeddingType::Alibi => Some(build_alibi_tensor( + config.max_position_embeddings, + config.num_attention_heads, + vb.device(), + vb.dtype(), + )?), + PositionEmbeddingType::Absolute => None, + _ => candle::bail!("not supported"), + }; + + let pool = match model_type { + ModelType::Classifier => { + candle::bail!("`classifier` model type is not supported for JinaCode") + } + ModelType::Embedding(pool) => { + if pool == Pool::Splade { + candle::bail!("`splade` is not supported for JinaCode") + } + if pool == Pool::LastToken { + candle::bail!("`last_token` is not supported for JinaCode"); + } + pool + } + }; + + let (embeddings, encoder) = match ( + JinaEmbeddings::load(vb.pp("embeddings"), config), + JinaCodeBertEncoder::load(vb.pp("encoder"), config), + ) { + (Ok(embeddings), Ok(encoder)) => (embeddings, encoder), + (Err(err), _) | (_, Err(err)) => { + if let (Ok(embeddings), Ok(encoder)) = ( + JinaEmbeddings::load(vb.pp("bert.embeddings"), config), + JinaCodeBertEncoder::load(vb.pp("bert.encoder"), config), + ) { + (embeddings, encoder) + } else { + return Err(err); + } + } + }; + + Ok(Self { + embeddings, + encoder, + pool, + alibi, + num_attention_heads: config.num_attention_heads, + device: vb.device().clone(), + dtype: vb.dtype(), + span: tracing::span!(tracing::Level::TRACE, "model"), + }) + } + + pub fn forward(&self, batch: Batch) -> Result<(Option, Option)> { + let _enter = self.span.enter(); + + let batch_size = batch.len(); + let max_length = batch.max_length as usize; + + let shape = (batch_size, max_length); + + let (input_ids, type_ids, position_ids, input_lengths, attention_bias, attention_mask) = + if batch_size > 1 { + // Prepare padded batch + let elems = batch_size * max_length; + + let mut input_ids = Vec::with_capacity(elems); + let mut type_ids = Vec::with_capacity(elems); + let mut position_ids = Vec::with_capacity(elems); + let mut attention_mask = Vec::with_capacity(elems); + let mut attention_bias = Vec::with_capacity(elems); + let mut input_lengths = Vec::with_capacity(batch_size); + // Bool to know if we need to use the attention mask + let mut masking = false; + + for i in 0..batch_size { + let start = batch.cumulative_seq_lengths[i] as usize; + let end = batch.cumulative_seq_lengths[i + 1] as usize; + let seq_length = (end - start) as u32; + input_lengths.push(seq_length as f32); + + // Copy values + for j in start..end { + input_ids.push(batch.input_ids[j]); + type_ids.push(batch.token_type_ids[j]); + position_ids.push(batch.position_ids[j]); + attention_mask.push(1.0_f32); + attention_bias.push(0.0); + } + + // Add padding if needed + let padding = batch.max_length - seq_length; + if padding > 0 { + // Set bool to use attention mask + masking = true; + for _ in 0..padding { + input_ids.push(0); + type_ids.push(0); + position_ids.push(0); + attention_mask.push(0.0_f32); + attention_bias.push(f32::NEG_INFINITY); + } + } + } + + let (attention_bias, attention_mask) = match masking { + true => { + // We only need the mask if we use mean pooling + // For CLS pooling, the bias is enough + let attention_mask = if self.pool == Pool::Mean { + let attention_mask = Tensor::from_vec( + attention_mask, + (batch_size, max_length, 1), + &self.device, + )? + .to_dtype(self.dtype)?; + + Some(attention_mask) + } else { + None + }; + + let attention_bias = Tensor::from_vec( + attention_bias, + (batch_size, 1, 1, max_length), + &self.device, + )? + .to_dtype(self.dtype)?; + + // Broadcast once instead of at every layer + let mut attention_bias = attention_bias.broadcast_as(( + batch_size, + self.num_attention_heads, + max_length, + max_length, + ))?; + + // Add alibi tensor + if let Some(alibi) = &self.alibi { + let alibi = alibi + .i((.., .., 0..max_length, 0..max_length))? + .broadcast_as(( + batch_size, + self.num_attention_heads, + max_length, + max_length, + ))?; + + attention_bias = attention_bias.add(&alibi)?; + } + + (Some(attention_bias.contiguous()?), attention_mask) + } + false => { + if let Some(alibi) = &self.alibi { + ( + Some( + alibi + .i((.., .., 0..max_length, 0..max_length))? + .broadcast_as(( + batch_size, + self.num_attention_heads, + max_length, + max_length, + ))? + .contiguous()?, + ), + None, + ) + } else { + (None, None) + } + } + }; + + ( + input_ids, + type_ids, + position_ids, + input_lengths, + attention_bias, + attention_mask, + ) + } else { + let attention_bias = if let Some(alibi) = &self.alibi { + Some( + alibi + .i((.., .., 0..max_length, 0..max_length))? + .contiguous()?, + ) + } else { + None + }; + + ( + batch.input_ids, + batch.token_type_ids, + batch.position_ids, + vec![batch.max_length as f32], + attention_bias, + None, + ) + }; + + // Create CPU tensors + let input_ids = Tensor::from_vec(input_ids, shape, &self.device)?; + let type_ids = Tensor::from_vec(type_ids, shape, &self.device)?; + let position_ids = Tensor::from_vec(position_ids, shape, &self.device)?; + let input_lengths = + Tensor::from_vec(input_lengths, (batch_size, 1), &self.device)?.to_dtype(self.dtype)?; + + let embedding_output = self + .embeddings + .forward(&input_ids, &type_ids, &position_ids)?; + + let outputs = self + .encoder + .forward(&embedding_output, attention_bias.as_ref())?; + + let has_pooling_requests = !batch.pooled_indices.is_empty(); + let has_raw_requests = !batch.raw_indices.is_empty(); + + let pooled_embeddings = if has_pooling_requests { + let pooled_indices_length = batch.pooled_indices.len(); + let mut outputs = outputs.clone(); + + // Only use pooled_indices if at least one member of the batch ask for raw embeddings + let pooled_indices = if has_raw_requests { + let pooled_indices = + Tensor::from_vec(batch.pooled_indices, pooled_indices_length, &self.device)?; + + // Select values in the batch + outputs = outputs.index_select(&pooled_indices, 0)?; + Some(pooled_indices) + } else { + None + }; + + let pooled_embeddings = match self.pool { + // CLS pooling + Pool::Cls => outputs.i((.., 0))?, + // Last token pooling is not supported for this model + Pool::LastToken => unreachable!(), + // Mean pooling + Pool::Mean => { + if let Some(ref attention_mask) = attention_mask { + let mut attention_mask = attention_mask.clone(); + + if let Some(pooled_indices) = pooled_indices { + // Select values in the batch + attention_mask = attention_mask.index_select(&pooled_indices, 0)?; + }; + + // Mask padded values + outputs = outputs.broadcast_mul(&attention_mask)?; + } + + (outputs.sum(1)?.broadcast_div(&input_lengths))? + } + Pool::Splade => unreachable!(), + }; + Some(pooled_embeddings) + } else { + None + }; + + let raw_embeddings = if has_raw_requests { + // Reshape outputs + let (b, l, h) = outputs.shape().dims3()?; + let outputs = outputs.reshape((b * l, h))?; + + // We need to remove the padding tokens only if batch_size > 1 and there are some + // member of the batch that require pooling + // or if batch_size > 1 and the members of the batch have different lengths + if (attention_mask.is_some() || has_pooling_requests) && batch_size > 1 { + let mut final_indices: Vec = Vec::with_capacity(batch_size * max_length); + + for i in batch.raw_indices.into_iter() { + let start = i * batch.max_length; + let i = i as usize; + let length = + batch.cumulative_seq_lengths[i + 1] - batch.cumulative_seq_lengths[i]; + + for j in start..start + length { + // Add indices for the tokens of this specific member of the batch + final_indices.push(j); + } + } + + let final_indices_length = final_indices.len(); + let final_indices = + Tensor::from_vec(final_indices, final_indices_length, &self.device)?; + + // Select the tokens with final indices + Some(outputs.index_select(&final_indices, 0)?) + } else { + Some(outputs) + } + } else { + None + }; + + Ok((pooled_embeddings, raw_embeddings)) + } +} + +impl Model for JinaCodeBertModel { + fn is_padded(&self) -> bool { + true + } + fn embed(&self, batch: Batch) -> Result<(Option, Option)> { + self.forward(batch) + } +} diff --git a/backends/candle/src/models/mistral.rs b/backends/candle/src/models/mistral.rs new file mode 100644 index 00000000..33c5ab00 --- /dev/null +++ b/backends/candle/src/models/mistral.rs @@ -0,0 +1,19 @@ +use crate::layers::HiddenAct; +use serde::Deserialize; + +#[derive(Debug, Clone, PartialEq, Deserialize)] +pub struct MistralConfig { + pub vocab_size: usize, + pub hidden_size: usize, + pub intermediate_size: usize, + pub num_hidden_layers: usize, + pub num_attention_heads: usize, + pub num_key_value_heads: usize, + pub hidden_act: HiddenAct, + pub max_position_embeddings: usize, + pub initializer_range: f64, + pub rms_norm_eps: f32, + pub model_type: Option, + pub rope_theta: f32, + pub sliding_window: Option, +} diff --git a/backends/candle/src/models.rs b/backends/candle/src/models/mod.rs similarity index 65% rename from backends/candle/src/models.rs rename to backends/candle/src/models/mod.rs index ed89482e..b1e9f937 100644 --- a/backends/candle/src/models.rs +++ b/backends/candle/src/models/mod.rs @@ -7,6 +7,8 @@ extern crate accelerate_src; mod bert; mod distilbert; mod jina; +mod jina_code; +mod mistral; mod nomic; #[cfg(feature = "cuda")] @@ -15,17 +17,35 @@ mod flash_bert; #[cfg(feature = "cuda")] mod flash_jina; +#[cfg(feature = "cuda")] +mod flash_jina_code; + #[cfg(feature = "cuda")] mod flash_nomic; #[cfg(feature = "cuda")] mod flash_distilbert; +#[cfg(feature = "cuda")] +mod flash_gte; +#[cfg(feature = "cuda")] +mod flash_mistral; + +#[cfg(feature = "cuda")] +mod flash_qwen2; +mod gte; +mod qwen2; + pub use bert::{BertConfig, BertModel, PositionEmbeddingType}; use candle::{Result, Tensor}; pub use distilbert::{DistilBertConfig, DistilBertModel}; +#[allow(unused_imports)] +pub use gte::{GTEConfig, NTKScaling, RopeScaling}; pub use jina::JinaBertModel; +pub use jina_code::JinaCodeBertModel; +pub use mistral::MistralConfig; pub use nomic::{NomicBertModel, NomicConfig}; +pub use qwen2::Qwen2Config; use text_embeddings_backend_core::Batch; #[cfg(feature = "cuda")] @@ -34,12 +54,24 @@ pub use flash_bert::FlashBertModel; #[cfg(feature = "cuda")] pub use flash_jina::FlashJinaBertModel; +#[cfg(feature = "cuda")] +pub use flash_jina_code::FlashJinaCodeBertModel; + #[cfg(feature = "cuda")] pub use flash_nomic::FlashNomicBertModel; #[cfg(feature = "cuda")] pub use flash_distilbert::FlashDistilBertModel; +#[cfg(feature = "cuda")] +pub use flash_mistral::FlashMistralModel; + +#[cfg(feature = "cuda")] +pub use flash_gte::FlashGTEModel; + +#[cfg(feature = "cuda")] +pub use flash_qwen2::FlashQwen2Model; + pub(crate) trait Model { fn is_padded(&self) -> bool; diff --git a/backends/candle/src/models/nomic.rs b/backends/candle/src/models/nomic.rs index 4f9e7551..cdaaea92 100644 --- a/backends/candle/src/models/nomic.rs +++ b/backends/candle/src/models/nomic.rs @@ -405,6 +405,9 @@ impl NomicBertModel { if pool == Pool::Splade { candle::bail!("`splade` is not supported for Nomic") } + if pool == Pool::LastToken { + candle::bail!("`last_token` is not supported for Nomic"); + } pool } }; @@ -610,6 +613,8 @@ impl NomicBertModel { let pooled_embeddings = match self.pool { // CLS pooling Pool::Cls => outputs.i((.., 0))?, + // Last token pooling is not supported for this model + Pool::LastToken => unreachable!(), // Mean pooling Pool::Mean => { if let Some(ref attention_mask) = attention_mask { diff --git a/backends/candle/src/models/qwen2.rs b/backends/candle/src/models/qwen2.rs new file mode 100644 index 00000000..8d2d1f86 --- /dev/null +++ b/backends/candle/src/models/qwen2.rs @@ -0,0 +1,18 @@ +use crate::layers::HiddenAct; +use serde::Deserialize; + +#[derive(Debug, Clone, PartialEq, Deserialize)] +pub struct Qwen2Config { + pub vocab_size: usize, + pub hidden_size: usize, + pub intermediate_size: usize, + pub num_hidden_layers: usize, + pub num_attention_heads: usize, + pub num_key_value_heads: usize, + pub hidden_act: HiddenAct, + pub max_position_embeddings: usize, + pub rms_norm_eps: f32, + pub rope_theta: f32, + pub sliding_window: usize, + pub use_sliding_window: bool, +} diff --git a/backends/candle/tests/common.rs b/backends/candle/tests/common.rs index b9d23995..0c069a47 100644 --- a/backends/candle/tests/common.rs +++ b/backends/candle/tests/common.rs @@ -1,5 +1,5 @@ use anyhow::Result; -use hf_hub::api::sync::ApiBuilder; +use hf_hub::api::sync::{ApiBuilder, ApiError, ApiRepo}; use hf_hub::{Repo, RepoType}; use insta::internals::YamlMatcher; use serde::{Deserialize, Serialize}; @@ -51,6 +51,44 @@ impl From>> for SnapshotScores { } } +#[derive(Serialize, Deserialize, Debug)] +pub struct SnapEmbedding(Vec); + +impl PartialEq for SnapEmbedding { + fn eq(&self, other: &Self) -> bool { + assert_eq!(self.0.len(), other.0.len()); + + let mut sumxx = 0.0; + let mut sumyy = 0.0; + let mut sumxy = 0.0; + + for (x, y) in self.0.iter().zip(other.0.iter()) { + sumxx += x * x; + sumyy += y * y; + sumxy += x * y; + } + + (sumxy / (sumxx * sumyy).sqrt()) > 0.999 + } +} + +#[derive(Serialize, Deserialize, Debug, PartialEq)] +pub struct SnapshotEmbeddings(Vec); + +impl Deref for SnapshotEmbeddings { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl From>> for SnapshotEmbeddings { + fn from(value: Vec>) -> Self { + Self(value.into_iter().map(|v| SnapEmbedding(v)).collect()) + } +} + pub fn sort_embeddings(embeddings: Embeddings) -> (Vec>, Vec>) { let mut pooled_embeddings = Vec::new(); let mut raw_embeddings = Vec::new(); @@ -69,7 +107,11 @@ pub fn download_artifacts( model_id: &'static str, revision: Option<&'static str>, ) -> Result { - let builder = ApiBuilder::new().with_progress(false); + let mut builder = ApiBuilder::new().with_progress(false); + + if let Some(cache_dir) = std::env::var_os("HUGGINGFACE_HUB_CACHE") { + builder = builder.with_cache_dir(cache_dir.into()); + } let api = builder.build().unwrap(); let api_repo = if let Some(revision) = revision { @@ -85,23 +127,66 @@ pub fn download_artifacts( api_repo.get("config.json")?; api_repo.get("tokenizer.json")?; - let model_root = match api_repo.get("model.safetensors") { + let model_files = match download_safetensors(&api_repo) { Ok(p) => p, Err(_) => { + tracing::warn!("safetensors weights not found. Using `pytorch_model.bin` instead. Model loading will be significantly slower."); + tracing::info!("Downloading `pytorch_model.bin`"); let p = api_repo.get("pytorch_model.bin")?; - tracing::warn!("`model.safetensors` not found. Using `pytorch_model.bin` instead. Model loading will be significantly slower."); - p + vec![p] } - } - .parent().unwrap() - .to_path_buf(); + }; + let model_root = model_files[0].parent().unwrap().to_path_buf(); Ok(model_root) } +fn download_safetensors(api: &ApiRepo) -> Result, ApiError> { + // Single file + tracing::info!("Downloading `model.safetensors`"); + match api.get("model.safetensors") { + Ok(p) => return Ok(vec![p]), + Err(err) => tracing::warn!("Could not download `model.safetensors`: {}", err), + }; + + // Sharded weights + // Download and parse index file + tracing::info!("Downloading `model.safetensors.index.json`"); + let index_file = api.get("model.safetensors.index.json")?; + let index_file_string: String = + std::fs::read_to_string(index_file).expect("model.safetensors.index.json is corrupted"); + let json: serde_json::Value = serde_json::from_str(&index_file_string) + .expect("model.safetensors.index.json is corrupted"); + + let weight_map = match json.get("weight_map") { + Some(serde_json::Value::Object(map)) => map, + _ => panic!("model.safetensors.index.json is corrupted"), + }; + + let mut safetensors_filenames = std::collections::HashSet::new(); + for value in weight_map.values() { + if let Some(file) = value.as_str() { + safetensors_filenames.insert(file.to_string()); + } + } + + // Download weight files + let mut safetensors_files = Vec::new(); + for n in safetensors_filenames { + tracing::info!("Downloading `{}`", n); + safetensors_files.push(api.get(&n)?); + } + + Ok(safetensors_files) +} + pub fn relative_matcher() -> YamlMatcher { YamlMatcher::new() } +pub fn cosine_matcher() -> YamlMatcher { + YamlMatcher::new() +} + pub fn load_tokenizer(model_root: &Path) -> Result { // Load tokenizer let tokenizer_path = model_root.join("tokenizer.json"); diff --git a/backends/candle/tests/snapshots/test_flash_gte__gte_batch.snap b/backends/candle/tests/snapshots/test_flash_gte__gte_batch.snap new file mode 100644 index 00000000..d8bbd66e --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_gte__gte_batch.snap @@ -0,0 +1,2309 @@ +--- +source: backends/candle/tests/test_flash_gte.rs +assertion_line: 37 +expression: embeddings_batch +--- +- - 0.4428711 + - 0.6118164 + - 0.07043457 + - -0.5917969 + - 0.88183594 + - -0.10839844 + - 0.0881958 + - -0.20483398 + - 1.9345703 + - 0.6230469 + - 0.59521484 + - 0.18737793 + - 0.030548096 + - -0.078308105 + - 0.79589844 + - -0.23474121 + - -0.8720703 + - 1.6923828 + - 0.12597656 + - -1.9267578 + - -0.34472656 + - -1.9326172 + - 0.89990234 + - -0.2006836 + - 0.024230957 + - 0.2878418 + - 0.3642578 + - 0.17956543 + - -0.51123047 + - 0.025817871 + - -0.8964844 + - 0.14147949 + - -0.39257813 + - -0.8486328 + - 0.005218506 + - 0.42358398 + - 0.23181152 + - 1.1630859 + - -1.1455078 + - 0.3388672 + - -2.1484375 + - -1.0146484 + - -0.2841797 + - 0.021499634 + - 0.16235352 + - 0.39453125 + - -0.9511719 + - 0.41064453 + - -0.15563965 + - -0.484375 + - -0.07080078 + - 0.07312012 + - 0.56103516 + - 0.028213501 + - -0.027938843 + - 0.43896484 + - 1.0136719 + - 0.7788086 + - -0.5644531 + - -1.9824219 + - -0.011169434 + - 0.50634766 + - -0.39331055 + - -0.3334961 + - -1.1679688 + - -0.07208252 + - 0.008544922 + - 0.7788086 + - -0.10021973 + - -0.30859375 + - 0.35888672 + - -0.44848633 + - -0.08679199 + - -1.0791016 + - 1.3193359 + - -1.0273438 + - 0.34228516 + - -0.45385742 + - 0.8027344 + - 0.50634766 + - 0.703125 + - -0.96533203 + - -0.042938232 + - -1.0927734 + - 0.35205078 + - -0.56689453 + - -0.5341797 + - 0.23571777 + - -2.0234375 + - -0.26342773 + - 0.1998291 + - 0.7739258 + - 0.17797852 + - 1.2255859 + - 0.9814453 + - -0.2902832 + - 1.2080078 + - 0.50097656 + - 0.2479248 + - -0.2166748 + - 0.29052734 + - -0.5004883 + - 0.26513672 + - 0.5024414 + - -0.042266846 + - -0.013465881 + - -0.6376953 + - 0.64501953 + - -1.7958984 + - 0.25512695 + - -0.20458984 + - -0.12927246 + - 0.19665527 + - 0.8076172 + - -0.96777344 + - 0.26391602 + - -0.5649414 + - -0.58740234 + - -0.15466309 + - 0.7392578 + - 0.5336914 + - 0.60253906 + - 1.1875 + - -0.37719727 + - 0.8198242 + - -0.2401123 + - 0.40527344 + - 0.17114258 + - -0.32128906 + - -0.75439453 + - 0.056488037 + - 0.16491699 + - 0.6899414 + - -0.6171875 + - -0.05316162 + - 0.43017578 + - -0.6074219 + - 0.040374756 + - -0.8618164 + - -0.7192383 + - 0.7402344 + - -0.42138672 + - 0.26831055 + - -1.5429688 + - 0.1706543 + - 1.2158203 + - -0.17077637 + - -0.13964844 + - -0.5449219 + - -0.59033203 + - -0.7783203 + - -0.18786621 + - -0.34838867 + - 0.6230469 + - -0.5878906 + - -0.90234375 + - -0.7324219 + - -0.81933594 + - 0.4819336 + - -1.1591797 + - 1.2109375 + - -1.0517578 + - 0.25219727 + - 1.2841797 + - 0.06347656 + - -0.72021484 + - -0.3671875 + - 0.07330322 + - -0.022644043 + - -0.3713379 + - -0.008430481 + - 0.3564453 + - -0.8354492 + - -0.59521484 + - -0.40405273 + - -0.027923584 + - -0.3100586 + - -1.109375 + - -0.030593872 + - 0.14086914 + - -1.2128906 + - 0.03488159 + - 0.35424805 + - -1.5683594 + - 0.17773438 + - -0.66796875 + - -1.9804688 + - -0.35327148 + - -0.2927246 + - -1.2011719 + - -0.4165039 + - 0.36645508 + - -0.049957275 + - -0.87353516 + - -0.9086914 + - 0.4790039 + - -1.4599609 + - 0.7866211 + - -0.27490234 + - 0.08477783 + - 0.2220459 + - 0.0017213821 + - -1.0927734 + - -0.006439209 + - -0.62060547 + - -0.68115234 + - 0.4572754 + - -0.61572266 + - -0.7871094 + - -1.3847656 + - 1.5566406 + - 0.2680664 + - 0.8466797 + - -0.2578125 + - -0.76416016 + - 0.6484375 + - -0.05279541 + - -0.1307373 + - -0.11853027 + - -0.6357422 + - -0.17700195 + - 0.9472656 + - -0.4958496 + - 0.015464783 + - -0.23168945 + - -1.6748047 + - -0.8911133 + - 0.86865234 + - 1.0722656 + - 0.34228516 + - 0.7182617 + - -0.5488281 + - -0.45166016 + - -0.3022461 + - 0.45336914 + - -0.28808594 + - -0.7626953 + - 0.016067505 + - 0.63183594 + - 0.46923828 + - -0.07373047 + - 1.7832031 + - -0.41796875 + - -0.89453125 + - 0.07757568 + - -0.29589844 + - -1.0673828 + - 1.3320313 + - 1.4160156 + - 0.20703125 + - -0.1060791 + - 0.1508789 + - 0.37231445 + - 0.05053711 + - -0.68896484 + - 0.7397461 + - 0.15771484 + - 0.5595703 + - -0.8198242 + - -0.17712402 + - -0.2479248 + - -0.066345215 + - 0.4194336 + - 1.0517578 + - -1.6650391 + - 0.90283203 + - 0.22937012 + - -0.5908203 + - -0.79785156 + - -0.003993988 + - -0.47314453 + - 0.19116211 + - -0.39038086 + - 0.6333008 + - -0.28686523 + - -0.8720703 + - 0.080200195 + - -1.2587891 + - 0.22790527 + - 0.55126953 + - -0.47485352 + - -0.20471191 + - 0.75390625 + - -1.0488281 + - 0.9902344 + - 1.2275391 + - 0.40966797 + - -0.36791992 + - 0.54833984 + - -0.32788086 + - 0.2208252 + - 1.1289063 + - -0.017410278 + - -0.67089844 + - 0.7236328 + - 0.20788574 + - 0.55566406 + - 0.7104492 + - -0.16589355 + - 0.57958984 + - 1.1494141 + - -0.15930176 + - -0.4963379 + - 0.016326904 + - 1.5634766 + - -0.5029297 + - 1.2011719 + - -1.0029297 + - -0.3557129 + - -0.31079102 + - -0.12670898 + - 0.81933594 + - 0.75683594 + - 1.1630859 + - 1.6669922 + - -0.8022461 + - -0.3034668 + - 0.3798828 + - -0.71484375 + - -0.7470703 + - 1.1904297 + - -0.95654297 + - 0.30297852 + - 0.16992188 + - 0.8173828 + - -0.8798828 + - 1.1376953 + - -0.4543457 + - 0.6142578 + - -0.47680664 + - 1.1181641 + - 0.01398468 + - -0.49560547 + - -0.039031982 + - 0.2878418 + - -0.71533203 + - 0.82128906 + - -0.03768921 + - 0.60546875 + - 0.7578125 + - -0.3322754 + - 0.86376953 + - -0.71435547 + - 0.7597656 + - -1.3496094 + - 0.18652344 + - -0.39990234 + - 0.31103516 + - 0.16809082 + - 1.2626953 + - -0.42919922 + - 0.2434082 + - 0.83935547 + - -1.3994141 + - 0.34472656 + - -0.68603516 + - -0.28759766 + - 0.4663086 + - 0.6816406 + - -0.48120117 + - -0.11029053 + - -0.48339844 + - 0.1706543 + - 0.29614258 + - -0.7290039 + - -0.87158203 + - 0.8457031 + - 0.57128906 + - 0.1640625 + - -0.1739502 + - -0.16394043 + - 0.8652344 + - -0.38671875 + - 0.5625 + - -0.30493164 + - 1.8251953 + - 0.041931152 + - 0.17285156 + - -1.0107422 + - -0.20788574 + - 1.1005859 + - 0.7973633 + - -1.0029297 + - 0.67041016 + - -0.96240234 + - 0.45166016 + - -0.32202148 + - -0.97753906 + - 1.7080078 + - -0.04626465 + - 0.4404297 + - 0.28833008 + - 0.32006836 + - -0.5341797 + - -0.74658203 + - -1.28125 + - -0.2076416 + - -0.57958984 + - 0.88134766 + - -0.21875 + - -0.51171875 + - 0.20214844 + - -0.9536133 + - -0.89160156 + - 0.6279297 + - -0.08929443 + - 1.2490234 + - -0.3083496 + - 0.5253906 + - -1.5771484 + - 0.86572266 + - -0.16223145 + - -0.6455078 + - -0.9008789 + - -0.68896484 + - -0.55566406 + - 0.54785156 + - -0.2052002 + - 1.0820313 + - 0.5390625 + - 0.2454834 + - -0.0053596497 + - 0.09838867 + - -0.08288574 + - 0.6616211 + - -0.06573486 + - -0.8120117 + - -0.08306885 + - 0.12176514 + - -1.4072266 + - 0.6533203 + - 0.49536133 + - 0.48339844 + - -0.6142578 + - 0.06011963 + - 0.4951172 + - -0.33935547 + - -0.85058594 + - -0.8510742 + - 0.10028076 + - 0.64501953 + - 0.62841797 + - 0.79052734 + - -0.8486328 + - -0.76708984 + - 0.38891602 + - 0.5917969 + - -0.06939697 + - -0.13366699 + - -0.8964844 + - -0.76660156 + - 1.3134766 + - 0.98046875 + - 0.37158203 + - 0.04675293 + - -1.2890625 + - 0.17102051 + - -0.16772461 + - -0.10760498 + - -0.111816406 + - 0.20251465 + - -0.65527344 + - 0.2800293 + - -1.8037109 + - 0.15270996 + - 0.25024414 + - 0.6713867 + - 0.67578125 + - -1.0322266 + - -0.4140625 + - -0.59277344 + - 0.028778076 + - -1.3515625 + - 0.12548828 + - 0.87353516 + - 0.87060547 + - -0.18518066 + - 0.7949219 + - -0.7011719 + - -0.28759766 + - 0.39013672 + - 0.43139648 + - -0.053955078 + - -0.60498047 + - 0.6381836 + - 0.20996094 + - 0.09857178 + - -0.7402344 + - 0.24731445 + - -0.41430664 + - -0.49365234 + - -0.7817383 + - -0.35766602 + - -0.53759766 + - -0.13439941 + - 0.03010559 + - 0.47070313 + - 0.16564941 + - 1.0439453 + - 0.7026367 + - 0.3251953 + - 0.021118164 + - -0.25976563 + - 1.4033203 + - 0.3383789 + - -0.0637207 + - 0.8149414 + - -0.7651367 + - -0.5332031 + - -0.19335938 + - 0.19458008 + - -0.61083984 + - 0.07684326 + - -0.6982422 + - -0.38989258 + - 0.37841797 + - 0.5966797 + - -1.9882813 + - -0.36767578 + - -2.0214844 + - 0.9682617 + - 0.46826172 + - -0.49829102 + - -0.20861816 + - -0.15332031 + - -0.13891602 + - 1.8779297 + - -0.18640137 + - 0.38134766 + - -0.1373291 + - -0.29492188 + - 0.42871094 + - -0.24523926 + - 0.16320801 + - 0.8408203 + - -0.34985352 + - 0.5307617 + - -0.14685059 + - 0.7729492 + - -0.11444092 + - -0.23522949 + - 1.2089844 + - -1.5595703 + - 0.09820557 + - -1.3476563 + - 0.6196289 + - -1.1464844 + - -0.47045898 + - -0.10656738 + - -1.3115234 + - 0.4309082 + - 0.054748535 + - 0.80078125 + - 0.43359375 + - -0.22290039 + - 0.55908203 + - -8.1484375 + - -0.7236328 + - -0.4831543 + - -0.21447754 + - 0.51904297 + - 0.5449219 + - 0.8520508 + - -0.8852539 + - 0.36865234 + - -0.1694336 + - -0.32250977 + - 0.12176514 + - 0.92578125 + - 0.38891602 + - 0.79296875 + - 0.46875 + - 0.9213867 + - 0.9970703 + - -0.32739258 + - 1.2900391 + - -0.1517334 + - 0.18640137 + - -0.6113281 + - 0.060821533 + - 0.3527832 + - -0.7915039 + - -0.3942871 + - 1.2158203 + - -0.8051758 + - 0.13598633 + - 0.21057129 + - -0.66552734 + - 1.5957031 + - 0.44262695 + - -0.24023438 + - -0.3984375 + - -1.0517578 + - -0.36499023 + - -0.5966797 + - 0.60546875 + - 1.2324219 + - 0.21520996 + - -0.18481445 + - -0.0066490173 + - -0.08239746 + - 0.7993164 + - -0.81884766 + - -1.6660156 + - -1.2861328 + - -0.8535156 + - 0.15856934 + - 0.6230469 + - 0.60595703 + - 0.5234375 + - -0.93603516 + - 0.7529297 + - 0.06738281 + - -0.002035141 + - -0.92285156 + - -0.25512695 + - -0.50878906 + - -0.7944336 + - -0.44970703 + - -0.64501953 + - 0.8569336 + - 0.12030029 + - -0.08343506 + - -0.5126953 + - 0.16540527 + - 1.6054688 + - -0.3947754 + - 0.34350586 + - -0.43066406 + - -0.04083252 + - 0.2956543 + - -0.5175781 + - 0.6567383 + - 0.57470703 + - 0.6694336 + - 0.13891602 + - 0.9790039 + - 0.16503906 + - -0.12017822 + - -0.8745117 + - 0.057861328 + - 0.24194336 + - -0.012207031 + - 0.40722656 + - -0.34936523 + - -0.1998291 + - 0.41210938 + - -0.17858887 + - -0.011474609 + - 0.10394287 + - -0.1048584 + - 0.037384033 + - 1.1806641 + - -0.68896484 + - 0.7397461 + - -0.7661133 + - -0.3540039 + - 0.6098633 + - -0.93066406 + - -0.49047852 + - -0.29418945 + - -1.4736328 + - -1.0498047 + - -1.2509766 + - -0.546875 + - -1.4882813 + - 0.4802246 + - -0.79052734 + - -0.24499512 + - -0.5517578 + - -0.08282471 + - -0.47705078 + - 0.18701172 + - 0.47827148 + - -0.21008301 + - -0.83154297 + - -0.106933594 + - 0.041656494 + - -0.09887695 + - 0.58447266 + - -0.80859375 + - -1.1503906 + - 0.19140625 + - 0.50146484 + - -0.8930664 + - -0.037750244 + - -0.4411621 + - 0.50439453 + - 1.484375 + - -0.8754883 + - -0.3227539 + - -0.98583984 + - -0.09124756 + - 0.48510742 + - -0.2775879 + - 0.80371094 + - -0.5683594 + - -0.25732422 + - 0.7504883 + - -0.37426758 + - 0.2199707 + - 0.37426758 + - -0.03375244 + - -0.40771484 + - -0.18078613 + - -0.48095703 + - -1.5078125 + - -0.6743164 + - 0.82177734 + - 0.25073242 + - -0.8261719 + - 0.33862305 + - -1.2646484 + - 0.8666992 + - -0.27392578 + - -0.34399414 + - -0.42333984 + - -0.4116211 + - 0.8027344 + - 1.1503906 + - -1.2041016 + - 0.35620117 + - -0.00016129017 + - -1.953125 + - -0.6035156 + - 0.58154297 + - 0.08703613 + - 0.48266602 + - -0.35180664 + - -0.11047363 + - 0.65966797 + - -1.4921875 + - -0.14086914 + - -0.2130127 + - 1.0244141 + - -1.4472656 + - 0.56152344 + - 1.734375 + - 0.09698486 + - -0.5415039 + - -0.1340332 + - 0.7583008 + - -0.2722168 + - 1.0488281 + - 1.0498047 + - 0.23254395 + - -0.15222168 + - 0.18005371 + - 0.097839355 + - -1.6386719 + - -0.6035156 + - -0.91748047 + - -0.93847656 + - 1.0576172 + - 0.703125 + - 0.70410156 + - 0.8198242 + - -2.25 + - -0.6357422 + - 0.35058594 + - 0.75146484 + - -0.12322998 + - -1.0859375 + - 0.50634766 + - -0.67822266 + - 0.7495117 + - -0.27685547 + - -0.13537598 +- - 0.039520264 + - 0.4255371 + - 0.19506836 + - -0.4951172 + - 0.5908203 + - -0.17102051 + - 1.3964844 + - 0.14685059 + - 1.8730469 + - 0.5810547 + - 0.7573242 + - 0.2841797 + - 0.027160645 + - -0.61328125 + - 0.24157715 + - -0.13586426 + - -0.44848633 + - 1.1748047 + - 0.5546875 + - -1.8710938 + - -0.08605957 + - -1.2617188 + - 0.7163086 + - -0.32055664 + - 0.11517334 + - 0.99658203 + - 0.09411621 + - 0.4724121 + - 0.20117188 + - 0.50439453 + - -0.07611084 + - -0.026397705 + - -0.5605469 + - -0.12670898 + - -0.7915039 + - 0.19970703 + - 0.97265625 + - 0.7597656 + - -1.6689453 + - -0.16137695 + - -1.5742188 + - -0.8232422 + - 0.3774414 + - -0.105651855 + - -0.026626587 + - 0.5175781 + - -1.21875 + - -0.67089844 + - -0.28198242 + - -0.20910645 + - 0.19665527 + - 0.64990234 + - 1.0576172 + - 0.24536133 + - 0.33862305 + - 0.76708984 + - 0.8564453 + - 0.20861816 + - -0.99853516 + - -1.0507813 + - -0.011680603 + - 0.5522461 + - -0.47558594 + - -0.8598633 + - -0.93847656 + - -0.46899414 + - 0.21325684 + - 1.4003906 + - 0.67089844 + - -0.48999023 + - -0.20861816 + - -0.53515625 + - 0.2241211 + - -1.1054688 + - 0.73339844 + - -1.2802734 + - 0.2442627 + - -0.0713501 + - 1.09375 + - 0.68408203 + - 0.94873047 + - -0.51904297 + - -0.14282227 + - -0.6435547 + - 0.32421875 + - 0.28881836 + - -0.0848999 + - -0.12792969 + - -1.9990234 + - 0.039886475 + - 0.6035156 + - -0.10223389 + - -0.095581055 + - 0.9741211 + - 0.025161743 + - -0.34033203 + - 1.1289063 + - 1.0546875 + - 0.19396973 + - -0.041290283 + - 0.9580078 + - -0.37304688 + - 0.20910645 + - 0.3161621 + - 0.44311523 + - 0.088012695 + - -1.1035156 + - 0.9350586 + - -1.3847656 + - 0.3918457 + - -0.14111328 + - -0.58251953 + - -0.43579102 + - 0.79589844 + - -0.6230469 + - 0.63427734 + - -0.6152344 + - -1.3935547 + - 0.3203125 + - 1.1542969 + - -0.022766113 + - 0.81933594 + - 0.59814453 + - -0.23718262 + - 0.8051758 + - -0.68115234 + - 0.25463867 + - -0.118896484 + - -0.15356445 + - 0.12756348 + - -0.32617188 + - -0.27734375 + - 0.95410156 + - -1.3583984 + - -0.55322266 + - -0.19372559 + - -1.0253906 + - 0.14758301 + - -1.6992188 + - -0.3317871 + - 0.5078125 + - -0.3552246 + - 0.037506104 + - -1.3037109 + - 0.016326904 + - 1.2617188 + - -0.4633789 + - 0.34521484 + - -0.8574219 + - -0.9423828 + - -0.55029297 + - 0.28564453 + - -0.1239624 + - 0.111572266 + - -0.40600586 + - -1.0878906 + - -0.5410156 + - 0.74658203 + - 0.06738281 + - -1.5810547 + - 1.1582031 + - -0.84765625 + - -0.10479736 + - 1.1591797 + - 0.08850098 + - -0.49902344 + - -0.071777344 + - 1.0751953 + - 0.6298828 + - 0.0947876 + - -0.36889648 + - 0.18457031 + - -0.5332031 + - -0.8461914 + - 0.5776367 + - -0.47265625 + - -0.53515625 + - -0.21533203 + - 0.31445313 + - 0.50878906 + - -0.80078125 + - -0.09869385 + - -0.46484375 + - 0.23132324 + - -0.1071167 + - -0.9375 + - -0.94433594 + - 0.22302246 + - -1.3183594 + - -1.2880859 + - -1.0263672 + - 0.7392578 + - -1.0771484 + - -0.06707764 + - -1.1992188 + - 0.09863281 + - -1.1689453 + - 0.703125 + - -0.51171875 + - -0.036346436 + - -0.6064453 + - 0.17321777 + - -0.26416016 + - 0.31811523 + - -1.2773438 + - 0.012527466 + - 1.4785156 + - -0.10699463 + - -0.35961914 + - -0.28881836 + - 1.0390625 + - 0.37646484 + - 0.97998047 + - -0.31567383 + - -0.72509766 + - 1.1767578 + - -0.35302734 + - -0.15820313 + - -0.08886719 + - 0.6435547 + - 0.03665161 + - 1.578125 + - -0.359375 + - -0.60791016 + - -0.048919678 + - -0.7290039 + - -0.1685791 + - 0.65283203 + - 1.0820313 + - -0.26586914 + - 0.11590576 + - -0.5361328 + - -0.81347656 + - -1.0986328 + - 1.3056641 + - -0.33984375 + - -0.23547363 + - -0.0713501 + - 0.83984375 + - 0.5654297 + - -0.74609375 + - 1.4326172 + - -0.80078125 + - -0.6508789 + - 0.42749023 + - 0.036346436 + - -0.02998352 + - 0.7915039 + - 1.0439453 + - 0.66748047 + - 0.57128906 + - 0.33276367 + - -0.31152344 + - 0.028060913 + - 0.037902832 + - 0.6381836 + - 0.06414795 + - 0.19274902 + - -0.68847656 + - 0.11767578 + - -0.4963379 + - 0.12487793 + - 0.041503906 + - 0.31567383 + - -1.3642578 + - 0.6875 + - 0.8310547 + - -0.37670898 + - -0.9199219 + - 0.039245605 + - 0.0040512085 + - -0.068603516 + - -0.011726379 + - 0.7993164 + - -0.16674805 + - -0.45703125 + - -0.71191406 + - -1.1611328 + - -0.06738281 + - 1.1181641 + - -0.44482422 + - 0.3383789 + - 0.39501953 + - -0.28930664 + - 1.0507813 + - 0.26464844 + - 0.8310547 + - -0.8935547 + - 0.15002441 + - -0.8461914 + - 0.7841797 + - 1.3574219 + - 0.05038452 + - 0.3569336 + - -0.8769531 + - -0.27441406 + - 0.28857422 + - 0.1459961 + - 0.0003156662 + - 0.043121338 + - 0.65771484 + - 0.08758545 + - -0.0033512115 + - -0.1875 + - 0.7397461 + - -0.5463867 + - 0.46826172 + - -1.1835938 + - -0.23535156 + - -0.3701172 + - -0.16711426 + - 0.5722656 + - 0.38354492 + - 1.0068359 + - 0.8955078 + - 0.17358398 + - 0.08251953 + - -0.33251953 + - -0.06994629 + - -0.6298828 + - 0.96435547 + - -0.8149414 + - 0.6376953 + - 0.38549805 + - 1.0146484 + - -1.4296875 + - 0.2109375 + - -0.46557617 + - 0.5151367 + - -0.47729492 + - 0.91748047 + - 0.058654785 + - 0.62939453 + - 0.18261719 + - 0.08685303 + - -1.2226563 + - 0.36083984 + - -0.60791016 + - 0.53808594 + - -0.042816162 + - -1.0537109 + - 1.5537109 + - -0.35009766 + - 0.9067383 + - -0.74902344 + - 0.3059082 + - -0.4177246 + - 0.23950195 + - -0.19958496 + - 0.9589844 + - -0.26416016 + - 0.17883301 + - 0.028823853 + - -0.20239258 + - 0.6230469 + - -1.2568359 + - 0.73046875 + - 1.1914063 + - 0.38842773 + - -0.49365234 + - -0.33691406 + - 0.085754395 + - 0.21142578 + - -0.096069336 + - 0.30981445 + - -1.4892578 + - 0.6958008 + - 0.16235352 + - 0.15075684 + - -0.15576172 + - -0.73828125 + - 0.97802734 + - -0.22546387 + - 0.79296875 + - -0.40625 + - 1.8994141 + - 0.053527832 + - 0.02268982 + - -0.7207031 + - -0.63134766 + - -0.07324219 + - 0.08795166 + - 0.22595215 + - 0.035247803 + - -0.83203125 + - -0.08026123 + - 0.07891846 + - -1.4433594 + - 1.2402344 + - 0.7402344 + - 0.2479248 + - -0.25732422 + - 0.29418945 + - -0.88916016 + - -0.35229492 + - -0.65771484 + - 0.048614502 + - -0.1295166 + - 0.1381836 + - -0.60253906 + - -0.5102539 + - -0.39868164 + - -1.6806641 + - -0.6455078 + - 0.24414063 + - -0.19958496 + - 0.62353516 + - -0.86035156 + - 0.10614014 + - -1.0644531 + - 0.84033203 + - -0.48266602 + - -0.30493164 + - -0.3864746 + - -0.052856445 + - -1.2080078 + - -0.43115234 + - 0.12310791 + - 0.80859375 + - 0.21838379 + - -0.027175903 + - -0.10418701 + - -0.44189453 + - -0.051757813 + - 0.6767578 + - -0.7939453 + - -0.703125 + - -0.6723633 + - -0.1743164 + - -1.3681641 + - -0.36376953 + - -0.85546875 + - 1.3095703 + - 0.22692871 + - 0.27783203 + - -0.018127441 + - -0.671875 + - -0.921875 + - -0.2841797 + - -0.45874023 + - -0.20581055 + - -0.3786621 + - 1.0615234 + - -0.8754883 + - -1.0185547 + - 0.13696289 + - 0.15734863 + - 0.57714844 + - -0.234375 + - -1.0605469 + - -0.54052734 + - 0.9375 + - 1.0097656 + - -0.8676758 + - 0.09088135 + - -0.88671875 + - 0.5229492 + - 0.08917236 + - -0.12042236 + - -0.8720703 + - 1.0849609 + - -0.46362305 + - 0.6347656 + - -1.7353516 + - -0.42382813 + - -0.017181396 + - 0.40551758 + - -0.07434082 + - -0.120910645 + - -0.10473633 + - 0.29589844 + - 0.6972656 + - -1.015625 + - 0.5371094 + - -0.51171875 + - 1.1914063 + - -0.113342285 + - 1.3095703 + - -0.8334961 + - 0.39233398 + - -0.09277344 + - 0.21032715 + - 0.24316406 + - 0.15551758 + - 0.15319824 + - -0.6533203 + - -0.3918457 + - -0.83984375 + - 0.15820313 + - -0.3544922 + - -0.19848633 + - 0.074401855 + - -0.23913574 + - -0.36791992 + - -0.5986328 + - 0.2980957 + - -0.1463623 + - -0.43823242 + - 0.9272461 + - 0.24169922 + - 0.1842041 + - -0.38793945 + - -0.54589844 + - 0.67333984 + - -0.20532227 + - 0.7084961 + - 0.19482422 + - 0.3100586 + - -0.18029785 + - 0.83691406 + - 0.09051514 + - -0.14501953 + - 0.08215332 + - 0.016418457 + - 0.2763672 + - 0.5053711 + - -0.6357422 + - -2.8535156 + - 0.09869385 + - -1.2763672 + - 0.7895508 + - 0.32861328 + - -0.58691406 + - 0.05392456 + - -0.49316406 + - 0.03439331 + - 1.3232422 + - -0.3791504 + - -0.009689331 + - 0.12915039 + - 0.39648438 + - 0.40820313 + - -0.5541992 + - 0.07409668 + - 0.16479492 + - -0.008087158 + - 0.17626953 + - -0.22290039 + - 0.93310547 + - -0.03164673 + - 0.010131836 + - 0.97998047 + - 0.16027832 + - 0.5805664 + - -0.96191406 + - 0.39916992 + - -0.23803711 + - -0.7949219 + - 0.16552734 + - -1.9003906 + - -0.5800781 + - -0.39697266 + - 0.10223389 + - 0.18554688 + - -0.7553711 + - 1.5869141 + - -10.421875 + - -0.06225586 + - 0.010032654 + - -0.56103516 + - 0.6611328 + - 0.43969727 + - 0.3322754 + - -1.2880859 + - 0.35083008 + - -0.030227661 + - -0.38964844 + - -0.19934082 + - 0.2993164 + - -0.23413086 + - 0.7788086 + - 0.2434082 + - 0.8574219 + - 0.5605469 + - -0.60253906 + - 0.74560547 + - -0.092163086 + - 0.1550293 + - 0.0060577393 + - -0.27563477 + - 0.30200195 + - -0.7753906 + - 0.16113281 + - 0.47851563 + - 0.20031738 + - -0.032348633 + - 0.6723633 + - -0.9267578 + - 1.2167969 + - 0.08666992 + - -0.0042877197 + - -0.46826172 + - 0.49487305 + - -0.037994385 + - -0.12225342 + - 0.16149902 + - 0.6699219 + - 0.11102295 + - -0.09790039 + - -0.4350586 + - -0.4189453 + - 0.36376953 + - -0.27807617 + - -1.6953125 + - -0.7861328 + - -0.042816162 + - 0.43481445 + - 0.5102539 + - 0.037719727 + - -0.6269531 + - -0.8925781 + - -0.3461914 + - 0.28271484 + - -0.3173828 + - -0.8359375 + - 0.81884766 + - -0.025634766 + - -1.0087891 + - 0.051361084 + - -0.5576172 + - 0.4494629 + - 0.15014648 + - -0.30273438 + - -0.47631836 + - 0.49731445 + - 1.28125 + - -0.33496094 + - 0.46240234 + - 0.44091797 + - 1.1992188 + - -0.6147461 + - -0.2121582 + - 0.13452148 + - 1.1835938 + - 0.27856445 + - 0.026153564 + - 1.4316406 + - -0.08312988 + - -0.25976563 + - 0.1541748 + - -0.49804688 + - -0.0099487305 + - -0.23522949 + - 0.31103516 + - 0.08532715 + - -0.3959961 + - 0.2553711 + - 0.14807129 + - -0.049591064 + - -0.50097656 + - -0.10668945 + - -0.34399414 + - 0.54541016 + - -0.94628906 + - 0.29467773 + - -0.59472656 + - 0.1361084 + - 0.06640625 + - -0.030883789 + - -0.55908203 + - -0.41186523 + - -0.95947266 + - -1.0517578 + - 0.14428711 + - -0.16186523 + - -1.5146484 + - 0.19555664 + - -0.5473633 + - -0.073913574 + - -0.24536133 + - -0.47998047 + - -1.0888672 + - -0.021987915 + - -0.5107422 + - -0.4970703 + - -0.78027344 + - -0.3671875 + - 0.46923828 + - 0.011650085 + - 0.09283447 + - -0.8222656 + - -0.7807617 + - 1.0908203 + - -0.5229492 + - -0.75927734 + - -0.47705078 + - -0.4206543 + - 0.39086914 + - 1.2792969 + - 0.5048828 + - -0.09899902 + - -0.6352539 + - -0.00077199936 + - 0.80078125 + - -0.8129883 + - 0.95166016 + - -0.70996094 + - -0.37841797 + - 0.17565918 + - 0.20361328 + - -0.037200928 + - 0.057159424 + - -0.03933716 + - 0.16137695 + - -0.14086914 + - -1.0478516 + - -1.3056641 + - -0.80126953 + - 1.4951172 + - 0.74902344 + - -0.73583984 + - -0.38842773 + - -1.3876953 + - 0.7602539 + - -0.45458984 + - 0.105163574 + - 0.92871094 + - -0.5180664 + - 0.62939453 + - 1.828125 + - 0.13671875 + - -0.5917969 + - 0.17919922 + - -0.79248047 + - -0.29663086 + - 0.5097656 + - 0.33911133 + - 0.3540039 + - -0.50341797 + - 0.1182251 + - -0.15393066 + - -1.3339844 + - -0.28442383 + - 0.59716797 + - 0.8642578 + - -1.6845703 + - 0.15039063 + - 1.9853516 + - 0.30371094 + - 0.041412354 + - 0.29492188 + - 0.30395508 + - -0.5595703 + - 0.56396484 + - 1.0253906 + - -0.6640625 + - -0.031311035 + - -0.15283203 + - -0.055267334 + - -0.4880371 + - -0.19238281 + - -0.5 + - -0.7084961 + - 0.42822266 + - 0.1541748 + - -0.014923096 + - 1.0146484 + - -1.2333984 + - -0.13317871 + - 0.6503906 + - 0.8798828 + - 0.14440918 + - -0.7792969 + - 0.2890625 + - 0.35961914 + - -0.072509766 + - -0.14611816 + - -0.041137695 +- - 0.4428711 + - 0.6118164 + - 0.07043457 + - -0.5917969 + - 0.88183594 + - -0.10839844 + - 0.0881958 + - -0.20483398 + - 1.9345703 + - 0.6230469 + - 0.59521484 + - 0.18737793 + - 0.030548096 + - -0.078308105 + - 0.79589844 + - -0.23474121 + - -0.8720703 + - 1.6923828 + - 0.12597656 + - -1.9267578 + - -0.34472656 + - -1.9326172 + - 0.89990234 + - -0.2006836 + - 0.024230957 + - 0.2878418 + - 0.3642578 + - 0.17956543 + - -0.51123047 + - 0.025817871 + - -0.8964844 + - 0.14147949 + - -0.39257813 + - -0.8486328 + - 0.005218506 + - 0.42358398 + - 0.23181152 + - 1.1630859 + - -1.1455078 + - 0.3388672 + - -2.1484375 + - -1.0146484 + - -0.2841797 + - 0.021499634 + - 0.16235352 + - 0.39453125 + - -0.9511719 + - 0.41064453 + - -0.15563965 + - -0.484375 + - -0.07080078 + - 0.07312012 + - 0.56103516 + - 0.028213501 + - -0.027938843 + - 0.43896484 + - 1.0136719 + - 0.7788086 + - -0.5644531 + - -1.9824219 + - -0.011169434 + - 0.50634766 + - -0.39331055 + - -0.3334961 + - -1.1679688 + - -0.07208252 + - 0.008544922 + - 0.7788086 + - -0.10021973 + - -0.30859375 + - 0.35888672 + - -0.44848633 + - -0.08679199 + - -1.0791016 + - 1.3193359 + - -1.0273438 + - 0.34228516 + - -0.45385742 + - 0.8027344 + - 0.50634766 + - 0.703125 + - -0.96533203 + - -0.042938232 + - -1.0927734 + - 0.35205078 + - -0.56689453 + - -0.5341797 + - 0.23571777 + - -2.0234375 + - -0.26342773 + - 0.1998291 + - 0.7739258 + - 0.17797852 + - 1.2255859 + - 0.9814453 + - -0.2902832 + - 1.2080078 + - 0.50097656 + - 0.2479248 + - -0.2166748 + - 0.29052734 + - -0.5004883 + - 0.26513672 + - 0.5024414 + - -0.042266846 + - -0.013465881 + - -0.6376953 + - 0.64501953 + - -1.7958984 + - 0.25512695 + - -0.20458984 + - -0.12927246 + - 0.19665527 + - 0.8076172 + - -0.96777344 + - 0.26391602 + - -0.5649414 + - -0.58740234 + - -0.15466309 + - 0.7392578 + - 0.5336914 + - 0.60253906 + - 1.1875 + - -0.37719727 + - 0.8198242 + - -0.2401123 + - 0.40527344 + - 0.17114258 + - -0.32128906 + - -0.75439453 + - 0.056488037 + - 0.16491699 + - 0.6899414 + - -0.6171875 + - -0.05316162 + - 0.43017578 + - -0.6074219 + - 0.040374756 + - -0.8618164 + - -0.7192383 + - 0.7402344 + - -0.42138672 + - 0.26831055 + - -1.5429688 + - 0.1706543 + - 1.2158203 + - -0.17077637 + - -0.13964844 + - -0.5449219 + - -0.59033203 + - -0.7783203 + - -0.18786621 + - -0.34838867 + - 0.6230469 + - -0.5878906 + - -0.90234375 + - -0.7324219 + - -0.81933594 + - 0.4819336 + - -1.1591797 + - 1.2109375 + - -1.0517578 + - 0.25219727 + - 1.2841797 + - 0.06347656 + - -0.72021484 + - -0.3671875 + - 0.07330322 + - -0.022644043 + - -0.3713379 + - -0.008430481 + - 0.3564453 + - -0.8354492 + - -0.59521484 + - -0.40405273 + - -0.027923584 + - -0.3100586 + - -1.109375 + - -0.030593872 + - 0.14086914 + - -1.2128906 + - 0.03488159 + - 0.35424805 + - -1.5683594 + - 0.17773438 + - -0.66796875 + - -1.9804688 + - -0.35327148 + - -0.2927246 + - -1.2011719 + - -0.4165039 + - 0.36645508 + - -0.049957275 + - -0.87353516 + - -0.9086914 + - 0.4790039 + - -1.4599609 + - 0.7866211 + - -0.27490234 + - 0.08477783 + - 0.2220459 + - 0.0017213821 + - -1.0927734 + - -0.006439209 + - -0.62060547 + - -0.68115234 + - 0.4572754 + - -0.61572266 + - -0.7871094 + - -1.3847656 + - 1.5566406 + - 0.2680664 + - 0.8466797 + - -0.2578125 + - -0.76416016 + - 0.6484375 + - -0.05279541 + - -0.1307373 + - -0.11853027 + - -0.6357422 + - -0.17700195 + - 0.9472656 + - -0.4958496 + - 0.015464783 + - -0.23168945 + - -1.6748047 + - -0.8911133 + - 0.86865234 + - 1.0722656 + - 0.34228516 + - 0.7182617 + - -0.5488281 + - -0.45166016 + - -0.3022461 + - 0.45336914 + - -0.28808594 + - -0.7626953 + - 0.016067505 + - 0.63183594 + - 0.46923828 + - -0.07373047 + - 1.7832031 + - -0.41796875 + - -0.89453125 + - 0.07757568 + - -0.29589844 + - -1.0673828 + - 1.3320313 + - 1.4160156 + - 0.20703125 + - -0.1060791 + - 0.1508789 + - 0.37231445 + - 0.05053711 + - -0.68896484 + - 0.7397461 + - 0.15771484 + - 0.5595703 + - -0.8198242 + - -0.17712402 + - -0.2479248 + - -0.066345215 + - 0.4194336 + - 1.0517578 + - -1.6650391 + - 0.90283203 + - 0.22937012 + - -0.5908203 + - -0.79785156 + - -0.003993988 + - -0.47314453 + - 0.19116211 + - -0.39038086 + - 0.6333008 + - -0.28686523 + - -0.8720703 + - 0.080200195 + - -1.2587891 + - 0.22790527 + - 0.55126953 + - -0.47485352 + - -0.20471191 + - 0.75390625 + - -1.0488281 + - 0.9902344 + - 1.2275391 + - 0.40966797 + - -0.36791992 + - 0.54833984 + - -0.32788086 + - 0.2208252 + - 1.1289063 + - -0.017410278 + - -0.67089844 + - 0.7236328 + - 0.20788574 + - 0.55566406 + - 0.7104492 + - -0.16589355 + - 0.57958984 + - 1.1494141 + - -0.15930176 + - -0.4963379 + - 0.016326904 + - 1.5634766 + - -0.5029297 + - 1.2011719 + - -1.0029297 + - -0.3557129 + - -0.31079102 + - -0.12670898 + - 0.81933594 + - 0.75683594 + - 1.1630859 + - 1.6669922 + - -0.8022461 + - -0.3034668 + - 0.3798828 + - -0.71484375 + - -0.7470703 + - 1.1904297 + - -0.95654297 + - 0.30297852 + - 0.16992188 + - 0.8173828 + - -0.8798828 + - 1.1376953 + - -0.4543457 + - 0.6142578 + - -0.47680664 + - 1.1181641 + - 0.01398468 + - -0.49560547 + - -0.039031982 + - 0.2878418 + - -0.71533203 + - 0.82128906 + - -0.03768921 + - 0.60546875 + - 0.7578125 + - -0.3322754 + - 0.86376953 + - -0.71435547 + - 0.7597656 + - -1.3496094 + - 0.18652344 + - -0.39990234 + - 0.31103516 + - 0.16809082 + - 1.2626953 + - -0.42919922 + - 0.2434082 + - 0.83935547 + - -1.3994141 + - 0.34472656 + - -0.68603516 + - -0.28759766 + - 0.4663086 + - 0.6816406 + - -0.48120117 + - -0.11029053 + - -0.48339844 + - 0.1706543 + - 0.29614258 + - -0.7290039 + - -0.87158203 + - 0.8457031 + - 0.57128906 + - 0.1640625 + - -0.1739502 + - -0.16394043 + - 0.8652344 + - -0.38671875 + - 0.5625 + - -0.30493164 + - 1.8251953 + - 0.041931152 + - 0.17285156 + - -1.0107422 + - -0.20788574 + - 1.1005859 + - 0.7973633 + - -1.0029297 + - 0.67041016 + - -0.96240234 + - 0.45166016 + - -0.32202148 + - -0.97753906 + - 1.7080078 + - -0.04626465 + - 0.4404297 + - 0.28833008 + - 0.32006836 + - -0.5341797 + - -0.74658203 + - -1.28125 + - -0.2076416 + - -0.57958984 + - 0.88134766 + - -0.21875 + - -0.51171875 + - 0.20214844 + - -0.9536133 + - -0.89160156 + - 0.6279297 + - -0.08929443 + - 1.2490234 + - -0.3083496 + - 0.5253906 + - -1.5771484 + - 0.86572266 + - -0.16223145 + - -0.6455078 + - -0.9008789 + - -0.68896484 + - -0.55566406 + - 0.54785156 + - -0.2052002 + - 1.0820313 + - 0.5390625 + - 0.2454834 + - -0.0053596497 + - 0.09838867 + - -0.08288574 + - 0.6616211 + - -0.06573486 + - -0.8120117 + - -0.08306885 + - 0.12176514 + - -1.4072266 + - 0.6533203 + - 0.49536133 + - 0.48339844 + - -0.6142578 + - 0.06011963 + - 0.4951172 + - -0.33935547 + - -0.85058594 + - -0.8510742 + - 0.10028076 + - 0.64501953 + - 0.62841797 + - 0.79052734 + - -0.8486328 + - -0.76708984 + - 0.38891602 + - 0.5917969 + - -0.06939697 + - -0.13366699 + - -0.8964844 + - -0.76660156 + - 1.3134766 + - 0.98046875 + - 0.37158203 + - 0.04675293 + - -1.2890625 + - 0.17102051 + - -0.16772461 + - -0.10760498 + - -0.111816406 + - 0.20251465 + - -0.65527344 + - 0.2800293 + - -1.8037109 + - 0.15270996 + - 0.25024414 + - 0.6713867 + - 0.67578125 + - -1.0322266 + - -0.4140625 + - -0.59277344 + - 0.028778076 + - -1.3515625 + - 0.12548828 + - 0.87353516 + - 0.87060547 + - -0.18518066 + - 0.7949219 + - -0.7011719 + - -0.28759766 + - 0.39013672 + - 0.43139648 + - -0.053955078 + - -0.60498047 + - 0.6381836 + - 0.20996094 + - 0.09857178 + - -0.7402344 + - 0.24731445 + - -0.41430664 + - -0.49365234 + - -0.7817383 + - -0.35766602 + - -0.53759766 + - -0.13439941 + - 0.03010559 + - 0.47070313 + - 0.16564941 + - 1.0439453 + - 0.7026367 + - 0.3251953 + - 0.021118164 + - -0.25976563 + - 1.4033203 + - 0.3383789 + - -0.0637207 + - 0.8149414 + - -0.7651367 + - -0.5332031 + - -0.19335938 + - 0.19458008 + - -0.61083984 + - 0.07684326 + - -0.6982422 + - -0.38989258 + - 0.37841797 + - 0.5966797 + - -1.9882813 + - -0.36767578 + - -2.0214844 + - 0.9682617 + - 0.46826172 + - -0.49829102 + - -0.20861816 + - -0.15332031 + - -0.13891602 + - 1.8779297 + - -0.18640137 + - 0.38134766 + - -0.1373291 + - -0.29492188 + - 0.42871094 + - -0.24523926 + - 0.16320801 + - 0.8408203 + - -0.34985352 + - 0.5307617 + - -0.14685059 + - 0.7729492 + - -0.11444092 + - -0.23522949 + - 1.2089844 + - -1.5595703 + - 0.09820557 + - -1.3476563 + - 0.6196289 + - -1.1464844 + - -0.47045898 + - -0.10656738 + - -1.3115234 + - 0.4309082 + - 0.054748535 + - 0.80078125 + - 0.43359375 + - -0.22290039 + - 0.55908203 + - -8.1484375 + - -0.7236328 + - -0.4831543 + - -0.21447754 + - 0.51904297 + - 0.5449219 + - 0.8520508 + - -0.8852539 + - 0.36865234 + - -0.1694336 + - -0.32250977 + - 0.12176514 + - 0.92578125 + - 0.38891602 + - 0.79296875 + - 0.46875 + - 0.9213867 + - 0.9970703 + - -0.32739258 + - 1.2900391 + - -0.1517334 + - 0.18640137 + - -0.6113281 + - 0.060821533 + - 0.3527832 + - -0.7915039 + - -0.3942871 + - 1.2158203 + - -0.8051758 + - 0.13598633 + - 0.21057129 + - -0.66552734 + - 1.5957031 + - 0.44262695 + - -0.24023438 + - -0.3984375 + - -1.0517578 + - -0.36499023 + - -0.5966797 + - 0.60546875 + - 1.2324219 + - 0.21520996 + - -0.18481445 + - -0.0066490173 + - -0.08239746 + - 0.7993164 + - -0.81884766 + - -1.6660156 + - -1.2861328 + - -0.8535156 + - 0.15856934 + - 0.6230469 + - 0.60595703 + - 0.5234375 + - -0.93603516 + - 0.7529297 + - 0.06738281 + - -0.002035141 + - -0.92285156 + - -0.25512695 + - -0.50878906 + - -0.7944336 + - -0.44970703 + - -0.64501953 + - 0.8569336 + - 0.12030029 + - -0.08343506 + - -0.5126953 + - 0.16540527 + - 1.6054688 + - -0.3947754 + - 0.34350586 + - -0.43066406 + - -0.04083252 + - 0.2956543 + - -0.5175781 + - 0.6567383 + - 0.57470703 + - 0.6694336 + - 0.13891602 + - 0.9790039 + - 0.16503906 + - -0.12017822 + - -0.8745117 + - 0.057861328 + - 0.24194336 + - -0.012207031 + - 0.40722656 + - -0.34936523 + - -0.1998291 + - 0.41210938 + - -0.17858887 + - -0.011474609 + - 0.10394287 + - -0.1048584 + - 0.037384033 + - 1.1806641 + - -0.68896484 + - 0.7397461 + - -0.7661133 + - -0.3540039 + - 0.6098633 + - -0.93066406 + - -0.49047852 + - -0.29418945 + - -1.4736328 + - -1.0498047 + - -1.2509766 + - -0.546875 + - -1.4882813 + - 0.4802246 + - -0.79052734 + - -0.24499512 + - -0.5517578 + - -0.08282471 + - -0.47705078 + - 0.18701172 + - 0.47827148 + - -0.21008301 + - -0.83154297 + - -0.106933594 + - 0.041656494 + - -0.09887695 + - 0.58447266 + - -0.80859375 + - -1.1503906 + - 0.19140625 + - 0.50146484 + - -0.8930664 + - -0.037750244 + - -0.4411621 + - 0.50439453 + - 1.484375 + - -0.8754883 + - -0.3227539 + - -0.98583984 + - -0.09124756 + - 0.48510742 + - -0.2775879 + - 0.80371094 + - -0.5683594 + - -0.25732422 + - 0.7504883 + - -0.37426758 + - 0.2199707 + - 0.37426758 + - -0.03375244 + - -0.40771484 + - -0.18078613 + - -0.48095703 + - -1.5078125 + - -0.6743164 + - 0.82177734 + - 0.25073242 + - -0.8261719 + - 0.33862305 + - -1.2646484 + - 0.8666992 + - -0.27392578 + - -0.34399414 + - -0.42333984 + - -0.4116211 + - 0.8027344 + - 1.1503906 + - -1.2041016 + - 0.35620117 + - -0.00016129017 + - -1.953125 + - -0.6035156 + - 0.58154297 + - 0.08703613 + - 0.48266602 + - -0.35180664 + - -0.11047363 + - 0.65966797 + - -1.4921875 + - -0.14086914 + - -0.2130127 + - 1.0244141 + - -1.4472656 + - 0.56152344 + - 1.734375 + - 0.09698486 + - -0.5415039 + - -0.1340332 + - 0.7583008 + - -0.2722168 + - 1.0488281 + - 1.0498047 + - 0.23254395 + - -0.15222168 + - 0.18005371 + - 0.097839355 + - -1.6386719 + - -0.6035156 + - -0.91748047 + - -0.93847656 + - 1.0576172 + - 0.703125 + - 0.70410156 + - 0.8198242 + - -2.25 + - -0.6357422 + - 0.35058594 + - 0.75146484 + - -0.12322998 + - -1.0859375 + - 0.50634766 + - -0.67822266 + - 0.7495117 + - -0.27685547 + - -0.13537598 diff --git a/backends/candle/tests/snapshots/test_flash_gte__gte_single.snap b/backends/candle/tests/snapshots/test_flash_gte__gte_single.snap new file mode 100644 index 00000000..96c169b0 --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_gte__gte_single.snap @@ -0,0 +1,773 @@ +--- +source: backends/candle/tests/test_flash_gte.rs +assertion_line: 48 +expression: embeddings_single +--- +- - 0.44262695 + - 0.6113281 + - 0.07098389 + - -0.5908203 + - 0.88134766 + - -0.10870361 + - 0.08959961 + - -0.20568848 + - 1.9335938 + - 0.62353516 + - 0.5957031 + - 0.18664551 + - 0.030349731 + - -0.07714844 + - 0.7963867 + - -0.23425293 + - -0.8720703 + - 1.6923828 + - 0.12585449 + - -1.9277344 + - -0.34448242 + - -1.9326172 + - 0.9003906 + - -0.20056152 + - 0.023971558 + - 0.28833008 + - 0.3647461 + - 0.17883301 + - -0.51123047 + - 0.02519226 + - -0.89453125 + - 0.14074707 + - -0.3918457 + - -0.84814453 + - 0.0044822693 + - 0.42407227 + - 0.23144531 + - 1.1621094 + - -1.1464844 + - 0.33862305 + - -2.1484375 + - -1.0136719 + - -0.2841797 + - 0.02142334 + - 0.16271973 + - 0.3942871 + - -0.9511719 + - 0.4099121 + - -0.15612793 + - -0.484375 + - -0.071777344 + - 0.07232666 + - 0.5595703 + - 0.028564453 + - -0.027267456 + - 0.43798828 + - 1.0136719 + - 0.7792969 + - -0.56396484 + - -1.9824219 + - -0.011451721 + - 0.50683594 + - -0.39331055 + - -0.3334961 + - -1.1679688 + - -0.072387695 + - 0.008460999 + - 0.7788086 + - -0.099609375 + - -0.30981445 + - 0.3581543 + - -0.4482422 + - -0.08532715 + - -1.0791016 + - 1.3193359 + - -1.0273438 + - 0.34350586 + - -0.45288086 + - 0.8022461 + - 0.5048828 + - 0.7026367 + - -0.96533203 + - -0.04159546 + - -1.09375 + - 0.35180664 + - -0.56689453 + - -0.5341797 + - 0.23583984 + - -2.0253906 + - -0.2619629 + - 0.19995117 + - 0.7739258 + - 0.17883301 + - 1.2255859 + - 0.98095703 + - -0.2902832 + - 1.2080078 + - 0.50097656 + - 0.24719238 + - -0.21533203 + - 0.2902832 + - -0.50097656 + - 0.26489258 + - 0.5019531 + - -0.042816162 + - -0.013328552 + - -0.63916016 + - 0.64404297 + - -1.7949219 + - 0.25439453 + - -0.2043457 + - -0.12939453 + - 0.19616699 + - 0.80908203 + - -0.9667969 + - 0.26342773 + - -0.5644531 + - -0.58691406 + - -0.1541748 + - 0.7397461 + - 0.5336914 + - 0.6020508 + - 1.1865234 + - -0.3774414 + - 0.8198242 + - -0.24084473 + - 0.40527344 + - 0.17089844 + - -0.3203125 + - -0.7548828 + - 0.056518555 + - 0.16540527 + - 0.6899414 + - -0.6166992 + - -0.052642822 + - 0.43041992 + - -0.6074219 + - 0.039886475 + - -0.8613281 + - -0.71875 + - 0.7402344 + - -0.42138672 + - 0.26953125 + - -1.5439453 + - 0.17004395 + - 1.2167969 + - -0.17102051 + - -0.13879395 + - -0.5463867 + - -0.59033203 + - -0.7783203 + - -0.1875 + - -0.34838867 + - 0.6230469 + - -0.5888672 + - -0.9038086 + - -0.7319336 + - -0.8183594 + - 0.4807129 + - -1.1611328 + - 1.2109375 + - -1.0537109 + - 0.25268555 + - 1.2851563 + - 0.06317139 + - -0.7207031 + - -0.36694336 + - 0.072265625 + - -0.022918701 + - -0.3708496 + - -0.0073547363 + - 0.35791016 + - -0.8354492 + - -0.5961914 + - -0.40429688 + - -0.027389526 + - -0.31079102 + - -1.1103516 + - -0.030670166 + - 0.14013672 + - -1.2119141 + - 0.035247803 + - 0.3527832 + - -1.5673828 + - 0.1763916 + - -0.66748047 + - -1.9804688 + - -0.35351563 + - -0.29223633 + - -1.2021484 + - -0.41601563 + - 0.36669922 + - -0.051330566 + - -0.87353516 + - -0.9086914 + - 0.4794922 + - -1.4589844 + - 0.7866211 + - -0.27441406 + - 0.084106445 + - 0.22143555 + - 0.0014467239 + - -1.0917969 + - -0.0079574585 + - -0.62060547 + - -0.6816406 + - 0.45751953 + - -0.6166992 + - -0.78759766 + - -1.3847656 + - 1.5576172 + - 0.2697754 + - 0.8461914 + - -0.25756836 + - -0.765625 + - 0.6489258 + - -0.053344727 + - -0.13195801 + - -0.119628906 + - -0.6357422 + - -0.17736816 + - 0.9477539 + - -0.49682617 + - 0.016204834 + - -0.23156738 + - -1.6738281 + - -0.890625 + - 0.8666992 + - 1.0703125 + - 0.3425293 + - 0.71972656 + - -0.5498047 + - -0.45263672 + - -0.30249023 + - 0.45336914 + - -0.28588867 + - -0.7626953 + - 0.017074585 + - 0.6308594 + - 0.47094727 + - -0.07519531 + - 1.7861328 + - -0.41723633 + - -0.8935547 + - 0.077697754 + - -0.29492188 + - -1.0673828 + - 1.3300781 + - 1.4150391 + - 0.20751953 + - -0.10571289 + - 0.15100098 + - 0.37182617 + - 0.05105591 + - -0.6875 + - 0.7392578 + - 0.15649414 + - 0.5600586 + - -0.81884766 + - -0.17700195 + - -0.24841309 + - -0.06628418 + - 0.42016602 + - 1.0527344 + - -1.6660156 + - 0.90283203 + - 0.22888184 + - -0.5917969 + - -0.7973633 + - -0.0041236877 + - -0.4741211 + - 0.19104004 + - -0.390625 + - 0.63427734 + - -0.28710938 + - -0.87158203 + - 0.08068848 + - -1.2587891 + - 0.22729492 + - 0.5517578 + - -0.47558594 + - -0.20385742 + - 0.7553711 + - -1.0498047 + - 0.99121094 + - 1.2275391 + - 0.41015625 + - -0.36791992 + - 0.54833984 + - -0.3269043 + - 0.21972656 + - 1.1298828 + - -0.01737976 + - -0.6699219 + - 0.72265625 + - 0.20800781 + - 0.5566406 + - 0.7109375 + - -0.16577148 + - 0.5805664 + - 1.1494141 + - -0.15942383 + - -0.49658203 + - 0.01625061 + - 1.5625 + - -0.50390625 + - 1.2011719 + - -1.0029297 + - -0.35473633 + - -0.3100586 + - -0.12658691 + - 0.8208008 + - 0.7578125 + - 1.1611328 + - 1.6660156 + - -0.8022461 + - -0.30273438 + - 0.38012695 + - -0.71484375 + - -0.7475586 + - 1.1914063 + - -0.9560547 + - 0.30297852 + - 0.17163086 + - 0.8183594 + - -0.87841797 + - 1.1376953 + - -0.4543457 + - 0.61376953 + - -0.47851563 + - 1.1181641 + - 0.013900757 + - -0.49560547 + - -0.03945923 + - 0.28637695 + - -0.71533203 + - 0.8203125 + - -0.037322998 + - 0.6044922 + - 0.75683594 + - -0.33276367 + - 0.8647461 + - -0.7138672 + - 0.7597656 + - -1.3496094 + - 0.18701172 + - -0.3996582 + - 0.3112793 + - 0.16809082 + - 1.2617188 + - -0.42993164 + - 0.24401855 + - 0.83935547 + - -1.3994141 + - 0.34594727 + - -0.68603516 + - -0.2878418 + - 0.46655273 + - 0.68066406 + - -0.48291016 + - -0.11004639 + - -0.48364258 + - 0.17126465 + - 0.29614258 + - -0.7290039 + - -0.8725586 + - 0.8457031 + - 0.5732422 + - 0.16186523 + - -0.17407227 + - -0.16455078 + - 0.8652344 + - -0.38598633 + - 0.56396484 + - -0.30639648 + - 1.8261719 + - 0.04208374 + - 0.1743164 + - -1.0107422 + - -0.20812988 + - 1.1015625 + - 0.79833984 + - -1.0019531 + - 0.67041016 + - -0.96191406 + - 0.45092773 + - -0.32226563 + - -0.9790039 + - 1.7089844 + - -0.04675293 + - 0.44091797 + - 0.28930664 + - 0.32104492 + - -0.5336914 + - -0.7475586 + - -1.2802734 + - -0.20861816 + - -0.57958984 + - 0.8798828 + - -0.21777344 + - -0.51220703 + - 0.20239258 + - -0.953125 + - -0.8925781 + - 0.62890625 + - -0.08935547 + - 1.2490234 + - -0.30859375 + - 0.52490234 + - -1.5771484 + - 0.8647461 + - -0.16259766 + - -0.64697266 + - -0.9003906 + - -0.68896484 + - -0.55566406 + - 0.54785156 + - -0.20458984 + - 1.0810547 + - 0.5390625 + - 0.24572754 + - -0.0054397583 + - 0.097717285 + - -0.08135986 + - 0.6616211 + - -0.06652832 + - -0.8129883 + - -0.08251953 + - 0.12164307 + - -1.4072266 + - 0.65283203 + - 0.4946289 + - 0.48364258 + - -0.6142578 + - 0.060272217 + - 0.49560547 + - -0.33911133 + - -0.85058594 + - -0.8510742 + - 0.10040283 + - 0.64453125 + - 0.6279297 + - 0.7890625 + - -0.8496094 + - -0.76708984 + - 0.38916016 + - 0.59277344 + - -0.07110596 + - -0.1340332 + - -0.8955078 + - -0.7661133 + - 1.3125 + - 0.98095703 + - 0.3708496 + - 0.046966553 + - -1.2900391 + - 0.17272949 + - -0.1673584 + - -0.1071167 + - -0.11187744 + - 0.20092773 + - -0.65478516 + - 0.27978516 + - -1.8027344 + - 0.15197754 + - 0.25 + - 0.671875 + - 0.6748047 + - -1.0322266 + - -0.41308594 + - -0.5917969 + - 0.028701782 + - -1.3515625 + - 0.12524414 + - 0.87402344 + - 0.8701172 + - -0.18334961 + - 0.79541016 + - -0.7006836 + - -0.28833008 + - 0.39086914 + - 0.43115234 + - -0.05316162 + - -0.60498047 + - 0.6386719 + - 0.21044922 + - 0.09869385 + - -0.7402344 + - 0.24731445 + - -0.4140625 + - -0.49487305 + - -0.78125 + - -0.35864258 + - -0.5366211 + - -0.13464355 + - 0.030441284 + - 0.47045898 + - 0.16552734 + - 1.0458984 + - 0.7026367 + - 0.32470703 + - 0.021697998 + - -0.26098633 + - 1.4023438 + - 0.33789063 + - -0.062469482 + - 0.81396484 + - -0.765625 + - -0.5341797 + - -0.19299316 + - 0.19433594 + - -0.6113281 + - 0.07598877 + - -0.6977539 + - -0.39038086 + - 0.3774414 + - 0.5957031 + - -1.9902344 + - -0.36889648 + - -2.0195313 + - 0.9692383 + - 0.46948242 + - -0.49975586 + - -0.20837402 + - -0.1529541 + - -0.13879395 + - 1.8769531 + - -0.18579102 + - 0.38256836 + - -0.13684082 + - -0.2956543 + - 0.42749023 + - -0.24560547 + - 0.16381836 + - 0.84228516 + - -0.35009766 + - 0.53125 + - -0.14697266 + - 0.7734375 + - -0.114990234 + - -0.23522949 + - 1.2080078 + - -1.5605469 + - 0.098083496 + - -1.3466797 + - 0.62060547 + - -1.1484375 + - -0.4699707 + - -0.106933594 + - -1.3095703 + - 0.43066406 + - 0.05444336 + - 0.80126953 + - 0.4326172 + - -0.22338867 + - 0.55908203 + - -8.1484375 + - -0.7246094 + - -0.48291016 + - -0.21386719 + - 0.51953125 + - 0.5449219 + - 0.8515625 + - -0.88378906 + - 0.36865234 + - -0.16955566 + - -0.3244629 + - 0.12188721 + - 0.92529297 + - 0.38891602 + - 0.7944336 + - 0.46850586 + - 0.921875 + - 0.9980469 + - -0.32739258 + - 1.2910156 + - -0.15161133 + - 0.18591309 + - -0.6123047 + - 0.060546875 + - 0.35327148 + - -0.7915039 + - -0.3947754 + - 1.2158203 + - -0.8046875 + - 0.13659668 + - 0.21166992 + - -0.6669922 + - 1.5957031 + - 0.44262695 + - -0.24145508 + - -0.39770508 + - -1.0517578 + - -0.36450195 + - -0.5961914 + - 0.60498047 + - 1.2314453 + - 0.21472168 + - -0.18359375 + - -0.0063056946 + - -0.08239746 + - 0.80029297 + - -0.8183594 + - -1.6660156 + - -1.2861328 + - -0.85253906 + - 0.15881348 + - 0.6225586 + - 0.60546875 + - 0.5239258 + - -0.9355469 + - 0.7529297 + - 0.06768799 + - -0.0025157928 + - -0.9238281 + - -0.25390625 + - -0.5097656 + - -0.79345703 + - -0.4501953 + - -0.6459961 + - 0.8564453 + - 0.121154785 + - -0.08404541 + - -0.51416016 + - 0.16540527 + - 1.6054688 + - -0.39404297 + - 0.34277344 + - -0.43017578 + - -0.040618896 + - 0.29614258 + - -0.5180664 + - 0.6567383 + - 0.57373047 + - 0.66845703 + - 0.14013672 + - 0.98046875 + - 0.16442871 + - -0.12042236 + - -0.8745117 + - 0.057556152 + - 0.24316406 + - -0.012084961 + - 0.40649414 + - -0.3486328 + - -0.20080566 + - 0.4116211 + - -0.17822266 + - -0.011131287 + - 0.10406494 + - -0.10601807 + - 0.038391113 + - 1.1806641 + - -0.68847656 + - 0.73779297 + - -0.7651367 + - -0.35229492 + - 0.6113281 + - -0.93066406 + - -0.49072266 + - -0.2944336 + - -1.4726563 + - -1.0498047 + - -1.2509766 + - -0.54833984 + - -1.4892578 + - 0.48120117 + - -0.7919922 + - -0.24487305 + - -0.5517578 + - -0.08355713 + - -0.4765625 + - 0.1875 + - 0.4790039 + - -0.21032715 + - -0.8310547 + - -0.10638428 + - 0.042144775 + - -0.098083496 + - 0.5839844 + - -0.80859375 + - -1.1503906 + - 0.19128418 + - 0.5019531 + - -0.8935547 + - -0.037200928 + - -0.4416504 + - 0.50390625 + - 1.4833984 + - -0.87597656 + - -0.32202148 + - -0.9848633 + - -0.09112549 + - 0.48486328 + - -0.2775879 + - 0.8051758 + - -0.56884766 + - -0.2565918 + - 0.75097656 + - -0.37402344 + - 0.21936035 + - 0.37524414 + - -0.03427124 + - -0.40771484 + - -0.18054199 + - -0.48168945 + - -1.5068359 + - -0.67333984 + - 0.82128906 + - 0.25219727 + - -0.82714844 + - 0.33935547 + - -1.2626953 + - 0.86621094 + - -0.27441406 + - -0.34350586 + - -0.42382813 + - -0.41186523 + - 0.80371094 + - 1.1513672 + - -1.2041016 + - 0.3552246 + - -0.00065660477 + - -1.953125 + - -0.60253906 + - 0.58154297 + - 0.086364746 + - 0.48217773 + - -0.35253906 + - -0.11077881 + - 0.66064453 + - -1.4921875 + - -0.14025879 + - -0.21313477 + - 1.0234375 + - -1.4482422 + - 0.56103516 + - 1.734375 + - 0.09710693 + - -0.54003906 + - -0.13305664 + - 0.75878906 + - -0.27246094 + - 1.0488281 + - 1.0507813 + - 0.23254395 + - -0.15209961 + - 0.18017578 + - 0.09790039 + - -1.6376953 + - -0.60253906 + - -0.9165039 + - -0.9379883 + - 1.0585938 + - 0.703125 + - 0.70458984 + - 0.8203125 + - -2.2519531 + - -0.63623047 + - 0.35058594 + - 0.7504883 + - -0.12408447 + - -1.0839844 + - 0.50683594 + - -0.6796875 + - 0.7495117 + - -0.27783203 + - -0.13562012 diff --git a/backends/candle/tests/snapshots/test_flash_jina_code__jina_code_batch.snap b/backends/candle/tests/snapshots/test_flash_jina_code__jina_code_batch.snap new file mode 100644 index 00000000..0ad889a9 --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_jina_code__jina_code_batch.snap @@ -0,0 +1,2309 @@ +--- +source: backends/candle/tests/test_flash_jina_code.rs +assertion_line: 37 +expression: embeddings_batch +--- +- - -0.1508789 + - -0.021652222 + - -0.083984375 + - -0.12890625 + - 0.3581543 + - 0.29663086 + - -0.7705078 + - -0.6225586 + - 0.5058594 + - 0.32861328 + - -0.18688965 + - 0.50927734 + - 0.45458984 + - 0.6899414 + - 0.45410156 + - 0.018234253 + - 0.025665283 + - 0.68310547 + - -0.18969727 + - 0.0047683716 + - -0.36035156 + - 0.34887695 + - -0.19995117 + - -0.16455078 + - -0.32885742 + - 0.109375 + - 0.3762207 + - -0.46166992 + - -0.5488281 + - 0.61572266 + - -1.0830078 + - -0.33911133 + - -0.16662598 + - -0.18261719 + - -0.17785645 + - -0.17773438 + - 0.375 + - 0.5800781 + - -0.3564453 + - -0.41235352 + - -0.61376953 + - -0.45410156 + - -0.49023438 + - 0.31347656 + - -0.51220703 + - -0.3203125 + - -0.18005371 + - -0.64941406 + - -0.66015625 + - -1.0107422 + - -0.72265625 + - -0.3269043 + - 0.53125 + - 0.051116943 + - 0.20776367 + - -0.28881836 + - -0.17541504 + - -0.008453369 + - -0.12207031 + - 0.021240234 + - 0.20898438 + - -0.4206543 + - 0.32006836 + - 0.3486328 + - -0.33764648 + - 0.27734375 + - -0.6171875 + - 0.57666016 + - -0.29956055 + - 0.07330322 + - -0.22668457 + - -0.31298828 + - 0.7661133 + - 0.0076026917 + - -0.24084473 + - 0.049438477 + - 0.044830322 + - -0.10070801 + - -0.058135986 + - 0.10571289 + - -0.14196777 + - 0.48706055 + - -0.4309082 + - -1.0244141 + - -0.023452759 + - -0.63134766 + - -0.4963379 + - -0.092163086 + - -0.19934082 + - -0.5859375 + - 0.11639404 + - 0.3798828 + - 0.42504883 + - 0.39770508 + - -0.2290039 + - 0.3659668 + - -0.4477539 + - 0.22143555 + - 0.53466797 + - -0.7084961 + - -0.07098389 + - -0.1071167 + - -0.3251953 + - 0.6298828 + - -0.75097656 + - -1.0712891 + - -0.68115234 + - 0.32861328 + - -0.21203613 + - -0.6411133 + - -0.5205078 + - 0.734375 + - -0.1307373 + - 0.63720703 + - -0.32641602 + - -0.18579102 + - 0.6386719 + - -0.12561035 + - -1.1132813 + - 0.22912598 + - -0.18908691 + - 0.6010742 + - -0.390625 + - -0.64501953 + - -0.08770752 + - -0.44580078 + - 0.8491211 + - 0.22497559 + - -0.24682617 + - -1.1083984 + - -0.1541748 + - -0.55859375 + - -0.73291016 + - 1.0507813 + - 0.3659668 + - -0.18383789 + - 0.5214844 + - 0.23706055 + - 0.20666504 + - 0.07550049 + - 0.0065345764 + - 0.058654785 + - 0.32348633 + - 0.23474121 + - 0.31713867 + - -0.75097656 + - -0.2902832 + - -0.42895508 + - 0.18774414 + - -0.13208008 + - 0.24035645 + - -0.2376709 + - 1.0029297 + - -0.20349121 + - 0.09234619 + - 0.3557129 + - -0.2644043 + - -0.95166016 + - -0.07922363 + - 0.27246094 + - -0.3244629 + - -0.265625 + - -0.062927246 + - 0.57958984 + - -0.28027344 + - 0.13391113 + - 0.12854004 + - 0.29614258 + - -0.24584961 + - 0.2290039 + - 0.29907227 + - -0.66748047 + - 0.25756836 + - 0.21704102 + - 0.28051758 + - 0.3005371 + - 0.14172363 + - 0.09967041 + - 0.5019531 + - 0.5756836 + - 0.043060303 + - 0.25219727 + - -0.7246094 + - -1 + - -0.45947266 + - -0.091552734 + - -0.18322754 + - 0.40478516 + - 0.15002441 + - 0.5493164 + - 0.62597656 + - -0.18688965 + - -0.010215759 + - 0.11853027 + - 0.1439209 + - -0.11621094 + - -0.12097168 + - 0.42236328 + - 1.1953125 + - 0.2019043 + - 0.40551758 + - 0.17321777 + - 0.47021484 + - 0.40454102 + - -0.2788086 + - 0.15478516 + - -1.3613281 + - 0.4345703 + - -0.60791016 + - -0.7006836 + - 0.33862305 + - -0.04901123 + - 1.2285156 + - 1.1884766 + - 0.8808594 + - -0.038116455 + - -0.41137695 + - 0.059417725 + - 0.18322754 + - -0.38623047 + - -0.16040039 + - -0.7553711 + - -0.13977051 + - 0.2878418 + - 0.34960938 + - -0.63671875 + - 0.26660156 + - 0.1496582 + - -0.021224976 + - -0.43286133 + - 0.32348633 + - -0.5629883 + - 0.0019836426 + - 0.4897461 + - 0.9741211 + - 0.7949219 + - -0.21728516 + - 0.49267578 + - -0.05432129 + - -0.0016565323 + - -0.40942383 + - -0.5283203 + - -0.12475586 + - -0.8540039 + - -0.39111328 + - 0.7441406 + - 0.31640625 + - -0.1171875 + - -0.17236328 + - -0.9267578 + - -0.44848633 + - -0.14160156 + - 0.15588379 + - 0.1862793 + - 0.02947998 + - -0.78564453 + - 0.61279297 + - -0.22766113 + - 0.27075195 + - -0.13293457 + - -0.4345703 + - 0.3515625 + - -0.25708008 + - 1.2001953 + - -0.73535156 + - 0.22473145 + - 0.28198242 + - 0.3071289 + - 0.22460938 + - -0.8984375 + - 3.0742188 + - 0.6484375 + - -0.05090332 + - -0.13964844 + - 0.040527344 + - -0.34643555 + - 0.16931152 + - 0.26733398 + - -0.029632568 + - 0.4873047 + - 0.23852539 + - -0.62841797 + - -0.8491211 + - -0.27905273 + - -0.38623047 + - -0.33276367 + - 0.0435791 + - -0.09240723 + - 0.025894165 + - -0.03277588 + - 0.80322266 + - 0.23010254 + - 0.57128906 + - 0.014907837 + - 0.3269043 + - 0.50927734 + - -0.4892578 + - 0.28051758 + - 0.2019043 + - 0.5722656 + - -0.31958008 + - -0.017333984 + - 0.8300781 + - -0.26489258 + - -0.5722656 + - -0.4296875 + - 0.4033203 + - -0.05871582 + - -0.057495117 + - -0.43188477 + - 0.032196045 + - 0.124572754 + - 0.56689453 + - 0.5800781 + - -1.1533203 + - -1.1044922 + - 0.026779175 + - 0.079711914 + - 0.30908203 + - 0.6635742 + - 0.07446289 + - 0.52783203 + - -0.46826172 + - -0.2368164 + - 0.103149414 + - -0.6875 + - 1.0712891 + - 0.02104187 + - 0.005466461 + - 0.23547363 + - 0.52197266 + - -0.4609375 + - 0.66259766 + - 0.47021484 + - -0.51416016 + - -0.024749756 + - -0.0725708 + - 0.47143555 + - 0.15820313 + - -0.111450195 + - -0.055847168 + - 0.21459961 + - -0.2055664 + - 0.61279297 + - 1.1289063 + - -0.12939453 + - 0.29101563 + - 0.123046875 + - 0.44360352 + - 0.12878418 + - -0.1875 + - 0.23376465 + - -0.50146484 + - 0.55029297 + - -0.13134766 + - 0.7426758 + - -0.35620117 + - 0.22460938 + - 0.2841797 + - -0.6254883 + - -0.32788086 + - 0.21362305 + - -0.22875977 + - 0.40551758 + - 0.2849121 + - -0.01008606 + - -0.19689941 + - 0.19104004 + - 0.37158203 + - -0.4765625 + - -0.29541016 + - -0.58691406 + - -0.36523438 + - 0.9301758 + - -0.11981201 + - -0.6738281 + - -0.2524414 + - 0.045837402 + - 0.86816406 + - 1.1904297 + - -0.8959961 + - 0.6972656 + - 0.15039063 + - -0.33618164 + - 0.58447266 + - 0.4025879 + - -0.29370117 + - -0.123413086 + - -0.19104004 + - -0.2697754 + - -0.34545898 + - 0.12683105 + - -0.32641602 + - -0.24072266 + - -0.3642578 + - -0.27441406 + - -0.1282959 + - 0.24328613 + - -0.8959961 + - -0.30493164 + - -0.3317871 + - 0.21130371 + - 0.008087158 + - 0.49145508 + - -0.60253906 + - 0.85791016 + - -0.11578369 + - 0.97558594 + - -0.66259766 + - -0.6879883 + - 0.28881836 + - -0.1829834 + - -0.46411133 + - 0.32348633 + - 0.27734375 + - 0.19104004 + - 1.0107422 + - -0.3618164 + - 0.74902344 + - 0.7216797 + - 0.8227539 + - -0.34301758 + - 0.1430664 + - -0.07513428 + - 0.03668213 + - 0.66748047 + - -0.2902832 + - 0.11785889 + - 0.22033691 + - -0.41625977 + - -0.9667969 + - -0.3017578 + - 0.33032227 + - -0.5371094 + - -0.4189453 + - -0.203125 + - -0.20581055 + - 0.28979492 + - 0.22973633 + - -0.37890625 + - 0.039154053 + - -0.6743164 + - 0.52197266 + - -0.103881836 + - -0.80322266 + - -0.011245728 + - 0.34814453 + - 0.112976074 + - -0.6484375 + - -0.06048584 + - 0.24633789 + - -0.10266113 + - 0.703125 + - 0.29614258 + - 0.38720703 + - -0.13232422 + - -0.2602539 + - -0.1907959 + - 0.22265625 + - 0.26098633 + - 0.21582031 + - 0.14697266 + - -0.15429688 + - 0.52783203 + - 0.056488037 + - -0.64501953 + - 0.34765625 + - 0.09918213 + - -0.08380127 + - -0.18518066 + - 0.18469238 + - 0.068115234 + - 0.6503906 + - -0.21166992 + - -0.0158844 + - 0.5449219 + - -0.014122009 + - -0.6640625 + - 0.2878418 + - -0.2524414 + - 0.122558594 + - -1.0585938 + - 0.20898438 + - 0.014175415 + - 0.010635376 + - -0.021636963 + - -0.6635742 + - 0.59765625 + - 0.3203125 + - -0.41210938 + - -0.016555786 + - -0.0791626 + - 0.7841797 + - -0.21826172 + - -0.38964844 + - -0.29003906 + - 0.16027832 + - 0.50634766 + - -0.08703613 + - 0.54248047 + - 0.10015869 + - -0.18688965 + - 0.032928467 + - -0.6484375 + - 0.26489258 + - 0.75 + - -0.07922363 + - -0.14099121 + - -0.31689453 + - 0.28588867 + - 0.08282471 + - -0.3479004 + - 0.44995117 + - -0.15490723 + - 0.22106934 + - 0.33862305 + - -0.26586914 + - 0.8334961 + - 0.5541992 + - 0.11999512 + - 0.5229492 + - 0.36791992 + - 0.28881836 + - -0.3918457 + - -0.048461914 + - 0.42089844 + - -0.2709961 + - 0.012794495 + - -0.15930176 + - 1.0332031 + - 0.5439453 + - -0.107788086 + - -0.115600586 + - 0.625 + - -0.16564941 + - -0.0096588135 + - 0.16430664 + - -0.23791504 + - 0.28735352 + - -0.12408447 + - 0.040100098 + - -0.47485352 + - -0.08154297 + - 0.25341797 + - 0.12176514 + - 0.30566406 + - -0.011238098 + - 0.24633789 + - -0.18188477 + - -0.14099121 + - -0.14538574 + - 0.15039063 + - -0.94384766 + - -0.07421875 + - 1.5527344 + - 0.78222656 + - -0.3017578 + - -0.20532227 + - -0.13684082 + - 0.25073242 + - -0.515625 + - -0.9580078 + - 0.024337769 + - -0.01763916 + - 0.34155273 + - 0.057678223 + - -0.6713867 + - -0.43554688 + - -0.83251953 + - -1.1269531 + - 0.13977051 + - 0.53271484 + - 0.27978516 + - 0.22961426 + - -0.2849121 + - 0.6220703 + - -0.08258057 + - 0.23291016 + - 0.06719971 + - 0.034179688 + - -0.1149292 + - 0.12084961 + - -0.24023438 + - 0.053009033 + - 0.061309814 + - -0.25805664 + - -0.2055664 + - 0.10223389 + - -0.81884766 + - -0.81689453 + - -0.04055786 + - -0.31567383 + - -0.032348633 + - 0.0046539307 + - -0.31689453 + - -0.38134766 + - -0.5996094 + - -0.17150879 + - 0.52734375 + - 0.15979004 + - 0.026611328 + - -0.10040283 + - -0.08319092 + - -0.32470703 + - 0.19091797 + - -0.036254883 + - -0.61279297 + - -0.19555664 + - 0.059570313 + - -0.9707031 + - -0.111694336 + - 0.2512207 + - -0.2927246 + - -1.0048828 + - 0.103271484 + - -0.26391602 + - 0.37402344 + - 0.32128906 + - 0.21911621 + - 0.16589355 + - 0.2421875 + - -0.75097656 + - 0.41674805 + - 0.23510742 + - -0.50927734 + - -0.34106445 + - -0.50097656 + - -0.56591797 + - -0.103881836 + - -0.21020508 + - -0.013923645 + - -0.054473877 + - 0.06738281 + - -0.075927734 + - 0.38110352 + - -0.21484375 + - 0.65185547 + - 0.16369629 + - 0.21191406 + - -0.107666016 + - -1.1650391 + - 0.8515625 + - -0.13635254 + - -0.27905273 + - 0.39453125 + - -0.8457031 + - 0.06304932 + - -0.17053223 + - 0.65966797 + - 0.095214844 + - -0.3347168 + - 0.10699463 + - 0.1796875 + - 0.484375 + - 0.030273438 + - 0.099731445 + - 0.15527344 + - 0.43066406 + - 0.10058594 + - -1.0058594 + - -0.41601563 + - -0.21936035 + - 0.81396484 + - 0.2064209 + - 0.81103516 + - 0.9736328 + - -0.119018555 + - -0.3305664 + - -0.20544434 + - -0.05718994 + - -1.1367188 + - 0.101623535 + - 0.7944336 + - 0.21484375 + - 0.085998535 + - -0.08129883 + - 0.045288086 + - -0.29858398 + - 0.51220703 + - -0.04888916 + - 0.0440979 + - 0.38378906 + - 0.3005371 + - -0.30908203 + - 0.6064453 + - 0.38793945 + - -0.3918457 + - -0.16247559 + - 0.4794922 + - 0.23278809 + - -1.0449219 + - 0.66748047 + - 0.5488281 + - -0.3034668 + - -0.46923828 + - 0.12036133 + - -0.20410156 + - -0.30981445 + - 0.12219238 + - -0.7397461 + - 0.4272461 + - 0.25952148 + - -0.61572266 + - -0.43798828 + - 0.054473877 + - 0.42407227 + - -0.96191406 + - 0.14440918 + - 0.11218262 + - -0.6113281 + - 0.036499023 + - -0.11791992 + - -0.15588379 + - -0.34375 + - 0.43115234 + - -0.33691406 + - -0.28027344 + - 0.05569458 + - -0.5546875 + - 0.6064453 + - 0.91796875 + - -0.33398438 + - 0.7890625 + - 0.09197998 + - -0.81396484 + - -0.2800293 + - -0.46923828 + - -0.6381836 + - 0.60253906 + - -0.38183594 + - -0.20080566 + - 0.08258057 + - -0.31103516 + - 0.2980957 + - -1.3076172 + - -0.09106445 + - 0.64453125 + - -0.33764648 + - 0.7446289 + - -0.13098145 + - -0.29125977 + - 0.10571289 + - 0.04763794 + - -0.10992432 + - -0.03842163 + - -0.06781006 + - -0.18359375 + - -0.32861328 + - 0.28686523 + - -0.2565918 + - 0.9316406 + - -0.01007843 + - -0.12573242 + - -0.2536621 + - 0.55859375 + - -0.018066406 + - 0.56640625 + - -1.0087891 + - -0.15197754 + - -1.3789063 + - 0.012916565 + - -0.9628906 + - 0.56884766 + - -0.13439941 + - -0.117370605 + - 0.3425293 + - 0.69970703 + - 0.12585449 +- - -0.07684326 + - -0.45336914 + - -0.045166016 + - 0.4572754 + - 0.13598633 + - 0.48535156 + - -0.7133789 + - -0.4572754 + - 1.0371094 + - 0.4543457 + - -0.18078613 + - 0.15136719 + - 0.55615234 + - 0.3256836 + - 0.12670898 + - -0.17358398 + - 0.2076416 + - 0.7626953 + - -0.32983398 + - 0.061279297 + - -0.6508789 + - 0.2553711 + - -0.30322266 + - -0.015174866 + - -0.2043457 + - 0.07531738 + - 0.31958008 + - -0.49267578 + - -0.39892578 + - 0.48388672 + - -1.1298828 + - -0.72265625 + - 0.14453125 + - -0.014625549 + - 0.26611328 + - 0.019256592 + - 0.28198242 + - 0.63671875 + - -0.6953125 + - -0.42089844 + - -0.34960938 + - -1.1347656 + - -0.4321289 + - 0.63378906 + - -0.54345703 + - -0.19091797 + - -0.21008301 + - -0.38012695 + - -0.40185547 + - -0.93603516 + - -0.67041016 + - -0.54248047 + - 0.5708008 + - 0.4921875 + - 0.01071167 + - -0.10498047 + - -0.099243164 + - 0.30981445 + - -0.014038086 + - 0.15991211 + - 0.17944336 + - -0.52490234 + - 0.5332031 + - 0.54589844 + - -0.19824219 + - 0.3408203 + - -0.82128906 + - 0.64160156 + - -0.18188477 + - 0.26489258 + - -0.07513428 + - -0.25732422 + - 0.9355469 + - 0.35888672 + - -0.26513672 + - -0.15356445 + - -0.27172852 + - -0.09844971 + - -0.06793213 + - -0.10864258 + - 0.015029907 + - 0.65478516 + - -0.20629883 + - -0.59375 + - 0.044952393 + - -0.6015625 + - -0.30664063 + - 0.12084961 + - -0.21105957 + - -0.44677734 + - -0.3166504 + - 0.40429688 + - 0.7138672 + - 0.56103516 + - 0.25830078 + - 0.6308594 + - -0.29492188 + - -0.034362793 + - 0.42626953 + - -1.1005859 + - -0.02961731 + - 0.003824234 + - -0.015380859 + - 0.49536133 + - -0.38012695 + - -0.9711914 + - -0.49658203 + - 0.08947754 + - -0.11212158 + - -0.5488281 + - -0.8173828 + - 0.64160156 + - -0.2890625 + - 0.46728516 + - -0.15673828 + - -0.6176758 + - 0.49267578 + - -0.2758789 + - -1.1425781 + - 0.46704102 + - 0.0006914139 + - 0.6357422 + - -0.45239258 + - -0.30688477 + - 0.061523438 + - 0.09112549 + - 0.9189453 + - 0.46923828 + - 0.33081055 + - -1.2421875 + - -0.0073547363 + - -0.29882813 + - -0.9111328 + - 0.7783203 + - 0.28076172 + - -0.38232422 + - 0.1529541 + - -0.049957275 + - 0.22229004 + - 0.18908691 + - 0.18261719 + - 0.37548828 + - 0.47583008 + - 0.088256836 + - 0.2626953 + - -0.41210938 + - -0.3154297 + - -0.2442627 + - 0.24145508 + - -0.25634766 + - 0.27734375 + - -0.09899902 + - 0.73535156 + - -0.5058594 + - -0.15637207 + - 0.07080078 + - -0.0038852692 + - -0.9511719 + - 0.17053223 + - 0.11456299 + - -0.19689941 + - -0.5126953 + - -0.41992188 + - 0.32763672 + - -0.19140625 + - 0.37353516 + - -0.23449707 + - 0.5908203 + - -0.28027344 + - 0.296875 + - 0.2590332 + - -0.89941406 + - -0.13476563 + - 0.4086914 + - -0.22192383 + - 0.7192383 + - 0.15637207 + - 0.12390137 + - 0.20373535 + - 0.8383789 + - 0.09625244 + - 0.23791504 + - -0.6513672 + - -0.55566406 + - -0.27246094 + - -0.13635254 + - 0.140625 + - 0.22875977 + - 0.12939453 + - 0.40429688 + - 0.18566895 + - 0.068725586 + - -0.11022949 + - 0.10284424 + - 0.3515625 + - -0.10772705 + - 0.05166626 + - 0.6982422 + - 0.6645508 + - 0.10266113 + - 0.49560547 + - -0.20214844 + - 0.07244873 + - -0.046142578 + - -0.33691406 + - 0.0067749023 + - -1.0234375 + - 0.7626953 + - -0.6040039 + - -0.4375 + - 0.33081055 + - -0.4086914 + - 0.9477539 + - 1.1972656 + - 0.9658203 + - -0.036987305 + - -0.36743164 + - 0.21582031 + - -0.029006958 + - -0.20214844 + - -0.29785156 + - -0.5209961 + - -0.006122589 + - -0.07672119 + - 0.30297852 + - -0.68359375 + - 0.5175781 + - 0.1628418 + - -0.14660645 + - -0.45703125 + - 0.3540039 + - -0.35742188 + - 0.09790039 + - 0.36132813 + - 0.78808594 + - 0.84375 + - -0.09484863 + - 0.63623047 + - -0.5332031 + - 0.08526611 + - -0.32421875 + - -0.58154297 + - -0.16015625 + - -1.0761719 + - -0.24829102 + - 0.6533203 + - 0.8520508 + - 0.01159668 + - -0.45263672 + - -0.52246094 + - -0.46679688 + - -0.101867676 + - -0.079711914 + - -0.21142578 + - -0.14794922 + - -0.90283203 + - 0.16772461 + - -0.37109375 + - 0.6821289 + - -0.27514648 + - -0.22143555 + - 0.35083008 + - -0.24804688 + - 1.0195313 + - -0.92822266 + - 0.5629883 + - 0.34765625 + - 0.4309082 + - 0.20666504 + - -0.69921875 + - 3.03125 + - 0.7783203 + - -0.5102539 + - -0.14929199 + - -0.19580078 + - -0.3857422 + - -0.084350586 + - 0.011024475 + - -0.47705078 + - 0.6640625 + - 0.55908203 + - -0.5703125 + - -0.75097656 + - -0.49145508 + - -0.6743164 + - -0.36865234 + - 0.20129395 + - -0.28710938 + - -0.11767578 + - -0.38916016 + - 0.32348633 + - 0.25585938 + - 0.6123047 + - -0.047027588 + - 0.16369629 + - 0.19543457 + - -0.08062744 + - 0.1262207 + - 0.10803223 + - 0.60595703 + - -0.28173828 + - -0.24902344 + - 0.35205078 + - -0.36645508 + - -0.3173828 + - -0.37109375 + - 0.6484375 + - 0.032226563 + - 0.1920166 + - -0.35595703 + - -0.022369385 + - 0.21264648 + - 0.6191406 + - 0.5527344 + - -0.8486328 + - -0.76660156 + - 0.05206299 + - 0.121398926 + - 0.5097656 + - 1.0517578 + - 0.011734009 + - 0.25585938 + - -0.4621582 + - -0.1743164 + - -0.08227539 + - -0.83203125 + - 1.1035156 + - -0.04083252 + - -0.23217773 + - 0.13378906 + - 0.24511719 + - -0.53515625 + - 0.68603516 + - 0.3623047 + - -0.29101563 + - 0.16333008 + - -0.18432617 + - 0.2512207 + - 0.24682617 + - -0.25830078 + - 0.079589844 + - -0.107910156 + - -0.6665039 + - 0.71191406 + - 0.9609375 + - 0.08935547 + - -0.10089111 + - 0.13635254 + - 0.8828125 + - 0.18127441 + - -0.6435547 + - 0.6904297 + - -0.22338867 + - 0.92871094 + - 0.22851563 + - 0.9223633 + - -0.49145508 + - 0.080200195 + - 0.25683594 + - -0.6020508 + - -0.1862793 + - 0.06756592 + - -0.359375 + - 0.76171875 + - 0.47314453 + - 0.06665039 + - -0.0335083 + - 0.3515625 + - 0.35864258 + - -0.50634766 + - -0.5058594 + - -0.47851563 + - -0.5126953 + - 0.34716797 + - -0.16564941 + - -0.34326172 + - -0.8051758 + - -0.30444336 + - 0.56640625 + - 1.0761719 + - -0.85839844 + - 0.70947266 + - 0.061065674 + - -0.12963867 + - 0.48168945 + - -0.053710938 + - -0.29907227 + - 0.024917603 + - -0.06933594 + - -0.5493164 + - 0.034057617 + - -0.015388489 + - -0.5493164 + - -0.34594727 + - -0.29614258 + - -0.23461914 + - 0.010261536 + - 0.41357422 + - -0.7402344 + - -0.15673828 + - -0.57421875 + - -0.027618408 + - -0.12548828 + - 0.6142578 + - -0.71728516 + - 0.51953125 + - -0.119628906 + - 1.0810547 + - -0.66308594 + - -0.5595703 + - 0.05178833 + - -0.1694336 + - -0.48486328 + - 0.22363281 + - -0.12512207 + - 0.31958008 + - 0.8125 + - -0.15795898 + - 0.6640625 + - 0.85791016 + - 0.77978516 + - 0.3322754 + - 0.50878906 + - 0.1418457 + - 0.014320374 + - 0.4975586 + - -0.5205078 + - -0.094055176 + - 0.26904297 + - -0.16662598 + - -1.1806641 + - -0.5317383 + - 0.18066406 + - -0.66796875 + - -0.125 + - 0.05303955 + - -0.40673828 + - 0.07775879 + - 0.117004395 + - -0.22509766 + - 0.3984375 + - -0.6381836 + - 0.4243164 + - 0.20092773 + - -0.32958984 + - -0.20947266 + - -0.0060310364 + - 0.058532715 + - -0.82128906 + - -0.23010254 + - 0.20178223 + - -0.025299072 + - 0.5644531 + - 0.012268066 + - 0.49072266 + - 0.13830566 + - -0.39013672 + - -0.24182129 + - 0.35864258 + - 0.56396484 + - 0.16577148 + - 0.29785156 + - -0.8540039 + - 0.71972656 + - 0.25585938 + - -1.1914063 + - 0.14172363 + - 0.2607422 + - -0.31152344 + - -0.31030273 + - 0.014717102 + - -0.38671875 + - 0.51953125 + - -0.5810547 + - 0.0052261353 + - 0.28320313 + - 0.024932861 + - -0.0970459 + - 0.16369629 + - -0.26367188 + - -0.45898438 + - -0.98535156 + - 0.15270996 + - 0.09692383 + - 0.0049934387 + - 0.0010166168 + - -0.71875 + - 0.06732178 + - 0.20275879 + - -0.46020508 + - -0.107910156 + - 0.06628418 + - 0.5439453 + - 0.11694336 + - -0.12963867 + - -0.25097656 + - 0.20373535 + - 0.703125 + - 0.052124023 + - 0.33813477 + - 0.091918945 + - 0.20727539 + - -0.114746094 + - -0.36767578 + - 0.19238281 + - 0.6821289 + - -0.2109375 + - -0.38891602 + - -0.39648438 + - 0.31079102 + - 0.013122559 + - -0.328125 + - 0.14038086 + - 0.06713867 + - 0.26586914 + - -0.296875 + - -0.17053223 + - 0.73046875 + - 0.41845703 + - 0.10119629 + - 0.64941406 + - 0.12939453 + - 0.123291016 + - -0.44848633 + - -0.119140625 + - 0.7636719 + - -0.22424316 + - -0.2130127 + - -0.27197266 + - 1.078125 + - 0.36450195 + - -0.50927734 + - 0.09753418 + - 0.8930664 + - -0.20373535 + - 0.09033203 + - 0.375 + - -0.57128906 + - 0.086242676 + - -0.023269653 + - 0.12207031 + - -0.64453125 + - -0.026519775 + - 0.037475586 + - 0.0715332 + - 0.8330078 + - -0.08654785 + - 0.41137695 + - -0.049682617 + - 0.08428955 + - -0.25146484 + - 0.22851563 + - -0.40234375 + - 0.021240234 + - 1.8242188 + - 1.0332031 + - -0.11645508 + - -0.24536133 + - 0.022003174 + - 0.18811035 + - -0.33154297 + - -0.9140625 + - 0.23291016 + - 0.16040039 + - -0.14123535 + - -0.24084473 + - -0.63720703 + - -0.07336426 + - -0.67285156 + - -1.0292969 + - 0.13647461 + - 0.21606445 + - -0.52441406 + - -0.084106445 + - -0.20727539 + - 0.33496094 + - 0.11553955 + - 0.04067993 + - -0.010292053 + - -0.031066895 + - -0.10620117 + - 0.05810547 + - 0.23046875 + - 0.005207062 + - 0.26733398 + - 0.08557129 + - -0.5810547 + - 0.34326172 + - -0.36669922 + - -0.44750977 + - -0.35668945 + - 0.25341797 + - -0.2019043 + - -0.24414063 + - -0.4182129 + - -0.24560547 + - -0.08404541 + - -0.22167969 + - 0.42016602 + - 0.2998047 + - 0.103637695 + - -0.021453857 + - -0.029067993 + - 0.10412598 + - -0.1038208 + - -0.19262695 + - -0.5830078 + - 0.028030396 + - -0.16503906 + - -0.41845703 + - 0.061676025 + - 0.33789063 + - 0.10644531 + - -0.9692383 + - -0.16479492 + - -0.171875 + - 0.25048828 + - 0.2705078 + - 0.28515625 + - 0.29785156 + - 0.34594727 + - -0.515625 + - 0.33251953 + - 0.21936035 + - -0.3359375 + - -0.51953125 + - -0.19677734 + - -0.67626953 + - 0.2578125 + - -0.51416016 + - -0.019973755 + - -0.32470703 + - 0.18127441 + - -0.50097656 + - 0.4699707 + - -0.1953125 + - 0.51953125 + - 0.3449707 + - -0.3137207 + - -0.125 + - -0.94140625 + - 0.6201172 + - -0.027832031 + - -0.47705078 + - 0.25756836 + - -0.9248047 + - -0.029296875 + - 0.012832642 + - 0.7451172 + - 0.041534424 + - -0.16796875 + - 0.06585693 + - 0.17285156 + - 0.43969727 + - 0.079956055 + - -0.29248047 + - 0.15820313 + - 0.6972656 + - 0.1850586 + - -1.0703125 + - -0.7216797 + - -0.038085938 + - 0.48486328 + - 0.049072266 + - 0.59765625 + - 0.69433594 + - 0.09350586 + - -0.5917969 + - -0.18164063 + - -0.03286743 + - -1.109375 + - 0.15148926 + - 0.1295166 + - 0.040802002 + - 0.39379883 + - -0.32910156 + - -0.048736572 + - -0.66259766 + - 0.70703125 + - 0.029968262 + - -0.040405273 + - 0.44067383 + - 0.079589844 + - -0.23742676 + - 0.51953125 + - 0.4790039 + - -0.41796875 + - 0.08068848 + - 0.5883789 + - -0.04714966 + - -1.453125 + - 0.36450195 + - 0.7426758 + - -0.06616211 + - -0.2565918 + - 0.32958984 + - -0.42504883 + - -0.23803711 + - -0.18286133 + - -0.15161133 + - 0.21972656 + - -0.031280518 + - -0.80566406 + - -0.36645508 + - 0.012939453 + - 0.38330078 + - -0.7421875 + - 0.12109375 + - -0.5102539 + - -0.4074707 + - -0.15136719 + - -0.0579834 + - -0.09741211 + - -0.33203125 + - 0.096191406 + - 0.33154297 + - -0.43359375 + - 0.35766602 + - -0.3215332 + - 0.38720703 + - 0.6254883 + - -0.08117676 + - 0.69628906 + - 0.41064453 + - -1.0136719 + - -0.1817627 + - -0.29638672 + - -0.6254883 + - 0.5004883 + - -0.22265625 + - -0.25878906 + - 0.04425049 + - -0.45947266 + - 0.55322266 + - -1.3837891 + - -0.24609375 + - 0.69921875 + - -0.2680664 + - 0.2939453 + - -0.2788086 + - 0.023895264 + - -0.05718994 + - -0.035308838 + - 0.18811035 + - 0.16760254 + - -0.14880371 + - 0.19787598 + - -0.40942383 + - 0.057434082 + - -0.64990234 + - 0.9423828 + - 0.5175781 + - 0.05886841 + - -0.071899414 + - 0.7036133 + - 0.024658203 + - 0.6123047 + - -0.6035156 + - -0.19885254 + - -1.0585938 + - -0.07305908 + - -0.6459961 + - 0.4946289 + - 0.26367188 + - -0.030181885 + - 0.46411133 + - 0.7114258 + - 0.12915039 +- - -0.1508789 + - -0.021652222 + - -0.083984375 + - -0.12890625 + - 0.3581543 + - 0.29663086 + - -0.7705078 + - -0.6225586 + - 0.5058594 + - 0.32861328 + - -0.18688965 + - 0.50927734 + - 0.45458984 + - 0.6899414 + - 0.45410156 + - 0.018234253 + - 0.025665283 + - 0.68310547 + - -0.18969727 + - 0.0047683716 + - -0.36035156 + - 0.34887695 + - -0.19995117 + - -0.16455078 + - -0.32885742 + - 0.109375 + - 0.3762207 + - -0.46166992 + - -0.5488281 + - 0.61572266 + - -1.0830078 + - -0.33911133 + - -0.16662598 + - -0.18261719 + - -0.17785645 + - -0.17773438 + - 0.375 + - 0.5800781 + - -0.3564453 + - -0.41235352 + - -0.61376953 + - -0.45410156 + - -0.49023438 + - 0.31347656 + - -0.51220703 + - -0.3203125 + - -0.18005371 + - -0.64941406 + - -0.66015625 + - -1.0107422 + - -0.72265625 + - -0.3269043 + - 0.53125 + - 0.051116943 + - 0.20776367 + - -0.28881836 + - -0.17541504 + - -0.008453369 + - -0.12207031 + - 0.021240234 + - 0.20898438 + - -0.4206543 + - 0.32006836 + - 0.3486328 + - -0.33764648 + - 0.27734375 + - -0.6171875 + - 0.57666016 + - -0.29956055 + - 0.07330322 + - -0.22668457 + - -0.31298828 + - 0.7661133 + - 0.0076026917 + - -0.24084473 + - 0.049438477 + - 0.044830322 + - -0.10070801 + - -0.058135986 + - 0.10571289 + - -0.14196777 + - 0.48706055 + - -0.4309082 + - -1.0244141 + - -0.023452759 + - -0.63134766 + - -0.4963379 + - -0.092163086 + - -0.19934082 + - -0.5859375 + - 0.11639404 + - 0.3798828 + - 0.42504883 + - 0.39770508 + - -0.2290039 + - 0.3659668 + - -0.4477539 + - 0.22143555 + - 0.53466797 + - -0.7084961 + - -0.07098389 + - -0.1071167 + - -0.3251953 + - 0.6298828 + - -0.75097656 + - -1.0712891 + - -0.68115234 + - 0.32861328 + - -0.21203613 + - -0.6411133 + - -0.5205078 + - 0.734375 + - -0.1307373 + - 0.63720703 + - -0.32641602 + - -0.18579102 + - 0.6386719 + - -0.12561035 + - -1.1132813 + - 0.22912598 + - -0.18908691 + - 0.6010742 + - -0.390625 + - -0.64501953 + - -0.08770752 + - -0.44580078 + - 0.8491211 + - 0.22497559 + - -0.24682617 + - -1.1083984 + - -0.1541748 + - -0.55859375 + - -0.73291016 + - 1.0507813 + - 0.3659668 + - -0.18383789 + - 0.5214844 + - 0.23706055 + - 0.20666504 + - 0.07550049 + - 0.0065345764 + - 0.058654785 + - 0.32348633 + - 0.23474121 + - 0.31713867 + - -0.75097656 + - -0.2902832 + - -0.42895508 + - 0.18774414 + - -0.13208008 + - 0.24035645 + - -0.2376709 + - 1.0029297 + - -0.20349121 + - 0.09234619 + - 0.3557129 + - -0.2644043 + - -0.95166016 + - -0.07922363 + - 0.27246094 + - -0.3244629 + - -0.265625 + - -0.062927246 + - 0.57958984 + - -0.28027344 + - 0.13391113 + - 0.12854004 + - 0.29614258 + - -0.24584961 + - 0.2290039 + - 0.29907227 + - -0.66748047 + - 0.25756836 + - 0.21704102 + - 0.28051758 + - 0.3005371 + - 0.14172363 + - 0.09967041 + - 0.5019531 + - 0.5756836 + - 0.043060303 + - 0.25219727 + - -0.7246094 + - -1 + - -0.45947266 + - -0.091552734 + - -0.18322754 + - 0.40478516 + - 0.15002441 + - 0.5493164 + - 0.62597656 + - -0.18688965 + - -0.010215759 + - 0.11853027 + - 0.1439209 + - -0.11621094 + - -0.12097168 + - 0.42236328 + - 1.1953125 + - 0.2019043 + - 0.40551758 + - 0.17321777 + - 0.47021484 + - 0.40454102 + - -0.2788086 + - 0.15478516 + - -1.3613281 + - 0.4345703 + - -0.60791016 + - -0.7006836 + - 0.33862305 + - -0.04901123 + - 1.2285156 + - 1.1884766 + - 0.8808594 + - -0.038116455 + - -0.41137695 + - 0.059417725 + - 0.18322754 + - -0.38623047 + - -0.16040039 + - -0.7553711 + - -0.13977051 + - 0.2878418 + - 0.34960938 + - -0.63671875 + - 0.26660156 + - 0.1496582 + - -0.021224976 + - -0.43286133 + - 0.32348633 + - -0.5629883 + - 0.0019836426 + - 0.4897461 + - 0.9741211 + - 0.7949219 + - -0.21728516 + - 0.49267578 + - -0.05432129 + - -0.0016565323 + - -0.40942383 + - -0.5283203 + - -0.12475586 + - -0.8540039 + - -0.39111328 + - 0.7441406 + - 0.31640625 + - -0.1171875 + - -0.17236328 + - -0.9267578 + - -0.44848633 + - -0.14160156 + - 0.15588379 + - 0.1862793 + - 0.02947998 + - -0.78564453 + - 0.61279297 + - -0.22766113 + - 0.27075195 + - -0.13293457 + - -0.4345703 + - 0.3515625 + - -0.25708008 + - 1.2001953 + - -0.73535156 + - 0.22473145 + - 0.28198242 + - 0.3071289 + - 0.22460938 + - -0.8984375 + - 3.0742188 + - 0.6484375 + - -0.05090332 + - -0.13964844 + - 0.040527344 + - -0.34643555 + - 0.16931152 + - 0.26733398 + - -0.029632568 + - 0.4873047 + - 0.23852539 + - -0.62841797 + - -0.8491211 + - -0.27905273 + - -0.38623047 + - -0.33276367 + - 0.0435791 + - -0.09240723 + - 0.025894165 + - -0.03277588 + - 0.80322266 + - 0.23010254 + - 0.57128906 + - 0.014907837 + - 0.3269043 + - 0.50927734 + - -0.4892578 + - 0.28051758 + - 0.2019043 + - 0.5722656 + - -0.31958008 + - -0.017333984 + - 0.8300781 + - -0.26489258 + - -0.5722656 + - -0.4296875 + - 0.4033203 + - -0.05871582 + - -0.057495117 + - -0.43188477 + - 0.032196045 + - 0.124572754 + - 0.56689453 + - 0.5800781 + - -1.1533203 + - -1.1044922 + - 0.026779175 + - 0.079711914 + - 0.30908203 + - 0.6635742 + - 0.07446289 + - 0.52783203 + - -0.46826172 + - -0.2368164 + - 0.103149414 + - -0.6875 + - 1.0712891 + - 0.02104187 + - 0.005466461 + - 0.23547363 + - 0.52197266 + - -0.4609375 + - 0.66259766 + - 0.47021484 + - -0.51416016 + - -0.024749756 + - -0.0725708 + - 0.47143555 + - 0.15820313 + - -0.111450195 + - -0.055847168 + - 0.21459961 + - -0.2055664 + - 0.61279297 + - 1.1289063 + - -0.12939453 + - 0.29101563 + - 0.123046875 + - 0.44360352 + - 0.12878418 + - -0.1875 + - 0.23376465 + - -0.50146484 + - 0.55029297 + - -0.13134766 + - 0.7426758 + - -0.35620117 + - 0.22460938 + - 0.2841797 + - -0.6254883 + - -0.32788086 + - 0.21362305 + - -0.22875977 + - 0.40551758 + - 0.2849121 + - -0.01008606 + - -0.19689941 + - 0.19104004 + - 0.37158203 + - -0.4765625 + - -0.29541016 + - -0.58691406 + - -0.36523438 + - 0.9301758 + - -0.11981201 + - -0.6738281 + - -0.2524414 + - 0.045837402 + - 0.86816406 + - 1.1904297 + - -0.8959961 + - 0.6972656 + - 0.15039063 + - -0.33618164 + - 0.58447266 + - 0.4025879 + - -0.29370117 + - -0.123413086 + - -0.19104004 + - -0.2697754 + - -0.34545898 + - 0.12683105 + - -0.32641602 + - -0.24072266 + - -0.3642578 + - -0.27441406 + - -0.1282959 + - 0.24328613 + - -0.8959961 + - -0.30493164 + - -0.3317871 + - 0.21130371 + - 0.008087158 + - 0.49145508 + - -0.60253906 + - 0.85791016 + - -0.11578369 + - 0.97558594 + - -0.66259766 + - -0.6879883 + - 0.28881836 + - -0.1829834 + - -0.46411133 + - 0.32348633 + - 0.27734375 + - 0.19104004 + - 1.0107422 + - -0.3618164 + - 0.74902344 + - 0.7216797 + - 0.8227539 + - -0.34301758 + - 0.1430664 + - -0.07513428 + - 0.03668213 + - 0.66748047 + - -0.2902832 + - 0.11785889 + - 0.22033691 + - -0.41625977 + - -0.9667969 + - -0.3017578 + - 0.33032227 + - -0.5371094 + - -0.4189453 + - -0.203125 + - -0.20581055 + - 0.28979492 + - 0.22973633 + - -0.37890625 + - 0.039154053 + - -0.6743164 + - 0.52197266 + - -0.103881836 + - -0.80322266 + - -0.011245728 + - 0.34814453 + - 0.112976074 + - -0.6484375 + - -0.06048584 + - 0.24633789 + - -0.10266113 + - 0.703125 + - 0.29614258 + - 0.38720703 + - -0.13232422 + - -0.2602539 + - -0.1907959 + - 0.22265625 + - 0.26098633 + - 0.21582031 + - 0.14697266 + - -0.15429688 + - 0.52783203 + - 0.056488037 + - -0.64501953 + - 0.34765625 + - 0.09918213 + - -0.08380127 + - -0.18518066 + - 0.18469238 + - 0.068115234 + - 0.6503906 + - -0.21166992 + - -0.0158844 + - 0.5449219 + - -0.014122009 + - -0.6640625 + - 0.2878418 + - -0.2524414 + - 0.122558594 + - -1.0585938 + - 0.20898438 + - 0.014175415 + - 0.010635376 + - -0.021636963 + - -0.6635742 + - 0.59765625 + - 0.3203125 + - -0.41210938 + - -0.016555786 + - -0.0791626 + - 0.7841797 + - -0.21826172 + - -0.38964844 + - -0.29003906 + - 0.16027832 + - 0.50634766 + - -0.08703613 + - 0.54248047 + - 0.10015869 + - -0.18688965 + - 0.032928467 + - -0.6484375 + - 0.26489258 + - 0.75 + - -0.07922363 + - -0.14099121 + - -0.31689453 + - 0.28588867 + - 0.08282471 + - -0.3479004 + - 0.44995117 + - -0.15490723 + - 0.22106934 + - 0.33862305 + - -0.26586914 + - 0.8334961 + - 0.5541992 + - 0.11999512 + - 0.5229492 + - 0.36791992 + - 0.28881836 + - -0.3918457 + - -0.048461914 + - 0.42089844 + - -0.2709961 + - 0.012794495 + - -0.15930176 + - 1.0332031 + - 0.5439453 + - -0.107788086 + - -0.115600586 + - 0.625 + - -0.16564941 + - -0.0096588135 + - 0.16430664 + - -0.23791504 + - 0.28735352 + - -0.12408447 + - 0.040100098 + - -0.47485352 + - -0.08154297 + - 0.25341797 + - 0.12176514 + - 0.30566406 + - -0.011238098 + - 0.24633789 + - -0.18188477 + - -0.14099121 + - -0.14538574 + - 0.15039063 + - -0.94384766 + - -0.07421875 + - 1.5527344 + - 0.78222656 + - -0.3017578 + - -0.20532227 + - -0.13684082 + - 0.25073242 + - -0.515625 + - -0.9580078 + - 0.024337769 + - -0.01763916 + - 0.34155273 + - 0.057678223 + - -0.6713867 + - -0.43554688 + - -0.83251953 + - -1.1269531 + - 0.13977051 + - 0.53271484 + - 0.27978516 + - 0.22961426 + - -0.2849121 + - 0.6220703 + - -0.08258057 + - 0.23291016 + - 0.06719971 + - 0.034179688 + - -0.1149292 + - 0.12084961 + - -0.24023438 + - 0.053009033 + - 0.061309814 + - -0.25805664 + - -0.2055664 + - 0.10223389 + - -0.81884766 + - -0.81689453 + - -0.04055786 + - -0.31567383 + - -0.032348633 + - 0.0046539307 + - -0.31689453 + - -0.38134766 + - -0.5996094 + - -0.17150879 + - 0.52734375 + - 0.15979004 + - 0.026611328 + - -0.10040283 + - -0.08319092 + - -0.32470703 + - 0.19091797 + - -0.036254883 + - -0.61279297 + - -0.19555664 + - 0.059570313 + - -0.9707031 + - -0.111694336 + - 0.2512207 + - -0.2927246 + - -1.0048828 + - 0.103271484 + - -0.26391602 + - 0.37402344 + - 0.32128906 + - 0.21911621 + - 0.16589355 + - 0.2421875 + - -0.75097656 + - 0.41674805 + - 0.23510742 + - -0.50927734 + - -0.34106445 + - -0.50097656 + - -0.56591797 + - -0.103881836 + - -0.21020508 + - -0.013923645 + - -0.054473877 + - 0.06738281 + - -0.075927734 + - 0.38110352 + - -0.21484375 + - 0.65185547 + - 0.16369629 + - 0.21191406 + - -0.107666016 + - -1.1650391 + - 0.8515625 + - -0.13635254 + - -0.27905273 + - 0.39453125 + - -0.8457031 + - 0.06304932 + - -0.17053223 + - 0.65966797 + - 0.095214844 + - -0.3347168 + - 0.10699463 + - 0.1796875 + - 0.484375 + - 0.030273438 + - 0.099731445 + - 0.15527344 + - 0.43066406 + - 0.10058594 + - -1.0058594 + - -0.41601563 + - -0.21936035 + - 0.81396484 + - 0.2064209 + - 0.81103516 + - 0.9736328 + - -0.119018555 + - -0.3305664 + - -0.20544434 + - -0.05718994 + - -1.1367188 + - 0.101623535 + - 0.7944336 + - 0.21484375 + - 0.085998535 + - -0.08129883 + - 0.045288086 + - -0.29858398 + - 0.51220703 + - -0.04888916 + - 0.0440979 + - 0.38378906 + - 0.3005371 + - -0.30908203 + - 0.6064453 + - 0.38793945 + - -0.3918457 + - -0.16247559 + - 0.4794922 + - 0.23278809 + - -1.0449219 + - 0.66748047 + - 0.5488281 + - -0.3034668 + - -0.46923828 + - 0.12036133 + - -0.20410156 + - -0.30981445 + - 0.12219238 + - -0.7397461 + - 0.4272461 + - 0.25952148 + - -0.61572266 + - -0.43798828 + - 0.054473877 + - 0.42407227 + - -0.96191406 + - 0.14440918 + - 0.11218262 + - -0.6113281 + - 0.036499023 + - -0.11791992 + - -0.15588379 + - -0.34375 + - 0.43115234 + - -0.33691406 + - -0.28027344 + - 0.05569458 + - -0.5546875 + - 0.6064453 + - 0.91796875 + - -0.33398438 + - 0.7890625 + - 0.09197998 + - -0.81396484 + - -0.2800293 + - -0.46923828 + - -0.6381836 + - 0.60253906 + - -0.38183594 + - -0.20080566 + - 0.08258057 + - -0.31103516 + - 0.2980957 + - -1.3076172 + - -0.09106445 + - 0.64453125 + - -0.33764648 + - 0.7446289 + - -0.13098145 + - -0.29125977 + - 0.10571289 + - 0.04763794 + - -0.10992432 + - -0.03842163 + - -0.06781006 + - -0.18359375 + - -0.32861328 + - 0.28686523 + - -0.2565918 + - 0.9316406 + - -0.01007843 + - -0.12573242 + - -0.2536621 + - 0.55859375 + - -0.018066406 + - 0.56640625 + - -1.0087891 + - -0.15197754 + - -1.3789063 + - 0.012916565 + - -0.9628906 + - 0.56884766 + - -0.13439941 + - -0.117370605 + - 0.3425293 + - 0.69970703 + - 0.12585449 diff --git a/backends/candle/tests/snapshots/test_flash_jina_code__jina_code_single.snap b/backends/candle/tests/snapshots/test_flash_jina_code__jina_code_single.snap new file mode 100644 index 00000000..7d7d6819 --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_jina_code__jina_code_single.snap @@ -0,0 +1,773 @@ +--- +source: backends/candle/tests/test_flash_jina_code.rs +assertion_line: 48 +expression: embeddings_single +--- +- - -0.15026855 + - -0.02079773 + - -0.08392334 + - -0.12878418 + - 0.3581543 + - 0.29589844 + - -0.7709961 + - -0.6225586 + - 0.5053711 + - 0.32861328 + - -0.18591309 + - 0.50878906 + - 0.45361328 + - 0.6894531 + - 0.45410156 + - 0.0178833 + - 0.025802612 + - 0.68359375 + - -0.19018555 + - 0.0036315918 + - -0.36035156 + - 0.34814453 + - -0.20031738 + - -0.16503906 + - -0.32836914 + - 0.109191895 + - 0.37646484 + - -0.46142578 + - -0.5493164 + - 0.61572266 + - -1.0820313 + - -0.33984375 + - -0.16638184 + - -0.1821289 + - -0.17797852 + - -0.17797852 + - 0.375 + - 0.5800781 + - -0.3569336 + - -0.41235352 + - -0.61328125 + - -0.45410156 + - -0.4909668 + - 0.31323242 + - -0.51171875 + - -0.3190918 + - -0.18078613 + - -0.6484375 + - -0.66064453 + - -1.0107422 + - -0.7216797 + - -0.32739258 + - 0.53027344 + - 0.051116943 + - 0.20812988 + - -0.28833008 + - -0.17492676 + - -0.008338928 + - -0.12188721 + - 0.021240234 + - 0.20898438 + - -0.4206543 + - 0.32080078 + - 0.34936523 + - -0.33813477 + - 0.2763672 + - -0.6166992 + - 0.57666016 + - -0.29956055 + - 0.07366943 + - -0.22631836 + - -0.31323242 + - 0.765625 + - 0.0072364807 + - -0.2397461 + - 0.04937744 + - 0.04473877 + - -0.101379395 + - -0.058746338 + - 0.1060791 + - -0.14245605 + - 0.48583984 + - -0.43188477 + - -1.0244141 + - -0.023361206 + - -0.6303711 + - -0.49487305 + - -0.09185791 + - -0.20056152 + - -0.5859375 + - 0.1159668 + - 0.37939453 + - 0.42456055 + - 0.39746094 + - -0.22875977 + - 0.36572266 + - -0.44677734 + - 0.22094727 + - 0.5336914 + - -0.7080078 + - -0.07043457 + - -0.10650635 + - -0.3251953 + - 0.62939453 + - -0.75097656 + - -1.0703125 + - -0.68115234 + - 0.32861328 + - -0.21203613 + - -0.6411133 + - -0.5205078 + - 0.73339844 + - -0.12988281 + - 0.63623047 + - -0.32641602 + - -0.18652344 + - 0.6381836 + - -0.12463379 + - -1.1123047 + - 0.22851563 + - -0.18786621 + - 0.60009766 + - -0.39111328 + - -0.6430664 + - -0.08868408 + - -0.44580078 + - 0.8491211 + - 0.22497559 + - -0.2467041 + - -1.1083984 + - -0.1538086 + - -0.5571289 + - -0.73291016 + - 1.0498047 + - 0.36572266 + - -0.18359375 + - 0.52001953 + - 0.23632813 + - 0.20581055 + - 0.07562256 + - 0.007335663 + - 0.058746338 + - 0.3244629 + - 0.23486328 + - 0.31689453 + - -0.74902344 + - -0.29003906 + - -0.42895508 + - 0.18676758 + - -0.13269043 + - 0.24035645 + - -0.23742676 + - 1.0009766 + - -0.20336914 + - 0.09246826 + - 0.3552246 + - -0.2644043 + - -0.9506836 + - -0.07928467 + - 0.27246094 + - -0.3251953 + - -0.265625 + - -0.06274414 + - 0.57958984 + - -0.28051758 + - 0.13427734 + - 0.12878418 + - 0.29589844 + - -0.24621582 + - 0.22961426 + - 0.29907227 + - -0.66748047 + - 0.25683594 + - 0.21679688 + - 0.27929688 + - 0.30004883 + - 0.1418457 + - 0.0993042 + - 0.50146484 + - 0.57470703 + - 0.042877197 + - 0.25146484 + - -0.72509766 + - -0.9980469 + - -0.45922852 + - -0.09136963 + - -0.18359375 + - 0.40454102 + - 0.15063477 + - 0.54785156 + - 0.625 + - -0.18603516 + - -0.011123657 + - 0.11816406 + - 0.14453125 + - -0.11633301 + - -0.12097168 + - 0.42114258 + - 1.1943359 + - 0.20251465 + - 0.4050293 + - 0.17285156 + - 0.47021484 + - 0.40307617 + - -0.27954102 + - 0.15515137 + - -1.3603516 + - 0.4350586 + - -0.609375 + - -0.69970703 + - 0.3388672 + - -0.049316406 + - 1.2294922 + - 1.1884766 + - 0.88134766 + - -0.03918457 + - -0.41064453 + - 0.059448242 + - 0.18310547 + - -0.38598633 + - -0.15966797 + - -0.7553711 + - -0.13989258 + - 0.2878418 + - 0.34887695 + - -0.63671875 + - 0.26660156 + - 0.14953613 + - -0.022140503 + - -0.43359375 + - 0.32421875 + - -0.5629883 + - 0.0014381409 + - 0.4892578 + - 0.9741211 + - 0.79541016 + - -0.21728516 + - 0.4921875 + - -0.054351807 + - -0.0012207031 + - -0.4091797 + - -0.52783203 + - -0.125 + - -0.8535156 + - -0.38989258 + - 0.7441406 + - 0.31713867 + - -0.11645508 + - -0.171875 + - -0.92578125 + - -0.44799805 + - -0.14160156 + - 0.15527344 + - 0.1862793 + - 0.029571533 + - -0.7866211 + - 0.6118164 + - -0.22692871 + - 0.27148438 + - -0.1328125 + - -0.4345703 + - 0.35083008 + - -0.25756836 + - 1.1982422 + - -0.73535156 + - 0.22436523 + - 0.28173828 + - 0.3071289 + - 0.22375488 + - -0.89746094 + - 3.0800781 + - 0.6489258 + - -0.05178833 + - -0.14013672 + - 0.04055786 + - -0.34765625 + - 0.17004395 + - 0.26757813 + - -0.030090332 + - 0.48754883 + - 0.23852539 + - -0.62890625 + - -0.84814453 + - -0.27905273 + - -0.38598633 + - -0.3317871 + - 0.043518066 + - -0.092163086 + - 0.0256958 + - -0.032928467 + - 0.80322266 + - 0.23022461 + - 0.57177734 + - 0.015327454 + - 0.32714844 + - 0.50878906 + - -0.4892578 + - 0.28051758 + - 0.2019043 + - 0.5722656 + - -0.32080078 + - -0.017028809 + - 0.82910156 + - -0.26489258 + - -0.57373047 + - -0.4296875 + - 0.40356445 + - -0.058441162 + - -0.057373047 + - -0.43115234 + - 0.032684326 + - 0.12438965 + - 0.5678711 + - 0.5800781 + - -1.1533203 + - -1.1035156 + - 0.02670288 + - 0.07891846 + - 0.30908203 + - 0.6640625 + - 0.07446289 + - 0.52783203 + - -0.46801758 + - -0.23742676 + - 0.10357666 + - -0.6875 + - 1.0703125 + - 0.020080566 + - 0.005847931 + - 0.23657227 + - 0.5209961 + - -0.46020508 + - 0.6621094 + - 0.47021484 + - -0.51220703 + - -0.024047852 + - -0.07293701 + - 0.46972656 + - 0.15820313 + - -0.11248779 + - -0.056915283 + - 0.21398926 + - -0.20471191 + - 0.61279297 + - 1.1289063 + - -0.12988281 + - 0.29077148 + - 0.123046875 + - 0.44262695 + - 0.12963867 + - -0.1875 + - 0.23413086 + - -0.50146484 + - 0.55126953 + - -0.13061523 + - 0.7421875 + - -0.35620117 + - 0.22485352 + - 0.28393555 + - -0.625 + - -0.32861328 + - 0.21496582 + - -0.22851563 + - 0.4050293 + - 0.2841797 + - -0.010108948 + - -0.19689941 + - 0.19055176 + - 0.37158203 + - -0.4765625 + - -0.29516602 + - -0.58691406 + - -0.36523438 + - 0.9296875 + - -0.1194458 + - -0.67285156 + - -0.25195313 + - 0.045318604 + - 0.8671875 + - 1.1884766 + - -0.8955078 + - 0.69628906 + - 0.15075684 + - -0.3359375 + - 0.5834961 + - 0.4025879 + - -0.29296875 + - -0.122680664 + - -0.1899414 + - -0.26953125 + - -0.34594727 + - 0.1262207 + - -0.32617188 + - -0.24023438 + - -0.3642578 + - -0.27441406 + - -0.12841797 + - 0.24353027 + - -0.89697266 + - -0.30395508 + - -0.33129883 + - 0.2109375 + - 0.007217407 + - 0.49145508 + - -0.60253906 + - 0.8574219 + - -0.115234375 + - 0.9741211 + - -0.6621094 + - -0.6875 + - 0.2878418 + - -0.18322754 + - -0.46240234 + - 0.32348633 + - 0.2770996 + - 0.19104004 + - 1.0097656 + - -0.36083984 + - 0.74853516 + - 0.7216797 + - 0.8222656 + - -0.3425293 + - 0.1430664 + - -0.0748291 + - 0.03677368 + - 0.66845703 + - -0.29003906 + - 0.11755371 + - 0.22009277 + - -0.4165039 + - -0.9663086 + - -0.30151367 + - 0.32910156 + - -0.53564453 + - -0.41796875 + - -0.203125 + - -0.20617676 + - 0.28955078 + - 0.22888184 + - -0.3779297 + - 0.038085938 + - -0.67529297 + - 0.52246094 + - -0.103637695 + - -0.8027344 + - -0.011352539 + - 0.3479004 + - 0.11303711 + - -0.6484375 + - -0.060577393 + - 0.24658203 + - -0.10333252 + - 0.70166016 + - 0.29711914 + - 0.38720703 + - -0.13244629 + - -0.26000977 + - -0.19091797 + - 0.22265625 + - 0.26000977 + - 0.2154541 + - 0.14807129 + - -0.15393066 + - 0.52783203 + - 0.05621338 + - -0.64501953 + - 0.3479004 + - 0.099731445 + - -0.08416748 + - -0.18566895 + - 0.18457031 + - 0.06817627 + - 0.64990234 + - -0.21203613 + - -0.015991211 + - 0.5449219 + - -0.013648987 + - -0.6640625 + - 0.28686523 + - -0.2536621 + - 0.12261963 + - -1.0585938 + - 0.20776367 + - 0.014122009 + - 0.010620117 + - -0.021469116 + - -0.66259766 + - 0.59765625 + - 0.32080078 + - -0.4116211 + - -0.01739502 + - -0.078063965 + - 0.7832031 + - -0.21850586 + - -0.38964844 + - -0.28930664 + - 0.1595459 + - 0.50683594 + - -0.08673096 + - 0.54248047 + - 0.099853516 + - -0.18664551 + - 0.03253174 + - -0.6484375 + - 0.2644043 + - 0.74853516 + - -0.07952881 + - -0.14099121 + - -0.31689453 + - 0.2861328 + - 0.08300781 + - -0.34814453 + - 0.4501953 + - -0.15454102 + - 0.2220459 + - 0.33911133 + - -0.265625 + - 0.8330078 + - 0.55322266 + - 0.11999512 + - 0.5214844 + - 0.36865234 + - 0.2890625 + - -0.39160156 + - -0.048675537 + - 0.42114258 + - -0.27124023 + - 0.012619019 + - -0.15917969 + - 1.0341797 + - 0.54345703 + - -0.10723877 + - -0.115478516 + - 0.625 + - -0.16564941 + - -0.010139465 + - 0.16589355 + - -0.23693848 + - 0.28686523 + - -0.12524414 + - 0.039611816 + - -0.47558594 + - -0.08154297 + - 0.25170898 + - 0.12145996 + - 0.30566406 + - -0.010986328 + - 0.24633789 + - -0.18188477 + - -0.14099121 + - -0.14562988 + - 0.1505127 + - -0.9428711 + - -0.07421875 + - 1.5507813 + - 0.78222656 + - -0.3010254 + - -0.20532227 + - -0.13647461 + - 0.25073242 + - -0.5151367 + - -0.95751953 + - 0.025177002 + - -0.01777649 + - 0.34155273 + - 0.058288574 + - -0.6694336 + - -0.43579102 + - -0.8334961 + - -1.1269531 + - 0.13964844 + - 0.5317383 + - 0.27929688 + - 0.22961426 + - -0.28442383 + - 0.6225586 + - -0.08343506 + - 0.23291016 + - 0.06756592 + - 0.033813477 + - -0.11401367 + - 0.12030029 + - -0.23950195 + - 0.052856445 + - 0.061706543 + - -0.25732422 + - -0.20532227 + - 0.101623535 + - -0.81884766 + - -0.81640625 + - -0.04067993 + - -0.3149414 + - -0.03250122 + - 0.0046043396 + - -0.31640625 + - -0.38085938 + - -0.5991211 + - -0.17053223 + - 0.52685547 + - 0.15979004 + - 0.026824951 + - -0.10070801 + - -0.083984375 + - -0.32421875 + - 0.19067383 + - -0.037322998 + - -0.61279297 + - -0.19445801 + - 0.059173584 + - -0.9711914 + - -0.111328125 + - 0.25097656 + - -0.29296875 + - -1.0039063 + - 0.10266113 + - -0.26293945 + - 0.37402344 + - 0.32104492 + - 0.21984863 + - 0.16625977 + - 0.24169922 + - -0.75097656 + - 0.41674805 + - 0.23547363 + - -0.50927734 + - -0.3408203 + - -0.5 + - -0.56591797 + - -0.10430908 + - -0.2097168 + - -0.013595581 + - -0.053894043 + - 0.067871094 + - -0.07635498 + - 0.3803711 + - -0.21484375 + - 0.6508789 + - 0.16333008 + - 0.21191406 + - -0.107543945 + - -1.1650391 + - 0.8515625 + - -0.13708496 + - -0.27905273 + - 0.39282227 + - -0.84521484 + - 0.06378174 + - -0.17102051 + - 0.65966797 + - 0.0947876 + - -0.33520508 + - 0.10723877 + - 0.17993164 + - 0.48364258 + - 0.030548096 + - 0.09863281 + - 0.15454102 + - 0.43066406 + - 0.10076904 + - -1.0048828 + - -0.4152832 + - -0.21923828 + - 0.8144531 + - 0.20581055 + - 0.8095703 + - 0.97265625 + - -0.119262695 + - -0.33129883 + - -0.20471191 + - -0.057037354 + - -1.1357422 + - 0.10089111 + - 0.7944336 + - 0.21435547 + - 0.086364746 + - -0.08148193 + - 0.04510498 + - -0.29858398 + - 0.5126953 + - -0.048583984 + - 0.044036865 + - 0.38427734 + - 0.3005371 + - -0.3088379 + - 0.60595703 + - 0.38745117 + - -0.39135742 + - -0.16174316 + - 0.47924805 + - 0.23217773 + - -1.0439453 + - 0.66748047 + - 0.5498047 + - -0.30444336 + - -0.46875 + - 0.120788574 + - -0.20373535 + - -0.30981445 + - 0.12145996 + - -0.73876953 + - 0.4267578 + - 0.25976563 + - -0.61572266 + - -0.43774414 + - 0.054473877 + - 0.4230957 + - -0.96191406 + - 0.14416504 + - 0.111816406 + - -0.6113281 + - 0.03665161 + - -0.11779785 + - -0.15563965 + - -0.34301758 + - 0.4296875 + - -0.3359375 + - -0.2800293 + - 0.05618286 + - -0.5546875 + - 0.60595703 + - 0.9160156 + - -0.33374023 + - 0.7890625 + - 0.093322754 + - -0.81347656 + - -0.28076172 + - -0.46777344 + - -0.6386719 + - 0.6015625 + - -0.38134766 + - -0.20031738 + - 0.0826416 + - -0.31079102 + - 0.2980957 + - -1.3066406 + - -0.09161377 + - 0.64404297 + - -0.33691406 + - 0.74365234 + - -0.13024902 + - -0.29101563 + - 0.10620117 + - 0.047912598 + - -0.10949707 + - -0.039276123 + - -0.06781006 + - -0.18383789 + - -0.328125 + - 0.2861328 + - -0.2565918 + - 0.9316406 + - -0.0101623535 + - -0.12548828 + - -0.2529297 + - 0.55859375 + - -0.017501831 + - 0.56591797 + - -1.0097656 + - -0.15197754 + - -1.3779297 + - 0.013214111 + - -0.9628906 + - 0.56884766 + - -0.1352539 + - -0.11755371 + - 0.34179688 + - 0.69873047 + - 0.12548828 diff --git a/backends/candle/tests/snapshots/test_flash_mistral__mistral_batch.snap b/backends/candle/tests/snapshots/test_flash_mistral__mistral_batch.snap new file mode 100644 index 00000000..acea099b --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_mistral__mistral_batch.snap @@ -0,0 +1,12293 @@ +--- +source: backends/candle/tests/test_flash_mistral.rs +assertion_line: 37 +expression: embeddings_batch +--- +- - 3.2363281 + - -1.1582031 + - 1.0810547 + - -2.0292969 + - 1.609375 + - -1.0048828 + - 0.43676758 + - -0.8769531 + - 0.79785156 + - -0.27612305 + - 0.4963379 + - -0.82128906 + - 0.16906738 + - -0.734375 + - -0.34936523 + - 0.03515625 + - 0.34375 + - 1.3769531 + - 1.5234375 + - -1.875 + - -1.4082031 + - 1.6289063 + - -1.1650391 + - 0.65234375 + - 1.796875 + - 1.984375 + - -0.4350586 + - 1.4003906 + - -0.34985352 + - -2.5253906 + - 2.5351563 + - 0.32348633 + - 2.3007813 + - 1.5195313 + - -0.28295898 + - 1.1650391 + - -3.4472656 + - 0.07421875 + - -5.28125 + - -0.8310547 + - 0.7524414 + - -2.4257813 + - -0.91845703 + - -0.9814453 + - -1.7285156 + - 2.0761719 + - 0.23657227 + - -3.9003906 + - -1.4052734 + - 0.8310547 + - 3.9140625 + - -0.43408203 + - -3.0429688 + - -100.5625 + - -3.0703125 + - -0.93652344 + - 2.71875 + - -1.0527344 + - -1.3789063 + - -7.3671875 + - -2.3789063 + - 0.58251953 + - 0.8388672 + - 0.13110352 + - 2.4003906 + - 0.07421875 + - -2.5488281 + - 0.5126953 + - 2.0644531 + - -1.5556641 + - -4.6679688 + - 0.055236816 + - -2.9921875 + - -0.9038086 + - -1.2294922 + - -0.3984375 + - 2.9863281 + - 3.1328125 + - -0.13867188 + - -0.36523438 + - -0.63916016 + - -0.6064453 + - -1.5869141 + - -0.3425293 + - -2.0234375 + - 0.5336914 + - -1.8027344 + - -0.15185547 + - 2.2578125 + - 0.86376953 + - -1.234375 + - 5.9453125 + - 2.7089844 + - -19.703125 + - -2.8125 + - -2.7832031 + - -4.4375 + - 0.35595703 + - 1.5751953 + - -4.09375 + - 1.6884766 + - -1.3564453 + - -3.8652344 + - -0.61035156 + - 0.0055770874 + - -2.7949219 + - 0.08062744 + - -1.3369141 + - -1.5839844 + - -0.056915283 + - 0.04058838 + - 0.4296875 + - 0.47753906 + - -1.5585938 + - -0.055511475 + - 3.03125 + - 2.8515625 + - 0.70947266 + - -0.18884277 + - 0.29467773 + - 2.2421875 + - 0.59472656 + - 0.15393066 + - -2.4863281 + - -2.1992188 + - -0.27172852 + - 2.40625 + - -0.73095703 + - 0.32299805 + - 1.59375 + - 2.3808594 + - 0.17297363 + - -3.2519531 + - 1.1630859 + - 1.234375 + - 2.40625 + - -0.3088379 + - 0.78564453 + - -1.2050781 + - -1.4824219 + - 1.5166016 + - -0.4206543 + - 1.3535156 + - -2.7734375 + - 1.1757813 + - -2.8027344 + - -1.7998047 + - -0.9379883 + - -2.5703125 + - 4.5820313 + - 0.78564453 + - -1.9257813 + - -1.0478516 + - 0.03515625 + - 0.5151367 + - -2.7832031 + - 0.90722656 + - -0.5102539 + - -3.0390625 + - -3.1289063 + - -1.2509766 + - -2.6191406 + - -0.5546875 + - -1.1376953 + - 0.51416016 + - 1.3994141 + - 3.3613281 + - -1.1591797 + - -0.7583008 + - -0.46289063 + - -2.6386719 + - -1.9306641 + - -0.43896484 + - -2.9863281 + - -0.09875488 + - 0.25195313 + - -1.3115234 + - 2.09375 + - -4.265625 + - -2.2519531 + - 1.7910156 + - 0.8022461 + - -1.8603516 + - -1.8544922 + - 0.13891602 + - 5.1054688 + - -3.4863281 + - -0.85253906 + - -1.1806641 + - 0.07336426 + - -1.9082031 + - -3.7753906 + - -0.5541992 + - 0.640625 + - -2.2460938 + - 1.4951172 + - 3.6328125 + - -2.1640625 + - -1.4921875 + - 0.13476563 + - 0.44189453 + - -2.359375 + - 1.9189453 + - 0.7114258 + - 7.9375 + - 3.2929688 + - 4.2617188 + - -2.8378906 + - -0.3474121 + - -2.2304688 + - -2.0644531 + - -0.7504883 + - -2.9101563 + - -0.859375 + - 0.8330078 + - 3.9570313 + - -0.0036258698 + - -2.5214844 + - 3.0898438 + - -0.70458984 + - -3.8535156 + - 0.6298828 + - -0.32739258 + - 3.1289063 + - -0.08618164 + - -1.21875 + - 0.09649658 + - 0.7675781 + - 0.39672852 + - -3.1464844 + - 0.7763672 + - -0.7680664 + - -1.0068359 + - -0.88671875 + - -0.2064209 + - 1.5820313 + - 0.7441406 + - 2.3671875 + - 2.8554688 + - 1.6601563 + - 6.0390625 + - -0.35351563 + - -3.4589844 + - 0.23046875 + - -2.2324219 + - -1.7626953 + - 3.2714844 + - 2.5566406 + - -0.61572266 + - 0.20751953 + - 1.2539063 + - 0.4423828 + - -2.1269531 + - 0.5131836 + - 0.62353516 + - -0.6958008 + - -0.33032227 + - -2.28125 + - 0.032348633 + - 0.3408203 + - 1.4726563 + - 1.8486328 + - 1.890625 + - 1.8886719 + - -0.37426758 + - 2.4140625 + - -2.3027344 + - 3.9121094 + - 0.85546875 + - -4.6953125 + - 0.32983398 + - 0.8154297 + - 3.2304688 + - 0.8305664 + - -0.42773438 + - -1.1630859 + - -3.9277344 + - 1.3681641 + - 0.18469238 + - 1.0292969 + - -2.1328125 + - -2.6738281 + - 1.3876953 + - 0.1361084 + - 0.99902344 + - -0.77783203 + - -0.064697266 + - 1.828125 + - 0.65771484 + - 0.03390503 + - 1.7265625 + - 1.2138672 + - 10.0703125 + - 0.064697266 + - 0.6723633 + - -0.4819336 + - 1.8457031 + - -1.4023438 + - 2.2148438 + - -0.5493164 + - -0.07574463 + - -0.20422363 + - 2.7597656 + - 3.3242188 + - -1.6425781 + - 1.5322266 + - 2.4785156 + - 1.4394531 + - -0.09094238 + - -1.203125 + - -1.6650391 + - -0.10546875 + - -0.8964844 + - 0.072509766 + - 1.1875 + - -2.4375 + - 0.08258057 + - -0.14453125 + - -3.1816406 + - 1.2851563 + - 1.8339844 + - 1.2412109 + - -3.8457031 + - 2.5703125 + - -1.4052734 + - -0.78564453 + - -1.3427734 + - -1.5039063 + - 2.3652344 + - -3.5820313 + - -4.078125 + - 1.7050781 + - 1.5644531 + - 0.7709961 + - 2.34375 + - -0.11657715 + - 2.7832031 + - -0.49926758 + - 0.08984375 + - 0.105285645 + - 2.7597656 + - -0.4482422 + - 2.1015625 + - 1.5488281 + - 1.9433594 + - 1.1533203 + - -0.21252441 + - 2.6777344 + - -5.0664063 + - -0.8847656 + - 2.1464844 + - -1.265625 + - 0.3330078 + - 0.5102539 + - -2.1738281 + - -0.7841797 + - -4.1015625 + - -1.609375 + - -1.6220703 + - -1.4111328 + - -1.4921875 + - 1.7324219 + - 4.359375 + - -1.3857422 + - 2.9726563 + - -2.90625 + - 6.1757813 + - 1.6982422 + - 1.4638672 + - -2.6894531 + - 0.7714844 + - -1.5244141 + - -2.125 + - 3.5058594 + - -0.3996582 + - 3.5996094 + - -1.4482422 + - 0.3935547 + - 0.7109375 + - 2.4746094 + - -1.3896484 + - -1.2880859 + - -1.9433594 + - -0.859375 + - -0.703125 + - 1.8554688 + - 1.8632813 + - -4.2226563 + - -8.125 + - -2.1074219 + - 0.453125 + - -0.09375 + - -2.6660156 + - -0.95751953 + - 0.047698975 + - -0.29663086 + - 2.6464844 + - 2.1074219 + - -2.1464844 + - 1.5498047 + - -2.3339844 + - 1.5898438 + - -0.5654297 + - -4.3476563 + - -0.1673584 + - 1.7988281 + - 2.0488281 + - -2.1660156 + - -14.390625 + - -0.12243652 + - -2.2089844 + - -1.6064453 + - 3.1171875 + - -1.1591797 + - 1.4433594 + - -0.19689941 + - -3.6835938 + - -1.4238281 + - -3.6152344 + - 5.109375 + - -0.5004883 + - -0.4736328 + - 2.7988281 + - -0.32592773 + - -0.75927734 + - 1.0458984 + - 0.1619873 + - -2.0371094 + - 2.2246094 + - -1.4375 + - -1.921875 + - -1.7138672 + - -3.8613281 + - 0.85009766 + - -0.37939453 + - -1.8525391 + - 0.5839844 + - -1.9013672 + - 0.7519531 + - 1.6748047 + - -1.3095703 + - -1.5087891 + - -0.6269531 + - -1.6445313 + - -2.2011719 + - -0.9091797 + - 0.06640625 + - 2.7050781 + - -2.1679688 + - -3.5800781 + - -0.009483337 + - 1.5244141 + - -0.58935547 + - -2.0390625 + - -0.47583008 + - 5.609375 + - 4.625 + - -0.033477783 + - 0.07110596 + - 3.2851563 + - -0.44482422 + - -2.8945313 + - -1.7675781 + - 2.7714844 + - -0.9301758 + - -0.84521484 + - -0.9785156 + - 0.27197266 + - 0.33666992 + - -2.3515625 + - 4.9375 + - 2.3125 + - 0.29882813 + - 1.015625 + - 0.35131836 + - 0.43896484 + - 0.8076172 + - -0.91064453 + - -0.6064453 + - 3.8203125 + - 0.5683594 + - 0.55908203 + - 0.9736328 + - -1.9970703 + - -0.3269043 + - 1.2158203 + - -6.0039063 + - 0.13977051 + - 3.71875 + - -0.5605469 + - 0.46313477 + - 1.5683594 + - -0.7011719 + - -0.46362305 + - -2.6328125 + - -1.3330078 + - 2.4570313 + - -2.0488281 + - -2.9238281 + - 5.375 + - 0.21679688 + - -5.9726563 + - 2.0390625 + - 0.055786133 + - 1.3359375 + - 3.8378906 + - -0.6225586 + - -0.6113281 + - -1.5830078 + - 2.8535156 + - 3.6679688 + - -2.5703125 + - -1.5019531 + - 0.69091797 + - -2.0332031 + - 1.6210938 + - -0.3408203 + - -0.5522461 + - -1.4355469 + - -0.5078125 + - 0.5957031 + - 1.5869141 + - 3.6757813 + - -0.018692017 + - 0.55566406 + - 1.4609375 + - 0.20336914 + - -1.3769531 + - 1.6767578 + - 2.1894531 + - 0.85253906 + - 0.4519043 + - -0.00390625 + - -1.8789063 + - 3.5800781 + - 0.16516113 + - -4.5117188 + - -0.12890625 + - -0.3557129 + - -1.6269531 + - -1.9589844 + - -1.0107422 + - 3.1054688 + - -0.8457031 + - -4.8476563 + - -2.3652344 + - -1.3818359 + - 0.20703125 + - 1.9863281 + - 1.4814453 + - 0.6333008 + - 1.9667969 + - -17.671875 + - -1.453125 + - -1.0478516 + - -2.0019531 + - -1.3818359 + - 0.61279297 + - 0.20227051 + - 0.0055770874 + - 2.3476563 + - -3.4804688 + - -1.0546875 + - -2.2363281 + - 1.2685547 + - -1.0302734 + - 0.87597656 + - -2.4453125 + - -1.4394531 + - -2.3496094 + - -2.2890625 + - -0.8925781 + - -1.9296875 + - 0.9921875 + - 0.2939453 + - -1.2851563 + - 1.1201172 + - 0.578125 + - 0.30908203 + - 0.7246094 + - -3.2089844 + - 0.65478516 + - 2.5683594 + - -3.2148438 + - -2.9394531 + - 1.6816406 + - 1.6416016 + - -2.3417969 + - -3.5 + - -1.1904297 + - 1.4462891 + - -3.1875 + - -1.890625 + - -0.1015625 + - -1.9082031 + - 1.4306641 + - 5.1757813 + - 3.9101563 + - 1.0263672 + - 3.2402344 + - -0.8222656 + - -0.68603516 + - 0.055786133 + - -2.2578125 + - -2.3261719 + - 0.15234375 + - -3.6972656 + - 0.5625 + - -4.3789063 + - 0.9506836 + - 2.5957031 + - -1.7587891 + - -1.9824219 + - 1.9609375 + - -0.60595703 + - -0.2524414 + - -1.5576172 + - 1.8701172 + - -2.1386719 + - 0.00390625 + - 1.4619141 + - 1.8613281 + - 0.00027894974 + - 0.44140625 + - -1.6054688 + - 3.4902344 + - 0.036834717 + - 1.4169922 + - 0.7788086 + - -0.12384033 + - 1.7070313 + - -0.52197266 + - -3.2265625 + - -2.6875 + - 0.61572266 + - 2.6113281 + - -2.8164063 + - -0.83251953 + - -0.25439453 + - 0.037384033 + - -2.2226563 + - -2.5703125 + - -0.08013916 + - 2.7851563 + - 4.390625 + - -1.0810547 + - 0.59375 + - -4.6757813 + - 7.9140625 + - -3.1503906 + - 0.73339844 + - 3.3554688 + - -1.6220703 + - -2.59375 + - 0.984375 + - -1.6298828 + - -0.5546875 + - 2.6933594 + - 3.8125 + - -0.45922852 + - 1.4638672 + - 1.0556641 + - 1.6621094 + - 3.1113281 + - -0.55126953 + - 2.4003906 + - 1.8222656 + - -2.0507813 + - 0.22314453 + - 0.98535156 + - -0.5253906 + - -1.0029297 + - 0.6152344 + - 0.6113281 + - -0.71191406 + - -2.9492188 + - -0.19580078 + - -0.98828125 + - -0.1899414 + - 0.044067383 + - 1.5214844 + - 1.734375 + - 1.0146484 + - -1.4179688 + - 7.7578125 + - 3.3652344 + - 7.0976563 + - 1.4726563 + - -5.7226563 + - -5.890625 + - -0.3828125 + - -1.3154297 + - -0.31958008 + - -1.5888672 + - 0.1907959 + - -0.23181152 + - -1.046875 + - 1.6132813 + - -1.9482422 + - 2.6699219 + - 3.2246094 + - 3.6679688 + - -0.9091797 + - -2.5136719 + - 0.5102539 + - 24.09375 + - 1.2988281 + - 0.88183594 + - 0.09313965 + - -3.0195313 + - 1.8251953 + - 0.71484375 + - 0.77197266 + - -2.15625 + - 1.1113281 + - 3 + - 2.96875 + - -0.28686523 + - -0.0496521 + - 0.5957031 + - 4.7929688 + - 1.4414063 + - 3.0625 + - -5.0664063 + - -0.17687988 + - -1.8623047 + - -1.8876953 + - -3.6367188 + - 0.9038086 + - -0.4519043 + - 1.453125 + - -0.27124023 + - -1.8652344 + - 2.1582031 + - 0.65771484 + - -3.4160156 + - -5.7304688 + - -0.22070313 + - -3.03125 + - -0.9975586 + - 1.8378906 + - -1.4101563 + - 1.4414063 + - 3.9804688 + - -1.9648438 + - -1.5292969 + - -1.8769531 + - 2.2949219 + - -0.23254395 + - -0.5600586 + - 1.2783203 + - 0.60791016 + - 1.453125 + - 0.8408203 + - -0.73535156 + - -0.99658203 + - -3.1132813 + - 2.9472656 + - -0.5136719 + - 0.32617188 + - -2.6640625 + - -1.5917969 + - 1.0527344 + - 0.119384766 + - -1.2695313 + - -1.6621094 + - 2.1621094 + - -1.7226563 + - -1.7275391 + - -0.45898438 + - -0.26733398 + - 2.6152344 + - 0.4230957 + - -1.1201172 + - -0.47021484 + - 4.1289063 + - 1.4775391 + - -0.26342773 + - 2.9726563 + - -2.859375 + - 2.3222656 + - 0.52197266 + - -1.1865234 + - -3.2050781 + - -1.1943359 + - 2.2285156 + - -2.5 + - 5.8789063 + - -0.001953125 + - 2.4101563 + - -0.78027344 + - -1.4560547 + - 0.8540039 + - 2.6914063 + - 0.49853516 + - -1.1474609 + - -0.55566406 + - 0.46972656 + - 1.1582031 + - -3.6191406 + - 2.3203125 + - -4.75 + - -4.75 + - -3.7871094 + - 1.0068359 + - 3.9179688 + - 1.4345703 + - -1.3925781 + - 0.171875 + - 2.4257813 + - 1.21875 + - -2.6074219 + - 1.1171875 + - -1.5332031 + - -4.0273438 + - -0.3540039 + - 5.6328125 + - 0.23010254 + - 2.109375 + - 1.9853516 + - -0.9951172 + - 2.140625 + - -0.2705078 + - -2.8164063 + - -0.19946289 + - 4.5820313 + - -2.5664063 + - -0.3581543 + - 2.8847656 + - -1.4316406 + - 0.06585693 + - 1.0810547 + - -1.1972656 + - -9.3359375 + - 1.4482422 + - -47.25 + - -1.2919922 + - -0.6015625 + - -2.0625 + - -3.9179688 + - -0.47729492 + - 0.296875 + - 1.0654297 + - 1.6640625 + - 1.0595703 + - 0.18188477 + - -1.796875 + - 4.6875 + - -0.5253906 + - -2.0019531 + - 1.5869141 + - 1.1044922 + - -0.7211914 + - 16.984375 + - 0.42285156 + - -0.9765625 + - -1.2626953 + - -0.9379883 + - -0.57958984 + - 0.4038086 + - 2.8007813 + - 0.87353516 + - -1.625 + - -0.4267578 + - -2.6699219 + - -0.9609375 + - -2.4199219 + - 0.1784668 + - 0.49438477 + - -0.88183594 + - 2.4472656 + - 1.0351563 + - 0.8046875 + - 1.4453125 + - 0.5073242 + - 3.921875 + - -0.3798828 + - 1.046875 + - 0.2524414 + - -3.1367188 + - 2.5292969 + - 0.12658691 + - -1.2939453 + - -0.52246094 + - -2.9902344 + - 0.3515625 + - -1.6132813 + - -0.08203125 + - -0.66015625 + - -0.059143066 + - 0.21252441 + - 1.9482422 + - -4.1484375 + - -2.4863281 + - 0.35864258 + - 0.18481445 + - -1.0009766 + - -2.59375 + - 1.2685547 + - 6.6015625 + - -0.65283203 + - -0.7451172 + - 4.7226563 + - -2.2519531 + - 2.3105469 + - -2.0625 + - -0.16796875 + - 0.17907715 + - -2.3144531 + - 2.8964844 + - -4.5703125 + - 3.5996094 + - -1.0625 + - 5.2304688 + - 0.46972656 + - 0.31811523 + - -3.0722656 + - 1.9150391 + - 0.18713379 + - 1.9267578 + - 2.9316406 + - -1.0644531 + - -0.28515625 + - 0.26489258 + - -0.71972656 + - 2.5703125 + - -1.4707031 + - -1.5351563 + - -2.7070313 + - 1.2441406 + - -0.47607422 + - -0.3474121 + - -0.8457031 + - -3.4179688 + - -1.0927734 + - -2.1328125 + - -5.7382813 + - -1.1689453 + - 0.2512207 + - 1.3505859 + - 3.4101563 + - 3.4472656 + - 0.40112305 + - 0.56689453 + - 0.064697266 + - 0.7753906 + - 0.9980469 + - -1.6445313 + - 2.921875 + - 0.97314453 + - 1.3320313 + - -2.6816406 + - 2.3125 + - -2.0449219 + - 2.2089844 + - 1.6376953 + - 0.4819336 + - -1.6738281 + - -1.7792969 + - 0.17663574 + - 0.31298828 + - 4.0273438 + - -0.7270508 + - 3.1933594 + - 2.3964844 + - 2.65625 + - 1.4794922 + - -0.0524292 + - 1.9814453 + - 0.39282227 + - 0.23828125 + - 2.7226563 + - -0.80126953 + - -2.8105469 + - 0.1665039 + - -2.1660156 + - -2.0292969 + - -2.4453125 + - -3.0078125 + - 1.9033203 + - 2.8339844 + - 2.7753906 + - -2.4765625 + - 0.8408203 + - -3.203125 + - 2.265625 + - -1.7246094 + - 4.75 + - 4.6875 + - 0.59472656 + - -0.53466797 + - 1.7792969 + - 0.2956543 + - 2.3515625 + - -4.1757813 + - 3.9179688 + - -1.46875 + - -4.9453125 + - -1.9033203 + - -1.0390625 + - -0.34399414 + - -2.9414063 + - -15.546875 + - 2.0390625 + - -1.2695313 + - 4.1445313 + - 1.2197266 + - 3.3535156 + - 1.3818359 + - 1.5996094 + - -0.45141602 + - -0.6635742 + - 1.65625 + - -2.0996094 + - 2.4941406 + - 1.4921875 + - 2.0800781 + - -3.2675781 + - 0.96191406 + - -0.0072517395 + - -0.21252441 + - 1.2314453 + - 2.2519531 + - -1.0253906 + - 0.35327148 + - -0.015625 + - 1.5966797 + - -4.4726563 + - 0.20471191 + - -1.7744141 + - -16.671875 + - 0.61865234 + - 0.1204834 + - 2.9863281 + - -4.984375 + - -1.5673828 + - 0.2685547 + - 1.1904297 + - -5.015625 + - -2.6191406 + - -2.6132813 + - 3.6992188 + - -0.53271484 + - -0.45141602 + - -2.3652344 + - 0.70166016 + - -6.203125 + - -1.1904297 + - -0.35180664 + - 0.74072266 + - 1.1875 + - -0.9941406 + - -0.24536133 + - -2.4628906 + - -0.63623047 + - 2.921875 + - -3.5 + - -0.0418396 + - -0.52783203 + - 1.5361328 + - 3.4628906 + - -1.8183594 + - 0.32592773 + - -1.4794922 + - -0.74853516 + - 2.2285156 + - -0.75097656 + - 0.43237305 + - -18.859375 + - -0.33251953 + - -1.9013672 + - 2.4355469 + - -4.1875 + - 2.4121094 + - 0.5698242 + - 1.2294922 + - 1.6337891 + - -0.6972656 + - 1.4189453 + - -1.1513672 + - 2.2636719 + - -1.9921875 + - 0.50927734 + - -0.11621094 + - 0.58740234 + - 0.045196533 + - 1.4101563 + - -4.8007813 + - -1.421875 + - 2.3144531 + - -2.7324219 + - -0.19055176 + - 2.9023438 + - -1.4501953 + - 3.1484375 + - -2.5957031 + - -1.5234375 + - 2.0722656 + - 1.359375 + - 3.15625 + - -2.1503906 + - -1.5009766 + - -1.6464844 + - -0.4116211 + - -0.60595703 + - -1.6875 + - 1.4931641 + - 1.8671875 + - 3.7695313 + - 1.6650391 + - 2.296875 + - 3.6601563 + - -2.0839844 + - 0.4116211 + - -2.2988281 + - -1.4267578 + - -6.0625 + - 1.0380859 + - 2.4628906 + - 0.46191406 + - 0.2548828 + - 0.19689941 + - -2.0976563 + - 0.6020508 + - 0.14929199 + - 8.09375 + - -0.37939453 + - -1.6357422 + - -1.1328125 + - 1.1572266 + - 1.5166016 + - 1.8105469 + - -1.7607422 + - -1.9306641 + - 0.43115234 + - 2.6933594 + - 0.68603516 + - 3.0800781 + - -3.4238281 + - -4.5898438 + - 0.8173828 + - 0.81689453 + - 1.5869141 + - 0.9785156 + - 0.3359375 + - -0.2454834 + - 4.140625 + - 0.45922852 + - 0.1227417 + - -2.3183594 + - 1.6416016 + - -0.86376953 + - 1.2724609 + - -3.3242188 + - -0.48486328 + - 1.7539063 + - -2.6875 + - 1.2851563 + - 3.9628906 + - 2.2578125 + - -0.9003906 + - -0.890625 + - 1.5214844 + - 1.3681641 + - 0.6738281 + - 2.875 + - 4.9257813 + - -0.41552734 + - 1.0478516 + - -0.67822266 + - 0.17907715 + - 0.7519531 + - 2.2324219 + - 1.2285156 + - 1.1103516 + - 0.13671875 + - -4.5898438 + - -0.58251953 + - 3.1289063 + - -2.9101563 + - -0.5 + - -3.109375 + - -0.7890625 + - 2.46875 + - 6.3671875 + - 1.0234375 + - -1.5839844 + - 1.7226563 + - 2.2578125 + - -0.53271484 + - -1.3720703 + - 1.2597656 + - -5.4179688 + - 1.2451172 + - 2.6855469 + - 5.4140625 + - -0.4560547 + - 0.5136719 + - -1.0898438 + - -0.8725586 + - -2.5917969 + - -3.6132813 + - 3.6015625 + - -0.8730469 + - 0.97802734 + - 5.375 + - -2.1015625 + - -1.2539063 + - -2.5039063 + - -0.38916016 + - -0.047546387 + - 0.2939453 + - -1.1806641 + - -0.13952637 + - 3.3027344 + - -0.9951172 + - 0.3881836 + - 1.9726563 + - 0.578125 + - -0.53564453 + - -0.30908203 + - 3.3164063 + - -0.27539063 + - 0.8676758 + - 1.8466797 + - 2.5957031 + - 0.625 + - -0.63427734 + - -3.7246094 + - -3.3027344 + - 0.061645508 + - 3.0683594 + - -0.9375 + - 2.4726563 + - -0.6616211 + - 1.5009766 + - -0.15673828 + - -3.625 + - 0.9790039 + - 0.10180664 + - -0.1430664 + - -1.1445313 + - -2.4355469 + - 6.703125 + - -2.4082031 + - 0.82666016 + - -1.2753906 + - 2.6503906 + - 0.7402344 + - -0.68408203 + - -2.0527344 + - 0.01701355 + - -3.9707031 + - 0.9741211 + - 0.3684082 + - 1.9746094 + - 1.2275391 + - 11.5703125 + - -1.9726563 + - -1.2568359 + - 1.5556641 + - 0.38720703 + - 6.0625 + - 4.03125 + - 0.3269043 + - -1.5058594 + - -0.7089844 + - 0.52783203 + - 8.3125 + - 0.38867188 + - -0.64453125 + - 0.23876953 + - -1.2001953 + - 0.69921875 + - -3.109375 + - -2.7402344 + - -2.3964844 + - -3.6738281 + - 1.8652344 + - -3.6816406 + - -1.0703125 + - 1.0126953 + - 0.83251953 + - -4.9414063 + - -0.2487793 + - 0.36669922 + - 1.9873047 + - -0.4453125 + - -1.421875 + - 1.3291016 + - -1.1318359 + - -1.125 + - 2.25 + - 0.49023438 + - 1.9892578 + - 4.171875 + - -1.8466797 + - 1.5117188 + - 0.41845703 + - -4.1914063 + - -1.8828125 + - -0.3010254 + - -1.7539063 + - 3.1015625 + - -1.0146484 + - 0.4970703 + - 3.1601563 + - 0.080078125 + - 3.5722656 + - -0.74072266 + - 3.1738281 + - -1.8457031 + - 3.15625 + - -0.88671875 + - -3.90625 + - -2.7324219 + - -3.7539063 + - 1.6591797 + - 1.1328125 + - -0.9873047 + - -0.70703125 + - -0.78564453 + - -0.30078125 + - -2.2480469 + - -1.0400391 + - 1.1386719 + - 1.0878906 + - -0.74658203 + - 2.7128906 + - -9.265625 + - 3.6757813 + - 3.4140625 + - -0.7910156 + - 0.8730469 + - -2.4628906 + - -0.8623047 + - 0.82128906 + - -0.09765625 + - 1.9785156 + - 0.9145508 + - -0.8256836 + - 3.8378906 + - 0.45043945 + - -1.5556641 + - -2.703125 + - -0.60546875 + - 1.1132813 + - -0.43652344 + - -2.0175781 + - -0.31958008 + - -0.07867432 + - -1.5126953 + - 3.2539063 + - 0.37036133 + - -6.2109375 + - 1.9072266 + - 4.3515625 + - -0.01171875 + - 0.04852295 + - 0.296875 + - 0.8154297 + - 1.7441406 + - 2.4199219 + - 3.375 + - 0.42578125 + - 0.5605469 + - -0.43188477 + - -0.09667969 + - 1.4482422 + - 2.7324219 + - -0.17468262 + - -3.9589844 + - 10.7734375 + - 2.2988281 + - -3.1738281 + - -71 + - 0.8598633 + - -1.671875 + - -0.8847656 + - 2.8320313 + - 4.7929688 + - 1.6953125 + - 0.8984375 + - -0.09063721 + - -2.2050781 + - -2.765625 + - 1.6904297 + - -0.7163086 + - 2.3457031 + - 0.35083008 + - -5.0625 + - -2.6972656 + - -3.0078125 + - -0.32592773 + - 1.7851563 + - 2.4550781 + - 0.5205078 + - 1.1357422 + - -0.9584961 + - -1.6064453 + - -2.7480469 + - -1.6689453 + - -3.2753906 + - 1.0966797 + - -1.7207031 + - 1.1298828 + - -4.6367188 + - 0.08984375 + - -1.109375 + - -3.8867188 + - 1.0859375 + - 1.0166016 + - -0.043792725 + - 1.3095703 + - -2.6269531 + - -0.30297852 + - -1.3212891 + - 4.2148438 + - 1.796875 + - 1.2851563 + - -2.6074219 + - 2.0527344 + - 1.4707031 + - 2.9453125 + - 0.33374023 + - 1.2978516 + - -0.5600586 + - 1.0791016 + - 9.7578125 + - -4.8945313 + - 1.8242188 + - 0.14147949 + - 0.9223633 + - 0.3815918 + - -2.0175781 + - 0.9194336 + - 2.046875 + - 0.3852539 + - -3.15625 + - -0.7392578 + - 0.11602783 + - -4.640625 + - 0.7426758 + - -0.93603516 + - 0.4621582 + - -2.9628906 + - 2.0625 + - 2.890625 + - 0.58935547 + - 1.4394531 + - 0.2878418 + - -2.2128906 + - -0.7866211 + - 0.54345703 + - 1.0351563 + - -0.11187744 + - 0.4152832 + - -1.7988281 + - -1.1962891 + - 0.7685547 + - -2.7597656 + - 2.4375 + - 3.6503906 + - -0.6088867 + - -1.0214844 + - -1.2431641 + - 2.0878906 + - -0.15905762 + - 2.8632813 + - 2.4941406 + - 7.8046875 + - 1.8417969 + - 3.0839844 + - -1.7001953 + - 0.81103516 + - 1.5585938 + - -0.31445313 + - 0.3947754 + - 1.9375 + - -0.9941406 + - 0.13220215 + - -0.83740234 + - -2.9550781 + - 0.67822266 + - -1.1914063 + - 5.3007813 + - 16.75 + - 1.0976563 + - -0.65185547 + - -3.8984375 + - 1.375 + - -0.75 + - 1.6728516 + - 2.3945313 + - -0.31225586 + - -0.9316406 + - 3.2753906 + - 0.94970703 + - 1.359375 + - -1.875 + - 2.1777344 + - 2.2441406 + - -4.0898438 + - 1.3691406 + - 0.30395508 + - 2.1152344 + - 0.1126709 + - -1.7089844 + - 1.3037109 + - -0.82666016 + - 3.9414063 + - 1.4775391 + - -1.4306641 + - 3.2910156 + - 1.3632813 + - -1.796875 + - -3.2226563 + - 1.6689453 + - -0.072509766 + - -2.9960938 + - 0.76416016 + - 0.1616211 + - -2.6503906 + - 0.085510254 + - 1.9941406 + - 0.55908203 + - 0.34423828 + - 3.0351563 + - 1.4033203 + - -0.54785156 + - 0.37817383 + - 3.5644531 + - -0.7607422 + - 2.7578125 + - 0.76660156 + - 3.2304688 + - 2.390625 + - -2.2675781 + - -1.4804688 + - 2.2480469 + - 6.3867188 + - -2.7519531 + - -0.3305664 + - 3.0195313 + - -4.2539063 + - 0.103515625 + - -0.5175781 + - -2.2578125 + - 0.27441406 + - 0.76660156 + - 2.3105469 + - 1.1015625 + - 0.081726074 + - -0.16015625 + - -0.0078125 + - -1.9619141 + - -0.63720703 + - -2.21875 + - 0.4033203 + - 1.1953125 + - 0.39013672 + - -2.21875 + - -1.65625 + - -2.0566406 + - -1.6669922 + - -10.375 + - 0.6894531 + - 0.6230469 + - -0.0446167 + - -0.6328125 + - -1.4785156 + - -3.3125 + - 1.4169922 + - -0.5205078 + - 1.609375 + - 3.4453125 + - 1.1767578 + - 2.6171875 + - 5.765625 + - -1.453125 + - 1.8847656 + - -3.3789063 + - -3.6875 + - -2.703125 + - 1.6894531 + - 0.23828125 + - -2.6445313 + - 2.9140625 + - -2.3457031 + - -0.65478516 + - 0.69970703 + - 1.2314453 + - 5.4804688 + - -0.18164063 + - 0.48754883 + - 3.3339844 + - 4.1132813 + - -3.0664063 + - -5.390625 + - -0.29589844 + - 0.8984375 + - 1.0292969 + - 2.5839844 + - -0.093444824 + - -1.4394531 + - 2.6972656 + - 2.3828125 + - -0.29467773 + - -1.8320313 + - -1.3818359 + - 2.1191406 + - 0.82128906 + - 3.8769531 + - 1.8378906 + - -0.46313477 + - 3.375 + - 1.1123047 + - 1.0087891 + - 2.1347656 + - -3.4277344 + - -2.8945313 + - -2.65625 + - 2.4277344 + - 2.7734375 + - -1.9775391 + - -3.71875 + - -3.6953125 + - -1.5332031 + - -4.8945313 + - 0.98828125 + - -1.0302734 + - 2.1640625 + - 0.5756836 + - -2.96875 + - -4.15625 + - -0.06274414 + - 0.03515625 + - 3.4160156 + - 0.92285156 + - -0.64697266 + - -1.0117188 + - 20.421875 + - 1.1201172 + - 0.58251953 + - 2.1933594 + - 8.015625 + - -0.35546875 + - -0.2253418 + - 0.3088379 + - 0.7392578 + - -3.4335938 + - -0.8833008 + - 4.125 + - -2.3203125 + - 4.7304688 + - 0.66845703 + - 0.73535156 + - -0.64697266 + - 0.68310547 + - -2.9316406 + - -2.5644531 + - 5.1523438 + - -0.84277344 + - 0.48046875 + - 3.7089844 + - 0.16040039 + - -3.9765625 + - 1.3769531 + - 2.2441406 + - 0.9951172 + - 0.20532227 + - 0.63134766 + - 0.3720703 + - 3.1738281 + - 0.61279297 + - -4.0507813 + - 0.96191406 + - -0.62353516 + - -0.9472656 + - -1.0126953 + - -4.5390625 + - 5.3164063 + - 2.5136719 + - -6.2109375 + - -1.0478516 + - 1.4082031 + - 2.2832031 + - -1.5019531 + - 1.1425781 + - 1.7949219 + - -2.5058594 + - 3.6738281 + - 0.515625 + - 2.3613281 + - 0.29858398 + - 6.1289063 + - 1.1318359 + - 0.29174805 + - 1.046875 + - -2.0136719 + - -3.8242188 + - 4.546875 + - 3.0429688 + - 2.7207031 + - 0.028457642 + - 0.33691406 + - 0.15515137 + - 2.9394531 + - -3.4550781 + - 0.39282227 + - 0.38305664 + - -4.5078125 + - -1.8945313 + - 1.9765625 + - 2.75 + - -4.6992188 + - -2.0136719 + - -1.1396484 + - -3.2890625 + - -1.2226563 + - -2.7890625 + - 1.3349609 + - 1.0654297 + - 0.18237305 + - -3.5683594 + - -0.7392578 + - 2.5644531 + - 1.5683594 + - -1.3681641 + - -2.8691406 + - 1.3779297 + - -1.5214844 + - -0.83691406 + - -4.0742188 + - -2.375 + - -4.5429688 + - 2.6953125 + - 0.6816406 + - -3.203125 + - -2.5175781 + - -2.1894531 + - 1.2763672 + - 0.5151367 + - -0.6088867 + - 4.1289063 + - -3.0625 + - 0.6694336 + - -0.07446289 + - -1.6347656 + - 4.0546875 + - -3.6660156 + - 1.1875 + - -2.1308594 + - 2.0566406 + - -0.37890625 + - -4.78125 + - -1.0332031 + - 3.9765625 + - 0.3557129 + - 1.2753906 + - -2.8867188 + - 2.3613281 + - -6.140625 + - 1.2578125 + - 0.69873047 + - -0.89160156 + - 3.6640625 + - 3.5039063 + - 1.4873047 + - 2.4082031 + - -0.64160156 + - 0.66015625 + - -2.4589844 + - -3.3144531 + - -2.1328125 + - 2.8867188 + - 0.7421875 + - -1.4570313 + - 1.7060547 + - 1.0664063 + - -0.52685547 + - 2.5371094 + - -1.890625 + - -1.6679688 + - 1.2255859 + - -0.51953125 + - -1.5722656 + - 1.5800781 + - 0.42919922 + - 0.4934082 + - 3.7558594 + - 2.6347656 + - 0.0892334 + - -1.2910156 + - -5.2148438 + - 3.09375 + - 1.4492188 + - -2.1113281 + - 2.4453125 + - 1.5205078 + - -3.7050781 + - 2.1386719 + - 1.9863281 + - -1.7480469 + - 2.6875 + - -2.9941406 + - -1.9804688 + - -1.8417969 + - 0.51708984 + - 1.8808594 + - 0.34106445 + - -1.5683594 + - -5.5898438 + - -0.23840332 + - -1.6435547 + - -0.86816406 + - -1.3125 + - -5.1445313 + - 3.1347656 + - 0.6113281 + - -2.2421875 + - 1.0253906 + - -1.7421875 + - 3.6621094 + - -2.1660156 + - 2.3730469 + - -1.4462891 + - 0.33862305 + - -0.83984375 + - -0.49267578 + - 1.8681641 + - -0.2175293 + - -0.25854492 + - -3.2089844 + - 0.10430908 + - -1.5869141 + - 1.0126953 + - 1.2773438 + - 3.75 + - -1.6982422 + - -2.1621094 + - -0.034454346 + - 3.90625 + - 2.0703125 + - -1.0029297 + - -3.7441406 + - -1.1357422 + - -2.8867188 + - 8.7734375 + - -1.75 + - -0.11102295 + - -1.7871094 + - 4.3984375 + - 1.2919922 + - 1.1982422 + - 0.79785156 + - -1.3037109 + - 0.2175293 + - -0.7133789 + - 2.1738281 + - -5.390625 + - -2.6777344 + - 5.7382813 + - -4.1210938 + - 3.6914063 + - -1.0966797 + - 0.49926758 + - 0.63720703 + - 3.8164063 + - 0.39770508 + - -1.3974609 + - -0.011154175 + - 0.9560547 + - 2.171875 + - -4.8320313 + - 1.7783203 + - 0.55126953 + - -3.1738281 + - -1.4326172 + - -0.23596191 + - -1.140625 + - -0.22290039 + - -1.1679688 + - 0.34204102 + - 1.5605469 + - -0.85595703 + - -2.0996094 + - -3.8925781 + - 0.55126953 + - -1.4453125 + - -1.6191406 + - 0.23510742 + - 2.6875 + - 0.5488281 + - 2.5390625 + - -0.30566406 + - -0.31054688 + - -1.75 + - 3.4765625 + - 2.8691406 + - -1.8105469 + - -0.67822266 + - -3.6894531 + - -2.2324219 + - 1.7548828 + - 0.15344238 + - -2.2128906 + - -2.3222656 + - -0.578125 + - 1.2382813 + - -0.4765625 + - 0.88134766 + - 2.4453125 + - -0.92285156 + - -3.0878906 + - -2.65625 + - 0.1439209 + - -2.96875 + - -1.8652344 + - -1.0390625 + - -2.1757813 + - -2.8847656 + - -0.6171875 + - -0.8310547 + - -1.3662109 + - 5.4140625 + - 4.6992188 + - -4.21875 + - -0.35668945 + - -1.2822266 + - 1.4794922 + - -2.3300781 + - -2.2949219 + - 3.5800781 + - -1.3066406 + - -2.5527344 + - 1.4326172 + - 2.2753906 + - -2.203125 + - -3.6445313 + - -0.66503906 + - -1.7519531 + - -1.0224609 + - 0.15905762 + - -0.32299805 + - -0.7036133 + - -1.9609375 + - -1.0732422 + - -1.2900391 + - -0.7626953 + - -2.0644531 + - -2.2519531 + - -0.75390625 + - -0.3725586 + - 3.9863281 + - -2.7480469 + - 3.9023438 + - -1.9814453 + - -0.93847656 + - 6.5117188 + - 0.60546875 + - -0.82666016 + - -1.3544922 + - 0.6323242 + - -2.96875 + - 3.3164063 + - 6.4257813 + - -2.3164063 + - -0.70703125 + - 5.7226563 + - 0.9033203 + - 1.3867188 + - 0.39868164 + - -1.9765625 + - 1.0751953 + - 0.51123047 + - -2.9804688 + - 1.3408203 + - -0.8623047 + - -0.3305664 + - 2.6601563 + - -7.1601563 + - 0.71728516 + - 4.21875 + - -2.4765625 + - -0.79003906 + - -2.1503906 + - 4.2460938 + - -5.1679688 + - -2.3320313 + - -0.23156738 + - 1.5947266 + - 2.4082031 + - -0.6894531 + - 1.6523438 + - -2.3300781 + - -2.6777344 + - 2.3339844 + - -0.69189453 + - 0.39379883 + - -2.3339844 + - 3.765625 + - 0.6713867 + - -1.71875 + - -2.4199219 + - -1.2382813 + - -0.22509766 + - 0.57373047 + - -0.34472656 + - 0.5488281 + - 2.0214844 + - -2.5917969 + - -0.09649658 + - -2.7949219 + - 0.71972656 + - 0.95751953 + - 1.1845703 + - -1.2763672 + - -2.2324219 + - -3.1464844 + - 1.2744141 + - 0.5834961 + - 1.15625 + - -0.36157227 + - -2.1542969 + - -2.1152344 + - 1.2978516 + - -3.0253906 + - -2.5078125 + - -1.9648438 + - 3.6992188 + - -3.4804688 + - -1.9482422 + - -0.6015625 + - 2.3535156 + - -1.609375 + - 0.017578125 + - -1.0625 + - -0.9248047 + - -0.30395508 + - -4.1132813 + - 0.8129883 + - 1.6357422 + - 4.8632813 + - -1.6777344 + - 1.4501953 + - -0.2841797 + - 6.375 + - 1.9326172 + - -0.73095703 + - 1.4150391 + - 1.7363281 + - -0.64941406 + - -1.9150391 + - -1.2910156 + - 1.2724609 + - 1.7753906 + - 3.4375 + - -1.9316406 + - 2.3691406 + - -0.04574585 + - -0.054595947 + - 2.40625 + - -0.54248047 + - -0.9785156 + - 1.7080078 + - -1.4541016 + - -2.8515625 + - 0.9140625 + - 0.92041016 + - -3.3164063 + - -0.5415039 + - 1.859375 + - -1.9082031 + - -1.2275391 + - -0.16516113 + - -0.29711914 + - 4.4257813 + - 6.828125 + - -1.8183594 + - -0.18664551 + - -3.7402344 + - -2.1445313 + - 0.515625 + - 1.0849609 + - -2.375 + - 1.8476563 + - -3.6679688 + - -2.8671875 + - -0.51171875 + - -2.3496094 + - -0.9980469 + - -2.3925781 + - -0.021759033 + - 1.8232422 + - 1.421875 + - -0.38916016 + - 1.7294922 + - 2.8515625 + - -0.71875 + - -2.0195313 + - 1.3427734 + - 2.3515625 + - 0.8647461 + - -1.6259766 + - -0.9580078 + - 0.50634766 + - 0.05996704 + - -0.2841797 + - -3.6992188 + - -1.28125 + - -1.3017578 + - 1.7587891 + - -0.9296875 + - 0.9707031 + - 0.14562988 + - 2.8203125 + - -0.19946289 + - -1.4619141 + - 8.03125 + - -2.1171875 + - 3.65625 + - -4.03125 + - 3.6367188 + - 4.2148438 + - -4.0703125 + - 1.1347656 + - 1.7832031 + - -0.21923828 + - -1.1455078 + - -0.35864258 + - -0.16906738 + - 1.8251953 + - -1.71875 + - -1.2568359 + - -1.7851563 + - 3.9589844 + - -0.72753906 + - 1.2275391 + - 0.44628906 + - -1.2568359 + - 0.9194336 + - -0.515625 + - -0.5131836 + - -1.1142578 + - 3.3339844 + - 0.8959961 + - -2.1777344 + - 1.6064453 + - -0.6953125 + - -2.7265625 + - 0.44482422 + - -2.1367188 + - -0.85253906 + - 2.6328125 + - 2.1464844 + - 2.1816406 + - -8.9609375 + - 4.40625 + - -0.578125 + - 0.32617188 + - 0.48632813 + - -3.5039063 + - 1.9033203 + - 0.44970703 + - -1.4980469 + - 1.4433594 + - -4.6289063 + - 0.4033203 + - -0.2097168 + - -0.4741211 + - 0.07739258 + - 0.23547363 + - 1.1494141 + - -0.3383789 + - -0.7475586 + - 0.73291016 + - 2.0761719 + - -2.421875 + - 1.4589844 + - -2.5488281 + - 1.5820313 + - 2.3574219 + - 0.77978516 + - 1.0751953 + - 1.9609375 + - -0.33642578 + - 0.08258057 + - -1.2607422 + - 4.4570313 + - 1.421875 + - 2.5390625 + - 1.0185547 + - -4.046875 + - 0.6635742 + - -0.4050293 + - -0.3876953 + - -0.26391602 + - 1.1337891 + - -0.93896484 + - 1.3505859 + - 6.3554688 + - 1.0771484 + - -8.7421875 + - 1.2646484 + - 1.3359375 + - -0.11853027 + - -0.98535156 + - 2.9433594 + - 6.1757813 + - -1.8076172 + - -0.09399414 + - -0.6176758 + - -1.4550781 + - 1.4707031 + - -0.77441406 + - 0.2220459 + - -0.23046875 + - -2.4199219 + - -0.43237305 + - -0.49902344 + - 4.078125 + - -1.9355469 + - -1.4414063 + - 0.12658691 + - 1.7949219 + - 3.6269531 + - 2.203125 + - 1.0576172 + - 0.4970703 + - 2.703125 + - 0.66748047 + - -24.875 + - 1.6738281 + - -4.6367188 + - -1.8183594 + - -15.671875 + - -1.2578125 + - -0.6875 + - 3.0644531 + - -3.7109375 + - 2.6074219 + - -7.5507813 + - -7.9296875 + - 0.8076172 + - -0.953125 + - 2.0195313 + - -1.1660156 + - 0.38110352 + - 4.4414063 + - -0.9458008 + - 1.5400391 + - 1.0097656 + - 2.0351563 + - 1.9921875 + - -2.9023438 + - -2.4785156 + - 3.6640625 + - -2.578125 + - 1.8388672 + - 1.6982422 + - -5.0117188 + - 1.9042969 + - -0.31152344 + - -0.0836792 + - 2.3574219 + - 0.6328125 + - -1.6601563 + - 1.71875 + - -1.8515625 + - 0.73095703 + - -0.04421997 + - 0.4597168 + - 0.034576416 + - 3.46875 + - 1.4013672 + - 0.056915283 + - 3.71875 + - 2.7539063 + - 1.515625 + - -1.0654297 + - -1.0966797 + - 1.7587891 + - -1.0693359 + - -2.015625 + - 2.0742188 + - 1.3916016 + - 3.1171875 + - -1.6464844 + - -4.7148438 + - 0.67529297 + - -2.6191406 + - 0.16125488 + - 2.4453125 + - -3.1289063 + - -0.6386719 + - -0.37548828 + - -0.41308594 + - -0.12719727 + - 4.5664063 + - 2.8710938 + - 1.4658203 + - -4.6757813 + - -0.140625 + - 3.0175781 + - 0.5756836 + - -0.4440918 + - 1.3955078 + - 0.27856445 + - -0.7294922 + - -1.0048828 + - 2.1171875 + - -3.4804688 + - -0.22387695 + - 1.3056641 + - -0.33764648 + - 0.57910156 + - 4.0429688 + - -0.57177734 + - 0.72314453 + - -1.4560547 + - -3.84375 + - 0.8569336 + - -1.7167969 + - 0.9316406 + - -1.5507813 + - -2.4707031 + - 0.9458008 + - -3.0820313 + - -8.6328125 + - 0.87353516 + - -3.7128906 + - 0.2854004 + - 2.3984375 + - 1.1992188 + - -3.4628906 + - 0.6176758 + - -3.5625 + - -1.8496094 + - -5.140625 + - -0.8227539 + - 0.005859375 + - -0.0052986145 + - 3.953125 + - -0.890625 + - 1.4560547 + - -3.1464844 + - -2.7402344 + - -1.1064453 + - 0.2019043 + - -0.8989258 + - -3.078125 + - 0.8232422 + - -2.5 + - -0.43896484 + - -0.1282959 + - 1.2353516 + - -0.3251953 + - 0.5102539 + - -3.4140625 + - -1.6064453 + - 0.57910156 + - -5.2148438 + - -2.2265625 + - 2.5878906 + - 5.3945313 + - 5.4765625 + - -0.2890625 + - 0.234375 + - 4.4335938 + - 3.2617188 + - -1.6669922 + - -0.90234375 + - -2.3027344 + - 0.3310547 + - 2.8554688 + - -1.0009766 + - -0.7446289 + - -0.61035156 + - -0.75390625 + - -2.0234375 + - -2.2988281 + - 2.4609375 + - -1.8125 + - 1.2353516 + - -0.21203613 + - -2.3457031 + - -0.0234375 + - 0.78027344 + - 1.3662109 + - -0.5136719 + - -0.7988281 + - 0.52685547 + - 2.2109375 + - -0.9453125 + - -1.5009766 + - -4.6523438 + - -0.0446167 + - 0.20629883 + - 3.40625 + - -0.46484375 + - 0.18688965 + - 2.3476563 + - 23.5 + - -0.89501953 + - -3.078125 + - 4.3554688 + - 0.5859375 + - 4.0507813 + - -2.0214844 + - -13.3359375 + - 1.4970703 + - -1.0517578 + - 4.7578125 + - 0.66796875 + - 0.11383057 + - 1.2236328 + - 0.84375 + - 2.2851563 + - 1.4814453 + - -4.9257813 + - 0.3095703 + - -4.7148438 + - 1.0253906 + - -3.7539063 + - 0.3647461 + - -0.20080566 + - -1.4785156 + - 3.5820313 + - -0.93603516 + - -2.2539063 + - 0.28979492 + - 3.0644531 + - -0.5317383 + - -0.69189453 + - 1.3955078 + - -1.6269531 + - -1.3457031 + - -2.0546875 + - -0.33032227 + - -0.26245117 + - -0.96191406 + - 0.11212158 + - -2.59375 + - 2.2695313 + - -1.0654297 + - -1.7246094 + - 1.9658203 + - -0.79833984 + - 0.2915039 + - 1.7851563 + - -3.4238281 + - 3.5742188 + - 1.0439453 + - -1.3769531 + - 5.90625 + - -2.6601563 + - -2.3691406 + - 0.82666016 + - 0.78759766 + - 2.9375 + - -2.3515625 + - 1.5 + - -2.4375 + - 3.8339844 + - 0.71240234 + - -1.1992188 + - -0.064697266 + - 6.109375 + - 3.3691406 + - -0.4128418 + - -1.7158203 + - -0.36547852 + - -1.1796875 + - -0.25268555 + - -0.30004883 + - -0.19189453 + - -2.7128906 + - -5.9140625 + - 6.5351563 + - 0.93652344 + - -2.375 + - -1.8955078 + - 1.6201172 + - 0.37719727 + - -0.3203125 + - -0.21618652 + - 0.5834961 + - 1.2314453 + - 0.7866211 + - 1.6142578 + - -3.2421875 + - 0.8457031 + - 1.3232422 + - -1.9501953 + - 0.4663086 + - 0.171875 + - 5.1757813 + - 2.1445313 + - -1.6201172 + - 4.75 + - -1.0703125 + - 2.4765625 + - 4.703125 + - -0.546875 + - -1.9902344 + - 5.75 + - 0.78759766 + - 0.38598633 + - -1.2539063 + - -0.17272949 + - 2.4550781 + - 1.6503906 + - -1.2587891 + - -1.6191406 + - -1.8496094 + - -0.71777344 + - -0.42578125 + - 0.38891602 + - 0.73339844 + - 0.124572754 + - 0.29614258 + - -2.078125 + - 2.2597656 + - 23.0625 + - -3.9101563 + - 2.9414063 + - -0.17468262 + - 0.92871094 + - 2.359375 + - 0.18408203 + - -2.0410156 + - 0.2841797 + - -0.84375 + - -1.4482422 + - 1.9472656 + - -2.3066406 + - -1.7001953 + - -0.2607422 + - 0.31054688 + - -5.1601563 + - 1.984375 + - 2.1582031 + - 14.546875 + - -2.6972656 + - 1.4003906 + - -0.11602783 + - -1.4023438 + - 0.2097168 + - -0.65283203 + - 0.63623047 + - 0.6635742 + - -0.21679688 + - -1.2744141 + - -26 + - -0.5024414 + - 0.55078125 + - 1.0732422 + - -2.9140625 + - -0.4934082 + - -0.6484375 + - 0.9169922 + - -2.46875 + - 0.9277344 + - 0.59472656 + - -3.8222656 + - -1.3505859 + - -0.8232422 + - -0.15454102 + - -1.0322266 + - -1.2919922 + - -2.9804688 + - 0.62353516 + - -0.2298584 + - -2.3261719 + - 0.8232422 + - 2.6308594 + - 0.26000977 + - 3.421875 + - -1.4072266 + - 3.1738281 + - -0.5625 + - 7.6953125 + - -1.9335938 + - 2.5839844 + - 4.0078125 + - -6.6484375 + - 2.421875 + - -2.1796875 + - 4.359375 + - -0.8208008 + - -0.51123047 + - -1.7314453 + - 0.5083008 + - 0.62841797 + - 0.9926758 + - -5.5351563 + - 2.9492188 + - -0.17919922 + - -2.4003906 + - 0.0287323 + - 2.7089844 + - 2.53125 + - 2.6328125 + - 2.5039063 + - -1.953125 + - -1.2744141 + - 1.8378906 + - 4.15625 + - 1.4326172 + - -1.4902344 + - -3.828125 + - -0.64501953 + - -4.1679688 + - -1.1298828 + - 2.1113281 + - 2.2246094 + - 3.640625 + - -1.1396484 + - 4.890625 + - 4.9960938 + - 2.046875 + - -0.7363281 + - -1.0830078 + - 0.77001953 + - -1.2724609 + - 1.3398438 + - -1.2626953 + - 1.3603516 + - -1.4814453 + - -2.6640625 + - 0.6230469 + - -3.5585938 + - -0.33764648 + - -3.3710938 + - -3.9375 + - -0.76416016 + - 0.515625 + - 3.0039063 + - -1.4169922 + - -0.14941406 + - 2.9160156 + - 0.7988281 + - 0.52783203 + - -2.7890625 + - 3.3554688 + - 2.0605469 + - -1.4150391 + - -3.3203125 + - 3.6054688 + - -0.5683594 + - 3.9394531 + - -2.7871094 + - -0.92089844 + - -1.0517578 + - 0.8227539 + - 3.4941406 + - 2.4726563 + - -0.17443848 + - 0.9404297 + - -3.7363281 + - -6.046875 + - -0.46191406 + - -1.4882813 + - 2.6621094 + - 2.6914063 + - 0.81933594 + - 1.0390625 + - 2.1582031 + - 0.5991211 + - -0.0715332 + - 2.3574219 + - -1.8457031 + - 2.953125 + - 1 + - -0.45532227 + - -0.33251953 + - -0.8066406 + - -0.6645508 + - 12.1953125 + - 0.5239258 + - 2.53125 + - 5.7851563 + - 7.796875 + - -1.2158203 + - 0.42822266 + - -1.0888672 + - 1.4638672 + - -2.6542969 + - -1.7939453 + - 1.3466797 + - 0.6689453 + - 0.30126953 + - -2.5625 + - -0.71875 + - 1.0185547 + - 1.890625 + - 1.9335938 + - 0.34350586 + - -0.17382813 + - -0.18469238 + - -0.78125 + - -1.9404297 + - -2.1035156 + - -1.4277344 + - 1.2451172 + - -0.46313477 + - -2.4238281 + - -3.4238281 + - 2.7890625 + - 2.1503906 + - 1.9921875 + - 1.015625 + - 0.2241211 + - -0.98291016 + - 1.9423828 + - -1.75 + - 0.74072266 + - 1.8212891 + - -1.4931641 + - 1.2539063 + - -1.7744141 + - -0.55615234 + - 3.9394531 + - -0.7192383 + - 1.7138672 + - -2.6484375 + - -1.0947266 + - -2.9023438 + - 3.21875 + - 1.0126953 + - -2.4042969 + - -1.1142578 + - 4.1015625 + - 1.8300781 + - 1.0361328 + - 1.5976563 + - 4.1875 + - 0.8457031 + - -1.8183594 + - -1.6669922 + - 1.4794922 + - 1.5244141 + - 1.203125 + - 4.1875 + - 2.5175781 + - 2.2617188 + - 1.9628906 + - -1.4160156 + - -0.6542969 + - -1.8525391 + - 1.2382813 + - 0.2019043 + - -0.050201416 + - -1.1044922 + - 0.3461914 + - 1.390625 + - 0.10290527 + - 3.0859375 + - -0.97753906 + - 0.08258057 + - 0.86376953 + - -0.26757813 + - 23.46875 + - -3.4707031 + - -1.1474609 + - -4.2460938 + - -0.22851563 + - 0.73583984 + - 2.34375 + - -0.092041016 + - -4.7851563 + - 1.6845703 + - 2.5976563 + - -1.359375 + - 3.3945313 + - 2.5351563 + - 1.9492188 + - 0.52001953 + - 1.6367188 + - -3.0742188 + - 1.7148438 + - 0.96191406 + - -2.2128906 + - 1.7011719 + - -3.6757813 + - 1.7763672 + - 0.0758667 + - 0.82177734 + - -2.2089844 + - 0.11645508 + - 2.3359375 + - -3.7753906 + - -0.76953125 + - 1.3154297 + - 2.078125 + - 2.1328125 + - 2.4160156 + - -1.5634766 + - 6.2851563 + - -0.03125 + - 0.32592773 + - -0.65625 + - -4.3359375 + - -3.5664063 + - 0.5019531 + - 4.9257813 + - 0.38012695 + - 0.20166016 + - -1.5683594 + - 1.7353516 + - 2.8164063 + - 3.9121094 + - -0.57470703 + - -1.8261719 + - 0.39379883 + - 8.6640625 + - -3.2226563 + - -1.2158203 + - 0.6328125 + - -1.2607422 + - 1.1367188 + - 0.51123047 + - 1.3037109 + - -0.11773682 + - -0.11462402 + - -4.2421875 + - -3.546875 + - -2.6640625 + - -3.1269531 + - -2.9941406 + - 0.49536133 + - -2.1972656 + - -1.2841797 + - 3.2851563 + - -0.7211914 + - -1.8222656 + - 0.68310547 + - -3.3378906 + - -4.3945313 + - -0.29614258 + - 2.0722656 + - -2.6777344 + - -0.19885254 + - 1.1748047 + - 2.1855469 + - 1.2265625 + - -1.1201172 + - -3.0878906 + - -1.4257813 + - -0.8696289 + - -2.9550781 + - 0.012275696 + - -0.5029297 + - -0.26831055 + - 4.1679688 + - -1.1015625 + - 2.6386719 + - -3.3066406 + - -2.3125 + - -1.2939453 + - -0.6850586 + - 1.2021484 + - -1.3095703 + - 1.4707031 + - 1.0224609 + - 0.8652344 + - 0.40429688 + - -1.2783203 + - -1.6054688 + - 1.5166016 + - -1.4238281 + - 1.6367188 + - 0.48046875 + - -0.32885742 + - 2.7402344 + - 0.9326172 + - 0.21398926 + - 1.2578125 + - -3.8359375 + - -2.6425781 + - -3.2421875 + - -1.3925781 + - 0.29956055 + - -0.22302246 + - 0.52734375 + - 1.0439453 + - 1.1669922 + - 1.2773438 + - -1.2041016 + - -2.421875 + - 1.2001953 + - 2.1035156 + - -2.71875 + - 2.1171875 + - 0.453125 + - 0.3317871 + - 1.2675781 + - 0.6713867 + - -5.578125 + - -3.3398438 + - -1.0908203 + - 1.5175781 + - 0.0262146 + - -2.25 + - -0.95703125 + - 4.9179688 + - -0.171875 + - 1.3681641 + - 6.5859375 + - 2.5625 + - -2.6875 + - 0.84033203 + - -0.055236816 + - 6.015625 + - -4.9648438 + - -2.1777344 + - 0.98876953 + - -2.1269531 + - -0.57470703 + - -2.3886719 + - 1.8857422 + - -3.3496094 + - 3.1972656 + - -1.1943359 + - 0.71972656 + - 0.15234375 + - -0.51708984 + - -1.1992188 + - 0.9658203 + - -0.23144531 + - -1.9414063 + - 5.9726563 + - 0.78759766 + - 2.4453125 + - -0.31518555 + - -4.4648438 + - 2.4316406 + - 0.24658203 + - 1.3349609 + - -0.71484375 + - -1.3564453 + - -0.7675781 + - 1.1240234 + - -2.0175781 + - -3.0800781 + - -0.032348633 + - 0.69873047 + - 1.7294922 + - 2.8203125 + - -2.3183594 + - 1.2373047 + - 0.30688477 + - -2.703125 + - 0.3466797 + - 3.5585938 + - 1.3242188 + - 5.7539063 + - 0.24804688 + - 0.0625 + - 16.203125 + - -0.41845703 + - 2.3027344 + - -3.5488281 + - -0.90771484 + - -0.89697266 + - 0.5410156 + - 1.4794922 + - 4.1484375 + - -0.92089844 + - -3.5253906 + - -1.8222656 + - 0.8720703 + - 1.9169922 + - 1.0517578 + - -1.1318359 + - 4.453125 + - -0.26391602 + - -0.66796875 + - 0.24523926 + - -1.6455078 + - 0.3034668 + - -1.5175781 + - -2.2949219 + - -1.6777344 + - 2.3652344 + - -0.2253418 + - -3.9960938 + - -3.1015625 + - 0.74316406 + - -0.99609375 + - -0.87890625 + - -1.8613281 + - -1.890625 + - 0.1751709 + - -0.083984375 + - 3.0117188 + - 0.75634766 + - 2.7890625 + - 0.2861328 + - 1.9648438 + - -4.5898438 + - 0.88720703 + - 0.65283203 + - -0.06890869 + - 4.2070313 + - -1.3691406 + - -1.3691406 + - -2.0625 + - -5.4882813 + - 2.1308594 + - 1.9013672 + - -0.30786133 + - 2.8808594 + - 4.703125 + - -1.6386719 + - -0.17785645 + - -3.8339844 + - -0.13439941 + - -1.8310547 + - -0.77441406 + - -1.1064453 + - 1.7431641 + - -2.7011719 + - -0.38720703 + - 1.0185547 + - 1.9091797 + - -4.953125 + - 3.3925781 + - 0.92626953 + - -0.5727539 + - -1.6923828 + - 4.6914063 + - 0.94384766 + - 1.1826172 + - 1.0126953 + - -1.9609375 + - -2.4472656 + - 1.6650391 + - 1.3632813 + - 2.3925781 + - 0.17211914 + - 4.7539063 + - -1.6230469 + - -1.1386719 + - 0.9663086 + - -1.5556641 + - -0.7675781 + - -1.5439453 + - 0.62353516 + - -4.34375 + - -0.8286133 + - 1.6669922 + - 1.9033203 + - -2.3789063 + - 2.5566406 + - -3.9316406 + - 2.6816406 + - 0.78759766 + - -0.73876953 + - 4.6054688 + - -0.89160156 + - -2.6074219 + - 1.9169922 + - 2.4316406 + - 3.3085938 + - 1.7695313 + - -1.0097656 + - -0.22338867 + - 0.45361328 + - 33.40625 + - 13.4765625 + - -9.1796875 + - 2.265625 + - -1.0507813 + - 1.4277344 + - -2.734375 + - -4.1757813 + - -0.36376953 + - -0.20703125 + - 1.9589844 + - 0.51464844 + - -0.34057617 + - 1.5166016 + - -2.7890625 + - 1.9707031 + - -1.0009766 + - 0.91259766 + - -2.6933594 + - 0.7138672 + - 1.8779297 + - 3.4140625 + - -1.3193359 + - -1.1445313 + - -0.2253418 + - -2.1523438 + - 0.08703613 + - -0.4038086 + - -4.6054688 + - 0.75097656 + - -0.119384766 + - -0.16101074 + - 1.4169922 + - 2.4785156 + - 1.6337891 + - -4.3789063 + - -1.8554688 + - 2.0644531 + - -2.1699219 + - 1.2451172 + - 2.2324219 + - 1.5371094 + - -0.27978516 + - 4.2304688 + - -1.2050781 + - 0.29345703 + - -3.4941406 + - 2.1425781 + - 1.3066406 + - 0.5107422 + - 2.2910156 + - 8.7265625 + - -0.5673828 + - -1.4306641 + - 1.7226563 + - -0.9453125 + - -0.84521484 + - 0.05606079 + - 1.4580078 + - 0.2175293 + - 2.9785156 + - 2.3984375 + - 1.2050781 + - -3.9238281 + - -1.7402344 + - -1.1376953 + - 1.9384766 + - -0.83203125 + - -2.6855469 + - 0.2565918 + - -2.9277344 + - -0.20385742 + - -1.5039063 + - -2.265625 + - 0.92822266 + - -2.6640625 + - -0.18579102 + - 1.3486328 + - 5.4453125 + - 0.41503906 + - -1.7626953 + - -1.4189453 + - 1.6337891 + - 1.8632813 + - 1.6875 + - 2.3808594 + - 1.1025391 + - 0.22314453 + - 1.9453125 + - -1.5341797 + - 1.3691406 + - 0.5053711 + - -0.8886719 + - -0.99902344 + - 3.6582031 + - 1.2080078 + - -1.3974609 + - 4.03125 + - -1.9023438 + - 0.5214844 + - -3.4609375 + - -1.0595703 + - 0.75097656 + - 1.15625 + - 0.11743164 + - 0.4892578 + - 0.32250977 + - -2.3222656 + - -0.081970215 + - 1.4853516 + - -3.2910156 + - 3.6777344 + - -0.69384766 + - 4.28125 + - 1.8076172 + - 2.8300781 + - -2.9140625 + - -1.3212891 + - 3.5175781 + - 0.42773438 + - -2.3886719 + - -1.8847656 + - 0.8803711 + - 1.109375 + - 3.6132813 + - 1.3603516 + - -3.2714844 + - 2.0566406 + - 2.4140625 + - 0.1307373 + - -0.87890625 + - -1.2529297 + - -1.1123047 + - 1.2490234 + - 0.28198242 + - 0.3125 + - -0.18469238 + - -3.4375 + - 1.5390625 + - -1.3007813 + - -0.4399414 + - 1.9648438 + - 1.7783203 + - -2.1347656 + - -0.296875 + - -0.17236328 + - 2.0097656 + - -1.2041016 + - -0.14453125 + - -4.1132813 + - 1.1660156 + - 1.3193359 + - -1.4667969 + - -1.4375 + - 0.4111328 + - -0.91552734 + - -1.1474609 + - 0.41748047 + - 0.4025879 + - 2.1621094 + - 0.09051514 + - -2.5625 + - 2.7890625 + - 1.7763672 + - -0.9404297 + - 0.4248047 + - 0.32739258 + - 2.3457031 + - -0.119506836 + - -2.5625 + - -0.5102539 + - -0.26660156 + - -2.6132813 + - -1.3476563 + - 0.5800781 + - 0.7158203 + - 1.4140625 + - 1.9658203 + - -1.1708984 + - -1.7529297 + - -0.59765625 + - 0.38500977 + - -0.5258789 + - 0.9008789 + - 1.5195313 + - -1.5722656 + - -0.06945801 + - 1.7695313 + - 1.7246094 + - -1.2783203 + - 2.3789063 + - 2.3203125 + - 1.78125 + - 0.7128906 + - -2.4902344 + - -1.8623047 + - 2.984375 + - 1.1738281 + - 0.92285156 + - -3.3925781 + - -2.7636719 + - -1.4267578 + - -2.8496094 + - -0.41601563 + - 0.39208984 + - -12.4453125 + - -0.31689453 + - -0.46142578 + - 0.21984863 + - -0.89160156 + - 0.5493164 + - -1.2490234 + - 1.6689453 + - 0.4597168 + - -1.7109375 + - 2.34375 + - -5.3710938 + - 0.48706055 + - 0.3251953 + - -1.1757813 + - 1.375 + - 1.5214844 + - -2.0566406 + - -0.022598267 + - 3.4277344 + - 0.61816406 + - 1.828125 + - -0.5341797 + - 9.390625 + - 1.4433594 + - -2.1386719 + - 0.72509766 + - -0.5239258 + - 0.89208984 + - -0.89160156 + - -0.083618164 + - -2.6601563 + - 6.7539063 + - 0.6816406 + - -1.7734375 + - 0.74072266 + - 1.0400391 + - -6.0976563 + - 0.71777344 + - 0.2915039 + - 1.3701172 + - 0.43798828 + - 6.2929688 + - -0.5932617 + - -2.7695313 + - 1.8964844 + - 2.2207031 + - 2.4609375 + - 2.1035156 + - 1.1425781 + - -2.8378906 + - 1.5439453 + - 1.7998047 + - -3.1582031 + - -1.0820313 + - -0.32714844 + - -0.43115234 + - -3.2050781 + - -1.8183594 + - -3.2753906 + - -0.1986084 + - -3.8652344 + - 2.4101563 + - -1.6953125 + - -1.7978516 + - 3.5683594 + - -2.4199219 + - 0.19494629 + - -1.6347656 + - -1.6376953 + - 2.0566406 + - -0.3552246 + - -1.3388672 + - 1.7587891 + - 1.6367188 + - -0.61572266 + - 0.6455078 + - 0.6113281 + - 2.1738281 + - 0.86376953 + - 3.7558594 + - 0.019104004 + - -0.2692871 + - -1.7851563 + - 2.6640625 + - 0.18725586 + - -2.0234375 + - -1.2880859 + - -1.5732422 + - -0.09063721 + - 5.2382813 + - 4.703125 + - -1.1416016 + - 1.9345703 + - 2.3378906 + - -0.7207031 + - -1.2539063 + - -0.4033203 + - 2.0351563 + - -1.9433594 + - 2.2792969 + - -3.4765625 + - 2.8359375 + - 0.7871094 + - -3.9589844 + - -0.11071777 + - -2.6660156 + - 3.2460938 + - 0.30151367 + - -5.5117188 + - -0.2685547 + - -1.7626953 + - 1.6542969 + - 0.42626953 + - 0.66503906 + - 3.4492188 + - 0.47387695 + - 1.28125 + - -0.3215332 + - -3.09375 + - -1.6669922 + - -0.59765625 + - -3.7890625 + - 8.9296875 + - 1.1962891 + - 1.4658203 + - -0.5292969 + - 0.5283203 + - -1.4980469 + - 0.4362793 + - 1.1601563 + - -1.2988281 + - -5.4726563 + - -3.3964844 + - 4.6328125 + - -4.1757813 + - 1.8066406 + - -1.8466797 + - -2.8164063 + - 1.296875 + - 0.8886719 + - -0.58203125 + - 0.27270508 + - 1.25 + - 1.1113281 + - -3.1777344 + - 0.07476807 + - -4.0429688 + - 1.7041016 + - -1.5908203 + - 1.2070313 + - -3.5976563 + - 0.81103516 + - -1.4306641 + - 0.9394531 + - -2.4980469 + - -1.0517578 + - 0.07281494 + - 2.2519531 + - 3.2441406 + - 0.49902344 + - 1.6640625 + - -1.6152344 + - 2.421875 + - 1.2851563 + - -0.71875 + - -1.1757813 + - -2.6894531 + - -0.24438477 + - 0.5205078 + - 2.5664063 + - -2.8769531 + - -0.093566895 + - -0.00390625 + - 4.234375 + - -0.012275696 + - -2.2246094 + - 0.36572266 + - 1.9814453 + - -2.2167969 + - -2.3164063 + - -0.9794922 + - 1.2119141 + - 1.9492188 + - -0.5366211 + - 0.7207031 + - -1.4638672 + - -0.29589844 + - 0.8256836 + - 3.0742188 + - -2.9179688 + - -2.7089844 + - 1.5957031 + - 1.8466797 + - 5.8125 + - 2.6308594 + - -1.5351563 + - 1.4619141 + - -0.5991211 + - 1.0800781 + - -1.6582031 + - -2.0136719 + - -0.91308594 + - 1.2207031 + - -1.9169922 + - 1.1708984 + - -1.0449219 + - 3.5253906 + - 4.34375 + - -0.51708984 + - 0.18188477 + - -0.23486328 + - -1.4326172 + - -3.3300781 + - -2.8691406 + - -0.890625 + - 1.3818359 + - -1.0712891 + - 0.85791016 + - 2.171875 + - 1.5488281 + - 1.4101563 + - -0.41503906 + - 0.8691406 + - -4.9179688 + - -0.90283203 + - -8.3046875 + - -1.7314453 + - -2.0175781 + - -2.2753906 + - -2.9023438 + - -0.96533203 + - 2.8378906 + - -6.7421875 + - -4.4335938 + - 24.671875 + - -1.7314453 + - -1.6464844 + - -0.65722656 + - -0.1796875 + - 0.51416016 + - 2.3203125 + - 3.0976563 + - -2.1542969 + - 1.1396484 + - 1.6914063 + - -0.0390625 + - 0.88378906 + - -1.4277344 + - 0.4267578 + - 0.08758545 + - -3.4179688 + - 0.72802734 + - 4.8867188 + - -0.75634766 + - -0.5488281 + - -1.4765625 + - -2.4765625 + - 0.65625 + - -0.3408203 + - 3.7578125 + - 0.36083984 + - -2.0878906 + - 2.2285156 + - -0.27612305 + - 1.5869141 + - -2.5488281 + - 0.7753906 + - 0.4025879 + - 1.2587891 + - -0.55908203 + - 1.6416016 + - 2.9863281 + - 4.1796875 + - 0.13830566 + - -0.85595703 + - -0.55566406 + - 2.0410156 + - -3.8964844 + - 0.77978516 + - -0.2824707 + - 3.2734375 + - 1.1845703 + - -2.0351563 + - 0.7270508 + - 2.3515625 + - 0.83691406 + - -3.1015625 + - -1.3193359 + - -2.0195313 + - -1.6425781 + - -2.9023438 + - -0.42871094 + - 2.3789063 + - -3.4550781 + - -2.8339844 + - 1.1816406 + - -0.5722656 + - 2.453125 + - -2.5 + - -0.10070801 + - -1.1962891 + - -0.010597229 + - -2.734375 + - 1.5898438 + - -4.609375 + - -4.359375 + - -0.1171875 + - -1.5556641 + - 1.4550781 + - 8.6328125 + - 0.89501953 + - 3.6816406 + - -4.7578125 + - 1.1894531 + - -0.67626953 + - 1.3095703 + - 0.9038086 + - 0.67626953 + - -0.16235352 + - -4.78125 + - 0.53125 + - 0.7607422 + - 2.5625 + - -0.83447266 + - -2.8378906 + - 0.44628906 + - -0.08538818 + - -0.5522461 + - -2.4765625 + - 1.4394531 + - 2.1074219 + - -2.5625 + - 5.3554688 + - 0.30908203 + - 0.36865234 + - 0.9243164 + - 0.52734375 + - 4.0117188 + - 0.27416992 + - 2.0800781 + - -1.8203125 + - -0.51904297 + - 0.5410156 + - 2.3886719 + - 7.1640625 + - 1.7148438 + - 1.0996094 + - -1.0556641 + - 3.5546875 + - 0.050476074 + - 1.7128906 + - 1.7871094 + - 2.2246094 + - -0.30566406 + - 3.09375 + - -0.69628906 + - 3.6015625 + - -4.4882813 + - -1.4697266 + - -2.0253906 + - 0.94189453 + - 0.001115799 + - 1.3408203 + - -0.42285156 + - 4.0742188 + - -1.9775391 + - -2.1054688 + - -0.84228516 + - 0.016174316 + - 2.9785156 + - 2.40625 + - 0.7363281 + - 1.1787109 + - 3.2851563 + - 4.1992188 + - 0.75634766 + - -0.5756836 + - 1.3769531 + - 2.0800781 + - -4.9882813 + - -4.578125 + - -0.9609375 + - 3.3125 + - -1.5917969 + - -0.75097656 + - -1.9638672 + - 2.8613281 + - 3.2753906 + - 3.265625 + - -0.8544922 + - -0.28344727 + - 1.3613281 + - -1.3515625 + - -0.44604492 + - 2.5839844 + - 2.6875 + - -0.9711914 + - -0.3581543 + - 0.4165039 + - 1.7861328 + - 0.39453125 + - -0.12207031 + - -0.35864258 + - 1.2529297 + - 2.140625 + - 0.9091797 + - -2.1191406 + - -0.3251953 + - -3.6425781 + - -4.8789063 + - -0.092163086 + - 2.5820313 + - -0.86035156 + - -0.36767578 + - 3.125 + - -2.1777344 + - 2.0097656 + - 0.5566406 + - -0.9897461 + - -2.9140625 + - 1.4013672 + - -0.5180664 + - 3.0625 + - 3.3476563 + - 1.2998047 + - -6.8359375 + - -0.47680664 + - -0.41845703 + - -5.390625 + - 2.1210938 + - -2.6621094 + - 2.4355469 + - 1.3867188 + - -6.4453125 + - 1.3076172 + - -0.65478516 + - -2.7988281 + - -2.4296875 + - 1.1220703 + - -0.37597656 + - 2.0761719 + - -0.4309082 + - -0.8129883 + - -33.875 + - -2.53125 + - -2.4140625 + - -0.3881836 + - -1.4277344 + - 2.09375 + - 2.4121094 + - -4.7539063 + - -4.6601563 + - -0.9038086 + - 1.1162109 + - -1.4375 + - -1.0976563 + - 6.7734375 + - 0.4885254 + - 4.7304688 + - -1.6601563 + - 4.3242188 + - -0.25097656 + - -1.4335938 + - 0.11437988 + - -0.45507813 + - 1.0791016 + - 1.8134766 + - -0.4350586 + - -4.0117188 + - -1.2519531 + - 0.053833008 + - 1.8681641 + - -0.36206055 + - 0.5722656 + - -1.265625 + - 0.3642578 + - -0.5629883 + - -3.4941406 + - 4.8632813 + - -3.3046875 + - -0.8071289 + - -2.328125 + - -3.4863281 + - 0.029571533 + - 1.9746094 + - 2.6328125 + - 0.01576233 + - 0.25268555 + - 1.7089844 + - 4.0039063 + - -0.63720703 + - 1.90625 + - -2.8339844 + - 2.6796875 + - -1.0927734 + - 0.26220703 + - -3.9238281 + - 3.0117188 + - 2.6074219 + - -2.9648438 + - 3.4550781 + - 2.6816406 + - 0.6645508 + - -1.0673828 + - -4.0117188 + - 3.0097656 + - 1.3544922 + - 1.5175781 + - -0.3876953 + - 0.039611816 + - -5.0078125 + - 0.8300781 + - 1.3789063 + - -2.2207031 + - 0.77441406 + - 2.6035156 + - 0.40454102 + - -0.56103516 + - 2.2070313 + - -1.4003906 + - -2.6953125 + - 0.8046875 + - 0.42114258 + - -1.2441406 + - 2.0878906 + - 0.47314453 + - 1.0439453 + - 3.0527344 + - 0.85058594 + - -1.2832031 + - 1.1123047 + - 2.0527344 + - 0.74658203 + - -2.3789063 + - 2.7949219 + - -1.0400391 + - 8.5703125 + - -1.4746094 + - 2.03125 + - -0.5991211 + - -0.8847656 + - -0.44628906 + - -0.66796875 + - 2.8222656 + - 0.049102783 + - 3.53125 + - 1.0810547 + - 2.125 + - -2.1464844 + - -2.4277344 + - 3.5800781 + - -0.17236328 + - 5.921875 + - -1.0566406 + - 5.921875 + - -2.0253906 + - -0.95410156 + - -1.4013672 + - 1.5019531 + - 0.3852539 + - 0.79003906 + - -1.5839844 + - 4.1132813 + - 2.96875 + - 2.4902344 + - 4.6875 + - -0.7216797 + - -2.0976563 + - 1.7167969 + - -1.4580078 + - -4.0742188 + - -3.1113281 + - 0.44921875 + - -4.3554688 + - -0.16064453 + - 1.7939453 + - 3.7304688 + - -1.1054688 + - -0.67529297 + - -30.3125 + - -0.85595703 + - -0.027618408 + - -0.6660156 + - 0.7626953 + - 3.5800781 + - 0.79296875 + - 1.8632813 + - 0.12609863 + - 2.0976563 + - 0.012275696 + - -0.1484375 + - -2.9160156 + - -2.2011719 + - 1.3662109 + - -2.3691406 + - 0.55859375 + - 0.073791504 + - -0.63134766 + - -1.5576172 + - 1.4433594 + - 10.890625 + - 3.125 + - -1.265625 + - 1.1884766 + - 0.94140625 + - -0.84814453 + - 2.3105469 + - 0.37841797 + - -2.6035156 + - 1.296875 + - 0.2529297 + - -2.203125 + - 0.34057617 + - 0.38110352 + - -2.0644531 + - -3.2285156 + - 0.17248535 + - -0.55126953 + - -1.90625 + - 5.6289063 + - 1.6572266 + - -1.2236328 + - 3.1679688 + - 1.0341797 + - 1.2763672 + - 0.0011701584 + - 3.1445313 + - 0.6489258 + - -1.7949219 + - 0.19189453 + - 3.5175781 + - -2.3945313 + - 2.4589844 + - -1.5351563 + - -2.0097656 + - -0.9692383 + - 4.3242188 + - 0.4519043 + - -4.0820313 + - 1.6386719 + - -0.49804688 + - -0.6801758 + - -1.8076172 + - -2.5019531 + - 0.077819824 + - -3.75 + - 0.7397461 + - 3.0078125 + - -6.9453125 + - 0.48876953 + - -1.3095703 + - -3.3691406 + - -3.0175781 + - 1.7734375 + - -0.8691406 + - -3.1191406 + - 0.06640625 + - 0.18615723 + - -0.3959961 + - -1.3349609 + - -0.6459961 + - 1.8984375 + - 1.75 + - 6.6757813 + - -1.4882813 + - -0.46704102 + - -1.2744141 + - -1.8183594 + - 2.0644531 + - -1.9638672 + - -0.7011719 + - 2.0664063 + - 0.15258789 + - 3.4492188 + - 0.890625 + - 0.921875 + - -1.0634766 + - 3.0039063 + - -0.6928711 + - 1.6298828 + - 0.5488281 + - -2.703125 + - -1.1425781 + - 0.41503906 + - -0.5839844 + - -0.2109375 + - 4.5625 + - 1.4433594 + - -0.11102295 + - -1.6738281 + - 4.5078125 + - -0.49682617 + - 2.0371094 + - -2.7558594 + - -1.8857422 + - 2.1015625 + - 2.515625 + - -0.82177734 + - 0.87597656 + - 1.6611328 + - -1.1982422 + - -1.96875 + - -1.2451172 + - 0.07476807 + - -0.46923828 + - -4.9023438 + - 0.047424316 + - -1.0195313 + - 3.3046875 + - 0.25048828 + - 0.66015625 + - -0.43066406 + - -0.13110352 + - 1.1132813 + - -0.35327148 + - -0.6738281 + - -0.47021484 + - -1.140625 + - -4.4179688 + - 0.7680664 + - 4.2070313 + - 0.112854004 + - 1.3613281 + - 1.8691406 + - 0.6191406 + - 3.9082031 + - -1.546875 + - 0.0418396 + - 2.265625 + - 2.2480469 + - 2.8027344 + - -1.9775391 + - 1.8564453 + - -1.6796875 + - 1.6044922 + - -2.3691406 + - 0.18969727 + - 1.0859375 + - 2.8300781 + - -0.6640625 + - 2.6914063 + - 2.7753906 + - 1.3164063 + - 2.5449219 + - -2.40625 + - 4.4960938 + - -2.4257813 + - -0.54003906 + - 1.7001953 + - -0.63427734 + - -2.5 + - 1.7324219 + - 0.1015625 + - -2.2871094 + - -1.5751953 + - -1.5019531 + - -1.6982422 + - -2.8789063 + - 3.1425781 + - 1.8701172 + - 1.7558594 + - -2.7441406 + - -0.32348633 + - -0.13171387 + - 2.4902344 + - 0.3330078 + - 2.4199219 + - -3.0214844 + - -0.18884277 + - 0.44799805 + - 1.0439453 + - 0.17492676 + - 4.0351563 + - -0.08843994 + - 1.4238281 + - -0.7919922 + - -1.9882813 + - -0.9272461 + - 1.3662109 + - 1.046875 + - 0.63427734 + - 1.2451172 + - -3.4550781 + - 0.17297363 + - 1.7441406 + - 0.62353516 + - -0.3647461 + - 1.515625 + - -1.1552734 + - -2.4160156 + - -5.5429688 + - -4.09375 + - 6.078125 + - -1.3701172 + - -0.91015625 + - 1.1992188 + - -1.7529297 + - 2.0800781 + - -1.6416016 + - -2.3925781 + - -3.8867188 + - -2.203125 + - -2.6425781 + - 0.7397461 + - 0.2734375 + - 1.4511719 + - -0.7939453 + - -1.1513672 + - 0.75683594 + - 0.1204834 + - -3.5039063 + - -1.7607422 + - -1.4775391 + - 3.1015625 + - 2.0839844 + - 6.2929688 + - -0.44384766 + - 2.5175781 + - -1.7080078 + - 1.8369141 +- - 1.3066406 + - -2.1523438 + - 0.703125 + - 0.2529297 + - 1.2626953 + - -1.46875 + - -0.19042969 + - -0.14892578 + - 3.3066406 + - -1.8222656 + - 1.0253906 + - -0.51953125 + - 0.8203125 + - 0.2109375 + - 1.1699219 + - 0.109680176 + - 1.5429688 + - 1.2597656 + - 2.3242188 + - -2.4765625 + - -1.4189453 + - -0.6923828 + - -0.0078125 + - 0.44189453 + - 2.7128906 + - 1.8183594 + - -0.043762207 + - 1.6103516 + - 0.77734375 + - 1.21875 + - 3.8847656 + - -0.7583008 + - 5.4765625 + - 1.6425781 + - -2.4707031 + - 1.5048828 + - -1.8222656 + - -1.1347656 + - -6.5820313 + - -0.45825195 + - 0.9609375 + - -1.4111328 + - 1.1171875 + - -1.0078125 + - -0.67578125 + - 1.3095703 + - 0.9667969 + - -3.625 + - 0.6777344 + - 2.6757813 + - 3.109375 + - -0.94970703 + - -3.96875 + - -79.125 + - -2.3476563 + - -1.6230469 + - 3.4257813 + - -1.3222656 + - -2.5878906 + - -10.5 + - -1.8828125 + - -0.7763672 + - -0.20166016 + - -0.38671875 + - 0.066223145 + - 0.24121094 + - -2.9160156 + - 2.1953125 + - -0.5649414 + - -0.8515625 + - -5.0117188 + - -1.8183594 + - -1.2324219 + - -2.1738281 + - -1.2753906 + - 0.38012695 + - 2.3984375 + - 1.7548828 + - 0.31445313 + - 0.1796875 + - 0.74609375 + - -1.5439453 + - -0.69970703 + - 1.3261719 + - -2.4179688 + - 3.9316406 + - -2.2070313 + - 0.7993164 + - 3.7070313 + - 2.0117188 + - -0.48486328 + - 2.3808594 + - 2.2070313 + - -26.71875 + - 0.13146973 + - -4.5546875 + - -5.8632813 + - -0.53515625 + - -0.08850098 + - -5.8359375 + - -1.0390625 + - -2.6054688 + - -6.5507813 + - -2.9179688 + - -1.4267578 + - -2.7207031 + - 1.1035156 + - -1.9316406 + - -1.3251953 + - 0.1217041 + - -0.5 + - 0.953125 + - 3.2734375 + - -1.8398438 + - -1.109375 + - 5.4570313 + - 2.2636719 + - 1.78125 + - -2.0039063 + - 0.7607422 + - 3.6132813 + - 1 + - -2.1503906 + - 0.3461914 + - -0.95410156 + - -0.73535156 + - 3.3984375 + - -1.7480469 + - 0.08428955 + - 2.4414063 + - 1.2148438 + - 1.2958984 + - -2.2597656 + - 1.1669922 + - 0.5546875 + - 0.6875 + - 1.953125 + - 0.578125 + - -2.1875 + - -1.5830078 + - 1.1005859 + - -0.66015625 + - 2.1269531 + - 0.39160156 + - 2.5273438 + - 0.61035156 + - -1.8222656 + - -1.2480469 + - -3.453125 + - 5.515625 + - 1.0234375 + - -1.2080078 + - -2.0703125 + - -0.7324219 + - -0.64697266 + - -4.796875 + - -1.21875 + - -0.30126953 + - -1.1337891 + - -2.234375 + - -0.036132813 + - -1.7109375 + - -3.625 + - -2.1074219 + - -0.7133789 + - 0.78759766 + - 1.7910156 + - -0.48364258 + - -0.57128906 + - -1.4111328 + - -1.8066406 + - -1.0322266 + - -0.9736328 + - -1.2832031 + - -1.4316406 + - -0.91503906 + - -2.0410156 + - 3.2207031 + - -1.1191406 + - -0.4609375 + - 3.4726563 + - 0.73046875 + - -1.2910156 + - -1.8994141 + - -0.70166016 + - 5.953125 + - -4.6757813 + - -0.33642578 + - -1.3808594 + - -1.0087891 + - -3.4550781 + - -2.0703125 + - -0.11456299 + - 1.4150391 + - -2.3164063 + - 4.3203125 + - 3.0625 + - -3.1289063 + - -1.7910156 + - 2.7265625 + - 0.49414063 + - -3.7148438 + - 1.8212891 + - 0.04296875 + - 1.7988281 + - 6.609375 + - 7.0976563 + - -2.7851563 + - -2.453125 + - -4.2226563 + - -2.7910156 + - -0.026031494 + - -2.6015625 + - -0.49658203 + - 0.26220703 + - 3.2597656 + - 1.1660156 + - -2.0742188 + - 6 + - 1.4511719 + - -2.2148438 + - 2.4785156 + - -3.1953125 + - 2.0566406 + - -0.5751953 + - -2.5722656 + - 1.0351563 + - 1.0371094 + - 0.7368164 + - -0.65478516 + - 2.015625 + - -0.5395508 + - -0.77197266 + - -1.8203125 + - -0.59814453 + - 0.77197266 + - 2.0957031 + - 2.0429688 + - 4.4296875 + - 0.26733398 + - 11.1640625 + - 0.024246216 + - -6.1328125 + - -0.7373047 + - -1.765625 + - -1.8984375 + - 5.2890625 + - 3.6191406 + - -0.52685547 + - 0.5571289 + - -0.6923828 + - -0.18676758 + - -2.1582031 + - -1.0644531 + - -1.4501953 + - -0.65527344 + - -3.2617188 + - -1.4257813 + - -2.375 + - 2.4433594 + - 0.8105469 + - -0.2290039 + - 3.6132813 + - 1.6386719 + - 0.17578125 + - -0.28222656 + - -3.4179688 + - 5.8007813 + - -0.8408203 + - -7.125 + - 0.4477539 + - 1.1816406 + - 2.8007813 + - -1.1210938 + - 1.6542969 + - 0.024734497 + - -3.390625 + - 2.2402344 + - 0.5571289 + - -0.67089844 + - -3.1210938 + - -0.091796875 + - 1.8320313 + - 2.421875 + - -0.43115234 + - -0.41845703 + - 1.9492188 + - -1.0253906 + - 1.8066406 + - -1.1699219 + - -0.04067993 + - -1.3125 + - 18.59375 + - -0.49267578 + - 2.1640625 + - -1.1904297 + - 2.046875 + - -2.9882813 + - 3.0351563 + - 0.070129395 + - -0.2932129 + - 0.14709473 + - 3.140625 + - 0.6411133 + - -1.734375 + - 1.0273438 + - 3.25 + - 0.66796875 + - -0.24633789 + - 1.0820313 + - -0.81152344 + - 2.8691406 + - -0.22851563 + - 0.8828125 + - -0.84765625 + - -3.078125 + - -0.53466797 + - -1.3183594 + - -2.9101563 + - 2.5097656 + - 0.9892578 + - -0.7841797 + - 1.0058594 + - 2.09375 + - -0.4638672 + - -0.27783203 + - -1.4726563 + - -0.58935547 + - 1.0644531 + - -3.0273438 + - -5.5820313 + - 2.59375 + - 0.8964844 + - 1.4658203 + - 2.8945313 + - -2.796875 + - 3.1347656 + - 0.73535156 + - -0.9921875 + - 0.6640625 + - 2.2148438 + - -0.47998047 + - 2.6660156 + - 0.028152466 + - 0.88671875 + - 1.6191406 + - 0.18554688 + - 1.1972656 + - -4.5234375 + - -0.7114258 + - 1.9296875 + - -0.3076172 + - 1.2744141 + - -0.19140625 + - -3.65625 + - -0.27856445 + - -5.1523438 + - -2.9882813 + - -1.6640625 + - -1.6660156 + - -1.7089844 + - 2.65625 + - 3.1875 + - -2.65625 + - 2.140625 + - -2.5976563 + - 5.9453125 + - 0.00032544136 + - 0.24072266 + - -2.453125 + - 0.00390625 + - -3.0390625 + - -2.8125 + - 2.1640625 + - 0.04296875 + - 3.2910156 + - -3.5351563 + - 1.5039063 + - -0.6879883 + - 2.1210938 + - -0.13867188 + - 1.2568359 + - -2.7675781 + - -1.9736328 + - -3.2578125 + - 2.8164063 + - 4.2734375 + - -2.6953125 + - -8.328125 + - -1.2773438 + - 0.95214844 + - -1.4785156 + - -2.8066406 + - -2.5625 + - 0.31762695 + - -0.07287598 + - 2.9238281 + - 1.5556641 + - -1.234375 + - 1.2900391 + - -3 + - 3.5097656 + - 1.1171875 + - -4.359375 + - 3.1347656 + - 2.8691406 + - 4.7421875 + - -2.5039063 + - -11.0078125 + - 0.47558594 + - -2.21875 + - -2.3964844 + - 2.8046875 + - -2.3085938 + - -0.24182129 + - 2.6953125 + - -3.296875 + - -2.3847656 + - -3.3535156 + - 4.9257813 + - -2.2988281 + - 0.1973877 + - -0.5859375 + - 0.66308594 + - 0.53564453 + - 0.9667969 + - 1.984375 + - 2.1015625 + - 2.3496094 + - -1.4863281 + - -1.3291016 + - -1.640625 + - -3.546875 + - -1.1943359 + - -0.7705078 + - -2.5976563 + - 3.5039063 + - -2.75 + - 0.234375 + - 3.1796875 + - -4.5703125 + - -1.8574219 + - -0.6586914 + - -3.6054688 + - -2.5800781 + - -0.04034424 + - 0.48876953 + - 1.9150391 + - -2.6191406 + - -4.1875 + - 1.2519531 + - 0.5439453 + - -0.16992188 + - -2.0195313 + - -0.70751953 + - 5.5 + - 6.0625 + - 1.9619141 + - 4.0234375 + - 2.5332031 + - -0.94384766 + - -3.8242188 + - -2.4726563 + - 2.765625 + - -2.5703125 + - 0.14868164 + - 2.1289063 + - -0.029937744 + - -0.19921875 + - -1.5585938 + - 6.5546875 + - 1.2070313 + - 2.3320313 + - 1.4941406 + - 0.030761719 + - 0.42529297 + - 0.30664063 + - -2.03125 + - -0.46142578 + - 3.5019531 + - -0.21740723 + - -0.52441406 + - -1.015625 + - -4.1601563 + - -1.5078125 + - 0.44873047 + - -8.125 + - 0.90625 + - 2.7226563 + - -0.7109375 + - 1.4423828 + - 2.125 + - -2.3691406 + - -1.2714844 + - -0.7314453 + - -0.96484375 + - 3.7441406 + - -3.65625 + - -2.484375 + - 2.5 + - 0.27734375 + - -4.84375 + - 2.875 + - 0.5957031 + - 0.23510742 + - 3.8359375 + - -3.4023438 + - -0.5209961 + - -3.359375 + - 3.0253906 + - 2.9003906 + - -2.6640625 + - -0.9140625 + - 2.1484375 + - -3.6914063 + - 0.123535156 + - -2.3554688 + - 0.50146484 + - -1.9921875 + - -0.22851563 + - 0.5620117 + - 1.7978516 + - 3.9921875 + - -0.01626587 + - -0.1796875 + - 2.0039063 + - 1.5117188 + - -2.890625 + - 0.7758789 + - 3.7070313 + - 0.9814453 + - 0.9794922 + - -0.5517578 + - -0.6455078 + - 2.3554688 + - -0.01953125 + - -2.6328125 + - 1.1054688 + - -2.5917969 + - -3.5273438 + - -1.4472656 + - -1.1289063 + - 2.1367188 + - -2.8125 + - -4.703125 + - -3.0390625 + - -0.091796875 + - 1.2519531 + - 2.8691406 + - 3.484375 + - 2.6757813 + - 0.5048828 + - -7.5664063 + - -2.5976563 + - -1.0341797 + - -2.0488281 + - -0.90234375 + - 1.21875 + - 0.26953125 + - 3.9453125 + - 2.328125 + - -4.9609375 + - -1.1132813 + - -2.7910156 + - 2.3945313 + - -1.1445313 + - 1.0087891 + - -0.83447266 + - -2.4648438 + - -0.38891602 + - -3.0117188 + - 0.21484375 + - -0.48168945 + - 2.1523438 + - 0.15002441 + - -2.8925781 + - 1.7236328 + - 0.44360352 + - 3.9707031 + - -1.6025391 + - -2.2929688 + - 0.46020508 + - 0.028640747 + - -2.1523438 + - -1.9892578 + - 1.4970703 + - 2.3457031 + - -0.55859375 + - -3.0625 + - -1.9150391 + - 0.8359375 + - -4.4101563 + - -0.057281494 + - -0.71777344 + - -0.5722656 + - 1.0957031 + - 2.4804688 + - 1.4980469 + - 3.0410156 + - 2.765625 + - -0.54296875 + - 0.7167969 + - -0.38964844 + - 0.04360962 + - -2.7753906 + - 0.73828125 + - -4.2109375 + - 0.7705078 + - -3.4160156 + - 1.1552734 + - 3.4472656 + - -4.21875 + - -1.2353516 + - 0.2746582 + - -1.8798828 + - -1.2822266 + - 0.84765625 + - 4.1015625 + - -0.5810547 + - -0.74316406 + - 3.453125 + - 3.3007813 + - 1.7714844 + - -0.7939453 + - -1.4003906 + - 1.6298828 + - 0.5395508 + - 1.3300781 + - 1.0800781 + - 0.8129883 + - 3.5078125 + - 0.4074707 + - -3.0820313 + - -2.296875 + - 1.3847656 + - 1.1904297 + - -1.0195313 + - -1.5390625 + - -0.69384766 + - 0.39990234 + - -3.1875 + - -2.2578125 + - -0.12902832 + - 0.36132813 + - 5.0039063 + - -0.61376953 + - -0.73291016 + - -1.8564453 + - 7.7382813 + - -3.71875 + - 2.96875 + - 1.3554688 + - -5.4609375 + - -3.0410156 + - 2.6503906 + - -0.4189453 + - -1.3085938 + - 0.0390625 + - 2.78125 + - -0.47607422 + - 1.9746094 + - 2.7519531 + - 2.3769531 + - 2.3945313 + - -1.4921875 + - 3.109375 + - 5.734375 + - -2.0976563 + - 1.2939453 + - 3.3359375 + - -3.3144531 + - -1.0683594 + - 0.3671875 + - -0.02017212 + - 0.77734375 + - -4.2382813 + - 0.35351563 + - -1.6689453 + - -0.40673828 + - 2.2109375 + - 1.5234375 + - 1.8798828 + - 1.8173828 + - -2.5605469 + - 6.0390625 + - 3.828125 + - 4.6328125 + - 2.7285156 + - -5.1875 + - -4.4101563 + - -1.4423828 + - -1.8642578 + - 0.46923828 + - -1.4111328 + - 0.05987549 + - -0.39941406 + - -1.3876953 + - 2.8222656 + - -3.46875 + - 1.0136719 + - 4.4101563 + - 6.9453125 + - 1.0126953 + - -2.71875 + - 0.9794922 + - 7.3203125 + - 2.2539063 + - 0.49658203 + - -0.67871094 + - -3.296875 + - 0.38500977 + - 1.3925781 + - -0.42626953 + - -3.1289063 + - 0.78515625 + - 4.7421875 + - 3.6015625 + - 0.7763672 + - 0.049621582 + - 1.4746094 + - 3.625 + - -0.47192383 + - 2.3632813 + - -5.40625 + - 0.7128906 + - -3.8945313 + - -1.4023438 + - -3.8359375 + - 1.1113281 + - 0.042297363 + - 3.78125 + - 1.6738281 + - -1.609375 + - 2.7207031 + - 1.1787109 + - -3.2285156 + - -3.4550781 + - 0.21582031 + - -3.3847656 + - -3.75 + - 3.0039063 + - -2.6367188 + - 2.1953125 + - 3.9414063 + - -1.2861328 + - -2.6171875 + - -2.7128906 + - 0.99658203 + - 1.4394531 + - -0.3371582 + - 1.3027344 + - -0.4399414 + - 2.7578125 + - 0.38012695 + - -0.80566406 + - -0.5805664 + - -2.9101563 + - 1.9453125 + - 0.02734375 + - -0.24279785 + - -2.90625 + - -2.3476563 + - 3.9804688 + - -1.3994141 + - 0.4699707 + - -1.8886719 + - 2.40625 + - -1.8144531 + - -2.8046875 + - -1.7939453 + - -0.06768799 + - 2.1445313 + - 0.60546875 + - -1.5830078 + - -0.48486328 + - 3.7910156 + - 0.011062622 + - 1.453125 + - 3.6347656 + - -2.609375 + - 2.3496094 + - -0.98828125 + - -4.1445313 + - -2.1210938 + - -1.0595703 + - 3.1601563 + - -2.0371094 + - 4.6328125 + - 1.4697266 + - 1.0527344 + - 0.29003906 + - -1.2949219 + - 0.875 + - 2.2636719 + - -0.86572266 + - -0.8051758 + - -0.8642578 + - -0.5673828 + - -1.8525391 + - -3.09375 + - 2.2988281 + - -5.9726563 + - -3.4921875 + - -4.34375 + - 1.7275391 + - 4.8203125 + - 1.8798828 + - -1.0244141 + - 0.47314453 + - 3.2109375 + - -0.9238281 + - -4.3125 + - -0.35668945 + - 0.37109375 + - -2.796875 + - -1.0546875 + - 5.34375 + - 2.2519531 + - -0.37158203 + - 0.5292969 + - -1.9462891 + - 1.5556641 + - 2.5175781 + - -1.3378906 + - 0.7993164 + - 3.6796875 + - -2.2441406 + - -1.6298828 + - 1.9345703 + - -0.6977539 + - -0.5083008 + - 1.5673828 + - -1.5605469 + - -9.109375 + - 1.8837891 + - -34.78125 + - 1.3105469 + - -0.103149414 + - -1.1875 + - -4.9765625 + - 1.0761719 + - 0.13500977 + - 0.5058594 + - 1.7402344 + - 0.8461914 + - 0.7192383 + - -1.0214844 + - 5.6796875 + - -0.13208008 + - -0.94921875 + - 2.671875 + - 0.30297852 + - -1.2099609 + - 12.359375 + - -3.2695313 + - -0.25585938 + - -0.054016113 + - 0.5961914 + - -0.43896484 + - 0.040039063 + - 6.9609375 + - -1.2011719 + - -1.4970703 + - 1.1767578 + - -2.3085938 + - -1.6259766 + - -3.5644531 + - 1.71875 + - 1.3642578 + - -1.265625 + - 2.4648438 + - 0.8828125 + - -0.21289063 + - 1.4453125 + - -1.09375 + - 3.5644531 + - -2.21875 + - -0.5566406 + - -0.55029297 + - -2.71875 + - 2.5644531 + - -0.98095703 + - 1.7158203 + - 1.4765625 + - -2.6171875 + - 0.5673828 + - -3.3632813 + - 0.09112549 + - -2.0703125 + - -1.0898438 + - 0.40039063 + - 4.875 + - -2.7441406 + - 0.22814941 + - 0.11846924 + - 0.8798828 + - -1.6914063 + - -2.1640625 + - 0.18225098 + - 7.140625 + - -0.023101807 + - 1.1025391 + - 4.8828125 + - -2.0175781 + - 2.109375 + - -1 + - -0.2578125 + - 1.65625 + - -2.5703125 + - 3.0019531 + - -2.7304688 + - 0.52197266 + - 0.45825195 + - 2.9921875 + - 0.4621582 + - -3.1210938 + - -3.3046875 + - 2.5996094 + - 0.71728516 + - 3.1191406 + - 2.5332031 + - -3.1132813 + - -0.6665039 + - 1.0673828 + - -1.2158203 + - 1.890625 + - -1.8837891 + - -0.33325195 + - -2.2519531 + - 0.7036133 + - -0.5732422 + - -3.0039063 + - 0.17382813 + - -1.0527344 + - -1.3515625 + - -2.8925781 + - -5.5546875 + - -1.2675781 + - -0.6269531 + - 0.14086914 + - 3.40625 + - 3.8125 + - 0.027496338 + - 2.4101563 + - 0.11578369 + - 1.0292969 + - 0.5839844 + - -3.0976563 + - 4.7382813 + - 0.32885742 + - 2.6835938 + - -0.51708984 + - 3.2363281 + - -1.53125 + - 3.2910156 + - 1.8261719 + - -0.6567383 + - -1.8789063 + - -1.4707031 + - 0.6298828 + - 3.1035156 + - 2.4707031 + - -0.15686035 + - 0.28808594 + - 2.7851563 + - 3.125 + - 1.9501953 + - -1.8330078 + - 1.6298828 + - 0.8754883 + - -0.6196289 + - 3.0664063 + - -1.8173828 + - -3.4101563 + - 0.859375 + - -0.61328125 + - -1.0517578 + - -2.4921875 + - -2.8378906 + - 1.5820313 + - -1.5546875 + - 3.2910156 + - -2.1308594 + - 0.8564453 + - -3.296875 + - 0.09240723 + - -1.2421875 + - 0.74072266 + - 4.7695313 + - -0.0982666 + - -0.59228516 + - 0.45825195 + - -2.6972656 + - 4.3203125 + - -2.3066406 + - 2.21875 + - -4.6015625 + - -5.1171875 + - -0.2705078 + - -2.2597656 + - -0.6220703 + - -4.3164063 + - -14.125 + - 0.76416016 + - -0.33007813 + - 6.03125 + - 2.125 + - 2.6347656 + - 0.8642578 + - 1.6621094 + - -0.38916016 + - 0.22521973 + - -1.3671875 + - -2.5566406 + - 1.9296875 + - 3.03125 + - 0.859375 + - -4.3398438 + - 1.1103516 + - -1.6923828 + - 0.54003906 + - 0.30200195 + - 2.8222656 + - 1.9316406 + - 1.0556641 + - 2.0976563 + - 2.4023438 + - -2.8769531 + - 0.9243164 + - -1.2138672 + - -20.15625 + - 1.4511719 + - -0.03125 + - 0.9589844 + - -2.6992188 + - -1.0195313 + - 1.3925781 + - 0.34179688 + - -3.6875 + - -3.0175781 + - -0.3359375 + - 1.4033203 + - -1.140625 + - -1.1269531 + - -1.1074219 + - 1.0742188 + - -6.1171875 + - -0.8149414 + - 0.15356445 + - -0.53222656 + - 1.6142578 + - 0.95166016 + - 3.1582031 + - -1.6103516 + - -0.7763672 + - 1.5488281 + - -5.1132813 + - -0.63720703 + - 1.2666016 + - -0.25048828 + - 4.2421875 + - -3.3457031 + - 0.8129883 + - 0.28076172 + - 0.28637695 + - 4.4453125 + - 0.453125 + - 1.8876953 + - -15.375 + - 0.6738281 + - -1.4277344 + - 1.5019531 + - -3.5664063 + - 2.2441406 + - -1.1171875 + - 1.8828125 + - 1.7548828 + - -0.8828125 + - 2.3339844 + - -2.0078125 + - 0.8935547 + - -0.69628906 + - 0.10107422 + - -1.4277344 + - 1.234375 + - 3.796875 + - 2.2988281 + - -5.8632813 + - -2.6738281 + - 2.9316406 + - -3.5800781 + - 0.058898926 + - 2.8007813 + - -0.007484436 + - 4.3828125 + - -2.140625 + - -3.0820313 + - 1.2695313 + - 1.8994141 + - 1.8564453 + - -0.27270508 + - -0.09033203 + - -2.21875 + - -0.3930664 + - -1.734375 + - -0.4819336 + - 0.97558594 + - 1.6064453 + - 5.0664063 + - 0.82910156 + - 1.2167969 + - 2.671875 + - -2.7382813 + - 2.1132813 + - -2.8320313 + - -1.8486328 + - -1.7109375 + - 1.9003906 + - 6.0820313 + - 1.2011719 + - 1.7392578 + - -2.7890625 + - -1.9960938 + - 2.4023438 + - 1.515625 + - 4.5390625 + - 1.1542969 + - -3.7695313 + - 2.203125 + - -0.9223633 + - 1.0097656 + - 1.5361328 + - -1.9609375 + - -3.4316406 + - 1.15625 + - 2.15625 + - -0.53125 + - 0.9609375 + - 0.53515625 + - -3.2910156 + - 2.3496094 + - -0.46484375 + - 2.5195313 + - 3.8847656 + - 0.37109375 + - -0.8173828 + - 3.7128906 + - 1.5595703 + - -2.5234375 + - -2.140625 + - 3.734375 + - -0.25878906 + - 2.7207031 + - -3.15625 + - 0.640625 + - 1.7597656 + - -2.0703125 + - 1.5878906 + - 4.65625 + - -2.2460938 + - -1.2089844 + - 0.4621582 + - 0.23046875 + - 0.65234375 + - 2.0859375 + - 1.1845703 + - 4.453125 + - 0.6455078 + - -1.2285156 + - -2.4882813 + - -2.3222656 + - 2.375 + - 0.95703125 + - 0.7109375 + - 0.83447266 + - -1.1503906 + - -4.890625 + - -0.58935547 + - 3.8535156 + - -3.0878906 + - -0.23120117 + - -2.2773438 + - -0.82421875 + - 3.7207031 + - 5.15625 + - -0.5644531 + - -3.6894531 + - 0.49169922 + - -1.1660156 + - -0.7832031 + - -1.6738281 + - 1.171875 + - -4.4453125 + - 1.03125 + - 2.7285156 + - 7.9257813 + - -1.6503906 + - 1.8007813 + - -0.10284424 + - 0.84765625 + - -1.7128906 + - -3.0039063 + - 5.2109375 + - -1.3691406 + - 3.3125 + - 3.4570313 + - -2.9375 + - -1.640625 + - -5.34375 + - 2.0117188 + - 1.3642578 + - -0.19213867 + - -2.0703125 + - -3.9003906 + - 3.3359375 + - -1.1699219 + - -1.5244141 + - 1.2226563 + - 0.6279297 + - 0.15734863 + - 2.0175781 + - 5.6484375 + - -0.7236328 + - -1.1660156 + - 0.6064453 + - 3.34375 + - 1.7587891 + - -0.8173828 + - -4.1953125 + - -2.0117188 + - -1.7128906 + - 0.82910156 + - 1.3769531 + - 4.546875 + - -1.8222656 + - 2.21875 + - 1.09375 + - -2.6308594 + - 4.1640625 + - 1.5439453 + - 0.26367188 + - -1.7441406 + - -3.578125 + - 3.9882813 + - -3.328125 + - 0.90722656 + - -2.671875 + - 2.7753906 + - 2.3183594 + - -1.0273438 + - -0.5024414 + - 1.0234375 + - -2.6289063 + - 2.1738281 + - -0.72265625 + - 3.3769531 + - -0.25805664 + - 6.3945313 + - -2.5878906 + - -2.703125 + - 1.6796875 + - -1.2431641 + - 7.5664063 + - 3.5898438 + - 0.035949707 + - 0.5727539 + - -0.50683594 + - -0.36083984 + - 4.1171875 + - -0.6035156 + - 0.020828247 + - -0.05987549 + - 0.39941406 + - 2.5273438 + - -1.7587891 + - -2.0585938 + - -1.0625 + - -4.734375 + - 2.828125 + - -3.1738281 + - -2.3417969 + - 0.9707031 + - 1.2626953 + - -5.4726563 + - -1.2929688 + - -0.06347656 + - 1.7470703 + - 0.00504303 + - -1.1835938 + - 1.6425781 + - 0.033233643 + - -2.4277344 + - 3.703125 + - -0.30297852 + - 2.53125 + - 2.7460938 + - -3.7070313 + - -0.54589844 + - 2.6015625 + - -5.0039063 + - -0.7246094 + - -0.12365723 + - 0.7236328 + - 1.2978516 + - -1.3496094 + - -1.1367188 + - 1.421875 + - -0.7368164 + - 4.34375 + - -0.6015625 + - 4.796875 + - -0.0065078735 + - 2.9765625 + - -3.8984375 + - -2.9101563 + - -1.9511719 + - -3.1132813 + - -0.38012695 + - 0.099609375 + - 2.0019531 + - -3.5 + - -0.16796875 + - -0.16796875 + - -4.3671875 + - 2.1914063 + - 1.4023438 + - 1.7861328 + - -1.3066406 + - -0.28515625 + - -12.4453125 + - 4.234375 + - 2.2773438 + - 0.4777832 + - 2.3027344 + - -1.7939453 + - -3.65625 + - -0.48291016 + - 0.83447266 + - 3.3320313 + - -1.3720703 + - -0.60253906 + - 3.6035156 + - 2.3222656 + - 0.12719727 + - -3.0273438 + - -3.0878906 + - -0.09765625 + - -1.046875 + - -3.7695313 + - -1.5283203 + - 0.57910156 + - -1.3457031 + - 2.0332031 + - -0.2524414 + - -4.9101563 + - 3.1757813 + - 5.2890625 + - 0.6801758 + - 2.0097656 + - 0.36767578 + - 1.0224609 + - 3.0175781 + - 1.7402344 + - 2.921875 + - -0.20898438 + - 0.8227539 + - -1.5205078 + - 1.2421875 + - 1.5644531 + - 2.0195313 + - 1.1933594 + - -2.1523438 + - 5.171875 + - 2.9472656 + - -4.359375 + - -74 + - 2.8378906 + - -2.5117188 + - -1.3486328 + - 2.9960938 + - 4.4765625 + - 1.4042969 + - 1.7890625 + - -0.31225586 + - -3.9003906 + - 0.15649414 + - 0.43408203 + - 1.59375 + - 1.7929688 + - 0.35351563 + - -4.7421875 + - -1.1943359 + - -4.5 + - 0.43603516 + - 1.1015625 + - 2.3300781 + - 0.76416016 + - 1.6015625 + - 0.009765625 + - -3.1367188 + - -3.609375 + - 0.69384766 + - -2.5351563 + - 2.0429688 + - -0.9970703 + - 0.6977539 + - -4.625 + - 1.1503906 + - -1.109375 + - -2.8691406 + - 0.057617188 + - 2.0605469 + - -0.8798828 + - -0.65625 + - -3.3476563 + - 1.0224609 + - 1.2070313 + - 2.9316406 + - 2.0273438 + - 0.46044922 + - -1.5625 + - 0.9404297 + - 0.9863281 + - 1.1357422 + - 0.92871094 + - 3.03125 + - -0.49072266 + - -0.23156738 + - 19.15625 + - -5.7578125 + - 2.671875 + - -0.35791016 + - 2.8398438 + - 1.6015625 + - -7.21875 + - 4.8789063 + - 3.3378906 + - -0.16320801 + - -1.0761719 + - 0.14282227 + - 1.4921875 + - -4.6132813 + - 1.3359375 + - -1.4375 + - -1.1367188 + - -2.4160156 + - 3.5351563 + - 3.3359375 + - 2.9257813 + - 1.546875 + - -1.859375 + - -2.5507813 + - -0.75439453 + - 0.39257813 + - 1.6806641 + - -0.29638672 + - 0.5517578 + - -2.9238281 + - -2.5488281 + - -0.09875488 + - -2.3613281 + - 0.80859375 + - 3.3671875 + - -0.37353516 + - -0.94189453 + - -2.9472656 + - -1.59375 + - 0.87353516 + - 3.4414063 + - -0.61572266 + - 6.9140625 + - 2.8085938 + - 4.1640625 + - -2.9472656 + - 0.04425049 + - -0.2512207 + - -0.36157227 + - -1.2441406 + - 2.7734375 + - 0.2548828 + - -1.2197266 + - -0.13867188 + - -0.88134766 + - 1.8203125 + - -0.86328125 + - 6.1328125 + - 23.078125 + - -0.640625 + - -1.1552734 + - -3.1484375 + - 1.96875 + - 0.2619629 + - 3.5 + - 2.5332031 + - -2.0078125 + - -2.0585938 + - 5.171875 + - 1.8515625 + - 0.49267578 + - -1.8642578 + - 1.5039063 + - 1.1074219 + - -3.0820313 + - 0.1126709 + - 0.020507813 + - 4.2539063 + - 0.5571289 + - 1.0449219 + - 1.2050781 + - -0.7529297 + - 1.6533203 + - 0.54345703 + - -1.1298828 + - 4.90625 + - 2.0253906 + - -1.7011719 + - -2.59375 + - 2.421875 + - 0.57714844 + - -2.9003906 + - 0.32543945 + - -2.1386719 + - -1.9335938 + - -2.2304688 + - 3.2929688 + - 1.0253906 + - 1.3085938 + - 3.3359375 + - 1.0859375 + - -2.28125 + - -0.46533203 + - 5.328125 + - -0.6411133 + - 0.8408203 + - 1.609375 + - 2.7539063 + - 1.0498047 + - -5.109375 + - -1.2265625 + - 2.2773438 + - 6.6171875 + - -0.80566406 + - -1.7910156 + - 0.9345703 + - -3.9726563 + - -0.38012695 + - 2.0957031 + - -2.3828125 + - -0.13085938 + - -0.83251953 + - 3.265625 + - 2.40625 + - 1.1796875 + - 1.0087891 + - 1.0927734 + - -1.578125 + - -1.7167969 + - -4.4414063 + - 1.3691406 + - 1.1953125 + - -0.39892578 + - -1.78125 + - 0.022125244 + - -1.5292969 + - -0.37841797 + - -12.890625 + - 0.45507813 + - 0.3371582 + - -2.0722656 + - 1.0898438 + - -2.3398438 + - -1.0986328 + - 0.5566406 + - -0.47998047 + - 0.8769531 + - 2.7753906 + - 1.2236328 + - 4.3203125 + - 0.9736328 + - -1.7363281 + - 1.8417969 + - -3.8476563 + - -4.1875 + - -3.3710938 + - 0.15356445 + - -0.93847656 + - -3.78125 + - 2.765625 + - 0.87597656 + - -0.59814453 + - 0.7939453 + - 2.0429688 + - 5.7382813 + - 1.1347656 + - 0.28833008 + - 1.3955078 + - 4.2421875 + - -3.3125 + - -3.8554688 + - -0.09729004 + - 0.62353516 + - 2.703125 + - 0.68652344 + - -0.009109497 + - -2.28125 + - 2.0820313 + - 1.9179688 + - 0.4663086 + - -1.8876953 + - -2.1523438 + - 1.4589844 + - -2.4394531 + - 2.921875 + - 1.8095703 + - 0.32348633 + - 2.796875 + - 2.1875 + - -0.23535156 + - 1.4736328 + - -5.1484375 + - -4.3945313 + - -2.734375 + - 1.6347656 + - 2.125 + - -2.2695313 + - -2.4472656 + - -2.3398438 + - -4.4101563 + - -5.8007813 + - 1.4511719 + - -0.27783203 + - 2.2617188 + - -0.6044922 + - -1.1474609 + - -4.0625 + - -0.54589844 + - 1.5429688 + - 0.8984375 + - -0.3857422 + - 0.41015625 + - 0.8071289 + - 18 + - 0.61035156 + - -0.3479004 + - 1.5517578 + - 15.2578125 + - 0.20629883 + - 0.33007813 + - -0.16113281 + - 1.203125 + - -3.4609375 + - -0.73876953 + - 5.375 + - -0.5419922 + - 6.1171875 + - 0.9165039 + - 2.5566406 + - 0.52783203 + - -0.033843994 + - -2.7851563 + - -3.9609375 + - 7.0195313 + - -0.013832092 + - 2.2988281 + - 5.2890625 + - 0.9433594 + - -4.2109375 + - 0.5439453 + - 3.828125 + - 1.3691406 + - 0.084472656 + - -0.51416016 + - 1.9941406 + - 1.6728516 + - -0.5073242 + - -5.7734375 + - 0.1652832 + - -0.6064453 + - -0.9238281 + - -1.2880859 + - -3.7226563 + - 2.8769531 + - -0.27929688 + - -5.875 + - -1.0927734 + - 2.8789063 + - 0.14172363 + - -0.5678711 + - 0.37646484 + - 0.35205078 + - -4.265625 + - 4.203125 + - -1.1142578 + - 4.21875 + - 2.7851563 + - 2.6621094 + - -2.9238281 + - -0.36621094 + - -0.20227051 + - -2.7597656 + - -3.7851563 + - 4.2851563 + - 2.3164063 + - 0.47387695 + - -1.5878906 + - 1.0175781 + - -2.8925781 + - 2.2695313 + - -3.6914063 + - -2.90625 + - 1.0556641 + - -2.7617188 + - -2.3828125 + - 1.1035156 + - 3.6796875 + - -4.1796875 + - -3.6328125 + - -1.0761719 + - -3.8164063 + - -1.3251953 + - -3.2695313 + - 0.6142578 + - 0.33642578 + - -0.60546875 + - -3.3632813 + - 0.27856445 + - 2.4804688 + - -0.005859375 + - -3.453125 + - -3.1875 + - -0.30273438 + - 0.27001953 + - -0.025390625 + - -5.6132813 + - -2.9941406 + - -5.875 + - 3.1484375 + - 0.44140625 + - -1.6796875 + - -1.0410156 + - -3.4160156 + - 3.5820313 + - -0.81347656 + - 3.03125 + - 2.9101563 + - -5.4765625 + - 0.8930664 + - 1.3232422 + - -0.7001953 + - 4.234375 + - -2.5605469 + - 1.375 + - -0.32641602 + - 0.43847656 + - -1.6894531 + - -3.4863281 + - -0.0013017654 + - 2.3457031 + - -1.5449219 + - 1.9824219 + - -2.0859375 + - 0.011390686 + - -6.4765625 + - -0.7265625 + - 1.3144531 + - 0.72265625 + - 1.9667969 + - 3.2285156 + - 2.4492188 + - 3.2753906 + - -0.6191406 + - -0.20715332 + - -0.6738281 + - -1.6425781 + - -2.0429688 + - 2.75 + - 0.39453125 + - -2.234375 + - 1.2246094 + - 1.4462891 + - -1.1611328 + - -0.14904785 + - -3.4726563 + - -3.0878906 + - -0.2697754 + - 0.72753906 + - -1.2978516 + - 1.9814453 + - 1.6972656 + - 2.2578125 + - 4.6132813 + - 2.875 + - -1.4121094 + - -1.1679688 + - -5.0742188 + - 3.8691406 + - 3.1660156 + - -0.63134766 + - 3.8515625 + - 3.4023438 + - -4.703125 + - 0.8173828 + - 1.71875 + - -3.1015625 + - 1.7080078 + - -2.8554688 + - -0.7597656 + - -0.9326172 + - -0.109191895 + - 2.6972656 + - -0.2130127 + - -1.6132813 + - -4.0234375 + - 0.5908203 + - 1.0527344 + - -0.95751953 + - 1.6660156 + - -5.7226563 + - 3.6679688 + - -0.9609375 + - 1.8105469 + - 1.2666016 + - -2.5253906 + - 4.5742188 + - -2.3535156 + - 1.1855469 + - -1.7353516 + - 0.3647461 + - 0.4621582 + - -0.17773438 + - 2.1914063 + - -0.123046875 + - -1.8798828 + - -2.0722656 + - 2.4160156 + - -0.6821289 + - 0.9145508 + - -0.6699219 + - 3.6347656 + - -0.4506836 + - -2.5234375 + - 0.36083984 + - 3.8867188 + - 1.0419922 + - 0.26171875 + - -3.0488281 + - -1.7773438 + - -3.5644531 + - 8.484375 + - -2.2363281 + - 0.8208008 + - -1.0859375 + - 3.5 + - -1.0898438 + - 0.34301758 + - 3.1035156 + - -2.7539063 + - -0.7392578 + - -0.31958008 + - 1.5429688 + - -4.7421875 + - -1.5078125 + - 4.9453125 + - -2.2304688 + - 4.4765625 + - -0.57910156 + - 0.50097656 + - 0.8066406 + - 3.640625 + - 0.65185547 + - -1.6796875 + - -1.2626953 + - 1.1816406 + - -0.93847656 + - -5.1484375 + - 2.796875 + - -1.8652344 + - -3.5488281 + - -0.9433594 + - 1.9453125 + - 0.96191406 + - 2.0449219 + - -3.4863281 + - -1.5751953 + - 0.7236328 + - -0.9736328 + - -2.9609375 + - -4.0078125 + - 0.32543945 + - -3.0625 + - -1.9082031 + - 0.2536621 + - 1.0478516 + - -0.12597656 + - 2 + - 2.5058594 + - -1.6220703 + - -1.5644531 + - 2.1894531 + - 0.51660156 + - -0.79296875 + - -0.96533203 + - -2.53125 + - -1.0117188 + - 0.8876953 + - -1.3691406 + - -1.8613281 + - -3.0410156 + - -1.7900391 + - 1.9658203 + - -0.9121094 + - -0.27783203 + - 1.84375 + - 0.3996582 + - -1.0654297 + - -2.6601563 + - 2.1464844 + - -1.9316406 + - -2.9375 + - -2.375 + - -3.4160156 + - -2.4570313 + - 0.39501953 + - -1.2490234 + - 0.6035156 + - 4.7578125 + - 6.3125 + - -5.4570313 + - -1.9628906 + - -2.4863281 + - 4.7382813 + - -4.0429688 + - -2.8476563 + - 1.1337891 + - -2.4941406 + - -2.9492188 + - 0.68847656 + - 3.1503906 + - 1.1210938 + - -3.1191406 + - -0.6035156 + - -1.3535156 + - -1.6064453 + - 1.7626953 + - -1.9804688 + - -2.0917969 + - -1.3691406 + - -0.78222656 + - -3.7675781 + - 1.9072266 + - -1.2460938 + - 1.421875 + - -3.3378906 + - -0.48364258 + - 2.4375 + - -3.7910156 + - 9.40625 + - -3.3320313 + - -2.0078125 + - 4.4375 + - -0.16247559 + - 1.2167969 + - -1.5859375 + - -0.02961731 + - -2.2871094 + - 2.2089844 + - 6.4101563 + - -3.5625 + - -2.1816406 + - 5.1523438 + - -1.3691406 + - 1.7929688 + - -0.002603531 + - -2.6015625 + - 2.2851563 + - 3.7988281 + - -3.9414063 + - 1.6425781 + - -4.6875 + - -0.8071289 + - 3.3984375 + - -9.109375 + - -0.5864258 + - 5.3945313 + - -1.7861328 + - -1.1875 + - -0.7871094 + - 4.5507813 + - -3.2207031 + - -4.96875 + - -2.0664063 + - 0.5048828 + - 5.0429688 + - 1.0175781 + - 2.0585938 + - -0.9560547 + - -2.4648438 + - 0.03286743 + - -4.28125 + - -1.1728516 + - -0.59814453 + - 3.75 + - 1.2246094 + - -2.6386719 + - -3.546875 + - 0.17114258 + - -0.09472656 + - 1.046875 + - 1.3876953 + - 0.7265625 + - -0.47998047 + - -4.1953125 + - -1.9609375 + - -1.9501953 + - 1.5605469 + - 0.39990234 + - -0.71533203 + - -0.57470703 + - -3.5820313 + - -4.4570313 + - 2.1445313 + - 0.7578125 + - 0.18676758 + - -4.5039063 + - -0.08135986 + - -0.09631348 + - -1.8847656 + - -1.8984375 + - -0.3400879 + - -0.47998047 + - 3.1347656 + - -4.1328125 + - -0.8232422 + - 0.71777344 + - 2.1777344 + - -0.30322266 + - -1.8798828 + - -2.1523438 + - -0.1282959 + - 0.35302734 + - -5.2109375 + - 1.0439453 + - 3.7890625 + - 4.3203125 + - 0.9946289 + - 1.1191406 + - 0.5551758 + - 4.265625 + - 2.5566406 + - -3.1757813 + - 1.3759766 + - 1.7705078 + - 1.8789063 + - -3.515625 + - -0.57177734 + - 2.5957031 + - 2.7441406 + - 1.4775391 + - -1.7666016 + - 1.953125 + - -1.8046875 + - -0.12524414 + - 3.5 + - 0.18225098 + - -0.95703125 + - 4.3671875 + - -1.4648438 + - -0.9501953 + - -1.2714844 + - -1.8515625 + - -3.8671875 + - 0.9248047 + - 3.5644531 + - -3.2851563 + - -1.8759766 + - 0.5234375 + - 0.77441406 + - 5.0390625 + - 8.03125 + - -3.0878906 + - 0.10675049 + - -1.6738281 + - -1.5683594 + - 0.5629883 + - 0.98876953 + - -0.9711914 + - 3.5039063 + - -3.0117188 + - -4.2851563 + - -0.75097656 + - -2.6523438 + - -1.5585938 + - -0.95214844 + - -1.8955078 + - 2.4238281 + - 4.09375 + - 1.0087891 + - 2.1328125 + - 3.6210938 + - -1.8876953 + - -1.6953125 + - -0.9736328 + - 0.97509766 + - 1.7695313 + - 0.19726563 + - -2.953125 + - 0.07519531 + - -1.6572266 + - -0.55078125 + - -3.4492188 + - 0.86572266 + - -0.40283203 + - 0.51953125 + - -1.6298828 + - 1.9462891 + - -3.2382813 + - -0.4543457 + - 0.08459473 + - -0.3725586 + - 8.359375 + - -1.9736328 + - 3.078125 + - -6.90625 + - 3.5019531 + - 3.078125 + - -2.7441406 + - 1.2988281 + - 1.2304688 + - -0.87109375 + - -2.9941406 + - 0.11242676 + - -1.0742188 + - -1.0800781 + - -2.8847656 + - -0.8496094 + - -1.4003906 + - 4.9375 + - 0.011062622 + - 0.7714844 + - 0.9321289 + - -1.015625 + - 2.1484375 + - -3.4726563 + - 1.3017578 + - -0.2043457 + - 5.09375 + - -3.7441406 + - -3.4375 + - 2.5917969 + - -1.7236328 + - -2.96875 + - 2.671875 + - 0.48486328 + - -0.53515625 + - 1.5644531 + - 3.8925781 + - 1.5 + - -7.15625 + - 4.25 + - 0.5839844 + - -0.67089844 + - 1.4267578 + - -4.046875 + - 0.06085205 + - 1.5019531 + - -1.2285156 + - 3.0351563 + - -8 + - 2.3476563 + - -1.1425781 + - -0.47070313 + - -1.9033203 + - -1.4580078 + - 1.0644531 + - -0.9482422 + - 0.2734375 + - 1.9316406 + - 2.546875 + - 0.7626953 + - 0.62109375 + - -5.0507813 + - 0.8696289 + - 1.1464844 + - -0.50390625 + - 1.9472656 + - 0.26611328 + - -1.3447266 + - -1.2792969 + - -1.2011719 + - 2.8242188 + - 0.17150879 + - 2.7617188 + - 1.6142578 + - -4.9765625 + - 1.6386719 + - -1.9648438 + - -0.50683594 + - 0.005207062 + - 2.0917969 + - -1.3164063 + - -0.09765625 + - 7.171875 + - -1.4003906 + - -0.5078125 + - 4.2070313 + - 0.94628906 + - 0.2685547 + - -1.9238281 + - 2.2226563 + - 7 + - -1.4765625 + - -0.40161133 + - -0.4025879 + - -2.8945313 + - 4.7265625 + - -1.5859375 + - -3.6289063 + - -0.18481445 + - -1.7050781 + - -1.0244141 + - 0.16992188 + - 1.2441406 + - -4.1796875 + - 0.11584473 + - 0.12695313 + - 2.6210938 + - 3.7070313 + - 3.140625 + - 1.1640625 + - 0.17138672 + - 3.2753906 + - 0.6040039 + - -5.0703125 + - 3.1875 + - -3.40625 + - -3.4101563 + - -18.828125 + - -3.3867188 + - 0.34033203 + - 4.5078125 + - -4.2578125 + - 1.8261719 + - -15.546875 + - -6.8320313 + - -0.25146484 + - -1.1142578 + - 1.4101563 + - -2.1464844 + - -0.06311035 + - 5.6132813 + - 0.609375 + - 2.4941406 + - -0.095703125 + - 1.9628906 + - 1.8984375 + - -5.0390625 + - -1.5390625 + - 2.4101563 + - -1.3535156 + - 0.25048828 + - 1.6494141 + - -1.015625 + - 1.8330078 + - 0.032226563 + - -0.41333008 + - 1.9814453 + - -1.1152344 + - -5.0820313 + - 1.7158203 + - -2.3613281 + - 1.0039063 + - 1.1445313 + - 1.1855469 + - -2.3222656 + - 2.7597656 + - -2.234375 + - 0.30615234 + - 5.46875 + - 1.4003906 + - 0.33520508 + - -3.1113281 + - -0.9633789 + - 4.3125 + - -1.6455078 + - -1.6640625 + - 2.0117188 + - 2.4179688 + - 2.7929688 + - -1.6152344 + - -3.4414063 + - 0.44848633 + - -4.8984375 + - 1.0996094 + - 2.5820313 + - -3.7226563 + - -0.3215332 + - 0.93066406 + - -0.83447266 + - -0.38891602 + - 4.9296875 + - 2.3300781 + - 1.1542969 + - -2.9375 + - 0.4338379 + - 4.8984375 + - -0.52441406 + - -1.5908203 + - 2.5117188 + - -2.2929688 + - -0.87890625 + - -0.81347656 + - 1.4589844 + - -2.6425781 + - 0.38598633 + - 1.1855469 + - -2.0429688 + - 1.2470703 + - 4.2695313 + - 0.028320313 + - 0.12109375 + - -1.5 + - -4.3828125 + - 0.85791016 + - -2.6386719 + - 1.0341797 + - 0.2199707 + - -1.5253906 + - 1.3408203 + - -3.5625 + - -6.9882813 + - 0.3203125 + - -5.7578125 + - -0.9042969 + - 1.4853516 + - 1.3212891 + - -2.4160156 + - 1.0097656 + - -4.296875 + - -2.8925781 + - -3.3789063 + - -0.86572266 + - -1.8447266 + - -0.057922363 + - 4.3164063 + - -0.41357422 + - 2.2128906 + - -1.5957031 + - -3.0332031 + - -0.6298828 + - -1.1777344 + - -1.6542969 + - -0.5727539 + - 1.0410156 + - -2.8066406 + - 1.28125 + - -0.25708008 + - 2.5664063 + - -0.70214844 + - 2.6191406 + - -4.8320313 + - -2.2207031 + - 1.0322266 + - -4.5859375 + - -3.4707031 + - -0.82421875 + - 5.265625 + - 7.21875 + - -0.6113281 + - 0.14709473 + - 4.6757813 + - 3.2539063 + - -1.8515625 + - -0.8154297 + - -3.2285156 + - 1.9921875 + - 2.2148438 + - 0.71191406 + - -1.3535156 + - -1.4267578 + - 0.17541504 + - -3.3007813 + - -3.7207031 + - 1.2480469 + - -0.7211914 + - -1.2402344 + - -1.46875 + - -2.3671875 + - 1.3730469 + - 1.1972656 + - -1.9931641 + - 0.008460999 + - -2.7753906 + - -0.9765625 + - 1.4550781 + - 0.67089844 + - -2.78125 + - -3.9765625 + - -0.6464844 + - 0.97314453 + - 5.7226563 + - -1.7617188 + - 0.43798828 + - 2.4648438 + - 14.609375 + - -0.89160156 + - -3.5488281 + - 1.40625 + - -0.9633789 + - 4.6914063 + - -1.7617188 + - -9.1640625 + - 2.9785156 + - -1.6113281 + - 6.59375 + - 1.1025391 + - 0.38330078 + - 0.045898438 + - 1.7861328 + - 3.0253906 + - 1.6845703 + - -4.0664063 + - -0.6582031 + - -3.8476563 + - 1.6376953 + - -0.35473633 + - 1.7167969 + - -2.7832031 + - -1.6972656 + - 2.6484375 + - 0.05532837 + - -3.84375 + - -1.9736328 + - -1.2441406 + - -0.29760742 + - -0.20874023 + - 2.203125 + - -1.1289063 + - -1.96875 + - -1.7617188 + - -0.79589844 + - 2.0644531 + - -0.5283203 + - 0.4560547 + - -3.6113281 + - 4.2109375 + - 0.63623047 + - -3.1875 + - 1.65625 + - -2.8632813 + - -0.3671875 + - 2.3632813 + - -3.359375 + - 4.921875 + - 3.6289063 + - -0.55371094 + - 4.6875 + - -0.86621094 + - -1.6542969 + - 2.203125 + - 2.4003906 + - 2.4804688 + - -3.4003906 + - 2.6289063 + - -3.3457031 + - 4.8164063 + - 1.4804688 + - -1.8515625 + - -1.4667969 + - 2.953125 + - 0.6767578 + - -1.7666016 + - -2.9804688 + - -2.3554688 + - -0.016921997 + - 0.037261963 + - 1.6191406 + - 0.22387695 + - -1.9355469 + - -5.296875 + - 4.078125 + - -0.28320313 + - -2.9921875 + - -0.9472656 + - -0.5205078 + - 0.09436035 + - -0.024734497 + - -2.2226563 + - 0.18859863 + - 1.2792969 + - -1.7587891 + - 3.96875 + - -1.8046875 + - 1.1855469 + - 1.0712891 + - -3.03125 + - 1.1933594 + - -0.15588379 + - 1.9921875 + - 0.24865723 + - -1.7714844 + - 4.5234375 + - -2.078125 + - 1.8681641 + - 0.98046875 + - -0.33520508 + - -3.5195313 + - 4.7617188 + - 1.1386719 + - 0.24902344 + - -0.84277344 + - 0.40625 + - 3.7910156 + - -1.0361328 + - -2.6679688 + - -2.609375 + - -3.3378906 + - -0.018875122 + - -2.0644531 + - 1.3408203 + - 0.50146484 + - -1.4648438 + - -0.016921997 + - -3.7734375 + - 4.8984375 + - 22.46875 + - -2.5898438 + - 3.4765625 + - -0.9609375 + - 0.2861328 + - 0.2746582 + - 1.0527344 + - -3.6113281 + - 2.140625 + - -0.7060547 + - -2.6640625 + - 0.59277344 + - -2.5039063 + - -2.0117188 + - 0.6923828 + - 2.953125 + - -7.484375 + - 0.6113281 + - -0.24182129 + - 10.84375 + - -4.5 + - 2.25 + - 1.5820313 + - -0.46020508 + - 1.2763672 + - -1.4472656 + - -0.5859375 + - -2.4902344 + - 0.30664063 + - -0.7626953 + - -23.875 + - 0.13769531 + - -1.609375 + - 1.1171875 + - -2.3710938 + - -1.8945313 + - 1.0908203 + - 2.4921875 + - -3.21875 + - 0.11340332 + - -0.6767578 + - -0.44580078 + - -2.875 + - -1.1230469 + - -1.984375 + - -0.86376953 + - -3.296875 + - -0.4555664 + - -0.8203125 + - -0.15454102 + - -3.6738281 + - 2.9804688 + - 0.12854004 + - -1.1914063 + - 4.0234375 + - -1.8564453 + - -0.83984375 + - -1.3613281 + - 4.6640625 + - -1.8671875 + - 0.28735352 + - 2.7363281 + - -6.1015625 + - 0.7290039 + - -1.3056641 + - 3.7695313 + - -1.1601563 + - 1.0625 + - -3.78125 + - 2.2773438 + - 0.2277832 + - -0.37817383 + - -5.8515625 + - 3.671875 + - -1.3378906 + - -2.1328125 + - 2.2304688 + - 1.4345703 + - 1.7617188 + - 3.8515625 + - 1.5800781 + - -0.875 + - -2.1171875 + - 2.2539063 + - 4.5703125 + - 1.1855469 + - -1.3242188 + - -2.28125 + - -1.7871094 + - -0.83691406 + - -1.1425781 + - 0.06542969 + - 2.5722656 + - 3.4179688 + - 0.3774414 + - 3.0566406 + - 4.8046875 + - 3.234375 + - -0.27661133 + - -0.28564453 + - 0.32421875 + - -2.1894531 + - -0.26611328 + - -1.7158203 + - -0.8017578 + - 0.16564941 + - -3.03125 + - 0.86035156 + - -4.609375 + - -0.38916016 + - -3.0253906 + - -3.7070313 + - 1.2519531 + - 0.6308594 + - 2.625 + - -1.171875 + - 1.8955078 + - 4.3671875 + - 0.7158203 + - 0.41308594 + - -3.3222656 + - 3.0195313 + - 2.3242188 + - -1.4941406 + - -1.5791016 + - 5.890625 + - 0.2578125 + - 3.5039063 + - -1.0683594 + - -0.35864258 + - 1.4765625 + - 0.49047852 + - 3.7050781 + - 0.25341797 + - 0.31298828 + - -0.7685547 + - -3.1914063 + - -8.0859375 + - 1.5517578 + - -0.95751953 + - 2.3789063 + - 2.1582031 + - 0.8828125 + - 0.17248535 + - 2.7675781 + - 0.2130127 + - 0.421875 + - 1.1416016 + - -0.037750244 + - 3.7109375 + - 2.0234375 + - -0.0234375 + - -0.38476563 + - 0.5810547 + - -3.2597656 + - 7.3515625 + - 1.3300781 + - 2.2382813 + - 8.9453125 + - 14.390625 + - -0.80566406 + - -2.8847656 + - -0.19458008 + - -1.0244141 + - -0.7836914 + - 2.0332031 + - -0.25024414 + - 1.1953125 + - 0.16796875 + - -2.890625 + - 0.45751953 + - 2.0722656 + - 1.1640625 + - 0.4345703 + - 1.5634766 + - -0.96972656 + - 2.1953125 + - -1.9414063 + - -2.859375 + - -4.1640625 + - -1.1455078 + - 1.7265625 + - -0.72753906 + - -1.5800781 + - -4.5078125 + - -0.3244629 + - 0.98828125 + - 0.46923828 + - -1.0166016 + - -0.921875 + - -1.7265625 + - 3.3476563 + - -1.6611328 + - 1.7001953 + - 3.6132813 + - -0.921875 + - 0.4807129 + - -1.1152344 + - -1.2421875 + - 5.4375 + - -0.59765625 + - 0.88134766 + - -2.1542969 + - -0.44482422 + - -2.8945313 + - 4.2382813 + - -0.16369629 + - -3.4921875 + - -0.6894531 + - 3.8164063 + - -0.084472656 + - -0.40820313 + - 2.1269531 + - 1.9228516 + - 0.33813477 + - -3.0234375 + - -1.9277344 + - 0.22521973 + - 1.9921875 + - -1.0722656 + - 4.4375 + - 1.8457031 + - 3.5722656 + - 2.5078125 + - -2.7578125 + - 1.578125 + - -2.203125 + - 1.3535156 + - -0.59228516 + - -2.2070313 + - -1.0908203 + - 0.69628906 + - -0.20605469 + - 1.6328125 + - 2.4882813 + - -0.27734375 + - 0.00894928 + - 1.8417969 + - 0.70947266 + - 19.9375 + - -5.421875 + - -0.47705078 + - -4.2617188 + - -0.38085938 + - -0.26123047 + - 3.9101563 + - -0.67578125 + - -5.5078125 + - 3.8789063 + - 2.0234375 + - -0.032958984 + - 3.9257813 + - 3.5195313 + - 1.5126953 + - -0.68847656 + - 1.3222656 + - -5.328125 + - 3.4375 + - 1.8378906 + - -2.4726563 + - -0.5859375 + - -5.9882813 + - 2.4960938 + - -1.7119141 + - 0.8515625 + - -2.0839844 + - -0.019195557 + - 3.28125 + - -4.8828125 + - -1.3984375 + - -0.5126953 + - 0.5415039 + - 1.3134766 + - 3.7304688 + - 3.6660156 + - 5.8046875 + - 2.1132813 + - 2.4023438 + - 1.6210938 + - -3.3398438 + - -3.9472656 + - -1.1796875 + - 3.84375 + - 0.10559082 + - -1.4814453 + - -0.6899414 + - 4.0078125 + - 3.6445313 + - 2.0800781 + - -1.0830078 + - -2.6660156 + - 0.17626953 + - 15.890625 + - -3.5195313 + - -0.6542969 + - 1.1113281 + - -1.2714844 + - 0.5058594 + - 0.9790039 + - 2.1953125 + - -0.5185547 + - -0.015296936 + - -4.8710938 + - 0.45214844 + - -2.0976563 + - -1.7587891 + - -2.125 + - 1.3242188 + - -4.9453125 + - 0.9404297 + - 4.203125 + - -0.4453125 + - -2.0117188 + - 0.36254883 + - -2.5371094 + - -2.7109375 + - -0.4736328 + - 2.5546875 + - -3.6171875 + - 0.15441895 + - 0.32421875 + - 2.2421875 + - -0.05859375 + - -3.4414063 + - -2.7285156 + - -1.0400391 + - -1.2080078 + - -3.3789063 + - 0.6201172 + - -1.7148438 + - 0.9399414 + - 1.8457031 + - -1.9355469 + - 3.90625 + - -4.4609375 + - -2.8554688 + - -2.0859375 + - 1.0449219 + - 1.4804688 + - -0.51953125 + - -1.2929688 + - -0.90527344 + - 0.8515625 + - 1.4267578 + - -3.1972656 + - -1.7519531 + - 2.1191406 + - -2.0507813 + - 3.3066406 + - -0.96972656 + - -1.0117188 + - 3.6445313 + - 1.2128906 + - 0.75097656 + - -1.8925781 + - -4.4296875 + - 0.74072266 + - -2.7304688 + - 0.15820313 + - 2.0390625 + - 1.1806641 + - 0.02407837 + - 0.5703125 + - 0.74072266 + - -0.08947754 + - -0.68359375 + - -1.7851563 + - 1.2402344 + - 3.0722656 + - -3.7363281 + - 3.4804688 + - 1.5947266 + - -0.026687622 + - 1.8457031 + - 0.85595703 + - -8.34375 + - -4.5585938 + - -3.8925781 + - 0.21704102 + - -1.9277344 + - -0.074035645 + - -3.1953125 + - 3.359375 + - -2.5019531 + - 2.3535156 + - 5.03125 + - 7.1015625 + - -1.28125 + - 2.2109375 + - -1.2626953 + - 4.90625 + - -2.3300781 + - -0.8876953 + - 3.109375 + - -2.2070313 + - 1.9785156 + - 0.4543457 + - 0.93359375 + - -4.9882813 + - 2.4570313 + - -3.2910156 + - 0.19396973 + - 1.6191406 + - 1.2207031 + - -0.625 + - 0.5185547 + - 0.04751587 + - -2.078125 + - 4.3671875 + - 0.640625 + - 1.1728516 + - -0.67871094 + - -2.7265625 + - 1.984375 + - 2.21875 + - 4.2890625 + - 0.5439453 + - 0.80371094 + - 0.15490723 + - 3.796875 + - -1.3603516 + - -1.71875 + - -1.0683594 + - 0.6743164 + - 2.1289063 + - 3.1289063 + - -0.6176758 + - 3.4003906 + - 0.15136719 + - -2.7050781 + - 0.34594727 + - 2.5898438 + - 0.5234375 + - 5.5625 + - 0.91015625 + - 1.4609375 + - 14.859375 + - -1.3017578 + - 1.3212891 + - -5.2421875 + - -0.5214844 + - -2.3046875 + - 1.4150391 + - -1.203125 + - 3.953125 + - -2.0097656 + - -2.6992188 + - -0.8046875 + - 0.28833008 + - 2.7597656 + - 0.049804688 + - 0.91308594 + - -5.5703125 + - 0.25390625 + - 0.22265625 + - 0.024734497 + - -0.67626953 + - 1.3320313 + - -1.0410156 + - -3.640625 + - -0.25341797 + - 1.3417969 + - -1.5166016 + - -4.3671875 + - -2.4472656 + - 0.5439453 + - -1.8212891 + - -2.5585938 + - 0.5361328 + - -1.5664063 + - -1.0214844 + - 0.5654297 + - 2.5019531 + - 0.17297363 + - 4.5625 + - 0.49658203 + - 3.0566406 + - -4.6679688 + - 3.8378906 + - 0.25195313 + - -0.8876953 + - 8.140625 + - -1.640625 + - 0.22387695 + - -0.65722656 + - -5.0351563 + - 1.9902344 + - 1.2021484 + - -1.2587891 + - 4.3320313 + - 4.015625 + - -2.5078125 + - 0.609375 + - -3.09375 + - 0.4572754 + - -0.23364258 + - 0.1171875 + - 0.32739258 + - -0.19165039 + - -0.090148926 + - -1.8798828 + - 1.4228516 + - 2.6015625 + - -6.5703125 + - 2.609375 + - 1.6796875 + - 0.5102539 + - -0.8652344 + - 5.8476563 + - 1.5175781 + - 2.625 + - -0.23364258 + - -3.2832031 + - -1.5703125 + - 2.1601563 + - 2.2910156 + - 1.8681641 + - -0.49804688 + - 3.2441406 + - -0.22753906 + - -1.3798828 + - -0.14465332 + - -2.7597656 + - 2.3730469 + - -1.8300781 + - 1.2392578 + - -3.3203125 + - -2.5234375 + - 1.4462891 + - 2.6601563 + - -4.4882813 + - 2.1523438 + - -3.96875 + - 4.1875 + - 1.296875 + - -0.87109375 + - 4.6132813 + - -2.2578125 + - -2.4394531 + - 4.5039063 + - 1.5625 + - 4.5234375 + - 1.3134766 + - 0.890625 + - 0.9296875 + - 3.125 + - 35.3125 + - 14.140625 + - -9.8046875 + - 0.80566406 + - 0.46679688 + - 0.2388916 + - -1.8359375 + - -3.5703125 + - 1.5048828 + - 1.1679688 + - 1.9238281 + - -1.9316406 + - 0.390625 + - 1.7314453 + - -5.75 + - 0.51953125 + - -0.0259552 + - 0.54003906 + - -3.21875 + - 2.3359375 + - 0.29492188 + - 1.3408203 + - -1.4785156 + - -0.18762207 + - -0.43286133 + - -0.8017578 + - 1.234375 + - -0.73095703 + - -7.3320313 + - 1.9111328 + - 0.08721924 + - -0.56152344 + - 0.66552734 + - 1.2216797 + - 1.6660156 + - -3.3242188 + - 0.15881348 + - 5.359375 + - -1.8066406 + - 0.46606445 + - 1.8408203 + - 1.3925781 + - -1.0996094 + - 6.0195313 + - -1.1767578 + - 0.33618164 + - -1.9609375 + - 0.6040039 + - 1.3525391 + - 0.8286133 + - 2.8378906 + - 4.71875 + - -0.98339844 + - 0.24768066 + - 2.6523438 + - 1.0644531 + - -0.2685547 + - 0.8671875 + - -0.013015747 + - -2.2851563 + - 2.7597656 + - 4.7695313 + - 1.984375 + - -1.7236328 + - -0.20532227 + - -1.1162109 + - 2.0976563 + - -0.56933594 + - -6.0820313 + - 0.03515625 + - -1.5283203 + - -0.24816895 + - -2.9453125 + - -1.2636719 + - -0.31640625 + - -0.9946289 + - -0.3227539 + - -0.3232422 + - 5.5195313 + - 1.3876953 + - -1.6103516 + - 1.1777344 + - 0.8798828 + - 3.0117188 + - 1.7539063 + - 3.1132813 + - 0.38916016 + - 1.0009766 + - -0.27954102 + - -0.52734375 + - -1.2441406 + - 1.7978516 + - -0.52734375 + - -1.4316406 + - 4.7734375 + - 1.0517578 + - -0.8417969 + - 0.37353516 + - -1.390625 + - 0.013504028 + - -1.3125 + - -1.3105469 + - 0.3564453 + - 2.1289063 + - -0.7817383 + - 2.1816406 + - 0.61816406 + - -1.8378906 + - 2.3085938 + - 2.7304688 + - -2.4121094 + - 3.546875 + - -1.6015625 + - 5.25 + - 1.9033203 + - 1.71875 + - -3.9765625 + - -1.1386719 + - 2.6113281 + - 0.66503906 + - -3.75 + - -1.7431641 + - -0.765625 + - 2.6972656 + - 3.9335938 + - 2.4726563 + - -4.3320313 + - 2.8984375 + - -1.078125 + - -0.80126953 + - -0.14318848 + - -2.6601563 + - -0.91064453 + - 1.7587891 + - 2.2011719 + - -0.89697266 + - -1.9863281 + - -1.7695313 + - 2.6445313 + - -0.3449707 + - -0.8852539 + - 2.5625 + - 3.5722656 + - -1.4150391 + - 0.81152344 + - -0.9423828 + - 1.53125 + - -3.6367188 + - -4.6640625 + - -4.0390625 + - -1.5390625 + - -0.7294922 + - -2.1933594 + - 1.3330078 + - -0.35986328 + - 0.27075195 + - -1.8251953 + - -1.9804688 + - -1.609375 + - 2.4960938 + - -0.062408447 + - -2.3222656 + - 2.921875 + - 2.0546875 + - -3.0273438 + - 0.9316406 + - 0.48950195 + - 1.6035156 + - -0.19384766 + - -4.3203125 + - 0.21594238 + - 0.65722656 + - -2.4511719 + - -2.4238281 + - 9.5078125 + - 0.79296875 + - 3.9570313 + - 1.9072266 + - -2.578125 + - -2.5 + - 2.2050781 + - -1.2763672 + - -0.19104004 + - 1.3164063 + - 1.421875 + - 1.8671875 + - 0.62402344 + - 1.4189453 + - 2.0761719 + - -4.0859375 + - 1.6621094 + - 4.0234375 + - 0.7451172 + - 1.3007813 + - -1.7988281 + - -2.0234375 + - 0.93603516 + - 1.6611328 + - 1.7460938 + - -3.5039063 + - -1.8339844 + - 0.15356445 + - 1.8222656 + - -0.3371582 + - -1.3486328 + - -6.3789063 + - 0.18481445 + - -0.3762207 + - -1.1855469 + - -2.1796875 + - 1.3945313 + - -1.2001953 + - 0.9951172 + - 0.8515625 + - -1.3046875 + - 1.8066406 + - -4.6328125 + - -3.4648438 + - 2.0019531 + - -0.92089844 + - 1.7695313 + - 0.84228516 + - -2.453125 + - 0.89746094 + - 3.015625 + - 2.4082031 + - 3.3359375 + - 2.0429688 + - 3.359375 + - 0.98828125 + - -0.5395508 + - 0.7734375 + - -0.69921875 + - -0.022125244 + - -1.6035156 + - -0.92089844 + - -3.9453125 + - 3.2265625 + - 2.0742188 + - -1.7558594 + - 1.2539063 + - -1.7109375 + - -8.46875 + - 1 + - -0.0859375 + - -0.49853516 + - -0.5776367 + - 5.2109375 + - 0.15356445 + - -1.2011719 + - 0.51464844 + - 2.9941406 + - 3.5019531 + - 2.7988281 + - 1.4394531 + - -3.5 + - 3.3242188 + - 2.9238281 + - -3.0585938 + - 0.61035156 + - -2.3632813 + - -0.014320374 + - -3.9335938 + - -0.12188721 + - -3.6894531 + - -3.5351563 + - -3.5097656 + - 0.7763672 + - -3.6132813 + - -0.8251953 + - 4.8164063 + - -2.1816406 + - 0.08496094 + - -1.7275391 + - -2.546875 + - 1.9179688 + - -0.07159424 + - 0.5600586 + - 0.26953125 + - 0.8930664 + - 1.5214844 + - -0.3852539 + - 0.3918457 + - 1.9765625 + - -1.1972656 + - 10.28125 + - 0.10675049 + - 1.5996094 + - -5.140625 + - 1.5917969 + - 1.3613281 + - -1.1572266 + - -2.6503906 + - -0.92041016 + - 0.5595703 + - 5.9570313 + - 2.8691406 + - -0.47265625 + - -0.8173828 + - 2.4121094 + - -0.7080078 + - -1.546875 + - -1.1708984 + - 3.6347656 + - -2.0546875 + - 2.40625 + - -1.9707031 + - 3.3222656 + - -0.9892578 + - -2.9726563 + - 0.78759766 + - -3.1445313 + - 2.5390625 + - -0.1640625 + - -4.8203125 + - -1.359375 + - -2.4140625 + - 2.3359375 + - 1.0957031 + - 1.09375 + - 3.4804688 + - 0.09698486 + - 2.84375 + - -1.0722656 + - -2.6835938 + - -2.4023438 + - 0.3305664 + - -4.7421875 + - 7.9765625 + - 1.1757813 + - 2.3632813 + - 0.9433594 + - 0.9375 + - -2.1933594 + - 0.8671875 + - -0.35546875 + - -1.7910156 + - -4.7421875 + - -1.6884766 + - 2.75 + - -1.2597656 + - 1.5048828 + - -0.9902344 + - -3.4726563 + - 2.3359375 + - 1.4394531 + - -3.65625 + - 0.037109375 + - 1.6533203 + - 1.5869141 + - -3.453125 + - 1.9628906 + - -3.1289063 + - 0.921875 + - 1.0673828 + - 0.7294922 + - -2.640625 + - 1.59375 + - -3.2617188 + - -0.11260986 + - -0.56640625 + - -2.5410156 + - -1.296875 + - 2.8691406 + - 1.8642578 + - 0.81640625 + - 2.1640625 + - 1.4238281 + - 1.0595703 + - 2.5351563 + - 1.7939453 + - -0.1899414 + - -0.11529541 + - -0.007648468 + - -1.6503906 + - 2.78125 + - -2.3671875 + - -2.2753906 + - 1.2001953 + - 6.1796875 + - -0.62939453 + - -0.3984375 + - 0.7734375 + - 1.0205078 + - -1.7363281 + - -1.2089844 + - -0.32470703 + - 1.5488281 + - 1.8359375 + - -0.09472656 + - 3.4472656 + - -1.796875 + - -0.21679688 + - -1.1171875 + - 4.1171875 + - -4.84375 + - -1.0039063 + - 1.3798828 + - 2.1679688 + - 5.96875 + - -0.007160187 + - -0.7524414 + - 1.1494141 + - -1.4423828 + - 1.3359375 + - -1.6533203 + - -1.8291016 + - -2.3164063 + - 2.4257813 + - -3.3164063 + - 0.5654297 + - -0.17504883 + - -3.1523438 + - 3.0625 + - -1.0107422 + - 0.78759766 + - -2.0078125 + - 0.5644531 + - -3.609375 + - -3.875 + - -0.26171875 + - 4.7421875 + - -2.390625 + - 0.8071289 + - 2.5175781 + - 2.7539063 + - -0.8203125 + - -0.49731445 + - 0.005531311 + - -2.4589844 + - -0.3383789 + - 0.4633789 + - -1.3798828 + - -2.9238281 + - -1.0244141 + - -0.5551758 + - 1.4628906 + - 1.6816406 + - -7.8007813 + - -4.0703125 + - 18.453125 + - -1.7832031 + - -2.6523438 + - 0.90478516 + - 1.1425781 + - 1.1152344 + - 2.2109375 + - 2.9648438 + - 0.5527344 + - -0.3161621 + - 1.8134766 + - 0.8046875 + - 0.30908203 + - -3.5117188 + - 0.13476563 + - -3.0253906 + - -2.6484375 + - -1.6220703 + - 4.3789063 + - -0.81689453 + - -2.5 + - -3.0664063 + - -4.0078125 + - 0.69140625 + - -0.9267578 + - 3.2617188 + - 1.1308594 + - 0.01399231 + - 1.7246094 + - 0.4326172 + - 2.9375 + - -0.28857422 + - 6.5820313 + - 3.9335938 + - 0.7285156 + - -0.53808594 + - 0.20117188 + - 2.3007813 + - 4.6914063 + - -1.5195313 + - -0.71484375 + - 0.98046875 + - 1.3720703 + - -2.484375 + - 2.3574219 + - -2.6015625 + - 1.2705078 + - 2.6816406 + - 0.4543457 + - 0.53222656 + - 0.7138672 + - 0.2709961 + - -1.7832031 + - -1.7080078 + - 0.13085938 + - -4.7617188 + - -0.35498047 + - -1.5439453 + - 2.1484375 + - -3.4003906 + - -3.0546875 + - 0.06964111 + - -0.3400879 + - 3.3007813 + - -2.4648438 + - 0.42578125 + - 2.4003906 + - 3.015625 + - -2.0273438 + - 3.03125 + - -4.875 + - -3.0742188 + - 0.037750244 + - -1.5507813 + - 2.0078125 + - 8.1796875 + - 0.9716797 + - 4.4101563 + - -6.3320313 + - 0.41015625 + - -1.1025391 + - 3.03125 + - 0.037109375 + - -0.12988281 + - 0.2265625 + - -5.8671875 + - -0.8408203 + - -0.2854004 + - 2.4570313 + - -1.3232422 + - -1.3886719 + - 1.3066406 + - -2.6894531 + - -2.40625 + - -3.0625 + - 2.8867188 + - 3.0722656 + - -1.0683594 + - 5.109375 + - -3.4726563 + - -1.0136719 + - 0.5371094 + - 0.97265625 + - 2.5136719 + - 1.265625 + - 0.55908203 + - -0.33984375 + - -0.796875 + - 0.83691406 + - 0.42236328 + - 5.5390625 + - 1.5234375 + - 1.609375 + - 1.1035156 + - 3.9726563 + - 0.56689453 + - 0.7675781 + - 0.8461914 + - 1.125 + - -0.07092285 + - 2.8300781 + - 0.44262695 + - 4.7226563 + - -1.2949219 + - -1.296875 + - -3.4394531 + - 0.82910156 + - -0.0390625 + - -0.35302734 + - -0.41064453 + - 2 + - -0.5859375 + - -5.6640625 + - -0.95166016 + - 0.6816406 + - 2.5839844 + - 2.2539063 + - 1.7753906 + - -0.2446289 + - 3.1757813 + - 2.1015625 + - 2.6113281 + - 0.2355957 + - 2.0449219 + - 2.7207031 + - -2.1035156 + - -7.1914063 + - -2.6035156 + - 1.9921875 + - -3.4628906 + - -1.4902344 + - -0.55566406 + - 2.8378906 + - 3.9375 + - 3.6445313 + - -0.11584473 + - 0.31054688 + - 1.0019531 + - -0.61328125 + - -0.2763672 + - 3.5175781 + - 3.4804688 + - -3.5957031 + - 0.012039185 + - -0.38110352 + - 3.6601563 + - 0.25683594 + - -0.40551758 + - -0.64160156 + - 0.25732422 + - 0.79003906 + - -0.89697266 + - -2.1835938 + - -1.0742188 + - -1.6757813 + - -1.7851563 + - -2.0585938 + - 2.5898438 + - -1.0957031 + - 0.6035156 + - 2.265625 + - -3.1445313 + - -0.5493164 + - 1.2929688 + - -1.7363281 + - -2.3945313 + - -1.0546875 + - -2.1835938 + - 3.8320313 + - 3.1191406 + - 2.3144531 + - -6.7578125 + - -1.0976563 + - 0.35668945 + - -5.2851563 + - 1.7636719 + - -2.6367188 + - 0.97509766 + - 0.6538086 + - -8.5703125 + - 1 + - 0.4169922 + - 0.2602539 + - -2.1210938 + - -1.5859375 + - -1.46875 + - 0.5834961 + - 0.28320313 + - -0.33911133 + - -25.625 + - -1.5126953 + - -5.8125 + - 2.9765625 + - 0.24145508 + - 2.3144531 + - 3.0878906 + - -3.5878906 + - -5.1640625 + - 0.020828247 + - 0.49243164 + - -1.0859375 + - -1.9501953 + - 5.7734375 + - -0.13366699 + - 5.1953125 + - 0.08850098 + - 4.9921875 + - -0.98339844 + - 1.5410156 + - -0.08721924 + - -0.72509766 + - 1.2910156 + - 3.8125 + - -1.3193359 + - -3.4960938 + - -0.44189453 + - -0.16748047 + - 3.4414063 + - -0.5678711 + - 0.37939453 + - -0.43286133 + - 2.3046875 + - 0.40356445 + - -6.2226563 + - 4.4296875 + - -2.4609375 + - -1.8955078 + - -4.2421875 + - -1.4931641 + - -0.85791016 + - 1.5517578 + - 2.6621094 + - -0.15686035 + - -3.5273438 + - 3.125 + - 2.96875 + - -1.0556641 + - 0.40283203 + - -5.1601563 + - 3.0507813 + - -0.55029297 + - -2.0722656 + - -3.703125 + - 1.7236328 + - 3.7421875 + - -1.4472656 + - 2.5976563 + - 1.6269531 + - 0.29492188 + - 0.12524414 + - -2.1269531 + - 1.8564453 + - -1.2783203 + - 0.90527344 + - 0.0960083 + - 0.92041016 + - -3.8691406 + - 2.2910156 + - -1.1074219 + - -2.6953125 + - 1.5048828 + - 1.3212891 + - 1.3105469 + - -0.69921875 + - 1.109375 + - -0.84765625 + - -2.1894531 + - 1.7773438 + - 0.46289063 + - 1.0683594 + - 1.5205078 + - 0.45947266 + - 0.6953125 + - 2.515625 + - 1.7626953 + - -0.017410278 + - 0.37109375 + - 2.5585938 + - 0.52685547 + - -0.4777832 + - 2.1425781 + - -0.33813477 + - 6.3203125 + - -0.26220703 + - 2.9394531 + - -0.91015625 + - 0.6923828 + - 1.2431641 + - -0.40356445 + - 1.5996094 + - -1.4775391 + - 3.7519531 + - -1.3554688 + - 1.9160156 + - -1.5986328 + - -3.5078125 + - 5.140625 + - -1.1523438 + - 5.8007813 + - -1.2900391 + - 7.9765625 + - -1.7509766 + - 0.32861328 + - -2.2382813 + - 0.93652344 + - -0.7392578 + - 2.2539063 + - -1.0869141 + - -0.8466797 + - 2.7597656 + - 1.7753906 + - 4.6328125 + - -0.29882813 + - -0.6533203 + - 0.57910156 + - -0.515625 + - -3.8828125 + - -1.7470703 + - 0.18225098 + - -3.9160156 + - -1.1816406 + - 2.4863281 + - 3.9570313 + - -0.8852539 + - -2.1601563 + - -28.90625 + - 0.2919922 + - 2.2734375 + - -0.76660156 + - 0.6015625 + - 3.8164063 + - -0.01789856 + - 1.8408203 + - 1.7519531 + - 2.5898438 + - -0.31176758 + - -0.4230957 + - -1.1376953 + - -0.7158203 + - -2.2890625 + - -0.734375 + - 0.34375 + - 1.4375 + - 1.8173828 + - -2.7070313 + - 2.7675781 + - 8.484375 + - 3.6015625 + - -2.203125 + - 0.8564453 + - 0.796875 + - -0.41333008 + - 0.9296875 + - 1.9941406 + - -3.4882813 + - 0.7446289 + - 0.020996094 + - -0.27001953 + - -0.5830078 + - 2.6367188 + - -3.4160156 + - -3.4082031 + - -0.86816406 + - -0.6953125 + - -1.28125 + - 5.4765625 + - 0.37890625 + - -0.4609375 + - 3.0097656 + - -2.2636719 + - 3.6289063 + - 0.0012741089 + - 3.1953125 + - 1.0205078 + - -2.0507813 + - -0.6533203 + - 4.0703125 + - -0.9589844 + - 2.4824219 + - 1.3720703 + - 0.19848633 + - -1.6601563 + - 2.2304688 + - -0.88378906 + - -3.2988281 + - 1.7441406 + - -1.4970703 + - -0.6040039 + - -2.4921875 + - -4.8007813 + - 0.8598633 + - -4.3984375 + - 1.9423828 + - 4.296875 + - -8.7109375 + - 1.3457031 + - -0.068359375 + - -1.9345703 + - -4.8671875 + - 3.1914063 + - 1.0673828 + - -1.9160156 + - 2.15625 + - -1.0566406 + - 2.7050781 + - 1.0644531 + - 0.044921875 + - 1.9609375 + - 0.53759766 + - 1.7822266 + - -1.8515625 + - -0.28759766 + - -1.8173828 + - -0.82910156 + - 0.34765625 + - -2.0625 + - -1.6425781 + - 0.8466797 + - 0.7636719 + - 3.6132813 + - 2.0976563 + - 0.7114258 + - -0.21289063 + - 2.4335938 + - 0.03579712 + - 3.9882813 + - -0.88671875 + - -4.7070313 + - -1.7285156 + - 1.5078125 + - 0.094055176 + - -0.012367249 + - 3.2851563 + - 4.1523438 + - 1.1933594 + - -1.453125 + - 3.5820313 + - 0.89697266 + - 2.5136719 + - -2.203125 + - 0.107421875 + - 1.2734375 + - 4.0390625 + - -0.3244629 + - -0.6425781 + - 3.8125 + - -3.5703125 + - -4.6640625 + - -0.10461426 + - 0.107055664 + - -3.3007813 + - -4.375 + - 1.1699219 + - -0.87597656 + - 2.4726563 + - 3.265625 + - 0.8408203 + - 2.9882813 + - -0.35546875 + - 1.6015625 + - -1.0097656 + - -2.5429688 + - 0.014320374 + - 0.7524414 + - -1.5390625 + - 1.0507813 + - 3.59375 + - -0.16918945 + - 0.25976563 + - 2.7695313 + - 0.48168945 + - 3.7539063 + - -2.1289063 + - -1.890625 + - 0.53808594 + - 3.9726563 + - 4.609375 + - -0.17053223 + - 3.21875 + - -1.828125 + - 1.2353516 + - -2.8007813 + - 0.14550781 + - 0.9404297 + - 0.9580078 + - -0.76660156 + - 2.3359375 + - 2.0234375 + - 3.0253906 + - 2.5703125 + - -3.4179688 + - 4.515625 + - -3.578125 + - 1.1767578 + - -0.31396484 + - -0.3088379 + - -1.5947266 + - 0.2421875 + - -0.4482422 + - -3.765625 + - 0.39746094 + - 2.2148438 + - -0.29541016 + - -0.5517578 + - 2.65625 + - 0.48657227 + - -0.29711914 + - -2.671875 + - 1.4628906 + - 1.0449219 + - 4.421875 + - -1.2089844 + - 2.4667969 + - -3.2109375 + - -0.8457031 + - -0.15783691 + - -0.5551758 + - -0.73291016 + - 5.1835938 + - 0.078125 + - -1.5830078 + - -0.33081055 + - 0.07092285 + - -1.8925781 + - 0.57128906 + - 0.515625 + - -1.1679688 + - -1.2685547 + - -3.4785156 + - -0.05206299 + - -0.38623047 + - -0.98828125 + - -0.30981445 + - 0.98535156 + - -2.3984375 + - -1.1425781 + - -7.2890625 + - -4.9921875 + - 3.40625 + - -2.6191406 + - -1.9726563 + - 1.875 + - -0.65283203 + - 3.1640625 + - -3.1445313 + - -2.3847656 + - -5.6875 + - -1.5703125 + - -4.234375 + - 1.3476563 + - -0.11682129 + - 1.765625 + - 1.984375 + - -2.078125 + - 1.0410156 + - -1.4189453 + - -2.9609375 + - 0.45947266 + - -0.41918945 + - -1.3798828 + - 2.2890625 + - -0.97265625 + - 0.35766602 + - 4.2890625 + - -1.2666016 + - 4.546875 +- - 3.2363281 + - -1.1582031 + - 1.0810547 + - -2.0292969 + - 1.609375 + - -1.0048828 + - 0.43676758 + - -0.8769531 + - 0.79785156 + - -0.27612305 + - 0.4963379 + - -0.82128906 + - 0.16906738 + - -0.734375 + - -0.34936523 + - 0.03515625 + - 0.34375 + - 1.3769531 + - 1.5234375 + - -1.875 + - -1.4082031 + - 1.6289063 + - -1.1650391 + - 0.65234375 + - 1.796875 + - 1.984375 + - -0.4350586 + - 1.4003906 + - -0.34985352 + - -2.5253906 + - 2.5351563 + - 0.32348633 + - 2.3007813 + - 1.5195313 + - -0.28295898 + - 1.1650391 + - -3.4472656 + - 0.07421875 + - -5.28125 + - -0.8310547 + - 0.7524414 + - -2.4257813 + - -0.91845703 + - -0.9814453 + - -1.7285156 + - 2.0761719 + - 0.23657227 + - -3.9003906 + - -1.4052734 + - 0.8310547 + - 3.9140625 + - -0.43408203 + - -3.0429688 + - -100.5625 + - -3.0703125 + - -0.93652344 + - 2.71875 + - -1.0527344 + - -1.3789063 + - -7.3671875 + - -2.3789063 + - 0.58251953 + - 0.8388672 + - 0.13110352 + - 2.4003906 + - 0.07421875 + - -2.5488281 + - 0.5126953 + - 2.0644531 + - -1.5556641 + - -4.6679688 + - 0.055236816 + - -2.9921875 + - -0.9038086 + - -1.2294922 + - -0.3984375 + - 2.9863281 + - 3.1328125 + - -0.13867188 + - -0.36523438 + - -0.63916016 + - -0.6064453 + - -1.5869141 + - -0.3425293 + - -2.0234375 + - 0.5336914 + - -1.8027344 + - -0.15185547 + - 2.2578125 + - 0.86376953 + - -1.234375 + - 5.9453125 + - 2.7089844 + - -19.703125 + - -2.8125 + - -2.7832031 + - -4.4375 + - 0.35595703 + - 1.5751953 + - -4.09375 + - 1.6884766 + - -1.3564453 + - -3.8652344 + - -0.61035156 + - 0.0055770874 + - -2.7949219 + - 0.08062744 + - -1.3369141 + - -1.5839844 + - -0.056915283 + - 0.04058838 + - 0.4296875 + - 0.47753906 + - -1.5585938 + - -0.055511475 + - 3.03125 + - 2.8515625 + - 0.70947266 + - -0.18884277 + - 0.29467773 + - 2.2421875 + - 0.59472656 + - 0.15393066 + - -2.4863281 + - -2.1992188 + - -0.27172852 + - 2.40625 + - -0.73095703 + - 0.32299805 + - 1.59375 + - 2.3808594 + - 0.17297363 + - -3.2519531 + - 1.1630859 + - 1.234375 + - 2.40625 + - -0.3088379 + - 0.78564453 + - -1.2050781 + - -1.4824219 + - 1.5166016 + - -0.4206543 + - 1.3535156 + - -2.7734375 + - 1.1757813 + - -2.8027344 + - -1.7998047 + - -0.9379883 + - -2.5703125 + - 4.5820313 + - 0.78564453 + - -1.9257813 + - -1.0478516 + - 0.03515625 + - 0.5151367 + - -2.7832031 + - 0.90722656 + - -0.5102539 + - -3.0390625 + - -3.1289063 + - -1.2509766 + - -2.6191406 + - -0.5546875 + - -1.1376953 + - 0.51416016 + - 1.3994141 + - 3.3613281 + - -1.1591797 + - -0.7583008 + - -0.46289063 + - -2.6386719 + - -1.9306641 + - -0.43896484 + - -2.9863281 + - -0.09875488 + - 0.25195313 + - -1.3115234 + - 2.09375 + - -4.265625 + - -2.2519531 + - 1.7910156 + - 0.8022461 + - -1.8603516 + - -1.8544922 + - 0.13891602 + - 5.1054688 + - -3.4863281 + - -0.85253906 + - -1.1806641 + - 0.07336426 + - -1.9082031 + - -3.7753906 + - -0.5541992 + - 0.640625 + - -2.2460938 + - 1.4951172 + - 3.6328125 + - -2.1640625 + - -1.4921875 + - 0.13476563 + - 0.44189453 + - -2.359375 + - 1.9189453 + - 0.7114258 + - 7.9375 + - 3.2929688 + - 4.2617188 + - -2.8378906 + - -0.3474121 + - -2.2304688 + - -2.0644531 + - -0.7504883 + - -2.9101563 + - -0.859375 + - 0.8330078 + - 3.9570313 + - -0.0036258698 + - -2.5214844 + - 3.0898438 + - -0.70458984 + - -3.8535156 + - 0.6298828 + - -0.32739258 + - 3.1289063 + - -0.08618164 + - -1.21875 + - 0.09649658 + - 0.7675781 + - 0.39672852 + - -3.1464844 + - 0.7763672 + - -0.7680664 + - -1.0068359 + - -0.88671875 + - -0.2064209 + - 1.5820313 + - 0.7441406 + - 2.3671875 + - 2.8554688 + - 1.6601563 + - 6.0390625 + - -0.35351563 + - -3.4589844 + - 0.23046875 + - -2.2324219 + - -1.7626953 + - 3.2714844 + - 2.5566406 + - -0.61572266 + - 0.20751953 + - 1.2539063 + - 0.4423828 + - -2.1269531 + - 0.5131836 + - 0.62353516 + - -0.6958008 + - -0.33032227 + - -2.28125 + - 0.032348633 + - 0.3408203 + - 1.4726563 + - 1.8486328 + - 1.890625 + - 1.8886719 + - -0.37426758 + - 2.4140625 + - -2.3027344 + - 3.9121094 + - 0.85546875 + - -4.6953125 + - 0.32983398 + - 0.8154297 + - 3.2304688 + - 0.8305664 + - -0.42773438 + - -1.1630859 + - -3.9277344 + - 1.3681641 + - 0.18469238 + - 1.0292969 + - -2.1328125 + - -2.6738281 + - 1.3876953 + - 0.1361084 + - 0.99902344 + - -0.77783203 + - -0.064697266 + - 1.828125 + - 0.65771484 + - 0.03390503 + - 1.7265625 + - 1.2138672 + - 10.0703125 + - 0.064697266 + - 0.6723633 + - -0.4819336 + - 1.8457031 + - -1.4023438 + - 2.2148438 + - -0.5493164 + - -0.07574463 + - -0.20422363 + - 2.7597656 + - 3.3242188 + - -1.6425781 + - 1.5322266 + - 2.4785156 + - 1.4394531 + - -0.09094238 + - -1.203125 + - -1.6650391 + - -0.10546875 + - -0.8964844 + - 0.072509766 + - 1.1875 + - -2.4375 + - 0.08258057 + - -0.14453125 + - -3.1816406 + - 1.2851563 + - 1.8339844 + - 1.2412109 + - -3.8457031 + - 2.5703125 + - -1.4052734 + - -0.78564453 + - -1.3427734 + - -1.5039063 + - 2.3652344 + - -3.5820313 + - -4.078125 + - 1.7050781 + - 1.5644531 + - 0.7709961 + - 2.34375 + - -0.11657715 + - 2.7832031 + - -0.49926758 + - 0.08984375 + - 0.105285645 + - 2.7597656 + - -0.4482422 + - 2.1015625 + - 1.5488281 + - 1.9433594 + - 1.1533203 + - -0.21252441 + - 2.6777344 + - -5.0664063 + - -0.8847656 + - 2.1464844 + - -1.265625 + - 0.3330078 + - 0.5102539 + - -2.1738281 + - -0.7841797 + - -4.1015625 + - -1.609375 + - -1.6220703 + - -1.4111328 + - -1.4921875 + - 1.7324219 + - 4.359375 + - -1.3857422 + - 2.9726563 + - -2.90625 + - 6.1757813 + - 1.6982422 + - 1.4638672 + - -2.6894531 + - 0.7714844 + - -1.5244141 + - -2.125 + - 3.5058594 + - -0.3996582 + - 3.5996094 + - -1.4482422 + - 0.3935547 + - 0.7109375 + - 2.4746094 + - -1.3896484 + - -1.2880859 + - -1.9433594 + - -0.859375 + - -0.703125 + - 1.8554688 + - 1.8632813 + - -4.2226563 + - -8.125 + - -2.1074219 + - 0.453125 + - -0.09375 + - -2.6660156 + - -0.95751953 + - 0.047698975 + - -0.29663086 + - 2.6464844 + - 2.1074219 + - -2.1464844 + - 1.5498047 + - -2.3339844 + - 1.5898438 + - -0.5654297 + - -4.3476563 + - -0.1673584 + - 1.7988281 + - 2.0488281 + - -2.1660156 + - -14.390625 + - -0.12243652 + - -2.2089844 + - -1.6064453 + - 3.1171875 + - -1.1591797 + - 1.4433594 + - -0.19689941 + - -3.6835938 + - -1.4238281 + - -3.6152344 + - 5.109375 + - -0.5004883 + - -0.4736328 + - 2.7988281 + - -0.32592773 + - -0.75927734 + - 1.0458984 + - 0.1619873 + - -2.0371094 + - 2.2246094 + - -1.4375 + - -1.921875 + - -1.7138672 + - -3.8613281 + - 0.85009766 + - -0.37939453 + - -1.8525391 + - 0.5839844 + - -1.9013672 + - 0.7519531 + - 1.6748047 + - -1.3095703 + - -1.5087891 + - -0.6269531 + - -1.6445313 + - -2.2011719 + - -0.9091797 + - 0.06640625 + - 2.7050781 + - -2.1679688 + - -3.5800781 + - -0.009483337 + - 1.5244141 + - -0.58935547 + - -2.0390625 + - -0.47583008 + - 5.609375 + - 4.625 + - -0.033477783 + - 0.07110596 + - 3.2851563 + - -0.44482422 + - -2.8945313 + - -1.7675781 + - 2.7714844 + - -0.9301758 + - -0.84521484 + - -0.9785156 + - 0.27197266 + - 0.33666992 + - -2.3515625 + - 4.9375 + - 2.3125 + - 0.29882813 + - 1.015625 + - 0.35131836 + - 0.43896484 + - 0.8076172 + - -0.91064453 + - -0.6064453 + - 3.8203125 + - 0.5683594 + - 0.55908203 + - 0.9736328 + - -1.9970703 + - -0.3269043 + - 1.2158203 + - -6.0039063 + - 0.13977051 + - 3.71875 + - -0.5605469 + - 0.46313477 + - 1.5683594 + - -0.7011719 + - -0.46362305 + - -2.6328125 + - -1.3330078 + - 2.4570313 + - -2.0488281 + - -2.9238281 + - 5.375 + - 0.21679688 + - -5.9726563 + - 2.0390625 + - 0.055786133 + - 1.3359375 + - 3.8378906 + - -0.6225586 + - -0.6113281 + - -1.5830078 + - 2.8535156 + - 3.6679688 + - -2.5703125 + - -1.5019531 + - 0.69091797 + - -2.0332031 + - 1.6210938 + - -0.3408203 + - -0.5522461 + - -1.4355469 + - -0.5078125 + - 0.5957031 + - 1.5869141 + - 3.6757813 + - -0.018692017 + - 0.55566406 + - 1.4609375 + - 0.20336914 + - -1.3769531 + - 1.6767578 + - 2.1894531 + - 0.85253906 + - 0.4519043 + - -0.00390625 + - -1.8789063 + - 3.5800781 + - 0.16516113 + - -4.5117188 + - -0.12890625 + - -0.3557129 + - -1.6269531 + - -1.9589844 + - -1.0107422 + - 3.1054688 + - -0.8457031 + - -4.8476563 + - -2.3652344 + - -1.3818359 + - 0.20703125 + - 1.9863281 + - 1.4814453 + - 0.6333008 + - 1.9667969 + - -17.671875 + - -1.453125 + - -1.0478516 + - -2.0019531 + - -1.3818359 + - 0.61279297 + - 0.20227051 + - 0.0055770874 + - 2.3476563 + - -3.4804688 + - -1.0546875 + - -2.2363281 + - 1.2685547 + - -1.0302734 + - 0.87597656 + - -2.4453125 + - -1.4394531 + - -2.3496094 + - -2.2890625 + - -0.8925781 + - -1.9296875 + - 0.9921875 + - 0.2939453 + - -1.2851563 + - 1.1201172 + - 0.578125 + - 0.30908203 + - 0.7246094 + - -3.2089844 + - 0.65478516 + - 2.5683594 + - -3.2148438 + - -2.9394531 + - 1.6816406 + - 1.6416016 + - -2.3417969 + - -3.5 + - -1.1904297 + - 1.4462891 + - -3.1875 + - -1.890625 + - -0.1015625 + - -1.9082031 + - 1.4306641 + - 5.1757813 + - 3.9101563 + - 1.0263672 + - 3.2402344 + - -0.8222656 + - -0.68603516 + - 0.055786133 + - -2.2578125 + - -2.3261719 + - 0.15234375 + - -3.6972656 + - 0.5625 + - -4.3789063 + - 0.9506836 + - 2.5957031 + - -1.7587891 + - -1.9824219 + - 1.9609375 + - -0.60595703 + - -0.2524414 + - -1.5576172 + - 1.8701172 + - -2.1386719 + - 0.00390625 + - 1.4619141 + - 1.8613281 + - 0.00027894974 + - 0.44140625 + - -1.6054688 + - 3.4902344 + - 0.036834717 + - 1.4169922 + - 0.7788086 + - -0.12384033 + - 1.7070313 + - -0.52197266 + - -3.2265625 + - -2.6875 + - 0.61572266 + - 2.6113281 + - -2.8164063 + - -0.83251953 + - -0.25439453 + - 0.037384033 + - -2.2226563 + - -2.5703125 + - -0.08013916 + - 2.7851563 + - 4.390625 + - -1.0810547 + - 0.59375 + - -4.6757813 + - 7.9140625 + - -3.1503906 + - 0.73339844 + - 3.3554688 + - -1.6220703 + - -2.59375 + - 0.984375 + - -1.6298828 + - -0.5546875 + - 2.6933594 + - 3.8125 + - -0.45922852 + - 1.4638672 + - 1.0556641 + - 1.6621094 + - 3.1113281 + - -0.55126953 + - 2.4003906 + - 1.8222656 + - -2.0507813 + - 0.22314453 + - 0.98535156 + - -0.5253906 + - -1.0029297 + - 0.6152344 + - 0.6113281 + - -0.71191406 + - -2.9492188 + - -0.19580078 + - -0.98828125 + - -0.1899414 + - 0.044067383 + - 1.5214844 + - 1.734375 + - 1.0146484 + - -1.4179688 + - 7.7578125 + - 3.3652344 + - 7.0976563 + - 1.4726563 + - -5.7226563 + - -5.890625 + - -0.3828125 + - -1.3154297 + - -0.31958008 + - -1.5888672 + - 0.1907959 + - -0.23181152 + - -1.046875 + - 1.6132813 + - -1.9482422 + - 2.6699219 + - 3.2246094 + - 3.6679688 + - -0.9091797 + - -2.5136719 + - 0.5102539 + - 24.09375 + - 1.2988281 + - 0.88183594 + - 0.09313965 + - -3.0195313 + - 1.8251953 + - 0.71484375 + - 0.77197266 + - -2.15625 + - 1.1113281 + - 3 + - 2.96875 + - -0.28686523 + - -0.0496521 + - 0.5957031 + - 4.7929688 + - 1.4414063 + - 3.0625 + - -5.0664063 + - -0.17687988 + - -1.8623047 + - -1.8876953 + - -3.6367188 + - 0.9038086 + - -0.4519043 + - 1.453125 + - -0.27124023 + - -1.8652344 + - 2.1582031 + - 0.65771484 + - -3.4160156 + - -5.7304688 + - -0.22070313 + - -3.03125 + - -0.9975586 + - 1.8378906 + - -1.4101563 + - 1.4414063 + - 3.9804688 + - -1.9648438 + - -1.5292969 + - -1.8769531 + - 2.2949219 + - -0.23254395 + - -0.5600586 + - 1.2783203 + - 0.60791016 + - 1.453125 + - 0.8408203 + - -0.73535156 + - -0.99658203 + - -3.1132813 + - 2.9472656 + - -0.5136719 + - 0.32617188 + - -2.6640625 + - -1.5917969 + - 1.0527344 + - 0.119384766 + - -1.2695313 + - -1.6621094 + - 2.1621094 + - -1.7226563 + - -1.7275391 + - -0.45898438 + - -0.26733398 + - 2.6152344 + - 0.4230957 + - -1.1201172 + - -0.47021484 + - 4.1289063 + - 1.4775391 + - -0.26342773 + - 2.9726563 + - -2.859375 + - 2.3222656 + - 0.52197266 + - -1.1865234 + - -3.2050781 + - -1.1943359 + - 2.2285156 + - -2.5 + - 5.8789063 + - -0.001953125 + - 2.4101563 + - -0.78027344 + - -1.4560547 + - 0.8540039 + - 2.6914063 + - 0.49853516 + - -1.1474609 + - -0.55566406 + - 0.46972656 + - 1.1582031 + - -3.6191406 + - 2.3203125 + - -4.75 + - -4.75 + - -3.7871094 + - 1.0068359 + - 3.9179688 + - 1.4345703 + - -1.3925781 + - 0.171875 + - 2.4257813 + - 1.21875 + - -2.6074219 + - 1.1171875 + - -1.5332031 + - -4.0273438 + - -0.3540039 + - 5.6328125 + - 0.23010254 + - 2.109375 + - 1.9853516 + - -0.9951172 + - 2.140625 + - -0.2705078 + - -2.8164063 + - -0.19946289 + - 4.5820313 + - -2.5664063 + - -0.3581543 + - 2.8847656 + - -1.4316406 + - 0.06585693 + - 1.0810547 + - -1.1972656 + - -9.3359375 + - 1.4482422 + - -47.25 + - -1.2919922 + - -0.6015625 + - -2.0625 + - -3.9179688 + - -0.47729492 + - 0.296875 + - 1.0654297 + - 1.6640625 + - 1.0595703 + - 0.18188477 + - -1.796875 + - 4.6875 + - -0.5253906 + - -2.0019531 + - 1.5869141 + - 1.1044922 + - -0.7211914 + - 16.984375 + - 0.42285156 + - -0.9765625 + - -1.2626953 + - -0.9379883 + - -0.57958984 + - 0.4038086 + - 2.8007813 + - 0.87353516 + - -1.625 + - -0.4267578 + - -2.6699219 + - -0.9609375 + - -2.4199219 + - 0.1784668 + - 0.49438477 + - -0.88183594 + - 2.4472656 + - 1.0351563 + - 0.8046875 + - 1.4453125 + - 0.5073242 + - 3.921875 + - -0.3798828 + - 1.046875 + - 0.2524414 + - -3.1367188 + - 2.5292969 + - 0.12658691 + - -1.2939453 + - -0.52246094 + - -2.9902344 + - 0.3515625 + - -1.6132813 + - -0.08203125 + - -0.66015625 + - -0.059143066 + - 0.21252441 + - 1.9482422 + - -4.1484375 + - -2.4863281 + - 0.35864258 + - 0.18481445 + - -1.0009766 + - -2.59375 + - 1.2685547 + - 6.6015625 + - -0.65283203 + - -0.7451172 + - 4.7226563 + - -2.2519531 + - 2.3105469 + - -2.0625 + - -0.16796875 + - 0.17907715 + - -2.3144531 + - 2.8964844 + - -4.5703125 + - 3.5996094 + - -1.0625 + - 5.2304688 + - 0.46972656 + - 0.31811523 + - -3.0722656 + - 1.9150391 + - 0.18713379 + - 1.9267578 + - 2.9316406 + - -1.0644531 + - -0.28515625 + - 0.26489258 + - -0.71972656 + - 2.5703125 + - -1.4707031 + - -1.5351563 + - -2.7070313 + - 1.2441406 + - -0.47607422 + - -0.3474121 + - -0.8457031 + - -3.4179688 + - -1.0927734 + - -2.1328125 + - -5.7382813 + - -1.1689453 + - 0.2512207 + - 1.3505859 + - 3.4101563 + - 3.4472656 + - 0.40112305 + - 0.56689453 + - 0.064697266 + - 0.7753906 + - 0.9980469 + - -1.6445313 + - 2.921875 + - 0.97314453 + - 1.3320313 + - -2.6816406 + - 2.3125 + - -2.0449219 + - 2.2089844 + - 1.6376953 + - 0.4819336 + - -1.6738281 + - -1.7792969 + - 0.17663574 + - 0.31298828 + - 4.0273438 + - -0.7270508 + - 3.1933594 + - 2.3964844 + - 2.65625 + - 1.4794922 + - -0.0524292 + - 1.9814453 + - 0.39282227 + - 0.23828125 + - 2.7226563 + - -0.80126953 + - -2.8105469 + - 0.1665039 + - -2.1660156 + - -2.0292969 + - -2.4453125 + - -3.0078125 + - 1.9033203 + - 2.8339844 + - 2.7753906 + - -2.4765625 + - 0.8408203 + - -3.203125 + - 2.265625 + - -1.7246094 + - 4.75 + - 4.6875 + - 0.59472656 + - -0.53466797 + - 1.7792969 + - 0.2956543 + - 2.3515625 + - -4.1757813 + - 3.9179688 + - -1.46875 + - -4.9453125 + - -1.9033203 + - -1.0390625 + - -0.34399414 + - -2.9414063 + - -15.546875 + - 2.0390625 + - -1.2695313 + - 4.1445313 + - 1.2197266 + - 3.3535156 + - 1.3818359 + - 1.5996094 + - -0.45141602 + - -0.6635742 + - 1.65625 + - -2.0996094 + - 2.4941406 + - 1.4921875 + - 2.0800781 + - -3.2675781 + - 0.96191406 + - -0.0072517395 + - -0.21252441 + - 1.2314453 + - 2.2519531 + - -1.0253906 + - 0.35327148 + - -0.015625 + - 1.5966797 + - -4.4726563 + - 0.20471191 + - -1.7744141 + - -16.671875 + - 0.61865234 + - 0.1204834 + - 2.9863281 + - -4.984375 + - -1.5673828 + - 0.2685547 + - 1.1904297 + - -5.015625 + - -2.6191406 + - -2.6132813 + - 3.6992188 + - -0.53271484 + - -0.45141602 + - -2.3652344 + - 0.70166016 + - -6.203125 + - -1.1904297 + - -0.35180664 + - 0.74072266 + - 1.1875 + - -0.9941406 + - -0.24536133 + - -2.4628906 + - -0.63623047 + - 2.921875 + - -3.5 + - -0.0418396 + - -0.52783203 + - 1.5361328 + - 3.4628906 + - -1.8183594 + - 0.32592773 + - -1.4794922 + - -0.74853516 + - 2.2285156 + - -0.75097656 + - 0.43237305 + - -18.859375 + - -0.33251953 + - -1.9013672 + - 2.4355469 + - -4.1875 + - 2.4121094 + - 0.5698242 + - 1.2294922 + - 1.6337891 + - -0.6972656 + - 1.4189453 + - -1.1513672 + - 2.2636719 + - -1.9921875 + - 0.50927734 + - -0.11621094 + - 0.58740234 + - 0.045196533 + - 1.4101563 + - -4.8007813 + - -1.421875 + - 2.3144531 + - -2.7324219 + - -0.19055176 + - 2.9023438 + - -1.4501953 + - 3.1484375 + - -2.5957031 + - -1.5234375 + - 2.0722656 + - 1.359375 + - 3.15625 + - -2.1503906 + - -1.5009766 + - -1.6464844 + - -0.4116211 + - -0.60595703 + - -1.6875 + - 1.4931641 + - 1.8671875 + - 3.7695313 + - 1.6650391 + - 2.296875 + - 3.6601563 + - -2.0839844 + - 0.4116211 + - -2.2988281 + - -1.4267578 + - -6.0625 + - 1.0380859 + - 2.4628906 + - 0.46191406 + - 0.2548828 + - 0.19689941 + - -2.0976563 + - 0.6020508 + - 0.14929199 + - 8.09375 + - -0.37939453 + - -1.6357422 + - -1.1328125 + - 1.1572266 + - 1.5166016 + - 1.8105469 + - -1.7607422 + - -1.9306641 + - 0.43115234 + - 2.6933594 + - 0.68603516 + - 3.0800781 + - -3.4238281 + - -4.5898438 + - 0.8173828 + - 0.81689453 + - 1.5869141 + - 0.9785156 + - 0.3359375 + - -0.2454834 + - 4.140625 + - 0.45922852 + - 0.1227417 + - -2.3183594 + - 1.6416016 + - -0.86376953 + - 1.2724609 + - -3.3242188 + - -0.48486328 + - 1.7539063 + - -2.6875 + - 1.2851563 + - 3.9628906 + - 2.2578125 + - -0.9003906 + - -0.890625 + - 1.5214844 + - 1.3681641 + - 0.6738281 + - 2.875 + - 4.9257813 + - -0.41552734 + - 1.0478516 + - -0.67822266 + - 0.17907715 + - 0.7519531 + - 2.2324219 + - 1.2285156 + - 1.1103516 + - 0.13671875 + - -4.5898438 + - -0.58251953 + - 3.1289063 + - -2.9101563 + - -0.5 + - -3.109375 + - -0.7890625 + - 2.46875 + - 6.3671875 + - 1.0234375 + - -1.5839844 + - 1.7226563 + - 2.2578125 + - -0.53271484 + - -1.3720703 + - 1.2597656 + - -5.4179688 + - 1.2451172 + - 2.6855469 + - 5.4140625 + - -0.4560547 + - 0.5136719 + - -1.0898438 + - -0.8725586 + - -2.5917969 + - -3.6132813 + - 3.6015625 + - -0.8730469 + - 0.97802734 + - 5.375 + - -2.1015625 + - -1.2539063 + - -2.5039063 + - -0.38916016 + - -0.047546387 + - 0.2939453 + - -1.1806641 + - -0.13952637 + - 3.3027344 + - -0.9951172 + - 0.3881836 + - 1.9726563 + - 0.578125 + - -0.53564453 + - -0.30908203 + - 3.3164063 + - -0.27539063 + - 0.8676758 + - 1.8466797 + - 2.5957031 + - 0.625 + - -0.63427734 + - -3.7246094 + - -3.3027344 + - 0.061645508 + - 3.0683594 + - -0.9375 + - 2.4726563 + - -0.6616211 + - 1.5009766 + - -0.15673828 + - -3.625 + - 0.9790039 + - 0.10180664 + - -0.1430664 + - -1.1445313 + - -2.4355469 + - 6.703125 + - -2.4082031 + - 0.82666016 + - -1.2753906 + - 2.6503906 + - 0.7402344 + - -0.68408203 + - -2.0527344 + - 0.01701355 + - -3.9707031 + - 0.9741211 + - 0.3684082 + - 1.9746094 + - 1.2275391 + - 11.5703125 + - -1.9726563 + - -1.2568359 + - 1.5556641 + - 0.38720703 + - 6.0625 + - 4.03125 + - 0.3269043 + - -1.5058594 + - -0.7089844 + - 0.52783203 + - 8.3125 + - 0.38867188 + - -0.64453125 + - 0.23876953 + - -1.2001953 + - 0.69921875 + - -3.109375 + - -2.7402344 + - -2.3964844 + - -3.6738281 + - 1.8652344 + - -3.6816406 + - -1.0703125 + - 1.0126953 + - 0.83251953 + - -4.9414063 + - -0.2487793 + - 0.36669922 + - 1.9873047 + - -0.4453125 + - -1.421875 + - 1.3291016 + - -1.1318359 + - -1.125 + - 2.25 + - 0.49023438 + - 1.9892578 + - 4.171875 + - -1.8466797 + - 1.5117188 + - 0.41845703 + - -4.1914063 + - -1.8828125 + - -0.3010254 + - -1.7539063 + - 3.1015625 + - -1.0146484 + - 0.4970703 + - 3.1601563 + - 0.080078125 + - 3.5722656 + - -0.74072266 + - 3.1738281 + - -1.8457031 + - 3.15625 + - -0.88671875 + - -3.90625 + - -2.7324219 + - -3.7539063 + - 1.6591797 + - 1.1328125 + - -0.9873047 + - -0.70703125 + - -0.78564453 + - -0.30078125 + - -2.2480469 + - -1.0400391 + - 1.1386719 + - 1.0878906 + - -0.74658203 + - 2.7128906 + - -9.265625 + - 3.6757813 + - 3.4140625 + - -0.7910156 + - 0.8730469 + - -2.4628906 + - -0.8623047 + - 0.82128906 + - -0.09765625 + - 1.9785156 + - 0.9145508 + - -0.8256836 + - 3.8378906 + - 0.45043945 + - -1.5556641 + - -2.703125 + - -0.60546875 + - 1.1132813 + - -0.43652344 + - -2.0175781 + - -0.31958008 + - -0.07867432 + - -1.5126953 + - 3.2539063 + - 0.37036133 + - -6.2109375 + - 1.9072266 + - 4.3515625 + - -0.01171875 + - 0.04852295 + - 0.296875 + - 0.8154297 + - 1.7441406 + - 2.4199219 + - 3.375 + - 0.42578125 + - 0.5605469 + - -0.43188477 + - -0.09667969 + - 1.4482422 + - 2.7324219 + - -0.17468262 + - -3.9589844 + - 10.7734375 + - 2.2988281 + - -3.1738281 + - -71 + - 0.8598633 + - -1.671875 + - -0.8847656 + - 2.8320313 + - 4.7929688 + - 1.6953125 + - 0.8984375 + - -0.09063721 + - -2.2050781 + - -2.765625 + - 1.6904297 + - -0.7163086 + - 2.3457031 + - 0.35083008 + - -5.0625 + - -2.6972656 + - -3.0078125 + - -0.32592773 + - 1.7851563 + - 2.4550781 + - 0.5205078 + - 1.1357422 + - -0.9584961 + - -1.6064453 + - -2.7480469 + - -1.6689453 + - -3.2753906 + - 1.0966797 + - -1.7207031 + - 1.1298828 + - -4.6367188 + - 0.08984375 + - -1.109375 + - -3.8867188 + - 1.0859375 + - 1.0166016 + - -0.043792725 + - 1.3095703 + - -2.6269531 + - -0.30297852 + - -1.3212891 + - 4.2148438 + - 1.796875 + - 1.2851563 + - -2.6074219 + - 2.0527344 + - 1.4707031 + - 2.9453125 + - 0.33374023 + - 1.2978516 + - -0.5600586 + - 1.0791016 + - 9.7578125 + - -4.8945313 + - 1.8242188 + - 0.14147949 + - 0.9223633 + - 0.3815918 + - -2.0175781 + - 0.9194336 + - 2.046875 + - 0.3852539 + - -3.15625 + - -0.7392578 + - 0.11602783 + - -4.640625 + - 0.7426758 + - -0.93603516 + - 0.4621582 + - -2.9628906 + - 2.0625 + - 2.890625 + - 0.58935547 + - 1.4394531 + - 0.2878418 + - -2.2128906 + - -0.7866211 + - 0.54345703 + - 1.0351563 + - -0.11187744 + - 0.4152832 + - -1.7988281 + - -1.1962891 + - 0.7685547 + - -2.7597656 + - 2.4375 + - 3.6503906 + - -0.6088867 + - -1.0214844 + - -1.2431641 + - 2.0878906 + - -0.15905762 + - 2.8632813 + - 2.4941406 + - 7.8046875 + - 1.8417969 + - 3.0839844 + - -1.7001953 + - 0.81103516 + - 1.5585938 + - -0.31445313 + - 0.3947754 + - 1.9375 + - -0.9941406 + - 0.13220215 + - -0.83740234 + - -2.9550781 + - 0.67822266 + - -1.1914063 + - 5.3007813 + - 16.75 + - 1.0976563 + - -0.65185547 + - -3.8984375 + - 1.375 + - -0.75 + - 1.6728516 + - 2.3945313 + - -0.31225586 + - -0.9316406 + - 3.2753906 + - 0.94970703 + - 1.359375 + - -1.875 + - 2.1777344 + - 2.2441406 + - -4.0898438 + - 1.3691406 + - 0.30395508 + - 2.1152344 + - 0.1126709 + - -1.7089844 + - 1.3037109 + - -0.82666016 + - 3.9414063 + - 1.4775391 + - -1.4306641 + - 3.2910156 + - 1.3632813 + - -1.796875 + - -3.2226563 + - 1.6689453 + - -0.072509766 + - -2.9960938 + - 0.76416016 + - 0.1616211 + - -2.6503906 + - 0.085510254 + - 1.9941406 + - 0.55908203 + - 0.34423828 + - 3.0351563 + - 1.4033203 + - -0.54785156 + - 0.37817383 + - 3.5644531 + - -0.7607422 + - 2.7578125 + - 0.76660156 + - 3.2304688 + - 2.390625 + - -2.2675781 + - -1.4804688 + - 2.2480469 + - 6.3867188 + - -2.7519531 + - -0.3305664 + - 3.0195313 + - -4.2539063 + - 0.103515625 + - -0.5175781 + - -2.2578125 + - 0.27441406 + - 0.76660156 + - 2.3105469 + - 1.1015625 + - 0.081726074 + - -0.16015625 + - -0.0078125 + - -1.9619141 + - -0.63720703 + - -2.21875 + - 0.4033203 + - 1.1953125 + - 0.39013672 + - -2.21875 + - -1.65625 + - -2.0566406 + - -1.6669922 + - -10.375 + - 0.6894531 + - 0.6230469 + - -0.0446167 + - -0.6328125 + - -1.4785156 + - -3.3125 + - 1.4169922 + - -0.5205078 + - 1.609375 + - 3.4453125 + - 1.1767578 + - 2.6171875 + - 5.765625 + - -1.453125 + - 1.8847656 + - -3.3789063 + - -3.6875 + - -2.703125 + - 1.6894531 + - 0.23828125 + - -2.6445313 + - 2.9140625 + - -2.3457031 + - -0.65478516 + - 0.69970703 + - 1.2314453 + - 5.4804688 + - -0.18164063 + - 0.48754883 + - 3.3339844 + - 4.1132813 + - -3.0664063 + - -5.390625 + - -0.29589844 + - 0.8984375 + - 1.0292969 + - 2.5839844 + - -0.093444824 + - -1.4394531 + - 2.6972656 + - 2.3828125 + - -0.29467773 + - -1.8320313 + - -1.3818359 + - 2.1191406 + - 0.82128906 + - 3.8769531 + - 1.8378906 + - -0.46313477 + - 3.375 + - 1.1123047 + - 1.0087891 + - 2.1347656 + - -3.4277344 + - -2.8945313 + - -2.65625 + - 2.4277344 + - 2.7734375 + - -1.9775391 + - -3.71875 + - -3.6953125 + - -1.5332031 + - -4.8945313 + - 0.98828125 + - -1.0302734 + - 2.1640625 + - 0.5756836 + - -2.96875 + - -4.15625 + - -0.06274414 + - 0.03515625 + - 3.4160156 + - 0.92285156 + - -0.64697266 + - -1.0117188 + - 20.421875 + - 1.1201172 + - 0.58251953 + - 2.1933594 + - 8.015625 + - -0.35546875 + - -0.2253418 + - 0.3088379 + - 0.7392578 + - -3.4335938 + - -0.8833008 + - 4.125 + - -2.3203125 + - 4.7304688 + - 0.66845703 + - 0.73535156 + - -0.64697266 + - 0.68310547 + - -2.9316406 + - -2.5644531 + - 5.1523438 + - -0.84277344 + - 0.48046875 + - 3.7089844 + - 0.16040039 + - -3.9765625 + - 1.3769531 + - 2.2441406 + - 0.9951172 + - 0.20532227 + - 0.63134766 + - 0.3720703 + - 3.1738281 + - 0.61279297 + - -4.0507813 + - 0.96191406 + - -0.62353516 + - -0.9472656 + - -1.0126953 + - -4.5390625 + - 5.3164063 + - 2.5136719 + - -6.2109375 + - -1.0478516 + - 1.4082031 + - 2.2832031 + - -1.5019531 + - 1.1425781 + - 1.7949219 + - -2.5058594 + - 3.6738281 + - 0.515625 + - 2.3613281 + - 0.29858398 + - 6.1289063 + - 1.1318359 + - 0.29174805 + - 1.046875 + - -2.0136719 + - -3.8242188 + - 4.546875 + - 3.0429688 + - 2.7207031 + - 0.028457642 + - 0.33691406 + - 0.15515137 + - 2.9394531 + - -3.4550781 + - 0.39282227 + - 0.38305664 + - -4.5078125 + - -1.8945313 + - 1.9765625 + - 2.75 + - -4.6992188 + - -2.0136719 + - -1.1396484 + - -3.2890625 + - -1.2226563 + - -2.7890625 + - 1.3349609 + - 1.0654297 + - 0.18237305 + - -3.5683594 + - -0.7392578 + - 2.5644531 + - 1.5683594 + - -1.3681641 + - -2.8691406 + - 1.3779297 + - -1.5214844 + - -0.83691406 + - -4.0742188 + - -2.375 + - -4.5429688 + - 2.6953125 + - 0.6816406 + - -3.203125 + - -2.5175781 + - -2.1894531 + - 1.2763672 + - 0.5151367 + - -0.6088867 + - 4.1289063 + - -3.0625 + - 0.6694336 + - -0.07446289 + - -1.6347656 + - 4.0546875 + - -3.6660156 + - 1.1875 + - -2.1308594 + - 2.0566406 + - -0.37890625 + - -4.78125 + - -1.0332031 + - 3.9765625 + - 0.3557129 + - 1.2753906 + - -2.8867188 + - 2.3613281 + - -6.140625 + - 1.2578125 + - 0.69873047 + - -0.89160156 + - 3.6640625 + - 3.5039063 + - 1.4873047 + - 2.4082031 + - -0.64160156 + - 0.66015625 + - -2.4589844 + - -3.3144531 + - -2.1328125 + - 2.8867188 + - 0.7421875 + - -1.4570313 + - 1.7060547 + - 1.0664063 + - -0.52685547 + - 2.5371094 + - -1.890625 + - -1.6679688 + - 1.2255859 + - -0.51953125 + - -1.5722656 + - 1.5800781 + - 0.42919922 + - 0.4934082 + - 3.7558594 + - 2.6347656 + - 0.0892334 + - -1.2910156 + - -5.2148438 + - 3.09375 + - 1.4492188 + - -2.1113281 + - 2.4453125 + - 1.5205078 + - -3.7050781 + - 2.1386719 + - 1.9863281 + - -1.7480469 + - 2.6875 + - -2.9941406 + - -1.9804688 + - -1.8417969 + - 0.51708984 + - 1.8808594 + - 0.34106445 + - -1.5683594 + - -5.5898438 + - -0.23840332 + - -1.6435547 + - -0.86816406 + - -1.3125 + - -5.1445313 + - 3.1347656 + - 0.6113281 + - -2.2421875 + - 1.0253906 + - -1.7421875 + - 3.6621094 + - -2.1660156 + - 2.3730469 + - -1.4462891 + - 0.33862305 + - -0.83984375 + - -0.49267578 + - 1.8681641 + - -0.2175293 + - -0.25854492 + - -3.2089844 + - 0.10430908 + - -1.5869141 + - 1.0126953 + - 1.2773438 + - 3.75 + - -1.6982422 + - -2.1621094 + - -0.034454346 + - 3.90625 + - 2.0703125 + - -1.0029297 + - -3.7441406 + - -1.1357422 + - -2.8867188 + - 8.7734375 + - -1.75 + - -0.11102295 + - -1.7871094 + - 4.3984375 + - 1.2919922 + - 1.1982422 + - 0.79785156 + - -1.3037109 + - 0.2175293 + - -0.7133789 + - 2.1738281 + - -5.390625 + - -2.6777344 + - 5.7382813 + - -4.1210938 + - 3.6914063 + - -1.0966797 + - 0.49926758 + - 0.63720703 + - 3.8164063 + - 0.39770508 + - -1.3974609 + - -0.011154175 + - 0.9560547 + - 2.171875 + - -4.8320313 + - 1.7783203 + - 0.55126953 + - -3.1738281 + - -1.4326172 + - -0.23596191 + - -1.140625 + - -0.22290039 + - -1.1679688 + - 0.34204102 + - 1.5605469 + - -0.85595703 + - -2.0996094 + - -3.8925781 + - 0.55126953 + - -1.4453125 + - -1.6191406 + - 0.23510742 + - 2.6875 + - 0.5488281 + - 2.5390625 + - -0.30566406 + - -0.31054688 + - -1.75 + - 3.4765625 + - 2.8691406 + - -1.8105469 + - -0.67822266 + - -3.6894531 + - -2.2324219 + - 1.7548828 + - 0.15344238 + - -2.2128906 + - -2.3222656 + - -0.578125 + - 1.2382813 + - -0.4765625 + - 0.88134766 + - 2.4453125 + - -0.92285156 + - -3.0878906 + - -2.65625 + - 0.1439209 + - -2.96875 + - -1.8652344 + - -1.0390625 + - -2.1757813 + - -2.8847656 + - -0.6171875 + - -0.8310547 + - -1.3662109 + - 5.4140625 + - 4.6992188 + - -4.21875 + - -0.35668945 + - -1.2822266 + - 1.4794922 + - -2.3300781 + - -2.2949219 + - 3.5800781 + - -1.3066406 + - -2.5527344 + - 1.4326172 + - 2.2753906 + - -2.203125 + - -3.6445313 + - -0.66503906 + - -1.7519531 + - -1.0224609 + - 0.15905762 + - -0.32299805 + - -0.7036133 + - -1.9609375 + - -1.0732422 + - -1.2900391 + - -0.7626953 + - -2.0644531 + - -2.2519531 + - -0.75390625 + - -0.3725586 + - 3.9863281 + - -2.7480469 + - 3.9023438 + - -1.9814453 + - -0.93847656 + - 6.5117188 + - 0.60546875 + - -0.82666016 + - -1.3544922 + - 0.6323242 + - -2.96875 + - 3.3164063 + - 6.4257813 + - -2.3164063 + - -0.70703125 + - 5.7226563 + - 0.9033203 + - 1.3867188 + - 0.39868164 + - -1.9765625 + - 1.0751953 + - 0.51123047 + - -2.9804688 + - 1.3408203 + - -0.8623047 + - -0.3305664 + - 2.6601563 + - -7.1601563 + - 0.71728516 + - 4.21875 + - -2.4765625 + - -0.79003906 + - -2.1503906 + - 4.2460938 + - -5.1679688 + - -2.3320313 + - -0.23156738 + - 1.5947266 + - 2.4082031 + - -0.6894531 + - 1.6523438 + - -2.3300781 + - -2.6777344 + - 2.3339844 + - -0.69189453 + - 0.39379883 + - -2.3339844 + - 3.765625 + - 0.6713867 + - -1.71875 + - -2.4199219 + - -1.2382813 + - -0.22509766 + - 0.57373047 + - -0.34472656 + - 0.5488281 + - 2.0214844 + - -2.5917969 + - -0.09649658 + - -2.7949219 + - 0.71972656 + - 0.95751953 + - 1.1845703 + - -1.2763672 + - -2.2324219 + - -3.1464844 + - 1.2744141 + - 0.5834961 + - 1.15625 + - -0.36157227 + - -2.1542969 + - -2.1152344 + - 1.2978516 + - -3.0253906 + - -2.5078125 + - -1.9648438 + - 3.6992188 + - -3.4804688 + - -1.9482422 + - -0.6015625 + - 2.3535156 + - -1.609375 + - 0.017578125 + - -1.0625 + - -0.9248047 + - -0.30395508 + - -4.1132813 + - 0.8129883 + - 1.6357422 + - 4.8632813 + - -1.6777344 + - 1.4501953 + - -0.2841797 + - 6.375 + - 1.9326172 + - -0.73095703 + - 1.4150391 + - 1.7363281 + - -0.64941406 + - -1.9150391 + - -1.2910156 + - 1.2724609 + - 1.7753906 + - 3.4375 + - -1.9316406 + - 2.3691406 + - -0.04574585 + - -0.054595947 + - 2.40625 + - -0.54248047 + - -0.9785156 + - 1.7080078 + - -1.4541016 + - -2.8515625 + - 0.9140625 + - 0.92041016 + - -3.3164063 + - -0.5415039 + - 1.859375 + - -1.9082031 + - -1.2275391 + - -0.16516113 + - -0.29711914 + - 4.4257813 + - 6.828125 + - -1.8183594 + - -0.18664551 + - -3.7402344 + - -2.1445313 + - 0.515625 + - 1.0849609 + - -2.375 + - 1.8476563 + - -3.6679688 + - -2.8671875 + - -0.51171875 + - -2.3496094 + - -0.9980469 + - -2.3925781 + - -0.021759033 + - 1.8232422 + - 1.421875 + - -0.38916016 + - 1.7294922 + - 2.8515625 + - -0.71875 + - -2.0195313 + - 1.3427734 + - 2.3515625 + - 0.8647461 + - -1.6259766 + - -0.9580078 + - 0.50634766 + - 0.05996704 + - -0.2841797 + - -3.6992188 + - -1.28125 + - -1.3017578 + - 1.7587891 + - -0.9296875 + - 0.9707031 + - 0.14562988 + - 2.8203125 + - -0.19946289 + - -1.4619141 + - 8.03125 + - -2.1171875 + - 3.65625 + - -4.03125 + - 3.6367188 + - 4.2148438 + - -4.0703125 + - 1.1347656 + - 1.7832031 + - -0.21923828 + - -1.1455078 + - -0.35864258 + - -0.16906738 + - 1.8251953 + - -1.71875 + - -1.2568359 + - -1.7851563 + - 3.9589844 + - -0.72753906 + - 1.2275391 + - 0.44628906 + - -1.2568359 + - 0.9194336 + - -0.515625 + - -0.5131836 + - -1.1142578 + - 3.3339844 + - 0.8959961 + - -2.1777344 + - 1.6064453 + - -0.6953125 + - -2.7265625 + - 0.44482422 + - -2.1367188 + - -0.85253906 + - 2.6328125 + - 2.1464844 + - 2.1816406 + - -8.9609375 + - 4.40625 + - -0.578125 + - 0.32617188 + - 0.48632813 + - -3.5039063 + - 1.9033203 + - 0.44970703 + - -1.4980469 + - 1.4433594 + - -4.6289063 + - 0.4033203 + - -0.2097168 + - -0.4741211 + - 0.07739258 + - 0.23547363 + - 1.1494141 + - -0.3383789 + - -0.7475586 + - 0.73291016 + - 2.0761719 + - -2.421875 + - 1.4589844 + - -2.5488281 + - 1.5820313 + - 2.3574219 + - 0.77978516 + - 1.0751953 + - 1.9609375 + - -0.33642578 + - 0.08258057 + - -1.2607422 + - 4.4570313 + - 1.421875 + - 2.5390625 + - 1.0185547 + - -4.046875 + - 0.6635742 + - -0.4050293 + - -0.3876953 + - -0.26391602 + - 1.1337891 + - -0.93896484 + - 1.3505859 + - 6.3554688 + - 1.0771484 + - -8.7421875 + - 1.2646484 + - 1.3359375 + - -0.11853027 + - -0.98535156 + - 2.9433594 + - 6.1757813 + - -1.8076172 + - -0.09399414 + - -0.6176758 + - -1.4550781 + - 1.4707031 + - -0.77441406 + - 0.2220459 + - -0.23046875 + - -2.4199219 + - -0.43237305 + - -0.49902344 + - 4.078125 + - -1.9355469 + - -1.4414063 + - 0.12658691 + - 1.7949219 + - 3.6269531 + - 2.203125 + - 1.0576172 + - 0.4970703 + - 2.703125 + - 0.66748047 + - -24.875 + - 1.6738281 + - -4.6367188 + - -1.8183594 + - -15.671875 + - -1.2578125 + - -0.6875 + - 3.0644531 + - -3.7109375 + - 2.6074219 + - -7.5507813 + - -7.9296875 + - 0.8076172 + - -0.953125 + - 2.0195313 + - -1.1660156 + - 0.38110352 + - 4.4414063 + - -0.9458008 + - 1.5400391 + - 1.0097656 + - 2.0351563 + - 1.9921875 + - -2.9023438 + - -2.4785156 + - 3.6640625 + - -2.578125 + - 1.8388672 + - 1.6982422 + - -5.0117188 + - 1.9042969 + - -0.31152344 + - -0.0836792 + - 2.3574219 + - 0.6328125 + - -1.6601563 + - 1.71875 + - -1.8515625 + - 0.73095703 + - -0.04421997 + - 0.4597168 + - 0.034576416 + - 3.46875 + - 1.4013672 + - 0.056915283 + - 3.71875 + - 2.7539063 + - 1.515625 + - -1.0654297 + - -1.0966797 + - 1.7587891 + - -1.0693359 + - -2.015625 + - 2.0742188 + - 1.3916016 + - 3.1171875 + - -1.6464844 + - -4.7148438 + - 0.67529297 + - -2.6191406 + - 0.16125488 + - 2.4453125 + - -3.1289063 + - -0.6386719 + - -0.37548828 + - -0.41308594 + - -0.12719727 + - 4.5664063 + - 2.8710938 + - 1.4658203 + - -4.6757813 + - -0.140625 + - 3.0175781 + - 0.5756836 + - -0.4440918 + - 1.3955078 + - 0.27856445 + - -0.7294922 + - -1.0048828 + - 2.1171875 + - -3.4804688 + - -0.22387695 + - 1.3056641 + - -0.33764648 + - 0.57910156 + - 4.0429688 + - -0.57177734 + - 0.72314453 + - -1.4560547 + - -3.84375 + - 0.8569336 + - -1.7167969 + - 0.9316406 + - -1.5507813 + - -2.4707031 + - 0.9458008 + - -3.0820313 + - -8.6328125 + - 0.87353516 + - -3.7128906 + - 0.2854004 + - 2.3984375 + - 1.1992188 + - -3.4628906 + - 0.6176758 + - -3.5625 + - -1.8496094 + - -5.140625 + - -0.8227539 + - 0.005859375 + - -0.0052986145 + - 3.953125 + - -0.890625 + - 1.4560547 + - -3.1464844 + - -2.7402344 + - -1.1064453 + - 0.2019043 + - -0.8989258 + - -3.078125 + - 0.8232422 + - -2.5 + - -0.43896484 + - -0.1282959 + - 1.2353516 + - -0.3251953 + - 0.5102539 + - -3.4140625 + - -1.6064453 + - 0.57910156 + - -5.2148438 + - -2.2265625 + - 2.5878906 + - 5.3945313 + - 5.4765625 + - -0.2890625 + - 0.234375 + - 4.4335938 + - 3.2617188 + - -1.6669922 + - -0.90234375 + - -2.3027344 + - 0.3310547 + - 2.8554688 + - -1.0009766 + - -0.7446289 + - -0.61035156 + - -0.75390625 + - -2.0234375 + - -2.2988281 + - 2.4609375 + - -1.8125 + - 1.2353516 + - -0.21203613 + - -2.3457031 + - -0.0234375 + - 0.78027344 + - 1.3662109 + - -0.5136719 + - -0.7988281 + - 0.52685547 + - 2.2109375 + - -0.9453125 + - -1.5009766 + - -4.6523438 + - -0.0446167 + - 0.20629883 + - 3.40625 + - -0.46484375 + - 0.18688965 + - 2.3476563 + - 23.5 + - -0.89501953 + - -3.078125 + - 4.3554688 + - 0.5859375 + - 4.0507813 + - -2.0214844 + - -13.3359375 + - 1.4970703 + - -1.0517578 + - 4.7578125 + - 0.66796875 + - 0.11383057 + - 1.2236328 + - 0.84375 + - 2.2851563 + - 1.4814453 + - -4.9257813 + - 0.3095703 + - -4.7148438 + - 1.0253906 + - -3.7539063 + - 0.3647461 + - -0.20080566 + - -1.4785156 + - 3.5820313 + - -0.93603516 + - -2.2539063 + - 0.28979492 + - 3.0644531 + - -0.5317383 + - -0.69189453 + - 1.3955078 + - -1.6269531 + - -1.3457031 + - -2.0546875 + - -0.33032227 + - -0.26245117 + - -0.96191406 + - 0.11212158 + - -2.59375 + - 2.2695313 + - -1.0654297 + - -1.7246094 + - 1.9658203 + - -0.79833984 + - 0.2915039 + - 1.7851563 + - -3.4238281 + - 3.5742188 + - 1.0439453 + - -1.3769531 + - 5.90625 + - -2.6601563 + - -2.3691406 + - 0.82666016 + - 0.78759766 + - 2.9375 + - -2.3515625 + - 1.5 + - -2.4375 + - 3.8339844 + - 0.71240234 + - -1.1992188 + - -0.064697266 + - 6.109375 + - 3.3691406 + - -0.4128418 + - -1.7158203 + - -0.36547852 + - -1.1796875 + - -0.25268555 + - -0.30004883 + - -0.19189453 + - -2.7128906 + - -5.9140625 + - 6.5351563 + - 0.93652344 + - -2.375 + - -1.8955078 + - 1.6201172 + - 0.37719727 + - -0.3203125 + - -0.21618652 + - 0.5834961 + - 1.2314453 + - 0.7866211 + - 1.6142578 + - -3.2421875 + - 0.8457031 + - 1.3232422 + - -1.9501953 + - 0.4663086 + - 0.171875 + - 5.1757813 + - 2.1445313 + - -1.6201172 + - 4.75 + - -1.0703125 + - 2.4765625 + - 4.703125 + - -0.546875 + - -1.9902344 + - 5.75 + - 0.78759766 + - 0.38598633 + - -1.2539063 + - -0.17272949 + - 2.4550781 + - 1.6503906 + - -1.2587891 + - -1.6191406 + - -1.8496094 + - -0.71777344 + - -0.42578125 + - 0.38891602 + - 0.73339844 + - 0.124572754 + - 0.29614258 + - -2.078125 + - 2.2597656 + - 23.0625 + - -3.9101563 + - 2.9414063 + - -0.17468262 + - 0.92871094 + - 2.359375 + - 0.18408203 + - -2.0410156 + - 0.2841797 + - -0.84375 + - -1.4482422 + - 1.9472656 + - -2.3066406 + - -1.7001953 + - -0.2607422 + - 0.31054688 + - -5.1601563 + - 1.984375 + - 2.1582031 + - 14.546875 + - -2.6972656 + - 1.4003906 + - -0.11602783 + - -1.4023438 + - 0.2097168 + - -0.65283203 + - 0.63623047 + - 0.6635742 + - -0.21679688 + - -1.2744141 + - -26 + - -0.5024414 + - 0.55078125 + - 1.0732422 + - -2.9140625 + - -0.4934082 + - -0.6484375 + - 0.9169922 + - -2.46875 + - 0.9277344 + - 0.59472656 + - -3.8222656 + - -1.3505859 + - -0.8232422 + - -0.15454102 + - -1.0322266 + - -1.2919922 + - -2.9804688 + - 0.62353516 + - -0.2298584 + - -2.3261719 + - 0.8232422 + - 2.6308594 + - 0.26000977 + - 3.421875 + - -1.4072266 + - 3.1738281 + - -0.5625 + - 7.6953125 + - -1.9335938 + - 2.5839844 + - 4.0078125 + - -6.6484375 + - 2.421875 + - -2.1796875 + - 4.359375 + - -0.8208008 + - -0.51123047 + - -1.7314453 + - 0.5083008 + - 0.62841797 + - 0.9926758 + - -5.5351563 + - 2.9492188 + - -0.17919922 + - -2.4003906 + - 0.0287323 + - 2.7089844 + - 2.53125 + - 2.6328125 + - 2.5039063 + - -1.953125 + - -1.2744141 + - 1.8378906 + - 4.15625 + - 1.4326172 + - -1.4902344 + - -3.828125 + - -0.64501953 + - -4.1679688 + - -1.1298828 + - 2.1113281 + - 2.2246094 + - 3.640625 + - -1.1396484 + - 4.890625 + - 4.9960938 + - 2.046875 + - -0.7363281 + - -1.0830078 + - 0.77001953 + - -1.2724609 + - 1.3398438 + - -1.2626953 + - 1.3603516 + - -1.4814453 + - -2.6640625 + - 0.6230469 + - -3.5585938 + - -0.33764648 + - -3.3710938 + - -3.9375 + - -0.76416016 + - 0.515625 + - 3.0039063 + - -1.4169922 + - -0.14941406 + - 2.9160156 + - 0.7988281 + - 0.52783203 + - -2.7890625 + - 3.3554688 + - 2.0605469 + - -1.4150391 + - -3.3203125 + - 3.6054688 + - -0.5683594 + - 3.9394531 + - -2.7871094 + - -0.92089844 + - -1.0517578 + - 0.8227539 + - 3.4941406 + - 2.4726563 + - -0.17443848 + - 0.9404297 + - -3.7363281 + - -6.046875 + - -0.46191406 + - -1.4882813 + - 2.6621094 + - 2.6914063 + - 0.81933594 + - 1.0390625 + - 2.1582031 + - 0.5991211 + - -0.0715332 + - 2.3574219 + - -1.8457031 + - 2.953125 + - 1 + - -0.45532227 + - -0.33251953 + - -0.8066406 + - -0.6645508 + - 12.1953125 + - 0.5239258 + - 2.53125 + - 5.7851563 + - 7.796875 + - -1.2158203 + - 0.42822266 + - -1.0888672 + - 1.4638672 + - -2.6542969 + - -1.7939453 + - 1.3466797 + - 0.6689453 + - 0.30126953 + - -2.5625 + - -0.71875 + - 1.0185547 + - 1.890625 + - 1.9335938 + - 0.34350586 + - -0.17382813 + - -0.18469238 + - -0.78125 + - -1.9404297 + - -2.1035156 + - -1.4277344 + - 1.2451172 + - -0.46313477 + - -2.4238281 + - -3.4238281 + - 2.7890625 + - 2.1503906 + - 1.9921875 + - 1.015625 + - 0.2241211 + - -0.98291016 + - 1.9423828 + - -1.75 + - 0.74072266 + - 1.8212891 + - -1.4931641 + - 1.2539063 + - -1.7744141 + - -0.55615234 + - 3.9394531 + - -0.7192383 + - 1.7138672 + - -2.6484375 + - -1.0947266 + - -2.9023438 + - 3.21875 + - 1.0126953 + - -2.4042969 + - -1.1142578 + - 4.1015625 + - 1.8300781 + - 1.0361328 + - 1.5976563 + - 4.1875 + - 0.8457031 + - -1.8183594 + - -1.6669922 + - 1.4794922 + - 1.5244141 + - 1.203125 + - 4.1875 + - 2.5175781 + - 2.2617188 + - 1.9628906 + - -1.4160156 + - -0.6542969 + - -1.8525391 + - 1.2382813 + - 0.2019043 + - -0.050201416 + - -1.1044922 + - 0.3461914 + - 1.390625 + - 0.10290527 + - 3.0859375 + - -0.97753906 + - 0.08258057 + - 0.86376953 + - -0.26757813 + - 23.46875 + - -3.4707031 + - -1.1474609 + - -4.2460938 + - -0.22851563 + - 0.73583984 + - 2.34375 + - -0.092041016 + - -4.7851563 + - 1.6845703 + - 2.5976563 + - -1.359375 + - 3.3945313 + - 2.5351563 + - 1.9492188 + - 0.52001953 + - 1.6367188 + - -3.0742188 + - 1.7148438 + - 0.96191406 + - -2.2128906 + - 1.7011719 + - -3.6757813 + - 1.7763672 + - 0.0758667 + - 0.82177734 + - -2.2089844 + - 0.11645508 + - 2.3359375 + - -3.7753906 + - -0.76953125 + - 1.3154297 + - 2.078125 + - 2.1328125 + - 2.4160156 + - -1.5634766 + - 6.2851563 + - -0.03125 + - 0.32592773 + - -0.65625 + - -4.3359375 + - -3.5664063 + - 0.5019531 + - 4.9257813 + - 0.38012695 + - 0.20166016 + - -1.5683594 + - 1.7353516 + - 2.8164063 + - 3.9121094 + - -0.57470703 + - -1.8261719 + - 0.39379883 + - 8.6640625 + - -3.2226563 + - -1.2158203 + - 0.6328125 + - -1.2607422 + - 1.1367188 + - 0.51123047 + - 1.3037109 + - -0.11773682 + - -0.11462402 + - -4.2421875 + - -3.546875 + - -2.6640625 + - -3.1269531 + - -2.9941406 + - 0.49536133 + - -2.1972656 + - -1.2841797 + - 3.2851563 + - -0.7211914 + - -1.8222656 + - 0.68310547 + - -3.3378906 + - -4.3945313 + - -0.29614258 + - 2.0722656 + - -2.6777344 + - -0.19885254 + - 1.1748047 + - 2.1855469 + - 1.2265625 + - -1.1201172 + - -3.0878906 + - -1.4257813 + - -0.8696289 + - -2.9550781 + - 0.012275696 + - -0.5029297 + - -0.26831055 + - 4.1679688 + - -1.1015625 + - 2.6386719 + - -3.3066406 + - -2.3125 + - -1.2939453 + - -0.6850586 + - 1.2021484 + - -1.3095703 + - 1.4707031 + - 1.0224609 + - 0.8652344 + - 0.40429688 + - -1.2783203 + - -1.6054688 + - 1.5166016 + - -1.4238281 + - 1.6367188 + - 0.48046875 + - -0.32885742 + - 2.7402344 + - 0.9326172 + - 0.21398926 + - 1.2578125 + - -3.8359375 + - -2.6425781 + - -3.2421875 + - -1.3925781 + - 0.29956055 + - -0.22302246 + - 0.52734375 + - 1.0439453 + - 1.1669922 + - 1.2773438 + - -1.2041016 + - -2.421875 + - 1.2001953 + - 2.1035156 + - -2.71875 + - 2.1171875 + - 0.453125 + - 0.3317871 + - 1.2675781 + - 0.6713867 + - -5.578125 + - -3.3398438 + - -1.0908203 + - 1.5175781 + - 0.0262146 + - -2.25 + - -0.95703125 + - 4.9179688 + - -0.171875 + - 1.3681641 + - 6.5859375 + - 2.5625 + - -2.6875 + - 0.84033203 + - -0.055236816 + - 6.015625 + - -4.9648438 + - -2.1777344 + - 0.98876953 + - -2.1269531 + - -0.57470703 + - -2.3886719 + - 1.8857422 + - -3.3496094 + - 3.1972656 + - -1.1943359 + - 0.71972656 + - 0.15234375 + - -0.51708984 + - -1.1992188 + - 0.9658203 + - -0.23144531 + - -1.9414063 + - 5.9726563 + - 0.78759766 + - 2.4453125 + - -0.31518555 + - -4.4648438 + - 2.4316406 + - 0.24658203 + - 1.3349609 + - -0.71484375 + - -1.3564453 + - -0.7675781 + - 1.1240234 + - -2.0175781 + - -3.0800781 + - -0.032348633 + - 0.69873047 + - 1.7294922 + - 2.8203125 + - -2.3183594 + - 1.2373047 + - 0.30688477 + - -2.703125 + - 0.3466797 + - 3.5585938 + - 1.3242188 + - 5.7539063 + - 0.24804688 + - 0.0625 + - 16.203125 + - -0.41845703 + - 2.3027344 + - -3.5488281 + - -0.90771484 + - -0.89697266 + - 0.5410156 + - 1.4794922 + - 4.1484375 + - -0.92089844 + - -3.5253906 + - -1.8222656 + - 0.8720703 + - 1.9169922 + - 1.0517578 + - -1.1318359 + - 4.453125 + - -0.26391602 + - -0.66796875 + - 0.24523926 + - -1.6455078 + - 0.3034668 + - -1.5175781 + - -2.2949219 + - -1.6777344 + - 2.3652344 + - -0.2253418 + - -3.9960938 + - -3.1015625 + - 0.74316406 + - -0.99609375 + - -0.87890625 + - -1.8613281 + - -1.890625 + - 0.1751709 + - -0.083984375 + - 3.0117188 + - 0.75634766 + - 2.7890625 + - 0.2861328 + - 1.9648438 + - -4.5898438 + - 0.88720703 + - 0.65283203 + - -0.06890869 + - 4.2070313 + - -1.3691406 + - -1.3691406 + - -2.0625 + - -5.4882813 + - 2.1308594 + - 1.9013672 + - -0.30786133 + - 2.8808594 + - 4.703125 + - -1.6386719 + - -0.17785645 + - -3.8339844 + - -0.13439941 + - -1.8310547 + - -0.77441406 + - -1.1064453 + - 1.7431641 + - -2.7011719 + - -0.38720703 + - 1.0185547 + - 1.9091797 + - -4.953125 + - 3.3925781 + - 0.92626953 + - -0.5727539 + - -1.6923828 + - 4.6914063 + - 0.94384766 + - 1.1826172 + - 1.0126953 + - -1.9609375 + - -2.4472656 + - 1.6650391 + - 1.3632813 + - 2.3925781 + - 0.17211914 + - 4.7539063 + - -1.6230469 + - -1.1386719 + - 0.9663086 + - -1.5556641 + - -0.7675781 + - -1.5439453 + - 0.62353516 + - -4.34375 + - -0.8286133 + - 1.6669922 + - 1.9033203 + - -2.3789063 + - 2.5566406 + - -3.9316406 + - 2.6816406 + - 0.78759766 + - -0.73876953 + - 4.6054688 + - -0.89160156 + - -2.6074219 + - 1.9169922 + - 2.4316406 + - 3.3085938 + - 1.7695313 + - -1.0097656 + - -0.22338867 + - 0.45361328 + - 33.40625 + - 13.4765625 + - -9.1796875 + - 2.265625 + - -1.0507813 + - 1.4277344 + - -2.734375 + - -4.1757813 + - -0.36376953 + - -0.20703125 + - 1.9589844 + - 0.51464844 + - -0.34057617 + - 1.5166016 + - -2.7890625 + - 1.9707031 + - -1.0009766 + - 0.91259766 + - -2.6933594 + - 0.7138672 + - 1.8779297 + - 3.4140625 + - -1.3193359 + - -1.1445313 + - -0.2253418 + - -2.1523438 + - 0.08703613 + - -0.4038086 + - -4.6054688 + - 0.75097656 + - -0.119384766 + - -0.16101074 + - 1.4169922 + - 2.4785156 + - 1.6337891 + - -4.3789063 + - -1.8554688 + - 2.0644531 + - -2.1699219 + - 1.2451172 + - 2.2324219 + - 1.5371094 + - -0.27978516 + - 4.2304688 + - -1.2050781 + - 0.29345703 + - -3.4941406 + - 2.1425781 + - 1.3066406 + - 0.5107422 + - 2.2910156 + - 8.7265625 + - -0.5673828 + - -1.4306641 + - 1.7226563 + - -0.9453125 + - -0.84521484 + - 0.05606079 + - 1.4580078 + - 0.2175293 + - 2.9785156 + - 2.3984375 + - 1.2050781 + - -3.9238281 + - -1.7402344 + - -1.1376953 + - 1.9384766 + - -0.83203125 + - -2.6855469 + - 0.2565918 + - -2.9277344 + - -0.20385742 + - -1.5039063 + - -2.265625 + - 0.92822266 + - -2.6640625 + - -0.18579102 + - 1.3486328 + - 5.4453125 + - 0.41503906 + - -1.7626953 + - -1.4189453 + - 1.6337891 + - 1.8632813 + - 1.6875 + - 2.3808594 + - 1.1025391 + - 0.22314453 + - 1.9453125 + - -1.5341797 + - 1.3691406 + - 0.5053711 + - -0.8886719 + - -0.99902344 + - 3.6582031 + - 1.2080078 + - -1.3974609 + - 4.03125 + - -1.9023438 + - 0.5214844 + - -3.4609375 + - -1.0595703 + - 0.75097656 + - 1.15625 + - 0.11743164 + - 0.4892578 + - 0.32250977 + - -2.3222656 + - -0.081970215 + - 1.4853516 + - -3.2910156 + - 3.6777344 + - -0.69384766 + - 4.28125 + - 1.8076172 + - 2.8300781 + - -2.9140625 + - -1.3212891 + - 3.5175781 + - 0.42773438 + - -2.3886719 + - -1.8847656 + - 0.8803711 + - 1.109375 + - 3.6132813 + - 1.3603516 + - -3.2714844 + - 2.0566406 + - 2.4140625 + - 0.1307373 + - -0.87890625 + - -1.2529297 + - -1.1123047 + - 1.2490234 + - 0.28198242 + - 0.3125 + - -0.18469238 + - -3.4375 + - 1.5390625 + - -1.3007813 + - -0.4399414 + - 1.9648438 + - 1.7783203 + - -2.1347656 + - -0.296875 + - -0.17236328 + - 2.0097656 + - -1.2041016 + - -0.14453125 + - -4.1132813 + - 1.1660156 + - 1.3193359 + - -1.4667969 + - -1.4375 + - 0.4111328 + - -0.91552734 + - -1.1474609 + - 0.41748047 + - 0.4025879 + - 2.1621094 + - 0.09051514 + - -2.5625 + - 2.7890625 + - 1.7763672 + - -0.9404297 + - 0.4248047 + - 0.32739258 + - 2.3457031 + - -0.119506836 + - -2.5625 + - -0.5102539 + - -0.26660156 + - -2.6132813 + - -1.3476563 + - 0.5800781 + - 0.7158203 + - 1.4140625 + - 1.9658203 + - -1.1708984 + - -1.7529297 + - -0.59765625 + - 0.38500977 + - -0.5258789 + - 0.9008789 + - 1.5195313 + - -1.5722656 + - -0.06945801 + - 1.7695313 + - 1.7246094 + - -1.2783203 + - 2.3789063 + - 2.3203125 + - 1.78125 + - 0.7128906 + - -2.4902344 + - -1.8623047 + - 2.984375 + - 1.1738281 + - 0.92285156 + - -3.3925781 + - -2.7636719 + - -1.4267578 + - -2.8496094 + - -0.41601563 + - 0.39208984 + - -12.4453125 + - -0.31689453 + - -0.46142578 + - 0.21984863 + - -0.89160156 + - 0.5493164 + - -1.2490234 + - 1.6689453 + - 0.4597168 + - -1.7109375 + - 2.34375 + - -5.3710938 + - 0.48706055 + - 0.3251953 + - -1.1757813 + - 1.375 + - 1.5214844 + - -2.0566406 + - -0.022598267 + - 3.4277344 + - 0.61816406 + - 1.828125 + - -0.5341797 + - 9.390625 + - 1.4433594 + - -2.1386719 + - 0.72509766 + - -0.5239258 + - 0.89208984 + - -0.89160156 + - -0.083618164 + - -2.6601563 + - 6.7539063 + - 0.6816406 + - -1.7734375 + - 0.74072266 + - 1.0400391 + - -6.0976563 + - 0.71777344 + - 0.2915039 + - 1.3701172 + - 0.43798828 + - 6.2929688 + - -0.5932617 + - -2.7695313 + - 1.8964844 + - 2.2207031 + - 2.4609375 + - 2.1035156 + - 1.1425781 + - -2.8378906 + - 1.5439453 + - 1.7998047 + - -3.1582031 + - -1.0820313 + - -0.32714844 + - -0.43115234 + - -3.2050781 + - -1.8183594 + - -3.2753906 + - -0.1986084 + - -3.8652344 + - 2.4101563 + - -1.6953125 + - -1.7978516 + - 3.5683594 + - -2.4199219 + - 0.19494629 + - -1.6347656 + - -1.6376953 + - 2.0566406 + - -0.3552246 + - -1.3388672 + - 1.7587891 + - 1.6367188 + - -0.61572266 + - 0.6455078 + - 0.6113281 + - 2.1738281 + - 0.86376953 + - 3.7558594 + - 0.019104004 + - -0.2692871 + - -1.7851563 + - 2.6640625 + - 0.18725586 + - -2.0234375 + - -1.2880859 + - -1.5732422 + - -0.09063721 + - 5.2382813 + - 4.703125 + - -1.1416016 + - 1.9345703 + - 2.3378906 + - -0.7207031 + - -1.2539063 + - -0.4033203 + - 2.0351563 + - -1.9433594 + - 2.2792969 + - -3.4765625 + - 2.8359375 + - 0.7871094 + - -3.9589844 + - -0.11071777 + - -2.6660156 + - 3.2460938 + - 0.30151367 + - -5.5117188 + - -0.2685547 + - -1.7626953 + - 1.6542969 + - 0.42626953 + - 0.66503906 + - 3.4492188 + - 0.47387695 + - 1.28125 + - -0.3215332 + - -3.09375 + - -1.6669922 + - -0.59765625 + - -3.7890625 + - 8.9296875 + - 1.1962891 + - 1.4658203 + - -0.5292969 + - 0.5283203 + - -1.4980469 + - 0.4362793 + - 1.1601563 + - -1.2988281 + - -5.4726563 + - -3.3964844 + - 4.6328125 + - -4.1757813 + - 1.8066406 + - -1.8466797 + - -2.8164063 + - 1.296875 + - 0.8886719 + - -0.58203125 + - 0.27270508 + - 1.25 + - 1.1113281 + - -3.1777344 + - 0.07476807 + - -4.0429688 + - 1.7041016 + - -1.5908203 + - 1.2070313 + - -3.5976563 + - 0.81103516 + - -1.4306641 + - 0.9394531 + - -2.4980469 + - -1.0517578 + - 0.07281494 + - 2.2519531 + - 3.2441406 + - 0.49902344 + - 1.6640625 + - -1.6152344 + - 2.421875 + - 1.2851563 + - -0.71875 + - -1.1757813 + - -2.6894531 + - -0.24438477 + - 0.5205078 + - 2.5664063 + - -2.8769531 + - -0.093566895 + - -0.00390625 + - 4.234375 + - -0.012275696 + - -2.2246094 + - 0.36572266 + - 1.9814453 + - -2.2167969 + - -2.3164063 + - -0.9794922 + - 1.2119141 + - 1.9492188 + - -0.5366211 + - 0.7207031 + - -1.4638672 + - -0.29589844 + - 0.8256836 + - 3.0742188 + - -2.9179688 + - -2.7089844 + - 1.5957031 + - 1.8466797 + - 5.8125 + - 2.6308594 + - -1.5351563 + - 1.4619141 + - -0.5991211 + - 1.0800781 + - -1.6582031 + - -2.0136719 + - -0.91308594 + - 1.2207031 + - -1.9169922 + - 1.1708984 + - -1.0449219 + - 3.5253906 + - 4.34375 + - -0.51708984 + - 0.18188477 + - -0.23486328 + - -1.4326172 + - -3.3300781 + - -2.8691406 + - -0.890625 + - 1.3818359 + - -1.0712891 + - 0.85791016 + - 2.171875 + - 1.5488281 + - 1.4101563 + - -0.41503906 + - 0.8691406 + - -4.9179688 + - -0.90283203 + - -8.3046875 + - -1.7314453 + - -2.0175781 + - -2.2753906 + - -2.9023438 + - -0.96533203 + - 2.8378906 + - -6.7421875 + - -4.4335938 + - 24.671875 + - -1.7314453 + - -1.6464844 + - -0.65722656 + - -0.1796875 + - 0.51416016 + - 2.3203125 + - 3.0976563 + - -2.1542969 + - 1.1396484 + - 1.6914063 + - -0.0390625 + - 0.88378906 + - -1.4277344 + - 0.4267578 + - 0.08758545 + - -3.4179688 + - 0.72802734 + - 4.8867188 + - -0.75634766 + - -0.5488281 + - -1.4765625 + - -2.4765625 + - 0.65625 + - -0.3408203 + - 3.7578125 + - 0.36083984 + - -2.0878906 + - 2.2285156 + - -0.27612305 + - 1.5869141 + - -2.5488281 + - 0.7753906 + - 0.4025879 + - 1.2587891 + - -0.55908203 + - 1.6416016 + - 2.9863281 + - 4.1796875 + - 0.13830566 + - -0.85595703 + - -0.55566406 + - 2.0410156 + - -3.8964844 + - 0.77978516 + - -0.2824707 + - 3.2734375 + - 1.1845703 + - -2.0351563 + - 0.7270508 + - 2.3515625 + - 0.83691406 + - -3.1015625 + - -1.3193359 + - -2.0195313 + - -1.6425781 + - -2.9023438 + - -0.42871094 + - 2.3789063 + - -3.4550781 + - -2.8339844 + - 1.1816406 + - -0.5722656 + - 2.453125 + - -2.5 + - -0.10070801 + - -1.1962891 + - -0.010597229 + - -2.734375 + - 1.5898438 + - -4.609375 + - -4.359375 + - -0.1171875 + - -1.5556641 + - 1.4550781 + - 8.6328125 + - 0.89501953 + - 3.6816406 + - -4.7578125 + - 1.1894531 + - -0.67626953 + - 1.3095703 + - 0.9038086 + - 0.67626953 + - -0.16235352 + - -4.78125 + - 0.53125 + - 0.7607422 + - 2.5625 + - -0.83447266 + - -2.8378906 + - 0.44628906 + - -0.08538818 + - -0.5522461 + - -2.4765625 + - 1.4394531 + - 2.1074219 + - -2.5625 + - 5.3554688 + - 0.30908203 + - 0.36865234 + - 0.9243164 + - 0.52734375 + - 4.0117188 + - 0.27416992 + - 2.0800781 + - -1.8203125 + - -0.51904297 + - 0.5410156 + - 2.3886719 + - 7.1640625 + - 1.7148438 + - 1.0996094 + - -1.0556641 + - 3.5546875 + - 0.050476074 + - 1.7128906 + - 1.7871094 + - 2.2246094 + - -0.30566406 + - 3.09375 + - -0.69628906 + - 3.6015625 + - -4.4882813 + - -1.4697266 + - -2.0253906 + - 0.94189453 + - 0.001115799 + - 1.3408203 + - -0.42285156 + - 4.0742188 + - -1.9775391 + - -2.1054688 + - -0.84228516 + - 0.016174316 + - 2.9785156 + - 2.40625 + - 0.7363281 + - 1.1787109 + - 3.2851563 + - 4.1992188 + - 0.75634766 + - -0.5756836 + - 1.3769531 + - 2.0800781 + - -4.9882813 + - -4.578125 + - -0.9609375 + - 3.3125 + - -1.5917969 + - -0.75097656 + - -1.9638672 + - 2.8613281 + - 3.2753906 + - 3.265625 + - -0.8544922 + - -0.28344727 + - 1.3613281 + - -1.3515625 + - -0.44604492 + - 2.5839844 + - 2.6875 + - -0.9711914 + - -0.3581543 + - 0.4165039 + - 1.7861328 + - 0.39453125 + - -0.12207031 + - -0.35864258 + - 1.2529297 + - 2.140625 + - 0.9091797 + - -2.1191406 + - -0.3251953 + - -3.6425781 + - -4.8789063 + - -0.092163086 + - 2.5820313 + - -0.86035156 + - -0.36767578 + - 3.125 + - -2.1777344 + - 2.0097656 + - 0.5566406 + - -0.9897461 + - -2.9140625 + - 1.4013672 + - -0.5180664 + - 3.0625 + - 3.3476563 + - 1.2998047 + - -6.8359375 + - -0.47680664 + - -0.41845703 + - -5.390625 + - 2.1210938 + - -2.6621094 + - 2.4355469 + - 1.3867188 + - -6.4453125 + - 1.3076172 + - -0.65478516 + - -2.7988281 + - -2.4296875 + - 1.1220703 + - -0.37597656 + - 2.0761719 + - -0.4309082 + - -0.8129883 + - -33.875 + - -2.53125 + - -2.4140625 + - -0.3881836 + - -1.4277344 + - 2.09375 + - 2.4121094 + - -4.7539063 + - -4.6601563 + - -0.9038086 + - 1.1162109 + - -1.4375 + - -1.0976563 + - 6.7734375 + - 0.4885254 + - 4.7304688 + - -1.6601563 + - 4.3242188 + - -0.25097656 + - -1.4335938 + - 0.11437988 + - -0.45507813 + - 1.0791016 + - 1.8134766 + - -0.4350586 + - -4.0117188 + - -1.2519531 + - 0.053833008 + - 1.8681641 + - -0.36206055 + - 0.5722656 + - -1.265625 + - 0.3642578 + - -0.5629883 + - -3.4941406 + - 4.8632813 + - -3.3046875 + - -0.8071289 + - -2.328125 + - -3.4863281 + - 0.029571533 + - 1.9746094 + - 2.6328125 + - 0.01576233 + - 0.25268555 + - 1.7089844 + - 4.0039063 + - -0.63720703 + - 1.90625 + - -2.8339844 + - 2.6796875 + - -1.0927734 + - 0.26220703 + - -3.9238281 + - 3.0117188 + - 2.6074219 + - -2.9648438 + - 3.4550781 + - 2.6816406 + - 0.6645508 + - -1.0673828 + - -4.0117188 + - 3.0097656 + - 1.3544922 + - 1.5175781 + - -0.3876953 + - 0.039611816 + - -5.0078125 + - 0.8300781 + - 1.3789063 + - -2.2207031 + - 0.77441406 + - 2.6035156 + - 0.40454102 + - -0.56103516 + - 2.2070313 + - -1.4003906 + - -2.6953125 + - 0.8046875 + - 0.42114258 + - -1.2441406 + - 2.0878906 + - 0.47314453 + - 1.0439453 + - 3.0527344 + - 0.85058594 + - -1.2832031 + - 1.1123047 + - 2.0527344 + - 0.74658203 + - -2.3789063 + - 2.7949219 + - -1.0400391 + - 8.5703125 + - -1.4746094 + - 2.03125 + - -0.5991211 + - -0.8847656 + - -0.44628906 + - -0.66796875 + - 2.8222656 + - 0.049102783 + - 3.53125 + - 1.0810547 + - 2.125 + - -2.1464844 + - -2.4277344 + - 3.5800781 + - -0.17236328 + - 5.921875 + - -1.0566406 + - 5.921875 + - -2.0253906 + - -0.95410156 + - -1.4013672 + - 1.5019531 + - 0.3852539 + - 0.79003906 + - -1.5839844 + - 4.1132813 + - 2.96875 + - 2.4902344 + - 4.6875 + - -0.7216797 + - -2.0976563 + - 1.7167969 + - -1.4580078 + - -4.0742188 + - -3.1113281 + - 0.44921875 + - -4.3554688 + - -0.16064453 + - 1.7939453 + - 3.7304688 + - -1.1054688 + - -0.67529297 + - -30.3125 + - -0.85595703 + - -0.027618408 + - -0.6660156 + - 0.7626953 + - 3.5800781 + - 0.79296875 + - 1.8632813 + - 0.12609863 + - 2.0976563 + - 0.012275696 + - -0.1484375 + - -2.9160156 + - -2.2011719 + - 1.3662109 + - -2.3691406 + - 0.55859375 + - 0.073791504 + - -0.63134766 + - -1.5576172 + - 1.4433594 + - 10.890625 + - 3.125 + - -1.265625 + - 1.1884766 + - 0.94140625 + - -0.84814453 + - 2.3105469 + - 0.37841797 + - -2.6035156 + - 1.296875 + - 0.2529297 + - -2.203125 + - 0.34057617 + - 0.38110352 + - -2.0644531 + - -3.2285156 + - 0.17248535 + - -0.55126953 + - -1.90625 + - 5.6289063 + - 1.6572266 + - -1.2236328 + - 3.1679688 + - 1.0341797 + - 1.2763672 + - 0.0011701584 + - 3.1445313 + - 0.6489258 + - -1.7949219 + - 0.19189453 + - 3.5175781 + - -2.3945313 + - 2.4589844 + - -1.5351563 + - -2.0097656 + - -0.9692383 + - 4.3242188 + - 0.4519043 + - -4.0820313 + - 1.6386719 + - -0.49804688 + - -0.6801758 + - -1.8076172 + - -2.5019531 + - 0.077819824 + - -3.75 + - 0.7397461 + - 3.0078125 + - -6.9453125 + - 0.48876953 + - -1.3095703 + - -3.3691406 + - -3.0175781 + - 1.7734375 + - -0.8691406 + - -3.1191406 + - 0.06640625 + - 0.18615723 + - -0.3959961 + - -1.3349609 + - -0.6459961 + - 1.8984375 + - 1.75 + - 6.6757813 + - -1.4882813 + - -0.46704102 + - -1.2744141 + - -1.8183594 + - 2.0644531 + - -1.9638672 + - -0.7011719 + - 2.0664063 + - 0.15258789 + - 3.4492188 + - 0.890625 + - 0.921875 + - -1.0634766 + - 3.0039063 + - -0.6928711 + - 1.6298828 + - 0.5488281 + - -2.703125 + - -1.1425781 + - 0.41503906 + - -0.5839844 + - -0.2109375 + - 4.5625 + - 1.4433594 + - -0.11102295 + - -1.6738281 + - 4.5078125 + - -0.49682617 + - 2.0371094 + - -2.7558594 + - -1.8857422 + - 2.1015625 + - 2.515625 + - -0.82177734 + - 0.87597656 + - 1.6611328 + - -1.1982422 + - -1.96875 + - -1.2451172 + - 0.07476807 + - -0.46923828 + - -4.9023438 + - 0.047424316 + - -1.0195313 + - 3.3046875 + - 0.25048828 + - 0.66015625 + - -0.43066406 + - -0.13110352 + - 1.1132813 + - -0.35327148 + - -0.6738281 + - -0.47021484 + - -1.140625 + - -4.4179688 + - 0.7680664 + - 4.2070313 + - 0.112854004 + - 1.3613281 + - 1.8691406 + - 0.6191406 + - 3.9082031 + - -1.546875 + - 0.0418396 + - 2.265625 + - 2.2480469 + - 2.8027344 + - -1.9775391 + - 1.8564453 + - -1.6796875 + - 1.6044922 + - -2.3691406 + - 0.18969727 + - 1.0859375 + - 2.8300781 + - -0.6640625 + - 2.6914063 + - 2.7753906 + - 1.3164063 + - 2.5449219 + - -2.40625 + - 4.4960938 + - -2.4257813 + - -0.54003906 + - 1.7001953 + - -0.63427734 + - -2.5 + - 1.7324219 + - 0.1015625 + - -2.2871094 + - -1.5751953 + - -1.5019531 + - -1.6982422 + - -2.8789063 + - 3.1425781 + - 1.8701172 + - 1.7558594 + - -2.7441406 + - -0.32348633 + - -0.13171387 + - 2.4902344 + - 0.3330078 + - 2.4199219 + - -3.0214844 + - -0.18884277 + - 0.44799805 + - 1.0439453 + - 0.17492676 + - 4.0351563 + - -0.08843994 + - 1.4238281 + - -0.7919922 + - -1.9882813 + - -0.9272461 + - 1.3662109 + - 1.046875 + - 0.63427734 + - 1.2451172 + - -3.4550781 + - 0.17297363 + - 1.7441406 + - 0.62353516 + - -0.3647461 + - 1.515625 + - -1.1552734 + - -2.4160156 + - -5.5429688 + - -4.09375 + - 6.078125 + - -1.3701172 + - -0.91015625 + - 1.1992188 + - -1.7529297 + - 2.0800781 + - -1.6416016 + - -2.3925781 + - -3.8867188 + - -2.203125 + - -2.6425781 + - 0.7397461 + - 0.2734375 + - 1.4511719 + - -0.7939453 + - -1.1513672 + - 0.75683594 + - 0.1204834 + - -3.5039063 + - -1.7607422 + - -1.4775391 + - 3.1015625 + - 2.0839844 + - 6.2929688 + - -0.44384766 + - 2.5175781 + - -1.7080078 + - 1.8369141 diff --git a/backends/candle/tests/snapshots/test_flash_mistral__mistral_single.snap b/backends/candle/tests/snapshots/test_flash_mistral__mistral_single.snap new file mode 100644 index 00000000..b238aa6a --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_mistral__mistral_single.snap @@ -0,0 +1,4101 @@ +--- +source: backends/candle/tests/test_flash_mistral.rs +assertion_line: 48 +expression: embeddings_single +--- +- - 3.2363281 + - -1.1582031 + - 1.0810547 + - -2.0234375 + - 1.6054688 + - -1.0048828 + - 0.4362793 + - -0.87646484 + - 0.7988281 + - -0.2722168 + - 0.49365234 + - -0.8203125 + - 0.17041016 + - -0.73291016 + - -0.34936523 + - 0.03543091 + - 0.34277344 + - 1.3779297 + - 1.5234375 + - -1.8720703 + - -1.4052734 + - 1.6289063 + - -1.1650391 + - 0.6503906 + - 1.7939453 + - 1.9814453 + - -0.43286133 + - 1.3994141 + - -0.3486328 + - -2.5253906 + - 2.5390625 + - 0.32348633 + - 2.2988281 + - 1.5175781 + - -0.28735352 + - 1.1669922 + - -3.4550781 + - 0.07141113 + - -5.2773438 + - -0.8330078 + - 0.75683594 + - -2.4296875 + - -0.9194336 + - -0.98095703 + - -1.7236328 + - 2.0722656 + - 0.234375 + - -3.9003906 + - -1.4003906 + - 0.8334961 + - 3.9121094 + - -0.4350586 + - -3.0488281 + - -100.5625 + - -3.0742188 + - -0.93408203 + - 2.7128906 + - -1.0556641 + - -1.3759766 + - -7.3671875 + - -2.3769531 + - 0.57910156 + - 0.83740234 + - 0.13171387 + - 2.4042969 + - 0.07281494 + - -2.5449219 + - 0.5151367 + - 2.0644531 + - -1.5566406 + - -4.6640625 + - 0.051605225 + - -2.9902344 + - -0.9008789 + - -1.2304688 + - -0.40454102 + - 2.9863281 + - 3.1367188 + - -0.13916016 + - -0.36206055 + - -0.640625 + - -0.6069336 + - -1.5878906 + - -0.34594727 + - -2.0214844 + - 0.5366211 + - -1.8007813 + - -0.15222168 + - 2.2597656 + - 0.86816406 + - -1.2304688 + - 5.9375 + - 2.7089844 + - -19.703125 + - -2.8144531 + - -2.7832031 + - -4.4414063 + - 0.36035156 + - 1.5751953 + - -4.09375 + - 1.6904297 + - -1.3564453 + - -3.8652344 + - -0.61035156 + - 0.006626129 + - -2.7910156 + - 0.07922363 + - -1.3349609 + - -1.5810547 + - -0.059143066 + - 0.03945923 + - 0.43066406 + - 0.47851563 + - -1.5595703 + - -0.055236816 + - 3.03125 + - 2.8515625 + - 0.70703125 + - -0.18713379 + - 0.296875 + - 2.2421875 + - 0.5942383 + - 0.15258789 + - -2.4863281 + - -2.2011719 + - -0.26879883 + - 2.4003906 + - -0.7294922 + - 0.32739258 + - 1.5878906 + - 2.3789063 + - 0.171875 + - -3.2539063 + - 1.1572266 + - 1.2333984 + - 2.4101563 + - -0.30664063 + - 0.7890625 + - -1.2041016 + - -1.484375 + - 1.5195313 + - -0.41796875 + - 1.3525391 + - -2.7753906 + - 1.1738281 + - -2.8027344 + - -1.7988281 + - -0.93603516 + - -2.5703125 + - 4.578125 + - 0.7866211 + - -1.9257813 + - -1.0458984 + - 0.037109375 + - 0.5161133 + - -2.7832031 + - 0.90527344 + - -0.5083008 + - -3.0410156 + - -3.1289063 + - -1.2539063 + - -2.6191406 + - -0.5517578 + - -1.140625 + - 0.5136719 + - 1.4003906 + - 3.3613281 + - -1.1591797 + - -0.7578125 + - -0.4633789 + - -2.6328125 + - -1.9306641 + - -0.4375 + - -2.9804688 + - -0.09539795 + - 0.25195313 + - -1.3125 + - 2.09375 + - -4.265625 + - -2.2539063 + - 1.7919922 + - 0.8027344 + - -1.8613281 + - -1.8544922 + - 0.13720703 + - 5.1015625 + - -3.4863281 + - -0.8515625 + - -1.1826172 + - 0.073913574 + - -1.9101563 + - -3.7773438 + - -0.5566406 + - 0.6411133 + - -2.2441406 + - 1.4951172 + - 3.6308594 + - -2.1640625 + - -1.4902344 + - 0.13244629 + - 0.4428711 + - -2.3515625 + - 1.9189453 + - 0.7084961 + - 7.9296875 + - 3.2929688 + - 4.2617188 + - -2.84375 + - -0.34692383 + - -2.2246094 + - -2.0625 + - -0.74853516 + - -2.90625 + - -0.8613281 + - 0.83447266 + - 3.9550781 + - -0.0033473969 + - -2.5214844 + - 3.0957031 + - -0.7055664 + - -3.8515625 + - 0.63378906 + - -0.32470703 + - 3.125 + - -0.085510254 + - -1.2158203 + - 0.09539795 + - 0.765625 + - 0.3972168 + - -3.1484375 + - 0.77734375 + - -0.76708984 + - -1.0068359 + - -0.88720703 + - -0.203125 + - 1.5800781 + - 0.74072266 + - 2.3691406 + - 2.8554688 + - 1.6591797 + - 6.0390625 + - -0.35083008 + - -3.4589844 + - 0.22875977 + - -2.2265625 + - -1.7607422 + - 3.2695313 + - 2.5605469 + - -0.6118164 + - 0.20898438 + - 1.2519531 + - 0.4440918 + - -2.1269531 + - 0.515625 + - 0.625 + - -0.69921875 + - -0.33081055 + - -2.28125 + - 0.03012085 + - 0.34375 + - 1.4726563 + - 1.8476563 + - 1.8925781 + - 1.890625 + - -0.3762207 + - 2.4140625 + - -2.2988281 + - 3.9140625 + - 0.85595703 + - -4.6953125 + - 0.32910156 + - 0.8154297 + - 3.2382813 + - 0.82910156 + - -0.42822266 + - -1.1640625 + - -3.9316406 + - 1.3710938 + - 0.18383789 + - 1.0302734 + - -2.1308594 + - -2.6738281 + - 1.3876953 + - 0.13671875 + - 1 + - -0.7792969 + - -0.064697266 + - 1.8291016 + - 0.65722656 + - 0.03186035 + - 1.7236328 + - 1.2119141 + - 10.078125 + - 0.06500244 + - 0.6723633 + - -0.4814453 + - 1.8417969 + - -1.4003906 + - 2.2128906 + - -0.5473633 + - -0.07757568 + - -0.20861816 + - 2.7636719 + - 3.3300781 + - -1.640625 + - 1.5292969 + - 2.4765625 + - 1.4394531 + - -0.09094238 + - -1.203125 + - -1.6669922 + - -0.10656738 + - -0.8984375 + - 0.07366943 + - 1.1894531 + - -2.4375 + - 0.08148193 + - -0.140625 + - -3.1875 + - 1.2861328 + - 1.8310547 + - 1.2421875 + - -3.8359375 + - 2.5703125 + - -1.4082031 + - -0.7836914 + - -1.3457031 + - -1.5019531 + - 2.3652344 + - -3.5800781 + - -4.078125 + - 1.7050781 + - 1.5644531 + - 0.7675781 + - 2.3378906 + - -0.11633301 + - 2.78125 + - -0.4987793 + - 0.0914917 + - 0.10571289 + - 2.7597656 + - -0.4482422 + - 2.1015625 + - 1.5498047 + - 1.9423828 + - 1.1533203 + - -0.21398926 + - 2.6796875 + - -5.0664063 + - -0.8828125 + - 2.1503906 + - -1.2607422 + - 0.3330078 + - 0.5073242 + - -2.1738281 + - -0.7817383 + - -4.09375 + - -1.6074219 + - -1.6220703 + - -1.4130859 + - -1.4902344 + - 1.7304688 + - 4.359375 + - -1.3847656 + - 2.96875 + - -2.9003906 + - 6.1679688 + - 1.703125 + - 1.4638672 + - -2.6914063 + - 0.77001953 + - -1.5253906 + - -2.1230469 + - 3.5039063 + - -0.40283203 + - 3.5976563 + - -1.4462891 + - 0.39208984 + - 0.70947266 + - 2.4726563 + - -1.3896484 + - -1.2861328 + - -1.9472656 + - -0.86035156 + - -0.7050781 + - 1.8564453 + - 1.8613281 + - -4.2226563 + - -8.125 + - -2.109375 + - 0.45532227 + - -0.09313965 + - -2.6660156 + - -0.9580078 + - 0.046875 + - -0.29736328 + - 2.6464844 + - 2.1054688 + - -2.1464844 + - 1.5488281 + - -2.3359375 + - 1.5898438 + - -0.5644531 + - -4.34375 + - -0.17236328 + - 1.7988281 + - 2.046875 + - -2.1660156 + - -14.390625 + - -0.1204834 + - -2.2128906 + - -1.6064453 + - 3.1152344 + - -1.1582031 + - 1.4433594 + - -0.19799805 + - -3.6875 + - -1.4189453 + - -3.6191406 + - 5.109375 + - -0.5004883 + - -0.4711914 + - 2.7988281 + - -0.33129883 + - -0.76171875 + - 1.0517578 + - 0.16320801 + - -2.0371094 + - 2.2246094 + - -1.4384766 + - -1.9189453 + - -1.7138672 + - -3.8613281 + - 0.84814453 + - -0.37939453 + - -1.8515625 + - 0.58203125 + - -1.9013672 + - 0.75097656 + - 1.6738281 + - -1.3115234 + - -1.5058594 + - -0.6225586 + - -1.6416016 + - -2.203125 + - -0.9116211 + - 0.06585693 + - 2.7050781 + - -2.1699219 + - -3.5800781 + - -0.0075302124 + - 1.5263672 + - -0.5859375 + - -2.0429688 + - -0.47314453 + - 5.609375 + - 4.625 + - -0.036254883 + - 0.06878662 + - 3.2851563 + - -0.44848633 + - -2.8945313 + - -1.7666016 + - 2.7695313 + - -0.9326172 + - -0.84472656 + - -0.9819336 + - 0.27319336 + - 0.33789063 + - -2.3496094 + - 4.9335938 + - 2.3125 + - 0.296875 + - 1.015625 + - 0.34985352 + - 0.4375 + - 0.8125 + - -0.91259766 + - -0.60546875 + - 3.8242188 + - 0.56884766 + - 0.5625 + - 0.9741211 + - -1.9951172 + - -0.32543945 + - 1.2128906 + - -6.0039063 + - 0.13793945 + - 3.71875 + - -0.5605469 + - 0.46289063 + - 1.5683594 + - -0.7011719 + - -0.4658203 + - -2.6289063 + - -1.3330078 + - 2.4589844 + - -2.0410156 + - -2.9179688 + - 5.3789063 + - 0.21728516 + - -5.9609375 + - 2.0371094 + - 0.051330566 + - 1.3349609 + - 3.8339844 + - -0.62158203 + - -0.61035156 + - -1.5869141 + - 2.8496094 + - 3.6738281 + - -2.5761719 + - -1.5 + - 0.6928711 + - -2.0371094 + - 1.6220703 + - -0.34204102 + - -0.5527344 + - -1.4384766 + - -0.5102539 + - 0.5991211 + - 1.5878906 + - 3.6777344 + - -0.01701355 + - 0.55566406 + - 1.4580078 + - 0.20336914 + - -1.375 + - 1.6777344 + - 2.1894531 + - 0.85302734 + - 0.45385742 + - -0.0055770874 + - -1.8759766 + - 3.5820313 + - 0.16687012 + - -4.5078125 + - -0.12371826 + - -0.3569336 + - -1.6259766 + - -1.9589844 + - -1.0117188 + - 3.1054688 + - -0.84765625 + - -4.8398438 + - -2.3632813 + - -1.3837891 + - 0.20227051 + - 1.984375 + - 1.4824219 + - 0.63720703 + - 1.9658203 + - -17.703125 + - -1.4570313 + - -1.0488281 + - -2 + - -1.3818359 + - 0.6147461 + - 0.203125 + - 0.0036258698 + - 2.34375 + - -3.4863281 + - -1.0546875 + - -2.2402344 + - 1.2724609 + - -1.0302734 + - 0.8774414 + - -2.4511719 + - -1.4433594 + - -2.3476563 + - -2.2890625 + - -0.8935547 + - -1.9257813 + - 0.9921875 + - 0.2890625 + - -1.2851563 + - 1.1181641 + - 0.57421875 + - 0.31811523 + - 0.72314453 + - -3.2070313 + - 0.65966797 + - 2.5644531 + - -3.21875 + - -2.9375 + - 1.6806641 + - 1.6425781 + - -2.3378906 + - -3.4960938 + - -1.1923828 + - 1.4433594 + - -3.1875 + - -1.8876953 + - -0.10430908 + - -1.9082031 + - 1.4277344 + - 5.1757813 + - 3.9101563 + - 1.0273438 + - 3.2441406 + - -0.8261719 + - -0.68408203 + - 0.056915283 + - -2.2558594 + - -2.3261719 + - 0.15344238 + - -3.6953125 + - 0.5649414 + - -4.3789063 + - 0.9536133 + - 2.5917969 + - -1.7558594 + - -1.9824219 + - 1.9570313 + - -0.6069336 + - -0.25170898 + - -1.5556641 + - 1.8720703 + - -2.140625 + - 0.001115799 + - 1.4619141 + - 1.8613281 + - 0.002231598 + - 0.44140625 + - -1.609375 + - 3.4902344 + - 0.036834717 + - 1.4189453 + - 0.78222656 + - -0.125 + - 1.7041016 + - -0.5253906 + - -3.2265625 + - -2.6875 + - 0.61328125 + - 2.6132813 + - -2.8164063 + - -0.8310547 + - -0.25170898 + - 0.034576416 + - -2.2246094 + - -2.5664063 + - -0.08154297 + - 2.7851563 + - 4.390625 + - -1.0859375 + - 0.5961914 + - -4.6757813 + - 7.9101563 + - -3.1484375 + - 0.7319336 + - 3.3535156 + - -1.6201172 + - -2.59375 + - 0.98291016 + - -1.6289063 + - -0.5541992 + - 2.6914063 + - 3.8085938 + - -0.45996094 + - 1.4609375 + - 1.0556641 + - 1.6582031 + - 3.1054688 + - -0.5498047 + - 2.4003906 + - 1.8154297 + - -2.0449219 + - 0.22497559 + - 0.9868164 + - -0.52490234 + - -1.0039063 + - 0.6166992 + - 0.609375 + - -0.7138672 + - -2.9492188 + - -0.19580078 + - -0.9863281 + - -0.18981934 + - 0.0446167 + - 1.5244141 + - 1.7304688 + - 1.015625 + - -1.4150391 + - 7.7539063 + - 3.3671875 + - 7.0976563 + - 1.4716797 + - -5.71875 + - -5.8828125 + - -0.3815918 + - -1.3154297 + - -0.3232422 + - -1.5888672 + - 0.18579102 + - -0.23291016 + - -1.0429688 + - 1.6132813 + - -1.9462891 + - 2.6738281 + - 3.2207031 + - 3.6679688 + - -0.9086914 + - -2.5136719 + - 0.5102539 + - 24.09375 + - 1.2988281 + - 0.88183594 + - 0.09259033 + - -3.0175781 + - 1.8251953 + - 0.71240234 + - 0.7685547 + - -2.15625 + - 1.1123047 + - 3.0058594 + - 2.9707031 + - -0.28710938 + - -0.04937744 + - 0.5996094 + - 4.7890625 + - 1.4404297 + - 3.0644531 + - -5.0585938 + - -0.171875 + - -1.8632813 + - -1.8867188 + - -3.6425781 + - 0.9008789 + - -0.4501953 + - 1.4492188 + - -0.27001953 + - -1.8603516 + - 2.15625 + - 0.66259766 + - -3.4140625 + - -5.734375 + - -0.2175293 + - -3.0253906 + - -0.99658203 + - 1.8369141 + - -1.4111328 + - 1.4414063 + - 3.9785156 + - -1.9648438 + - -1.5273438 + - -1.875 + - 2.2949219 + - -0.2331543 + - -0.55810547 + - 1.2763672 + - 0.61083984 + - 1.4492188 + - 0.84228516 + - -0.7363281 + - -0.9975586 + - -3.1113281 + - 2.9492188 + - -0.51416016 + - 0.32739258 + - -2.6601563 + - -1.5888672 + - 1.0517578 + - 0.116882324 + - -1.2705078 + - -1.6640625 + - 2.1640625 + - -1.7226563 + - -1.7275391 + - -0.45581055 + - -0.26733398 + - 2.6152344 + - 0.42016602 + - -1.1191406 + - -0.46948242 + - 4.125 + - 1.4794922 + - -0.26660156 + - 2.9726563 + - -2.859375 + - 2.3183594 + - 0.52001953 + - -1.1894531 + - -3.203125 + - -1.1923828 + - 2.2304688 + - -2.4980469 + - 5.8789063 + - -0.002231598 + - 2.4101563 + - -0.78125 + - -1.4570313 + - 0.85595703 + - 2.6875 + - 0.5 + - -1.1445313 + - -0.55908203 + - 0.46972656 + - 1.1552734 + - -3.6191406 + - 2.3222656 + - -4.75 + - -4.75 + - -3.7851563 + - 1.0068359 + - 3.9140625 + - 1.4355469 + - -1.3916016 + - 0.17407227 + - 2.4257813 + - 1.2197266 + - -2.609375 + - 1.1171875 + - -1.5351563 + - -4.0273438 + - -0.3540039 + - 5.6328125 + - 0.22961426 + - 2.1113281 + - 1.9863281 + - -0.9980469 + - 2.140625 + - -0.2734375 + - -2.8144531 + - -0.19921875 + - 4.5820313 + - -2.5644531 + - -0.36279297 + - 2.8847656 + - -1.4326172 + - 0.06750488 + - 1.0771484 + - -1.1982422 + - -9.3359375 + - 1.4482422 + - -47.28125 + - -1.2910156 + - -0.60595703 + - -2.0683594 + - -3.9179688 + - -0.47753906 + - 0.29614258 + - 1.0644531 + - 1.6621094 + - 1.0615234 + - 0.18664551 + - -1.7929688 + - 4.6835938 + - -0.5258789 + - -2.0019531 + - 1.5908203 + - 1.1064453 + - -0.72509766 + - 16.984375 + - 0.42407227 + - -0.97509766 + - -1.2607422 + - -0.94140625 + - -0.58251953 + - 0.40063477 + - 2.8007813 + - 0.87109375 + - -1.6220703 + - -0.42578125 + - -2.6699219 + - -0.9589844 + - -2.4199219 + - 0.1784668 + - 0.50146484 + - -0.8803711 + - 2.4511719 + - 1.0332031 + - 0.80566406 + - 1.4453125 + - 0.50878906 + - 3.9179688 + - -0.37817383 + - 1.0478516 + - 0.25683594 + - -3.1425781 + - 2.5253906 + - 0.12548828 + - -1.2929688 + - -0.5229492 + - -2.9902344 + - 0.3515625 + - -1.6113281 + - -0.08203125 + - -0.65966797 + - -0.06137085 + - 0.20996094 + - 1.9462891 + - -4.1523438 + - -2.4902344 + - 0.3618164 + - 0.18371582 + - -1.0068359 + - -2.59375 + - 1.2685547 + - 6.5976563 + - -0.65185547 + - -0.7446289 + - 4.7265625 + - -2.2558594 + - 2.3105469 + - -2.0644531 + - -0.16882324 + - 0.17822266 + - -2.3066406 + - 2.8925781 + - -4.5742188 + - 3.5976563 + - -1.0625 + - 5.234375 + - 0.47021484 + - 0.3149414 + - -3.0703125 + - 1.9140625 + - 0.18664551 + - 1.9296875 + - 2.9335938 + - -1.0634766 + - -0.28735352 + - 0.26293945 + - -0.7158203 + - 2.5664063 + - -1.4658203 + - -1.5371094 + - -2.7050781 + - 1.2421875 + - -0.47607422 + - -0.35009766 + - -0.84472656 + - -3.4140625 + - -1.09375 + - -2.1328125 + - -5.7382813 + - -1.1669922 + - 0.2524414 + - 1.3486328 + - 3.4140625 + - 3.4492188 + - 0.40039063 + - 0.56640625 + - 0.06439209 + - 0.7709961 + - 0.99365234 + - -1.6416016 + - 2.9238281 + - 0.9736328 + - 1.3349609 + - -2.6855469 + - 2.3144531 + - -2.046875 + - 2.2109375 + - 1.6347656 + - 0.484375 + - -1.6738281 + - -1.7783203 + - 0.17663574 + - 0.31176758 + - 4.0273438 + - -0.72509766 + - 3.1933594 + - 2.3925781 + - 2.6542969 + - 1.484375 + - -0.05355835 + - 1.9794922 + - 0.39257813 + - 0.24121094 + - 2.7246094 + - -0.80126953 + - -2.8066406 + - 0.16589355 + - -2.1699219 + - -2.03125 + - -2.4511719 + - -3.0097656 + - 1.8994141 + - 2.8339844 + - 2.7753906 + - -2.4824219 + - 0.84228516 + - -3.1992188 + - 2.2734375 + - -1.7246094 + - 4.734375 + - 4.6914063 + - 0.59472656 + - -0.5366211 + - 1.7763672 + - 0.2956543 + - 2.3574219 + - -4.1796875 + - 3.9277344 + - -1.46875 + - -4.9414063 + - -1.9033203 + - -1.0361328 + - -0.3449707 + - -2.9414063 + - -15.5703125 + - 2.0390625 + - -1.2744141 + - 4.1445313 + - 1.2207031 + - 3.3535156 + - 1.3818359 + - 1.5976563 + - -0.45166016 + - -0.6635742 + - 1.65625 + - -2.0996094 + - 2.4941406 + - 1.4931641 + - 2.0800781 + - -3.2714844 + - 0.96191406 + - -0.0055770874 + - -0.21203613 + - 1.2304688 + - 2.2519531 + - -1.0205078 + - 0.35668945 + - -0.019805908 + - 1.59375 + - -4.4726563 + - 0.2109375 + - -1.7705078 + - -16.6875 + - 0.61816406 + - 0.119384766 + - 2.9882813 + - -4.9882813 + - -1.5654297 + - 0.2705078 + - 1.1875 + - -5.0273438 + - -2.6191406 + - -2.6113281 + - 3.7070313 + - -0.53222656 + - -0.44799805 + - -2.3652344 + - 0.7050781 + - -6.203125 + - -1.1806641 + - -0.3515625 + - 0.73828125 + - 1.1845703 + - -1 + - -0.24719238 + - -2.4667969 + - -0.6381836 + - 2.9179688 + - -3.5039063 + - -0.040161133 + - -0.52783203 + - 1.5332031 + - 3.4589844 + - -1.8183594 + - 0.32641602 + - -1.4794922 + - -0.75 + - 2.2285156 + - -0.75390625 + - 0.43066406 + - -18.859375 + - -0.33496094 + - -1.8964844 + - 2.4355469 + - -4.1835938 + - 2.4101563 + - 0.5703125 + - 1.2275391 + - 1.6376953 + - -0.6977539 + - 1.4189453 + - -1.1503906 + - 2.2636719 + - -1.9921875 + - 0.5078125 + - -0.11853027 + - 0.58691406 + - 0.04714966 + - 1.4111328 + - -4.8007813 + - -1.421875 + - 2.3105469 + - -2.7324219 + - -0.19165039 + - 2.9023438 + - -1.453125 + - 3.1464844 + - -2.5957031 + - -1.5205078 + - 2.0761719 + - 1.3583984 + - 3.15625 + - -2.1542969 + - -1.4980469 + - -1.6445313 + - -0.41552734 + - -0.60791016 + - -1.6884766 + - 1.4931641 + - 1.8642578 + - 3.7695313 + - 1.6601563 + - 2.2988281 + - 3.6582031 + - -2.0839844 + - 0.41430664 + - -2.2949219 + - -1.4238281 + - -6.0546875 + - 1.0351563 + - 2.46875 + - 0.46142578 + - 0.2512207 + - 0.19921875 + - -2.0976563 + - 0.60302734 + - 0.1508789 + - 8.0703125 + - -0.37890625 + - -1.6367188 + - -1.1289063 + - 1.1582031 + - 1.5166016 + - 1.8085938 + - -1.7597656 + - -1.9277344 + - 0.43237305 + - 2.6953125 + - 0.68310547 + - 3.0742188 + - -3.4238281 + - -4.5898438 + - 0.8183594 + - 0.8173828 + - 1.5820313 + - 0.97314453 + - 0.3359375 + - -0.24768066 + - 4.140625 + - 0.4609375 + - 0.12164307 + - -2.3164063 + - 1.6376953 + - -0.86328125 + - 1.2705078 + - -3.3242188 + - -0.4831543 + - 1.75 + - -2.6875 + - 1.2890625 + - 3.96875 + - 2.2597656 + - -0.89990234 + - -0.88964844 + - 1.5273438 + - 1.3662109 + - 0.67626953 + - 2.8710938 + - 4.9335938 + - -0.4152832 + - 1.0458984 + - -0.6816406 + - 0.17663574 + - 0.75 + - 2.2324219 + - 1.2294922 + - 1.1123047 + - 0.13781738 + - -4.578125 + - -0.58251953 + - 3.1289063 + - -2.9101563 + - -0.50390625 + - -3.1054688 + - -0.7910156 + - 2.46875 + - 6.375 + - 1.0224609 + - -1.5839844 + - 1.7207031 + - 2.2578125 + - -0.5307617 + - -1.3740234 + - 1.2626953 + - -5.4179688 + - 1.2460938 + - 2.6777344 + - 5.4140625 + - -0.45336914 + - 0.5151367 + - -1.0908203 + - -0.8769531 + - -2.59375 + - -3.6132813 + - 3.6015625 + - -0.8696289 + - 0.9765625 + - 5.375 + - -2.1015625 + - -1.2519531 + - -2.5078125 + - -0.39208984 + - -0.044769287 + - 0.2902832 + - -1.1806641 + - -0.1352539 + - 3.3046875 + - -0.9975586 + - 0.38891602 + - 1.9707031 + - 0.58154297 + - -0.54052734 + - -0.30859375 + - 3.3164063 + - -0.28027344 + - 0.87158203 + - 1.84375 + - 2.5957031 + - 0.625 + - -0.63720703 + - -3.7226563 + - -3.2988281 + - 0.060546875 + - 3.0703125 + - -0.93847656 + - 2.4707031 + - -0.65722656 + - 1.5 + - -0.15563965 + - -3.625 + - 0.98095703 + - 0.1015625 + - -0.14416504 + - -1.1445313 + - -2.4316406 + - 6.703125 + - -2.4082031 + - 0.82910156 + - -1.2744141 + - 2.6484375 + - 0.7402344 + - -0.6870117 + - -2.0546875 + - 0.016738892 + - -3.9648438 + - 0.97753906 + - 0.3684082 + - 1.9726563 + - 1.2236328 + - 11.5703125 + - -1.9707031 + - -1.2548828 + - 1.5488281 + - 0.38598633 + - 6.0546875 + - 4.0273438 + - 0.3269043 + - -1.5107422 + - -0.71191406 + - 0.52734375 + - 8.3046875 + - 0.3881836 + - -0.64404297 + - 0.2421875 + - -1.1992188 + - 0.69873047 + - -3.1113281 + - -2.7441406 + - -2.3984375 + - -3.6738281 + - 1.8623047 + - -3.6796875 + - -1.0703125 + - 1.0117188 + - 0.83203125 + - -4.9375 + - -0.24768066 + - 0.37231445 + - 1.9902344 + - -0.44458008 + - -1.4228516 + - 1.3271484 + - -1.1367188 + - -1.125 + - 2.2480469 + - 0.48657227 + - 1.9863281 + - 4.1679688 + - -1.84375 + - 1.5097656 + - 0.41918945 + - -4.1914063 + - -1.8837891 + - -0.30249023 + - -1.7529297 + - 3.1015625 + - -1.015625 + - 0.49438477 + - 3.1601563 + - 0.076171875 + - 3.5742188 + - -0.7426758 + - 3.171875 + - -1.8476563 + - 3.15625 + - -0.8876953 + - -3.9023438 + - -2.7324219 + - -3.7519531 + - 1.6601563 + - 1.1337891 + - -0.98876953 + - -0.70947266 + - -0.7890625 + - -0.30151367 + - -2.2441406 + - -1.0410156 + - 1.1416016 + - 1.0859375 + - -0.74365234 + - 2.7128906 + - -9.2578125 + - 3.6777344 + - 3.4101563 + - -0.7944336 + - 0.8720703 + - -2.4628906 + - -0.8623047 + - 0.82177734 + - -0.097351074 + - 1.9794922 + - 0.9145508 + - -0.82421875 + - 3.8378906 + - 0.4519043 + - -1.5556641 + - -2.7050781 + - -0.60253906 + - 1.1113281 + - -0.43481445 + - -2.0175781 + - -0.31811523 + - -0.0758667 + - -1.5087891 + - 3.2519531 + - 0.3737793 + - -6.2070313 + - 1.9091797 + - 4.3554688 + - -0.013671875 + - 0.04714966 + - 0.29467773 + - 0.8154297 + - 1.7441406 + - 2.4199219 + - 3.375 + - 0.42578125 + - 0.55810547 + - -0.4350586 + - -0.10180664 + - 1.4433594 + - 2.7324219 + - -0.17236328 + - -3.9609375 + - 10.78125 + - 2.2988281 + - -3.1757813 + - -71.0625 + - 0.85791016 + - -1.6738281 + - -0.8847656 + - 2.8320313 + - 4.7890625 + - 1.6933594 + - 0.89697266 + - -0.09313965 + - -2.2050781 + - -2.7636719 + - 1.6953125 + - -0.71533203 + - 2.3476563 + - 0.35327148 + - -5.0625 + - -2.6953125 + - -3.0058594 + - -0.32592773 + - 1.7832031 + - 2.4550781 + - 0.5229492 + - 1.1347656 + - -0.9584961 + - -1.6064453 + - -2.7519531 + - -1.6699219 + - -3.28125 + - 1.0976563 + - -1.7207031 + - 1.1289063 + - -4.6367188 + - 0.08868408 + - -1.1123047 + - -3.8847656 + - 1.0830078 + - 1.0185547 + - -0.043792725 + - 1.3076172 + - -2.6289063 + - -0.30395508 + - -1.3193359 + - 4.21875 + - 1.7939453 + - 1.2841797 + - -2.6074219 + - 2.0527344 + - 1.4726563 + - 2.9414063 + - 0.3347168 + - 1.2998047 + - -0.56591797 + - 1.0771484 + - 9.7265625 + - -4.9023438 + - 1.8222656 + - 0.13598633 + - 0.9267578 + - 0.3774414 + - -2.0136719 + - 0.92089844 + - 2.0449219 + - 0.38598633 + - -3.1523438 + - -0.7363281 + - 0.11602783 + - -4.6367188 + - 0.7373047 + - -0.9375 + - 0.46191406 + - -2.9609375 + - 2.0625 + - 2.8964844 + - 0.58447266 + - 1.4394531 + - 0.29077148 + - -2.2109375 + - -0.7861328 + - 0.54296875 + - 1.0341797 + - -0.111328125 + - 0.41235352 + - -1.7998047 + - -1.1992188 + - 0.7680664 + - -2.7578125 + - 2.4277344 + - 3.6503906 + - -0.6069336 + - -1.0185547 + - -1.2431641 + - 2.0898438 + - -0.15917969 + - 2.8671875 + - 2.4902344 + - 7.8007813 + - 1.8486328 + - 3.0820313 + - -1.703125 + - 0.8125 + - 1.5527344 + - -0.3125 + - 0.39379883 + - 1.9355469 + - -0.99658203 + - 0.13000488 + - -0.84033203 + - -2.9570313 + - 0.6801758 + - -1.1962891 + - 5.3007813 + - 16.75 + - 1.0966797 + - -0.65185547 + - -3.8945313 + - 1.375 + - -0.7519531 + - 1.6757813 + - 2.3925781 + - -0.3112793 + - -0.93359375 + - 3.2714844 + - 0.94921875 + - 1.359375 + - -1.8720703 + - 2.1757813 + - 2.2402344 + - -4.09375 + - 1.3691406 + - 0.3017578 + - 2.1171875 + - 0.10992432 + - -1.7070313 + - 1.2988281 + - -0.8232422 + - 3.9394531 + - 1.4765625 + - -1.4296875 + - 3.2890625 + - 1.3623047 + - -1.7988281 + - -3.2207031 + - 1.6689453 + - -0.06915283 + - -3 + - 0.7626953 + - 0.15979004 + - -2.6484375 + - 0.08618164 + - 1.9960938 + - 0.55322266 + - 0.3449707 + - 3.0351563 + - 1.4033203 + - -0.54345703 + - 0.3737793 + - 3.5664063 + - -0.76220703 + - 2.7558594 + - 0.7607422 + - 3.2363281 + - 2.3925781 + - -2.2617188 + - -1.4804688 + - 2.25 + - 6.3828125 + - -2.75 + - -0.32836914 + - 3.0234375 + - -4.2539063 + - 0.107666016 + - -0.51660156 + - -2.2578125 + - 0.2763672 + - 0.7685547 + - 2.3105469 + - 1.0986328 + - 0.08648682 + - -0.15844727 + - -0.0027885437 + - -1.9550781 + - -0.63671875 + - -2.2246094 + - 0.40283203 + - 1.1972656 + - 0.39086914 + - -2.2207031 + - -1.6533203 + - -2.0566406 + - -1.6660156 + - -10.375 + - 0.69091797 + - 0.6245117 + - -0.04574585 + - -0.63378906 + - -1.4775391 + - -3.3144531 + - 1.4140625 + - -0.5234375 + - 1.6064453 + - 3.4453125 + - 1.1767578 + - 2.6191406 + - 5.765625 + - -1.4560547 + - 1.8808594 + - -3.375 + - -3.6914063 + - -2.7050781 + - 1.6914063 + - 0.24243164 + - -2.6425781 + - 2.9160156 + - -2.34375 + - -0.6567383 + - 0.69628906 + - 1.2294922 + - 5.4804688 + - -0.18408203 + - 0.48876953 + - 3.3378906 + - 4.1132813 + - -3.0703125 + - -5.390625 + - -0.29760742 + - 0.8984375 + - 1.0292969 + - 2.5839844 + - -0.08984375 + - -1.4404297 + - 2.7011719 + - 2.3789063 + - -0.2915039 + - -1.8369141 + - -1.3837891 + - 2.1191406 + - 0.8208008 + - 3.875 + - 1.8369141 + - -0.4584961 + - 3.375 + - 1.1132813 + - 1.0107422 + - 2.1347656 + - -3.4238281 + - -2.9003906 + - -2.6542969 + - 2.4277344 + - 2.7695313 + - -1.9716797 + - -3.71875 + - -3.6953125 + - -1.53125 + - -4.890625 + - 0.98535156 + - -1.0332031 + - 2.1660156 + - 0.57177734 + - -2.96875 + - -4.15625 + - -0.06359863 + - 0.03375244 + - 3.421875 + - 0.9238281 + - -0.6503906 + - -1.0087891 + - 20.421875 + - 1.1191406 + - 0.57958984 + - 2.1933594 + - 8.015625 + - -0.359375 + - -0.22424316 + - 0.3095703 + - 0.73583984 + - -3.4316406 + - -0.8833008 + - 4.125 + - -2.3203125 + - 4.7304688 + - 0.6694336 + - 0.73828125 + - -0.64697266 + - 0.6850586 + - -2.9277344 + - -2.5664063 + - 5.1523438 + - -0.84033203 + - 0.48242188 + - 3.7050781 + - 0.15368652 + - -3.9765625 + - 1.375 + - 2.2460938 + - 0.9941406 + - 0.20471191 + - 0.63378906 + - 0.37158203 + - 3.1679688 + - 0.61279297 + - -4.0507813 + - 0.9628906 + - -0.625 + - -0.94433594 + - -1.0126953 + - -4.5390625 + - 5.3125 + - 2.5136719 + - -6.203125 + - -1.0429688 + - 1.4091797 + - 2.28125 + - -1.4980469 + - 1.140625 + - 1.7939453 + - -2.5078125 + - 3.671875 + - 0.52001953 + - 2.359375 + - 0.30126953 + - 6.125 + - 1.1328125 + - 0.2890625 + - 1.0439453 + - -2.0097656 + - -3.8300781 + - 4.5507813 + - 3.0390625 + - 2.7226563 + - 0.027053833 + - 0.33325195 + - 0.15283203 + - 2.9375 + - -3.4550781 + - 0.39501953 + - 0.38476563 + - -4.5078125 + - -1.8955078 + - 1.9746094 + - 2.75 + - -4.6992188 + - -2.0097656 + - -1.140625 + - -3.2929688 + - -1.2207031 + - -2.7890625 + - 1.3349609 + - 1.0644531 + - 0.18103027 + - -3.5664063 + - -0.7441406 + - 2.5605469 + - 1.5654297 + - -1.3662109 + - -2.8671875 + - 1.3818359 + - -1.5234375 + - -0.8388672 + - -4.0742188 + - -2.3789063 + - -4.5390625 + - 2.6972656 + - 0.6796875 + - -3.2050781 + - -2.5175781 + - -2.1894531 + - 1.2724609 + - 0.51416016 + - -0.60595703 + - 4.125 + - -3.0625 + - 0.67041016 + - -0.07757568 + - -1.6328125 + - 4.0585938 + - -3.6660156 + - 1.1875 + - -2.1308594 + - 2.0605469 + - -0.37939453 + - -4.78125 + - -1.0390625 + - 3.9726563 + - 0.35839844 + - 1.2685547 + - -2.8925781 + - 2.3574219 + - -6.140625 + - 1.2578125 + - 0.69873047 + - -0.88964844 + - 3.6660156 + - 3.4941406 + - 1.4863281 + - 2.40625 + - -0.640625 + - 0.66015625 + - -2.4589844 + - -3.3125 + - -2.1347656 + - 2.8867188 + - 0.7397461 + - -1.4589844 + - 1.7070313 + - 1.0664063 + - -0.52783203 + - 2.5449219 + - -1.8867188 + - -1.6669922 + - 1.2216797 + - -0.51660156 + - -1.5722656 + - 1.5830078 + - 0.42919922 + - 0.49487305 + - 3.7519531 + - 2.6386719 + - 0.0892334 + - -1.2861328 + - -5.2070313 + - 3.09375 + - 1.4482422 + - -2.1132813 + - 2.4472656 + - 1.5185547 + - -3.7050781 + - 2.1367188 + - 1.9863281 + - -1.7519531 + - 2.6875 + - -3 + - -1.9804688 + - -1.8457031 + - 0.51708984 + - 1.8808594 + - 0.33813477 + - -1.5712891 + - -5.5898438 + - -0.23986816 + - -1.6425781 + - -0.8676758 + - -1.3125 + - -5.1445313 + - 3.1328125 + - 0.61816406 + - -2.2441406 + - 1.0234375 + - -1.7402344 + - 3.6640625 + - -2.1699219 + - 2.3691406 + - -1.4482422 + - 0.34106445 + - -0.8408203 + - -0.49316406 + - 1.8691406 + - -0.21594238 + - -0.25708008 + - -3.2109375 + - 0.10406494 + - -1.5878906 + - 1.0107422 + - 1.2763672 + - 3.7441406 + - -1.6972656 + - -2.15625 + - -0.032348633 + - 3.90625 + - 2.0722656 + - -1.0029297 + - -3.7441406 + - -1.1396484 + - -2.8867188 + - 8.7734375 + - -1.75 + - -0.109375 + - -1.7861328 + - 4.3945313 + - 1.2861328 + - 1.1962891 + - 0.7944336 + - -1.3017578 + - 0.21643066 + - -0.7138672 + - 2.1738281 + - -5.390625 + - -2.6757813 + - 5.7382813 + - -4.125 + - 3.6875 + - -1.0947266 + - 0.5 + - 0.6381836 + - 3.8164063 + - 0.3984375 + - -1.3984375 + - -0.0078125 + - 0.95410156 + - 2.171875 + - -4.828125 + - 1.7792969 + - 0.54833984 + - -3.1738281 + - -1.4355469 + - -0.23962402 + - -1.1396484 + - -0.22302246 + - -1.1669922 + - 0.3425293 + - 1.5595703 + - -0.8535156 + - -2.1015625 + - -3.8867188 + - 0.54833984 + - -1.4433594 + - -1.6181641 + - 0.23596191 + - 2.6875 + - 0.5493164 + - 2.5390625 + - -0.3046875 + - -0.31103516 + - -1.7480469 + - 3.4765625 + - 2.8671875 + - -1.8125 + - -0.6796875 + - -3.6894531 + - -2.2324219 + - 1.75 + - 0.15234375 + - -2.2128906 + - -2.3203125 + - -0.578125 + - 1.2363281 + - -0.47875977 + - 0.8803711 + - 2.4414063 + - -0.9194336 + - -3.0878906 + - -2.6503906 + - 0.14672852 + - -2.9726563 + - -1.8681641 + - -1.0400391 + - -2.1738281 + - -2.8847656 + - -0.61816406 + - -0.8330078 + - -1.3642578 + - 5.4140625 + - 4.6953125 + - -4.2148438 + - -0.3569336 + - -1.28125 + - 1.4785156 + - -2.328125 + - -2.2949219 + - 3.5800781 + - -1.3017578 + - -2.5488281 + - 1.4306641 + - 2.2753906 + - -2.2050781 + - -3.6425781 + - -0.66845703 + - -1.7558594 + - -1.0195313 + - 0.15844727 + - -0.32080078 + - -0.70654297 + - -1.9628906 + - -1.0722656 + - -1.2929688 + - -0.76416016 + - -2.0664063 + - -2.2539063 + - -0.7558594 + - -0.37158203 + - 3.9863281 + - -2.7519531 + - 3.9023438 + - -1.9804688 + - -0.9316406 + - 6.5078125 + - 0.60253906 + - -0.82910156 + - -1.3535156 + - 0.6323242 + - -2.9726563 + - 3.3203125 + - 6.421875 + - -2.3164063 + - -0.7084961 + - 5.7226563 + - 0.90283203 + - 1.3837891 + - 0.3955078 + - -1.9765625 + - 1.0742188 + - 0.50878906 + - -2.9804688 + - 1.3427734 + - -0.8613281 + - -0.33447266 + - 2.6582031 + - -7.1601563 + - 0.71777344 + - 4.2148438 + - -2.4765625 + - -0.7910156 + - -2.1523438 + - 4.2460938 + - -5.1679688 + - -2.3320313 + - -0.23095703 + - 1.5947266 + - 2.4082031 + - -0.68847656 + - 1.6523438 + - -2.328125 + - -2.6777344 + - 2.3359375 + - -0.6948242 + - 0.39648438 + - -2.3339844 + - 3.7714844 + - 0.66845703 + - -1.71875 + - -2.4238281 + - -1.2421875 + - -0.2253418 + - 0.5722656 + - -0.34692383 + - 0.54541016 + - 2.0175781 + - -2.5878906 + - -0.09539795 + - -2.7949219 + - 0.7241211 + - 0.953125 + - 1.1865234 + - -1.2783203 + - -2.234375 + - -3.1484375 + - 1.2773438 + - 0.5834961 + - 1.1572266 + - -0.35473633 + - -2.15625 + - -2.1152344 + - 1.2978516 + - -3.0273438 + - -2.5136719 + - -1.9619141 + - 3.6992188 + - -3.4785156 + - -1.9482422 + - -0.60253906 + - 2.3535156 + - -1.6074219 + - 0.014503479 + - -1.0634766 + - -0.9248047 + - -0.30688477 + - -4.1210938 + - 0.8144531 + - 1.6376953 + - 4.859375 + - -1.6796875 + - 1.4482422 + - -0.28686523 + - 6.375 + - 1.9296875 + - -0.7294922 + - 1.4150391 + - 1.7324219 + - -0.64990234 + - -1.9150391 + - -1.2890625 + - 1.2744141 + - 1.7753906 + - 3.4375 + - -1.9316406 + - 2.3730469 + - -0.04574585 + - -0.055236816 + - 2.40625 + - -0.5361328 + - -0.97753906 + - 1.7050781 + - -1.4550781 + - -2.8496094 + - 0.9140625 + - 0.92285156 + - -3.3085938 + - -0.5410156 + - 1.8603516 + - -1.9072266 + - -1.2226563 + - -0.16955566 + - -0.29467773 + - 4.4257813 + - 6.8242188 + - -1.8144531 + - -0.18603516 + - -3.7402344 + - -2.1425781 + - 0.51416016 + - 1.0888672 + - -2.375 + - 1.8486328 + - -3.671875 + - -2.8691406 + - -0.50878906 + - -2.3476563 + - -0.9975586 + - -2.390625 + - -0.022872925 + - 1.8251953 + - 1.421875 + - -0.38720703 + - 1.7363281 + - 2.8496094 + - -0.7216797 + - -2.0195313 + - 1.3427734 + - 2.3515625 + - 0.8642578 + - -1.6220703 + - -0.9550781 + - 0.5053711 + - 0.060821533 + - -0.28515625 + - -3.6992188 + - -1.28125 + - -1.2978516 + - 1.7617188 + - -0.9326172 + - 0.96533203 + - 0.1439209 + - 2.8222656 + - -0.20129395 + - -1.4619141 + - 8.03125 + - -2.1132813 + - 3.6503906 + - -4.0273438 + - 3.6367188 + - 4.21875 + - -4.0664063 + - 1.1337891 + - 1.7832031 + - -0.22033691 + - -1.1425781 + - -0.35546875 + - -0.17297363 + - 1.8232422 + - -1.7207031 + - -1.2578125 + - -1.7851563 + - 3.9609375 + - -0.72802734 + - 1.2285156 + - 0.44677734 + - -1.2597656 + - 0.921875 + - -0.5136719 + - -0.51171875 + - -1.1142578 + - 3.3339844 + - 0.89208984 + - -2.1738281 + - 1.609375 + - -0.69873047 + - -2.7265625 + - 0.4440918 + - -2.1386719 + - -0.85253906 + - 2.6328125 + - 2.1425781 + - 2.1855469 + - -8.9609375 + - 4.40625 + - -0.5805664 + - 0.3293457 + - 0.48657227 + - -3.5019531 + - 1.9033203 + - 0.44970703 + - -1.5009766 + - 1.4414063 + - -4.625 + - 0.40112305 + - -0.21362305 + - -0.4753418 + - 0.07678223 + - 0.234375 + - 1.1494141 + - -0.34545898 + - -0.74853516 + - 0.7314453 + - 2.0800781 + - -2.4199219 + - 1.4638672 + - -2.5507813 + - 1.5810547 + - 2.359375 + - 0.77978516 + - 1.078125 + - 1.9570313 + - -0.3322754 + - 0.08258057 + - -1.2578125 + - 4.4570313 + - 1.421875 + - 2.5390625 + - 1.0166016 + - -4.0390625 + - 0.66503906 + - -0.40161133 + - -0.38891602 + - -0.26391602 + - 1.1357422 + - -0.9375 + - 1.3476563 + - 6.3554688 + - 1.0732422 + - -8.7421875 + - 1.2675781 + - 1.3388672 + - -0.11828613 + - -0.9863281 + - 2.9414063 + - 6.1757813 + - -1.8085938 + - -0.09820557 + - -0.61816406 + - -1.453125 + - 1.4726563 + - -0.7734375 + - 0.21923828 + - -0.22814941 + - -2.4238281 + - -0.43408203 + - -0.5 + - 4.0820313 + - -1.9326172 + - -1.4404297 + - 0.12634277 + - 1.7939453 + - 3.6191406 + - 2.1953125 + - 1.0546875 + - 0.49658203 + - 2.7050781 + - 0.66796875 + - -24.84375 + - 1.6748047 + - -4.6367188 + - -1.8183594 + - -15.671875 + - -1.2568359 + - -0.6870117 + - 3.0644531 + - -3.7128906 + - 2.609375 + - -7.5625 + - -7.9375 + - 0.80908203 + - -0.95410156 + - 2.0214844 + - -1.1650391 + - 0.3779297 + - 4.4375 + - -0.9453125 + - 1.5361328 + - 1.0087891 + - 2.0332031 + - 1.9931641 + - -2.9023438 + - -2.4765625 + - 3.6621094 + - -2.5761719 + - 1.8408203 + - 1.6982422 + - -5.0117188 + - 1.9042969 + - -0.31225586 + - -0.08258057 + - 2.3535156 + - 0.6352539 + - -1.6601563 + - 1.7197266 + - -1.8496094 + - 0.73046875 + - -0.04547119 + - 0.45996094 + - 0.036834717 + - 3.46875 + - 1.4023438 + - 0.061920166 + - 3.7128906 + - 2.75 + - 1.5185547 + - -1.0664063 + - -1.0947266 + - 1.7597656 + - -1.0664063 + - -2.015625 + - 2.078125 + - 1.390625 + - 3.1171875 + - -1.6494141 + - -4.7148438 + - 0.67285156 + - -2.6191406 + - 0.16210938 + - 2.4414063 + - -3.1289063 + - -0.6411133 + - -0.37329102 + - -0.4140625 + - -0.13000488 + - 4.5664063 + - 2.875 + - 1.4648438 + - -4.6757813 + - -0.13916016 + - 3.0117188 + - 0.57666016 + - -0.4453125 + - 1.3945313 + - 0.28149414 + - -0.7294922 + - -1.0039063 + - 2.1191406 + - -3.484375 + - -0.22729492 + - 1.3056641 + - -0.33862305 + - 0.5800781 + - 4.0390625 + - -0.5722656 + - 0.7241211 + - -1.4550781 + - -3.84375 + - 0.85791016 + - -1.71875 + - 0.92822266 + - -1.546875 + - -2.46875 + - 0.94970703 + - -3.0800781 + - -8.6328125 + - 0.8774414 + - -3.7089844 + - 0.2854004 + - 2.4003906 + - 1.1992188 + - -3.4628906 + - 0.6152344 + - -3.5566406 + - -1.8525391 + - -5.1367188 + - -0.82128906 + - 0.005718231 + - -0.0025100708 + - 3.9492188 + - -0.89208984 + - 1.4550781 + - -3.1503906 + - -2.7421875 + - -1.1074219 + - 0.19470215 + - -0.9003906 + - -3.0742188 + - 0.81884766 + - -2.4941406 + - -0.4404297 + - -0.12817383 + - 1.2353516 + - -0.32226563 + - 0.5078125 + - -3.4140625 + - -1.6044922 + - 0.5761719 + - -5.2070313 + - -2.2285156 + - 2.5839844 + - 5.3945313 + - 5.4726563 + - -0.2890625 + - 0.23120117 + - 4.4335938 + - 3.2597656 + - -1.6689453 + - -0.9008789 + - -2.3066406 + - 0.3330078 + - 2.8515625 + - -1.0039063 + - -0.74609375 + - -0.6118164 + - -0.7519531 + - -2.0234375 + - -2.296875 + - 2.4609375 + - -1.8095703 + - 1.2333984 + - -0.20812988 + - -2.3496094 + - -0.021194458 + - 0.78271484 + - 1.359375 + - -0.5175781 + - -0.7998047 + - 0.5258789 + - 2.2089844 + - -0.94970703 + - -1.5 + - -4.6523438 + - -0.04547119 + - 0.20422363 + - 3.4082031 + - -0.46362305 + - 0.18469238 + - 2.3476563 + - 23.5 + - -0.8959961 + - -3.0800781 + - 4.359375 + - 0.5830078 + - 4.0507813 + - -2.0234375 + - -13.3203125 + - 1.4960938 + - -1.0517578 + - 4.7539063 + - 0.66845703 + - 0.11383057 + - 1.2207031 + - 0.8408203 + - 2.2832031 + - 1.4814453 + - -4.9179688 + - 0.30908203 + - -4.7148438 + - 1.0234375 + - -3.7539063 + - 0.36450195 + - -0.19970703 + - -1.4775391 + - 3.5820313 + - -0.9350586 + - -2.2519531 + - 0.29345703 + - 3.0703125 + - -0.5292969 + - -0.6928711 + - 1.3974609 + - -1.6289063 + - -1.3476563 + - -2.0527344 + - -0.32861328 + - -0.2668457 + - -0.95947266 + - 0.1149292 + - -2.5957031 + - 2.2675781 + - -1.0664063 + - -1.7275391 + - 1.9658203 + - -0.79833984 + - 0.29541016 + - 1.7871094 + - -3.4179688 + - 3.5722656 + - 1.0419922 + - -1.3701172 + - 5.9101563 + - -2.6601563 + - -2.3671875 + - 0.8227539 + - 0.7866211 + - 2.9375 + - -2.3496094 + - 1.5 + - -2.4375 + - 3.8300781 + - 0.7109375 + - -1.203125 + - -0.06329346 + - 6.1054688 + - 3.3710938 + - -0.41015625 + - -1.71875 + - -0.3671875 + - -1.1767578 + - -0.25268555 + - -0.30078125 + - -0.1940918 + - -2.7109375 + - -5.9179688 + - 6.5351563 + - 0.9375 + - -2.3789063 + - -1.8955078 + - 1.6210938 + - 0.37548828 + - -0.31518555 + - -0.21875 + - 0.5830078 + - 1.2382813 + - 0.7890625 + - 1.6132813 + - -3.2402344 + - 0.8442383 + - 1.3203125 + - -1.9482422 + - 0.46557617 + - 0.17077637 + - 5.1757813 + - 2.1425781 + - -1.6201172 + - 4.75 + - -1.0703125 + - 2.4785156 + - 4.703125 + - -0.54296875 + - -1.9921875 + - 5.75 + - 0.78759766 + - 0.38354492 + - -1.2578125 + - -0.17211914 + - 2.4511719 + - 1.6533203 + - -1.2587891 + - -1.6181641 + - -1.8476563 + - -0.71875 + - -0.42626953 + - 0.3869629 + - 0.7348633 + - 0.12426758 + - 0.29516602 + - -2.078125 + - 2.2558594 + - 23.0625 + - -3.9101563 + - 2.9472656 + - -0.171875 + - 0.9301758 + - 2.3613281 + - 0.18798828 + - -2.0449219 + - 0.28344727 + - -0.8486328 + - -1.4492188 + - 1.9501953 + - -2.3046875 + - -1.6992188 + - -0.25854492 + - 0.31225586 + - -5.1601563 + - 1.9814453 + - 2.15625 + - 14.546875 + - -2.7011719 + - 1.4033203 + - -0.11602783 + - -1.4033203 + - 0.2109375 + - -0.6464844 + - 0.63916016 + - 0.6640625 + - -0.21984863 + - -1.2744141 + - -26 + - -0.5029297 + - 0.55078125 + - 1.0742188 + - -2.9101563 + - -0.4951172 + - -0.6484375 + - 0.9194336 + - -2.46875 + - 0.9267578 + - 0.5957031 + - -3.828125 + - -1.3505859 + - -0.8256836 + - -0.15515137 + - -1.0332031 + - -1.2939453 + - -2.9804688 + - 0.6225586 + - -0.23510742 + - -2.3261719 + - 0.8261719 + - 2.6347656 + - 0.2565918 + - 3.4257813 + - -1.4033203 + - 3.1738281 + - -0.5678711 + - 7.6953125 + - -1.9326172 + - 2.5859375 + - 4.0039063 + - -6.6484375 + - 2.4199219 + - -2.1757813 + - 4.3632813 + - -0.8208008 + - -0.5097656 + - -1.734375 + - 0.50439453 + - 0.62841797 + - 0.9951172 + - -5.5351563 + - 2.953125 + - -0.18005371 + - -2.4003906 + - 0.027893066 + - 2.7128906 + - 2.5332031 + - 2.6386719 + - 2.5058594 + - -1.9511719 + - -1.2734375 + - 1.8320313 + - 4.15625 + - 1.4335938 + - -1.4951172 + - -3.8300781 + - -0.64501953 + - -4.1640625 + - -1.1318359 + - 2.1132813 + - 2.2207031 + - 3.6367188 + - -1.140625 + - 4.890625 + - 4.9960938 + - 2.046875 + - -0.734375 + - -1.0810547 + - 0.76953125 + - -1.2734375 + - 1.3349609 + - -1.2626953 + - 1.3642578 + - -1.4804688 + - -2.6601563 + - 0.62158203 + - -3.5585938 + - -0.33520508 + - -3.3691406 + - -3.9375 + - -0.76464844 + - 0.5126953 + - 3.0058594 + - -1.4169922 + - -0.14758301 + - 2.9179688 + - 0.7988281 + - 0.52978516 + - -2.7910156 + - 3.359375 + - 2.0585938 + - -1.4140625 + - -3.3203125 + - 3.6015625 + - -0.56884766 + - 3.9375 + - -2.7890625 + - -0.921875 + - -1.0517578 + - 0.8203125 + - 3.4902344 + - 2.4726563 + - -0.17346191 + - 0.94189453 + - -3.7363281 + - -6.0507813 + - -0.46191406 + - -1.4873047 + - 2.65625 + - 2.6914063 + - 0.81689453 + - 1.0429688 + - 2.1601563 + - 0.59814453 + - -0.07366943 + - 2.3574219 + - -1.8486328 + - 2.9550781 + - 0.99902344 + - -0.4560547 + - -0.3359375 + - -0.8046875 + - -0.6621094 + - 12.1953125 + - 0.52441406 + - 2.53125 + - 5.7734375 + - 7.8046875 + - -1.21875 + - 0.42993164 + - -1.0869141 + - 1.4628906 + - -2.6542969 + - -1.7949219 + - 1.34375 + - 0.66845703 + - 0.29956055 + - -2.5566406 + - -0.7207031 + - 1.0195313 + - 1.8886719 + - 1.9316406 + - 0.34399414 + - -0.17321777 + - -0.1821289 + - -0.7832031 + - -1.9394531 + - -2.1015625 + - -1.4257813 + - 1.2460938 + - -0.46191406 + - -2.4238281 + - -3.4238281 + - 2.7890625 + - 2.1503906 + - 1.9941406 + - 1.0136719 + - 0.22485352 + - -0.98291016 + - 1.9404297 + - -1.7470703 + - 0.74072266 + - 1.8251953 + - -1.4882813 + - 1.2548828 + - -1.7763672 + - -0.55859375 + - 3.9375 + - -0.7192383 + - 1.7089844 + - -2.6484375 + - -1.0927734 + - -2.9003906 + - 3.2207031 + - 1.0126953 + - -2.4003906 + - -1.1132813 + - 4.1015625 + - 1.8291016 + - 1.0341797 + - 1.5966797 + - 4.1914063 + - 0.8461914 + - -1.8164063 + - -1.6669922 + - 1.4746094 + - 1.5244141 + - 1.2060547 + - 4.1875 + - 2.5195313 + - 2.265625 + - 1.9580078 + - -1.4179688 + - -0.6538086 + - -1.8564453 + - 1.2441406 + - 0.19885254 + - -0.050201416 + - -1.1044922 + - 0.34765625 + - 1.390625 + - 0.10595703 + - 3.0839844 + - -0.97753906 + - 0.080322266 + - 0.86376953 + - -0.27001953 + - 23.46875 + - -3.4648438 + - -1.1455078 + - -4.2460938 + - -0.22766113 + - 0.7368164 + - 2.34375 + - -0.09429932 + - -4.7851563 + - 1.6826172 + - 2.5976563 + - -1.3603516 + - 3.3925781 + - 2.5390625 + - 1.9511719 + - 0.51953125 + - 1.6357422 + - -3.0820313 + - 1.7158203 + - 0.9614258 + - -2.2148438 + - 1.7001953 + - -3.6777344 + - 1.7763672 + - 0.0758667 + - 0.8208008 + - -2.2089844 + - 0.12011719 + - 2.3339844 + - -3.7714844 + - -0.77197266 + - 1.3144531 + - 2.078125 + - 2.1347656 + - 2.4082031 + - -1.5664063 + - 6.2851563 + - -0.035705566 + - 0.3269043 + - -0.6582031 + - -4.3398438 + - -3.5703125 + - 0.5024414 + - 4.9257813 + - 0.38110352 + - 0.20275879 + - -1.5664063 + - 1.7324219 + - 2.8144531 + - 3.9101563 + - -0.5703125 + - -1.8300781 + - 0.39135742 + - 8.6640625 + - -3.2226563 + - -1.21875 + - 0.6303711 + - -1.2597656 + - 1.1396484 + - 0.5097656 + - 1.3017578 + - -0.11853027 + - -0.11633301 + - -4.2382813 + - -3.5429688 + - -2.6660156 + - -3.125 + - -2.9941406 + - 0.49731445 + - -2.203125 + - -1.2890625 + - 3.2851563 + - -0.7158203 + - -1.8212891 + - 0.6801758 + - -3.3378906 + - -4.4023438 + - -0.29785156 + - 2.0722656 + - -2.6738281 + - -0.19897461 + - 1.1738281 + - 2.1875 + - 1.2285156 + - -1.1191406 + - -3.0839844 + - -1.4257813 + - -0.87158203 + - -2.9550781 + - 0.016738892 + - -0.5004883 + - -0.26733398 + - 4.171875 + - -1.1015625 + - 2.6386719 + - -3.3027344 + - -2.3066406 + - -1.2890625 + - -0.68310547 + - 1.1992188 + - -1.3095703 + - 1.4726563 + - 1.0214844 + - 0.8647461 + - 0.40307617 + - -1.2763672 + - -1.6074219 + - 1.5175781 + - -1.4238281 + - 1.6337891 + - 0.4814453 + - -0.33032227 + - 2.7382813 + - 0.9296875 + - 0.21643066 + - 1.2539063 + - -3.8339844 + - -2.6425781 + - -3.2421875 + - -1.3925781 + - 0.30249023 + - -0.22033691 + - 0.5292969 + - 1.0478516 + - 1.1650391 + - 1.2773438 + - -1.2050781 + - -2.421875 + - 1.1992188 + - 2.1015625 + - -2.7226563 + - 2.1171875 + - 0.45581055 + - 0.33129883 + - 1.2685547 + - 0.67285156 + - -5.5898438 + - -3.34375 + - -1.0898438 + - 1.5175781 + - 0.026779175 + - -2.2480469 + - -0.9560547 + - 4.9257813 + - -0.17370605 + - 1.3681641 + - 6.5820313 + - 2.5605469 + - -2.6855469 + - 0.83984375 + - -0.056915283 + - 6.015625 + - -4.9570313 + - -2.1777344 + - 0.9863281 + - -2.1269531 + - -0.57910156 + - -2.3925781 + - 1.8867188 + - -3.3476563 + - 3.1953125 + - -1.1894531 + - 0.7207031 + - 0.15515137 + - -0.5161133 + - -1.1982422 + - 0.96875 + - -0.23339844 + - -1.9394531 + - 5.9726563 + - 0.79003906 + - 2.4414063 + - -0.31469727 + - -4.46875 + - 2.4296875 + - 0.24865723 + - 1.3359375 + - -0.7138672 + - -1.3564453 + - -0.7661133 + - 1.1220703 + - -2.015625 + - -3.0722656 + - -0.030685425 + - 0.69677734 + - 1.7275391 + - 2.8183594 + - -2.3203125 + - 1.234375 + - 0.3095703 + - -2.7070313 + - 0.34692383 + - 3.5566406 + - 1.3251953 + - 5.75 + - 0.24768066 + - 0.06359863 + - 16.1875 + - -0.41845703 + - 2.3007813 + - -3.5507813 + - -0.90722656 + - -0.89746094 + - 0.5439453 + - 1.4785156 + - 4.1484375 + - -0.9238281 + - -3.5253906 + - -1.8232422 + - 0.87402344 + - 1.9189453 + - 1.0517578 + - -1.1347656 + - 4.4570313 + - -0.26879883 + - -0.66796875 + - 0.24414063 + - -1.6445313 + - 0.30395508 + - -1.5214844 + - -2.2949219 + - -1.6738281 + - 2.3652344 + - -0.22375488 + - -4 + - -3.1015625 + - 0.7397461 + - -0.9951172 + - -0.88134766 + - -1.8613281 + - -1.8925781 + - 0.17687988 + - -0.08227539 + - 3.0117188 + - 0.75683594 + - 2.7890625 + - 0.28637695 + - 1.9667969 + - -4.5898438 + - 0.88378906 + - 0.64941406 + - -0.06854248 + - 4.2070313 + - -1.3662109 + - -1.3671875 + - -2.0664063 + - -5.4882813 + - 2.1308594 + - 1.8994141 + - -0.31152344 + - 2.8789063 + - 4.703125 + - -1.640625 + - -0.17565918 + - -3.8339844 + - -0.13244629 + - -1.8339844 + - -0.77197266 + - -1.1074219 + - 1.7451172 + - -2.703125 + - -0.38671875 + - 1.0224609 + - 1.9111328 + - -4.953125 + - 3.3925781 + - 0.9248047 + - -0.57373047 + - -1.6894531 + - 4.6914063 + - 0.9428711 + - 1.1796875 + - 1.0107422 + - -1.9638672 + - -2.4433594 + - 1.6601563 + - 1.3613281 + - 2.390625 + - 0.17053223 + - 4.7617188 + - -1.6230469 + - -1.1416016 + - 0.96484375 + - -1.5556641 + - -0.76660156 + - -1.5439453 + - 0.62353516 + - -4.3476563 + - -0.82666016 + - 1.6621094 + - 1.9033203 + - -2.375 + - 2.5566406 + - -3.9316406 + - 2.6777344 + - 0.7910156 + - -0.7397461 + - 4.5976563 + - -0.8935547 + - -2.609375 + - 1.921875 + - 2.4296875 + - 3.3144531 + - 1.7685547 + - -1.0107422 + - -0.22399902 + - 0.45361328 + - 33.40625 + - 13.4609375 + - -9.1796875 + - 2.265625 + - -1.0498047 + - 1.4277344 + - -2.7285156 + - -4.171875 + - -0.36083984 + - -0.20532227 + - 1.9619141 + - 0.51708984 + - -0.3388672 + - 1.5126953 + - -2.7910156 + - 1.9707031 + - -1.0048828 + - 0.9091797 + - -2.6953125 + - 0.71533203 + - 1.8789063 + - 3.4160156 + - -1.3212891 + - -1.1416016 + - -0.22705078 + - -2.1503906 + - 0.08703613 + - -0.40356445 + - -4.6054688 + - 0.75439453 + - -0.12780762 + - -0.15905762 + - 1.421875 + - 2.4765625 + - 1.6376953 + - -4.375 + - -1.8544922 + - 2.0644531 + - -2.1660156 + - 1.2460938 + - 2.2285156 + - 1.5400391 + - -0.2800293 + - 4.2265625 + - -1.2050781 + - 0.29296875 + - -3.4941406 + - 2.1425781 + - 1.3056641 + - 0.51171875 + - 2.2910156 + - 8.734375 + - -0.5722656 + - -1.4316406 + - 1.7226563 + - -0.9472656 + - -0.84472656 + - 0.054107666 + - 1.4589844 + - 0.21362305 + - 2.9804688 + - 2.3964844 + - 1.203125 + - -3.9238281 + - -1.7451172 + - -1.1357422 + - 1.9345703 + - -0.8339844 + - -2.6875 + - 0.25439453 + - -2.9238281 + - -0.20739746 + - -1.5019531 + - -2.2675781 + - 0.92626953 + - -2.6699219 + - -0.18823242 + - 1.3486328 + - 5.4453125 + - 0.4140625 + - -1.7626953 + - -1.4208984 + - 1.6337891 + - 1.8632813 + - 1.6884766 + - 2.3789063 + - 1.1064453 + - 0.22314453 + - 1.9423828 + - -1.53125 + - 1.3662109 + - 0.50439453 + - -0.8911133 + - -1.0019531 + - 3.65625 + - 1.2099609 + - -1.3984375 + - 4.0351563 + - -1.9003906 + - 0.5229492 + - -3.4648438 + - -1.0595703 + - 0.75097656 + - 1.15625 + - 0.12231445 + - 0.48754883 + - 0.32348633 + - -2.3203125 + - -0.081970215 + - 1.484375 + - -3.2929688 + - 3.6777344 + - -0.6933594 + - 4.28125 + - 1.8056641 + - 2.8339844 + - -2.9140625 + - -1.3173828 + - 3.515625 + - 0.4248047 + - -2.3886719 + - -1.8857422 + - 0.875 + - 1.1064453 + - 3.609375 + - 1.3613281 + - -3.2714844 + - 2.0546875 + - 2.4140625 + - 0.1270752 + - -0.8769531 + - -1.2519531 + - -1.1103516 + - 1.2451172 + - 0.2758789 + - 0.30737305 + - -0.18188477 + - -3.4394531 + - 1.5400391 + - -1.2939453 + - -0.4375 + - 1.9580078 + - 1.7792969 + - -2.1367188 + - -0.2956543 + - -0.17468262 + - 2.0078125 + - -1.203125 + - -0.140625 + - -4.109375 + - 1.1669922 + - 1.3193359 + - -1.4697266 + - -1.4335938 + - 0.4091797 + - -0.91503906 + - -1.1445313 + - 0.41333008 + - 0.4038086 + - 2.1660156 + - 0.09411621 + - -2.5546875 + - 2.7890625 + - 1.7773438 + - -0.9394531 + - 0.4284668 + - 0.328125 + - 2.3417969 + - -0.12164307 + - -2.5566406 + - -0.50927734 + - -0.265625 + - -2.6074219 + - -1.3457031 + - 0.58691406 + - 0.71728516 + - 1.4130859 + - 1.96875 + - -1.1738281 + - -1.75 + - -0.6010742 + - 0.38598633 + - -0.52441406 + - 0.90283203 + - 1.5185547 + - -1.5732422 + - -0.068359375 + - 1.7675781 + - 1.7275391 + - -1.2802734 + - 2.3789063 + - 2.3203125 + - 1.7792969 + - 0.7207031 + - -2.4882813 + - -1.8632813 + - 2.9804688 + - 1.1787109 + - 0.92089844 + - -3.390625 + - -2.7675781 + - -1.4277344 + - -2.8476563 + - -0.42285156 + - 0.39453125 + - -12.4453125 + - -0.31469727 + - -0.46240234 + - 0.21875 + - -0.88916016 + - 0.5488281 + - -1.2509766 + - 1.6689453 + - 0.45922852 + - -1.7119141 + - 2.3417969 + - -5.375 + - 0.4868164 + - 0.32421875 + - -1.1748047 + - 1.3769531 + - 1.5244141 + - -2.0566406 + - -0.025665283 + - 3.4238281 + - 0.61816406 + - 1.8251953 + - -0.53515625 + - 9.390625 + - 1.4433594 + - -2.1425781 + - 0.7246094 + - -0.52197266 + - 0.8935547 + - -0.88916016 + - -0.08459473 + - -2.6640625 + - 6.75 + - 0.68066406 + - -1.7714844 + - 0.7470703 + - 1.0390625 + - -6.09375 + - 0.71484375 + - 0.29418945 + - 1.3671875 + - 0.44189453 + - 6.2929688 + - -0.5942383 + - -2.7695313 + - 1.8964844 + - 2.2207031 + - 2.4628906 + - 2.109375 + - 1.1445313 + - -2.8378906 + - 1.5419922 + - 1.8007813 + - -3.15625 + - -1.0839844 + - -0.3232422 + - -0.43164063 + - -3.1992188 + - -1.8183594 + - -3.2753906 + - -0.1986084 + - -3.8652344 + - 2.4101563 + - -1.6914063 + - -1.796875 + - 3.5683594 + - -2.4199219 + - 0.18859863 + - -1.6337891 + - -1.6347656 + - 2.0566406 + - -0.3544922 + - -1.3388672 + - 1.7558594 + - 1.6328125 + - -0.6225586 + - 0.6425781 + - 0.61083984 + - 2.1738281 + - 0.8647461 + - 3.7578125 + - 0.01953125 + - -0.26611328 + - -1.7851563 + - 2.6621094 + - 0.1842041 + - -2.0214844 + - -1.2861328 + - -1.5732422 + - -0.09051514 + - 5.2382813 + - 4.703125 + - -1.1425781 + - 1.9355469 + - 2.3378906 + - -0.7207031 + - -1.25 + - -0.4050293 + - 2.0273438 + - -1.9423828 + - 2.2753906 + - -3.4765625 + - 2.8359375 + - 0.7866211 + - -3.9609375 + - -0.10961914 + - -2.6640625 + - 3.25 + - 0.3005371 + - -5.5078125 + - -0.27075195 + - -1.765625 + - 1.6582031 + - 0.4284668 + - 0.68310547 + - 3.4550781 + - 0.47021484 + - 1.2822266 + - -0.31884766 + - -3.0898438 + - -1.6689453 + - -0.5917969 + - -3.7890625 + - 8.9140625 + - 1.1953125 + - 1.4628906 + - -0.5317383 + - 0.52783203 + - -1.5 + - 0.43896484 + - 1.1591797 + - -1.2998047 + - -5.4804688 + - -3.4003906 + - 4.6367188 + - -4.171875 + - 1.8056641 + - -1.84375 + - -2.8164063 + - 1.2988281 + - 0.89208984 + - -0.5800781 + - 0.27661133 + - 1.2519531 + - 1.1083984 + - -3.1777344 + - 0.07696533 + - -4.0429688 + - 1.703125 + - -1.59375 + - 1.2041016 + - -3.5976563 + - 0.8105469 + - -1.4296875 + - 0.93847656 + - -2.5 + - -1.0498047 + - 0.07159424 + - 2.2539063 + - 3.2402344 + - 0.5004883 + - 1.6611328 + - -1.6152344 + - 2.4199219 + - 1.2880859 + - -0.7167969 + - -1.1738281 + - -2.6914063 + - -0.23876953 + - 0.51708984 + - 2.5664063 + - -2.8828125 + - -0.09454346 + - -0.0020923615 + - 4.2304688 + - -0.010597229 + - -2.2207031 + - 0.36743164 + - 1.984375 + - -2.21875 + - -2.3183594 + - -0.9819336 + - 1.2138672 + - 1.9511719 + - -0.53466797 + - 0.7192383 + - -1.4638672 + - -0.29736328 + - 0.82910156 + - 3.0742188 + - -2.9179688 + - -2.7089844 + - 1.5957031 + - 1.8515625 + - 5.8125 + - 2.6269531 + - -1.5332031 + - 1.4589844 + - -0.59716797 + - 1.0800781 + - -1.6582031 + - -2.015625 + - -0.9116211 + - 1.2197266 + - -1.9160156 + - 1.1708984 + - -1.0478516 + - 3.5195313 + - 4.3398438 + - -0.51708984 + - 0.17626953 + - -0.23376465 + - -1.4296875 + - -3.3242188 + - -2.8652344 + - -0.8925781 + - 1.3798828 + - -1.0742188 + - 0.85595703 + - 2.1699219 + - 1.5449219 + - 1.4101563 + - -0.4128418 + - 0.86865234 + - -4.921875 + - -0.9008789 + - -8.3046875 + - -1.734375 + - -2.0214844 + - -2.2714844 + - -2.90625 + - -0.96777344 + - 2.8417969 + - -6.7421875 + - -4.4335938 + - 24.671875 + - -1.7294922 + - -1.6435547 + - -0.6557617 + - -0.17883301 + - 0.50634766 + - 2.3261719 + - 3.0898438 + - -2.15625 + - 1.1416016 + - 1.6894531 + - -0.03488159 + - 0.88378906 + - -1.4248047 + - 0.42895508 + - 0.09020996 + - -3.4160156 + - 0.7285156 + - 4.890625 + - -0.75 + - -0.55126953 + - -1.4794922 + - -2.4765625 + - 0.6567383 + - -0.34155273 + - 3.7578125 + - 0.36376953 + - -2.0878906 + - 2.2304688 + - -0.27441406 + - 1.5878906 + - -2.5488281 + - 0.77246094 + - 0.4033203 + - 1.2587891 + - -0.55615234 + - 1.6416016 + - 2.984375 + - 4.1796875 + - 0.13500977 + - -0.85595703 + - -0.55322266 + - 2.0449219 + - -3.890625 + - 0.7788086 + - -0.2800293 + - 3.2695313 + - 1.1845703 + - -2.0371094 + - 0.7270508 + - 2.3496094 + - 0.83691406 + - -3.1035156 + - -1.3164063 + - -2.0175781 + - -1.6425781 + - -2.9003906 + - -0.42822266 + - 2.3769531 + - -3.4570313 + - -2.8359375 + - 1.1767578 + - -0.5722656 + - 2.4550781 + - -2.5039063 + - -0.0993042 + - -1.1953125 + - -0.012275696 + - -2.7324219 + - 1.5888672 + - -4.6132813 + - -4.3554688 + - -0.115478516 + - -1.5566406 + - 1.4550781 + - 8.6328125 + - 0.89697266 + - 3.6796875 + - -4.7578125 + - 1.1884766 + - -0.67285156 + - 1.3085938 + - 0.9038086 + - 0.6767578 + - -0.16455078 + - -4.7695313 + - 0.5332031 + - 0.76171875 + - 2.5664063 + - -0.84033203 + - -2.8378906 + - 0.4453125 + - -0.084106445 + - -0.55078125 + - -2.4765625 + - 1.4394531 + - 2.109375 + - -2.5664063 + - 5.3554688 + - 0.3088379 + - 0.37426758 + - 0.9243164 + - 0.53271484 + - 4.0078125 + - 0.27270508 + - 2.0820313 + - -1.8183594 + - -0.5209961 + - 0.54345703 + - 2.3847656 + - 7.1640625 + - 1.7158203 + - 1.0996094 + - -1.0556641 + - 3.5527344 + - 0.05078125 + - 1.7119141 + - 1.7900391 + - 2.2285156 + - -0.30566406 + - 3.09375 + - -0.6933594 + - 3.5976563 + - -4.484375 + - -1.4716797 + - -2.0273438 + - 0.9428711 + - 0.004463196 + - 1.3388672 + - -0.42236328 + - 4.0742188 + - -1.9814453 + - -2.109375 + - -0.8417969 + - 0.016311646 + - 2.9804688 + - 2.4042969 + - 0.7421875 + - 1.1767578 + - 3.2851563 + - 4.1992188 + - 0.7553711 + - -0.578125 + - 1.3769531 + - 2.078125 + - -4.9882813 + - -4.578125 + - -0.96484375 + - 3.3046875 + - -1.5917969 + - -0.75097656 + - -1.9638672 + - 2.8613281 + - 3.2753906 + - 3.2617188 + - -0.8564453 + - -0.28076172 + - 1.3603516 + - -1.3505859 + - -0.44799805 + - 2.5859375 + - 2.6894531 + - -0.9707031 + - -0.359375 + - 0.41503906 + - 1.7861328 + - 0.39282227 + - -0.1227417 + - -0.35986328 + - 1.2529297 + - 2.1425781 + - 0.90625 + - -2.1171875 + - -0.32250977 + - -3.6425781 + - -4.8789063 + - -0.09008789 + - 2.5820313 + - -0.8569336 + - -0.3659668 + - 3.1269531 + - -2.1777344 + - 2.0078125 + - 0.55859375 + - -0.9863281 + - -2.9140625 + - 1.4023438 + - -0.52001953 + - 3.0664063 + - 3.3515625 + - 1.2978516 + - -6.8359375 + - -0.47705078 + - -0.4194336 + - -5.390625 + - 2.1230469 + - -2.6640625 + - 2.4316406 + - 1.3896484 + - -6.4453125 + - 1.3085938 + - -0.65478516 + - -2.8007813 + - -2.4277344 + - 1.1220703 + - -0.37695313 + - 2.0820313 + - -0.42700195 + - -0.81347656 + - -33.90625 + - -2.5253906 + - -2.4140625 + - -0.39160156 + - -1.4277344 + - 2.0917969 + - 2.4101563 + - -4.7539063 + - -4.6601563 + - -0.90478516 + - 1.1181641 + - -1.4375 + - -1.0966797 + - 6.78125 + - 0.48706055 + - 4.7304688 + - -1.6582031 + - 4.3242188 + - -0.24768066 + - -1.4345703 + - 0.11437988 + - -0.453125 + - 1.0810547 + - 1.8134766 + - -0.4345703 + - -4.015625 + - -1.2519531 + - 0.05355835 + - 1.8691406 + - -0.36376953 + - 0.57177734 + - -1.2675781 + - 0.36206055 + - -0.5605469 + - -3.4941406 + - 4.8632813 + - -3.3027344 + - -0.8066406 + - -2.328125 + - -3.4863281 + - 0.029846191 + - 1.9746094 + - 2.6289063 + - 0.015411377 + - 0.25048828 + - 1.7070313 + - 4 + - -0.63671875 + - 1.9033203 + - -2.8378906 + - 2.6796875 + - -1.0927734 + - 0.2626953 + - -3.921875 + - 3.0117188 + - 2.6113281 + - -2.96875 + - 3.4550781 + - 2.6816406 + - 0.6640625 + - -1.0654297 + - -4.015625 + - 3.0058594 + - 1.3544922 + - 1.5175781 + - -0.38891602 + - 0.040161133 + - -5.0078125 + - 0.82666016 + - 1.3818359 + - -2.2207031 + - 0.7763672 + - 2.6074219 + - 0.4038086 + - -0.56103516 + - 2.2050781 + - -1.3994141 + - -2.6972656 + - 0.80566406 + - 0.42236328 + - -1.2441406 + - 2.0898438 + - 0.46972656 + - 1.0478516 + - 3.0527344 + - 0.8486328 + - -1.28125 + - 1.1132813 + - 2.0488281 + - 0.74658203 + - -2.3789063 + - 2.7949219 + - -1.0380859 + - 8.5703125 + - -1.4736328 + - 2.0292969 + - -0.59472656 + - -0.88183594 + - -0.4428711 + - -0.6660156 + - 2.8222656 + - 0.04714966 + - 3.53125 + - 1.0810547 + - 2.1230469 + - -2.1484375 + - -2.4238281 + - 3.5800781 + - -0.16760254 + - 5.9179688 + - -1.0576172 + - 5.9179688 + - -2.0292969 + - -0.9536133 + - -1.4013672 + - 1.5 + - 0.38745117 + - 0.7910156 + - -1.5820313 + - 4.1210938 + - 2.96875 + - 2.4902344 + - 4.6875 + - -0.7207031 + - -2.0996094 + - 1.7158203 + - -1.4609375 + - -4.0703125 + - -3.109375 + - 0.45117188 + - -4.3554688 + - -0.16455078 + - 1.7939453 + - 3.7363281 + - -1.1025391 + - -0.6791992 + - -30.3125 + - -0.8564453 + - -0.026504517 + - -0.66748047 + - 0.76416016 + - 3.5742188 + - 0.79296875 + - 1.8681641 + - 0.12719727 + - 2.0957031 + - 0.010040283 + - -0.14733887 + - -2.9140625 + - -2.2050781 + - 1.3681641 + - -2.3769531 + - 0.5546875 + - 0.07476807 + - -0.63378906 + - -1.5576172 + - 1.4462891 + - 10.890625 + - 3.125 + - -1.2587891 + - 1.1845703 + - 0.9394531 + - -0.8461914 + - 2.3105469 + - 0.3803711 + - -2.6035156 + - 1.2958984 + - 0.2529297 + - -2.2011719 + - 0.34106445 + - 0.37817383 + - -2.0605469 + - -3.2304688 + - 0.1685791 + - -0.5493164 + - -1.9033203 + - 5.6289063 + - 1.6601563 + - -1.2236328 + - 3.1679688 + - 1.0351563 + - 1.2753906 + - 0.0011701584 + - 3.140625 + - 0.6459961 + - -1.7978516 + - 0.19299316 + - 3.5117188 + - -2.3925781 + - 2.4589844 + - -1.5361328 + - -2.0097656 + - -0.9711914 + - 4.3320313 + - 0.4501953 + - -4.078125 + - 1.640625 + - -0.49487305 + - -0.68310547 + - -1.8125 + - -2.5019531 + - 0.07867432 + - -3.75 + - 0.7373047 + - 3.0117188 + - -6.9453125 + - 0.48876953 + - -1.3125 + - -3.3691406 + - -3.015625 + - 1.7744141 + - -0.86816406 + - -3.1210938 + - 0.06555176 + - 0.18383789 + - -0.3972168 + - -1.3349609 + - -0.6455078 + - 1.8955078 + - 1.7519531 + - 6.6796875 + - -1.4863281 + - -0.46948242 + - -1.2734375 + - -1.8232422 + - 2.0605469 + - -1.9619141 + - -0.69970703 + - 2.0683594 + - 0.15258789 + - 3.4492188 + - 0.89160156 + - 0.92285156 + - -1.0654297 + - 3.0019531 + - -0.6899414 + - 1.6308594 + - 0.5473633 + - -2.7011719 + - -1.1396484 + - 0.41479492 + - -0.5834961 + - -0.2142334 + - 4.5625 + - 1.4414063 + - -0.11456299 + - -1.6738281 + - 4.5039063 + - -0.5004883 + - 2.0371094 + - -2.7578125 + - -1.890625 + - 2.1015625 + - 2.5175781 + - -0.82128906 + - 0.8779297 + - 1.6621094 + - -1.1992188 + - -1.9658203 + - -1.2460938 + - 0.078125 + - -0.46875 + - -4.9023438 + - 0.04547119 + - -1.0234375 + - 3.3046875 + - 0.24829102 + - 0.66259766 + - -0.42407227 + - -0.1274414 + - 1.1132813 + - -0.35083008 + - -0.6723633 + - -0.47094727 + - -1.1416016 + - -4.4179688 + - 0.76953125 + - 4.2070313 + - 0.11364746 + - 1.3613281 + - 1.8681641 + - 0.6166992 + - 3.90625 + - -1.5507813 + - 0.046295166 + - 2.2636719 + - 2.2480469 + - 2.8027344 + - -1.9775391 + - 1.8564453 + - -1.6806641 + - 1.6044922 + - -2.3652344 + - 0.18908691 + - 1.0859375 + - 2.8300781 + - -0.6635742 + - 2.6914063 + - 2.7792969 + - 1.3203125 + - 2.5488281 + - -2.40625 + - 4.4882813 + - -2.4199219 + - -0.5385742 + - 1.7001953 + - -0.63720703 + - -2.5058594 + - 1.7324219 + - 0.103759766 + - -2.2871094 + - -1.5810547 + - -1.5009766 + - -1.6982422 + - -2.875 + - 3.1425781 + - 1.8691406 + - 1.7539063 + - -2.7480469 + - -0.32080078 + - -0.13049316 + - 2.4902344 + - 0.33203125 + - 2.4160156 + - -3.0175781 + - -0.18688965 + - 0.44848633 + - 1.0439453 + - 0.171875 + - 4.0351563 + - -0.09259033 + - 1.421875 + - -0.7915039 + - -1.9824219 + - -0.921875 + - 1.3632813 + - 1.0478516 + - 0.6333008 + - 1.2431641 + - -3.453125 + - 0.17626953 + - 1.7451172 + - 0.6254883 + - -0.36523438 + - 1.5126953 + - -1.1552734 + - -2.4199219 + - -5.5390625 + - -4.0976563 + - 6.078125 + - -1.3671875 + - -0.9116211 + - 1.2001953 + - -1.7539063 + - 2.0761719 + - -1.6425781 + - -2.3925781 + - -3.8867188 + - -2.203125 + - -2.640625 + - 0.74072266 + - 0.27661133 + - 1.4482422 + - -0.7949219 + - -1.1552734 + - 0.75683594 + - 0.123291016 + - -3.5039063 + - -1.7607422 + - -1.4736328 + - 3.1015625 + - 2.0839844 + - 6.2890625 + - -0.44213867 + - 2.5195313 + - -1.7119141 + - 1.8369141 diff --git a/backends/candle/tests/snapshots/test_flash_qwen2__qwen2_batch.snap b/backends/candle/tests/snapshots/test_flash_qwen2__qwen2_batch.snap new file mode 100644 index 00000000..7a252f73 --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_qwen2__qwen2_batch.snap @@ -0,0 +1,4613 @@ +--- +source: backends/candle/tests/test_flash_qwen2.rs +assertion_line: 61 +expression: embeddings_batch +--- +- - -4.9882813 + - 6.7734375 + - -1.6269531 + - -3.21875 + - 7.078125 + - -0.5107422 + - -2.75 + - -1.5371094 + - 4.9257813 + - 0.9790039 + - 6.03125 + - -4.0195313 + - -4.9648438 + - 0.9160156 + - 0.63916016 + - -0.90771484 + - 5.375 + - -0.3293457 + - 2.8535156 + - 2.7773438 + - 0.25170898 + - -4.671875 + - 1.7490234 + - -1.7080078 + - 2.1933594 + - -0.7470703 + - -5.6445313 + - 0.31762695 + - 6.4375 + - 1.9873047 + - -5.265625 + - 0.6816406 + - 0.89404297 + - 12.1640625 + - -3.3867188 + - -5.015625 + - -2.890625 + - 1.3457031 + - -0.47094727 + - -1.1201172 + - 1.2382813 + - -0.6855469 + - -1.5957031 + - -0.39916992 + - 10.4921875 + - 5.3867188 + - -7.9570313 + - -5.6914063 + - 2.9589844 + - -2.2753906 + - 4.1210938 + - -0.3178711 + - -1.15625 + - 5.828125 + - 3.4746094 + - -0.51953125 + - 1.9931641 + - 1.15625 + - -3.9140625 + - -0.30517578 + - 4.390625 + - 0.96191406 + - -5.0078125 + - 5.8242188 + - 1.9091797 + - 2.2949219 + - -3.2460938 + - -3.9570313 + - 5.3789063 + - 6.4648438 + - 6.9375 + - 7.6210938 + - 0.76464844 + - -0.41430664 + - -3.7480469 + - 3.1015625 + - -0.22961426 + - -3.3007813 + - -5.2890625 + - -8.6953125 + - 2.3320313 + - -0.9013672 + - -5.3789063 + - -10.9453125 + - -0.20263672 + - -3.359375 + - -6.1367188 + - 2.6777344 + - -2.7753906 + - 2.0957031 + - -2.3105469 + - -2.7382813 + - -17.140625 + - 5.2070313 + - 3.4707031 + - -2.0371094 + - 0.82421875 + - -3.5566406 + - 2.1445313 + - -4.8164063 + - -1.2802734 + - 0.42407227 + - 0.98095703 + - 1.3271484 + - -1.9667969 + - 0.36328125 + - -3.90625 + - 5.0859375 + - -1.7578125 + - -1.8056641 + - -5.6210938 + - -2.875 + - -2.9453125 + - -1.5351563 + - 3.1445313 + - 3.8066406 + - 0.78759766 + - 2.8574219 + - 3.6015625 + - 10.6171875 + - -0.24499512 + - -0.52734375 + - -0.61816406 + - -2.9453125 + - -1.0263672 + - 3.359375 + - 6.6640625 + - -5.4179688 + - 0.9326172 + - 5.09375 + - -3.796875 + - 2.3691406 + - -3.9375 + - 6.0117188 + - 1.1669922 + - 0.07067871 + - -0.63916016 + - -7.7304688 + - -0.11804199 + - -5.1992188 + - -0.9707031 + - 2.8730469 + - 0.36157227 + - 4.0898438 + - -3.59375 + - -0.14904785 + - 6.3164063 + - 1.0546875 + - 12.78125 + - 5.265625 + - 2.4238281 + - -0.40429688 + - 2.5800781 + - -2.7871094 + - 0.19958496 + - -0.4580078 + - -4.5585938 + - -7.4570313 + - 0.7397461 + - -2.4921875 + - 2.3066406 + - 6.7929688 + - 5.4023438 + - -9.0859375 + - -0.38134766 + - 5.0117188 + - 3.9003906 + - 4.3515625 + - -3.7050781 + - 5.2226563 + - -4.4726563 + - -3.5234375 + - -3.5878906 + - 3.2519531 + - -4.1484375 + - 0.6220703 + - 0.796875 + - -0.8642578 + - -4.4023438 + - 7.171875 + - -2.1464844 + - -5.0898438 + - -3.7910156 + - 9.359375 + - 1.7636719 + - 2.4023438 + - -3.3632813 + - -0.3083496 + - 1.5644531 + - 8.6015625 + - 1.6787109 + - 3.1347656 + - 0.828125 + - -1.140625 + - 7.734375 + - 1.7255859 + - 0.40942383 + - -6.578125 + - 4.8867188 + - 8.0625 + - 3.3789063 + - 4.3359375 + - 1.0917969 + - -7.2265625 + - 11.5078125 + - 7.2929688 + - -0.17590332 + - -12.3046875 + - -1.6904297 + - -1.0439453 + - -6.5117188 + - -1.4707031 + - 3.1171875 + - -6.1835938 + - -0.48608398 + - 0.20043945 + - -2.1621094 + - -14.5859375 + - -2.4316406 + - -7.3242188 + - 2.8027344 + - -19.578125 + - 1.2392578 + - -0.20324707 + - -1.3583984 + - -3.8515625 + - 2.2460938 + - -0.011695862 + - -3.9257813 + - 5.6132813 + - 7.421875 + - -2.6035156 + - 1.0546875 + - -3.15625 + - -0.39282227 + - -1.7597656 + - -10.796875 + - -8.1875 + - -0.53271484 + - 1.5058594 + - 1.9404297 + - -0.18969727 + - 0.14782715 + - 1.4873047 + - -1.9814453 + - 2.9199219 + - -5.5859375 + - 0.45458984 + - -0.087768555 + - -1.2929688 + - -6.359375 + - -3.5957031 + - -3.4257813 + - -1.75 + - 6.2070313 + - 5.6796875 + - 2.3300781 + - 2.0546875 + - -0.85839844 + - 6.0039063 + - 6.4101563 + - 1.9902344 + - 0.55322266 + - -1.5361328 + - 0.30200195 + - 6.3828125 + - 4.6679688 + - 3.1835938 + - -10.171875 + - -1.8203125 + - -4.0351563 + - -5.3164063 + - 0.97802734 + - -3.1679688 + - 8.0703125 + - 0.1373291 + - 1.2431641 + - -0.47998047 + - 3.6601563 + - -6.7265625 + - -1.1728516 + - -1.5908203 + - 0.23620605 + - 5.5898438 + - 4.5234375 + - -5.7226563 + - -4.40625 + - 5.0234375 + - 1.5634766 + - 0.6376953 + - 4.3320313 + - -2.2246094 + - -1.6318359 + - -0.1784668 + - -7 + - -1.6015625 + - 0.10180664 + - 3.1777344 + - 4.5351563 + - 1.7783203 + - 9.765625 + - -0.8173828 + - 1.7431641 + - 0.5605469 + - -1.4628906 + - 5.53125 + - -5.7578125 + - -0.7885742 + - -4.2226563 + - -6.1171875 + - -0.27783203 + - 3.5566406 + - -1.7841797 + - 0.12915039 + - -1.7714844 + - -5.046875 + - -0.14331055 + - 4.3710938 + - -3.421875 + - -1.6601563 + - -2.8886719 + - -4.21875 + - 7.5625 + - -6.5195313 + - -4.1289063 + - 4.3203125 + - 2.7089844 + - -0.018585205 + - 2.265625 + - 2.2285156 + - -2.5683594 + - -5.6679688 + - -4.3085938 + - 0.05795288 + - 5.4296875 + - -1.515625 + - -1.5429688 + - -3.8125 + - 4.3242188 + - -2.0351563 + - 6.0898438 + - -8.421875 + - 1.3779297 + - 5.9804688 + - -2.3671875 + - -1.8222656 + - 0.30078125 + - 3.3515625 + - 5.6367188 + - 0.91796875 + - -4.109375 + - 0.05508423 + - 2.5761719 + - -5.8984375 + - -0.72998047 + - 3.875 + - -0.97998047 + - 9.25 + - 0.640625 + - 5.125 + - -7.7734375 + - -0.4169922 + - 5.8203125 + - 0.023406982 + - -4.9765625 + - 3.3613281 + - 2.6699219 + - 1.2724609 + - 1.9111328 + - -0.86621094 + - 1.2138672 + - -0.8588867 + - 0.053955078 + - 2.6777344 + - 1.3916016 + - -1.3056641 + - 9.7890625 + - -4.0390625 + - 8.625 + - 4.1835938 + - 1.5400391 + - -7.9414063 + - 2.4550781 + - -0.32177734 + - -1.7421875 + - -2.6972656 + - -1.7070313 + - -6.2539063 + - 1.2714844 + - 5.6132813 + - -1.7275391 + - 2.8261719 + - 7.0585938 + - -6.4453125 + - 1.7128906 + - 2.1816406 + - 2.4511719 + - -6.5351563 + - -1.2958984 + - 8.484375 + - 0.90234375 + - -5.25 + - -0.9995117 + - -1.2177734 + - 2.0703125 + - 0.79785156 + - -2.8261719 + - 1.6298828 + - -4.7148438 + - 9.40625 + - -0.09173584 + - 3.0546875 + - 0.1574707 + - 2.953125 + - 3.7773438 + - -3.0742188 + - -8.9375 + - 9.046875 + - 6.8203125 + - -1.7255859 + - 0.2626953 + - -5.984375 + - 2.5605469 + - -1.8837891 + - 2.0429688 + - 1.4042969 + - 1.9941406 + - -1.1591797 + - 2.6152344 + - 4.703125 + - -5.7460938 + - 0.14221191 + - -4.7539063 + - 4.578125 + - 5.7109375 + - -13.2734375 + - 1.0605469 + - 0.42138672 + - -3.5136719 + - 9.265625 + - 12.375 + - -0.6269531 + - -0.1352539 + - 5.5 + - 2.8027344 + - -0.9560547 + - 1.4589844 + - 3.3085938 + - 0.44677734 + - -0.15759277 + - 1.1865234 + - -6.4414063 + - 0.11468506 + - 2.5605469 + - -6.6953125 + - 0.7290039 + - -0.9814453 + - -0.4482422 + - 3.6191406 + - -11.109375 + - -2.4199219 + - -0.37817383 + - -4.4023438 + - 0.5107422 + - -1.9541016 + - -1.9423828 + - 4.6523438 + - 0.53466797 + - -1.1777344 + - -2.8515625 + - 1.3115234 + - 3.4199219 + - 2.6503906 + - -5.1796875 + - 0.5048828 + - -3.7246094 + - 0.83984375 + - -2.8574219 + - 0.23120117 + - 24.703125 + - 0.38232422 + - -3.6171875 + - -1.5263672 + - -1.0390625 + - 4.734375 + - -5.2539063 + - -0.95703125 + - 4.921875 + - -5.5898438 + - -3.3417969 + - -1.3525391 + - -0.8027344 + - 2.8535156 + - 7.7734375 + - 0.6699219 + - 4.7070313 + - -3.3847656 + - -3.4589844 + - -1.9072266 + - 0.2685547 + - 3.4707031 + - -3.1367188 + - -6.328125 + - 2.5371094 + - -1.0742188 + - -6.953125 + - -3.6738281 + - -7.65625 + - 5.046875 + - 2.3125 + - 4.5820313 + - 1.3212891 + - 13.640625 + - -3.5839844 + - 2.8710938 + - -5.4140625 + - -0.63378906 + - -0.013664246 + - 1.6123047 + - 1.6660156 + - 0.81933594 + - 2.390625 + - 0.98779297 + - -0.5605469 + - 6.3632813 + - 1.7509766 + - -9.1328125 + - 4.7109375 + - -7.0703125 + - 1.8564453 + - 7.3007813 + - -1.6103516 + - 0.048553467 + - 0.42163086 + - 2.2148438 + - 5.765625 + - 0.3413086 + - 0.67822266 + - 6.0585938 + - 1.4267578 + - -0.82128906 + - 1.7109375 + - -3.1972656 + - -1.5332031 + - 4.0234375 + - -2.8535156 + - 3.7539063 + - -3.4824219 + - 8.328125 + - 1.3730469 + - -2.9941406 + - -8.578125 + - 5.8046875 + - -2.8417969 + - -5.7773438 + - -1.1640625 + - -0.9033203 + - 4.0039063 + - -0.3083496 + - -3.1113281 + - -1.1943359 + - 7.1796875 + - -3.7792969 + - 7.3203125 + - 2.7539063 + - -1.5244141 + - -1.8544922 + - 2.2890625 + - 1.4609375 + - -9.1171875 + - -3.3105469 + - 4.484375 + - 3.4863281 + - 8.3984375 + - -1.7675781 + - -2.0234375 + - 8.4453125 + - 3.3222656 + - 6.2148438 + - 3.4746094 + - 4.8085938 + - -2.5410156 + - -0.58251953 + - -0.090148926 + - -2.890625 + - -0.17236328 + - -5.3554688 + - -5.8007813 + - -2.40625 + - 2.78125 + - -1.1171875 + - 6.5273438 + - 4.3867188 + - -2.9414063 + - 0.3076172 + - 6.0117188 + - -0.32128906 + - -2.9785156 + - -1.1113281 + - 3.5566406 + - 7.1875 + - 3.7851563 + - -2.5820313 + - 0.12878418 + - 7.1367188 + - 9.9921875 + - -0.06323242 + - 0.703125 + - 0.70166016 + - -0.7714844 + - -2.2695313 + - 0.033081055 + - 0.029953003 + - 6.6523438 + - 2.6367188 + - -3.8769531 + - -4.7773438 + - -5.1367188 + - 4.796875 + - -2.0136719 + - 3.34375 + - -3.4160156 + - -5.078125 + - 0.74902344 + - 2.3574219 + - -1.8564453 + - 1.9130859 + - -3.640625 + - -3.2773438 + - 1.1289063 + - 1.7148438 + - -1.8642578 + - 4.4296875 + - 0.4741211 + - 1.3945313 + - -5.5742188 + - -4.109375 + - -0.8774414 + - -7.5585938 + - -3.9628906 + - 7.3789063 + - -0.8852539 + - -0.62402344 + - -2.0722656 + - -3.5429688 + - 5.9609375 + - 8.21875 + - 3.890625 + - -3.3476563 + - -1.4951172 + - 2.9648438 + - 0.18395996 + - -3.9511719 + - -4.3398438 + - -2.3964844 + - -1.3242188 + - -0.8041992 + - -2.7441406 + - -1.4892578 + - 7.1210938 + - -6.9375 + - -2.296875 + - -2.4550781 + - 6.3242188 + - 1.0410156 + - -4.59375 + - -0.5957031 + - -0.8564453 + - 7.0195313 + - 1.7265625 + - 4.515625 + - 2.6054688 + - 5.5703125 + - -3.0195313 + - -3.1523438 + - 2.2929688 + - -4.4414063 + - 6.46875 + - 4.9375 + - -1.9814453 + - 4.4453125 + - 1.5048828 + - 4.5585938 + - -5.0117188 + - 1.3818359 + - 5.90625 + - -6.7695313 + - -1.9111328 + - -0.071777344 + - 0.9746094 + - -0.8261719 + - -1.3583984 + - 2.1132813 + - -3.2734375 + - 4.6132813 + - 3.1328125 + - 0.60839844 + - 3.640625 + - -4.6992188 + - -2.4726563 + - 1.2744141 + - 2.1425781 + - -0.7441406 + - 0.024169922 + - -2.4355469 + - -3.28125 + - 0.57373047 + - -7.5195313 + - -6.2070313 + - 4.7226563 + - 6.1914063 + - 8.3515625 + - 12.2421875 + - -2.53125 + - -1.2783203 + - -2.5019531 + - 0.6977539 + - 2.1933594 + - -1.5917969 + - 1.9853516 + - 0.14929199 + - -3.9550781 + - -1.8896484 + - 8.78125 + - 0.7001953 + - 7.5625 + - -4.9570313 + - -6.9882813 + - 5.9453125 + - -1.8261719 + - 5.9882813 + - 3.2597656 + - 0.9448242 + - -8.3203125 + - -2.0175781 + - -2.5527344 + - 1.1171875 + - -3.6699219 + - 3.6796875 + - 3.5019531 + - 2.9042969 + - -4.9257813 + - 5.4414063 + - -1.0283203 + - -1.8310547 + - -4.5351563 + - 6.1914063 + - -3.5488281 + - 1.0585938 + - -4.3867188 + - 0.074645996 + - 7.7734375 + - 6.8945313 + - -5.1367188 + - -0.5361328 + - 3.4316406 + - -2.5214844 + - 1.7695313 + - 0.6152344 + - -1.7314453 + - -2.2070313 + - -2.2402344 + - -4.0742188 + - -0.6567383 + - -2.8925781 + - 1.6826172 + - -4.6640625 + - -4.1601563 + - 3.5527344 + - 3.8261719 + - -0.7451172 + - -0.43188477 + - 1.5214844 + - 0.14746094 + - 1.9335938 + - 6.421875 + - -0.24707031 + - 7.6679688 + - -5.765625 + - 7.8671875 + - 0.8486328 + - 2.9960938 + - 1.3359375 + - 3.6855469 + - -3.7617188 + - 3.7382813 + - -6.0234375 + - -6.40625 + - 1.3740234 + - 1.9501953 + - 3.1679688 + - -0.5288086 + - -1.0214844 + - -4.5351563 + - 9.4375 + - -5.8984375 + - 8 + - 3.6210938 + - -15.5859375 + - -2.7734375 + - 1.0527344 + - 3.0488281 + - -7.7148438 + - -4.7148438 + - 1.1132813 + - -0.6948242 + - -5.7929688 + - 3.9042969 + - 10.0625 + - 0.10675049 + - -4.1992188 + - 1.2373047 + - 1.3027344 + - -0.26367188 + - 0.115478516 + - 21.40625 + - 1.1445313 + - -1.7099609 + - -0.13208008 + - 2.6171875 + - -4.9335938 + - 6.8164063 + - 2.7988281 + - -2.1015625 + - -5.8007813 + - -4.8515625 + - 0.9658203 + - 1.8544922 + - 0.90283203 + - -1.2851563 + - 2.1660156 + - -0.25219727 + - 0.020111084 + - -5.4804688 + - -2.8789063 + - 3.1835938 + - -4.2070313 + - -2.7792969 + - -1.0927734 + - 0.67626953 + - -1.7822266 + - 0.8491211 + - -9.9140625 + - -1.6845703 + - -1.7011719 + - 1.8603516 + - 5.21875 + - -0.21923828 + - -0.1303711 + - -3.2890625 + - 3.203125 + - 0.4099121 + - 1.0439453 + - 1.7529297 + - 6.2148438 + - 0.9067383 + - 2.5820313 + - 1.8457031 + - -0.9951172 + - -0.27026367 + - -2.7050781 + - -5.828125 + - -1.5742188 + - 5.6796875 + - -1.8222656 + - 5.390625 + - 4.8125 + - -2.6464844 + - -1.1611328 + - 0.83154297 + - -1.1591797 + - -3.9667969 + - 6.53125 + - 1.890625 + - -3.125 + - 3.7128906 + - -0.37451172 + - -10.171875 + - 0.27197266 + - 4.375 + - 2.171875 + - 4.0820313 + - 0.96191406 + - 6.5742188 + - 1.1435547 + - 3.4101563 + - 14.1484375 + - 2.0058594 + - -6.46875 + - -5.5351563 + - -2.3808594 + - 5.1484375 + - -2.9238281 + - -3.0195313 + - 2.390625 + - -1.4082031 + - 2.9199219 + - -1.7109375 + - 2.4238281 + - 5.2421875 + - -1.5576172 + - 3.0644531 + - 9.1953125 + - -6.7304688 + - 0.80126953 + - -0.8017578 + - -1.3261719 + - 0.9580078 + - 3.1933594 + - 3.2617188 + - -10.828125 + - -5.5234375 + - 4.6445313 + - -2.640625 + - -4.7734375 + - 0.61279297 + - 4.0820313 + - -0.9604492 + - -5.203125 + - 0.64453125 + - -0.8691406 + - -0.31176758 + - -2.9414063 + - -3.9609375 + - -6.171875 + - 0.4567871 + - -0.5551758 + - -4.7070313 + - 4.1835938 + - -2.7480469 + - 2.9570313 + - 0.69677734 + - 3.5410156 + - 3.2050781 + - -1.5 + - -3.6210938 + - -0.8125 + - 0.7993164 + - 0.234375 + - -1.6123047 + - 6.1835938 + - 4.0117188 + - 2.1601563 + - -4.8125 + - 0.29003906 + - 6.5546875 + - -0.56884766 + - -3.1816406 + - 4.7617188 + - -4.2578125 + - -0.0072288513 + - 4.6445313 + - -4.40625 + - -0.7939453 + - -5.5820313 + - -8.15625 + - -6.9921875 + - -4.0664063 + - -0.8754883 + - 0.9082031 + - -7.7304688 + - -1.1416016 + - -3.3574219 + - -7.6796875 + - -1.3916016 + - -3.9472656 + - 5.5429688 + - -2.8222656 + - -5.3554688 + - 0.6171875 + - -0.82177734 + - -0.1071167 + - 2.5546875 + - -4.1914063 + - 0.03567505 + - -1.4912109 + - -18.234375 + - -3.4882813 + - -0.61621094 + - -2.9511719 + - -2.3105469 + - -2.7207031 + - -4.4453125 + - 0.22436523 + - 3.4179688 + - 2.2519531 + - 3.9589844 + - 0.53515625 + - 0.16992188 + - -9.9765625 + - -1.6142578 + - -1.0683594 + - 2.5488281 + - 5.4765625 + - 3.3320313 + - 1.9384766 + - -5.3203125 + - -0.64501953 + - 1.9863281 + - -2.2285156 + - 0.6845703 + - -1.9570313 + - -0.99902344 + - -7.109375 + - 0.2980957 + - -3.0253906 + - 0.4033203 + - -1.8222656 + - 0.4440918 + - 2.0332031 + - -3.109375 + - -4.3320313 + - -9.6640625 + - -3.9921875 + - -0.23498535 + - -8.546875 + - -1.2666016 + - 7.6328125 + - 1.7714844 + - -3.4804688 + - -12.171875 + - -3.0878906 + - -7.7578125 + - -2.0957031 + - 0.08728027 + - 6.3476563 + - 2.7285156 + - -1.2490234 + - -2.7011719 + - 1.4521484 + - 2.7929688 + - 1.5078125 + - -1.7939453 + - -3.4882813 + - -7.3828125 + - -8.0234375 + - -1.2158203 + - -2.7832031 + - 1.6845703 + - -6.6835938 + - -5.9882813 + - -5.0429688 + - -0.43139648 + - -2.5878906 + - -4.0820313 + - -4.4101563 + - -0.0793457 + - -1.3710938 + - 0.28515625 + - -5.1914063 + - -4.4804688 + - -0.12731934 + - 2.2890625 + - -0.1171875 + - -2.6132813 + - -2.9160156 + - -5.3867188 + - 15.71875 + - 4.9179688 + - 2.6601563 + - 0.9135742 + - -7.9453125 + - -11.1875 + - 4.671875 + - 0.26464844 + - -0.44628906 + - -4.6914063 + - 8.9296875 + - -4.0117188 + - -0.059295654 + - 0.6850586 + - 2.0800781 + - -4.9609375 + - 0.091918945 + - 1.5673828 + - 0.88671875 + - -0.11450195 + - -4.34375 + - -0.3581543 + - 0.34960938 + - 3.2792969 + - 0.31469727 + - -1.2236328 + - 3.0585938 + - -2.1601563 + - -8.734375 + - 6.3984375 + - 0.15588379 + - -3.0253906 + - -3.7089844 + - 4.4804688 + - -3.390625 + - -4.046875 + - 0.32348633 + - 1.7861328 + - 5.8554688 + - 4.234375 + - -0.5810547 + - -1.4169922 + - 1.4697266 + - -1.1591797 + - 2.3320313 + - -3.3945313 + - -5.0351563 + - -4.8476563 + - -0.95751953 + - -1.7558594 + - -0.6669922 + - 0.06011963 + - -2.2792969 + - -0.08380127 + - -3.7167969 + - 7.8867188 + - 4.2304688 + - -2.8574219 + - -3.3203125 + - 5.625 + - -2.6347656 + - 2.0019531 + - -0.5317383 + - 1.3701172 + - -0.08496094 + - -3.8242188 + - -3.0117188 + - 4.203125 + - 4.7265625 + - -4.328125 + - 11.1875 + - -1.6337891 + - -0.8666992 + - -5.9023438 + - -5.859375 + - -0.9355469 + - -8.4375 + - -5.46875 + - 1.1240234 + - -2.1289063 + - -7.890625 + - 5.0898438 + - -5.2382813 + - -0.027267456 + - 2.1738281 + - 3.9980469 + - 6.4375 + - 4.203125 + - 5.4414063 + - -2.7070313 + - 0.10546875 + - -2.6132813 + - 5.5234375 + - -1.9365234 + - 3.7636719 + - -2.2285156 + - 1.6455078 + - 2.8125 + - -0.21313477 + - 5.1953125 + - 7.0351563 + - -2.828125 + - 6.2382813 + - -3.6425781 + - 5.7382813 + - -0.30249023 + - -3.5917969 + - -1.5507813 + - 6.0976563 + - -0.92333984 + - 2.9238281 + - -8.75 + - -0.2763672 + - 0.54296875 + - 3.0019531 + - -2.3320313 + - 1.6035156 + - 7.4257813 + - -5.984375 + - -0.48168945 + - 0.1427002 + - 0.8515625 + - -6.4023438 + - -1.2822266 + - -2.8828125 + - -1.2177734 + - 2.5761719 + - -3.8085938 + - 3.5957031 + - 11.265625 + - -9.984375 + - 3.9042969 + - 7.6015625 + - -2.4746094 + - 1.7685547 + - -0.30004883 + - -4.1484375 + - 0.3190918 + - -4.4609375 + - -0.3984375 + - 3.4667969 + - -1.7177734 + - 1.8867188 + - -8.171875 + - 3.046875 + - 6.234375 + - 0.22839355 + - 8.5234375 + - -3.0292969 + - -1.9580078 + - 4.546875 + - 3.2421875 + - 0.69628906 + - -2.8554688 + - 1.2177734 + - -6.3398438 + - 1.2490234 + - 1.2724609 + - -2.9121094 + - 1.3271484 + - -2.3066406 + - 0.703125 + - -6.4804688 + - -4.1015625 + - -2.4296875 + - -0.3515625 + - 1.6445313 + - -6.1914063 + - 4.171875 + - -13.109375 + - -1.1240234 + - 6.53125 + - 3.2871094 + - 4.0664063 + - 2.9746094 + - 2.9785156 + - 7.7773438 + - -2.7148438 + - -3.8300781 + - 6.3632813 + - 3.1503906 + - -8.09375 + - -1.3330078 + - -4.8632813 + - -2.21875 + - -0.6171875 + - -1.8818359 + - 4.5820313 + - -3.9160156 + - -3.078125 + - -1.4169922 + - 20.34375 + - -1.7783203 + - 2.125 + - -2.96875 + - 0.42333984 + - -4.7617188 + - -0.68115234 + - 1.4033203 + - 2.0527344 + - 3.875 + - 1.7890625 + - 0.61572266 + - -2.4238281 + - -0.953125 + - 5.6679688 + - 0.8208008 + - 0.022460938 + - -1.7705078 + - 6.6289063 + - 0.48901367 + - -6.4804688 + - -3.3085938 + - -12.15625 + - -0.35791016 + - -0.8105469 + - -2.0058594 + - 5.0039063 + - -3.0957031 + - 0.19445801 + - 10.140625 + - 4.4453125 + - -3.2050781 + - 1.7548828 + - -8.9921875 + - 1.5078125 + - 6.7304688 + - 9.0390625 + - -2.6171875 + - -5.4492188 + - 4.4492188 + - -0.63623047 + - -5.9296875 + - 0.28222656 + - 4.015625 + - 7.4023438 + - 4.328125 + - -6.84375 + - -2.6796875 + - -4.1992188 + - -2.0078125 + - 1.015625 + - -9.4296875 + - -6.2109375 + - -4.7890625 + - -10.484375 + - -0.08459473 + - 1.7314453 + - -5.8632813 + - 6.8164063 + - -2.2597656 + - -2.8125 + - 5.4101563 + - -2.2597656 + - 7.6367188 + - 0.67333984 + - 0.20532227 + - -12.8359375 + - -0.19580078 + - -1.0927734 + - 4.1835938 + - -2.2226563 + - 3.0800781 + - 3.5605469 + - -7.2460938 + - 0.02708435 + - 1.2529297 + - -9.328125 + - -8.2734375 + - -2.2617188 + - -0.78125 + - 6.7929688 + - -1.9189453 + - -11.796875 + - -0.23071289 + - 3.5976563 + - -2.78125 + - 0.56689453 + - -5.1992188 + - -2.3203125 + - -3.0351563 + - -4.1679688 + - 3.7460938 + - -2.4394531 + - -2.0507813 + - -3.3808594 + - -2.3320313 + - 3.6464844 + - 9.140625 + - -5.2070313 + - 3.0605469 + - 0.37329102 + - -1.1757813 + - -5.2304688 + - 2.1074219 + - -10.1484375 + - 1.8974609 + - 0.28686523 + - 0.6074219 + - 3.9355469 + - 5.15625 + - 0.68310547 + - -10.734375 + - -2.1621094 + - 1.3164063 + - -1.2197266 + - 2.8183594 + - -1.2998047 + - -0.5415039 + - 1.3759766 + - 12.25 + - -1.0390625 + - 4.4960938 + - 7.28125 + - 1.3095703 + - 1.9541016 + - 3.953125 + - 1.5693359 + - 1.5996094 + - -2.046875 + - 1.7978516 + - 4.3515625 + - -7.734375 + - 2.1425781 + - 0.71191406 + - -4.109375 + - 0.81689453 + - 12.375 + - -7.5390625 + - -10.0078125 + - 1.4414063 + - -0.7026367 + - 0.74365234 + - 9.2265625 + - -7.2148438 + - 1.0693359 + - 4.2070313 + - 2.0507813 + - -4.5859375 + - -6.4101563 + - -4.6992188 + - -3.4394531 + - -1.2207031 + - 17.21875 + - 2.9785156 + - 1.2050781 + - 5.796875 + - -4.9648438 + - 2.5605469 + - -2.625 + - -1.5097656 + - -8.375 + - -0.81152344 + - 3.8359375 + - -2.8007813 + - -0.53759766 + - 2.09375 + - 10.5 + - 6.3164063 + - 4.921875 + - 4.0585938 + - -6.2226563 + - -1.1142578 + - 3.1269531 + - -5.7695313 + - 6.15625 + - 2.7421875 + - -0.1463623 + - -6.1523438 + - 0.4934082 + - -5.0664063 + - -4.90625 + - 2.6738281 + - 4.734375 + - 4.1171875 + - -3.7304688 + - 1.7646484 + - 1.0849609 + - -1.8232422 + - -4.1835938 + - 1.6884766 + - 7.5703125 + - 5.0039063 + - 2.1699219 + - -5.6992188 + - -0.73828125 + - 1.7001953 + - -3.1308594 + - -3.1015625 + - -9.46875 + - -3.6074219 + - 6.9882813 + - 1.6279297 + - -2.3378906 + - -6.125 + - 2.8574219 + - 2.4628906 + - -1.3818359 + - 2.9199219 + - 0.46801758 + - 2.4082031 + - -1.7470703 + - -0.8823242 + - -0.16455078 + - 1.5869141 + - 0.17614746 + - -3.265625 + - -0.16381836 + - 5.3359375 + - 5.5703125 + - -5.15625 + - -2.5078125 + - 0.9633789 + - 12.1640625 + - -1.7744141 + - -1.1025391 + - 0.73779297 + - 8.3828125 + - 4.140625 + - -6.90625 + - 1.8007813 + - 6.4179688 + - -4.1328125 + - 0.4506836 + - 2.5058594 + - 6.0742188 + - -1.140625 + - 1.0488281 + - 5.3554688 + - 3.8164063 + - -2.2597656 + - 0.92041016 + - 4.9570313 + - 1.9746094 + - 9.4453125 + - 0.60791016 + - -2.4003906 + - -1.9726563 + - 2.2070313 + - -3.171875 + - -10.796875 + - 0.55810547 + - -6.234375 + - 4.9765625 + - 1.2148438 + - 0.44091797 + - 3.8847656 + - -2.8613281 + - -2.1171875 + - 2.5742188 + - -0.7753906 + - -1.8837891 + - -8.0859375 + - 3.7070313 + - 0.09869385 + - -4.3515625 + - -2.8476563 + - 4.8476563 + - 1.9140625 + - -2.6347656 + - 1.4101563 + - 0.88916016 + - 2.3554688 + - -9.1171875 + - 1.078125 + - 1.3027344 + - -2.2402344 + - 4.8671875 + - -3.1484375 + - -6.3945313 + - -1.2197266 + - 4.7617188 + - 0.3034668 + - -0.44091797 + - 5.7773438 + - -4.1445313 + - -4.4648438 + - -7.8125 + - -3.3515625 +- - -2.6601563 + - 6.1328125 + - 1.4423828 + - -3.2871094 + - 5.0429688 + - -2.6582031 + - -0.17053223 + - -0.06591797 + - 0.16113281 + - 1.5869141 + - 6.71875 + - -4.5 + - -3.9179688 + - -1.1357422 + - -1.4628906 + - -0.0803833 + - 1.6572266 + - -1.1748047 + - -0.22253418 + - 7.5351563 + - -1.2246094 + - -7.7929688 + - -5.9960938 + - -2.1679688 + - -0.036895752 + - -1.4746094 + - -7.046875 + - 1.9560547 + - 5.9023438 + - 3.2734375 + - -5.4648438 + - 2.125 + - 7.3632813 + - 13.5234375 + - -7.1484375 + - -4.1132813 + - -0.8017578 + - -1.9736328 + - -2.0019531 + - -1.5009766 + - 2.8671875 + - 1.2753906 + - -0.5551758 + - -0.10852051 + - 5.8007813 + - 5.4648438 + - -10.828125 + - -5.4492188 + - 0.025390625 + - 2.4375 + - 2.6425781 + - -5.3632813 + - -3.2480469 + - 2.4453125 + - 7.5117188 + - -0.40014648 + - 2.6855469 + - -0.59228516 + - -1.859375 + - -0.8886719 + - 2.8535156 + - -2.9765625 + - -0.14123535 + - 8.5078125 + - 2.8730469 + - 5.7265625 + - -2.1171875 + - -2.2460938 + - 4.6679688 + - 3.4609375 + - 6.203125 + - 1.3486328 + - 4.484375 + - -0.121276855 + - -0.7529297 + - 5.7148438 + - 2.4394531 + - -2.9511719 + - -8.984375 + - -10.390625 + - 1.5205078 + - -0.20666504 + - -7.734375 + - -11.8203125 + - -1.140625 + - -2.7675781 + - -7.3945313 + - 3.6523438 + - -0.55810547 + - -1.9707031 + - 2.1757813 + - -3.0585938 + - -16.484375 + - 4.6289063 + - 6.96875 + - -2.9804688 + - 0.44555664 + - -2.6210938 + - -0.57958984 + - 1.2226563 + - -2.09375 + - 0.953125 + - 2.0136719 + - -0.25390625 + - -1.7011719 + - -1.0419922 + - -15.3515625 + - 3.6621094 + - -0.7661133 + - -5.6953125 + - -7.734375 + - 1.2558594 + - 0.4765625 + - -3.7578125 + - 1.9130859 + - 5.0546875 + - 1.4794922 + - -0.13244629 + - 0.08148193 + - 8.5625 + - 2.1894531 + - -0.39794922 + - 5.1171875 + - -3.6523438 + - -1.8945313 + - 2.9882813 + - 7.1328125 + - -4.328125 + - -5.4726563 + - 4.15625 + - -7.0351563 + - -4.8085938 + - -2.2929688 + - 4.5234375 + - 0.86328125 + - 2.4472656 + - -3.2773438 + - -1.8867188 + - 0.9248047 + - -4.6054688 + - -0.74609375 + - 3.5742188 + - 2.0410156 + - 3.7363281 + - -0.87109375 + - -1.2783203 + - 5.6523438 + - 1.3505859 + - 10.5078125 + - 0.54345703 + - 5.8164063 + - -2.8085938 + - 3.9511719 + - -1.7529297 + - -3.4785156 + - 1.4970703 + - -1.0410156 + - -9.0078125 + - -4.734375 + - -7.4257813 + - 2.2207031 + - 3.0976563 + - 8.34375 + - -5.6835938 + - 2.2109375 + - 4.7890625 + - 13.2890625 + - 5.0898438 + - -4.6132813 + - 4.0429688 + - -1.1464844 + - 1.4775391 + - -3.4023438 + - -2.6445313 + - -2.5273438 + - 2.6835938 + - -0.74658203 + - 3.1464844 + - -9.5234375 + - 10.8984375 + - 1.9990234 + - -6.5859375 + - -6.25 + - 5.6171875 + - -1.9248047 + - 0.8442383 + - -3.28125 + - 1.25 + - 7.7851563 + - 9.0078125 + - 0.5917969 + - 4.765625 + - 0.015930176 + - -2.9296875 + - 4.34375 + - -1.0742188 + - 2.5703125 + - -5.8125 + - 5.7226563 + - 4.546875 + - 1.765625 + - 0.17333984 + - 1.3652344 + - -3.5605469 + - 8.6328125 + - 5.0820313 + - 1.6074219 + - -4.0429688 + - 2.5878906 + - 0.7651367 + - -7.4609375 + - -1.2744141 + - 0.19689941 + - -8.96875 + - -0.3930664 + - -5.4804688 + - -1.7539063 + - -14.65625 + - -1.9550781 + - -6.84375 + - 2.7832031 + - -14.296875 + - -1.4101563 + - 4.2226563 + - 2.2714844 + - -3.6992188 + - -4.2070313 + - 2.03125 + - -2.4453125 + - 1.1230469 + - 7.2539063 + - -0.9663086 + - 0.8432617 + - -2.0117188 + - 0.10241699 + - -1.1904297 + - -4.78125 + - -5.0546875 + - -4.4179688 + - 1.3056641 + - -1.1845703 + - 0.1685791 + - -2.78125 + - -1.0908203 + - -3.7988281 + - 4.4648438 + - 0.07293701 + - 0.1451416 + - 0.16137695 + - 2.9746094 + - -7.1953125 + - -2.6445313 + - -5.6523438 + - -0.88623047 + - 6.4453125 + - 5.453125 + - 1.2021484 + - 3.4453125 + - 0.020889282 + - 6.859375 + - 8.0390625 + - 2.3554688 + - -1.4697266 + - -1.296875 + - 0.10217285 + - 1.1445313 + - -2.1113281 + - 3.9980469 + - -8.8984375 + - -2.8730469 + - 2.0644531 + - -5.3085938 + - 0.5878906 + - -4.7578125 + - 7.9726563 + - -4.5742188 + - 0.18920898 + - -0.13659668 + - 8 + - -7.7929688 + - -0.23095703 + - 0.21203613 + - -0.8671875 + - 7.9101563 + - 7.3359375 + - -10.8359375 + - -1.6132813 + - 7.8710938 + - 7.5234375 + - 5.28125 + - 4.5820313 + - 2.8164063 + - -4.5039063 + - 4.3046875 + - -9.515625 + - -3.0351563 + - 3.8886719 + - 5.3515625 + - 4.4179688 + - 3.125 + - 5.5234375 + - -3.890625 + - 4.8984375 + - -1.1513672 + - 0.91308594 + - 4.7070313 + - -3.3652344 + - 2.4472656 + - -3.03125 + - -4.4101563 + - 2.0136719 + - 1.2832031 + - -5.2734375 + - 2.21875 + - -4.2460938 + - -3.84375 + - 1.0859375 + - 6.65625 + - -3.1855469 + - -1.8798828 + - 0.041168213 + - -3.6855469 + - 0.77490234 + - -2.3007813 + - -4.4257813 + - 2.609375 + - 1.3867188 + - -0.044128418 + - -0.7211914 + - 5.3945313 + - -6.078125 + - -6.4179688 + - -1.9951172 + - 0.359375 + - 7.6796875 + - -0.8066406 + - -1.2041016 + - 3.0761719 + - 0.62646484 + - 5.0273438 + - 3.2441406 + - -5.671875 + - -0.9892578 + - 5.7148438 + - -4.0507813 + - -7.6328125 + - 1.5166016 + - 1.1181641 + - 5.8984375 + - 3.6933594 + - -2.1738281 + - 0.1184082 + - 1.4492188 + - -5.7851563 + - -6.3710938 + - 2.8007813 + - -0.59033203 + - 6.6953125 + - 0.048034668 + - 2.8378906 + - -6.5039063 + - 3.1464844 + - 0.66308594 + - -3.4394531 + - -3.3339844 + - 2.4492188 + - 3.1132813 + - 2.1269531 + - 3.0214844 + - -3.2460938 + - -7.984375 + - -4.1640625 + - -0.45507813 + - -1.5615234 + - 4.6757813 + - 2.546875 + - 5.5820313 + - 0.18457031 + - 4.7148438 + - -2.34375 + - -1.5302734 + - -10.890625 + - 2.1230469 + - 0.78808594 + - -3.1542969 + - -0.5385742 + - -3.1464844 + - -2.4003906 + - -5.1367188 + - -0.85253906 + - 4.953125 + - -0.8486328 + - 6.25 + - -8.46875 + - -0.049713135 + - 5.7382813 + - -0.13757324 + - -10.8984375 + - -1.4873047 + - 6.1523438 + - 5.0664063 + - -2.1640625 + - -3.0039063 + - -0.36743164 + - 2.296875 + - -0.54345703 + - 0.31982422 + - 1.4697266 + - -6.3789063 + - 12.203125 + - 0.6308594 + - 4.2539063 + - 2.4960938 + - 1.5224609 + - 4.9609375 + - -1.6894531 + - -10.15625 + - 3.1660156 + - 2.7207031 + - -0.026367188 + - -2.4804688 + - -6.0820313 + - 2.40625 + - -3.4570313 + - 0.58496094 + - 7.1601563 + - -2.171875 + - 2.6113281 + - 5.234375 + - -1.2363281 + - -5.375 + - -1.2138672 + - -5 + - 6.25 + - 4.0234375 + - -12.5546875 + - 1.2861328 + - 1.6513672 + - -0.002565384 + - 11.203125 + - 4.2734375 + - 5.6171875 + - 2.9765625 + - -0.39501953 + - 1.9853516 + - -5.15625 + - -0.9848633 + - 8.125 + - -0.72314453 + - -4.59375 + - -0.8491211 + - -6.765625 + - -0.7060547 + - 2.4765625 + - 0.0541687 + - -0.6845703 + - 1.9365234 + - 4.9257813 + - -2.25 + - -9.71875 + - -2.3769531 + - 2.9121094 + - -3.6035156 + - 1.8974609 + - 2.1054688 + - -1.0136719 + - 1.0263672 + - -1.2988281 + - -2.7597656 + - -1.0136719 + - 1.8779297 + - 1.5869141 + - 1.0380859 + - -9.1328125 + - -2.4023438 + - -1.7392578 + - -1.6982422 + - -7.0585938 + - 1.7822266 + - 39.8125 + - -5.09375 + - -3.1484375 + - 0.76953125 + - -1.5371094 + - 3.6054688 + - -2.9160156 + - 0.24438477 + - -0.3605957 + - -1.9970703 + - -0.61083984 + - 1.6347656 + - -1.6269531 + - 2.7558594 + - 7.7382813 + - -2.5117188 + - 0.86572266 + - 1.4677734 + - -8.40625 + - 0.6088867 + - 0.55126953 + - 2.0175781 + - -3.5507813 + - -2.453125 + - 9.2421875 + - 0.9399414 + - -10.3359375 + - -0.5683594 + - -3.953125 + - 6.671875 + - 2.6230469 + - 3.90625 + - -0.3112793 + - 13.515625 + - -6 + - 0.34204102 + - -7.2851563 + - -3.1035156 + - 0.515625 + - -5.78125 + - 0.85546875 + - -2.7324219 + - 1.2373047 + - -0.025985718 + - -0.18713379 + - 9.3515625 + - -1.5898438 + - -8.6015625 + - 8.421875 + - -1.6669922 + - 5.375 + - 5.0273438 + - -0.95947266 + - 5.3242188 + - -0.91064453 + - 2.5449219 + - 1.6660156 + - -1.7597656 + - 0.26757813 + - 1.7070313 + - 2.2539063 + - 2.4140625 + - -5.3046875 + - -2.9082031 + - -3.8769531 + - 5.734375 + - -0.52246094 + - 1.4697266 + - -5.3632813 + - 4.3945313 + - 3.7207031 + - -1.7265625 + - -4.9726563 + - 4.9296875 + - -0.62353516 + - -10.2890625 + - -4.0429688 + - 0.35913086 + - 5.1171875 + - -2.7167969 + - -2.7109375 + - 1.6943359 + - 2.5195313 + - -0.8520508 + - 2.1855469 + - 0.50097656 + - 1.7402344 + - 1.2587891 + - 3.2460938 + - 4.0195313 + - -8.9140625 + - -2.4785156 + - 2.0273438 + - 4.8867188 + - 6.4257813 + - 0.8745117 + - -3.9453125 + - 3.3671875 + - 4.0429688 + - 8.625 + - 1.9970703 + - 5.921875 + - -2.6054688 + - 1.6337891 + - -4.0703125 + - -1.4013672 + - 0.79003906 + - -0.86083984 + - -4.6132813 + - 0.5859375 + - 4.0820313 + - -2 + - 4.5820313 + - 2.5175781 + - -1.0537109 + - 0.2220459 + - 8.8125 + - -0.56396484 + - -2.4121094 + - 0.51904297 + - 3.5546875 + - 5.4960938 + - 4 + - -9.0390625 + - 2.2109375 + - 6.921875 + - 12.1328125 + - -2.1503906 + - 3.421875 + - 2.0566406 + - -6.1484375 + - -3.5410156 + - 4.6601563 + - -2.4863281 + - 3.4824219 + - 0.7192383 + - -0.5786133 + - -0.4128418 + - -6.5625 + - 3.3574219 + - -2.8007813 + - 6.2773438 + - -5.625 + - -5.828125 + - -0.121276855 + - 1.8955078 + - 0.29077148 + - 1.4560547 + - 4.578125 + - -4.8515625 + - -2.484375 + - 0.29882813 + - -0.75439453 + - 9.1171875 + - 2.1835938 + - -0.734375 + - -5.28125 + - -2.9121094 + - -2.6679688 + - -4.0742188 + - -0.091796875 + - 3.265625 + - -1.7441406 + - -0.107666016 + - -0.97021484 + - -3.2792969 + - 5.3242188 + - 11.7890625 + - -1.390625 + - -1.453125 + - 1.4892578 + - 3.6269531 + - 2.9707031 + - -5.0039063 + - -0.8676758 + - -3.015625 + - -0.79785156 + - 2.9472656 + - -0.68359375 + - -3.8457031 + - 8.53125 + - -4.4492188 + - 1.7265625 + - -2.8515625 + - 10.6953125 + - 0.6298828 + - -6.3632813 + - 3.7890625 + - 0.02583313 + - 5.625 + - 1.1943359 + - 4.1015625 + - -0.79345703 + - 6.5039063 + - -1.7978516 + - -0.92822266 + - -0.37963867 + - -5.75 + - 4.8164063 + - 0.5751953 + - -2.0644531 + - 6.7578125 + - 3.3007813 + - 2.6074219 + - -1.8779297 + - 1.2832031 + - 3.7246094 + - -5.46875 + - -1.5478516 + - -1.1992188 + - 0.7739258 + - 0.105163574 + - -1.8105469 + - -0.64941406 + - -3.3828125 + - 6.1445313 + - 1.7167969 + - 3.1875 + - -4.1328125 + - -4.625 + - -4.4921875 + - 3.7929688 + - -0.50683594 + - 2.8789063 + - 1.0751953 + - -4.9453125 + - -7.296875 + - -1.0917969 + - -4.7734375 + - -1.640625 + - 1.9980469 + - 8.75 + - 8.7265625 + - 14.8125 + - 2.234375 + - -0.7573242 + - 0.8901367 + - 1.3173828 + - 2.3144531 + - -2.1035156 + - 1.5166016 + - 0.86035156 + - -3.2167969 + - -4.6796875 + - 12.4453125 + - 3.2558594 + - 13.234375 + - -2.7363281 + - -1.7490234 + - 8.5703125 + - -1.1708984 + - 2.7617188 + - 2.6484375 + - -0.42285156 + - 3.1640625 + - -1.3808594 + - -0.55908203 + - 2.0273438 + - -4.2578125 + - 1.7412109 + - -1.9677734 + - 2.8867188 + - -9.578125 + - 5.5546875 + - -0.62109375 + - -7.4648438 + - -1.7392578 + - 5.5351563 + - -3.0996094 + - 0.29907227 + - -1.9863281 + - -3.7441406 + - 2.5019531 + - 6.0117188 + - -3.2832031 + - 1.7216797 + - 2.40625 + - -5.9960938 + - 2.1640625 + - 0.33935547 + - -2.8359375 + - -1.9365234 + - -7.03125 + - -3.9179688 + - 0.18847656 + - -2.8261719 + - -1.8232422 + - -5.953125 + - -4.7617188 + - 3.109375 + - -1.1181641 + - -1.3964844 + - 0.25854492 + - -0.2355957 + - 8.96875 + - 6.265625 + - 5.125 + - 4.9453125 + - 7.1210938 + - 0.37353516 + - 2.5292969 + - -0.16174316 + - -1.0419922 + - -1.9121094 + - 0.56933594 + - -4.5117188 + - 0.48046875 + - -3.2109375 + - -4.7773438 + - 2.4765625 + - 3.4785156 + - 1.6933594 + - 2.1542969 + - 0.36767578 + - -5.1015625 + - 5.4570313 + - -8.4609375 + - 8.9921875 + - 0.23986816 + - -23.265625 + - -1.5517578 + - 0.9589844 + - 1.53125 + - -19.390625 + - -0.5551758 + - -2.2207031 + - 0.55029297 + - -1.5292969 + - 0.6479492 + - 7.5273438 + - -0.5708008 + - -3.3007813 + - 1.0556641 + - 1.1162109 + - 0.17236328 + - -1.8681641 + - 19.296875 + - -0.9951172 + - 0.34594727 + - 1.5986328 + - 1.4570313 + - -2.7304688 + - 6.4101563 + - 5.2773438 + - -0.9682617 + - -3.5585938 + - -5.8320313 + - 0.5102539 + - 1.859375 + - -0.7089844 + - 1.1777344 + - 2.2617188 + - 2.7636719 + - 3.7714844 + - -4.0390625 + - -5.6171875 + - 5.8828125 + - -3.6054688 + - -3.2324219 + - -2.2675781 + - -0.6738281 + - 0.40112305 + - -0.09869385 + - -3.1074219 + - -0.46240234 + - -0.48095703 + - 2.7304688 + - 1.6044922 + - -2.2265625 + - -2.7949219 + - -3.9296875 + - 2.4296875 + - -2.0625 + - 0.37548828 + - -0.33764648 + - 5.0234375 + - 0.34765625 + - 2.265625 + - 1.3535156 + - -3.1386719 + - -1.3925781 + - -4.6796875 + - -6.4101563 + - -6.4921875 + - 7.6367188 + - -2.6816406 + - 4.1367188 + - 5.0078125 + - -2.6152344 + - 0.42163086 + - -0.6689453 + - 3.59375 + - -2.7167969 + - 4.7382813 + - -2.2949219 + - -4.7421875 + - 1.5917969 + - -0.45043945 + - -9.171875 + - 0.073791504 + - 2.8574219 + - 2.5 + - 0.6435547 + - -0.9448242 + - 5.3476563 + - -1.9765625 + - 4.0625 + - 1.6523438 + - -5.359375 + - -12.7578125 + - -1.3681641 + - -5.8828125 + - 1.2304688 + - -4.3789063 + - -4.265625 + - 10.28125 + - -5.4296875 + - 3.1484375 + - -6.71875 + - 4.5078125 + - 7.765625 + - -1.0263672 + - 0.31323242 + - 6.59375 + - -6.703125 + - 1.7832031 + - 1.7119141 + - -2.9882813 + - -0.1149292 + - 3.5136719 + - 5.9101563 + - -11.8828125 + - -3.2910156 + - 1.7861328 + - -3.1464844 + - -1.7050781 + - -2.28125 + - -0.76953125 + - -1.6191406 + - -2.7109375 + - -1.8359375 + - -9.4609375 + - 0.1262207 + - -4.0664063 + - -2.3066406 + - -7.0703125 + - 3.1738281 + - -3.9589844 + - -6.2265625 + - -1.5527344 + - -13.1875 + - 7.2421875 + - -0.0066375732 + - 1.4453125 + - 2.6679688 + - 2.8925781 + - 0.24084473 + - -0.66503906 + - -0.71240234 + - -1.6630859 + - -1.5644531 + - 3.6171875 + - 3.7050781 + - 2.4921875 + - -2.59375 + - -3.7949219 + - 2.2636719 + - -2.6210938 + - -2.5761719 + - 1.2060547 + - 0.30908203 + - -1.0556641 + - 1.5283203 + - 1.6806641 + - -2.3945313 + - -0.33447266 + - -8.3984375 + - -5.7578125 + - -2.9589844 + - -3.5253906 + - -2.6210938 + - -6.2109375 + - -2.1367188 + - -0.83740234 + - -11.296875 + - -0.96875 + - -1.9716797 + - 4.7734375 + - -5.1757813 + - -3.9824219 + - -0.67041016 + - 1.6728516 + - 4.3046875 + - 0.90527344 + - -7.2421875 + - 0.036132813 + - -3.5195313 + - -13.8671875 + - 3.3222656 + - -2.0019531 + - 0.5576172 + - 0.29882813 + - -0.18347168 + - -0.3491211 + - 1.0224609 + - 4.578125 + - 4.4726563 + - 2.5214844 + - 3 + - 3.1679688 + - -5.1835938 + - -1.859375 + - -2.3632813 + - 2.1582031 + - -0.28344727 + - 0.05682373 + - 0.5776367 + - -3.5917969 + - 0.93847656 + - 0.8540039 + - -2.6035156 + - 1.2148438 + - -3.453125 + - -3.9765625 + - 0.35839844 + - 0.89404297 + - -7.96875 + - -6.3007813 + - -1.3164063 + - -3.7949219 + - 0.9560547 + - -0.8100586 + - -4.4414063 + - -9.0390625 + - -8.4453125 + - -1.5175781 + - -6.59375 + - -5.3632813 + - 4.1328125 + - 0.10809326 + - -4.375 + - -11.578125 + - -2.9238281 + - -9.4140625 + - -2.1308594 + - 1.7373047 + - 0.40307617 + - 3.1074219 + - 5.625 + - 0.9135742 + - 1.1972656 + - 1.7744141 + - 0.93603516 + - 0.76123047 + - -2.5605469 + - -2.4824219 + - -5.28125 + - -4.9960938 + - -2.4609375 + - -2.3085938 + - -3.6230469 + - -3.3359375 + - 0.33666992 + - 1.5625 + - -2.6152344 + - -3.1367188 + - 2.0566406 + - -0.2607422 + - -0.42089844 + - 1.6015625 + - -5.046875 + - -4.625 + - 2.0507813 + - 4.96875 + - -5.7070313 + - -0.081604004 + - -5.9609375 + - -7.3867188 + - 8.0234375 + - 11.2578125 + - 4.7890625 + - 1.5742188 + - -1.8105469 + - -0.61865234 + - -2.8242188 + - 1.4355469 + - 0.78125 + - -4.1445313 + - 11.5625 + - -5.6328125 + - -0.08343506 + - 0.6743164 + - -0.26049805 + - -5.1679688 + - 0.0869751 + - -0.36010742 + - 0.25952148 + - -1.2255859 + - 0.41088867 + - 1.3222656 + - -2.6699219 + - -0.19616699 + - 2.7460938 + - -1.5703125 + - -0.5654297 + - -4.265625 + - -2.7421875 + - 5.0195313 + - -3.421875 + - -1.4833984 + - -3.5117188 + - 4.5585938 + - 2.3671875 + - -1.7558594 + - 4.8867188 + - -0.26049805 + - 3.6953125 + - 0.7705078 + - -0.19335938 + - 1.4179688 + - 6.0234375 + - 2.3105469 + - 8.2734375 + - 0.4169922 + - -4.8203125 + - -2.0410156 + - 2.0371094 + - 0.4267578 + - 0.9321289 + - 1.3779297 + - -3.2714844 + - -0.6591797 + - -1.5068359 + - 6.21875 + - 0.39135742 + - 3.2871094 + - -1.5976563 + - 4.46875 + - -1.5048828 + - 1.9814453 + - -0.7651367 + - -1.7587891 + - 3.5175781 + - -3.4199219 + - -3.2207031 + - 7.3789063 + - 1.9667969 + - -1.9277344 + - 6.0234375 + - -1.46875 + - -4.9140625 + - -5.7890625 + - -3.7246094 + - 1.0273438 + - -8.3515625 + - -3.6269531 + - 0.2890625 + - -4.8007813 + - -6.0742188 + - 1.8652344 + - -5.859375 + - -0.1303711 + - 2.6875 + - 9.4921875 + - 3.5761719 + - 1.6201172 + - 7.3710938 + - -2.7460938 + - 1.2705078 + - 0.5307617 + - 7.4375 + - 4.203125 + - -1.6572266 + - -0.66015625 + - 1.6787109 + - 1.0703125 + - -0.025161743 + - 3.4375 + - 4.5429688 + - -4.7851563 + - 3.6210938 + - 0.124572754 + - 14.265625 + - 0.038726807 + - -2.5 + - 0.9296875 + - 0.9111328 + - -0.020980835 + - -3.5566406 + - -7.8984375 + - -0.67578125 + - 0.74316406 + - 2.9394531 + - -4.2695313 + - 4.6679688 + - 3.2148438 + - 0.8149414 + - -2.0859375 + - 1.2001953 + - 6.875 + - -7.359375 + - 0.28637695 + - -0.44140625 + - -2.5585938 + - 6.03125 + - -6.6132813 + - 5.2851563 + - 12.390625 + - -6.203125 + - 2.6601563 + - 2.3554688 + - -3.4375 + - 2.3964844 + - 0.4946289 + - -0.06878662 + - -1.6601563 + - -2.6933594 + - 5.8359375 + - 4.1796875 + - -1.9238281 + - 0.15405273 + - -8.7421875 + - 4.4335938 + - 5.6015625 + - -0.14611816 + - 7.9335938 + - -2.0878906 + - -0.06939697 + - 2.4472656 + - 5.0078125 + - -5.7578125 + - -5.1601563 + - -1.3964844 + - -8.4921875 + - 2.9550781 + - 0.82470703 + - -0.56152344 + - 0.011161804 + - -6.1171875 + - -1.2744141 + - -7.0390625 + - -1.6132813 + - -3.421875 + - 1.4443359 + - 0.36621094 + - 0.10784912 + - 3.0273438 + - -7.2265625 + - -2.1015625 + - 5.8632813 + - -3.7988281 + - 3.5605469 + - 3.7402344 + - 4.9179688 + - 4.3671875 + - -2 + - -1.7324219 + - 4.6171875 + - 7.6757813 + - -1.4951172 + - 0.140625 + - -8.0546875 + - -1.8964844 + - 0.2668457 + - 2.8417969 + - -4.84375 + - 4.1210938 + - 2.515625 + - 2.9414063 + - 28.0625 + - -6.4609375 + - -1.2070313 + - -0.26635742 + - 4.1210938 + - -4.0195313 + - -0.9873047 + - 1.6308594 + - 0.43603516 + - 2.2363281 + - 2.2539063 + - 1.3857422 + - 4.2265625 + - -2.1757813 + - 5.3164063 + - 3.7636719 + - -3.6074219 + - -4.8515625 + - 7.4492188 + - -2.0019531 + - -2.921875 + - -5.3632813 + - -10.65625 + - -1.1523438 + - -2.0136719 + - -3.4921875 + - 3.7089844 + - -1.5585938 + - -1.4443359 + - 5.3828125 + - 3.7558594 + - -2.5097656 + - 1.2724609 + - -10.34375 + - -0.81884766 + - 7.7890625 + - 3.5351563 + - -0.9116211 + - -2.2734375 + - 4.171875 + - -1.5917969 + - -4.5976563 + - -1.7949219 + - 4.1992188 + - -1.2099609 + - 3.4199219 + - -5.9101563 + - -1.9345703 + - -10.2578125 + - -0.40527344 + - -2.3398438 + - -3.6699219 + - -5.4179688 + - -4.9648438 + - -5.6367188 + - -1.8330078 + - 1.6630859 + - -6.359375 + - 6.2851563 + - 1.6992188 + - -1.0722656 + - 5.765625 + - -0.43920898 + - 12.328125 + - 0.0869751 + - 3.8710938 + - -9.390625 + - -0.45825195 + - -1.1894531 + - 3.4160156 + - -3.6367188 + - -0.08227539 + - 3.3320313 + - -5.8828125 + - -5.2382813 + - 3.6289063 + - -9.7421875 + - -15.734375 + - 1.84375 + - -3.28125 + - 6.5703125 + - -1.015625 + - -6.390625 + - -0.7758789 + - -0.5004883 + - 3.4296875 + - -0.6660156 + - 1.7900391 + - -2.53125 + - -3.1582031 + - 2.1074219 + - 0.82373047 + - -4.15625 + - 0.3564453 + - -5.0625 + - 0.46826172 + - -0.20117188 + - 9.4296875 + - -1.3701172 + - 6.21875 + - -1.1826172 + - -0.50927734 + - 0.97509766 + - 1.5351563 + - -9.1015625 + - 1.2363281 + - 1.1484375 + - 4.2460938 + - 4.6484375 + - 5.0078125 + - -1.4257813 + - -8.8046875 + - -2.5878906 + - 3.6601563 + - 0.5317383 + - 0.8198242 + - -2.7597656 + - -0.5253906 + - 2.9589844 + - 10.453125 + - -3.3242188 + - 1.2519531 + - 7.5820313 + - -1.4306641 + - 0.2076416 + - 9.6015625 + - 1.8046875 + - 3.9414063 + - 3.5351563 + - -3.0703125 + - 0.03564453 + - -3.2148438 + - 1.125 + - -1.9433594 + - -4.84375 + - 1.5664063 + - 9.125 + - -3.109375 + - -5.609375 + - 1.5107422 + - 1.7890625 + - 1.6806641 + - 9.0703125 + - -5.46875 + - 0.28930664 + - 1.1523438 + - 2.3300781 + - -2.265625 + - -4.3164063 + - 1.2324219 + - 0.8979492 + - -0.7207031 + - 14.6171875 + - 6.0703125 + - 1.9316406 + - 2.6289063 + - -1.1337891 + - 0.21948242 + - -2.4433594 + - -0.31347656 + - -4.25 + - -3.2949219 + - 5.4609375 + - -3.3808594 + - 1.8662109 + - 1.7060547 + - 5.5273438 + - -0.16638184 + - 2.9453125 + - 1.7265625 + - -11.4921875 + - -0.5644531 + - 4.7539063 + - -4.1992188 + - 1.3359375 + - 3.3535156 + - 0.17980957 + - -2.5195313 + - -0.31640625 + - -2.515625 + - -5.7851563 + - 1.5869141 + - 3.09375 + - 4.25 + - -0.20983887 + - -1.2236328 + - 1.1054688 + - -1.4736328 + - -2.6875 + - 3.3945313 + - 1.2041016 + - 4.8710938 + - 0.4609375 + - -3.3300781 + - 0.5957031 + - 4.734375 + - -1.6015625 + - -2.8535156 + - -6.3476563 + - -3.4667969 + - -0.015586853 + - 2.0605469 + - -7.609375 + - -1.2441406 + - 1.4921875 + - 3.8867188 + - -2.015625 + - 3.8066406 + - 2.0976563 + - 3.3398438 + - -3.6445313 + - 0.39282227 + - 0.13439941 + - 2.8496094 + - 2.1542969 + - -0.36157227 + - 3.0332031 + - 4.4140625 + - 4.8359375 + - -1.9169922 + - -1.2685547 + - -0.16906738 + - 2.2167969 + - -1.4179688 + - -1.7714844 + - 5.78125 + - 8.3359375 + - -3.6367188 + - -6.6015625 + - 2.7207031 + - 4.8085938 + - -1.6699219 + - -0.8544922 + - 2.5 + - 6.7265625 + - -1.78125 + - -2.8378906 + - 2.7578125 + - 3.6367188 + - 0.48828125 + - -2.4121094 + - 4.46875 + - 0.028198242 + - 0.9223633 + - 0.29736328 + - -3.4199219 + - 0.06951904 + - 2.6640625 + - -0.0012645721 + - -1.8964844 + - -0.4909668 + - -2.859375 + - 5.4804688 + - 1.0214844 + - 1.234375 + - 1.5986328 + - -3.7890625 + - -2.46875 + - 2.8691406 + - -2.2089844 + - -1.4101563 + - -8.25 + - -1.3613281 + - 2.7675781 + - -6.8632813 + - -2.1367188 + - 1.6796875 + - 2.0703125 + - -4.4179688 + - 2.9082031 + - -0.06329346 + - 2.3125 + - -7.7890625 + - -3.7441406 + - -0.3395996 + - -0.15661621 + - 8.2109375 + - -2.4023438 + - -5.0976563 + - -2.3925781 + - -1.0058594 + - 3.0703125 + - -0.8886719 + - 5.75 + - -5.0195313 + - -4.2851563 + - 2.0683594 + - -5.28125 +- - -4.9882813 + - 6.7734375 + - -1.6269531 + - -3.21875 + - 7.078125 + - -0.5107422 + - -2.75 + - -1.5371094 + - 4.9257813 + - 0.9790039 + - 6.03125 + - -4.0195313 + - -4.9648438 + - 0.9160156 + - 0.63916016 + - -0.90771484 + - 5.375 + - -0.3293457 + - 2.8535156 + - 2.7773438 + - 0.25170898 + - -4.671875 + - 1.7490234 + - -1.7080078 + - 2.1933594 + - -0.7470703 + - -5.6445313 + - 0.31762695 + - 6.4375 + - 1.9873047 + - -5.265625 + - 0.6816406 + - 0.89404297 + - 12.1640625 + - -3.3867188 + - -5.015625 + - -2.890625 + - 1.3457031 + - -0.47094727 + - -1.1201172 + - 1.2382813 + - -0.6855469 + - -1.5957031 + - -0.39916992 + - 10.4921875 + - 5.3867188 + - -7.9570313 + - -5.6914063 + - 2.9589844 + - -2.2753906 + - 4.1210938 + - -0.3178711 + - -1.15625 + - 5.828125 + - 3.4746094 + - -0.51953125 + - 1.9931641 + - 1.15625 + - -3.9140625 + - -0.30517578 + - 4.390625 + - 0.96191406 + - -5.0078125 + - 5.8242188 + - 1.9091797 + - 2.2949219 + - -3.2460938 + - -3.9570313 + - 5.3789063 + - 6.4648438 + - 6.9375 + - 7.6210938 + - 0.76464844 + - -0.41430664 + - -3.7480469 + - 3.1015625 + - -0.22961426 + - -3.3007813 + - -5.2890625 + - -8.6953125 + - 2.3320313 + - -0.9013672 + - -5.3789063 + - -10.9453125 + - -0.20263672 + - -3.359375 + - -6.1367188 + - 2.6777344 + - -2.7753906 + - 2.0957031 + - -2.3105469 + - -2.7382813 + - -17.140625 + - 5.2070313 + - 3.4707031 + - -2.0371094 + - 0.82421875 + - -3.5566406 + - 2.1445313 + - -4.8164063 + - -1.2802734 + - 0.42407227 + - 0.98095703 + - 1.3271484 + - -1.9667969 + - 0.36328125 + - -3.90625 + - 5.0859375 + - -1.7578125 + - -1.8056641 + - -5.6210938 + - -2.875 + - -2.9453125 + - -1.5351563 + - 3.1445313 + - 3.8066406 + - 0.78759766 + - 2.8574219 + - 3.6015625 + - 10.6171875 + - -0.24499512 + - -0.52734375 + - -0.61816406 + - -2.9453125 + - -1.0263672 + - 3.359375 + - 6.6640625 + - -5.4179688 + - 0.9326172 + - 5.09375 + - -3.796875 + - 2.3691406 + - -3.9375 + - 6.0117188 + - 1.1669922 + - 0.07067871 + - -0.63916016 + - -7.7304688 + - -0.11804199 + - -5.1992188 + - -0.9707031 + - 2.8730469 + - 0.36157227 + - 4.0898438 + - -3.59375 + - -0.14904785 + - 6.3164063 + - 1.0546875 + - 12.78125 + - 5.265625 + - 2.4238281 + - -0.40429688 + - 2.5800781 + - -2.7871094 + - 0.19958496 + - -0.4580078 + - -4.5585938 + - -7.4570313 + - 0.7397461 + - -2.4921875 + - 2.3066406 + - 6.7929688 + - 5.4023438 + - -9.0859375 + - -0.38134766 + - 5.0117188 + - 3.9003906 + - 4.3515625 + - -3.7050781 + - 5.2226563 + - -4.4726563 + - -3.5234375 + - -3.5878906 + - 3.2519531 + - -4.1484375 + - 0.6220703 + - 0.796875 + - -0.8642578 + - -4.4023438 + - 7.171875 + - -2.1464844 + - -5.0898438 + - -3.7910156 + - 9.359375 + - 1.7636719 + - 2.4023438 + - -3.3632813 + - -0.3083496 + - 1.5644531 + - 8.6015625 + - 1.6787109 + - 3.1347656 + - 0.828125 + - -1.140625 + - 7.734375 + - 1.7255859 + - 0.40942383 + - -6.578125 + - 4.8867188 + - 8.0625 + - 3.3789063 + - 4.3359375 + - 1.0917969 + - -7.2265625 + - 11.5078125 + - 7.2929688 + - -0.17590332 + - -12.3046875 + - -1.6904297 + - -1.0439453 + - -6.5117188 + - -1.4707031 + - 3.1171875 + - -6.1835938 + - -0.48608398 + - 0.20043945 + - -2.1621094 + - -14.5859375 + - -2.4316406 + - -7.3242188 + - 2.8027344 + - -19.578125 + - 1.2392578 + - -0.20324707 + - -1.3583984 + - -3.8515625 + - 2.2460938 + - -0.011695862 + - -3.9257813 + - 5.6132813 + - 7.421875 + - -2.6035156 + - 1.0546875 + - -3.15625 + - -0.39282227 + - -1.7597656 + - -10.796875 + - -8.1875 + - -0.53271484 + - 1.5058594 + - 1.9404297 + - -0.18969727 + - 0.14782715 + - 1.4873047 + - -1.9814453 + - 2.9199219 + - -5.5859375 + - 0.45458984 + - -0.087768555 + - -1.2929688 + - -6.359375 + - -3.5957031 + - -3.4257813 + - -1.75 + - 6.2070313 + - 5.6796875 + - 2.3300781 + - 2.0546875 + - -0.85839844 + - 6.0039063 + - 6.4101563 + - 1.9902344 + - 0.55322266 + - -1.5361328 + - 0.30200195 + - 6.3828125 + - 4.6679688 + - 3.1835938 + - -10.171875 + - -1.8203125 + - -4.0351563 + - -5.3164063 + - 0.97802734 + - -3.1679688 + - 8.0703125 + - 0.1373291 + - 1.2431641 + - -0.47998047 + - 3.6601563 + - -6.7265625 + - -1.1728516 + - -1.5908203 + - 0.23620605 + - 5.5898438 + - 4.5234375 + - -5.7226563 + - -4.40625 + - 5.0234375 + - 1.5634766 + - 0.6376953 + - 4.3320313 + - -2.2246094 + - -1.6318359 + - -0.1784668 + - -7 + - -1.6015625 + - 0.10180664 + - 3.1777344 + - 4.5351563 + - 1.7783203 + - 9.765625 + - -0.8173828 + - 1.7431641 + - 0.5605469 + - -1.4628906 + - 5.53125 + - -5.7578125 + - -0.7885742 + - -4.2226563 + - -6.1171875 + - -0.27783203 + - 3.5566406 + - -1.7841797 + - 0.12915039 + - -1.7714844 + - -5.046875 + - -0.14331055 + - 4.3710938 + - -3.421875 + - -1.6601563 + - -2.8886719 + - -4.21875 + - 7.5625 + - -6.5195313 + - -4.1289063 + - 4.3203125 + - 2.7089844 + - -0.018585205 + - 2.265625 + - 2.2285156 + - -2.5683594 + - -5.6679688 + - -4.3085938 + - 0.05795288 + - 5.4296875 + - -1.515625 + - -1.5429688 + - -3.8125 + - 4.3242188 + - -2.0351563 + - 6.0898438 + - -8.421875 + - 1.3779297 + - 5.9804688 + - -2.3671875 + - -1.8222656 + - 0.30078125 + - 3.3515625 + - 5.6367188 + - 0.91796875 + - -4.109375 + - 0.05508423 + - 2.5761719 + - -5.8984375 + - -0.72998047 + - 3.875 + - -0.97998047 + - 9.25 + - 0.640625 + - 5.125 + - -7.7734375 + - -0.4169922 + - 5.8203125 + - 0.023406982 + - -4.9765625 + - 3.3613281 + - 2.6699219 + - 1.2724609 + - 1.9111328 + - -0.86621094 + - 1.2138672 + - -0.8588867 + - 0.053955078 + - 2.6777344 + - 1.3916016 + - -1.3056641 + - 9.7890625 + - -4.0390625 + - 8.625 + - 4.1835938 + - 1.5400391 + - -7.9414063 + - 2.4550781 + - -0.32177734 + - -1.7421875 + - -2.6972656 + - -1.7070313 + - -6.2539063 + - 1.2714844 + - 5.6132813 + - -1.7275391 + - 2.8261719 + - 7.0585938 + - -6.4453125 + - 1.7128906 + - 2.1816406 + - 2.4511719 + - -6.5351563 + - -1.2958984 + - 8.484375 + - 0.90234375 + - -5.25 + - -0.9995117 + - -1.2177734 + - 2.0703125 + - 0.79785156 + - -2.8261719 + - 1.6298828 + - -4.7148438 + - 9.40625 + - -0.09173584 + - 3.0546875 + - 0.1574707 + - 2.953125 + - 3.7773438 + - -3.0742188 + - -8.9375 + - 9.046875 + - 6.8203125 + - -1.7255859 + - 0.2626953 + - -5.984375 + - 2.5605469 + - -1.8837891 + - 2.0429688 + - 1.4042969 + - 1.9941406 + - -1.1591797 + - 2.6152344 + - 4.703125 + - -5.7460938 + - 0.14221191 + - -4.7539063 + - 4.578125 + - 5.7109375 + - -13.2734375 + - 1.0605469 + - 0.42138672 + - -3.5136719 + - 9.265625 + - 12.375 + - -0.6269531 + - -0.1352539 + - 5.5 + - 2.8027344 + - -0.9560547 + - 1.4589844 + - 3.3085938 + - 0.44677734 + - -0.15759277 + - 1.1865234 + - -6.4414063 + - 0.11468506 + - 2.5605469 + - -6.6953125 + - 0.7290039 + - -0.9814453 + - -0.4482422 + - 3.6191406 + - -11.109375 + - -2.4199219 + - -0.37817383 + - -4.4023438 + - 0.5107422 + - -1.9541016 + - -1.9423828 + - 4.6523438 + - 0.53466797 + - -1.1777344 + - -2.8515625 + - 1.3115234 + - 3.4199219 + - 2.6503906 + - -5.1796875 + - 0.5048828 + - -3.7246094 + - 0.83984375 + - -2.8574219 + - 0.23120117 + - 24.703125 + - 0.38232422 + - -3.6171875 + - -1.5263672 + - -1.0390625 + - 4.734375 + - -5.2539063 + - -0.95703125 + - 4.921875 + - -5.5898438 + - -3.3417969 + - -1.3525391 + - -0.8027344 + - 2.8535156 + - 7.7734375 + - 0.6699219 + - 4.7070313 + - -3.3847656 + - -3.4589844 + - -1.9072266 + - 0.2685547 + - 3.4707031 + - -3.1367188 + - -6.328125 + - 2.5371094 + - -1.0742188 + - -6.953125 + - -3.6738281 + - -7.65625 + - 5.046875 + - 2.3125 + - 4.5820313 + - 1.3212891 + - 13.640625 + - -3.5839844 + - 2.8710938 + - -5.4140625 + - -0.63378906 + - -0.013664246 + - 1.6123047 + - 1.6660156 + - 0.81933594 + - 2.390625 + - 0.98779297 + - -0.5605469 + - 6.3632813 + - 1.7509766 + - -9.1328125 + - 4.7109375 + - -7.0703125 + - 1.8564453 + - 7.3007813 + - -1.6103516 + - 0.048553467 + - 0.42163086 + - 2.2148438 + - 5.765625 + - 0.3413086 + - 0.67822266 + - 6.0585938 + - 1.4267578 + - -0.82128906 + - 1.7109375 + - -3.1972656 + - -1.5332031 + - 4.0234375 + - -2.8535156 + - 3.7539063 + - -3.4824219 + - 8.328125 + - 1.3730469 + - -2.9941406 + - -8.578125 + - 5.8046875 + - -2.8417969 + - -5.7773438 + - -1.1640625 + - -0.9033203 + - 4.0039063 + - -0.3083496 + - -3.1113281 + - -1.1943359 + - 7.1796875 + - -3.7792969 + - 7.3203125 + - 2.7539063 + - -1.5244141 + - -1.8544922 + - 2.2890625 + - 1.4609375 + - -9.1171875 + - -3.3105469 + - 4.484375 + - 3.4863281 + - 8.3984375 + - -1.7675781 + - -2.0234375 + - 8.4453125 + - 3.3222656 + - 6.2148438 + - 3.4746094 + - 4.8085938 + - -2.5410156 + - -0.58251953 + - -0.090148926 + - -2.890625 + - -0.17236328 + - -5.3554688 + - -5.8007813 + - -2.40625 + - 2.78125 + - -1.1171875 + - 6.5273438 + - 4.3867188 + - -2.9414063 + - 0.3076172 + - 6.0117188 + - -0.32128906 + - -2.9785156 + - -1.1113281 + - 3.5566406 + - 7.1875 + - 3.7851563 + - -2.5820313 + - 0.12878418 + - 7.1367188 + - 9.9921875 + - -0.06323242 + - 0.703125 + - 0.70166016 + - -0.7714844 + - -2.2695313 + - 0.033081055 + - 0.029953003 + - 6.6523438 + - 2.6367188 + - -3.8769531 + - -4.7773438 + - -5.1367188 + - 4.796875 + - -2.0136719 + - 3.34375 + - -3.4160156 + - -5.078125 + - 0.74902344 + - 2.3574219 + - -1.8564453 + - 1.9130859 + - -3.640625 + - -3.2773438 + - 1.1289063 + - 1.7148438 + - -1.8642578 + - 4.4296875 + - 0.4741211 + - 1.3945313 + - -5.5742188 + - -4.109375 + - -0.8774414 + - -7.5585938 + - -3.9628906 + - 7.3789063 + - -0.8852539 + - -0.62402344 + - -2.0722656 + - -3.5429688 + - 5.9609375 + - 8.21875 + - 3.890625 + - -3.3476563 + - -1.4951172 + - 2.9648438 + - 0.18395996 + - -3.9511719 + - -4.3398438 + - -2.3964844 + - -1.3242188 + - -0.8041992 + - -2.7441406 + - -1.4892578 + - 7.1210938 + - -6.9375 + - -2.296875 + - -2.4550781 + - 6.3242188 + - 1.0410156 + - -4.59375 + - -0.5957031 + - -0.8564453 + - 7.0195313 + - 1.7265625 + - 4.515625 + - 2.6054688 + - 5.5703125 + - -3.0195313 + - -3.1523438 + - 2.2929688 + - -4.4414063 + - 6.46875 + - 4.9375 + - -1.9814453 + - 4.4453125 + - 1.5048828 + - 4.5585938 + - -5.0117188 + - 1.3818359 + - 5.90625 + - -6.7695313 + - -1.9111328 + - -0.071777344 + - 0.9746094 + - -0.8261719 + - -1.3583984 + - 2.1132813 + - -3.2734375 + - 4.6132813 + - 3.1328125 + - 0.60839844 + - 3.640625 + - -4.6992188 + - -2.4726563 + - 1.2744141 + - 2.1425781 + - -0.7441406 + - 0.024169922 + - -2.4355469 + - -3.28125 + - 0.57373047 + - -7.5195313 + - -6.2070313 + - 4.7226563 + - 6.1914063 + - 8.3515625 + - 12.2421875 + - -2.53125 + - -1.2783203 + - -2.5019531 + - 0.6977539 + - 2.1933594 + - -1.5917969 + - 1.9853516 + - 0.14929199 + - -3.9550781 + - -1.8896484 + - 8.78125 + - 0.7001953 + - 7.5625 + - -4.9570313 + - -6.9882813 + - 5.9453125 + - -1.8261719 + - 5.9882813 + - 3.2597656 + - 0.9448242 + - -8.3203125 + - -2.0175781 + - -2.5527344 + - 1.1171875 + - -3.6699219 + - 3.6796875 + - 3.5019531 + - 2.9042969 + - -4.9257813 + - 5.4414063 + - -1.0283203 + - -1.8310547 + - -4.5351563 + - 6.1914063 + - -3.5488281 + - 1.0585938 + - -4.3867188 + - 0.074645996 + - 7.7734375 + - 6.8945313 + - -5.1367188 + - -0.5361328 + - 3.4316406 + - -2.5214844 + - 1.7695313 + - 0.6152344 + - -1.7314453 + - -2.2070313 + - -2.2402344 + - -4.0742188 + - -0.6567383 + - -2.8925781 + - 1.6826172 + - -4.6640625 + - -4.1601563 + - 3.5527344 + - 3.8261719 + - -0.7451172 + - -0.43188477 + - 1.5214844 + - 0.14746094 + - 1.9335938 + - 6.421875 + - -0.24707031 + - 7.6679688 + - -5.765625 + - 7.8671875 + - 0.8486328 + - 2.9960938 + - 1.3359375 + - 3.6855469 + - -3.7617188 + - 3.7382813 + - -6.0234375 + - -6.40625 + - 1.3740234 + - 1.9501953 + - 3.1679688 + - -0.5288086 + - -1.0214844 + - -4.5351563 + - 9.4375 + - -5.8984375 + - 8 + - 3.6210938 + - -15.5859375 + - -2.7734375 + - 1.0527344 + - 3.0488281 + - -7.7148438 + - -4.7148438 + - 1.1132813 + - -0.6948242 + - -5.7929688 + - 3.9042969 + - 10.0625 + - 0.10675049 + - -4.1992188 + - 1.2373047 + - 1.3027344 + - -0.26367188 + - 0.115478516 + - 21.40625 + - 1.1445313 + - -1.7099609 + - -0.13208008 + - 2.6171875 + - -4.9335938 + - 6.8164063 + - 2.7988281 + - -2.1015625 + - -5.8007813 + - -4.8515625 + - 0.9658203 + - 1.8544922 + - 0.90283203 + - -1.2851563 + - 2.1660156 + - -0.25219727 + - 0.020111084 + - -5.4804688 + - -2.8789063 + - 3.1835938 + - -4.2070313 + - -2.7792969 + - -1.0927734 + - 0.67626953 + - -1.7822266 + - 0.8491211 + - -9.9140625 + - -1.6845703 + - -1.7011719 + - 1.8603516 + - 5.21875 + - -0.21923828 + - -0.1303711 + - -3.2890625 + - 3.203125 + - 0.4099121 + - 1.0439453 + - 1.7529297 + - 6.2148438 + - 0.9067383 + - 2.5820313 + - 1.8457031 + - -0.9951172 + - -0.27026367 + - -2.7050781 + - -5.828125 + - -1.5742188 + - 5.6796875 + - -1.8222656 + - 5.390625 + - 4.8125 + - -2.6464844 + - -1.1611328 + - 0.83154297 + - -1.1591797 + - -3.9667969 + - 6.53125 + - 1.890625 + - -3.125 + - 3.7128906 + - -0.37451172 + - -10.171875 + - 0.27197266 + - 4.375 + - 2.171875 + - 4.0820313 + - 0.96191406 + - 6.5742188 + - 1.1435547 + - 3.4101563 + - 14.1484375 + - 2.0058594 + - -6.46875 + - -5.5351563 + - -2.3808594 + - 5.1484375 + - -2.9238281 + - -3.0195313 + - 2.390625 + - -1.4082031 + - 2.9199219 + - -1.7109375 + - 2.4238281 + - 5.2421875 + - -1.5576172 + - 3.0644531 + - 9.1953125 + - -6.7304688 + - 0.80126953 + - -0.8017578 + - -1.3261719 + - 0.9580078 + - 3.1933594 + - 3.2617188 + - -10.828125 + - -5.5234375 + - 4.6445313 + - -2.640625 + - -4.7734375 + - 0.61279297 + - 4.0820313 + - -0.9604492 + - -5.203125 + - 0.64453125 + - -0.8691406 + - -0.31176758 + - -2.9414063 + - -3.9609375 + - -6.171875 + - 0.4567871 + - -0.5551758 + - -4.7070313 + - 4.1835938 + - -2.7480469 + - 2.9570313 + - 0.69677734 + - 3.5410156 + - 3.2050781 + - -1.5 + - -3.6210938 + - -0.8125 + - 0.7993164 + - 0.234375 + - -1.6123047 + - 6.1835938 + - 4.0117188 + - 2.1601563 + - -4.8125 + - 0.29003906 + - 6.5546875 + - -0.56884766 + - -3.1816406 + - 4.7617188 + - -4.2578125 + - -0.0072288513 + - 4.6445313 + - -4.40625 + - -0.7939453 + - -5.5820313 + - -8.15625 + - -6.9921875 + - -4.0664063 + - -0.8754883 + - 0.9082031 + - -7.7304688 + - -1.1416016 + - -3.3574219 + - -7.6796875 + - -1.3916016 + - -3.9472656 + - 5.5429688 + - -2.8222656 + - -5.3554688 + - 0.6171875 + - -0.82177734 + - -0.1071167 + - 2.5546875 + - -4.1914063 + - 0.03567505 + - -1.4912109 + - -18.234375 + - -3.4882813 + - -0.61621094 + - -2.9511719 + - -2.3105469 + - -2.7207031 + - -4.4453125 + - 0.22436523 + - 3.4179688 + - 2.2519531 + - 3.9589844 + - 0.53515625 + - 0.16992188 + - -9.9765625 + - -1.6142578 + - -1.0683594 + - 2.5488281 + - 5.4765625 + - 3.3320313 + - 1.9384766 + - -5.3203125 + - -0.64501953 + - 1.9863281 + - -2.2285156 + - 0.6845703 + - -1.9570313 + - -0.99902344 + - -7.109375 + - 0.2980957 + - -3.0253906 + - 0.4033203 + - -1.8222656 + - 0.4440918 + - 2.0332031 + - -3.109375 + - -4.3320313 + - -9.6640625 + - -3.9921875 + - -0.23498535 + - -8.546875 + - -1.2666016 + - 7.6328125 + - 1.7714844 + - -3.4804688 + - -12.171875 + - -3.0878906 + - -7.7578125 + - -2.0957031 + - 0.08728027 + - 6.3476563 + - 2.7285156 + - -1.2490234 + - -2.7011719 + - 1.4521484 + - 2.7929688 + - 1.5078125 + - -1.7939453 + - -3.4882813 + - -7.3828125 + - -8.0234375 + - -1.2158203 + - -2.7832031 + - 1.6845703 + - -6.6835938 + - -5.9882813 + - -5.0429688 + - -0.43139648 + - -2.5878906 + - -4.0820313 + - -4.4101563 + - -0.0793457 + - -1.3710938 + - 0.28515625 + - -5.1914063 + - -4.4804688 + - -0.12731934 + - 2.2890625 + - -0.1171875 + - -2.6132813 + - -2.9160156 + - -5.3867188 + - 15.71875 + - 4.9179688 + - 2.6601563 + - 0.9135742 + - -7.9453125 + - -11.1875 + - 4.671875 + - 0.26464844 + - -0.44628906 + - -4.6914063 + - 8.9296875 + - -4.0117188 + - -0.059295654 + - 0.6850586 + - 2.0800781 + - -4.9609375 + - 0.091918945 + - 1.5673828 + - 0.88671875 + - -0.11450195 + - -4.34375 + - -0.3581543 + - 0.34960938 + - 3.2792969 + - 0.31469727 + - -1.2236328 + - 3.0585938 + - -2.1601563 + - -8.734375 + - 6.3984375 + - 0.15588379 + - -3.0253906 + - -3.7089844 + - 4.4804688 + - -3.390625 + - -4.046875 + - 0.32348633 + - 1.7861328 + - 5.8554688 + - 4.234375 + - -0.5810547 + - -1.4169922 + - 1.4697266 + - -1.1591797 + - 2.3320313 + - -3.3945313 + - -5.0351563 + - -4.8476563 + - -0.95751953 + - -1.7558594 + - -0.6669922 + - 0.06011963 + - -2.2792969 + - -0.08380127 + - -3.7167969 + - 7.8867188 + - 4.2304688 + - -2.8574219 + - -3.3203125 + - 5.625 + - -2.6347656 + - 2.0019531 + - -0.5317383 + - 1.3701172 + - -0.08496094 + - -3.8242188 + - -3.0117188 + - 4.203125 + - 4.7265625 + - -4.328125 + - 11.1875 + - -1.6337891 + - -0.8666992 + - -5.9023438 + - -5.859375 + - -0.9355469 + - -8.4375 + - -5.46875 + - 1.1240234 + - -2.1289063 + - -7.890625 + - 5.0898438 + - -5.2382813 + - -0.027267456 + - 2.1738281 + - 3.9980469 + - 6.4375 + - 4.203125 + - 5.4414063 + - -2.7070313 + - 0.10546875 + - -2.6132813 + - 5.5234375 + - -1.9365234 + - 3.7636719 + - -2.2285156 + - 1.6455078 + - 2.8125 + - -0.21313477 + - 5.1953125 + - 7.0351563 + - -2.828125 + - 6.2382813 + - -3.6425781 + - 5.7382813 + - -0.30249023 + - -3.5917969 + - -1.5507813 + - 6.0976563 + - -0.92333984 + - 2.9238281 + - -8.75 + - -0.2763672 + - 0.54296875 + - 3.0019531 + - -2.3320313 + - 1.6035156 + - 7.4257813 + - -5.984375 + - -0.48168945 + - 0.1427002 + - 0.8515625 + - -6.4023438 + - -1.2822266 + - -2.8828125 + - -1.2177734 + - 2.5761719 + - -3.8085938 + - 3.5957031 + - 11.265625 + - -9.984375 + - 3.9042969 + - 7.6015625 + - -2.4746094 + - 1.7685547 + - -0.30004883 + - -4.1484375 + - 0.3190918 + - -4.4609375 + - -0.3984375 + - 3.4667969 + - -1.7177734 + - 1.8867188 + - -8.171875 + - 3.046875 + - 6.234375 + - 0.22839355 + - 8.5234375 + - -3.0292969 + - -1.9580078 + - 4.546875 + - 3.2421875 + - 0.69628906 + - -2.8554688 + - 1.2177734 + - -6.3398438 + - 1.2490234 + - 1.2724609 + - -2.9121094 + - 1.3271484 + - -2.3066406 + - 0.703125 + - -6.4804688 + - -4.1015625 + - -2.4296875 + - -0.3515625 + - 1.6445313 + - -6.1914063 + - 4.171875 + - -13.109375 + - -1.1240234 + - 6.53125 + - 3.2871094 + - 4.0664063 + - 2.9746094 + - 2.9785156 + - 7.7773438 + - -2.7148438 + - -3.8300781 + - 6.3632813 + - 3.1503906 + - -8.09375 + - -1.3330078 + - -4.8632813 + - -2.21875 + - -0.6171875 + - -1.8818359 + - 4.5820313 + - -3.9160156 + - -3.078125 + - -1.4169922 + - 20.34375 + - -1.7783203 + - 2.125 + - -2.96875 + - 0.42333984 + - -4.7617188 + - -0.68115234 + - 1.4033203 + - 2.0527344 + - 3.875 + - 1.7890625 + - 0.61572266 + - -2.4238281 + - -0.953125 + - 5.6679688 + - 0.8208008 + - 0.022460938 + - -1.7705078 + - 6.6289063 + - 0.48901367 + - -6.4804688 + - -3.3085938 + - -12.15625 + - -0.35791016 + - -0.8105469 + - -2.0058594 + - 5.0039063 + - -3.0957031 + - 0.19445801 + - 10.140625 + - 4.4453125 + - -3.2050781 + - 1.7548828 + - -8.9921875 + - 1.5078125 + - 6.7304688 + - 9.0390625 + - -2.6171875 + - -5.4492188 + - 4.4492188 + - -0.63623047 + - -5.9296875 + - 0.28222656 + - 4.015625 + - 7.4023438 + - 4.328125 + - -6.84375 + - -2.6796875 + - -4.1992188 + - -2.0078125 + - 1.015625 + - -9.4296875 + - -6.2109375 + - -4.7890625 + - -10.484375 + - -0.08459473 + - 1.7314453 + - -5.8632813 + - 6.8164063 + - -2.2597656 + - -2.8125 + - 5.4101563 + - -2.2597656 + - 7.6367188 + - 0.67333984 + - 0.20532227 + - -12.8359375 + - -0.19580078 + - -1.0927734 + - 4.1835938 + - -2.2226563 + - 3.0800781 + - 3.5605469 + - -7.2460938 + - 0.02708435 + - 1.2529297 + - -9.328125 + - -8.2734375 + - -2.2617188 + - -0.78125 + - 6.7929688 + - -1.9189453 + - -11.796875 + - -0.23071289 + - 3.5976563 + - -2.78125 + - 0.56689453 + - -5.1992188 + - -2.3203125 + - -3.0351563 + - -4.1679688 + - 3.7460938 + - -2.4394531 + - -2.0507813 + - -3.3808594 + - -2.3320313 + - 3.6464844 + - 9.140625 + - -5.2070313 + - 3.0605469 + - 0.37329102 + - -1.1757813 + - -5.2304688 + - 2.1074219 + - -10.1484375 + - 1.8974609 + - 0.28686523 + - 0.6074219 + - 3.9355469 + - 5.15625 + - 0.68310547 + - -10.734375 + - -2.1621094 + - 1.3164063 + - -1.2197266 + - 2.8183594 + - -1.2998047 + - -0.5415039 + - 1.3759766 + - 12.25 + - -1.0390625 + - 4.4960938 + - 7.28125 + - 1.3095703 + - 1.9541016 + - 3.953125 + - 1.5693359 + - 1.5996094 + - -2.046875 + - 1.7978516 + - 4.3515625 + - -7.734375 + - 2.1425781 + - 0.71191406 + - -4.109375 + - 0.81689453 + - 12.375 + - -7.5390625 + - -10.0078125 + - 1.4414063 + - -0.7026367 + - 0.74365234 + - 9.2265625 + - -7.2148438 + - 1.0693359 + - 4.2070313 + - 2.0507813 + - -4.5859375 + - -6.4101563 + - -4.6992188 + - -3.4394531 + - -1.2207031 + - 17.21875 + - 2.9785156 + - 1.2050781 + - 5.796875 + - -4.9648438 + - 2.5605469 + - -2.625 + - -1.5097656 + - -8.375 + - -0.81152344 + - 3.8359375 + - -2.8007813 + - -0.53759766 + - 2.09375 + - 10.5 + - 6.3164063 + - 4.921875 + - 4.0585938 + - -6.2226563 + - -1.1142578 + - 3.1269531 + - -5.7695313 + - 6.15625 + - 2.7421875 + - -0.1463623 + - -6.1523438 + - 0.4934082 + - -5.0664063 + - -4.90625 + - 2.6738281 + - 4.734375 + - 4.1171875 + - -3.7304688 + - 1.7646484 + - 1.0849609 + - -1.8232422 + - -4.1835938 + - 1.6884766 + - 7.5703125 + - 5.0039063 + - 2.1699219 + - -5.6992188 + - -0.73828125 + - 1.7001953 + - -3.1308594 + - -3.1015625 + - -9.46875 + - -3.6074219 + - 6.9882813 + - 1.6279297 + - -2.3378906 + - -6.125 + - 2.8574219 + - 2.4628906 + - -1.3818359 + - 2.9199219 + - 0.46801758 + - 2.4082031 + - -1.7470703 + - -0.8823242 + - -0.16455078 + - 1.5869141 + - 0.17614746 + - -3.265625 + - -0.16381836 + - 5.3359375 + - 5.5703125 + - -5.15625 + - -2.5078125 + - 0.9633789 + - 12.1640625 + - -1.7744141 + - -1.1025391 + - 0.73779297 + - 8.3828125 + - 4.140625 + - -6.90625 + - 1.8007813 + - 6.4179688 + - -4.1328125 + - 0.4506836 + - 2.5058594 + - 6.0742188 + - -1.140625 + - 1.0488281 + - 5.3554688 + - 3.8164063 + - -2.2597656 + - 0.92041016 + - 4.9570313 + - 1.9746094 + - 9.4453125 + - 0.60791016 + - -2.4003906 + - -1.9726563 + - 2.2070313 + - -3.171875 + - -10.796875 + - 0.55810547 + - -6.234375 + - 4.9765625 + - 1.2148438 + - 0.44091797 + - 3.8847656 + - -2.8613281 + - -2.1171875 + - 2.5742188 + - -0.7753906 + - -1.8837891 + - -8.0859375 + - 3.7070313 + - 0.09869385 + - -4.3515625 + - -2.8476563 + - 4.8476563 + - 1.9140625 + - -2.6347656 + - 1.4101563 + - 0.88916016 + - 2.3554688 + - -9.1171875 + - 1.078125 + - 1.3027344 + - -2.2402344 + - 4.8671875 + - -3.1484375 + - -6.3945313 + - -1.2197266 + - 4.7617188 + - 0.3034668 + - -0.44091797 + - 5.7773438 + - -4.1445313 + - -4.4648438 + - -7.8125 + - -3.3515625 diff --git a/backends/candle/tests/snapshots/test_flash_qwen2__qwen2_single.snap b/backends/candle/tests/snapshots/test_flash_qwen2__qwen2_single.snap new file mode 100644 index 00000000..362e1ebf --- /dev/null +++ b/backends/candle/tests/snapshots/test_flash_qwen2__qwen2_single.snap @@ -0,0 +1,1541 @@ +--- +source: backends/candle/tests/test_flash_qwen2.rs +assertion_line: 72 +expression: embeddings_single +--- +- - -4.9960938 + - 6.8007813 + - -1.6386719 + - -3.2109375 + - 7.0507813 + - -0.5097656 + - -2.75 + - -1.5380859 + - 4.9414063 + - 0.96533203 + - 6.015625 + - -3.9980469 + - -4.96875 + - 0.9296875 + - 0.66064453 + - -0.93359375 + - 5.3671875 + - -0.3383789 + - 2.8457031 + - 2.7714844 + - 0.24035645 + - -4.671875 + - 1.7734375 + - -1.7138672 + - 2.2050781 + - -0.7290039 + - -5.6445313 + - 0.32226563 + - 6.4179688 + - 1.9970703 + - -5.2617188 + - 0.6928711 + - 0.91845703 + - 12.171875 + - -3.4003906 + - -5.015625 + - -2.8925781 + - 1.3515625 + - -0.47045898 + - -1.1005859 + - 1.25 + - -0.69433594 + - -1.6308594 + - -0.39135742 + - 10.484375 + - 5.359375 + - -7.9609375 + - -5.6796875 + - 2.953125 + - -2.2792969 + - 4.109375 + - -0.31152344 + - -1.1337891 + - 5.828125 + - 3.4648438 + - -0.5341797 + - 1.9941406 + - 1.1660156 + - -3.9179688 + - -0.30688477 + - 4.3945313 + - 0.94091797 + - -4.984375 + - 5.8085938 + - 1.9296875 + - 2.3066406 + - -3.2460938 + - -3.9511719 + - 5.3828125 + - 6.453125 + - 6.921875 + - 7.625 + - 0.7944336 + - -0.40039063 + - -3.7519531 + - 3.1035156 + - -0.24145508 + - -3.2636719 + - -5.3085938 + - -8.671875 + - 2.328125 + - -0.89697266 + - -5.3554688 + - -10.9140625 + - -0.19873047 + - -3.3789063 + - -6.1328125 + - 2.6660156 + - -2.7675781 + - 2.109375 + - -2.3144531 + - -2.7578125 + - -17.109375 + - 5.1796875 + - 3.4550781 + - -2.0351563 + - 0.81103516 + - -3.5664063 + - 2.1542969 + - -4.78125 + - -1.2695313 + - 0.4140625 + - 0.9916992 + - 1.3408203 + - -1.9746094 + - 0.35302734 + - -3.9082031 + - 5.0859375 + - -1.7539063 + - -1.7861328 + - -5.6210938 + - -2.8828125 + - -2.9453125 + - -1.5458984 + - 3.1503906 + - 3.8007813 + - 0.78271484 + - 2.8496094 + - 3.6035156 + - 10.6171875 + - -0.2565918 + - -0.5229492 + - -0.6142578 + - -2.9453125 + - -1.0302734 + - 3.359375 + - 6.671875 + - -5.4335938 + - 0.94677734 + - 5.0898438 + - -3.7832031 + - 2.3710938 + - -3.9414063 + - 6.0117188 + - 1.1777344 + - 0.06689453 + - -0.63183594 + - -7.75 + - -0.12237549 + - -5.203125 + - -0.9794922 + - 2.8847656 + - 0.37353516 + - 4.09375 + - -3.5800781 + - -0.14013672 + - 6.3320313 + - 1.0683594 + - 12.765625 + - 5.2617188 + - 2.4140625 + - -0.37573242 + - 2.5839844 + - -2.8105469 + - 0.21374512 + - -0.4416504 + - -4.5703125 + - -7.4765625 + - 0.74072266 + - -2.4765625 + - 2.3164063 + - 6.7929688 + - 5.3828125 + - -9.109375 + - -0.38305664 + - 5.0234375 + - 3.9101563 + - 4.3320313 + - -3.7070313 + - 5.2226563 + - -4.4882813 + - -3.5117188 + - -3.5878906 + - 3.2539063 + - -4.1757813 + - 0.62841797 + - 0.7871094 + - -0.86376953 + - -4.3945313 + - 7.140625 + - -2.171875 + - -5.0742188 + - -3.7890625 + - 9.34375 + - 1.7626953 + - 2.3925781 + - -3.3476563 + - -0.3005371 + - 1.5576172 + - 8.59375 + - 1.6884766 + - 3.1152344 + - 0.7973633 + - -1.1503906 + - 7.7421875 + - 1.7197266 + - 0.39697266 + - -6.578125 + - 4.8945313 + - 8.0703125 + - 3.3984375 + - 4.3398438 + - 1.1044922 + - -7.2421875 + - 11.53125 + - 7.3007813 + - -0.16821289 + - -12.28125 + - -1.6777344 + - -1.0253906 + - -6.4960938 + - -1.4628906 + - 3.0859375 + - -6.1796875 + - -0.49194336 + - 0.19616699 + - -2.1660156 + - -14.546875 + - -2.4335938 + - -7.296875 + - 2.8144531 + - -19.578125 + - 1.2509766 + - -0.21643066 + - -1.3544922 + - -3.8457031 + - 2.234375 + - -0.04156494 + - -3.9394531 + - 5.625 + - 7.4335938 + - -2.6210938 + - 1.0830078 + - -3.1738281 + - -0.39697266 + - -1.7597656 + - -10.8359375 + - -8.2109375 + - -0.5527344 + - 1.5097656 + - 1.9316406 + - -0.17895508 + - 0.14587402 + - 1.4873047 + - -1.9521484 + - 2.890625 + - -5.6171875 + - 0.4423828 + - -0.07745361 + - -1.2978516 + - -6.3554688 + - -3.5976563 + - -3.4277344 + - -1.7441406 + - 6.2148438 + - 5.6914063 + - 2.3378906 + - 2.0449219 + - -0.8623047 + - 6.0078125 + - 6.3945313 + - 1.9785156 + - 0.55566406 + - -1.5371094 + - 0.3017578 + - 6.3867188 + - 4.6679688 + - 3.1757813 + - -10.1640625 + - -1.8203125 + - -4.0546875 + - -5.3359375 + - 0.98339844 + - -3.1601563 + - 8.0859375 + - 0.15698242 + - 1.2539063 + - -0.48583984 + - 3.6367188 + - -6.7226563 + - -1.171875 + - -1.5888672 + - 0.23486328 + - 5.59375 + - 4.53125 + - -5.7070313 + - -4.390625 + - 5.0351563 + - 1.5537109 + - 0.6123047 + - 4.3476563 + - -2.2285156 + - -1.6386719 + - -0.1932373 + - -6.9960938 + - -1.6064453 + - 0.08795166 + - 3.1738281 + - 4.5390625 + - 1.7880859 + - 9.7578125 + - -0.82666016 + - 1.7480469 + - 0.56933594 + - -1.4628906 + - 5.5195313 + - -5.7578125 + - -0.81396484 + - -4.2070313 + - -6.0976563 + - -0.29736328 + - 3.5664063 + - -1.7910156 + - 0.1303711 + - -1.7832031 + - -5.0507813 + - -0.1394043 + - 4.3945313 + - -3.4082031 + - -1.6884766 + - -2.8925781 + - -4.1992188 + - 7.5625 + - -6.5195313 + - -4.125 + - 4.3125 + - 2.6972656 + - -0.018585205 + - 2.2734375 + - 2.2402344 + - -2.5351563 + - -5.6796875 + - -4.3085938 + - 0.068481445 + - 5.4335938 + - -1.5068359 + - -1.53125 + - -3.8144531 + - 4.3203125 + - -2.0097656 + - 6.0859375 + - -8.421875 + - 1.3945313 + - 6.0117188 + - -2.3554688 + - -1.8203125 + - 0.296875 + - 3.3613281 + - 5.609375 + - 0.91064453 + - -4.1640625 + - 0.05505371 + - 2.5898438 + - -5.8867188 + - -0.72802734 + - 3.8847656 + - -0.9814453 + - 9.2421875 + - 0.6357422 + - 5.1289063 + - -7.7773438 + - -0.42138672 + - 5.8476563 + - 0.025741577 + - -4.9804688 + - 3.3417969 + - 2.6757813 + - 1.2695313 + - 1.9111328 + - -0.86083984 + - 1.203125 + - -0.8442383 + - 0.06298828 + - 2.6914063 + - 1.3818359 + - -1.3125 + - 9.796875 + - -4.046875 + - 8.6171875 + - 4.1953125 + - 1.5576172 + - -7.9257813 + - 2.4628906 + - -0.3244629 + - -1.7304688 + - -2.7363281 + - -1.6865234 + - -6.2890625 + - 1.2685547 + - 5.6054688 + - -1.7246094 + - 2.8554688 + - 7.0625 + - -6.4296875 + - 1.7138672 + - 2.1933594 + - 2.4492188 + - -6.515625 + - -1.2949219 + - 8.4609375 + - 0.89941406 + - -5.21875 + - -0.97509766 + - -1.2324219 + - 2.0644531 + - 0.8183594 + - -2.8574219 + - 1.6621094 + - -4.703125 + - 9.421875 + - -0.103027344 + - 3.0566406 + - 0.13635254 + - 2.9472656 + - 3.7675781 + - -3.0820313 + - -8.9140625 + - 9.078125 + - 6.8242188 + - -1.7558594 + - 0.25634766 + - -5.9960938 + - 2.5488281 + - -1.8525391 + - 2.0527344 + - 1.4238281 + - 1.9941406 + - -1.1503906 + - 2.5820313 + - 4.703125 + - -5.7421875 + - 0.16186523 + - -4.7421875 + - 4.5625 + - 5.7265625 + - -13.25 + - 1.0585938 + - 0.4350586 + - -3.4902344 + - 9.2734375 + - 12.359375 + - -0.6357422 + - -0.124572754 + - 5.5039063 + - 2.7949219 + - -0.94921875 + - 1.4667969 + - 3.3203125 + - 0.44360352 + - -0.15441895 + - 1.2050781 + - -6.453125 + - 0.10571289 + - 2.578125 + - -6.7109375 + - 0.74609375 + - -0.9873047 + - -0.4951172 + - 3.640625 + - -11.140625 + - -2.4179688 + - -0.40185547 + - -4.40625 + - 0.5078125 + - -1.9570313 + - -1.9472656 + - 4.6640625 + - 0.51660156 + - -1.1796875 + - -2.8574219 + - 1.3056641 + - 3.4199219 + - 2.6523438 + - -5.171875 + - 0.5048828 + - -3.7070313 + - 0.86279297 + - -2.8691406 + - 0.23120117 + - 24.640625 + - 0.3701172 + - -3.6191406 + - -1.5244141 + - -1.0380859 + - 4.71875 + - -5.2773438 + - -0.9580078 + - 4.9179688 + - -5.6054688 + - -3.3203125 + - -1.3261719 + - -0.8261719 + - 2.8613281 + - 7.7460938 + - 0.6645508 + - 4.7226563 + - -3.3789063 + - -3.46875 + - -1.9121094 + - 0.27294922 + - 3.453125 + - -3.1210938 + - -6.3476563 + - 2.5351563 + - -1.0654297 + - -6.9414063 + - -3.6738281 + - -7.6484375 + - 5.046875 + - 2.3300781 + - 4.5820313 + - 1.3105469 + - 13.625 + - -3.5546875 + - 2.8828125 + - -5.3984375 + - -0.63183594 + - -0.016036987 + - 1.6474609 + - 1.6591797 + - 0.8183594 + - 2.4023438 + - 0.9926758 + - -0.55322266 + - 6.375 + - 1.7548828 + - -9.140625 + - 4.703125 + - -7.0976563 + - 1.8603516 + - 7.2851563 + - -1.6132813 + - 0.02911377 + - 0.43164063 + - 2.2402344 + - 5.765625 + - 0.35839844 + - 0.6904297 + - 6.0546875 + - 1.4228516 + - -0.8232422 + - 1.7285156 + - -3.2128906 + - -1.5332031 + - 4.0507813 + - -2.8613281 + - 3.7402344 + - -3.4824219 + - 8.3125 + - 1.390625 + - -2.9746094 + - -8.5703125 + - 5.8164063 + - -2.8300781 + - -5.7617188 + - -1.1474609 + - -0.92578125 + - 4.0117188 + - -0.29614258 + - -3.1054688 + - -1.203125 + - 7.1953125 + - -3.7753906 + - 7.3203125 + - 2.7734375 + - -1.5205078 + - -1.8730469 + - 2.3007813 + - 1.4492188 + - -9.1171875 + - -3.3105469 + - 4.484375 + - 3.5097656 + - 8.40625 + - -1.7578125 + - -2.0429688 + - 8.46875 + - 3.2988281 + - 6.203125 + - 3.4882813 + - 4.8085938 + - -2.5253906 + - -0.5834961 + - -0.06707764 + - -2.8964844 + - -0.16894531 + - -5.3710938 + - -5.8203125 + - -2.390625 + - 2.7773438 + - -1.1132813 + - 6.5390625 + - 4.375 + - -2.921875 + - 0.2998047 + - 6.0078125 + - -0.33642578 + - -2.984375 + - -1.1054688 + - 3.5332031 + - 7.2070313 + - 3.78125 + - -2.5390625 + - 0.12194824 + - 7.1328125 + - 9.9921875 + - -0.084228516 + - 0.6791992 + - 0.66796875 + - -0.76123047 + - -2.2597656 + - 0.029327393 + - 0.017471313 + - 6.6523438 + - 2.6425781 + - -3.8828125 + - -4.7773438 + - -5.15625 + - 4.7851563 + - -2.0273438 + - 3.3554688 + - -3.4199219 + - -5.0625 + - 0.74365234 + - 2.3789063 + - -1.8720703 + - 1.9023438 + - -3.6445313 + - -3.2441406 + - 1.1259766 + - 1.7216797 + - -1.8857422 + - 4.453125 + - 0.49365234 + - 1.4111328 + - -5.5742188 + - -4.1054688 + - -0.8588867 + - -7.6054688 + - -3.9433594 + - 7.3984375 + - -0.8857422 + - -0.62890625 + - -2.0683594 + - -3.5390625 + - 5.9726563 + - 8.2265625 + - 3.9296875 + - -3.3457031 + - -1.5029297 + - 2.9707031 + - 0.16552734 + - -3.9511719 + - -4.3515625 + - -2.3828125 + - -1.3417969 + - -0.8066406 + - -2.7402344 + - -1.4658203 + - 7.125 + - -6.96875 + - -2.3066406 + - -2.4609375 + - 6.3242188 + - 1.0380859 + - -4.59375 + - -0.5942383 + - -0.8486328 + - 7.0351563 + - 1.7070313 + - 4.53125 + - 2.625 + - 5.5390625 + - -3.0136719 + - -3.1464844 + - 2.2832031 + - -4.4453125 + - 6.4765625 + - 4.9648438 + - -1.9853516 + - 4.4453125 + - 1.4960938 + - 4.5625 + - -5.03125 + - 1.3789063 + - 5.8984375 + - -6.7695313 + - -1.9003906 + - -0.059814453 + - 1.0039063 + - -0.8183594 + - -1.3632813 + - 2.109375 + - -3.2890625 + - 4.6015625 + - 3.1347656 + - 0.61572266 + - 3.6699219 + - -4.6914063 + - -2.4804688 + - 1.2744141 + - 2.1523438 + - -0.7558594 + - 0.023544312 + - -2.4082031 + - -3.2578125 + - 0.59716797 + - -7.4960938 + - -6.2070313 + - 4.7460938 + - 6.1914063 + - 8.359375 + - 12.2109375 + - -2.5332031 + - -1.2861328 + - -2.484375 + - 0.7158203 + - 2.1933594 + - -1.5917969 + - 1.9853516 + - 0.1508789 + - -3.9667969 + - -1.875 + - 8.7890625 + - 0.7089844 + - 7.5859375 + - -4.9414063 + - -6.9726563 + - 5.9179688 + - -1.8388672 + - 5.984375 + - 3.2382813 + - 0.93408203 + - -8.3359375 + - -2.0605469 + - -2.5722656 + - 1.1279297 + - -3.6679688 + - 3.6679688 + - 3.4804688 + - 2.9121094 + - -4.90625 + - 5.4453125 + - -1.0234375 + - -1.8085938 + - -4.53125 + - 6.1992188 + - -3.578125 + - 1.0693359 + - -4.3828125 + - 0.09295654 + - 7.7890625 + - 6.9023438 + - -5.1328125 + - -0.515625 + - 3.4316406 + - -2.5097656 + - 1.78125 + - 0.6191406 + - -1.7460938 + - -2.2148438 + - -2.2421875 + - -4.0742188 + - -0.65527344 + - -2.90625 + - 1.6816406 + - -4.6679688 + - -4.140625 + - 3.5644531 + - 3.8457031 + - -0.7373047 + - -0.44580078 + - 1.5253906 + - 0.107666016 + - 1.9316406 + - 6.4101563 + - -0.25610352 + - 7.6679688 + - -5.7929688 + - 7.8945313 + - 0.8520508 + - 3.0117188 + - 1.3261719 + - 3.6914063 + - -3.7578125 + - 3.7519531 + - -6.0507813 + - -6.3945313 + - 1.3876953 + - 1.9541016 + - 3.1757813 + - -0.5571289 + - -1.0400391 + - -4.5351563 + - 9.4453125 + - -5.8710938 + - 8.0078125 + - 3.6621094 + - -15.5859375 + - -2.7792969 + - 1.046875 + - 3.0683594 + - -7.7148438 + - -4.7421875 + - 1.1230469 + - -0.6894531 + - -5.7890625 + - 3.9199219 + - 10.0625 + - 0.101257324 + - -4.1796875 + - 1.2480469 + - 1.3203125 + - -0.27148438 + - 0.115478516 + - 21.40625 + - 1.1445313 + - -1.7050781 + - -0.12695313 + - 2.609375 + - -4.953125 + - 6.8007813 + - 2.8164063 + - -2.109375 + - -5.8085938 + - -4.8476563 + - 0.9741211 + - 1.8603516 + - 0.9091797 + - -1.2900391 + - 2.1367188 + - -0.2775879 + - 0.025131226 + - -5.4648438 + - -2.8417969 + - 3.1738281 + - -4.1875 + - -2.7988281 + - -1.0859375 + - 0.6738281 + - -1.7871094 + - 0.84228516 + - -9.953125 + - -1.6787109 + - -1.6992188 + - 1.8554688 + - 5.2421875 + - -0.24304199 + - -0.12646484 + - -3.2910156 + - 3.203125 + - 0.40673828 + - 1.0351563 + - 1.765625 + - 6.2382813 + - 0.9277344 + - 2.5976563 + - 1.8193359 + - -0.9863281 + - -0.26635742 + - -2.6953125 + - -5.8359375 + - -1.5664063 + - 5.71875 + - -1.8359375 + - 5.3867188 + - 4.8164063 + - -2.6757813 + - -1.171875 + - 0.83496094 + - -1.1396484 + - -3.9433594 + - 6.5351563 + - 1.8955078 + - -3.1074219 + - 3.7167969 + - -0.3630371 + - -10.1875 + - 0.25561523 + - 4.359375 + - 2.1953125 + - 4.0820313 + - 0.9638672 + - 6.5546875 + - 1.1445313 + - 3.4003906 + - 14.1640625 + - 2.0019531 + - -6.4414063 + - -5.53125 + - -2.390625 + - 5.1523438 + - -2.9179688 + - -3.0097656 + - 2.3632813 + - -1.4111328 + - 2.921875 + - -1.7275391 + - 2.4277344 + - 5.2421875 + - -1.5703125 + - 3.0390625 + - 9.203125 + - -6.7304688 + - 0.8095703 + - -0.8105469 + - -1.3173828 + - 0.94873047 + - 3.2070313 + - 3.265625 + - -10.828125 + - -5.5390625 + - 4.640625 + - -2.6425781 + - -4.7734375 + - 0.64453125 + - 4.0859375 + - -0.96777344 + - -5.1992188 + - 0.6503906 + - -0.8745117 + - -0.30981445 + - -2.9609375 + - -3.9453125 + - -6.1523438 + - 0.44311523 + - -0.5488281 + - -4.6992188 + - 4.1601563 + - -2.7402344 + - 2.9355469 + - 0.7158203 + - 3.5253906 + - 3.2011719 + - -1.5136719 + - -3.609375 + - -0.81103516 + - 0.79589844 + - 0.25219727 + - -1.6132813 + - 6.1953125 + - 3.9785156 + - 2.1484375 + - -4.8085938 + - 0.31274414 + - 6.5585938 + - -0.56152344 + - -3.203125 + - 4.7578125 + - -4.2890625 + - 0.0036144257 + - 4.6523438 + - -4.3789063 + - -0.7910156 + - -5.5859375 + - -8.171875 + - -6.9921875 + - -4.0625 + - -0.8754883 + - 0.9135742 + - -7.7265625 + - -1.1416016 + - -3.3457031 + - -7.6601563 + - -1.4003906 + - -3.9570313 + - 5.5585938 + - -2.8339844 + - -5.34375 + - 0.62597656 + - -0.8334961 + - -0.10827637 + - 2.5410156 + - -4.1640625 + - 0.035461426 + - -1.4824219 + - -18.234375 + - -3.5136719 + - -0.61621094 + - -2.9492188 + - -2.3125 + - -2.7324219 + - -4.4375 + - 0.2253418 + - 3.4140625 + - 2.2773438 + - 3.96875 + - 0.52001953 + - 0.16186523 + - -9.984375 + - -1.5878906 + - -1.0664063 + - 2.5273438 + - 5.4726563 + - 3.3398438 + - 1.9677734 + - -5.3046875 + - -0.65478516 + - 1.9716797 + - -2.21875 + - 0.68408203 + - -1.9677734 + - -0.9736328 + - -7.125 + - 0.2919922 + - -3.0234375 + - 0.421875 + - -1.8300781 + - 0.45654297 + - 2.0429688 + - -3.1308594 + - -4.3320313 + - -9.6875 + - -4.0117188 + - -0.2512207 + - -8.546875 + - -1.2548828 + - 7.6445313 + - 1.7714844 + - -3.4707031 + - -12.15625 + - -3.0859375 + - -7.7617188 + - -2.0898438 + - 0.09484863 + - 6.34375 + - 2.7226563 + - -1.2441406 + - -2.7050781 + - 1.4414063 + - 2.7851563 + - 1.5 + - -1.7880859 + - -3.4667969 + - -7.3945313 + - -8.015625 + - -1.2070313 + - -2.78125 + - 1.703125 + - -6.6367188 + - -5.9804688 + - -5.0585938 + - -0.41381836 + - -2.5898438 + - -4.078125 + - -4.4101563 + - -0.11029053 + - -1.3505859 + - 0.2614746 + - -5.1835938 + - -4.4726563 + - -0.12854004 + - 2.2910156 + - -0.09680176 + - -2.6269531 + - -2.9023438 + - -5.421875 + - 15.734375 + - 4.890625 + - 2.6542969 + - 0.8989258 + - -7.96875 + - -11.1640625 + - 4.6835938 + - 0.24902344 + - -0.44335938 + - -4.6757813 + - 8.921875 + - -3.9941406 + - -0.05895996 + - 0.6982422 + - 2.0800781 + - -4.9375 + - 0.091918945 + - 1.5839844 + - 0.8911133 + - -0.09967041 + - -4.3867188 + - -0.35253906 + - 0.36157227 + - 3.2910156 + - 0.29663086 + - -1.2138672 + - 3.0644531 + - -2.1875 + - -8.7578125 + - 6.421875 + - 0.1496582 + - -3.0273438 + - -3.7128906 + - 4.4882813 + - -3.3886719 + - -4.0507813 + - 0.31323242 + - 1.7900391 + - 5.8515625 + - 4.21875 + - -0.57714844 + - -1.3984375 + - 1.4736328 + - -1.1748047 + - 2.3183594 + - -3.3847656 + - -5.015625 + - -4.84375 + - -0.9609375 + - -1.7646484 + - -0.703125 + - 0.055725098 + - -2.2929688 + - -0.08001709 + - -3.7246094 + - 7.8984375 + - 4.2265625 + - -2.875 + - -3.3457031 + - 5.640625 + - -2.6347656 + - 2.0097656 + - -0.5444336 + - 1.3837891 + - -0.0869751 + - -3.8085938 + - -3.0058594 + - 4.2109375 + - 4.7578125 + - -4.3320313 + - 11.1640625 + - -1.6669922 + - -0.8486328 + - -5.8945313 + - -5.8632813 + - -0.9379883 + - -8.4453125 + - -5.4570313 + - 1.1132813 + - -2.1230469 + - -7.9101563 + - 5.0976563 + - -5.2382813 + - -0.027252197 + - 2.1542969 + - 3.9746094 + - 6.4414063 + - 4.1953125 + - 5.4414063 + - -2.6855469 + - 0.093933105 + - -2.6210938 + - 5.515625 + - -1.9550781 + - 3.7851563 + - -2.2285156 + - 1.6621094 + - 2.8261719 + - -0.21313477 + - 5.1914063 + - 7.0585938 + - -2.84375 + - 6.21875 + - -3.6640625 + - 5.7851563 + - -0.29492188 + - -3.5859375 + - -1.5400391 + - 6.1171875 + - -0.92285156 + - 2.9316406 + - -8.7265625 + - -0.25317383 + - 0.546875 + - 2.9980469 + - -2.3164063 + - 1.6005859 + - 7.4179688 + - -6.0273438 + - -0.48217773 + - 0.13757324 + - 0.84765625 + - -6.4023438 + - -1.2714844 + - -2.8984375 + - -1.1894531 + - 2.5839844 + - -3.8261719 + - 3.5957031 + - 11.265625 + - -9.9765625 + - 3.890625 + - 7.6054688 + - -2.4746094 + - 1.7714844 + - -0.30078125 + - -4.1523438 + - 0.3125 + - -4.4492188 + - -0.3779297 + - 3.453125 + - -1.7099609 + - 1.8554688 + - -8.171875 + - 3.0625 + - 6.2382813 + - 0.23913574 + - 8.5234375 + - -3.0488281 + - -1.9902344 + - 4.5351563 + - 3.2519531 + - 0.7084961 + - -2.8632813 + - 1.2373047 + - -6.3320313 + - 1.2314453 + - 1.2734375 + - -2.9257813 + - 1.3251953 + - -2.2890625 + - 0.7158203 + - -6.4804688 + - -4.09375 + - -2.4257813 + - -0.36157227 + - 1.6533203 + - -6.1914063 + - 4.1601563 + - -13.125 + - -1.1171875 + - 6.5039063 + - 3.3125 + - 4.0625 + - 2.9902344 + - 2.9628906 + - 7.8007813 + - -2.71875 + - -3.8261719 + - 6.375 + - 3.1621094 + - -8.0859375 + - -1.3447266 + - -4.8710938 + - -2.1953125 + - -0.62402344 + - -1.9199219 + - 4.578125 + - -3.9277344 + - -3.0625 + - -1.4238281 + - 20.28125 + - -1.7685547 + - 2.109375 + - -2.984375 + - 0.41845703 + - -4.765625 + - -0.69091797 + - 1.3945313 + - 2.0566406 + - 3.9042969 + - 1.7929688 + - 0.6171875 + - -2.4375 + - -0.94677734 + - 5.6601563 + - 0.81689453 + - 0.041137695 + - -1.7695313 + - 6.6289063 + - 0.49926758 + - -6.5 + - -3.3007813 + - -12.1796875 + - -0.38208008 + - -0.8300781 + - -1.9794922 + - 5.0234375 + - -3.1015625 + - 0.17346191 + - 10.1328125 + - 4.4179688 + - -3.2011719 + - 1.7480469 + - -8.9765625 + - 1.4941406 + - 6.7226563 + - 9.0390625 + - -2.6210938 + - -5.4492188 + - 4.4453125 + - -0.6225586 + - -5.9101563 + - 0.28149414 + - 4.0273438 + - 7.40625 + - 4.3203125 + - -6.875 + - -2.65625 + - -4.1875 + - -1.9970703 + - 1.03125 + - -9.4453125 + - -6.1835938 + - -4.7851563 + - -10.5 + - -0.062408447 + - 1.7246094 + - -5.8710938 + - 6.8046875 + - -2.2578125 + - -2.8085938 + - 5.453125 + - -2.2617188 + - 7.625 + - 0.67285156 + - 0.17578125 + - -12.84375 + - -0.18786621 + - -1.0966797 + - 4.1523438 + - -2.2402344 + - 3.0917969 + - 3.5488281 + - -7.2695313 + - 0.022140503 + - 1.2539063 + - -9.3203125 + - -8.265625 + - -2.2792969 + - -0.7631836 + - 6.8046875 + - -1.9013672 + - -11.8046875 + - -0.24047852 + - 3.5859375 + - -2.7890625 + - 0.5673828 + - -5.1953125 + - -2.3183594 + - -3.0273438 + - -4.1875 + - 3.7460938 + - -2.4316406 + - -2.0429688 + - -3.3789063 + - -2.3417969 + - 3.6582031 + - 9.1484375 + - -5.2226563 + - 3.0546875 + - 0.36157227 + - -1.1728516 + - -5.2539063 + - 2.1308594 + - -10.15625 + - 1.9169922 + - 0.2722168 + - 0.60839844 + - 3.9472656 + - 5.1679688 + - 0.6791992 + - -10.6953125 + - -2.1757813 + - 1.3056641 + - -1.2558594 + - 2.8378906 + - -1.3095703 + - -0.5136719 + - 1.3476563 + - 12.265625 + - -1.0419922 + - 4.5078125 + - 7.2890625 + - 1.2998047 + - 1.9511719 + - 3.9648438 + - 1.5673828 + - 1.5996094 + - -2.0605469 + - 1.8046875 + - 4.3632813 + - -7.7304688 + - 2.1425781 + - 0.7246094 + - -4.0976563 + - 0.8198242 + - 12.375 + - -7.5390625 + - -10 + - 1.4423828 + - -0.7089844 + - 0.7211914 + - 9.21875 + - -7.203125 + - 1.078125 + - 4.21875 + - 2.0488281 + - -4.5898438 + - -6.4414063 + - -4.6914063 + - -3.4394531 + - -1.21875 + - 17.265625 + - 2.96875 + - 1.1923828 + - 5.8125 + - -4.9609375 + - 2.5761719 + - -2.640625 + - -1.4892578 + - -8.359375 + - -0.8305664 + - 3.8242188 + - -2.7851563 + - -0.5551758 + - 2.0800781 + - 10.5078125 + - 6.3085938 + - 4.9375 + - 4.046875 + - -6.2148438 + - -1.1171875 + - 3.1464844 + - -5.7695313 + - 6.1328125 + - 2.7324219 + - -0.15002441 + - -6.1601563 + - 0.4855957 + - -5.0703125 + - -4.9296875 + - 2.6796875 + - 4.75 + - 4.1015625 + - -3.7539063 + - 1.7714844 + - 1.0996094 + - -1.8242188 + - -4.1914063 + - 1.6787109 + - 7.546875 + - 4.984375 + - 2.171875 + - -5.7109375 + - -0.77441406 + - 1.6904297 + - -3.1386719 + - -3.1113281 + - -9.4765625 + - -3.6054688 + - 7.015625 + - 1.6132813 + - -2.328125 + - -6.1367188 + - 2.8710938 + - 2.4628906 + - -1.3759766 + - 2.9160156 + - 0.4428711 + - 2.3945313 + - -1.7441406 + - -0.88671875 + - -0.1694336 + - 1.5869141 + - 0.16357422 + - -3.2832031 + - -0.15612793 + - 5.3320313 + - 5.5351563 + - -5.1640625 + - -2.4960938 + - 0.9658203 + - 12.1640625 + - -1.7626953 + - -1.1142578 + - 0.7270508 + - 8.3671875 + - 4.140625 + - -6.8867188 + - 1.8105469 + - 6.4296875 + - -4.1367188 + - 0.45458984 + - 2.5019531 + - 6.0742188 + - -1.1699219 + - 1.0537109 + - 5.3554688 + - 3.8125 + - -2.2871094 + - 0.9238281 + - 4.9296875 + - 1.9853516 + - 9.484375 + - 0.5942383 + - -2.4199219 + - -1.9736328 + - 2.2128906 + - -3.1914063 + - -10.7734375 + - 0.5703125 + - -6.2734375 + - 4.9804688 + - 1.1855469 + - 0.4416504 + - 3.8925781 + - -2.8496094 + - -2.1054688 + - 2.5566406 + - -0.7841797 + - -1.8798828 + - -8.125 + - 3.7285156 + - 0.09362793 + - -4.3515625 + - -2.8378906 + - 4.8515625 + - 1.8964844 + - -2.6269531 + - 1.4208984 + - 0.90185547 + - 2.3457031 + - -9.125 + - 1.0859375 + - 1.3027344 + - -2.2382813 + - 4.875 + - -3.1582031 + - -6.3789063 + - -1.2128906 + - 4.7773438 + - 0.27392578 + - -0.43188477 + - 5.8125 + - -4.1367188 + - -4.4570313 + - -7.8046875 + - -3.3515625 diff --git a/backends/candle/tests/snapshots/test_jina_code__jina_code_batch.snap b/backends/candle/tests/snapshots/test_jina_code__jina_code_batch.snap new file mode 100644 index 00000000..c82cb3b7 --- /dev/null +++ b/backends/candle/tests/snapshots/test_jina_code__jina_code_batch.snap @@ -0,0 +1,2309 @@ +--- +source: backends/candle/tests/test_jina_code.rs +assertion_line: 34 +expression: embeddings_batch +--- +- - -0.15109055 + - -0.021903634 + - -0.083914824 + - -0.12880398 + - 0.35795656 + - 0.29648995 + - -0.7700259 + - -0.6232085 + - 0.5061859 + - 0.32812628 + - -0.18676779 + - 0.5090188 + - 0.45361203 + - 0.68920135 + - 0.45408535 + - 0.018128024 + - 0.025971208 + - 0.68283266 + - -0.18952315 + - 0.0038942832 + - -0.3604529 + - 0.34934753 + - -0.20016576 + - -0.16480061 + - -0.32872507 + - 0.109056644 + - 0.3764274 + - -0.46188527 + - -0.54918104 + - 0.6157312 + - -1.0830243 + - -0.33922067 + - -0.16675155 + - -0.18266918 + - -0.17769708 + - -0.17737399 + - 0.37486547 + - 0.58084005 + - -0.3567266 + - -0.41240114 + - -0.6137596 + - -0.45474958 + - -0.49108082 + - 0.31371123 + - -0.5121634 + - -0.3197327 + - -0.18065253 + - -0.64862263 + - -0.66046077 + - -1.0115874 + - -0.7223414 + - -0.32740927 + - 0.53072345 + - 0.05111746 + - 0.2075495 + - -0.28874597 + - -0.17527471 + - -0.008905607 + - -0.122156546 + - 0.021472305 + - 0.20913471 + - -0.4211547 + - 0.3197582 + - 0.34856012 + - -0.33770165 + - 0.27678913 + - -0.6166295 + - 0.57761586 + - -0.29957268 + - 0.07320643 + - -0.2265589 + - -0.31391874 + - 0.76492447 + - 0.007600454 + - -0.24119496 + - 0.04892763 + - 0.045543913 + - -0.10091984 + - -0.058633436 + - 0.10562694 + - -0.1420554 + - 0.4863675 + - -0.4318424 + - -1.0247877 + - -0.023403248 + - -0.63065374 + - -0.49578613 + - -0.092090085 + - -0.20044541 + - -0.58556545 + - 0.115839 + - 0.3798816 + - 0.424985 + - 0.39816627 + - -0.2285332 + - 0.36628655 + - -0.44768625 + - 0.22070913 + - 0.534507 + - -0.7085661 + - -0.070538834 + - -0.107348874 + - -0.3253587 + - 0.62993294 + - -0.75059 + - -1.0707804 + - -0.68110603 + - 0.32859373 + - -0.2118855 + - -0.6408962 + - -0.52045304 + - 0.73433083 + - -0.1304437 + - 0.6365012 + - -0.32628164 + - -0.18581727 + - 0.63856125 + - -0.12516598 + - -1.1121966 + - 0.22908626 + - -0.18862781 + - 0.60101926 + - -0.39073998 + - -0.6447968 + - -0.08831934 + - -0.44524685 + - 0.8490645 + - 0.22501259 + - -0.24692704 + - -1.1086503 + - -0.15384841 + - -0.55875844 + - -0.7331938 + - 1.0501978 + - 0.36605185 + - -0.1838262 + - 0.5206189 + - 0.237174 + - 0.2063224 + - 0.07563617 + - 0.0067095836 + - 0.05887958 + - 0.32364896 + - 0.23489417 + - 0.3175898 + - -0.75022984 + - -0.28961807 + - -0.42942932 + - 0.18670824 + - -0.13244013 + - 0.23977569 + - -0.2373133 + - 1.0015438 + - -0.20318209 + - 0.091986164 + - 0.35573465 + - -0.2647709 + - -0.95180094 + - -0.079319276 + - 0.27213028 + - -0.3250932 + - -0.265531 + - -0.06336659 + - 0.5788936 + - -0.28100872 + - 0.13420996 + - 0.12869371 + - 0.29647395 + - -0.24638884 + - 0.22951232 + - 0.29915494 + - -0.6673683 + - 0.2579727 + - 0.2170357 + - 0.28044018 + - 0.3005139 + - 0.1420653 + - 0.09953698 + - 0.5016433 + - 0.5750065 + - 0.043215007 + - 0.25182495 + - -0.7248352 + - -0.999321 + - -0.4589929 + - -0.09168369 + - -0.18338953 + - 0.40430227 + - 0.15028067 + - 0.5487751 + - 0.62510055 + - -0.18643674 + - -0.010421776 + - 0.11832279 + - 0.14426151 + - -0.116284296 + - -0.12081876 + - 0.4218832 + - 1.1945444 + - 0.20170249 + - 0.40529028 + - 0.17298388 + - 0.4703354 + - 0.40446448 + - -0.27903953 + - 0.15500137 + - -1.3613433 + - 0.4349553 + - -0.6092625 + - -0.70038843 + - 0.33829692 + - -0.049486037 + - 1.2292315 + - 1.1875246 + - 0.88110733 + - -0.03808219 + - -0.4112232 + - 0.059451427 + - 0.18286517 + - -0.38637286 + - -0.15960105 + - -0.75563526 + - -0.13992405 + - 0.2876585 + - 0.34938484 + - -0.6364276 + - 0.26648706 + - 0.14986621 + - -0.02178538 + - -0.4328274 + - 0.32400253 + - -0.56284696 + - 0.0017066401 + - 0.48950258 + - 0.9744805 + - 0.79537344 + - -0.21747883 + - 0.49245363 + - -0.054273184 + - -0.0015835592 + - -0.40899876 + - -0.5273927 + - -0.12501761 + - -0.8540773 + - -0.39120156 + - 0.74370086 + - 0.31688598 + - -0.1167029 + - -0.17205204 + - -0.92589134 + - -0.44832373 + - -0.14176796 + - 0.15559316 + - 0.18620004 + - 0.029677821 + - -0.7860899 + - 0.6119261 + - -0.22759564 + - 0.27114338 + - -0.13304555 + - -0.43458125 + - 0.3509001 + - -0.25703368 + - 1.1999604 + - -0.7353845 + - 0.22466286 + - 0.28216404 + - 0.3068133 + - 0.22410686 + - -0.89779717 + - 3.079363 + - 0.64849144 + - -0.051214017 + - -0.13966322 + - 0.040685207 + - -0.34677258 + - 0.16971292 + - 0.26769742 + - -0.029500902 + - 0.48766795 + - 0.23884484 + - -0.6286489 + - -0.84872234 + - -0.2792891 + - -0.38614812 + - -0.33205667 + - 0.043627854 + - -0.09268977 + - 0.025558773 + - -0.03295981 + - 0.8038319 + - 0.23085825 + - 0.57229805 + - 0.015164251 + - 0.326595 + - 0.5086542 + - -0.48954597 + - 0.28064272 + - 0.20231196 + - 0.57230157 + - -0.32051596 + - -0.017456383 + - 0.8301593 + - -0.26487425 + - -0.57291526 + - -0.43000674 + - 0.40386793 + - -0.05868221 + - -0.057881687 + - -0.43141183 + - 0.032518987 + - 0.1253997 + - 0.56710976 + - 0.5799254 + - -1.153662 + - -1.10415 + - 0.026664412 + - 0.07890936 + - 0.30930015 + - 0.663942 + - 0.074350215 + - 0.5277145 + - -0.46849388 + - -0.23736477 + - 0.10271544 + - -0.6875649 + - 1.0708058 + - 0.020512069 + - 0.0056299777 + - 0.2355162 + - 0.5215009 + - -0.46059683 + - 0.66269505 + - 0.47026086 + - -0.5134104 + - -0.024114873 + - -0.072785124 + - 0.47082546 + - 0.1581585 + - -0.11227976 + - -0.056339893 + - 0.21406786 + - -0.20518807 + - 0.6122274 + - 1.1290092 + - -0.12989084 + - 0.29127744 + - 0.12319786 + - 0.4438106 + - 0.12894677 + - -0.18791506 + - 0.23426783 + - -0.50117284 + - 0.551251 + - -0.13086843 + - 0.74193066 + - -0.35664067 + - 0.22491322 + - 0.28431758 + - -0.6247842 + - -0.32735807 + - 0.21448077 + - -0.2287333 + - 0.40534654 + - 0.285397 + - -0.00997967 + - -0.19634967 + - 0.19089007 + - 0.37149337 + - -0.47715828 + - -0.29549593 + - -0.5872835 + - -0.36474487 + - 0.9297853 + - -0.11981724 + - -0.6729041 + - -0.25248244 + - 0.04529079 + - 0.8676567 + - 1.190012 + - -0.8955213 + - 0.6969344 + - 0.15096132 + - -0.33601168 + - 0.58402616 + - 0.40269914 + - -0.29323262 + - -0.12331058 + - -0.19022873 + - -0.2695512 + - -0.34561163 + - 0.12637508 + - -0.32674125 + - -0.24046609 + - -0.36392096 + - -0.2750025 + - -0.1285536 + - 0.24339662 + - -0.8961811 + - -0.30471936 + - -0.33182573 + - 0.21140103 + - 0.0081760185 + - 0.49128702 + - -0.6027674 + - 0.8579567 + - -0.11586177 + - 0.9756438 + - -0.6629891 + - -0.6875798 + - 0.28862348 + - -0.18273708 + - -0.46361127 + - 0.32340264 + - 0.2774327 + - 0.19078733 + - 1.0107533 + - -0.36158043 + - 0.74900544 + - 0.72242737 + - 0.8227667 + - -0.34258467 + - 0.14299211 + - -0.07485575 + - 0.036902674 + - 0.6683555 + - -0.29041463 + - 0.117668785 + - 0.22068712 + - -0.41664442 + - -0.96687144 + - -0.30115357 + - 0.32991382 + - -0.53672373 + - -0.41835007 + - -0.20272854 + - -0.2060292 + - 0.28951123 + - 0.22901095 + - -0.37840703 + - 0.039218128 + - -0.6748184 + - 0.5217079 + - -0.1034972 + - -0.8034658 + - -0.011289501 + - 0.34773663 + - 0.11336859 + - -0.6484629 + - -0.060686268 + - 0.24654332 + - -0.10321144 + - 0.7025103 + - 0.29660672 + - 0.38687262 + - -0.13210179 + - -0.2598397 + - -0.19132333 + - 0.22228898 + - 0.2603877 + - 0.21548876 + - 0.14805317 + - -0.15419398 + - 0.5276412 + - 0.056747086 + - -0.6454563 + - 0.34790102 + - 0.09949684 + - -0.08417777 + - -0.1851544 + - 0.18506108 + - 0.068498686 + - 0.6502181 + - -0.21207963 + - -0.015460708 + - 0.5452031 + - -0.0136506725 + - -0.66419417 + - 0.28765276 + - -0.25317898 + - 0.12276302 + - -1.0584223 + - 0.2080617 + - 0.014420531 + - 0.010814128 + - -0.021357426 + - -0.663314 + - 0.5983 + - 0.3211898 + - -0.4120384 + - -0.016948262 + - -0.0784177 + - 0.7843738 + - -0.21809463 + - -0.38949633 + - -0.2897738 + - 0.16010587 + - 0.50716555 + - -0.08669298 + - 0.54262674 + - 0.10004849 + - -0.18665542 + - 0.032770045 + - -0.64843833 + - 0.26445454 + - 0.74924886 + - -0.07950161 + - -0.14100347 + - -0.31680727 + - 0.28603527 + - 0.083222285 + - -0.3480211 + - 0.44965547 + - -0.15479736 + - 0.22125898 + - 0.3388934 + - -0.26549906 + - 0.83331996 + - 0.55423844 + - 0.119455345 + - 0.522641 + - 0.36807114 + - 0.28813356 + - -0.39205498 + - -0.048589382 + - 0.42110068 + - -0.27116948 + - 0.012550103 + - -0.15916474 + - 1.0338836 + - 0.5436742 + - -0.107564844 + - -0.11579458 + - 0.62463063 + - -0.1658367 + - -0.00991859 + - 0.16484539 + - -0.2379682 + - 0.28699717 + - -0.12484685 + - 0.03996123 + - -0.4752685 + - -0.08142393 + - 0.25321585 + - 0.12158222 + - 0.30579358 + - -0.011137897 + - 0.24646255 + - -0.18199305 + - -0.14097403 + - -0.14552395 + - 0.15069184 + - -0.94389087 + - -0.07475461 + - 1.5525175 + - 0.7813598 + - -0.30151543 + - -0.20538568 + - -0.13666657 + - 0.25118873 + - -0.51551485 + - -0.95776737 + - 0.024866985 + - -0.017964458 + - 0.3413524 + - 0.057734262 + - -0.67059296 + - -0.43544927 + - -0.8328768 + - -1.1275549 + - 0.14031795 + - 0.5319012 + - 0.27944943 + - 0.22952522 + - -0.28443557 + - 0.6221407 + - -0.08270294 + - 0.23333415 + - 0.067328826 + - 0.033942398 + - -0.114709854 + - 0.12058519 + - -0.24028197 + - 0.052860312 + - 0.06138326 + - -0.25741568 + - -0.20557322 + - 0.10167645 + - -0.81910133 + - -0.8167869 + - -0.04096342 + - -0.31532592 + - -0.032089792 + - 0.004406052 + - -0.31635433 + - -0.3807473 + - -0.59952134 + - -0.17082903 + - 0.5269717 + - 0.16015509 + - 0.026568549 + - -0.100347854 + - -0.08351288 + - -0.32397708 + - 0.19073197 + - -0.0373209 + - -0.6122793 + - -0.1947716 + - 0.059598617 + - -0.9711447 + - -0.11143776 + - 0.25144938 + - -0.29247233 + - -1.004682 + - 0.103191294 + - -0.26377746 + - 0.3734496 + - 0.32138142 + - 0.22011694 + - 0.16574502 + - 0.24156201 + - -0.7507314 + - 0.41684183 + - 0.23563682 + - -0.509628 + - -0.34086603 + - -0.500616 + - -0.5663271 + - -0.10434014 + - -0.21033464 + - -0.013725403 + - -0.054067906 + - 0.06762518 + - -0.07603091 + - 0.38126868 + - -0.21514787 + - 0.6514047 + - 0.16380346 + - 0.21190718 + - -0.10777349 + - -1.1651728 + - 0.85149914 + - -0.13673452 + - -0.27911338 + - 0.39395612 + - -0.8459781 + - 0.06320047 + - -0.17092915 + - 0.6597654 + - 0.094674535 + - -0.33517623 + - 0.10690124 + - 0.17950585 + - 0.48410887 + - 0.030655479 + - 0.09933066 + - 0.1550446 + - 0.431155 + - 0.100912 + - -1.005455 + - -0.41569605 + - -0.21975613 + - 0.8140865 + - 0.20669267 + - 0.8102458 + - 0.9729819 + - -0.11925534 + - -0.33138567 + - -0.2048377 + - -0.05757957 + - -1.1365687 + - 0.10137909 + - 0.79411316 + - 0.21457972 + - 0.0864565 + - -0.0811936 + - 0.04506113 + - -0.29865235 + - 0.51285124 + - -0.048639547 + - 0.044134088 + - 0.38353294 + - 0.300623 + - -0.3087665 + - 0.6065137 + - 0.38760313 + - -0.39175853 + - -0.16171618 + - 0.4792343 + - 0.23237494 + - -1.0454332 + - 0.6672624 + - 0.54942864 + - -0.30390593 + - -0.46868578 + - 0.12068311 + - -0.20385695 + - -0.31071672 + - 0.12209125 + - -0.7388752 + - 0.42730883 + - 0.25917837 + - -0.61594784 + - -0.4380438 + - 0.054391284 + - 0.42368263 + - -0.96115905 + - 0.14401515 + - 0.11230274 + - -0.61102945 + - 0.036328387 + - -0.11808626 + - -0.15593222 + - -0.34371534 + - 0.43030024 + - -0.3359318 + - -0.2805354 + - 0.05581813 + - -0.55480397 + - 0.6060769 + - 0.9170542 + - -0.33335024 + - 0.78890103 + - 0.092671975 + - -0.8138399 + - -0.28036532 + - -0.46818033 + - -0.63843864 + - 0.60233265 + - -0.38163826 + - -0.20055696 + - 0.08256174 + - -0.31126404 + - 0.29852346 + - -1.3070982 + - -0.09121116 + - 0.64371055 + - -0.3373175 + - 0.7442893 + - -0.13088854 + - -0.29106006 + - 0.10606987 + - 0.047938626 + - -0.10944657 + - -0.03900265 + - -0.06794337 + - -0.18343163 + - -0.32839713 + - 0.28699616 + - -0.2572582 + - 0.9318657 + - -0.009791291 + - -0.1260892 + - -0.25368518 + - 0.5582221 + - -0.017653896 + - 0.566508 + - -1.0098631 + - -0.15263984 + - -1.3795891 + - 0.013236173 + - -0.96332794 + - 0.5696775 + - -0.13456643 + - -0.117322244 + - 0.34215567 + - 0.69917 + - 0.12586595 +- - -0.07786142 + - -0.45357418 + - -0.045068722 + - 0.45729974 + - 0.13652606 + - 0.4864305 + - -0.71263504 + - -0.45784613 + - 1.0385213 + - 0.45541835 + - -0.18054126 + - 0.15263839 + - 0.5569997 + - 0.32648245 + - 0.12692109 + - -0.17369151 + - 0.20731775 + - 0.76437336 + - -0.33021906 + - 0.061555278 + - -0.6511664 + - 0.25529107 + - -0.30445695 + - -0.014878184 + - -0.20437212 + - 0.074958794 + - 0.3190094 + - -0.49267665 + - -0.39914694 + - 0.48511568 + - -1.1315125 + - -0.72234744 + - 0.14346719 + - -0.013703414 + - 0.26688978 + - 0.01835191 + - 0.2824485 + - 0.63652986 + - -0.6954544 + - -0.42081937 + - -0.34980702 + - -1.1362054 + - -0.4327159 + - 0.6343842 + - -0.54404825 + - -0.19070852 + - -0.21079022 + - -0.38062838 + - -0.40214238 + - -0.9367988 + - -0.6708524 + - -0.54254025 + - 0.5711626 + - 0.491761 + - 0.011714119 + - -0.104597025 + - -0.09937394 + - 0.30859467 + - -0.014304787 + - 0.1598517 + - 0.17957723 + - -0.52580196 + - 0.53314155 + - 0.547278 + - -0.19830479 + - 0.3412484 + - -0.821317 + - 0.6425899 + - -0.18173802 + - 0.26403978 + - -0.07493261 + - -0.2578795 + - 0.9358241 + - 0.35953212 + - -0.26545367 + - -0.15325285 + - -0.27156934 + - -0.098969586 + - -0.06900242 + - -0.10856401 + - 0.014845073 + - 0.6543663 + - -0.20648926 + - -0.59429616 + - 0.044834074 + - -0.6016011 + - -0.3074939 + - 0.12069436 + - -0.21068253 + - -0.4462637 + - -0.3160701 + - 0.40451536 + - 0.71486014 + - 0.56199837 + - 0.25870034 + - 0.63157356 + - -0.29506713 + - -0.03399534 + - 0.42672864 + - -1.1007652 + - -0.0299249 + - 0.0035790552 + - -0.015582025 + - 0.49542332 + - -0.38047197 + - -0.97221154 + - -0.4969573 + - 0.0900822 + - -0.111649394 + - -0.5494892 + - -0.81757635 + - 0.64183956 + - -0.28965923 + - 0.46828648 + - -0.15771942 + - -0.6171276 + - 0.49324498 + - -0.27548513 + - -1.1439961 + - 0.46799517 + - 0.0007062008 + - 0.6362501 + - -0.4524293 + - -0.30710042 + - 0.060824484 + - 0.091235705 + - 0.91970557 + - 0.4701204 + - 0.33024046 + - -1.2422528 + - -0.007898175 + - -0.29915166 + - -0.91086435 + - 0.7777292 + - 0.27987966 + - -0.38256717 + - 0.15310927 + - -0.049911886 + - 0.2220818 + - 0.18885867 + - 0.18296032 + - 0.37604895 + - 0.47609007 + - 0.08868736 + - 0.26372507 + - -0.41232395 + - -0.3160052 + - -0.24398251 + - 0.241612 + - -0.25604454 + - 0.27717087 + - -0.09842613 + - 0.73582727 + - -0.5052824 + - -0.15584397 + - 0.07055872 + - -0.003672878 + - -0.9515732 + - 0.17043869 + - 0.11430165 + - -0.19623208 + - -0.5138623 + - -0.41950908 + - 0.32824373 + - -0.19083916 + - 0.37393293 + - -0.23411167 + - 0.5913014 + - -0.28060567 + - 0.296862 + - 0.2596457 + - -0.9002312 + - -0.13431151 + - 0.40842977 + - -0.22142428 + - 0.7187679 + - 0.15689404 + - 0.124225296 + - 0.2035294 + - 0.83978146 + - 0.09570151 + - 0.23836873 + - -0.6525228 + - -0.55621916 + - -0.27292597 + - -0.13630824 + - 0.14037149 + - 0.229254 + - 0.12983714 + - 0.40444943 + - 0.1858714 + - 0.068808794 + - -0.110493384 + - 0.102672435 + - 0.3521144 + - -0.10837799 + - 0.05199879 + - 0.6989198 + - 0.664522 + - 0.10287348 + - 0.4963374 + - -0.2030559 + - 0.0726716 + - -0.04625601 + - -0.3365918 + - 0.0068650967 + - -1.0241108 + - 0.76348543 + - -0.6046044 + - -0.43724862 + - 0.33068967 + - -0.4087681 + - 0.94922096 + - 1.1976125 + - 0.9665229 + - -0.036878865 + - -0.36757708 + - 0.2157582 + - -0.028651789 + - -0.20252632 + - -0.29808772 + - -0.52247566 + - -0.005355196 + - -0.075832695 + - 0.30384603 + - -0.68423486 + - 0.51785684 + - 0.1623555 + - -0.1476549 + - -0.45655838 + - 0.3543713 + - -0.3572794 + - 0.09839416 + - 0.36012864 + - 0.7882468 + - 0.8440898 + - -0.09494529 + - 0.63669956 + - -0.53272164 + - 0.08586896 + - -0.32474843 + - -0.5816953 + - -0.16000634 + - -1.076547 + - -0.24794038 + - 0.65420693 + - 0.8528168 + - 0.011532496 + - -0.45261598 + - -0.52250195 + - -0.46723437 + - -0.101790994 + - -0.08021287 + - -0.21129172 + - -0.14711331 + - -0.9028279 + - 0.16915126 + - -0.3702627 + - 0.6825509 + - -0.27478036 + - -0.22102176 + - 0.35095587 + - -0.24872582 + - 1.0209233 + - -0.93013436 + - 0.5628895 + - 0.3478675 + - 0.43118665 + - 0.20640378 + - -0.70029324 + - 3.02863 + - 0.77857095 + - -0.51064146 + - -0.14920074 + - -0.19589609 + - -0.38595414 + - -0.08397072 + - 0.010033189 + - -0.47740045 + - 0.66486734 + - 0.5594165 + - -0.57105136 + - -0.75195533 + - -0.49135843 + - -0.6753535 + - -0.36823097 + - 0.20132725 + - -0.28685614 + - -0.11755943 + - -0.38957253 + - 0.3233848 + - 0.25502992 + - 0.6123748 + - -0.046694417 + - 0.16391285 + - 0.19540663 + - -0.08024872 + - 0.12695618 + - 0.10749493 + - 0.6060849 + - -0.28204346 + - -0.24861582 + - 0.35207233 + - -0.3655013 + - -0.3177478 + - -0.3710073 + - 0.6485475 + - 0.032564417 + - 0.19188507 + - -0.35666385 + - -0.022722358 + - 0.21269345 + - 0.61906487 + - 0.5533348 + - -0.84949845 + - -0.76725054 + - 0.052179724 + - 0.12143079 + - 0.5103976 + - 1.0513825 + - 0.011810702 + - 0.25544533 + - -0.46194184 + - -0.17457883 + - -0.08209206 + - -0.8323801 + - 1.1035703 + - -0.04112914 + - -0.23204209 + - 0.13400488 + - 0.24492435 + - -0.53583604 + - 0.6864936 + - 0.36237684 + - -0.29057115 + - 0.16300681 + - -0.18469922 + - 0.2510353 + - 0.24710034 + - -0.25797105 + - 0.07936838 + - -0.10755459 + - -0.6668527 + - 0.71272737 + - 0.96070784 + - 0.0897095 + - -0.10134282 + - 0.13745584 + - 0.88356096 + - 0.18184268 + - -0.6444132 + - 0.6922049 + - -0.22376014 + - 0.92993736 + - 0.22876155 + - 0.92287606 + - -0.4919002 + - 0.0806739 + - 0.25746316 + - -0.6026022 + - -0.18700987 + - 0.06746069 + - -0.35947916 + - 0.7623815 + - 0.4746667 + - 0.06671024 + - -0.033748213 + - 0.35250023 + - 0.358421 + - -0.50682014 + - -0.5062383 + - -0.4786962 + - -0.51264924 + - 0.3474764 + - -0.16556293 + - -0.34439793 + - -0.805664 + - -0.30450737 + - 0.5673922 + - 1.0772012 + - -0.8594753 + - 0.7097661 + - 0.060878694 + - -0.12994874 + - 0.4822967 + - -0.053847596 + - -0.29866394 + - 0.02455262 + - -0.06947708 + - -0.5491764 + - 0.03477047 + - -0.01529944 + - -0.5502256 + - -0.34595826 + - -0.29576373 + - -0.23496501 + - 0.009616404 + - 0.4136629 + - -0.7399896 + - -0.15643853 + - -0.57472676 + - -0.02720648 + - -0.12653823 + - 0.6138194 + - -0.7175372 + - 0.52002805 + - -0.11973959 + - 1.0825653 + - -0.6634874 + - -0.56024426 + - 0.051323373 + - -0.1694911 + - -0.48492217 + - 0.22308724 + - -0.1251921 + - 0.31983027 + - 0.8123491 + - -0.15791355 + - 0.6639076 + - 0.85814685 + - 0.7805775 + - 0.3318061 + - 0.5087306 + - 0.14216462 + - 0.014538806 + - 0.4973236 + - -0.52142996 + - -0.0939501 + - 0.27000418 + - -0.16738701 + - -1.1808728 + - -0.53163177 + - 0.1802219 + - -0.6681091 + - -0.12522037 + - 0.05341505 + - -0.4074185 + - 0.078052685 + - 0.11662149 + - -0.22537689 + - 0.39836836 + - -0.6388151 + - 0.42452845 + - 0.20052695 + - -0.33104977 + - -0.20882992 + - -0.0055798716 + - 0.058122497 + - -0.8222186 + - -0.23073284 + - 0.20193343 + - -0.026150277 + - 0.56446 + - 0.012413904 + - 0.4913505 + - 0.13922305 + - -0.39070535 + - -0.24243315 + - 0.3587341 + - 0.56367624 + - 0.16596705 + - 0.2980485 + - -0.8546462 + - 0.7205205 + - 0.25655636 + - -1.1924773 + - 0.14163761 + - 0.26107943 + - -0.31167057 + - -0.31069285 + - 0.01503661 + - -0.38676533 + - 0.5201192 + - -0.58126616 + - 0.0046842606 + - 0.28297573 + - 0.02450039 + - -0.09804239 + - 0.16392608 + - -0.2637203 + - -0.4590641 + - -0.9859044 + - 0.15291356 + - 0.09713489 + - 0.004781542 + - 0.0007805874 + - -0.7196388 + - 0.06848469 + - 0.20312263 + - -0.46077347 + - -0.10777697 + - 0.06653512 + - 0.54529816 + - 0.11644112 + - -0.13014708 + - -0.25128517 + - 0.20415425 + - 0.7031765 + - 0.052980002 + - 0.33849978 + - 0.09222051 + - 0.2069536 + - -0.11453975 + - -0.36772454 + - 0.19188285 + - 0.68252546 + - -0.21095681 + - -0.3889579 + - -0.39637685 + - 0.31065863 + - 0.013831769 + - -0.3277922 + - 0.14038284 + - 0.06756198 + - 0.26589158 + - -0.2968774 + - -0.17099635 + - 0.73079413 + - 0.41855884 + - 0.101155005 + - 0.64970505 + - 0.12927054 + - 0.12355563 + - -0.4484849 + - -0.11863465 + - 0.763428 + - -0.22464389 + - -0.21322136 + - -0.27266 + - 1.0779943 + - 0.36396742 + - -0.510103 + - 0.09781108 + - 0.89254457 + - -0.20394637 + - 0.089977324 + - 0.3754529 + - -0.57247245 + - 0.08559313 + - -0.022890093 + - 0.12191874 + - -0.6448781 + - -0.026477367 + - 0.03702365 + - 0.071819924 + - 0.8331191 + - -0.086881906 + - 0.4117887 + - -0.049356624 + - 0.08455386 + - -0.25153118 + - 0.22801332 + - -0.40329194 + - 0.02178665 + - 1.8242391 + - 1.0338726 + - -0.11683666 + - -0.24572569 + - 0.022225609 + - 0.18766128 + - -0.3318024 + - -0.9145606 + - 0.233082 + - 0.16015281 + - -0.14052598 + - -0.24143334 + - -0.639072 + - -0.07328624 + - -0.67356634 + - -1.0313023 + - 0.1372344 + - 0.21618499 + - -0.52421004 + - -0.08402295 + - -0.20775484 + - 0.3355142 + - 0.11586433 + - 0.040259954 + - -0.009388034 + - -0.030507976 + - -0.10569668 + - 0.058448236 + - 0.23130989 + - 0.005419073 + - 0.26752022 + - 0.08603015 + - -0.58107597 + - 0.34348592 + - -0.36722827 + - -0.44802245 + - -0.35667157 + - 0.25324306 + - -0.20233725 + - -0.24386542 + - -0.41802678 + - -0.24581607 + - -0.08361264 + - -0.22173172 + - 0.42013893 + - 0.29966265 + - 0.10372277 + - -0.020874217 + - -0.028987303 + - 0.10375854 + - -0.104231186 + - -0.1924567 + - -0.58349866 + - 0.02809445 + - -0.16484728 + - -0.4186561 + - 0.061491515 + - 0.33746204 + - 0.10590016 + - -0.97023124 + - -0.16373104 + - -0.17172937 + - 0.25044575 + - 0.2700204 + - 0.28472677 + - 0.2979721 + - 0.34639537 + - -0.5168371 + - 0.33294415 + - 0.21985702 + - -0.3356746 + - -0.519751 + - -0.1971544 + - -0.6763213 + - 0.25759685 + - -0.5150413 + - -0.019787619 + - -0.324185 + - 0.18128169 + - -0.50133616 + - 0.47159365 + - -0.19445294 + - 0.52053434 + - 0.34485683 + - -0.31365943 + - -0.1259356 + - -0.94132406 + - 0.62074035 + - -0.027113594 + - -0.4773698 + - 0.25823697 + - -0.9260861 + - -0.029197177 + - 0.013566784 + - 0.7449417 + - 0.041948408 + - -0.16807151 + - 0.06611917 + - 0.17323375 + - 0.4400281 + - 0.081085615 + - -0.2928522 + - 0.15883158 + - 0.69848084 + - 0.18511367 + - -1.0700536 + - -0.722466 + - -0.037948128 + - 0.48510018 + - 0.04885233 + - 0.59825724 + - 0.6956024 + - 0.093223326 + - -0.59197503 + - -0.18171175 + - -0.032995123 + - -1.109768 + - 0.15207964 + - 0.1296593 + - 0.04163472 + - 0.39506078 + - -0.32870626 + - -0.04877087 + - -0.6636247 + - 0.7076656 + - 0.030838361 + - -0.04005822 + - 0.44165573 + - 0.079907365 + - -0.23726363 + - 0.5202741 + - 0.4782865 + - -0.41767368 + - 0.08130417 + - 0.5881479 + - -0.046927657 + - -1.4542216 + - 0.36477986 + - 0.74205416 + - -0.06654648 + - -0.25716388 + - 0.33002937 + - -0.4251559 + - -0.23838937 + - -0.18283546 + - -0.15233858 + - 0.22007908 + - -0.030792812 + - -0.8057933 + - -0.3671298 + - 0.013044941 + - 0.38409305 + - -0.74167275 + - 0.12098155 + - -0.510333 + - -0.40742263 + - -0.15140836 + - -0.05806388 + - -0.09841139 + - -0.3321196 + - 0.09564469 + - 0.3311245 + - -0.43358645 + - 0.3575132 + - -0.32164496 + - 0.38793147 + - 0.62529284 + - -0.08150098 + - 0.69711304 + - 0.4113922 + - -1.014911 + - -0.18161912 + - -0.29689062 + - -0.6251485 + - 0.5013513 + - -0.22253461 + - -0.2588533 + - 0.044328805 + - -0.45983234 + - 0.5534084 + - -1.3843861 + - -0.24567102 + - 0.6996462 + - -0.26762566 + - 0.29501638 + - -0.27813682 + - 0.024225136 + - -0.056865245 + - -0.03493492 + - 0.18810733 + - 0.16761969 + - -0.14906047 + - 0.19758202 + - -0.41006827 + - 0.058017988 + - -0.6509508 + - 0.9418776 + - 0.5173828 + - 0.05777247 + - -0.07246566 + - 0.70380193 + - 0.025031468 + - 0.612567 + - -0.6046367 + - -0.19929521 + - -1.0587875 + - -0.07334349 + - -0.64692575 + - 0.49547282 + - 0.26393098 + - -0.03014906 + - 0.46493307 + - 0.71193695 + - 0.12913483 +- - -0.15109055 + - -0.021903634 + - -0.083914824 + - -0.12880398 + - 0.35795656 + - 0.29648995 + - -0.7700259 + - -0.6232085 + - 0.5061859 + - 0.32812628 + - -0.18676779 + - 0.5090188 + - 0.45361203 + - 0.68920135 + - 0.45408535 + - 0.018128024 + - 0.025971208 + - 0.68283266 + - -0.18952315 + - 0.0038942832 + - -0.3604529 + - 0.34934753 + - -0.20016576 + - -0.16480061 + - -0.32872507 + - 0.109056644 + - 0.3764274 + - -0.46188527 + - -0.54918104 + - 0.6157312 + - -1.0830243 + - -0.33922067 + - -0.16675155 + - -0.18266918 + - -0.17769708 + - -0.17737399 + - 0.37486547 + - 0.58084005 + - -0.3567266 + - -0.41240114 + - -0.6137596 + - -0.45474958 + - -0.49108082 + - 0.31371123 + - -0.5121634 + - -0.3197327 + - -0.18065253 + - -0.64862263 + - -0.66046077 + - -1.0115874 + - -0.7223414 + - -0.32740927 + - 0.53072345 + - 0.05111746 + - 0.2075495 + - -0.28874597 + - -0.17527471 + - -0.008905607 + - -0.122156546 + - 0.021472305 + - 0.20913471 + - -0.4211547 + - 0.3197582 + - 0.34856012 + - -0.33770165 + - 0.27678913 + - -0.6166295 + - 0.57761586 + - -0.29957268 + - 0.07320643 + - -0.2265589 + - -0.31391874 + - 0.76492447 + - 0.007600454 + - -0.24119496 + - 0.04892763 + - 0.045543913 + - -0.10091984 + - -0.058633436 + - 0.10562694 + - -0.1420554 + - 0.4863675 + - -0.4318424 + - -1.0247877 + - -0.023403248 + - -0.63065374 + - -0.49578613 + - -0.092090085 + - -0.20044541 + - -0.58556545 + - 0.115839 + - 0.3798816 + - 0.424985 + - 0.39816627 + - -0.2285332 + - 0.36628655 + - -0.44768625 + - 0.22070913 + - 0.534507 + - -0.7085661 + - -0.070538834 + - -0.107348874 + - -0.3253587 + - 0.62993294 + - -0.75059 + - -1.0707804 + - -0.68110603 + - 0.32859373 + - -0.2118855 + - -0.6408962 + - -0.52045304 + - 0.73433083 + - -0.1304437 + - 0.6365012 + - -0.32628164 + - -0.18581727 + - 0.63856125 + - -0.12516598 + - -1.1121966 + - 0.22908626 + - -0.18862781 + - 0.60101926 + - -0.39073998 + - -0.6447968 + - -0.08831934 + - -0.44524685 + - 0.8490645 + - 0.22501259 + - -0.24692704 + - -1.1086503 + - -0.15384841 + - -0.55875844 + - -0.7331938 + - 1.0501978 + - 0.36605185 + - -0.1838262 + - 0.5206189 + - 0.237174 + - 0.2063224 + - 0.07563617 + - 0.0067095836 + - 0.05887958 + - 0.32364896 + - 0.23489417 + - 0.3175898 + - -0.75022984 + - -0.28961807 + - -0.42942932 + - 0.18670824 + - -0.13244013 + - 0.23977569 + - -0.2373133 + - 1.0015438 + - -0.20318209 + - 0.091986164 + - 0.35573465 + - -0.2647709 + - -0.95180094 + - -0.079319276 + - 0.27213028 + - -0.3250932 + - -0.265531 + - -0.06336659 + - 0.5788936 + - -0.28100872 + - 0.13420996 + - 0.12869371 + - 0.29647395 + - -0.24638884 + - 0.22951232 + - 0.29915494 + - -0.6673683 + - 0.2579727 + - 0.2170357 + - 0.28044018 + - 0.3005139 + - 0.1420653 + - 0.09953698 + - 0.5016433 + - 0.5750065 + - 0.043215007 + - 0.25182495 + - -0.7248352 + - -0.999321 + - -0.4589929 + - -0.09168369 + - -0.18338953 + - 0.40430227 + - 0.15028067 + - 0.5487751 + - 0.62510055 + - -0.18643674 + - -0.010421776 + - 0.11832279 + - 0.14426151 + - -0.116284296 + - -0.12081876 + - 0.4218832 + - 1.1945444 + - 0.20170249 + - 0.40529028 + - 0.17298388 + - 0.4703354 + - 0.40446448 + - -0.27903953 + - 0.15500137 + - -1.3613433 + - 0.4349553 + - -0.6092625 + - -0.70038843 + - 0.33829692 + - -0.049486037 + - 1.2292315 + - 1.1875246 + - 0.88110733 + - -0.03808219 + - -0.4112232 + - 0.059451427 + - 0.18286517 + - -0.38637286 + - -0.15960105 + - -0.75563526 + - -0.13992405 + - 0.2876585 + - 0.34938484 + - -0.6364276 + - 0.26648706 + - 0.14986621 + - -0.02178538 + - -0.4328274 + - 0.32400253 + - -0.56284696 + - 0.0017066401 + - 0.48950258 + - 0.9744805 + - 0.79537344 + - -0.21747883 + - 0.49245363 + - -0.054273184 + - -0.0015835592 + - -0.40899876 + - -0.5273927 + - -0.12501761 + - -0.8540773 + - -0.39120156 + - 0.74370086 + - 0.31688598 + - -0.1167029 + - -0.17205204 + - -0.92589134 + - -0.44832373 + - -0.14176796 + - 0.15559316 + - 0.18620004 + - 0.029677821 + - -0.7860899 + - 0.6119261 + - -0.22759564 + - 0.27114338 + - -0.13304555 + - -0.43458125 + - 0.3509001 + - -0.25703368 + - 1.1999604 + - -0.7353845 + - 0.22466286 + - 0.28216404 + - 0.3068133 + - 0.22410686 + - -0.89779717 + - 3.079363 + - 0.64849144 + - -0.051214017 + - -0.13966322 + - 0.040685207 + - -0.34677258 + - 0.16971292 + - 0.26769742 + - -0.029500902 + - 0.48766795 + - 0.23884484 + - -0.6286489 + - -0.84872234 + - -0.2792891 + - -0.38614812 + - -0.33205667 + - 0.043627854 + - -0.09268977 + - 0.025558773 + - -0.03295981 + - 0.8038319 + - 0.23085825 + - 0.57229805 + - 0.015164251 + - 0.326595 + - 0.5086542 + - -0.48954597 + - 0.28064272 + - 0.20231196 + - 0.57230157 + - -0.32051596 + - -0.017456383 + - 0.8301593 + - -0.26487425 + - -0.57291526 + - -0.43000674 + - 0.40386793 + - -0.05868221 + - -0.057881687 + - -0.43141183 + - 0.032518987 + - 0.1253997 + - 0.56710976 + - 0.5799254 + - -1.153662 + - -1.10415 + - 0.026664412 + - 0.07890936 + - 0.30930015 + - 0.663942 + - 0.074350215 + - 0.5277145 + - -0.46849388 + - -0.23736477 + - 0.10271544 + - -0.6875649 + - 1.0708058 + - 0.020512069 + - 0.0056299777 + - 0.2355162 + - 0.5215009 + - -0.46059683 + - 0.66269505 + - 0.47026086 + - -0.5134104 + - -0.024114873 + - -0.072785124 + - 0.47082546 + - 0.1581585 + - -0.11227976 + - -0.056339893 + - 0.21406786 + - -0.20518807 + - 0.6122274 + - 1.1290092 + - -0.12989084 + - 0.29127744 + - 0.12319786 + - 0.4438106 + - 0.12894677 + - -0.18791506 + - 0.23426783 + - -0.50117284 + - 0.551251 + - -0.13086843 + - 0.74193066 + - -0.35664067 + - 0.22491322 + - 0.28431758 + - -0.6247842 + - -0.32735807 + - 0.21448077 + - -0.2287333 + - 0.40534654 + - 0.285397 + - -0.00997967 + - -0.19634967 + - 0.19089007 + - 0.37149337 + - -0.47715828 + - -0.29549593 + - -0.5872835 + - -0.36474487 + - 0.9297853 + - -0.11981724 + - -0.6729041 + - -0.25248244 + - 0.04529079 + - 0.8676567 + - 1.190012 + - -0.8955213 + - 0.6969344 + - 0.15096132 + - -0.33601168 + - 0.58402616 + - 0.40269914 + - -0.29323262 + - -0.12331058 + - -0.19022873 + - -0.2695512 + - -0.34561163 + - 0.12637508 + - -0.32674125 + - -0.24046609 + - -0.36392096 + - -0.2750025 + - -0.1285536 + - 0.24339662 + - -0.8961811 + - -0.30471936 + - -0.33182573 + - 0.21140103 + - 0.0081760185 + - 0.49128702 + - -0.6027674 + - 0.8579567 + - -0.11586177 + - 0.9756438 + - -0.6629891 + - -0.6875798 + - 0.28862348 + - -0.18273708 + - -0.46361127 + - 0.32340264 + - 0.2774327 + - 0.19078733 + - 1.0107533 + - -0.36158043 + - 0.74900544 + - 0.72242737 + - 0.8227667 + - -0.34258467 + - 0.14299211 + - -0.07485575 + - 0.036902674 + - 0.6683555 + - -0.29041463 + - 0.117668785 + - 0.22068712 + - -0.41664442 + - -0.96687144 + - -0.30115357 + - 0.32991382 + - -0.53672373 + - -0.41835007 + - -0.20272854 + - -0.2060292 + - 0.28951123 + - 0.22901095 + - -0.37840703 + - 0.039218128 + - -0.6748184 + - 0.5217079 + - -0.1034972 + - -0.8034658 + - -0.011289501 + - 0.34773663 + - 0.11336859 + - -0.6484629 + - -0.060686268 + - 0.24654332 + - -0.10321144 + - 0.7025103 + - 0.29660672 + - 0.38687262 + - -0.13210179 + - -0.2598397 + - -0.19132333 + - 0.22228898 + - 0.2603877 + - 0.21548876 + - 0.14805317 + - -0.15419398 + - 0.5276412 + - 0.056747086 + - -0.6454563 + - 0.34790102 + - 0.09949684 + - -0.08417777 + - -0.1851544 + - 0.18506108 + - 0.068498686 + - 0.6502181 + - -0.21207963 + - -0.015460708 + - 0.5452031 + - -0.0136506725 + - -0.66419417 + - 0.28765276 + - -0.25317898 + - 0.12276302 + - -1.0584223 + - 0.2080617 + - 0.014420531 + - 0.010814128 + - -0.021357426 + - -0.663314 + - 0.5983 + - 0.3211898 + - -0.4120384 + - -0.016948262 + - -0.0784177 + - 0.7843738 + - -0.21809463 + - -0.38949633 + - -0.2897738 + - 0.16010587 + - 0.50716555 + - -0.08669298 + - 0.54262674 + - 0.10004849 + - -0.18665542 + - 0.032770045 + - -0.64843833 + - 0.26445454 + - 0.74924886 + - -0.07950161 + - -0.14100347 + - -0.31680727 + - 0.28603527 + - 0.083222285 + - -0.3480211 + - 0.44965547 + - -0.15479736 + - 0.22125898 + - 0.3388934 + - -0.26549906 + - 0.83331996 + - 0.55423844 + - 0.119455345 + - 0.522641 + - 0.36807114 + - 0.28813356 + - -0.39205498 + - -0.048589382 + - 0.42110068 + - -0.27116948 + - 0.012550103 + - -0.15916474 + - 1.0338836 + - 0.5436742 + - -0.107564844 + - -0.11579458 + - 0.62463063 + - -0.1658367 + - -0.00991859 + - 0.16484539 + - -0.2379682 + - 0.28699717 + - -0.12484685 + - 0.03996123 + - -0.4752685 + - -0.08142393 + - 0.25321585 + - 0.12158222 + - 0.30579358 + - -0.011137897 + - 0.24646255 + - -0.18199305 + - -0.14097403 + - -0.14552395 + - 0.15069184 + - -0.94389087 + - -0.07475461 + - 1.5525175 + - 0.7813598 + - -0.30151543 + - -0.20538568 + - -0.13666657 + - 0.25118873 + - -0.51551485 + - -0.95776737 + - 0.024866985 + - -0.017964458 + - 0.3413524 + - 0.057734262 + - -0.67059296 + - -0.43544927 + - -0.8328768 + - -1.1275549 + - 0.14031795 + - 0.5319012 + - 0.27944943 + - 0.22952522 + - -0.28443557 + - 0.6221407 + - -0.08270294 + - 0.23333415 + - 0.067328826 + - 0.033942398 + - -0.114709854 + - 0.12058519 + - -0.24028197 + - 0.052860312 + - 0.06138326 + - -0.25741568 + - -0.20557322 + - 0.10167645 + - -0.81910133 + - -0.8167869 + - -0.04096342 + - -0.31532592 + - -0.032089792 + - 0.004406052 + - -0.31635433 + - -0.3807473 + - -0.59952134 + - -0.17082903 + - 0.5269717 + - 0.16015509 + - 0.026568549 + - -0.100347854 + - -0.08351288 + - -0.32397708 + - 0.19073197 + - -0.0373209 + - -0.6122793 + - -0.1947716 + - 0.059598617 + - -0.9711447 + - -0.11143776 + - 0.25144938 + - -0.29247233 + - -1.004682 + - 0.103191294 + - -0.26377746 + - 0.3734496 + - 0.32138142 + - 0.22011694 + - 0.16574502 + - 0.24156201 + - -0.7507314 + - 0.41684183 + - 0.23563682 + - -0.509628 + - -0.34086603 + - -0.500616 + - -0.5663271 + - -0.10434014 + - -0.21033464 + - -0.013725403 + - -0.054067906 + - 0.06762518 + - -0.07603091 + - 0.38126868 + - -0.21514787 + - 0.6514047 + - 0.16380346 + - 0.21190718 + - -0.10777349 + - -1.1651728 + - 0.85149914 + - -0.13673452 + - -0.27911338 + - 0.39395612 + - -0.8459781 + - 0.06320047 + - -0.17092915 + - 0.6597654 + - 0.094674535 + - -0.33517623 + - 0.10690124 + - 0.17950585 + - 0.48410887 + - 0.030655479 + - 0.09933066 + - 0.1550446 + - 0.431155 + - 0.100912 + - -1.005455 + - -0.41569605 + - -0.21975613 + - 0.8140865 + - 0.20669267 + - 0.8102458 + - 0.9729819 + - -0.11925534 + - -0.33138567 + - -0.2048377 + - -0.05757957 + - -1.1365687 + - 0.10137909 + - 0.79411316 + - 0.21457972 + - 0.0864565 + - -0.0811936 + - 0.04506113 + - -0.29865235 + - 0.51285124 + - -0.048639547 + - 0.044134088 + - 0.38353294 + - 0.300623 + - -0.3087665 + - 0.6065137 + - 0.38760313 + - -0.39175853 + - -0.16171618 + - 0.4792343 + - 0.23237494 + - -1.0454332 + - 0.6672624 + - 0.54942864 + - -0.30390593 + - -0.46868578 + - 0.12068311 + - -0.20385695 + - -0.31071672 + - 0.12209125 + - -0.7388752 + - 0.42730883 + - 0.25917837 + - -0.61594784 + - -0.4380438 + - 0.054391284 + - 0.42368263 + - -0.96115905 + - 0.14401515 + - 0.11230274 + - -0.61102945 + - 0.036328387 + - -0.11808626 + - -0.15593222 + - -0.34371534 + - 0.43030024 + - -0.3359318 + - -0.2805354 + - 0.05581813 + - -0.55480397 + - 0.6060769 + - 0.9170542 + - -0.33335024 + - 0.78890103 + - 0.092671975 + - -0.8138399 + - -0.28036532 + - -0.46818033 + - -0.63843864 + - 0.60233265 + - -0.38163826 + - -0.20055696 + - 0.08256174 + - -0.31126404 + - 0.29852346 + - -1.3070982 + - -0.09121116 + - 0.64371055 + - -0.3373175 + - 0.7442893 + - -0.13088854 + - -0.29106006 + - 0.10606987 + - 0.047938626 + - -0.10944657 + - -0.03900265 + - -0.06794337 + - -0.18343163 + - -0.32839713 + - 0.28699616 + - -0.2572582 + - 0.9318657 + - -0.009791291 + - -0.1260892 + - -0.25368518 + - 0.5582221 + - -0.017653896 + - 0.566508 + - -1.0098631 + - -0.15263984 + - -1.3795891 + - 0.013236173 + - -0.96332794 + - 0.5696775 + - -0.13456643 + - -0.117322244 + - 0.34215567 + - 0.69917 + - 0.12586595 diff --git a/backends/candle/tests/snapshots/test_jina_code__jina_code_single.snap b/backends/candle/tests/snapshots/test_jina_code__jina_code_single.snap new file mode 100644 index 00000000..dc2119de --- /dev/null +++ b/backends/candle/tests/snapshots/test_jina_code__jina_code_single.snap @@ -0,0 +1,773 @@ +--- +source: backends/candle/tests/test_jina_code.rs +assertion_line: 45 +expression: embeddings_single +--- +- - -0.15109017 + - -0.021903912 + - -0.08391459 + - -0.12880382 + - 0.35795733 + - 0.2964905 + - -0.7700258 + - -0.6232095 + - 0.50618637 + - 0.3281261 + - -0.18676828 + - 0.5090185 + - 0.45361134 + - 0.6892018 + - 0.45408398 + - 0.018128872 + - 0.025972119 + - 0.68283266 + - -0.18952282 + - 0.0038939554 + - -0.36045286 + - 0.34934822 + - -0.20016623 + - -0.16480026 + - -0.32872525 + - 0.10905678 + - 0.37642816 + - -0.46188572 + - -0.54918206 + - 0.6157313 + - -1.0830249 + - -0.339221 + - -0.1667515 + - -0.1826696 + - -0.17769721 + - -0.1773744 + - 0.37486538 + - 0.5808406 + - -0.3567268 + - -0.412402 + - -0.61375934 + - -0.45475024 + - -0.49108127 + - 0.31371126 + - -0.5121643 + - -0.31973246 + - -0.18065177 + - -0.6486226 + - -0.66046107 + - -1.0115873 + - -0.72234154 + - -0.32740912 + - 0.5307237 + - 0.05111724 + - 0.2075493 + - -0.28874597 + - -0.17527461 + - -0.008904695 + - -0.122156724 + - 0.021473024 + - 0.20913582 + - -0.4211541 + - 0.31975842 + - 0.3485598 + - -0.3377011 + - 0.2767898 + - -0.6166291 + - 0.5776161 + - -0.29957384 + - 0.07320692 + - -0.22655882 + - -0.31391934 + - 0.76492363 + - 0.007601051 + - -0.2411951 + - 0.048926763 + - 0.045543216 + - -0.10092032 + - -0.058633085 + - 0.10562677 + - -0.14205451 + - 0.48636737 + - -0.431843 + - -1.0247887 + - -0.023403699 + - -0.630654 + - -0.49578592 + - -0.09209086 + - -0.20044567 + - -0.5855643 + - 0.1158377 + - 0.379882 + - 0.42498636 + - 0.3981659 + - -0.22853294 + - 0.3662865 + - -0.44768646 + - 0.22070856 + - 0.5345074 + - -0.7085676 + - -0.0705391 + - -0.10734863 + - -0.3253591 + - 0.6299327 + - -0.75059074 + - -1.0707809 + - -0.6811064 + - 0.32859367 + - -0.21188518 + - -0.6408968 + - -0.5204542 + - 0.73433125 + - -0.1304438 + - 0.6365018 + - -0.32628176 + - -0.18581797 + - 0.6385614 + - -0.12516536 + - -1.1121975 + - 0.2290868 + - -0.1886282 + - 0.60102016 + - -0.39074013 + - -0.64479715 + - -0.08831843 + - -0.4452467 + - 0.8490649 + - 0.22501282 + - -0.24692632 + - -1.1086496 + - -0.15384836 + - -0.55875856 + - -0.7331939 + - 1.050198 + - 0.366051 + - -0.18382613 + - 0.5206184 + - 0.23717418 + - 0.2063222 + - 0.07563633 + - 0.0067100087 + - 0.058879443 + - 0.3236492 + - 0.2348934 + - 0.3175897 + - -0.75022984 + - -0.28961873 + - -0.42943057 + - 0.1867075 + - -0.13243972 + - 0.2397758 + - -0.23731335 + - 1.0015451 + - -0.20318308 + - 0.09198552 + - 0.3557345 + - -0.26477066 + - -0.9518013 + - -0.079320006 + - 0.27212998 + - -0.32509333 + - -0.26553172 + - -0.06336617 + - 0.5788942 + - -0.28100845 + - 0.13421044 + - 0.1286933 + - 0.29647473 + - -0.24638796 + - 0.22951326 + - 0.29915532 + - -0.6673685 + - 0.25797236 + - 0.2170357 + - 0.28044048 + - 0.3005151 + - 0.142065 + - 0.09953769 + - 0.501644 + - 0.5750058 + - 0.043214526 + - 0.25182408 + - -0.7248358 + - -0.99932134 + - -0.458993 + - -0.09168415 + - -0.18338914 + - 0.40430218 + - 0.15027969 + - 0.54877526 + - 0.62510073 + - -0.18643698 + - -0.01042164 + - 0.11832396 + - 0.14426194 + - -0.11628445 + - -0.1208188 + - 0.4218833 + - 1.1945444 + - 0.20170312 + - 0.4052904 + - 0.1729834 + - 0.4703359 + - 0.40446433 + - -0.27903995 + - 0.1550025 + - -1.3613443 + - 0.43495545 + - -0.6092624 + - -0.7003889 + - 0.33829734 + - -0.049486108 + - 1.2292325 + - 1.1875259 + - 0.8811078 + - -0.038080666 + - -0.41122243 + - 0.05945136 + - 0.18286446 + - -0.38637257 + - -0.15960099 + - -0.75563586 + - -0.1399235 + - 0.28765863 + - 0.3493854 + - -0.63642806 + - 0.26648793 + - 0.14986706 + - -0.02178518 + - -0.4328278 + - 0.32400298 + - -0.5628467 + - 0.0017072515 + - 0.4895039 + - 0.97447956 + - 0.79537314 + - -0.21747877 + - 0.49245456 + - -0.05427343 + - -0.001583887 + - -0.4089984 + - -0.5273928 + - -0.12501858 + - -0.85407794 + - -0.39120156 + - 0.74370044 + - 0.31688666 + - -0.11670343 + - -0.1720524 + - -0.9258916 + - -0.44832334 + - -0.14176793 + - 0.15559235 + - 0.18619914 + - 0.029677043 + - -0.7860905 + - 0.6119248 + - -0.2275956 + - 0.27114373 + - -0.1330457 + - -0.4345812 + - 0.3509011 + - -0.25703478 + - 1.1999608 + - -0.73538506 + - 0.22466388 + - 0.28216428 + - 0.3068128 + - 0.22410713 + - -0.8977979 + - 3.0793605 + - 0.6484912 + - -0.05121518 + - -0.13966213 + - 0.04068459 + - -0.3467717 + - 0.16971251 + - 0.26769823 + - -0.029500855 + - 0.48766798 + - 0.23884583 + - -0.6286487 + - -0.84872204 + - -0.2792897 + - -0.38614887 + - -0.33205643 + - 0.04362763 + - -0.09268941 + - 0.02555917 + - -0.03296 + - 0.80383164 + - 0.23085819 + - 0.5722987 + - 0.01516376 + - 0.3265964 + - 0.508655 + - -0.489546 + - 0.28064126 + - 0.20231268 + - 0.5723013 + - -0.3205152 + - -0.017457549 + - 0.8301581 + - -0.26487455 + - -0.5729147 + - -0.43000627 + - 0.40386885 + - -0.05868242 + - -0.057882257 + - -0.43141195 + - 0.03251865 + - 0.12539996 + - 0.5671106 + - 0.57992566 + - -1.1536614 + - -1.1041497 + - 0.026663976 + - 0.07890819 + - 0.30930018 + - 0.6639422 + - 0.07434951 + - 0.52771425 + - -0.4684933 + - -0.23736392 + - 0.10271525 + - -0.68756473 + - 1.0708053 + - 0.02051262 + - 0.005629446 + - 0.23551573 + - 0.5215006 + - -0.46059707 + - 0.6626951 + - 0.47026092 + - -0.51341105 + - -0.024114782 + - -0.07278506 + - 0.4708267 + - 0.15815888 + - -0.112280026 + - -0.056338932 + - 0.21406803 + - -0.20518868 + - 0.61222875 + - 1.1290101 + - -0.12989084 + - 0.29127774 + - 0.123198144 + - 0.44381183 + - 0.12894794 + - -0.1879169 + - 0.23426811 + - -0.50117296 + - 0.5512518 + - -0.13086754 + - 0.7419318 + - -0.35664067 + - 0.2249138 + - 0.28431752 + - -0.6247846 + - -0.32735673 + - 0.21447966 + - -0.22873329 + - 0.4053473 + - 0.2853962 + - -0.009979942 + - -0.19634862 + - 0.19088997 + - 0.37149256 + - -0.4771584 + - -0.29549617 + - -0.58728474 + - -0.36474568 + - 0.92978513 + - -0.1198181 + - -0.6729035 + - -0.2524828 + - 0.045290913 + - 0.86765605 + - 1.1900126 + - -0.89552087 + - 0.6969349 + - 0.15096185 + - -0.3360112 + - 0.5840267 + - 0.4026988 + - -0.29323298 + - -0.123310395 + - -0.19022875 + - -0.26955125 + - -0.34561172 + - 0.12637521 + - -0.3267415 + - -0.24046628 + - -0.36392075 + - -0.27500254 + - -0.12855366 + - 0.24339654 + - -0.8961821 + - -0.30471975 + - -0.33182493 + - 0.2114005 + - 0.008176226 + - 0.49128672 + - -0.60276794 + - 0.85795695 + - -0.11586124 + - 0.9756452 + - -0.6629899 + - -0.6875797 + - 0.28862423 + - -0.18273696 + - -0.46361175 + - 0.32340184 + - 0.27743196 + - 0.1907873 + - 1.0107535 + - -0.36158037 + - 0.7490063 + - 0.7224286 + - 0.8227676 + - -0.34258455 + - 0.14299323 + - -0.07485472 + - 0.03690354 + - 0.66835594 + - -0.29041466 + - 0.117666945 + - 0.22068782 + - -0.41664478 + - -0.96687233 + - -0.30115366 + - 0.32991317 + - -0.5367237 + - -0.4183496 + - -0.20272818 + - -0.20603004 + - 0.28951097 + - 0.22901037 + - -0.37840658 + - 0.039217196 + - -0.6748186 + - 0.5217078 + - -0.10349636 + - -0.80346566 + - -0.011289856 + - 0.34773663 + - 0.11336774 + - -0.64846295 + - -0.060686886 + - 0.24654308 + - -0.1032119 + - 0.70251036 + - 0.29660708 + - 0.38687375 + - -0.13210155 + - -0.25983995 + - -0.19132254 + - 0.22228907 + - 0.26038757 + - 0.21548831 + - 0.14805342 + - -0.15419401 + - 0.52764213 + - 0.056747828 + - -0.64545715 + - 0.34790152 + - 0.09949671 + - -0.084178016 + - -0.1851547 + - 0.18506077 + - 0.06849785 + - 0.65021807 + - -0.21207952 + - -0.015461175 + - 0.5452032 + - -0.01365122 + - -0.6641938 + - 0.28765276 + - -0.25317904 + - 0.1227632 + - -1.0584215 + - 0.20806229 + - 0.014421382 + - 0.01081426 + - -0.02135765 + - -0.6633148 + - 0.59829956 + - 0.32118934 + - -0.4120391 + - -0.016948322 + - -0.07841795 + - 0.7843749 + - -0.21809503 + - -0.38949728 + - -0.28977337 + - 0.16010587 + - 0.5071659 + - -0.086693175 + - 0.5426263 + - 0.10004949 + - -0.18665528 + - 0.03277051 + - -0.64843935 + - 0.2644557 + - 0.74924755 + - -0.079501085 + - -0.14100425 + - -0.31680706 + - 0.28603593 + - 0.08322243 + - -0.34802154 + - 0.44965598 + - -0.154797 + - 0.2212598 + - 0.3388931 + - -0.26549858 + - 0.83331984 + - 0.5542385 + - 0.11945615 + - 0.52264225 + - 0.3680703 + - 0.28813347 + - -0.3920549 + - -0.04858926 + - 0.4211004 + - -0.27116972 + - 0.012550266 + - -0.15916526 + - 1.0338844 + - 0.54367495 + - -0.1075652 + - -0.115794845 + - 0.6246316 + - -0.16583593 + - -0.009917642 + - 0.16484575 + - -0.23796882 + - 0.28699717 + - -0.12484648 + - 0.039961245 + - -0.4752689 + - -0.08142411 + - 0.2532168 + - 0.121582344 + - 0.30579346 + - -0.011138479 + - 0.24646218 + - -0.18199337 + - -0.14097375 + - -0.14552434 + - 0.15069063 + - -0.9438915 + - -0.074753724 + - 1.5525185 + - 0.7813608 + - -0.30151537 + - -0.20538484 + - -0.13666666 + - 0.2511893 + - -0.5155156 + - -0.957768 + - 0.024867887 + - -0.017964648 + - 0.3413526 + - 0.057733916 + - -0.6705937 + - -0.43544868 + - -0.8328766 + - -1.127556 + - 0.14031887 + - 0.53190166 + - 0.2794492 + - 0.22952476 + - -0.28443596 + - 0.62214035 + - -0.08270305 + - 0.23333475 + - 0.06732856 + - 0.033942442 + - -0.11470904 + - 0.120585375 + - -0.24028243 + - 0.0528598 + - 0.061382774 + - -0.25741574 + - -0.20557366 + - 0.101676114 + - -0.8191013 + - -0.8167867 + - -0.04096431 + - -0.315326 + - -0.03208939 + - 0.0044063576 + - -0.31635436 + - -0.380747 + - -0.59952134 + - -0.17083004 + - 0.52697104 + - 0.16015483 + - 0.026569244 + - -0.10034638 + - -0.08351234 + - -0.32397738 + - 0.19073258 + - -0.037320424 + - -0.6122803 + - -0.19477105 + - 0.05959901 + - -0.97114486 + - -0.1114374 + - 0.25144908 + - -0.29247206 + - -1.0046825 + - 0.10319125 + - -0.26377684 + - 0.3734495 + - 0.32138124 + - 0.2201173 + - 0.16574505 + - 0.24156184 + - -0.7507315 + - 0.41684124 + - 0.23563716 + - -0.5096274 + - -0.3408667 + - -0.5006164 + - -0.5663268 + - -0.10434029 + - -0.21033548 + - -0.013725087 + - -0.05406871 + - 0.06762612 + - -0.07603185 + - 0.38126794 + - -0.21514723 + - 0.6514044 + - 0.1638036 + - 0.21190682 + - -0.10777368 + - -1.1651736 + - 0.85149956 + - -0.13673444 + - -0.2791136 + - 0.3939568 + - -0.8459791 + - 0.06319932 + - -0.17092903 + - 0.65976614 + - 0.09467505 + - -0.3351752 + - 0.10690198 + - 0.17950574 + - 0.4841084 + - 0.030654255 + - 0.09933002 + - 0.15504493 + - 0.431155 + - 0.100911595 + - -1.005456 + - -0.4156974 + - -0.21975553 + - 0.8140882 + - 0.20669341 + - 0.8102458 + - 0.9729832 + - -0.1192555 + - -0.3313866 + - -0.20483741 + - -0.05758002 + - -1.1365694 + - 0.10137964 + - 0.7941135 + - 0.21457946 + - 0.08645558 + - -0.08119329 + - 0.045061592 + - -0.2986527 + - 0.5128512 + - -0.048639238 + - 0.04413519 + - 0.38353267 + - 0.30062288 + - -0.30876812 + - 0.6065144 + - 0.38760418 + - -0.3917586 + - -0.16171588 + - 0.47923428 + - 0.2323744 + - -1.0454342 + - 0.66726273 + - 0.54942894 + - -0.3039057 + - -0.46868548 + - 0.120683506 + - -0.20385773 + - -0.3107174 + - 0.122091934 + - -0.73887575 + - 0.4273086 + - 0.25917768 + - -0.615948 + - -0.43804422 + - 0.05439096 + - 0.4236836 + - -0.9611595 + - 0.14401515 + - 0.11230327 + - -0.61103016 + - 0.03632788 + - -0.1180862 + - -0.15593259 + - -0.34371522 + - 0.43030044 + - -0.33593243 + - -0.28053537 + - 0.055819333 + - -0.5548041 + - 0.6060772 + - 0.9170542 + - -0.3333504 + - 0.78890127 + - 0.09267188 + - -0.8138399 + - -0.28036547 + - -0.46818015 + - -0.63843864 + - 0.60233366 + - -0.38163796 + - -0.20055757 + - 0.08256148 + - -0.31126496 + - 0.29852262 + - -1.3070983 + - -0.091211565 + - 0.6437114 + - -0.33731744 + - 0.74428993 + - -0.13088785 + - -0.2910597 + - 0.10607006 + - 0.04793844 + - -0.10944663 + - -0.039002948 + - -0.06794383 + - -0.18343139 + - -0.3283973 + - 0.2869965 + - -0.2572587 + - 0.9318666 + - -0.009790381 + - -0.1260892 + - -0.25368497 + - 0.55822307 + - -0.017653605 + - 0.5665084 + - -1.0098633 + - -0.1526397 + - -1.37959 + - 0.013235414 + - -0.96332794 + - 0.56967777 + - -0.13456593 + - -0.1173221 + - 0.34215552 + - 0.69916993 + - 0.1258658 diff --git a/backends/candle/tests/test_bert.rs b/backends/candle/tests/test_bert.rs index 45d02577..1bd5017f 100644 --- a/backends/candle/tests/test_bert.rs +++ b/backends/candle/tests/test_bert.rs @@ -1,8 +1,8 @@ mod common; -use crate::common::{sort_embeddings, SnapshotScores}; +use crate::common::{sort_embeddings, SnapshotEmbeddings, SnapshotScores}; use anyhow::Result; -use common::{batch, download_artifacts, load_tokenizer, relative_matcher}; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer, relative_matcher}; use text_embeddings_backend_candle::CandleBackend; use text_embeddings_backend_core::{Backend, ModelType, Pool}; @@ -28,10 +28,10 @@ fn test_mini() -> Result<()> { vec![], ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); - let embeddings_batch = SnapshotScores::from(pooled_embeddings); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_batch", embeddings_batch, &matcher); let input_single = batch( @@ -41,7 +41,7 @@ fn test_mini() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_single", embeddings_single, &matcher); assert_eq!(embeddings_batch[0], embeddings_single[0]); @@ -57,8 +57,8 @@ fn test_mini() -> Result<()> { ); let (pooled_embeddings, raw_embeddings) = sort_embeddings(backend.embed(input_batch)?); - let pooled_embeddings = SnapshotScores::from(pooled_embeddings); - let raw_embeddings = SnapshotScores::from(raw_embeddings); + let pooled_embeddings = SnapshotEmbeddings::from(pooled_embeddings); + let raw_embeddings = SnapshotEmbeddings::from(raw_embeddings); assert_eq!(embeddings_batch[0], pooled_embeddings[0]); assert_eq!(raw_embeddings.len(), 8); @@ -91,13 +91,13 @@ fn test_mini_pooled_raw() -> Result<()> { [1, 4, 5].to_vec(), ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, raw_embeddings) = sort_embeddings(backend.embed(input_batch)?); - let pooled_embeddings_batch = SnapshotScores::from(pooled_embeddings); + let pooled_embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_batch_pooled", pooled_embeddings_batch, &matcher); - let raw_embeddings_batch = SnapshotScores::from(raw_embeddings); + let raw_embeddings_batch = SnapshotEmbeddings::from(raw_embeddings); insta::assert_yaml_snapshot!("mini_batch_raw", raw_embeddings_batch, &matcher); // Check that the first token of each raw embeddings member is the same as the cls pooling ones @@ -113,7 +113,7 @@ fn test_mini_pooled_raw() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_single_pooled", embeddings_single, &matcher); assert_eq!(pooled_embeddings_batch[0], embeddings_single[0]); @@ -126,7 +126,7 @@ fn test_mini_pooled_raw() -> Result<()> { ); let (_, raw_embeddings) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(raw_embeddings); + let embeddings_single = SnapshotEmbeddings::from(raw_embeddings); insta::assert_yaml_snapshot!("mini_single_raw", embeddings_single, &matcher); assert_eq!(raw_embeddings_batch[0], embeddings_single[0]); diff --git a/backends/candle/tests/test_flash_bert.rs b/backends/candle/tests/test_flash_bert.rs index 1888a32b..ea150e7f 100644 --- a/backends/candle/tests/test_flash_bert.rs +++ b/backends/candle/tests/test_flash_bert.rs @@ -2,9 +2,9 @@ mod common; -use crate::common::{sort_embeddings, SnapshotScores}; +use crate::common::{sort_embeddings, SnapshotEmbeddings, SnapshotScores}; use anyhow::Result; -use common::{batch, download_artifacts, load_tokenizer, relative_matcher}; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer, relative_matcher}; use text_embeddings_backend_candle::CandleBackend; use text_embeddings_backend_core::{Backend, ModelType, Pool}; @@ -34,10 +34,10 @@ fn test_flash_mini() -> Result<()> { vec![], ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); - let embeddings_batch = SnapshotScores::from(pooled_embeddings); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_batch", embeddings_batch, &matcher); let input_single = batch( @@ -47,7 +47,7 @@ fn test_flash_mini() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_single", embeddings_single, &matcher); assert_eq!(embeddings_batch[0], embeddings_single[0]); @@ -63,8 +63,8 @@ fn test_flash_mini() -> Result<()> { ); let (pooled_embeddings, raw_embeddings) = sort_embeddings(backend.embed(input_batch)?); - let pooled_embeddings = SnapshotScores::from(pooled_embeddings); - let raw_embeddings = SnapshotScores::from(raw_embeddings); + let pooled_embeddings = SnapshotEmbeddings::from(pooled_embeddings); + let raw_embeddings = SnapshotEmbeddings::from(raw_embeddings); assert_eq!(embeddings_batch[0], pooled_embeddings[0]); assert_eq!(raw_embeddings.len(), 8); @@ -101,13 +101,13 @@ fn test_flash_mini_pooled_raw() -> Result<()> { [1, 4, 5].to_vec(), ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, raw_embeddings) = sort_embeddings(backend.embed(input_batch)?); - let pooled_embeddings_batch = SnapshotScores::from(pooled_embeddings); + let pooled_embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_batch_pooled", pooled_embeddings_batch, &matcher); - let raw_embeddings_batch = SnapshotScores::from(raw_embeddings); + let raw_embeddings_batch = SnapshotEmbeddings::from(raw_embeddings); insta::assert_yaml_snapshot!("mini_batch_raw", raw_embeddings_batch, &matcher); // Check that the first token of each raw embeddings member is the same as the cls pooling ones @@ -123,7 +123,7 @@ fn test_flash_mini_pooled_raw() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("mini_single_pooled", embeddings_single, &matcher); assert_eq!(pooled_embeddings_batch[0], embeddings_single[0]); @@ -136,7 +136,7 @@ fn test_flash_mini_pooled_raw() -> Result<()> { ); let (_, raw_embeddings) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(raw_embeddings); + let embeddings_single = SnapshotEmbeddings::from(raw_embeddings); insta::assert_yaml_snapshot!("mini_single_raw", embeddings_single, &matcher); assert_eq!(raw_embeddings_batch[0], embeddings_single[0]); diff --git a/backends/candle/tests/test_flash_gte.rs b/backends/candle/tests/test_flash_gte.rs new file mode 100644 index 00000000..20b06b2f --- /dev/null +++ b/backends/candle/tests/test_flash_gte.rs @@ -0,0 +1,53 @@ +#![allow(dead_code, unused_imports)] +mod common; + +use crate::common::{sort_embeddings, SnapshotEmbeddings}; +use anyhow::Result; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; +use text_embeddings_backend_candle::CandleBackend; +use text_embeddings_backend_core::{Backend, ModelType, Pool}; + +#[test] +#[serial_test::serial] +#[cfg(all(feature = "cuda", feature = "flash-attn"))] +fn test_flash_gte() -> Result<()> { + let model_root = download_artifacts("Alibaba-NLP/gte-base-en-v1.5", None)?; + let tokenizer = load_tokenizer(&model_root)?; + + let backend = CandleBackend::new( + model_root, + "float16".to_string(), + ModelType::Embedding(Pool::Cls), + )?; + + let input_batch = batch( + vec![ + tokenizer.encode("What is Deep Learning?", true).unwrap(), + tokenizer.encode("Deep Learning is...", true).unwrap(), + tokenizer.encode("What is Deep Learning?", true).unwrap(), + ], + [0, 1, 2].to_vec(), + vec![], + ); + + let matcher = cosine_matcher(); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); + insta::assert_yaml_snapshot!("gte_batch", embeddings_batch, &matcher); + + let input_single = batch( + vec![tokenizer.encode("What is Deep Learning?", true).unwrap()], + [0].to_vec(), + vec![], + ); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); + + insta::assert_yaml_snapshot!("gte_single", embeddings_single, &matcher); + assert_eq!(embeddings_batch[0], embeddings_single[0]); + assert_eq!(embeddings_batch[2], embeddings_single[0]); + + Ok(()) +} diff --git a/backends/candle/tests/test_flash_jina.rs b/backends/candle/tests/test_flash_jina.rs index 4a5f8276..255b82a2 100644 --- a/backends/candle/tests/test_flash_jina.rs +++ b/backends/candle/tests/test_flash_jina.rs @@ -1,9 +1,9 @@ #![allow(dead_code, unused_imports)] mod common; -use crate::common::{sort_embeddings, SnapshotScores}; +use crate::common::{sort_embeddings, SnapshotEmbeddings}; use anyhow::Result; -use common::{batch, download_artifacts, load_tokenizer, relative_matcher}; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; use text_embeddings_backend_candle::CandleBackend; use text_embeddings_backend_core::{Backend, ModelType, Pool}; @@ -30,10 +30,10 @@ fn test_flash_jina_small() -> Result<()> { vec![], ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); - let embeddings_batch = SnapshotScores::from(pooled_embeddings); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("jina_batch", embeddings_batch, &matcher); let input_single = batch( @@ -43,7 +43,7 @@ fn test_flash_jina_small() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("jina_single", embeddings_single, &matcher); assert_eq!(embeddings_batch[0], embeddings_single[0]); diff --git a/backends/candle/tests/test_flash_jina_code.rs b/backends/candle/tests/test_flash_jina_code.rs new file mode 100644 index 00000000..d84848dc --- /dev/null +++ b/backends/candle/tests/test_flash_jina_code.rs @@ -0,0 +1,53 @@ +#![allow(dead_code, unused_imports)] +mod common; + +use crate::common::{sort_embeddings, SnapshotEmbeddings}; +use anyhow::Result; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; +use text_embeddings_backend_candle::CandleBackend; +use text_embeddings_backend_core::{Backend, ModelType, Pool}; + +#[test] +#[serial_test::serial] +#[cfg(all(feature = "cuda", feature = "flash-attn"))] +fn test_flash_jina_code_base() -> Result<()> { + let model_root = download_artifacts("jinaai/jina-embeddings-v2-base-code", None)?; + let tokenizer = load_tokenizer(&model_root)?; + + let backend = CandleBackend::new( + model_root, + "float16".to_string(), + ModelType::Embedding(Pool::Mean), + )?; + + let input_batch = batch( + vec![ + tokenizer.encode("What is Deep Learning?", true).unwrap(), + tokenizer.encode("Deep Learning is...", true).unwrap(), + tokenizer.encode("What is Deep Learning?", true).unwrap(), + ], + [0, 1, 2].to_vec(), + vec![], + ); + + let matcher = cosine_matcher(); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); + insta::assert_yaml_snapshot!("jina_code_batch", embeddings_batch, &matcher); + + let input_single = batch( + vec![tokenizer.encode("What is Deep Learning?", true).unwrap()], + [0].to_vec(), + vec![], + ); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); + + insta::assert_yaml_snapshot!("jina_code_single", embeddings_single, &matcher); + assert_eq!(embeddings_batch[0], embeddings_single[0]); + assert_eq!(embeddings_batch[2], embeddings_single[0]); + + Ok(()) +} diff --git a/backends/candle/tests/test_flash_mistral.rs b/backends/candle/tests/test_flash_mistral.rs new file mode 100644 index 00000000..71749c8b --- /dev/null +++ b/backends/candle/tests/test_flash_mistral.rs @@ -0,0 +1,53 @@ +#![allow(dead_code, unused_imports)] +mod common; + +use crate::common::{sort_embeddings, SnapshotEmbeddings}; +use anyhow::Result; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; +use text_embeddings_backend_candle::CandleBackend; +use text_embeddings_backend_core::{Backend, ModelType, Pool}; + +#[test] +#[serial_test::serial] +#[cfg(all(feature = "cuda", feature = "flash-attn"))] +fn test_flash_mistral() -> Result<()> { + let model_root = download_artifacts("Salesforce/SFR-Embedding-2_R", None)?; + let tokenizer = load_tokenizer(&model_root)?; + + let backend = CandleBackend::new( + model_root, + "float16".to_string(), + ModelType::Embedding(Pool::Mean), + )?; + + let input_batch = batch( + vec![ + tokenizer.encode("What is Deep Learning?", true).unwrap(), + tokenizer.encode("Deep Learning is...", true).unwrap(), + tokenizer.encode("What is Deep Learning?", true).unwrap(), + ], + [0, 1, 2].to_vec(), + vec![], + ); + + let matcher = cosine_matcher(); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); + insta::assert_yaml_snapshot!("mistral_batch", embeddings_batch, &matcher); + + let input_single = batch( + vec![tokenizer.encode("What is Deep Learning?", true).unwrap()], + [0].to_vec(), + vec![], + ); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); + + insta::assert_yaml_snapshot!("mistral_single", embeddings_single, &matcher); + assert_eq!(embeddings_batch[0], embeddings_single[0]); + assert_eq!(embeddings_batch[2], embeddings_single[0]); + + Ok(()) +} diff --git a/backends/candle/tests/test_flash_nomic.rs b/backends/candle/tests/test_flash_nomic.rs index 3e9b6e1d..263bbe43 100644 --- a/backends/candle/tests/test_flash_nomic.rs +++ b/backends/candle/tests/test_flash_nomic.rs @@ -1,9 +1,9 @@ #![allow(dead_code, unused_imports)] mod common; -use crate::common::{sort_embeddings, SnapshotScores}; +use crate::common::{sort_embeddings, SnapshotEmbeddings}; use anyhow::Result; -use common::{batch, download_artifacts, load_tokenizer, relative_matcher}; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; use text_embeddings_backend_candle::CandleBackend; use text_embeddings_backend_core::{Backend, ModelType, Pool}; @@ -30,10 +30,10 @@ fn test_flash_nomic_small() -> Result<()> { vec![], ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); - let embeddings_batch = SnapshotScores::from(pooled_embeddings); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("nomic_batch", embeddings_batch, &matcher); let input_single = batch( @@ -43,7 +43,7 @@ fn test_flash_nomic_small() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("nomic_single", embeddings_single, &matcher); assert_eq!(embeddings_batch[0], embeddings_single[0]); diff --git a/backends/candle/tests/test_flash_qwen2.rs b/backends/candle/tests/test_flash_qwen2.rs new file mode 100644 index 00000000..38e45553 --- /dev/null +++ b/backends/candle/tests/test_flash_qwen2.rs @@ -0,0 +1,77 @@ +#![allow(dead_code, unused_imports)] + +mod common; + +use crate::common::{sort_embeddings, SnapshotEmbeddings}; +use anyhow::Result; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; +use text_embeddings_backend_candle::CandleBackend; +use text_embeddings_backend_core::{Backend, ModelType, Pool}; +use tokenizers::processors::sequence::Sequence; +use tokenizers::processors::template::TemplateProcessing; +use tokenizers::{PostProcessorWrapper, Tokenizer}; + +#[test] +#[serial_test::serial] +#[cfg(all(feature = "cuda", feature = "flash-attn"))] +fn test_flash_qwen2() -> Result<()> { + let model_root = download_artifacts("Alibaba-NLP/gte-Qwen2-1.5B-instruct", None)?; + let mut tokenizer = load_tokenizer(&model_root)?; + // Qwen2 updates the post processor manually instead of into the tokenizer.json... + // https://huggingface.co/Alibaba-NLP/gte-Qwen2-1.5B-instruct/blob/main/tokenization_qwen.py#L246 + let template = TemplateProcessing::builder() + .try_single("$A:0 <|endoftext|>:0") + .unwrap() + .try_pair("$A:0 <|endoftext|>:0 $B:1 <|endoftext|>:1") + .unwrap() + .special_tokens(vec![("<|endoftext|>", 151643)]) + .build() + .unwrap(); + match tokenizer.get_post_processor() { + None => tokenizer.with_post_processor(template), + Some(post_processor) => { + let post_processor = Sequence::new(vec![ + post_processor.clone(), + PostProcessorWrapper::Template(template), + ]); + tokenizer.with_post_processor(post_processor) + } + }; + + let backend = CandleBackend::new( + model_root, + "float16".to_string(), + ModelType::Embedding(Pool::LastToken), + )?; + + let input_batch = batch( + vec![ + tokenizer.encode("What is Deep Learning?", true).unwrap(), + tokenizer.encode("Deep Learning is...", true).unwrap(), + tokenizer.encode("What is Deep Learning?", true).unwrap(), + ], + [0, 1, 2].to_vec(), + vec![], + ); + + let matcher = cosine_matcher(); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); + insta::assert_yaml_snapshot!("qwen2_batch", embeddings_batch, &matcher); + + let input_single = batch( + vec![tokenizer.encode("What is Deep Learning?", true).unwrap()], + [0].to_vec(), + vec![], + ); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); + + insta::assert_yaml_snapshot!("qwen2_single", embeddings_single, &matcher); + assert_eq!(embeddings_batch[0], embeddings_single[0]); + assert_eq!(embeddings_batch[2], embeddings_single[0]); + + Ok(()) +} diff --git a/backends/candle/tests/test_jina.rs b/backends/candle/tests/test_jina.rs index 4cd7bba6..4aa30d03 100644 --- a/backends/candle/tests/test_jina.rs +++ b/backends/candle/tests/test_jina.rs @@ -1,8 +1,8 @@ mod common; -use crate::common::{sort_embeddings, SnapshotScores}; +use crate::common::{sort_embeddings, SnapshotEmbeddings}; use anyhow::Result; -use common::{batch, download_artifacts, load_tokenizer, relative_matcher}; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; use text_embeddings_backend_candle::CandleBackend; use text_embeddings_backend_core::{Backend, ModelType, Pool}; @@ -27,10 +27,10 @@ fn test_jina_small() -> Result<()> { vec![], ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); - let embeddings_batch = SnapshotScores::from(pooled_embeddings); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("jina_batch", embeddings_batch, &matcher); let input_single = batch( @@ -40,7 +40,7 @@ fn test_jina_small() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("jina_single", embeddings_single, &matcher); assert_eq!(embeddings_batch[0], embeddings_single[0]); diff --git a/backends/candle/tests/test_jina_code.rs b/backends/candle/tests/test_jina_code.rs new file mode 100644 index 00000000..6c3b3f20 --- /dev/null +++ b/backends/candle/tests/test_jina_code.rs @@ -0,0 +1,50 @@ +mod common; + +use crate::common::{sort_embeddings, SnapshotEmbeddings}; +use anyhow::Result; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; +use text_embeddings_backend_candle::CandleBackend; +use text_embeddings_backend_core::{Backend, ModelType, Pool}; + +#[test] +fn test_jina_code_base() -> Result<()> { + let model_root = download_artifacts("jinaai/jina-embeddings-v2-base-code", None)?; + let tokenizer = load_tokenizer(&model_root)?; + + let backend = CandleBackend::new( + model_root, + "float32".to_string(), + ModelType::Embedding(Pool::Mean), + )?; + + let input_batch = batch( + vec![ + tokenizer.encode("What is Deep Learning?", true).unwrap(), + tokenizer.encode("Deep Learning is...", true).unwrap(), + tokenizer.encode("What is Deep Learning?", true).unwrap(), + ], + [0, 1, 2].to_vec(), + vec![], + ); + + let matcher = cosine_matcher(); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); + insta::assert_yaml_snapshot!("jina_code_batch", embeddings_batch, &matcher); + + let input_single = batch( + vec![tokenizer.encode("What is Deep Learning?", true).unwrap()], + [0].to_vec(), + vec![], + ); + + let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); + + insta::assert_yaml_snapshot!("jina_code_single", embeddings_single, &matcher); + assert_eq!(embeddings_batch[0], embeddings_single[0]); + assert_eq!(embeddings_batch[2], embeddings_single[0]); + + Ok(()) +} diff --git a/backends/candle/tests/test_nomic.rs b/backends/candle/tests/test_nomic.rs index 914be7ea..ce0a4559 100644 --- a/backends/candle/tests/test_nomic.rs +++ b/backends/candle/tests/test_nomic.rs @@ -1,8 +1,8 @@ mod common; -use crate::common::{sort_embeddings, SnapshotScores}; +use crate::common::{sort_embeddings, SnapshotEmbeddings}; use anyhow::Result; -use common::{batch, download_artifacts, load_tokenizer, relative_matcher}; +use common::{batch, cosine_matcher, download_artifacts, load_tokenizer}; use text_embeddings_backend_candle::CandleBackend; use text_embeddings_backend_core::{Backend, ModelType, Pool}; @@ -27,10 +27,10 @@ fn test_nomic_small() -> Result<()> { vec![], ); - let matcher = relative_matcher(); + let matcher = cosine_matcher(); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_batch)?); - let embeddings_batch = SnapshotScores::from(pooled_embeddings); + let embeddings_batch = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("nomic_batch", embeddings_batch, &matcher); let input_single = batch( @@ -40,7 +40,7 @@ fn test_nomic_small() -> Result<()> { ); let (pooled_embeddings, _) = sort_embeddings(backend.embed(input_single)?); - let embeddings_single = SnapshotScores::from(pooled_embeddings); + let embeddings_single = SnapshotEmbeddings::from(pooled_embeddings); insta::assert_yaml_snapshot!("nomic_single", embeddings_single, &matcher); assert_eq!(embeddings_batch[0], embeddings_single[0]); diff --git a/backends/core/Cargo.toml b/backends/core/Cargo.toml index 5e330715..754f9526 100644 --- a/backends/core/Cargo.toml +++ b/backends/core/Cargo.toml @@ -6,9 +6,9 @@ authors.workspace = true homepage.workspace = true [dependencies] -thiserror = "^1.0" -clap = { version = "^4.1", features = ["derive"], optional = true } -nohash-hasher = "^0.2" +thiserror = { workspace = true } +clap = { workspace = true, optional = true } +nohash-hasher = { workspace = true } [features] clap = ["dep:clap"] diff --git a/backends/core/src/lib.rs b/backends/core/src/lib.rs index 06cef3ed..932c0083 100644 --- a/backends/core/src/lib.rs +++ b/backends/core/src/lib.rs @@ -63,6 +63,8 @@ pub enum Pool { /// This option is only available if the loaded model is a `ForMaskedLM` Transformer /// model. Splade, + /// Select the last token as embedding + LastToken, } impl fmt::Display for Pool { @@ -71,6 +73,7 @@ impl fmt::Display for Pool { Pool::Cls => write!(f, "cls"), Pool::Mean => write!(f, "mean"), Pool::Splade => write!(f, "splade"), + Pool::LastToken => write!(f, "last_token"), } } } diff --git a/backends/python/server/text_embeddings_server/cli.py b/backends/python/server/text_embeddings_server/cli.py index 4c627515..9497dc20 100644 --- a/backends/python/server/text_embeddings_server/cli.py +++ b/backends/python/server/text_embeddings_server/cli.py @@ -23,6 +23,7 @@ def serve( logger_level: str = "INFO", json_output: bool = False, otlp_endpoint: Optional[str] = None, + otlp_service_name: str = "text-embeddings-inference.server", ): # Remove default handler logger.remove() @@ -42,7 +43,7 @@ def serve( # Setup OpenTelemetry distributed tracing if otlp_endpoint is not None: - setup_tracing(otlp_endpoint=otlp_endpoint) + setup_tracing(otlp_endpoint=otlp_endpoint, otlp_service_name=otlp_service_name) # Downgrade enum into str for easier management later on dtype = None if dtype is None else dtype.value diff --git a/backends/python/server/text_embeddings_server/utils/tracing.py b/backends/python/server/text_embeddings_server/utils/tracing.py index 5a2bb3f7..9299e719 100644 --- a/backends/python/server/text_embeddings_server/utils/tracing.py +++ b/backends/python/server/text_embeddings_server/utils/tracing.py @@ -54,10 +54,8 @@ def _start_span(self, handler_call_details, context, set_status_on_exception=Fal ) -def setup_tracing(otlp_endpoint: str): - resource = Resource.create( - attributes={"service.name": f"text-embeddings-inference.server"} - ) +def setup_tracing(otlp_endpoint: str, otlp_service_name: str): + resource = Resource.create(attributes={"service.name": otlp_service_name}) span_exporter = OTLPSpanExporter(endpoint=otlp_endpoint, insecure=True) span_processor = BatchSpanProcessor(span_exporter) diff --git a/backends/python/src/lib.rs b/backends/python/src/lib.rs index f3519ee5..195f1d37 100644 --- a/backends/python/src/lib.rs +++ b/backends/python/src/lib.rs @@ -22,6 +22,7 @@ impl PythonBackend { model_type: ModelType, uds_path: String, otlp_endpoint: Option, + otlp_service_name: String, ) -> Result { match model_type { ModelType::Classifier => { @@ -37,8 +38,13 @@ impl PythonBackend { } }; - let backend_process = - management::BackendProcess::new(model_path, dtype, &uds_path, otlp_endpoint)?; + let backend_process = management::BackendProcess::new( + model_path, + dtype, + &uds_path, + otlp_endpoint, + otlp_service_name, + )?; let tokio_runtime = tokio::runtime::Builder::new_current_thread() .enable_all() .build() diff --git a/backends/python/src/management.rs b/backends/python/src/management.rs index ed0c851e..911c6984 100644 --- a/backends/python/src/management.rs +++ b/backends/python/src/management.rs @@ -21,6 +21,7 @@ impl BackendProcess { dtype: String, uds_path: &str, otlp_endpoint: Option, + otlp_service_name: String, ) -> Result { // Get UDS path let uds = Path::new(uds_path); @@ -33,21 +34,24 @@ impl BackendProcess { // Process args let mut python_server_args = vec![ model_path, - "--dtype".to_string(), + "--dtype".to_owned(), dtype, - "--uds-path".to_string(), - uds_path.to_string(), - "--logger-level".to_string(), - "INFO".to_string(), - "--json-output".to_string(), + "--uds-path".to_owned(), + uds_path.to_owned(), + "--logger-level".to_owned(), + "INFO".to_owned(), + "--json-output".to_owned(), ]; // OpenTelemetry if let Some(otlp_endpoint) = otlp_endpoint { - python_server_args.push("--otlp-endpoint".to_string()); + python_server_args.push("--otlp-endpoint".to_owned()); python_server_args.push(otlp_endpoint); } + python_server_args.push("--otlp-service-name".to_owned()); + python_server_args.push(otlp_service_name); + // Copy current process env let envs: Vec<(OsString, OsString)> = env::vars_os().collect(); @@ -64,7 +68,7 @@ impl BackendProcess { Err(err) => { if err.kind() == io::ErrorKind::NotFound { return Err(BackendError::Start( - "python-text-embeddings-server not found in PATH".to_string(), + "python-text-embeddings-server not found in PATH".to_owned(), )); } return Err(BackendError::Start(err.to_string())); diff --git a/backends/src/lib.rs b/backends/src/lib.rs index 4456880c..6fced834 100644 --- a/backends/src/lib.rs +++ b/backends/src/lib.rs @@ -22,7 +22,7 @@ use text_embeddings_backend_python::PythonBackend; #[derive(Debug, Clone)] pub struct Backend { /// Channel to communicate with the background thread - backend_sender: mpsc::UnboundedSender, + backend_sender: mpsc::Sender, /// Health status health_receiver: watch::Receiver, _backend_thread: Arc, @@ -50,8 +50,9 @@ impl Backend { model_type: ModelType, uds_path: String, otlp_endpoint: Option, + otlp_service_name: String, ) -> Result { - let (backend_sender, backend_receiver) = mpsc::unbounded_channel(); + let (backend_sender, backend_receiver) = mpsc::channel(8); let backend = init_backend( model_path, @@ -59,6 +60,7 @@ impl Backend { model_type.clone(), uds_path, otlp_endpoint, + otlp_service_name, )?; let padded_model = backend.is_padded(); let max_batch_size = backend.max_batch_size(); @@ -86,6 +88,7 @@ impl Backend { let (sender, receiver) = oneshot::channel(); self.backend_sender .send(BackendCommand::Health(Span::current(), sender)) + .await .expect("No backend receiver. This is a bug."); receiver.await.expect( "Backend blocking task dropped the sender without sending a response. This is a bug.", @@ -214,7 +217,7 @@ impl Backend { pub async fn embed(&self, batch: Batch) -> Result<(Embeddings, Duration), BackendError> { let (sender, receiver) = oneshot::channel(); self.backend_sender - .send(BackendCommand::Embed(batch, Span::current(), sender)) + .try_send(BackendCommand::Embed(batch, Span::current(), sender)) .expect("No backend receiver. This is a bug."); receiver.await.expect( "Backend blocking task dropped the sender without send a response. This is a bug.", @@ -226,7 +229,7 @@ impl Backend { let (sender, receiver) = oneshot::channel(); self.backend_sender - .send(BackendCommand::Predict(batch, Span::current(), sender)) + .try_send(BackendCommand::Predict(batch, Span::current(), sender)) .expect("No backend receiver. This is a bug."); receiver.await.expect( "Backend blocking task dropped the sender without send a response. This is a bug.", @@ -241,6 +244,7 @@ fn init_backend( model_type: ModelType, uds_path: String, otlp_endpoint: Option, + otlp_service_name: String, ) -> Result, BackendError> { if cfg!(feature = "candle") { #[cfg(feature = "candle")] @@ -260,6 +264,7 @@ fn init_backend( model_type, uds_path, otlp_endpoint, + otlp_service_name, ) }) .join() @@ -276,7 +281,7 @@ struct BackendThread(Option>); impl BackendThread { fn new( backend: Box, - mut backend_receiver: mpsc::UnboundedReceiver, + mut backend_receiver: mpsc::Receiver, health_sender: watch::Sender, ) -> Self { let handle = std::thread::spawn(move || { diff --git a/core/Cargo.toml b/core/Cargo.toml index de269bf4..d69871dc 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -6,10 +6,12 @@ authors.workspace = true homepage.workspace = true [dependencies] -hf-hub = { version = "^0.3.0", features = ["tokio"], default-features = false } -metrics = "^0.21" +async-channel = "^2.3" +hf-hub = { workspace = true } +metrics = { workspace = true } +serde_json = { workspace = true } text-embeddings-backend = { path = "../backends" } -thiserror = "^1.0" -tokenizers = { version = "^0.15.2", default-features = false, features = ["onig", "esaxx_fast"] } -tracing = "^0.1" -tokio = { version = "^1.25", features = ["rt", "rt-multi-thread", "parking_lot", "sync"] } +thiserror = { workspace = true } +tokenizers = { workspace = true } +tracing = { workspace = true } +tokio = { workspace = true } diff --git a/core/src/download.rs b/core/src/download.rs index 9e21961b..08220752 100644 --- a/core/src/download.rs +++ b/core/src/download.rs @@ -1,7 +1,4 @@ -use hf_hub::api::{ - tokio::{ApiError, ApiRepo}, - RepoInfo, -}; +use hf_hub::api::tokio::{ApiError, ApiRepo}; use std::path::PathBuf; use tracing::instrument; @@ -16,65 +13,79 @@ pub const ST_CONFIG_NAMES: [&str; 7] = [ "sentence_xlnet_config.json", ]; -/// Parses a [`RepoInfo`] object for model weight files to download. Returns a non-empty vector of -/// model files that contains a model type str, if there are any. -#[instrument(skip_all)] -fn _weight_files_to_download<'a>( - api_info: &'a RepoInfo, - weight_file_type_str: &'a str, -) -> Option> { - let ignored_file_contains = ["arguments", "args", "training", "medusa_lm_head"]; - let files: Vec<&str> = api_info - .siblings - .iter() - .map(|s| s.rfilename.as_str()) - .filter(|f| { - f.contains(weight_file_type_str) - && f.split("/").count() == 1 - && ignored_file_contains.iter().all(|s| !f.contains(s)) - }) - .collect(); - if files.is_empty() { - return None; - } - Some(files) -} - #[instrument(skip_all)] pub async fn download_artifacts(api: &ApiRepo) -> Result { let start = std::time::Instant::now(); tracing::info!("Starting download"); - let model_root = api - .get("config.json") - .await? - .parent() - .unwrap() - .to_path_buf(); + tracing::info!("Downloading `config.json`"); + api.get("config.json").await?; + + tracing::info!("Downloading `tokenizer.json`"); api.get("tokenizer.json").await?; - let api_info = api.info().await?; - let model_files = _weight_files_to_download(&api_info, "safetensors") - .or_else(|| { - tracing::warn!("`model.safetensors` not found. Using `pytorch_model.bin` instead. Model loading will be significantly slower."); - _weight_files_to_download(&api_info, "pytorch_model") - }).expect("No model files found as `safetensors` or `pytorch_model`"); + let model_files = match download_safetensors(api).await { + Ok(p) => p, + Err(_) => { + tracing::warn!("safetensors weights not found. Using `pytorch_model.bin` instead. Model loading will be significantly slower."); + tracing::info!("Downloading `pytorch_model.bin`"); + let p = api.get("pytorch_model.bin").await?; + vec![p] + } + }; + let model_root = model_files[0].parent().unwrap().to_path_buf(); - // Download the model files - for file_name in model_files { - api.get(file_name).await?; - } tracing::info!("Model artifacts downloaded in {:?}", start.elapsed()); Ok(model_root) } #[instrument(skip_all)] pub async fn download_pool_config(api: &ApiRepo) -> Result { + tracing::info!("Downloading `1_Pooling/config.json`"); let pool_config_path = api.get("1_Pooling/config.json").await?; Ok(pool_config_path) } +async fn download_safetensors(api: &ApiRepo) -> Result, ApiError> { + // Single file + tracing::info!("Downloading `model.safetensors`"); + match api.get("model.safetensors").await { + Ok(p) => return Ok(vec![p]), + Err(err) => tracing::warn!("Could not download `model.safetensors`: {}", err), + }; + + // Sharded weights + // Download and parse index file + tracing::info!("Downloading `model.safetensors.index.json`"); + let index_file = api.get("model.safetensors.index.json").await?; + let index_file_string: String = + std::fs::read_to_string(index_file).expect("model.safetensors.index.json is corrupted"); + let json: serde_json::Value = serde_json::from_str(&index_file_string) + .expect("model.safetensors.index.json is corrupted"); + + let weight_map = match json.get("weight_map") { + Some(serde_json::Value::Object(map)) => map, + _ => panic!("model.safetensors.index.json is corrupted"), + }; + + let mut safetensors_filenames = std::collections::HashSet::new(); + for value in weight_map.values() { + if let Some(file) = value.as_str() { + safetensors_filenames.insert(file.to_string()); + } + } + + // Download weight files + let mut safetensors_files = Vec::new(); + for n in safetensors_filenames { + tracing::info!("Downloading `{}`", n); + safetensors_files.push(api.get(&n).await?); + } + + Ok(safetensors_files) +} + #[instrument(skip_all)] pub async fn download_st_config(api: &ApiRepo) -> Result { // Try default path @@ -91,3 +102,10 @@ pub async fn download_st_config(api: &ApiRepo) -> Result { Err(err) } + +#[instrument(skip_all)] +pub async fn download_new_st_config(api: &ApiRepo) -> Result { + tracing::info!("Downloading `config_sentence_transformers.json`"); + let pool_config_path = api.get("config_sentence_transformers.json").await?; + Ok(pool_config_path) +} diff --git a/core/src/infer.rs b/core/src/infer.rs index 54f755d9..23b343bf 100644 --- a/core/src/infer.rs +++ b/core/src/infer.rs @@ -4,6 +4,7 @@ use crate::TextEmbeddingsError; use std::sync::Arc; use std::time::{Duration, Instant}; use text_embeddings_backend::{Backend, BackendError, Embedding, ModelType}; +use tokenizers::TruncationDirection; use tokio::sync::{mpsc, oneshot, watch, Notify, OwnedSemaphorePermit, Semaphore}; use tracing::instrument; @@ -29,14 +30,10 @@ impl Infer { ) -> Self { let notify_batching_task = Arc::new(Notify::new()); - let (embed_sender, embed_receiver) = mpsc::unbounded_channel(); + // Bound channel to 1 to be able to prefetch one batch + let (embed_sender, embed_receiver) = mpsc::channel(1); - // Create two batching tasks to prefetch batches - tokio::spawn(batching_task( - queue.clone(), - notify_batching_task.clone(), - embed_sender.clone(), - )); + // Batching task tokio::spawn(batching_task( queue.clone(), notify_batching_task.clone(), @@ -58,23 +55,25 @@ impl Infer { } } - #[instrument(skip(self))] + #[instrument(skip(self, inputs))] pub async fn tokenize + std::fmt::Debug>( &self, inputs: I, add_special_tokens: bool, - ) -> Result { + prompt_name: Option, + ) -> Result<(Option, RawEncoding), TextEmbeddingsError> { self.tokenization - .tokenize(inputs.into(), add_special_tokens) + .tokenize(inputs.into(), add_special_tokens, prompt_name) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err }) } - #[instrument(skip(self))] + #[instrument(skip(self, ids))] pub async fn decode( &self, ids: Vec, @@ -84,7 +83,8 @@ impl Infer { .decode(ids, skip_special_tokens) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err }) @@ -97,11 +97,13 @@ impl Infer { .limit_concurrent_requests .try_acquire_owned() .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "overloaded"); + let counter = metrics::counter!("te_request_failure", "err" => "overloaded"); + counter.increment(1); tracing::error!("{err}"); TextEmbeddingsError::from(err) }) } + #[instrument(skip(self))] pub async fn acquire_permit(&self) -> OwnedSemaphorePermit { // Limit concurrent requests by acquiring a permit from the semaphore @@ -112,17 +114,20 @@ impl Infer { .expect("Semaphore has been closed. This is a bug.") } - #[instrument(skip(self, permit))] + #[instrument(skip(self, inputs, permit))] pub async fn embed_all + std::fmt::Debug>( &self, inputs: I, truncate: bool, + truncation_direction: TruncationDirection, + prompt_name: Option, permit: OwnedSemaphorePermit, ) -> Result { let start_time = Instant::now(); if self.is_splade() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "`embed_all` is not available for SPLADE models".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -131,7 +136,15 @@ impl Infer { } let results = self - .embed(inputs, truncate, false, &start_time, permit) + .embed( + inputs, + truncate, + truncation_direction, + prompt_name, + false, + &start_time, + permit, + ) .await?; let InferResult::AllEmbedding(response) = results else { @@ -142,35 +155,34 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_embed_success"); - metrics::histogram!("te_embed_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_embed_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_embed_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_embed_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_embed_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_embed_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } - #[instrument(skip(self, permit))] + #[instrument(skip(self, inputs, permit))] pub async fn embed_sparse + std::fmt::Debug>( &self, inputs: I, truncate: bool, + truncation_direction: TruncationDirection, + prompt_name: Option, permit: OwnedSemaphorePermit, ) -> Result { let start_time = Instant::now(); if !self.is_splade() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "Model is not an embedding model with SPLADE pooling".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -179,7 +191,15 @@ impl Infer { } let results = self - .embed(inputs, truncate, true, &start_time, permit) + .embed( + inputs, + truncate, + truncation_direction, + prompt_name, + true, + &start_time, + permit, + ) .await?; let InferResult::PooledEmbedding(response) = results else { @@ -190,36 +210,35 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_embed_success"); - metrics::histogram!("te_embed_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_embed_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_embed_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_embed_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_embed_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_embed_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } - #[instrument(skip(self, permit))] + #[instrument(skip(self, inputs, permit))] pub async fn embed_pooled + std::fmt::Debug>( &self, inputs: I, truncate: bool, + truncation_direction: TruncationDirection, + prompt_name: Option, normalize: bool, permit: OwnedSemaphorePermit, ) -> Result { let start_time = Instant::now(); if self.is_splade() && normalize { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "`normalize` is not available for SPLADE models".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -228,7 +247,15 @@ impl Infer { } let results = self - .embed(inputs, truncate, true, &start_time, permit) + .embed( + inputs, + truncate, + truncation_direction, + prompt_name, + true, + &start_time, + permit, + ) .await?; let InferResult::PooledEmbedding(mut response) = results else { @@ -256,34 +283,34 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_embed_success"); - metrics::histogram!("te_embed_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_embed_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_embed_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_embed_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_embed_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_embed_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_embed_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } + #[allow(clippy::too_many_arguments)] async fn embed + std::fmt::Debug>( &self, inputs: I, truncate: bool, + truncation_direction: TruncationDirection, + prompt_name: Option, pooling: bool, start_time: &Instant, _permit: OwnedSemaphorePermit, ) -> Result { if self.is_classifier() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "Model is not an embedding model".to_string(); tracing::error!("{message}"); return Err(TextEmbeddingsError::Backend(BackendError::Inference( @@ -291,15 +318,17 @@ impl Infer { ))); } - metrics::increment_counter!("te_embed_count"); + let counter = metrics::counter!("te_embed_count"); + counter.increment(1); // Tokenization let encoding = self .tokenization - .encode(inputs.into(), truncate) + .encode(inputs.into(), truncate, truncation_direction, prompt_name) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -327,7 +356,8 @@ impl Infer { "Infer batching task dropped the sender without sending a response. This is a bug.", ) .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "inference"); + let counter = metrics::counter!("te_request_failure", "err" => "inference"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -335,16 +365,18 @@ impl Infer { Ok(response) } - #[instrument(skip(self, _permit))] + #[instrument(skip(self, inputs, _permit))] pub async fn predict + std::fmt::Debug>( &self, inputs: I, truncate: bool, + truncation_direction: TruncationDirection, raw_scores: bool, _permit: OwnedSemaphorePermit, ) -> Result { if !self.is_classifier() { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "Model is not a classifier model".to_string(); return Err(TextEmbeddingsError::Backend(BackendError::Inference( message, @@ -352,15 +384,17 @@ impl Infer { } let start_time = Instant::now(); - metrics::increment_counter!("te_predict_count"); + let counter = metrics::counter!("te_predict_count"); + counter.increment(1); // Tokenization let encoding = self .tokenization - .encode(inputs.into(), truncate) + .encode(inputs.into(), truncate, truncation_direction, None) .await .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "tokenization"); + let counter = metrics::counter!("te_request_failure", "err" => "tokenization"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -388,7 +422,8 @@ impl Infer { "Infer batching task dropped the sender without sending a response. This is a bug.", ) .map_err(|err| { - metrics::increment_counter!("te_request_failure", "err" => "inference"); + let counter = metrics::counter!("te_request_failure", "err" => "inference"); + counter.increment(1); tracing::error!("{err}"); err })?; @@ -425,20 +460,16 @@ impl Infer { let total_time = start_time.elapsed(); // Metrics - metrics::increment_counter!("te_predict_success"); - metrics::histogram!("te_predict_duration", total_time.as_secs_f64()); - metrics::histogram!( - "te_predict_tokenization_duration", - response.metadata.tokenization.as_secs_f64() - ); - metrics::histogram!( - "te_predict_queue_duration", - response.metadata.queue.as_secs_f64() - ); - metrics::histogram!( - "te_predict_inference_duration", - response.metadata.inference.as_secs_f64() - ); + let counter = metrics::counter!("te_predict_success"); + counter.increment(1); + let histogram = metrics::histogram!("te_predict_duration"); + histogram.record(total_time.as_secs_f64()); + let histogram = metrics::histogram!("te_predict_tokenization_duration"); + histogram.record(response.metadata.tokenization.as_secs_f64()); + let histogram = metrics::histogram!("te_predict_queue_duration"); + histogram.record(response.metadata.queue.as_secs_f64()); + let histogram = metrics::histogram!("te_predict_inference_duration"); + histogram.record(response.metadata.inference.as_secs_f64()); Ok(response) } @@ -468,30 +499,30 @@ impl Infer { } #[instrument(skip_all)] -async fn batching_task( - queue: Queue, - notify: Arc, - embed_sender: mpsc::UnboundedSender<(NextBatch, oneshot::Sender<()>)>, -) { +async fn batching_task(queue: Queue, notify: Arc, embed_sender: mpsc::Sender) { loop { notify.notified().await; - while let Some(next_batch) = queue.next_batch().await { - let (callback_sender, callback_receiver) = oneshot::channel(); - embed_sender - .send((next_batch, callback_sender)) + { + let mut permit = embed_sender + .reserve() + .await .expect("embed receiver was dropped. This is a bug."); - let _ = callback_receiver.await; + + while let Some(next_batch) = queue.next_batch().await { + permit.send(next_batch); + permit = embed_sender + .reserve() + .await + .expect("embed receiver was dropped. This is a bug."); + } } } } #[instrument(skip_all)] -async fn backend_task( - backend: Backend, - mut embed_receiver: mpsc::UnboundedReceiver<(NextBatch, oneshot::Sender<()>)>, -) { - while let Some((batch, _callback)) = embed_receiver.recv().await { +async fn backend_task(backend: Backend, mut embed_receiver: mpsc::Receiver) { + while let Some(batch) = embed_receiver.recv().await { match &backend.model_type { ModelType::Classifier => { let results = backend.predict(batch.1).await; diff --git a/core/src/queue.rs b/core/src/queue.rs index dfefda21..3fd8b771 100644 --- a/core/src/queue.rs +++ b/core/src/queue.rs @@ -35,7 +35,7 @@ pub struct Metadata { #[derive(Debug, Clone)] pub struct Queue { /// Channel to communicate with the background queue task - queue_sender: mpsc::UnboundedSender, + queue_sender: mpsc::Sender, } impl Queue { @@ -46,7 +46,7 @@ impl Queue { max_concurrent_requests: usize, ) -> Self { // Create channels - let (queue_sender, queue_receiver) = mpsc::unbounded_channel(); + let (queue_sender, queue_receiver) = mpsc::channel(max_concurrent_requests); // Launch background queue task std::thread::spawn(move || { @@ -68,8 +68,8 @@ impl Queue { // Send append command to the background task managing the state // Unwrap is safe here self.queue_sender - .send(QueueCommand::Append(Box::new(entry), Span::current())) - .expect("Queue background task dropped the receiver. This is a bug."); + .try_send(QueueCommand::Append(Box::new(entry), Span::current())) + .expect("Queue background task dropped the receiver or the receiver is too behind. This is a bug."); } /// Get the next batch from the queue @@ -80,11 +80,11 @@ impl Queue { // Send next batch command to the background task managing the state // Unwrap is safe here self.queue_sender - .send(QueueCommand::NextBatch { + .try_send(QueueCommand::NextBatch { response_sender, span: Span::current(), }) - .expect("Queue background task dropped the receiver. This is a bug."); + .expect("Queue background task dropped the receiver or the receiver is too behind. This is a bug."); // Await on response channel // Unwrap is safe here response_receiver.await.expect( @@ -99,7 +99,7 @@ fn queue_blocking_task( max_batch_tokens: usize, max_batch_requests: Option, max_concurrent_requests: usize, - mut queue_receiver: mpsc::UnboundedReceiver, + mut queue_receiver: mpsc::Receiver, ) { let capacity = max_batch_requests.unwrap_or(max_concurrent_requests); @@ -110,7 +110,8 @@ fn queue_blocking_task( QueueCommand::Append(entry, span) => { let _span = span.entered(); entries.push_back(*entry); - metrics::increment_gauge!("te_queue_size", 1.0); + let gauge = metrics::gauge!("te_queue_size"); + gauge.increment(1.0); } QueueCommand::NextBatch { response_sender, @@ -137,7 +138,8 @@ fn queue_blocking_task( // Filter entries where the response receiver was dropped (== entries where the request // was dropped by the client) if entry.metadata.response_tx.is_closed() { - metrics::increment_counter!("te_request_failure", "err" => "dropped"); + let counter = metrics::counter!("te_request_failure", "err" => "dropped"); + counter.increment(1); continue; } @@ -197,9 +199,12 @@ fn queue_blocking_task( let _ = response_sender.send(next_batch); - metrics::histogram!("te_batch_next_size", batch_size as f64); - metrics::histogram!("te_batch_next_tokens", current_tokens as f64); - metrics::gauge!("te_queue_size", entries.len() as f64); + let histogram = metrics::histogram!("te_batch_next_size"); + histogram.record(batch_size as f64); + let histogram = metrics::histogram!("te_batch_next_tokens"); + histogram.record(current_tokens as f64); + let gauge = metrics::gauge!("te_queue_size"); + gauge.set(entries.len() as f64) } } } diff --git a/core/src/tokenization.rs b/core/src/tokenization.rs index 46f1411e..c33bfafc 100644 --- a/core/src/tokenization.rs +++ b/core/src/tokenization.rs @@ -1,16 +1,17 @@ /// Payload tokenization logic use crate::TextEmbeddingsError; +use std::collections::HashMap; use tokenizers::tokenizer::Tokenizer; pub use tokenizers::Encoding as RawEncoding; use tokenizers::{TruncationDirection, TruncationParams, TruncationStrategy}; -use tokio::sync::{mpsc, oneshot}; +use tokio::sync::oneshot; use tracing::{instrument, Span}; /// Validation #[derive(Debug, Clone)] pub struct Tokenization { /// Channel to communicate with the background tokenization task - sender: mpsc::UnboundedSender, + sender: async_channel::Sender, } impl Tokenization { @@ -19,43 +20,33 @@ impl Tokenization { tokenizer: Tokenizer, max_input_length: usize, position_offset: usize, + default_prompt: Option, + prompts: Option>, ) -> Self { tracing::info!("Starting {workers} tokenization workers"); // Create channel - let (sender, mut round_robin_receiver) = mpsc::unbounded_channel(); - let mut senders = Vec::with_capacity(workers); + let (sender, receiver) = async_channel::bounded(workers * 4); // Create workers for _ in 0..workers { let tokenizer_clone = tokenizer.clone(); - let (tokenizer_sender, tokenizer_receiver) = mpsc::unbounded_channel(); - senders.push(tokenizer_sender); - + let receiver_clone = receiver.clone(); + let default_prompt_clone = default_prompt.clone(); + let prompts_clone = prompts.clone(); // Spawn worker std::thread::spawn(move || { tokenizer_worker( tokenizer_clone, max_input_length, position_offset, - tokenizer_receiver, + default_prompt_clone, + prompts_clone, + receiver_clone, ) }); } - // Create tokenization round robin task - tokio::spawn(async move { - // Loop over requests - loop { - for sender in &senders { - match round_robin_receiver.recv().await { - None => return, - Some(request) => sender.send(request).unwrap(), - }; - } - } - }); - Self { sender } } @@ -64,6 +55,8 @@ impl Tokenization { &self, inputs: EncodingInput, truncate: bool, + truncation_direction: TruncationDirection, + prompt_name: Option, ) -> Result { // Check if inputs is empty if inputs.is_empty() { @@ -80,9 +73,12 @@ impl Tokenization { .send(TokenizerRequest::Encode( inputs, truncate, + truncation_direction, + prompt_name, response_sender, Span::current(), )) + .await .expect("Tokenization background task dropped the receiver. This is a bug."); // Await on response channel @@ -95,7 +91,8 @@ impl Tokenization { &self, inputs: EncodingInput, add_special_tokens: bool, - ) -> Result { + prompt_name: Option, + ) -> Result<(Option, RawEncoding), TextEmbeddingsError> { // Check if inputs is empty if inputs.is_empty() { return Err(TextEmbeddingsError::Validation( @@ -111,9 +108,11 @@ impl Tokenization { .send(TokenizerRequest::Tokenize( inputs, add_special_tokens, + prompt_name, response_sender, Span::current(), )) + .await .expect("Tokenization background task dropped the receiver. This is a bug."); // Await on response channel @@ -145,6 +144,7 @@ impl Tokenization { response_sender, Span::current(), )) + .await .expect("Tokenization background task dropped the receiver. This is a bug."); // Await on response channel @@ -158,35 +158,67 @@ fn tokenizer_worker( mut tokenizer: Tokenizer, max_input_length: usize, position_offset: usize, - mut receiver: mpsc::UnboundedReceiver, + default_prompt: Option, + prompts: Option>, + receiver: async_channel::Receiver, ) { // Loop over requests - while let Some(request) = receiver.blocking_recv() { + while let Ok(request) = receiver.recv_blocking() { match request { - TokenizerRequest::Encode(inputs, truncate, response_tx, parent_span) => { + TokenizerRequest::Encode( + inputs, + truncate, + truncation_direction, + prompt_name, + response_tx, + parent_span, + ) => { parent_span.in_scope(|| { if !response_tx.is_closed() { + let default_prompt_clone = match prompt_name { + None => default_prompt.clone(), + Some(_) => None, + }; + // It's possible that the user dropped its request resulting in a send error. // We just discard the error let _ = response_tx.send(encode_input( inputs, truncate, + truncation_direction, max_input_length, position_offset, + default_prompt_clone, + prompt_name, + prompts.as_ref(), &mut tokenizer, )); } }) } - TokenizerRequest::Tokenize(inputs, add_special_tokens, response_tx, parent_span) => { + TokenizerRequest::Tokenize( + inputs, + add_special_tokens, + prompt_name, + response_tx, + parent_span, + ) => { parent_span.in_scope(|| { if !response_tx.is_closed() { + let default_prompt_clone = match prompt_name { + None => default_prompt.clone(), + Some(_) => None, + }; + // It's possible that the user dropped its request resulting in a send error. // We just discard the error let _ = response_tx.send(tokenize_input( inputs, add_special_tokens, None, + default_prompt_clone, + prompt_name, + prompts.as_ref(), &mut tokenizer, )); } @@ -216,50 +248,123 @@ fn decode_ids( .decode(&ids, skip_special_tokens)?) } +fn prepare_pre_prompt( + default_prompt: Option, + prompt_name: Option, + prompts: Option<&HashMap>, +) -> Result, TextEmbeddingsError> { + let pre_prompt = if let Some(prompt_name) = prompt_name.as_ref() { + match prompts { + None => { + return Err(TextEmbeddingsError::Validation(format!("`default-prompt-name` is set to `{prompt_name}` but no prompts were found in the Sentence Transformers configuration"))); + } + Some(prompts) if !prompts.contains_key(prompt_name) => { + return Err(TextEmbeddingsError::Validation(format!("`default-prompt-name` is set to `{prompt_name}` but it was not found in the Sentence Transformers prompts. Available prompts: {:?}", prompts.keys()))); + } + Some(prompts) => prompts.get(prompt_name).cloned(), + } + } else { + default_prompt + }; + Ok(pre_prompt) +} + fn tokenize_input( inputs: EncodingInput, add_special_tokens: bool, truncate_params: Option, + default_prompt: Option, + prompt_name: Option, + prompts: Option<&HashMap>, tokenizer: &mut Tokenizer, -) -> Result { +) -> Result<(Option, RawEncoding), TextEmbeddingsError> { + let pre_prompt = prepare_pre_prompt(default_prompt, prompt_name, prompts)?; + let encoding = match inputs { // encode input - EncodingInput::Single(s) => tokenizer - .with_truncation(truncate_params)? - .encode::(s, add_special_tokens)?, - EncodingInput::Dual(s1, s2) => { - tokenizer + EncodingInput::Single(s) => { + let s = if let Some(mut pre_prompt) = pre_prompt { + pre_prompt.push_str(&s); + pre_prompt + } else { + s + }; + + let encoding = tokenizer .with_truncation(truncate_params)? - .encode::<(String, String)>((s1, s2), add_special_tokens)? + .encode::<&str>(&s, add_special_tokens)?; + + (Some(s), encoding) + } + EncodingInput::Dual(s1, s2) => { + if pre_prompt.is_some() { + return Err(TextEmbeddingsError::Validation( + "`prompt_name` cannot be set with dual inputs".to_string(), + )); + } + + ( + None, + tokenizer + .with_truncation(truncate_params)? + .encode::<(String, String)>((s1, s2), add_special_tokens)?, + ) } // input is encoded -> convert to tokenizers Encoding EncodingInput::Ids(ids) => { - let text = tokenizer.decode(&ids, false)?; - tokenizer - .with_truncation(truncate_params)? - .encode::(text, false)? + if let Some(mut pre_prompt) = pre_prompt { + let text = tokenizer.decode(&ids, true)?; + pre_prompt.push_str(&text); + + let encoding = tokenizer + .with_truncation(truncate_params)? + .encode::<&str>(&pre_prompt, true)?; + + (Some(pre_prompt), encoding) + } else { + let text = tokenizer.decode(&ids, false)?; + + let encoding = tokenizer + .with_truncation(truncate_params)? + .encode::<&str>(&text, false)?; + + (Some(text), encoding) + } } }; Ok(encoding) } /// Get input length and optionally truncate it +#[allow(clippy::too_many_arguments)] fn encode_input( inputs: EncodingInput, truncate: bool, + truncation_direction: TruncationDirection, max_input_length: usize, position_offset: usize, + default_prompt: Option, + prompt_name: Option, + prompts: Option<&HashMap>, tokenizer: &mut Tokenizer, ) -> Result { // Default truncation params let truncate_params = truncate.then_some(TruncationParams { - direction: TruncationDirection::Right, + direction: truncation_direction, max_length: max_input_length, strategy: TruncationStrategy::LongestFirst, stride: 0, }); - let encoding = tokenize_input(inputs, true, truncate_params, tokenizer)?; + let (_, encoding) = tokenize_input( + inputs, + true, + truncate_params, + default_prompt, + prompt_name, + prompts, + tokenizer, + )?; let seq_len = encoding.len(); if seq_len > max_input_length { @@ -267,7 +372,8 @@ fn encode_input( "`inputs` must have less than {max_input_length} tokens. Given: {seq_len}" ))); } - metrics::histogram!("te_request_input_length", seq_len as f64); + let histogram = metrics::histogram!("te_request_input_length"); + histogram.record(seq_len as f64); Ok(ValidEncoding { input_ids: encoding.get_ids().to_vec(), token_type_ids: encoding.get_type_ids().to_vec(), @@ -316,13 +422,16 @@ enum TokenizerRequest { Encode( EncodingInput, bool, + TruncationDirection, + Option, oneshot::Sender>, Span, ), Tokenize( EncodingInput, bool, - oneshot::Sender>, + Option, + oneshot::Sender, RawEncoding), TextEmbeddingsError>>, Span, ), Decode( diff --git a/docs/openapi.json b/docs/openapi.json index 62c2d1c7..2c98ee6f 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -10,7 +10,7 @@ "name": "Apache 2.0", "url": "https://www.apache.org/licenses/LICENSE-2.0" }, - "version": "1.2." + "version": "1.4.0" }, "paths": { "/decode": { @@ -19,7 +19,6 @@ "Text Embeddings Inference" ], "summary": "Decode input ids", - "description": "Decode input ids", "operationId": "decode", "requestBody": { "content": { @@ -65,7 +64,6 @@ "Text Embeddings Inference" ], "summary": "Get Embeddings. Returns a 424 status code if the model is not an embedding model.", - "description": "Get Embeddings. Returns a 424 status code if the model is not an embedding model.", "operationId": "embed", "requestBody": { "content": { @@ -153,7 +151,7 @@ "Text Embeddings Inference" ], "summary": "Get all Embeddings without Pooling.", - "description": "Get all Embeddings without Pooling.\nReturns a 424 status code if the model is not an embedding model.", + "description": "Returns a 424 status code if the model is not an embedding model.", "operationId": "embed_all", "requestBody": { "content": { @@ -241,7 +239,6 @@ "Text Embeddings Inference" ], "summary": "Get Sparse Embeddings. Returns a 424 status code if the model is not an embedding model with SPLADE pooling.", - "description": "Get Sparse Embeddings. Returns a 424 status code if the model is not an embedding model with SPLADE pooling.", "operationId": "embed_sparse", "requestBody": { "content": { @@ -323,101 +320,12 @@ } } }, - "/embeddings": { - "post": { - "tags": [ - "Text Embeddings Inference" - ], - "summary": "OpenAI compatible route. Returns a 424 status code if the model is not an embedding model.", - "description": "OpenAI compatible route. Returns a 424 status code if the model is not an embedding model.", - "operationId": "openai_embed", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAICompatRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Embeddings", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAICompatResponse" - } - } - } - }, - "413": { - "description": "Batch size error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAICompatErrorResponse" - }, - "example": { - "message": "Batch size error", - "type": "validation" - } - } - } - }, - "422": { - "description": "Tokenization error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAICompatErrorResponse" - }, - "example": { - "message": "Tokenization error", - "type": "tokenizer" - } - } - } - }, - "424": { - "description": "Embedding Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAICompatErrorResponse" - }, - "example": { - "message": "Inference failed", - "type": "backend" - } - } - } - }, - "429": { - "description": "Model is overloaded", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpenAICompatErrorResponse" - }, - "example": { - "message": "Model is overloaded", - "type": "overloaded" - } - } - } - } - } - } - }, "/health": { "get": { "tags": [ "Text Embeddings Inference" ], "summary": "Health check method", - "description": "Health check method", "operationId": "health", "responses": { "200": { @@ -446,7 +354,6 @@ "Text Embeddings Inference" ], "summary": "Text Embeddings Inference endpoint info", - "description": "Text Embeddings Inference endpoint info", "operationId": "get_model_info", "responses": { "200": { @@ -468,7 +375,6 @@ "Text Embeddings Inference" ], "summary": "Prometheus metrics scrape endpoint", - "description": "Prometheus metrics scrape endpoint", "operationId": "metrics", "responses": { "200": { @@ -490,7 +396,6 @@ "Text Embeddings Inference" ], "summary": "Get Predictions. Returns a 424 status code if the model is not a Sequence Classification model", - "description": "Get Predictions. Returns a 424 status code if the model is not a Sequence Classification model", "operationId": "predict", "requestBody": { "content": { @@ -578,7 +483,7 @@ "Text Embeddings Inference" ], "summary": "Get Ranks. Returns a 424 status code if the model is not a Sequence Classification model with", - "description": "Get Ranks. Returns a 424 status code if the model is not a Sequence Classification model with\na single class.", + "description": "a single class.", "operationId": "rerank", "requestBody": { "content": { @@ -666,7 +571,6 @@ "Text Embeddings Inference" ], "summary": "Tokenize inputs", - "description": "Tokenize inputs", "operationId": "tokenize", "requestBody": { "content": { @@ -706,6 +610,174 @@ } } }, + "/v1/embeddings": { + "post": { + "tags": [ + "Text Embeddings Inference" + ], + "summary": "OpenAI compatible route. Returns a 424 status code if the model is not an embedding model.", + "operationId": "openai_embed", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenAICompatRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Embeddings", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenAICompatResponse" + } + } + } + }, + "413": { + "description": "Batch size error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenAICompatErrorResponse" + }, + "example": { + "message": "Batch size error", + "type": "validation" + } + } + } + }, + "422": { + "description": "Tokenization error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenAICompatErrorResponse" + }, + "example": { + "message": "Tokenization error", + "type": "tokenizer" + } + } + } + }, + "424": { + "description": "Embedding Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenAICompatErrorResponse" + }, + "example": { + "message": "Inference failed", + "type": "backend" + } + } + } + }, + "429": { + "description": "Model is overloaded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpenAICompatErrorResponse" + }, + "example": { + "message": "Model is overloaded", + "type": "overloaded" + } + } + } + } + } + } + }, + "/vertex": { + "post": { + "tags": [ + "Text Embeddings Inference" + ], + "summary": "Generate embeddings from a Vertex request", + "description": "Generate embeddings from a Vertex request", + "operationId": "vertex_compatibility", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/VertexRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Results" + }, + "413": { + "description": "Batch size error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "error": "Batch size error", + "error_type": "validation" + } + } + } + }, + "422": { + "description": "Tokenization error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "error": "Tokenization error", + "error_type": "tokenizer" + } + } + } + }, + "424": { + "description": "Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "error": "Inference failed", + "error_type": "backend" + } + } + } + }, + "429": { + "description": "Model is overloaded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "example": { + "error": "Model is overloaded", + "error_type": "overloaded" + } + } + } + } + } + } + }, "/vertex": { "post": { "tags": [ @@ -852,10 +924,26 @@ "inputs": { "$ref": "#/components/schemas/Input" }, + "prompt_name": { + "type": "string", + "description": "The name of the prompt that should be used by for encoding. If not set, no prompt\nwill be applied.\n\nMust be a key in the `Sentence Transformers` configuration `prompts` dictionary.\n\nFor example if ``prompt_name`` is \"query\" and the ``prompts`` is {\"query\": \"query: \", ...},\nthen the sentence \"What is the capital of France?\" will be encoded as\n\"query: What is the capital of France?\" because the prompt text will be prepended before\nany text to encode.", + "default": "null", + "example": "null", + "nullable": true + }, "truncate": { "type": "boolean", "default": "false", - "example": "false" + "example": "false", + "nullable": true + }, + "truncation_direction": { + "allOf": [ + { + "$ref": "#/components/schemas/TruncationDirection" + } + ], + "default": "right" } } }, @@ -895,10 +983,26 @@ "default": "true", "example": "true" }, + "prompt_name": { + "type": "string", + "description": "The name of the prompt that should be used by for encoding. If not set, no prompt\nwill be applied.\n\nMust be a key in the `Sentence Transformers` configuration `prompts` dictionary.\n\nFor example if ``prompt_name`` is \"query\" and the ``prompts`` is {\"query\": \"query: \", ...},\nthen the sentence \"What is the capital of France?\" will be encoded as\n\"query: What is the capital of France?\" because the prompt text will be prepended before\nany text to encode.", + "default": "null", + "example": "null", + "nullable": true + }, "truncate": { "type": "boolean", "default": "false", - "example": "false" + "example": "false", + "nullable": true + }, + "truncation_direction": { + "allOf": [ + { + "$ref": "#/components/schemas/TruncationDirection" + } + ], + "default": "right" } } }, @@ -928,10 +1032,26 @@ "inputs": { "$ref": "#/components/schemas/Input" }, + "prompt_name": { + "type": "string", + "description": "The name of the prompt that should be used by for encoding. If not set, no prompt\nwill be applied.\n\nMust be a key in the `Sentence Transformers` configuration `prompts` dictionary.\n\nFor example if ``prompt_name`` is \"query\" and the ``prompts`` is {\"query\": \"query: \", ...},\nthen the sentence \"What is the capital of France?\" will be encoded as\n\"query: What is the capital of France?\" because the prompt text will be prepended before\nany text to encode.", + "default": "null", + "example": "null", + "nullable": true + }, "truncate": { "type": "boolean", "default": "false", - "example": "false" + "example": "false", + "nullable": true + }, + "truncation_direction": { + "allOf": [ + { + "$ref": "#/components/schemas/TruncationDirection" + } + ], + "default": "right" } } }, @@ -944,6 +1064,20 @@ } } }, + "Embedding": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "number", + "format": "float" + } + }, + { + "type": "string" + } + ] + }, "EmbeddingModel": { "type": "object", "required": [ @@ -956,6 +1090,13 @@ } } }, + "EncodingFormat": { + "type": "string", + "enum": [ + "float", + "base64" + ] + }, "ErrorResponse": { "type": "object", "required": [ @@ -991,10 +1132,14 @@ "max_input_length", "max_batch_tokens", "max_client_batch_size", + "auto_truncate", "tokenization_workers", "version" ], "properties": { + "auto_truncate": { + "type": "boolean" + }, "docker_label": { "type": "string", "example": "null", @@ -1063,6 +1208,42 @@ } }, "Input": { + "oneOf": [ + { + "$ref": "#/components/schemas/InputType" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/InputType" + } + } + ] + }, + "InputIds": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + }, + { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + } + } + ] + }, + "InputType": { "oneOf": [ { "type": "string" @@ -1070,7 +1251,32 @@ { "type": "array", "items": { - "type": "string" + "type": "integer", + "format": "int32", + "minimum": 0 + } + } + ] + }, + "InputIds": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + }, + { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer", + "format": "int32", + "minimum": 0 + } } } ] @@ -1144,16 +1350,7 @@ ], "properties": { "embedding": { - "type": "array", - "items": { - "type": "number", - "format": "float" - }, - "example": [ - 0.0, - 1.0, - 2.0 - ] + "$ref": "#/components/schemas/Embedding" }, "index": { "type": "integer", @@ -1193,6 +1390,14 @@ "input" ], "properties": { + "encoding_format": { + "allOf": [ + { + "$ref": "#/components/schemas/EncodingFormat" + } + ], + "default": "float" + }, "input": { "$ref": "#/components/schemas/Input" }, @@ -1317,7 +1522,16 @@ "truncate": { "type": "boolean", "default": "false", - "example": "false" + "example": "false", + "nullable": true + }, + "truncation_direction": { + "allOf": [ + { + "$ref": "#/components/schemas/TruncationDirection" + } + ], + "default": "right" } } }, @@ -1416,7 +1630,16 @@ "truncate": { "type": "boolean", "default": "false", - "example": "false" + "example": "false", + "nullable": true + }, + "truncation_direction": { + "allOf": [ + { + "$ref": "#/components/schemas/TruncationDirection" + } + ], + "default": "right" } } }, @@ -1479,6 +1702,19 @@ } } }, + "TokenizeInput": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, "TokenizeRequest": { "type": "object", "required": [ @@ -1491,7 +1727,14 @@ "example": "true" }, "inputs": { - "$ref": "#/components/schemas/Input" + "$ref": "#/components/schemas/TokenizeInput" + }, + "prompt_name": { + "type": "string", + "description": "The name of the prompt that should be used by for encoding. If not set, no prompt\nwill be applied.\n\nMust be a key in the `Sentence Transformers` configuration `prompts` dictionary.\n\nFor example if ``prompt_name`` is \"query\" and the ``prompts`` is {\"query\": \"query: \", ...},\nthen the sentence \"What is the capital of France?\" will be encoded as\n\"query: What is the capital of France?\" because the prompt text will be prepended before\nany text to encode.", + "default": "null", + "example": "null", + "nullable": true } } }, @@ -1515,273 +1758,12 @@ ] ] }, - "VertexInstance": { - "oneOf": [ - { - "allOf": [ - { - "$ref": "#/components/schemas/EmbedRequest" - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "embed" - ] - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/EmbedAllRequest" - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "embed_all" - ] - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/EmbedSparseRequest" - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "embed_sparse" - ] - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/PredictRequest" - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "predict" - ] - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/RerankRequest" - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "rerank" - ] - } - } - } - ] - }, - { - "allOf": [ - { - "$ref": "#/components/schemas/TokenizeRequest" - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "tokenize" - ] - } - } - } - ] - } - ], - "discriminator": { - "propertyName": "type" - } - }, - "VertexRequest": { - "type": "object", - "required": [ - "instances" - ], - "properties": { - "instances": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VertexInstance" - } - } - } - }, - "VertexResponse": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VertexResponseInstance" - } - }, - "VertexResponseInstance": { - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "result" - ], - "properties": { - "result": { - "$ref": "#/components/schemas/EmbedResponse" - }, - "type": { - "type": "string", - "enum": [ - "embed" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "result" - ], - "properties": { - "result": { - "$ref": "#/components/schemas/EmbedAllResponse" - }, - "type": { - "type": "string", - "enum": [ - "embed_all" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "result" - ], - "properties": { - "result": { - "$ref": "#/components/schemas/EmbedSparseResponse" - }, - "type": { - "type": "string", - "enum": [ - "embed_sparse" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "result" - ], - "properties": { - "result": { - "$ref": "#/components/schemas/PredictResponse" - }, - "type": { - "type": "string", - "enum": [ - "predict" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "result" - ], - "properties": { - "result": { - "$ref": "#/components/schemas/RerankResponse" - }, - "type": { - "type": "string", - "enum": [ - "rerank" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "result" - ], - "properties": { - "result": { - "$ref": "#/components/schemas/TokenizeResponse" - }, - "type": { - "type": "string", - "enum": [ - "tokenize" - ] - } - } - } - ], - "discriminator": { - "propertyName": "type" - } + "TruncationDirection": { + "type": "string", + "enum": [ + "Left", + "Right" + ] } } }, diff --git a/docs/source/en/cli_arguments.md b/docs/source/en/cli_arguments.md index c79b7f9c..93e42320 100644 --- a/docs/source/en/cli_arguments.md +++ b/docs/source/en/cli_arguments.md @@ -62,9 +62,11 @@ Options: [env: POOLING=] Possible values: - - cls: Select the CLS token as embedding - - mean: Apply Mean pooling to the model embeddings - - splade: Apply SPLADE (Sparse Lexical and Expansion) to the model embeddings. This option is only available if the loaded model is a `ForMaskedLM` Transformer model + - cls: Select the CLS token as embedding + - mean: Apply Mean pooling to the model embeddings + - splade: Apply SPLADE (Sparse Lexical and Expansion) to the model embeddings. This option is only + available if the loaded model is a `ForMaskedLM` Transformer model + - last-token: Select the last token as embedding --max-concurrent-requests The maximum amount of concurrent requests for this particular deployment. @@ -98,6 +100,37 @@ Options: [env: MAX_CLIENT_BATCH_SIZE=] [default: 32] + --auto-truncate + Automatically truncate inputs that are longer than the maximum supported size + + Unused for gRPC servers + + [env: AUTO_TRUNCATE=] + + --default-prompt-name + The name of the prompt that should be used by default for encoding. If not set, no prompt will be applied. + + Must be a key in the `Sentence Transformers` configuration `prompts` dictionary. + + For example if ``default_prompt_name`` is "query" and the ``prompts`` is {"query": "query: ", ...}, then the + sentence "What is the capital of France?" will be encoded as "query: What is the capital of France?" because + the prompt text will be prepended before any text to encode. + + The argument '--default-prompt-name ' cannot be used with '--default-prompt ` + + [env: DEFAULT_PROMPT_NAME=] + + --default-prompt + The prompt that should be used by default for encoding. If not set, no prompt will be applied. + + For example if ``default_prompt`` is "query: " then the sentence "What is the capital of France?" will be + encoded as "query: What is the capital of France?" because the prompt text will be prepended before any text + to encode. + + The argument '--default-prompt ' cannot be used with '--default-prompt-name ` + + [env: DEFAULT_PROMPT=] + --hf-api-token Your HuggingFace hub token @@ -126,7 +159,38 @@ Options: The location of the huggingface hub cache. Used to override the location if you want to provide a mounted disk for instance - [env: HUGGINGFACE_HUB_CACHE=/data] + [env: HUGGINGFACE_HUB_CACHE=] + + --payload-limit + Payload size limit in bytes + + Default is 2MB + + [env: PAYLOAD_LIMIT=] + [default: 2000000] + + --api-key + Set an api key for request authorization. + + By default the server responds to every request. With an api key set, the requests must have the Authorization + header set with the api key as Bearer token. + + [env: API_KEY=] + + --payload-limit + Payload size limit in bytes + + Default is 2MB + + [env: PAYLOAD_LIMIT=] + [default: 2000000] + + --api-key + Set an api key for request authorization. + + By default the server responds to every request. With an api key set, the requests must have the Authorization header set with the api key as Bearer token. + + [env: API_KEY=] --payload-limit Payload size limit in bytes @@ -153,6 +217,14 @@ Options: [env: OTLP_ENDPOINT=] + --otlp-service-name + The service name for opentelemetry. e.g. `text-embeddings-inference.server` + + [env: OTLP_SERVICE_NAME=] + [default: text-embeddings-inference.server] + --cors-allow-origin + Unused for gRPC servers + [env: CORS_ALLOW_ORIGIN=] ``` diff --git a/docs/source/en/private_models.md b/docs/source/en/private_models.md index bd9041c7..b5ae060d 100644 --- a/docs/source/en/private_models.md +++ b/docs/source/en/private_models.md @@ -24,10 +24,10 @@ Once you have confirmed that you have access to the model: - Navigate to your account's [Profile | Settings | Access Tokens page](https://huggingface.co/settings/tokens). - Generate and copy a read token. -If you're the CLI, set the `HUGGING_FACE_HUB_TOKEN` environment variable. For example: +If you're the CLI, set the `HF_API_TOKEN` environment variable. For example: ```shell -export HUGGING_FACE_HUB_TOKEN= +export HF_API_TOKEN= ``` Alternatively, you can provide the token when deploying the model with Docker: @@ -37,5 +37,5 @@ model= volume=$PWD/data token= -docker run --gpus all -e HUGGING_FACE_HUB_TOKEN=$token -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.2 --model-id $model +docker run --gpus all -e HF_API_TOKEN=$token -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.4 --model-id $model ``` diff --git a/docs/source/en/quick_tour.md b/docs/source/en/quick_tour.md index c0fe008c..b557f267 100644 --- a/docs/source/en/quick_tour.md +++ b/docs/source/en/quick_tour.md @@ -34,7 +34,7 @@ model=BAAI/bge-large-en-v1.5 revision=refs/pr/5 volume=$PWD/data -docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.2 --model-id $model --revision $revision +docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.4 --model-id $model --revision $revision ``` @@ -69,7 +69,7 @@ model=BAAI/bge-reranker-large revision=refs/pr/4 volume=$PWD/data -docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.2 --model-id $model --revision $revision +docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.4 --model-id $model --revision $revision ``` Once you have deployed a model, you can use the `rerank` endpoint to rank the similarity between a query and a list @@ -90,7 +90,7 @@ You can also use classic Sequence Classification models like `SamLowe/roberta-ba model=SamLowe/roberta-base-go_emotions volume=$PWD/data -docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.2 --model-id $model +docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:1.4 --model-id $model ``` Once you have deployed the model you can use the `predict` endpoint to get the emotions most associated with an input: diff --git a/docs/source/en/supported_models.md b/docs/source/en/supported_models.md index 64ecbc1f..aee56971 100644 --- a/docs/source/en/supported_models.md +++ b/docs/source/en/supported_models.md @@ -20,18 +20,21 @@ We are continually expanding our support for other model types and plan to inclu ## Supported embeddings models -Text Embeddings Inference currently supports BERT, CamemBERT, XLM-RoBERTa models with absolute positions and JinaBERT -model with Alibi positions. +Text Embeddings Inference currently supports Nomic, BERT, CamemBERT, XLM-RoBERTa models with absolute positions, JinaBERT +model with Alibi positions and Mistral, Alibaba GTE and Qwen2 models with Rope positions. Below are some examples of the currently supported models: -| MTEB Rank | Model Type | Model ID | -|-----------|-------------|--------------------------------------------------------------------------------------------------| -| 6 | Bert | [WhereIsAI/UAE-Large-V1](https://hf.co/WhereIsAI/UAE-Large-V1) | -| 10 | XLM-RoBERTa | [intfloat/multilingual-e5-large-instruct](https://hf.co/intfloat/multilingual-e5-large-instruct) | -| N/A | NomicBert | [nomic-ai/nomic-embed-text-v1](https://hf.co/nomic-ai/nomic-embed-text-v1) | -| N/A | NomicBert | [nomic-ai/nomic-embed-text-v1.5](https://hf.co/nomic-ai/nomic-embed-text-v1.5) | -| N/A | JinaBERT | [jinaai/jina-embeddings-v2-base-en](https://hf.co/jinaai/jina-embeddings-v2-base-en) | +| MTEB Rank | Model Size | Model Type | Model ID | +|-----------|----------------|-------------|--------------------------------------------------------------------------------------------------| +| 1 | 7B (Very Slow) | Mistral | [Salesforce/SFR-Embedding-2_R](https://hf.co/Salesforce/SFR-Embedding-2_R) | +| 15 | 0.4B | Alibaba GTE | [Alibaba-NLP/gte-large-en-v1.5](Alibaba-NLP/gte-large-en-v1.5) | +| 20 | 0.3B | Bert | [WhereIsAI/UAE-Large-V1](https://hf.co/WhereIsAI/UAE-Large-V1) | +| 24 | 0.5B | XLM-RoBERTa | [intfloat/multilingual-e5-large-instruct](https://hf.co/intfloat/multilingual-e5-large-instruct) | +| N/A | 0.1B | NomicBert | [nomic-ai/nomic-embed-text-v1](https://hf.co/nomic-ai/nomic-embed-text-v1) | +| N/A | 0.1B | NomicBert | [nomic-ai/nomic-embed-text-v1.5](https://hf.co/nomic-ai/nomic-embed-text-v1.5) | +| N/A | 0.1B | JinaBERT | [jinaai/jina-embeddings-v2-base-en](https://hf.co/jinaai/jina-embeddings-v2-base-en) | +| N/A | 0.1B | JinaBERT | [jinaai/jina-embeddings-v2-base-code](https://hf.co/jinaai/jina-embeddings-v2-base-code) | To explore the list of best performing text embeddings models, visit the @@ -63,13 +66,13 @@ Find the appropriate Docker image for your hardware in the following table: | Architecture | Image | |-------------------------------------|--------------------------------------------------------------------------| -| CPU | ghcr.io/huggingface/text-embeddings-inference:cpu-1.2 | +| CPU | ghcr.io/huggingface/text-embeddings-inference:cpu-1.4 | | Volta | NOT SUPPORTED | -| Turing (T4, RTX 2000 series, ...) | ghcr.io/huggingface/text-embeddings-inference:turing-1.2 (experimental) | -| Ampere 80 (A100, A30) | ghcr.io/huggingface/text-embeddings-inference:1.2 | -| Ampere 86 (A10, A40, ...) | ghcr.io/huggingface/text-embeddings-inference:86-1.2 | -| Ada Lovelace (RTX 4000 series, ...) | ghcr.io/huggingface/text-embeddings-inference:89-1.2 | -| Hopper (H100) | ghcr.io/huggingface/text-embeddings-inference:hopper-1.2 (experimental) | +| Turing (T4, RTX 2000 series, ...) | ghcr.io/huggingface/text-embeddings-inference:turing-1.4 (experimental) | +| Ampere 80 (A100, A30) | ghcr.io/huggingface/text-embeddings-inference:1.4 | +| Ampere 86 (A10, A40, ...) | ghcr.io/huggingface/text-embeddings-inference:86-1.4 | +| Ada Lovelace (RTX 4000 series, ...) | ghcr.io/huggingface/text-embeddings-inference:89-1.4 | +| Hopper (H100) | ghcr.io/huggingface/text-embeddings-inference:hopper-1.4 (experimental) | **Warning**: Flash Attention is turned off by default for the Turing image as it suffers from precision issues. You can turn Flash Attention v1 ON by using the `USE_FLASH_ATTENTION=True` environment variable. diff --git a/load_tests/load.js b/load_tests/load.js index b7e4524e..b3705476 100644 --- a/load_tests/load.js +++ b/load_tests/load.js @@ -2,7 +2,7 @@ import {check} from 'k6'; import http from 'k6/http'; import {Trend} from 'k6/metrics'; -const host = __ENV.HOST || '127.0.0.1:8080'; +const host = __ENV.HOST || '127.0.0.1:3000'; const totalTime = new Trend('total_time', true); const tokenizationTIme = new Trend('tokenization_time', true); @@ -27,7 +27,7 @@ export const options = { executor: 'constant-arrival-rate', duration: '30s', preAllocatedVUs: 5000, - rate: 1000, + rate: 10, timeUnit: '1s', gracefulStop: '1s', }, @@ -36,8 +36,9 @@ export const options = { export default function () { const payload = JSON.stringify({ - query: inputs, - texts: [inputs], + inputs: inputs, + // query: inputs, + // texts: [inputs], truncate: true, }); diff --git a/load_tests/load_grpc.js b/load_tests/load_grpc.js index bce6834e..30d2676a 100644 --- a/load_tests/load_grpc.js +++ b/load_tests/load_grpc.js @@ -2,7 +2,7 @@ import {check} from 'k6'; import grpc from 'k6/experimental/grpc'; import {Trend} from 'k6/metrics'; -const host = __ENV.HOST || '127.0.0.1:8080'; +const host = __ENV.HOST || '127.0.0.1:3000'; const totalTime = new Trend('total_time', true); const tokenizationTIme = new Trend('tokenization_time', true); @@ -25,7 +25,7 @@ export const options = { // }, load_test: { executor: 'constant-arrival-rate', - duration: '30s', + duration: '5m', preAllocatedVUs: 5000, rate: 1000, timeUnit: '1s', diff --git a/proto/tei.proto b/proto/tei.proto index 6538e34a..aac6c2ba 100644 --- a/proto/tei.proto +++ b/proto/tei.proto @@ -69,10 +69,17 @@ message Metadata { uint64 inference_time_ns = 6; } +enum TruncationDirection { + TRUNCATION_DIRECTION_RIGHT = 0; + TRUNCATION_DIRECTION_LEFT = 1; +} + message EmbedRequest { string inputs = 1; bool truncate = 2; bool normalize = 3; + TruncationDirection truncation_direction = 4; + optional string prompt_name = 5; } message EmbedResponse { @@ -83,6 +90,8 @@ message EmbedResponse { message EmbedSparseRequest { string inputs = 1; bool truncate = 2; + TruncationDirection truncation_direction = 3; + optional string prompt_name = 4; } message SparseValue { @@ -98,6 +107,8 @@ message EmbedSparseResponse { message EmbedAllRequest { string inputs = 1; bool truncate = 2; + TruncationDirection truncation_direction = 3; + optional string prompt_name = 4; } message TokenEmbedding { @@ -113,12 +124,14 @@ message PredictRequest { string inputs = 1; bool truncate = 2; bool raw_scores = 3; + TruncationDirection truncation_direction = 4; } message PredictPairRequest { repeated string inputs = 1; bool truncate = 2; bool raw_scores = 3; + TruncationDirection truncation_direction = 4; } message Prediction { @@ -137,6 +150,7 @@ message RerankRequest { bool truncate = 3; bool raw_scores = 4; bool return_text = 5; + TruncationDirection truncation_direction = 6; } message RerankStreamRequest{ @@ -147,6 +161,7 @@ message RerankStreamRequest{ bool raw_scores = 4; // The server will only consider the first value bool return_text = 5; + TruncationDirection truncation_direction = 6; } message Rank { @@ -163,6 +178,7 @@ message RerankResponse { message EncodeRequest { string inputs = 1; bool add_special_tokens = 2; + optional string prompt_name = 3; } message SimpleToken { diff --git a/router/Cargo.toml b/router/Cargo.toml index ae10065c..44e56015 100644 --- a/router/Cargo.toml +++ b/router/Cargo.toml @@ -15,37 +15,38 @@ name = "text-embeddings-router" path = "src/main.rs" [dependencies] -anyhow = "1.0.71" +anyhow = { workspace = true } text-embeddings-backend = { path = "../backends", features = ["clap"] } text-embeddings-core = { path = "../core" } -clap = { version = "4.1.4", features = ["derive", "env"] } +clap = { workspace = true } futures = "^0.3" -init-tracing-opentelemetry = { version = "0.14.1", features = ["opentelemetry-otlp"] } -hf-hub = { version = "0.3.0", features = ["tokio"] } +init-tracing-opentelemetry = { version = "0.18.1", features = ["opentelemetry-otlp"] } +hf-hub = { workspace = true } http = "1.0.0" num_cpus = "1.16.0" -metrics = "0.21.0" -metrics-exporter-prometheus = { version = "0.12.1", features = [] } -opentelemetry = { version = "0.20.0", features = ["rt-tokio"] } -opentelemetry-otlp = "0.13.0" -reqwest = { version = "0.11.14", features = [] } -serde = "1.0.152" -serde_json = "1.0.93" -thiserror = "1.0.38" -tokenizers = { version = "0.15.2", default-features=false, features=["onig", "esaxx_fast"] } -tokio = { version = "1.25.0", features = ["rt", "rt-multi-thread", "parking_lot", "signal", "sync"] } -tracing = "0.1.37" -tracing-opentelemetry = "0.21.0" +metrics = { workspace = true } +metrics-exporter-prometheus = { version = "0.15.1", features = [] } +opentelemetry = "0.23.0" +opentelemetry_sdk = { version = "0.23.0", features = ["rt-tokio"] } +opentelemetry-otlp = "0.16.0" +reqwest = { version = "0.12.5", features = [] } +serde = { workspace = true } +serde_json = { workspace = true } +thiserror = { workspace = true } +tokenizers = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } +tracing-opentelemetry = "0.24.0" tracing-subscriber = { version = "0.3.16", features = ["json", "env-filter"] } veil = "0.1.6" -mimalloc = { version = "*", default-features = false } # HTTP dependencies axum = { version = "0.7.4", features = ["json"], optional = true } -axum-tracing-opentelemetry = { version = "0.17.0", optional = true } +axum-tracing-opentelemetry = { version = "0.18.1", optional = true } +base64 = { version = "0.22.1", optional = true } tower-http = { version = "0.5.1", features = ["cors"], optional = true } utoipa = { version = "4.2", features = ["axum_extras"], optional = true } -utoipa-swagger-ui = { version = "6.0", features = ["axum"], optional = true } +utoipa-swagger-ui = { version = "7.1", features = ["axum"], optional = true } # gRPC dependencies async-stream = { version = "0.3.5", optional = true } @@ -55,18 +56,25 @@ tonic-health = { version = "0.11.0", optional = true } tonic-reflection = { version = "0.11.0", optional = true } tokio-stream = { version = "0.1.14", optional = true } +# Malloc trim hack for linux +[target.'cfg(target_os = "linux")'.dependencies] +libc = "0.2.149" +# else use mimalloc +[target.'cfg(not(target_os = "linux"))'.dependencies] +mimalloc = { version = "*", features = ["no_thp"] } + [dev-dependencies] insta = { git = "https://github.com/OlivierDehaene/insta", rev = "f4f98c0410b91fb5a28b10df98e4422955be9c2c", features = ["yaml"] } is_close = "0.1.3" -reqwest = { version = "0.11.22", features = ["json"] } +reqwest = { version = "0.12.5", features = ["json"] } [build-dependencies] vergen = { version = "8.0.0", features = ["build", "git", "gitcl"] } -tonic-build = { version = "0.10.2", optional = true } +tonic-build = { version = "0.11.0", optional = true } [features] default = ["candle", "http"] -http = ["dep:axum", "dep:axum-tracing-opentelemetry", "dep:tower-http", "dep:utoipa", "dep:utoipa-swagger-ui"] +http = ["dep:axum", "dep:axum-tracing-opentelemetry", "dep:base64", "dep:tower-http", "dep:utoipa", "dep:utoipa-swagger-ui"] grpc = ["metrics-exporter-prometheus/http-listener", "dep:prost", "dep:tonic", "dep:tonic-health", "dep:tonic-reflection", "dep:tonic-build", "dep:async-stream", "dep:tokio-stream"] metal = ["text-embeddings-backend/metal"] mkl = ["text-embeddings-backend/mkl"] diff --git a/router/src/grpc/server.rs b/router/src/grpc/server.rs index 913455b3..d3666214 100644 --- a/router/src/grpc/server.rs +++ b/router/src/grpc/server.rs @@ -1,7 +1,7 @@ use crate::grpc::pb::tei::v1::{ EmbedAllRequest, EmbedAllResponse, EmbedSparseRequest, EmbedSparseResponse, EncodeRequest, EncodeResponse, PredictPairRequest, RerankStreamRequest, SimpleToken, SparseValue, - TokenEmbedding, + TokenEmbedding, TruncationDirection, }; use crate::grpc::{ DecodeRequest, DecodeResponse, EmbedRequest, EmbedResponse, InfoRequest, InfoResponse, @@ -80,9 +80,17 @@ impl TextEmbeddingsService { let start_time = Instant::now(); let compute_chars = request.inputs.chars().count(); + let truncation_direction = convert_truncation_direction(request.truncation_direction); let response = self .infer - .embed_pooled(request.inputs, request.truncate, request.normalize, permit) + .embed_pooled( + request.inputs, + request.truncate, + truncation_direction, + request.prompt_name, + request.normalize, + permit, + ) .await .map_err(ErrorResponse::from)?; @@ -128,9 +136,16 @@ impl TextEmbeddingsService { let start_time = Instant::now(); let compute_chars = request.inputs.chars().count(); + let truncation_direction = convert_truncation_direction(request.truncation_direction); let response = self .infer - .embed_sparse(request.inputs, request.truncate, permit) + .embed_sparse( + request.inputs, + request.truncate, + truncation_direction, + request.prompt_name, + permit, + ) .await .map_err(ErrorResponse::from)?; @@ -187,9 +202,16 @@ impl TextEmbeddingsService { let start_time = Instant::now(); let compute_chars = request.inputs.chars().count(); + let truncation_direction = convert_truncation_direction(request.truncation_direction); let response = self .infer - .embed_all(request.inputs, request.truncate, permit) + .embed_all( + request.inputs, + request.truncate, + truncation_direction, + request.prompt_name, + permit, + ) .await .map_err(ErrorResponse::from)?; @@ -236,6 +258,7 @@ impl TextEmbeddingsService { &self, inputs: I, truncate: bool, + truncation_direction: tokenizers::TruncationDirection, raw_scores: bool, permit: OwnedSemaphorePermit, ) -> Result<(PredictResponse, ResponseMetadata), Status> { @@ -251,7 +274,7 @@ impl TextEmbeddingsService { let response = self .infer - .predict(inputs, truncate, raw_scores, permit) + .predict(inputs, truncate, truncation_direction, raw_scores, permit) .await .map_err(ErrorResponse::from)?; @@ -306,11 +329,17 @@ impl TextEmbeddingsService { #[instrument(skip_all)] async fn tokenize_inner(&self, request: EncodeRequest) -> Result { let inputs = request.inputs; - let encoding = self + let (encoded_inputs, encoding) = self .infer - .tokenize(inputs.clone(), request.add_special_tokens) + .tokenize( + inputs.clone(), + request.add_special_tokens, + request.prompt_name, + ) .await .map_err(ErrorResponse::from)?; + let inputs = encoded_inputs.unwrap_or(inputs); + let tokens: Vec = encoding .get_ids() .iter() @@ -569,7 +598,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -580,7 +610,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { let (response, metadata) = self.embed_pooled_inner(request, permit).await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -609,7 +640,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -620,7 +652,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { let (response, metadata) = self.embed_sparse_inner(request, permit).await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -649,7 +682,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -660,7 +694,8 @@ impl grpc::embed_server::Embed for TextEmbeddingsService { let (response, metadata) = self.embed_all_inner(request, permit).await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -693,7 +728,8 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let permit = self .infer @@ -701,12 +737,20 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { .map_err(ErrorResponse::from)?; let request = request.into_inner(); + let truncation_direction = convert_truncation_direction(request.truncation_direction); let (response, metadata) = self - .predict_inner(request.inputs, request.truncate, request.raw_scores, permit) + .predict_inner( + request.inputs, + request.truncate, + truncation_direction, + request.raw_scores, + permit, + ) .await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -719,7 +763,8 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { &self, request: Request, ) -> Result, Status> { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let request = request.into_inner(); let mut inputs = request.inputs; @@ -743,12 +788,20 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { .try_acquire_permit() .map_err(ErrorResponse::from)?; + let truncation_direction = convert_truncation_direction(request.truncation_direction); let (response, metadata) = self - .predict_inner(inputs, request.truncate, request.raw_scores, permit) + .predict_inner( + inputs, + request.truncate, + truncation_direction, + request.raw_scores, + permit, + ) .await?; let headers = HeaderMap::from(metadata); - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); Ok(Response::from_parts( MetadataMap::from_headers(headers), @@ -767,8 +820,15 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { // Clone for move below let clone = self.clone(); let function = |req: PredictRequest, permit: OwnedSemaphorePermit| async move { + let truncation_direction = convert_truncation_direction(req.truncation_direction); clone - .predict_inner(req.inputs, req.truncate, req.raw_scores, permit) + .predict_inner( + req.inputs, + req.truncate, + truncation_direction, + req.raw_scores, + permit, + ) .await }; @@ -800,8 +860,15 @@ impl grpc::predict_server::Predict for TextEmbeddingsService { } }; + let truncation_direction = convert_truncation_direction(req.truncation_direction); clone - .predict_inner(inputs, req.truncate, req.raw_scores, permit) + .predict_inner( + inputs, + req.truncate, + truncation_direction, + req.raw_scores, + permit, + ) .await }; @@ -838,20 +905,23 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } match &self.info.model_type { ModelType::Classifier(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "model is not a re-ranker model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) } ModelType::Reranker(_) => Ok(()), ModelType::Embedding(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "model is not a classifier model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) @@ -862,12 +932,19 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { let rerank_inner = move |query: String, text: String, truncate: bool, + truncation_direction: tokenizers::TruncationDirection, raw_scores: bool, infer: Infer| async move { let permit = infer.acquire_permit().await; let response = infer - .predict((query, text), truncate, raw_scores, permit) + .predict( + (query, text), + truncate, + truncation_direction, + raw_scores, + permit, + ) .await .map_err(ErrorResponse::from)?; @@ -882,7 +959,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { )) }; - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let batch_size = request.texts.len(); if batch_size > self.info.max_client_batch_size { @@ -895,13 +973,15 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } let mut futures = Vec::with_capacity(batch_size); let query_chars = request.query.chars().count(); let mut total_compute_chars = query_chars * batch_size; + let truncation_direction = convert_truncation_direction(request.truncation_direction); for text in &request.texts { total_compute_chars += text.chars().count(); @@ -910,6 +990,7 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { request.query.clone(), text.clone(), request.truncate, + truncation_direction, request.raw_scores, local_infer, )) @@ -958,7 +1039,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); let response_metadata = ResponseMetadata::new( total_compute_chars, @@ -1008,14 +1090,16 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { // Check model type match &self.info.model_type { ModelType::Classifier(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "model is not a re-ranker model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) } ModelType::Reranker(_) => Ok(()), ModelType::Embedding(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "model is not a classifier model".to_string(); tracing::error!("{message}"); Err(Status::new(Code::FailedPrecondition, message)) @@ -1027,11 +1111,18 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { query: String, text: String, truncate: bool, + truncation_direction: tokenizers::TruncationDirection, raw_scores: bool, infer: Infer, permit: OwnedSemaphorePermit| async move { let response = infer - .predict((query, text.clone()), truncate, raw_scores, permit) + .predict( + (query, text.clone()), + truncate, + truncation_direction, + raw_scores, + permit, + ) .await .map_err(ErrorResponse::from)?; @@ -1048,14 +1139,22 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { )) }; - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let mut request_stream = request.into_inner(); // Create bounded channel to have an upper bound of spawned tasks // We will have at most `max_parallel_stream_requests` messages from this stream in the queue let (rerank_sender, mut rerank_receiver) = mpsc::channel::<( - (usize, String, String, bool, bool), + ( + usize, + String, + String, + bool, + tokenizers::TruncationDirection, + bool, + ), oneshot::Sender< Result<(usize, usize, Duration, Duration, Duration, f32, String), ErrorResponse>, >, @@ -1066,8 +1165,10 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { // Background task that uses the bounded channel tokio::spawn(async move { - while let Some(((index, query, text, truncate, raw_scores), mut sender)) = - rerank_receiver.recv().await + while let Some(( + (index, query, text, truncate, truncation_direction, raw_scores), + mut sender, + )) = rerank_receiver.recv().await { // Wait on permit before spawning the task to avoid creating more tasks than needed let permit = local_infer.acquire_permit().await; @@ -1079,7 +1180,7 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { tokio::spawn(async move { // Select on closed to cancel work if the stream was closed tokio::select! { - result = rerank_inner(index, query, text, truncate, raw_scores, task_infer, permit) => { + result = rerank_inner(index, query, text, truncate, truncation_direction, raw_scores, task_infer, permit) => { let _ = sender.send(result); } _ = sender.closed() => {} @@ -1118,6 +1219,7 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { total_compute_chars += request.query.chars().count(); total_compute_chars += request.text.chars().count(); + let truncation_direction = convert_truncation_direction(request.truncation_direction); rerank_sender .send(( ( @@ -1125,6 +1227,7 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { request.query, request.text, request.truncate, + truncation_direction, raw_scores.unwrap(), ), result_sender, @@ -1186,7 +1289,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { error: message, error_type: ErrorType::Backend, }; - metrics::increment_counter!("te_request_failure", "err" => "missing_values"); + let counter = metrics::counter!("te_request_failure", "err" => "missing_values"); + counter.increment(1); Err(err)?; } @@ -1196,7 +1300,8 @@ impl grpc::rerank_server::Rerank for TextEmbeddingsService { let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); let response_metadata = ResponseMetadata::new( total_compute_chars, @@ -1434,3 +1539,10 @@ impl From for Status { Status::new(code, value.error) } } + +fn convert_truncation_direction(value: i32) -> tokenizers::TruncationDirection { + match TruncationDirection::try_from(value).expect("Unexpected enum value") { + TruncationDirection::Right => tokenizers::TruncationDirection::Right, + TruncationDirection::Left => tokenizers::TruncationDirection::Left, + } +} diff --git a/router/src/http/server.rs b/router/src/http/server.rs index 6c48ad3e..8f57fbb2 100644 --- a/router/src/http/server.rs +++ b/router/src/http/server.rs @@ -1,11 +1,12 @@ /// HTTP Server logic use crate::http::types::{ DecodeRequest, DecodeResponse, EmbedAllRequest, EmbedAllResponse, EmbedRequest, EmbedResponse, - EmbedSparseRequest, EmbedSparseResponse, Input, InputIds, InputType, OpenAICompatEmbedding, - OpenAICompatErrorResponse, OpenAICompatRequest, OpenAICompatResponse, OpenAICompatUsage, - PredictInput, PredictRequest, PredictResponse, Prediction, Rank, RerankRequest, RerankResponse, - Sequence, SimpleToken, SparseValue, TokenizeInput, TokenizeRequest, TokenizeResponse, - VertexPrediction, VertexRequest, VertexResponse, + EmbedSparseRequest, EmbedSparseResponse, Embedding, EncodingFormat, Input, InputIds, InputType, + OpenAICompatEmbedding, OpenAICompatErrorResponse, OpenAICompatRequest, OpenAICompatResponse, + OpenAICompatUsage, PredictInput, PredictRequest, PredictResponse, Prediction, Rank, + RerankRequest, RerankResponse, Sequence, SimpleToken, SparseValue, TokenizeInput, + TokenizeRequest, TokenizeResponse, TruncationDirection, VertexPrediction, VertexRequest, + VertexResponse, }; use crate::{ shutdown, ClassifierModel, EmbeddingModel, ErrorResponse, ErrorType, Info, ModelType, @@ -19,6 +20,8 @@ use axum::http::{Method, StatusCode}; use axum::routing::{get, post}; use axum::{http, Json, Router}; use axum_tracing_opentelemetry::middleware::OtelAxumLayer; +use base64::prelude::BASE64_STANDARD; +use base64::Engine; use futures::future::join_all; use futures::FutureExt; use http::header::AUTHORIZATION; @@ -103,7 +106,6 @@ async fn predict( // Closure for predict let predict_inner = move |inputs: Sequence, truncate: bool, - raw_scores: bool, infer: Infer, info: Info, permit: Option| async move { @@ -113,7 +115,13 @@ async fn predict( }; let response = infer - .predict(inputs, truncate, raw_scores, permit) + .predict( + inputs, + truncate, + req.truncation_direction.into(), + req.raw_scores, + permit, + ) .await .map_err(ErrorResponse::from)?; @@ -155,21 +163,16 @@ async fn predict( let (response, metadata) = match req.inputs { PredictInput::Single(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = inputs.count_chars(); let permit = infer.try_acquire_permit().map_err(ErrorResponse::from)?; - let (prompt_tokens, tokenization, queue, inference, predictions) = predict_inner( - inputs, - truncate, - req.raw_scores, - infer.0, - info.0, - Some(permit), - ) - .await?; + let (prompt_tokens, tokenization, queue, inference, predictions) = + predict_inner(inputs, truncate, infer.0, info.0, Some(permit)).await?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( PredictResponse::Single(predictions), @@ -184,7 +187,8 @@ async fn predict( ) } PredictInput::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let batch_size = inputs.len(); if batch_size > info.max_client_batch_size { @@ -197,7 +201,8 @@ async fn predict( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -211,7 +216,6 @@ async fn predict( futures.push(predict_inner( input, truncate, - req.raw_scores, local_infer.0, local_info.0, None, @@ -237,7 +241,8 @@ async fn predict( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( PredictResponse::Batch(predictions), @@ -301,14 +306,16 @@ async fn rerank( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } match &info.model_type { ModelType::Reranker(_) => Ok(()), ModelType::Classifier(_) | ModelType::Embedding(_) => { - metrics::increment_counter!("te_request_failure", "err" => "model_type"); + let counter = metrics::counter!("te_request_failure", "err" => "model_type"); + counter.increment(1); let message = "model is not a re-ranker model".to_string(); Err(TextEmbeddingsError::Backend(BackendError::Inference( message, @@ -321,15 +328,17 @@ async fn rerank( })?; // Closure for rerank - let rerank_inner = move |query: String, - text: String, - truncate: bool, - raw_scores: bool, - infer: Infer| async move { + let rerank_inner = move |query: String, text: String, truncate: bool, infer: Infer| async move { let permit = infer.acquire_permit().await; let response = infer - .predict((query, text), truncate, raw_scores, permit) + .predict( + (query, text), + truncate, + req.truncation_direction.into(), + req.raw_scores, + permit, + ) .await .map_err(ErrorResponse::from)?; @@ -347,7 +356,8 @@ async fn rerank( let truncate = req.truncate.unwrap_or(info.auto_truncate); let (response, metadata) = { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); let batch_size = req.texts.len(); if batch_size > info.max_client_batch_size { @@ -360,7 +370,8 @@ async fn rerank( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -375,7 +386,6 @@ async fn rerank( req.query.clone(), text.clone(), truncate, - req.raw_scores, local_infer.0, )) } @@ -419,7 +429,8 @@ async fn rerank( let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( RerankResponse(ranks), @@ -478,17 +489,26 @@ async fn embed( let (response, metadata) = match req.inputs { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); let permit = infer.try_acquire_permit().map_err(ErrorResponse::from)?; let response = infer - .embed_pooled(input, truncate, req.normalize, permit) + .embed_pooled( + input, + truncate, + req.truncation_direction.into(), + req.prompt_name, + req.normalize, + permit, + ) .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( EmbedResponse(vec![response.results]), @@ -503,7 +523,8 @@ async fn embed( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -512,7 +533,8 @@ async fn embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -527,7 +549,8 @@ async fn embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -538,10 +561,18 @@ async fn embed( compute_chars += input.count_chars(); let local_infer = infer.clone(); + let prompt_name = req.prompt_name.clone(); futures.push(async move { let permit = local_infer.acquire_permit().await; local_infer - .embed_pooled(input, truncate, req.normalize, permit) + .embed_pooled( + input, + truncate, + req.truncation_direction.into(), + prompt_name, + req.normalize, + permit, + ) .await }) } @@ -566,7 +597,8 @@ async fn embed( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( EmbedResponse(embeddings), @@ -635,17 +667,25 @@ async fn embed_sparse( let (response, metadata) = match req.inputs { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); let permit = infer.try_acquire_permit().map_err(ErrorResponse::from)?; let response = infer - .embed_sparse(input, truncate, permit) + .embed_sparse( + input, + truncate, + req.truncation_direction.into(), + req.prompt_name, + permit, + ) .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( EmbedSparseResponse(vec![sparsify(response.results)]), @@ -660,7 +700,8 @@ async fn embed_sparse( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -669,7 +710,8 @@ async fn embed_sparse( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -684,7 +726,8 @@ async fn embed_sparse( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -695,9 +738,19 @@ async fn embed_sparse( compute_chars += input.count_chars(); let local_infer = infer.clone(); + let prompt_name = req.prompt_name.clone(); futures.push(async move { let permit = local_infer.acquire_permit().await; - let response = local_infer.embed_sparse(input, truncate, permit).await?; + let response = local_infer + .embed_sparse( + input, + truncate, + req.truncation_direction.into(), + prompt_name, + permit, + ) + .await?; + Ok((sparsify(response.results), response.metadata)) }) } @@ -722,7 +775,8 @@ async fn embed_sparse( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( EmbedSparseResponse(embeddings), @@ -783,17 +837,25 @@ async fn embed_all( let (response, metadata) = match req.inputs { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); let permit = infer.try_acquire_permit().map_err(ErrorResponse::from)?; let response = infer - .embed_all(input, truncate, permit) + .embed_all( + input, + truncate, + req.truncation_direction.into(), + req.prompt_name, + permit, + ) .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); ( EmbedAllResponse(vec![response.results]), @@ -808,7 +870,8 @@ async fn embed_all( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -817,7 +880,8 @@ async fn embed_all( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -832,7 +896,8 @@ async fn embed_all( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -843,9 +908,18 @@ async fn embed_all( compute_chars += input.count_chars(); let local_infer = infer.clone(); + let prompt_name = req.prompt_name.clone(); futures.push(async move { let permit = local_infer.acquire_permit().await; - local_infer.embed_all(input, truncate, permit).await + local_infer + .embed_all( + input, + truncate, + req.truncation_direction.into(), + prompt_name, + permit, + ) + .await }) } let results = join_all(futures) @@ -869,7 +943,8 @@ async fn embed_all( } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( EmbedAllResponse(embeddings), @@ -923,6 +998,21 @@ async fn openai_embed( Json(req): Json, ) -> Result<(HeaderMap, Json), (StatusCode, Json)> { + let encode_embedding = |array: Vec| { + match req.encoding_format { + EncodingFormat::Float => Embedding::Float(array), + EncodingFormat::Base64 => { + // Unsafe is fine here since we do not violate memory ownership: bytes + // is only used in this scope and we return an owned string + let bytes = unsafe { + std::slice::from_raw_parts(array.as_ptr() as *const u8, array.len() * 4) + }; + + Embedding::Base64(BASE64_STANDARD.encode(bytes)) + } + } + }; + let span = tracing::Span::current(); let start_time = Instant::now(); @@ -930,22 +1020,32 @@ async fn openai_embed( let (embeddings, metadata) = match req.input { Input::Single(input) => { - metrics::increment_counter!("te_request_count", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); let compute_chars = input.count_chars(); let permit = infer.try_acquire_permit().map_err(ErrorResponse::from)?; let response = infer - .embed_pooled(input, truncate, true, permit) + .embed_pooled( + input, + truncate, + tokenizers::TruncationDirection::Right, + None, + true, + permit, + ) .await .map_err(ErrorResponse::from)?; - metrics::increment_counter!("te_request_success", "method" => "single"); + let counter = metrics::counter!("te_request_count", "method" => "single"); + counter.increment(1); + let embedding = encode_embedding(response.results); ( vec![OpenAICompatEmbedding { object: "embedding", - embedding: response.results, + embedding, index: 0, }], ResponseMetadata::new( @@ -959,7 +1059,8 @@ async fn openai_embed( ) } Input::Batch(inputs) => { - metrics::increment_counter!("te_request_count", "method" => "batch"); + let counter = metrics::counter!("te_request_count", "method" => "batch"); + counter.increment(1); if inputs.is_empty() { let message = "`inputs` cannot be empty".to_string(); @@ -968,7 +1069,8 @@ async fn openai_embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -983,7 +1085,8 @@ async fn openai_embed( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -997,7 +1100,14 @@ async fn openai_embed( futures.push(async move { let permit = local_infer.acquire_permit().await; local_infer - .embed_pooled(input, truncate, true, permit) + .embed_pooled( + input, + truncate, + tokenizers::TruncationDirection::Right, + None, + true, + permit, + ) .await }) } @@ -1018,15 +1128,17 @@ async fn openai_embed( total_queue_time += r.metadata.queue.as_nanos() as u64; total_inference_time += r.metadata.inference.as_nanos() as u64; total_compute_tokens += r.metadata.prompt_tokens; + let embedding = encode_embedding(r.results); embeddings.push(OpenAICompatEmbedding { object: "embedding", - embedding: r.results, + embedding, index: i, }); } let batch_size = batch_size as u64; - metrics::increment_counter!("te_request_success", "method" => "batch"); + let counter = metrics::counter!("te_request_success", "method" => "batch"); + counter.increment(1); ( embeddings, @@ -1080,11 +1192,16 @@ async fn tokenize( info: Extension, Json(req): Json, ) -> Result, (StatusCode, Json)> { - let tokenize_inner = move |input: String, add_special_tokens: bool, infer: Infer| async move { - let encoding = infer - .tokenize(input.clone(), add_special_tokens) + let tokenize_inner = move |input: String, + add_special_tokens: bool, + prompt_name: Option, + infer: Infer| async move { + let (encoded_input, encoding) = infer + .tokenize(input.clone(), add_special_tokens, prompt_name) .await .map_err(ErrorResponse::from)?; + let input = encoded_input.unwrap_or(input); + let tokens: Vec = encoding .get_ids() .iter() @@ -1119,7 +1236,7 @@ async fn tokenize( let tokens = match req.inputs { TokenizeInput::Single(input) => { - vec![tokenize_inner(input, req.add_special_tokens, infer.0).await?] + vec![tokenize_inner(input, req.add_special_tokens, req.prompt_name, infer.0).await?] } TokenizeInput::Batch(inputs) => { if inputs.is_empty() { @@ -1129,7 +1246,8 @@ async fn tokenize( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -1144,7 +1262,8 @@ async fn tokenize( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -1153,6 +1272,7 @@ async fn tokenize( futures.push(tokenize_inner( input, req.add_special_tokens, + req.prompt_name.clone(), infer.0.clone(), )); } @@ -1202,7 +1322,8 @@ async fn decode( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "validation"); + let counter = metrics::counter!("te_request_failure", "err" => "validation"); + counter.increment(1); Err(err)?; } @@ -1217,7 +1338,8 @@ async fn decode( error: message, error_type: ErrorType::Validation, }; - metrics::increment_counter!("te_request_failure", "err" => "batch_size"); + let counter = metrics::counter!("te_request_failure", "err" => "batch_size"); + counter.increment(1); Err(err)?; } @@ -1362,6 +1484,8 @@ pub async fn run( Info, ModelType, ClassifierModel, + Embedding, + EncodingFormat, EmbeddingModel, PredictRequest, Prediction, @@ -1385,6 +1509,7 @@ pub async fn run( TokenizeInput, TokenizeRequest, TokenizeResponse, + TruncationDirection, SimpleToken, InputType, InputIds, @@ -1410,11 +1535,15 @@ pub async fn run( // map to go inside the option and then map to parse from String to HeaderValue // Finally, convert to AllowOrigin let allow_origin: Option = cors_allow_origin.map(|cors_allow_origin| { - AllowOrigin::list( - cors_allow_origin - .into_iter() - .map(|origin| origin.parse::().unwrap()), - ) + if cors_allow_origin.iter().any(|origin| origin == "*") { + AllowOrigin::any() + } else { + AllowOrigin::list( + cors_allow_origin + .into_iter() + .map(|origin| origin.parse::().unwrap()), + ) + } }); let prom_handle = prom_builder @@ -1451,7 +1580,6 @@ pub async fn run( // Create router let mut app = Router::new() - .layer(DefaultBodyLimit::max(payload_limit)) .merge(SwaggerUi::new("/docs").url("/api-doc/openapi.json", doc)) // Base routes .route("/info", get(get_model_info)) @@ -1474,7 +1602,9 @@ pub async fn run( // AWS Sagemaker health route .route("/ping", get(health)) // Prometheus metrics route - .route("/metrics", get(metrics)); + .route("/metrics", get(metrics)) + // Update payload limit + .layer(DefaultBodyLimit::max(payload_limit)); #[cfg(feature = "google")] { @@ -1548,7 +1678,9 @@ pub async fn run( } // Run server - let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); + let listener = tokio::net::TcpListener::bind(&addr) + .await + .context(format!("Could not bind TCP Listener on {addr}"))?; tracing::info!("Starting HTTP server: {}", &addr); tracing::info!("Ready"); diff --git a/router/src/http/types.rs b/router/src/http/types.rs index be514d40..4414ecb4 100644 --- a/router/src/http/types.rs +++ b/router/src/http/types.rs @@ -193,12 +193,31 @@ impl<'__s> ToSchema<'__s> for PredictInput { } } +#[derive(Debug, Clone, Copy, PartialEq, Deserialize, ToSchema, Eq, Default)] +pub(crate) enum TruncationDirection { + Left, + #[default] + Right, +} + +impl From for tokenizers::TruncationDirection { + fn from(value: TruncationDirection) -> Self { + match value { + TruncationDirection::Left => Self::Left, + TruncationDirection::Right => Self::Right, + } + } +} + #[derive(Deserialize, ToSchema)] pub(crate) struct PredictRequest { pub inputs: PredictInput, #[schema(default = "false", example = "false", nullable = true)] pub truncate: Option, #[serde(default)] + #[schema(default = "right", example = "right")] + pub truncation_direction: TruncationDirection, + #[serde(default)] #[schema(default = "false", example = "false")] pub raw_scores: bool, } @@ -228,6 +247,9 @@ pub(crate) struct RerankRequest { #[schema(default = "false", example = "false", nullable = true)] pub truncate: Option, #[serde(default)] + #[schema(default = "right", example = "right")] + pub truncation_direction: TruncationDirection, + #[serde(default)] #[schema(default = "false", example = "false")] pub raw_scores: bool, #[serde(default)] @@ -255,6 +277,7 @@ pub(crate) enum InputType { String(String), Ids(Vec), } + impl InputType { pub(crate) fn count_chars(&self) -> usize { match self { @@ -263,6 +286,7 @@ impl InputType { } } } + impl From for EncodingInput { fn from(value: InputType) -> Self { match value { @@ -271,6 +295,7 @@ impl From for EncodingInput { } } } + #[derive(Deserialize, ToSchema)] #[serde(untagged)] pub(crate) enum Input { @@ -278,6 +303,14 @@ pub(crate) enum Input { Batch(Vec), } +#[derive(Deserialize, ToSchema, Default)] +#[serde(rename_all = "snake_case")] +pub(crate) enum EncodingFormat { + #[default] + Float, + Base64, +} + #[derive(Deserialize, ToSchema)] pub(crate) struct OpenAICompatRequest { pub input: Input, @@ -287,6 +320,16 @@ pub(crate) struct OpenAICompatRequest { #[allow(dead_code)] #[schema(nullable = true, example = "null")] pub user: Option, + #[schema(default = "float", example = "float")] + #[serde(default)] + pub encoding_format: EncodingFormat, +} + +#[derive(Serialize, ToSchema)] +#[serde(untagged)] +pub(crate) enum Embedding { + Float(Vec), + Base64(String), } #[derive(Serialize, ToSchema)] @@ -294,7 +337,7 @@ pub(crate) struct OpenAICompatEmbedding { #[schema(example = "embedding")] pub object: &'static str, #[schema(example = json!([0.0, 1.0, 2.0]))] - pub embedding: Vec, + pub embedding: Embedding, #[schema(example = "0")] pub index: usize, } @@ -323,6 +366,20 @@ pub(crate) struct EmbedRequest { #[serde(default)] #[schema(default = "false", example = "false", nullable = true)] pub truncate: Option, + #[serde(default)] + #[schema(default = "right", example = "right")] + pub truncation_direction: TruncationDirection, + /// The name of the prompt that should be used by for encoding. If not set, no prompt + /// will be applied. + /// + /// Must be a key in the `Sentence Transformers` configuration `prompts` dictionary. + /// + /// For example if ``prompt_name`` is "query" and the ``prompts`` is {"query": "query: ", ...}, + /// then the sentence "What is the capital of France?" will be encoded as + /// "query: What is the capital of France?" because the prompt text will be prepended before + /// any text to encode. + #[schema(default = "null", example = "null", nullable = true)] + pub prompt_name: Option, #[serde(default = "default_normalize")] #[schema(default = "true", example = "true")] pub normalize: bool, @@ -342,6 +399,20 @@ pub(crate) struct EmbedSparseRequest { #[serde(default)] #[schema(default = "false", example = "false", nullable = true)] pub truncate: Option, + #[serde(default)] + #[schema(default = "right", example = "right")] + pub truncation_direction: TruncationDirection, + /// The name of the prompt that should be used by for encoding. If not set, no prompt + /// will be applied. + /// + /// Must be a key in the `Sentence Transformers` configuration `prompts` dictionary. + /// + /// For example if ``prompt_name`` is "query" and the ``prompts`` is {"query": "query: ", ...}, + /// then the sentence "What is the capital of France?" will be encoded as + /// "query: What is the capital of France?" because the prompt text will be prepended before + /// any text to encode. + #[schema(default = "null", example = "null", nullable = true)] + pub prompt_name: Option, } #[derive(Serialize, ToSchema)] @@ -359,6 +430,20 @@ pub(crate) struct EmbedAllRequest { #[serde(default)] #[schema(default = "false", example = "false", nullable = true)] pub truncate: Option, + #[serde(default)] + #[schema(default = "right", example = "right")] + pub truncation_direction: TruncationDirection, + /// The name of the prompt that should be used by for encoding. If not set, no prompt + /// will be applied. + /// + /// Must be a key in the `Sentence Transformers` configuration `prompts` dictionary. + /// + /// For example if ``prompt_name`` is "query" and the ``prompts`` is {"query": "query: ", ...}, + /// then the sentence "What is the capital of France?" will be encoded as + /// "query: What is the capital of France?" because the prompt text will be prepended before + /// any text to encode. + #[schema(default = "null", example = "null", nullable = true)] + pub prompt_name: Option, } #[derive(Serialize, ToSchema)] @@ -386,6 +471,17 @@ pub(crate) struct TokenizeRequest { #[serde(default = "default_add_special_tokens")] #[schema(default = "true", example = "true")] pub add_special_tokens: bool, + /// The name of the prompt that should be used by for encoding. If not set, no prompt + /// will be applied. + /// + /// Must be a key in the `Sentence Transformers` configuration `prompts` dictionary. + /// + /// For example if ``prompt_name`` is "query" and the ``prompts`` is {"query": "query: ", ...}, + /// then the sentence "What is the capital of France?" will be encoded as + /// "query: What is the capital of France?" because the prompt text will be prepended before + /// any text to encode. + #[schema(default = "null", example = "null", nullable = true)] + pub prompt_name: Option, } fn default_add_special_tokens() -> bool { diff --git a/router/src/lib.rs b/router/src/lib.rs index 177dde5a..411f5aeb 100644 --- a/router/src/lib.rs +++ b/router/src/lib.rs @@ -26,15 +26,18 @@ use std::fs; use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::path::Path; use std::time::{Duration, Instant}; -use text_embeddings_backend::DType; +use text_embeddings_backend::{DType, Pool}; use text_embeddings_core::download::{ - download_artifacts, download_pool_config, download_st_config, ST_CONFIG_NAMES, + download_artifacts, download_new_st_config, download_pool_config, download_st_config, + ST_CONFIG_NAMES, }; use text_embeddings_core::infer::Infer; use text_embeddings_core::queue::Queue; use text_embeddings_core::tokenization::Tokenization; use text_embeddings_core::TextEmbeddingsError; -use tokenizers::Tokenizer; +use tokenizers::processors::sequence::Sequence; +use tokenizers::processors::template::TemplateProcessing; +use tokenizers::{PostProcessorWrapper, Tokenizer}; use tracing::Span; pub use logging::init_logging; @@ -52,6 +55,8 @@ pub async fn run( max_batch_requests: Option, max_client_batch_size: usize, auto_truncate: bool, + default_prompt: Option, + default_prompt_name: Option, hf_api_token: Option, hostname: Option, port: u16, @@ -60,6 +65,7 @@ pub async fn run( payload_limit: usize, api_key: Option, otlp_endpoint: Option, + otlp_service_name: String, cors_allow_origin: Option>, ) -> Result<()> { let model_id_path = Path::new(&model_id); @@ -90,6 +96,8 @@ pub async fn run( // Download sentence transformers config let _ = download_st_config(&api_repo).await; + // Download new sentence transformers config + let _ = download_new_st_config(&api_repo).await; // Download model from the Hub download_artifacts(&api_repo) @@ -138,6 +146,28 @@ pub async fn run( "tokenizer.json not found. text-embeddings-inference only supports fast tokenizers", ); tokenizer.with_padding(None); + // Qwen2 updates the post processor manually instead of into the tokenizer.json... + // https://huggingface.co/Alibaba-NLP/gte-Qwen2-1.5B-instruct/blob/main/tokenization_qwen.py#L246 + if config.model_type == "qwen2" { + let template = TemplateProcessing::builder() + .try_single("$A:0 <|endoftext|>:0") + .unwrap() + .try_pair("$A:0 <|endoftext|>:0 $B:1 <|endoftext|>:1") + .unwrap() + .special_tokens(vec![("<|endoftext|>", 151643)]) + .build() + .unwrap(); + match tokenizer.get_post_processor() { + None => tokenizer.with_post_processor(template), + Some(post_processor) => { + let post_processor = Sequence::new(vec![ + post_processor.clone(), + PostProcessorWrapper::Template(template), + ]); + tokenizer.with_post_processor(post_processor) + } + }; + } // Position IDs offset. Used for Roberta and camembert. let position_offset = if &config.model_type == "xlm-roberta" @@ -170,12 +200,38 @@ pub async fn run( let tokenization_workers = tokenization_workers.unwrap_or_else(num_cpus::get_physical); + // Try to load new ST Config + let mut new_st_config: Option = None; + let config_path = model_root.join("config_sentence_transformers.json"); + if let Ok(config) = fs::read_to_string(config_path) { + new_st_config = Some( + serde_json::from_str(&config) + .context("Failed to parse `config_sentence_transformers.json`")?, + ); + } + let prompts = new_st_config.and_then(|c| c.prompts); + let default_prompt = if let Some(default_prompt_name) = default_prompt_name.as_ref() { + match &prompts { + None => { + anyhow::bail!(format!("`default-prompt-name` is set to `{default_prompt_name}` but no prompts were found in the Sentence Transformers configuration")); + } + Some(prompts) if !prompts.contains_key(default_prompt_name) => { + anyhow::bail!(format!("`default-prompt-name` is set to `{default_prompt_name}` but it was not found in the Sentence Transformers prompts. Available prompts: {:?}", prompts.keys())); + } + Some(prompts) => prompts.get(default_prompt_name).cloned(), + } + } else { + default_prompt + }; + // Tokenization logic let tokenization = Tokenization::new( tokenization_workers, tokenizer, max_input_length, position_offset, + default_prompt, + prompts, ); // Get dtype @@ -198,6 +254,7 @@ pub async fn run( backend_model_type, uds_path.unwrap_or("/tmp/text-embeddings-inference-server".to_string()), otlp_endpoint.clone(), + otlp_service_name.clone(), ) .context("Could not create backend")?; backend @@ -216,9 +273,15 @@ pub async fn run( .or(max_batch_requests); // Warmup - backend.warmup(max_input_length as u32, max_batch_tokens as u32, max_batch_requests).await.context("Error when doing warmup")?; - - + if !backend.padded_model { + tracing::info!("Warming up model"); + backend + .warmup(max_input_length as u32, + max_batch_tokens as u32, + max_batch_requests) + .await + .context("Error when doing warmup")?; + } // Queue logic let queue = Queue::new( backend.padded_model, @@ -292,7 +355,7 @@ pub async fn run( api_key, cors_allow_origin, ) - .await?; + .await } #[cfg(feature = "grpc")] @@ -300,10 +363,8 @@ pub async fn run( // cors_allow_origin and payload_limit are not used for gRPC servers let _ = cors_allow_origin; let _ = payload_limit; - grpc::server::run(infer, info, addr, prom_builder, api_key).await?; + grpc::server::run(infer, info, addr, prom_builder, api_key).await } - - Ok(()) } fn get_backend_model_type( @@ -341,13 +402,7 @@ fn get_backend_model_type( let config = fs::read_to_string(config_path).context("The `--pooling` arg is not set and we could not find a pooling configuration (`1_Pooling/config.json`) for this model.")?; let config: PoolConfig = serde_json::from_str(&config).context("Failed to parse `1_Pooling/config.json`")?; - if config.pooling_mode_cls_token { - text_embeddings_backend::Pool::Cls - } else if config.pooling_mode_mean_tokens { - text_embeddings_backend::Pool::Mean - } else { - return Err(anyhow!("Pooling config {config:?} is not supported")); - } + Pool::try_from(config)? } }; Ok(text_embeddings_backend::ModelType::Embedding(pool)) @@ -369,8 +424,25 @@ pub struct ModelConfig { pub struct PoolConfig { pooling_mode_cls_token: bool, pooling_mode_mean_tokens: bool, - pooling_mode_max_tokens: bool, - pooling_mode_mean_sqrt_len_tokens: bool, + #[serde(default)] + pooling_mode_lasttoken: bool, +} + +impl TryFrom for Pool { + type Error = anyhow::Error; + + fn try_from(config: PoolConfig) -> std::result::Result { + if config.pooling_mode_cls_token { + return Ok(Pool::Cls); + } + if config.pooling_mode_mean_tokens { + return Ok(Pool::Mean); + } + if config.pooling_mode_lasttoken { + return Ok(Pool::LastToken); + } + Err(anyhow!("Pooling config {config:?} is not supported")) + } } #[derive(Debug, Deserialize)] @@ -378,6 +450,11 @@ pub struct STConfig { pub max_seq_length: usize, } +#[derive(Debug, Deserialize)] +pub struct NewSTConfig { + pub prompts: Option>, +} + #[derive(Clone, Debug, Serialize)] #[cfg_attr(feature = "http", derive(utoipa::ToSchema))] pub struct EmbeddingModel { @@ -515,19 +592,14 @@ impl ResponseMetadata { fn record_metrics(&self) { // Metrics - metrics::histogram!( - "te_request_duration", - self.start_time.elapsed().as_secs_f64() - ); - metrics::histogram!( - "te_request_tokenization_duration", - self.tokenization_time.as_secs_f64() - ); - metrics::histogram!("te_request_queue_duration", self.queue_time.as_secs_f64()); - metrics::histogram!( - "te_request_inference_duration", - self.inference_time.as_secs_f64() - ); + let histogram = metrics::histogram!("te_request_duration"); + histogram.record(self.start_time.elapsed().as_secs_f64()); + let histogram = metrics::histogram!("te_request_tokenization_duration"); + histogram.record(self.tokenization_time.as_secs_f64()); + let histogram = metrics::histogram!("te_request_queue_duration"); + histogram.record(self.queue_time.as_secs_f64()); + let histogram = metrics::histogram!("te_request_inference_duration"); + histogram.record(self.inference_time.as_secs_f64()); } } diff --git a/router/src/logging.rs b/router/src/logging.rs index f8a6f0aa..7a8fe810 100644 --- a/router/src/logging.rs +++ b/router/src/logging.rs @@ -1,8 +1,8 @@ -use opentelemetry::sdk::propagation::TraceContextPropagator; -use opentelemetry::sdk::trace::Sampler; -use opentelemetry::sdk::{trace, Resource}; use opentelemetry::{global, KeyValue}; use opentelemetry_otlp::WithExportConfig; +use opentelemetry_sdk::propagation::TraceContextPropagator; +use opentelemetry_sdk::trace::Sampler; +use opentelemetry_sdk::{trace, Resource}; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; use tracing_subscriber::{EnvFilter, Layer}; @@ -10,7 +10,11 @@ use tracing_subscriber::{EnvFilter, Layer}; /// Init logging using env variables LOG_LEVEL and LOG_FORMAT: /// - otlp_endpoint is an optional URL to an Open Telemetry collector /// - LOG_LEVEL may be TRACE, DEBUG, INFO, WARN or ERROR (default to INFO) -pub fn init_logging(otlp_endpoint: Option<&String>, json_output: bool) -> bool { +pub fn init_logging( + otlp_endpoint: Option<&String>, + otlp_service_name: String, + json_output: bool, +) -> bool { let mut layers = Vec::new(); // STDOUT/STDERR layer @@ -40,11 +44,11 @@ pub fn init_logging(otlp_endpoint: Option<&String>, json_output: bool) -> bool { trace::config() .with_resource(Resource::new(vec![KeyValue::new( "service.name", - "text-embeddings-inference.router", + otlp_service_name, )])) .with_sampler(Sampler::AlwaysOn), ) - .install_batch(opentelemetry::runtime::Tokio); + .install_batch(opentelemetry_sdk::runtime::Tokio); if let Ok(tracer) = tracer { layers.push(tracing_opentelemetry::layer().with_tracer(tracer).boxed()); diff --git a/router/src/main.rs b/router/src/main.rs index 06cd576a..a72caa8b 100644 --- a/router/src/main.rs +++ b/router/src/main.rs @@ -1,12 +1,12 @@ use anyhow::Result; use clap::Parser; -use mimalloc::MiMalloc; use opentelemetry::global; use text_embeddings_backend::DType; use veil::Redact; +#[cfg(not(target_os = "linux"))] #[global_allocator] -static GLOBAL: MiMalloc = MiMalloc; +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; /// App Configuration #[derive(Parser, Redact)] @@ -79,6 +79,33 @@ struct Args { #[clap(long, env)] auto_truncate: bool, + /// The name of the prompt that should be used by default for encoding. If not set, no prompt + /// will be applied. + /// + /// Must be a key in the `Sentence Transformers` configuration `prompts` dictionary. + /// + /// For example if ``default_prompt_name`` is "query" and the ``prompts`` is {"query": "query: ", ...}, + /// then the sentence "What is the capital of France?" will be encoded as + /// "query: What is the capital of France?" because the prompt text will be prepended before + /// any text to encode. + /// + /// The argument '--default-prompt-name ' cannot be used with + /// '--default-prompt ` + #[clap(long, env, conflicts_with = "default_prompt")] + default_prompt_name: Option, + + /// The prompt that should be used by default for encoding. If not set, no prompt + /// will be applied. + /// + /// For example if ``default_prompt`` is "query: " then the sentence "What is the capital of + /// France?" will be encoded as "query: What is the capital of France?" because the prompt + /// text will be prepended before any text to encode. + /// + /// The argument '--default-prompt ' cannot be used with + /// '--default-prompt-name ` + #[clap(long, env, conflicts_with = "default_prompt_name")] + default_prompt: Option, + /// Your HuggingFace hub token #[clap(long, env)] #[redact(partial)] @@ -123,6 +150,11 @@ struct Args { #[clap(long, env)] otlp_endpoint: Option, + /// The service name for opentelemetry. + /// e.g. `text-embeddings-inference.server` + #[clap(default_value = "text-embeddings-inference.server", long, env)] + otlp_service_name: String, + /// Unused for gRPC servers #[clap(long, env)] cors_allow_origin: Option>, @@ -134,11 +166,28 @@ async fn main() -> Result<()> { let args: Args = Args::parse(); // Initialize logging and telemetry - let global_tracer = - text_embeddings_router::init_logging(args.otlp_endpoint.as_ref(), args.json_output); + let global_tracer = text_embeddings_router::init_logging( + args.otlp_endpoint.as_ref(), + args.otlp_service_name.clone(), + args.json_output, + ); tracing::info!("{args:?}"); + // Hack to trim pages regularly + // see: https://www.algolia.com/blog/engineering/when-allocators-are-hoarding-your-precious-memory/ + // and: https://github.com/huggingface/text-embeddings-inference/issues/156 + #[cfg(target_os = "linux")] + tokio::spawn(async move { + use tokio::time::Duration; + loop { + tokio::time::sleep(Duration::from_millis(100)).await; + unsafe { + libc::malloc_trim(0); + } + } + }); + text_embeddings_router::run( args.model_id, args.revision, @@ -150,6 +199,8 @@ async fn main() -> Result<()> { args.max_batch_requests, args.max_client_batch_size, args.auto_truncate, + args.default_prompt, + args.default_prompt_name, args.hf_api_token, Some(args.hostname), args.port, @@ -158,6 +209,7 @@ async fn main() -> Result<()> { args.payload_limit, args.api_key, args.otlp_endpoint, + args.otlp_service_name, args.cors_allow_origin, ) .await?; diff --git a/router/src/shutdown.rs b/router/src/shutdown.rs index 471eaf14..15fc8ea7 100644 --- a/router/src/shutdown.rs +++ b/router/src/shutdown.rs @@ -25,5 +25,4 @@ pub(crate) async fn shutdown_signal() { } tracing::info!("signal received, starting graceful shutdown"); - opentelemetry::global::shutdown_tracer_provider(); } diff --git a/router/tests/common.rs b/router/tests/common.rs index f9c47c94..55fdf5f5 100644 --- a/router/tests/common.rs +++ b/router/tests/common.rs @@ -58,12 +58,15 @@ pub async fn start_server(model_id: String, revision: Option, dtype: DTy false, None, None, + None, + None, 8090, None, None, 2_000_000, None, None, + "text-embeddings-inference.server".to_owned(), None, ) }); diff --git a/sagemaker-entrypoint-cuda-all.sh b/sagemaker-entrypoint-cuda-all.sh index 16156e8a..a3c63cbb 100644 --- a/sagemaker-entrypoint-cuda-all.sh +++ b/sagemaker-entrypoint-cuda-all.sh @@ -1,5 +1,26 @@ #!/bin/bash +verlte() { + [ "$1" = "$2" ] && return 1 || [ "$2" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ] +} + +if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then + CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 | cut -d"." -f 3-) + echo "CUDA compat package requires Nvidia driver ≤${CUDA_COMPAT_MAX_DRIVER_VERSION}" + cat /proc/driver/nvidia/version + NVIDIA_DRIVER_VERSION=$(sed -n 's/^NVRM.*Kernel Module *\([0-9.]*\).*$/\1/p' /proc/driver/nvidia/version 2>/dev/null || true) + echo "Current installed Nvidia driver version is ${NVIDIA_DRIVER_VERSION}" + if [ $(verlte "$CUDA_COMPAT_MAX_DRIVER_VERSION" "$NVIDIA_DRIVER_VERSION") ]; then + echo "Setup CUDA compatibility libs path to LD_LIBRARY_PATH" + export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH + echo $LD_LIBRARY_PATH + else + echo "Skip CUDA compat libs setup as newer Nvidia driver is installed" + fi +else + echo "Skip CUDA compat libs setup as package not found" +fi + if [[ -z "${HF_MODEL_ID}" ]]; then echo "HF_MODEL_ID must be set" exit 1 @@ -15,9 +36,43 @@ if ! command -v nvidia-smi &> /dev/null; then exit 1 fi +# Query GPU name using nvidia-smi +gpu_name=$(nvidia-smi --query-gpu=gpu_name --format=csv | awk 'NR==2') +if [ $? -ne 0 ]; then + echo "Error: $gpu_name" + echo "Query gpu_name failed" +else + echo "Query gpu_name succeeded. Printing output: $gpu_name" +fi + +# Function to get compute capability based on GPU name +get_compute_cap() { + gpu_name="$1" + + # Check if the GPU name contains "A10G" + if [[ "$gpu_name" == *"A10G"* ]]; then + echo "86" + # Check if the GPU name contains "A100" + elif [[ "$gpu_name" == *"A100"* ]]; then + echo "80" + # Check if the GPU name contains "H100" + elif [[ "$gpu_name" == *"H100"* ]]; then + echo "90" + # Cover Nvidia T4 + elif [[ "$gpu_name" == *"T4"* ]]; then + echo "75" + # Cover Nvidia L4 + elif [[ "$gpu_name" == *"L4"* ]]; then + echo "89" + else + echo "80" # Default compute capability + fi +} + if [[ -z "${CUDA_COMPUTE_CAP}" ]] then - compute_cap=$(nvidia-smi --query-gpu=compute_cap --format=csv | sed -n '2p' | sed 's/\.//g') + compute_cap=$(get_compute_cap "$gpu_name") + echo "the compute_cap is $compute_cap" else compute_cap=$CUDA_COMPUTE_CAP fi diff --git a/sagemaker-entrypoint.sh b/sagemaker-entrypoint.sh index 8d78a8dc..b6cec7bb 100644 --- a/sagemaker-entrypoint.sh +++ b/sagemaker-entrypoint.sh @@ -10,4 +10,4 @@ if [[ -n "${HF_MODEL_REVISION}" ]]; then export REVISION="${HF_MODEL_REVISION}" fi -text-embeddings-router --port 8080 --json-output \ No newline at end of file +text-embeddings-router --port 8080 --json-output