From 45a58bee125846aa29b16d8b6d3423d232d9b515 Mon Sep 17 00:00:00 2001 From: jcrist Date: Wed, 13 Dec 2023 03:40:11 +0000 Subject: [PATCH] deploy: f71d96f4e7dce9baa6b619d555863d62b1cd4e2e --- _sources/benchmarks.rst.txt | 360 ++++++++++++++++++----------- _sources/index.rst.txt | 4 +- _sources/perf-tips.rst.txt | 4 +- _static/bench-validation.svg | 2 +- benchmarks.html | 426 +++++++++++++++++++++-------------- index.html | 4 +- objects.inv | Bin 1557 -> 1547 bytes perf-tips.html | 4 +- searchindex.js | 2 +- 9 files changed, 493 insertions(+), 313 deletions(-) diff --git a/_sources/benchmarks.rst.txt b/_sources/benchmarks.rst.txt index 0f745007..ffe3296d 100644 --- a/_sources/benchmarks.rst.txt +++ b/_sources/benchmarks.rst.txt @@ -16,167 +16,197 @@ Benchmarks you choose different serialization formats. I encourage you to write your own benchmarks before making these decisions. + In all cases benchmarks were run on my local development machine (a ~2020 + x86 Linux laptop) using CPython 3.11. -.. _encoding-benchmark: +JSON Serialization & Validation +------------------------------- -Benchmark - Encoding/Decoding ------------------------------ +This benchmark covers the common case when working with ``msgspec`` or other +validation libraries. It measures two things: -Here we show a simple benchmark serializing some structured data. The data -we're serializing has the following schema (defined here using `msgspec.Struct` -types): +- Decoding some JSON input, validating it against a schema, and converting it + into user-friendly python objects. +- Encoding these same python objects back into JSON. + +The data we're working with has the following schema (defined here using +`msgspec.Struct` types): .. code-block:: python + import enum import datetime import msgspec - class File(msgspec.Struct, tag="file"): + class Permissions(enum.Enum): + READ = "READ" + WRITE = "WRITE" + READ_WRITE = "READ_WRITE" + + + class File(msgspec.Struct, kw_only=True, tag="file"): name: str created_by: str created_at: datetime.datetime - updated_at: datetime.datetime + updated_by: str | None = None + updated_at: datetime.datetime | None = None nbytes: int + permissions: Permissions - class Directory(msgspec.Struct, tag="directory"): + + class Directory(msgspec.Struct, kw_only=True, tag="directory"): name: str created_by: str created_at: datetime.datetime - updated_at: datetime.datetime + updated_by: str | None = None + updated_at: datetime.datetime | None = None contents: list[File | Directory] -The libraries we're benchmarking are the following: -- ``ujson`` (`link `__) -- ``orjson`` (`link `__) -- ``msgpack`` (`link `__) -- ``msgspec.msgpack`` -- ``msgspec.json`` +The libraries we're comparing are the following: + +- msgspec_ (0.18.5) +- mashumaro_ (3.11) +- pydantic_ (both 1.10.13 and 2.5.2) +- cattrs_ (23.2.3) Each benchmark creates a message containing one or more ``File``/``Directory`` -instances, then then serializes and deserializes it in a loop. +instances, then then serializes, deserializes, and validates it in a loop. The full benchmark source can be found -`here `__. +`here `__. -1 Object -^^^^^^^^ +.. raw:: html -Some workflows involve sending around very small messages. Here the overhead -per function call dominates (parsing of options, allocating temporary buffers, -etc...). +
-.. raw:: html +In this benchmark ``msgspec`` is ~6x faster than ``mashumaro``, ~10x faster +than ``cattrs``, and ~12x faster than ``pydantic`` V2, and ~85x faster than +``pydantic`` V1. -
+This plot shows the performance benefit of performing type validation during +message decoding (as done by ``msgspec``) rather than as a secondary step with +a third-party library like cattrs_ or pydantic_ V1. Validating after decoding +is slower for two reasons: -From the chart above, you can see that ``msgspec.msgpack`` and ``msgspec.json`` -performed quite well, encoding/decoding faster than all other options, even -those implementing the same serialization protocol. This is partly due to the -use of `Struct` types here - since all keys are statically known, the msgspec -decoders can apply a few optimizations not available to other Python libraries -that rely on `dict` types instead. +- It requires traversing over the entire output structure a second time (which + can be slow due to pointer chasing) -That said, all of these methods serialize/deserialize pretty quickly relative -to other python operations, so unless you're counting every microsecond your -choice here probably doesn't matter that much. +- It may require converting some python objects to their desired output types + (e.g. converting a decoded `dict` to a pydantic_ model), resulting in + allocating many temporary python objects. -1000 Objects -^^^^^^^^^^^^ +In contrast, libraries like ``msgspec`` that validate during decoding have none +of these issues. Only a single pass over the decoded data is taken, and the +specified output types are created correctly the first time, avoiding the need +for additional unnecessary allocations. -Here we serialize a tree of 1000 ``File``/``Directory`` objects. There's a lot -more data here, so the per-call overhead will no longer dominate, and we're now -measuring the efficiency of the encoding/decoding. +This benefit also shows up in the memory usage for the same benchmark: .. raw:: html -
+
+Here we compare the peak increase in memory usage (RSS) after loading the +schemas and data. ``msgspec``'s small library size, schema representation, and +in-memory state means it uses a fraction of the memory of other tools. -Benchmark - Schema Validation ------------------------------ +.. _json-benchmark: -The above benchmarks aren't 100% fair to ``msgspec``, as it also performs -schema validation on deserialization, checking that the message matches the -specified schema. None of the other options benchmarked support this natively. -Instead, many users perform validation post deserialization using additional -tools like pydantic_. +JSON Serialization +------------------ -Here we benchmark the following validation libraries, measuring JSON encoding -and decoding time. +``msgspec`` includes its own high performance JSON library, which may be used +by itself as a replacement for the standard library's `json.dumps`/`json.loads` +functions. Here we compare msgspec's JSON implementation against several other +popular Python JSON libraries. -- msgspec_ -- pydantic_ -- cattrs_ -- mashumaro_ +- msgspec_ (0.18.5) +- orjson_ (3.9.10) +- ujson_ (5.9.0) +- rapidjson_ (1.13) +- simdjson_ (5.0.2) +- json_ (standard library) The full benchmark source can be found -`here `__. +`here `__. .. raw:: html -
+
-This plot shows the performance benefit of performing type validation during -message decoding (as done by ``msgspec``) rather than as a secondary step with -a third-party library like pydantic_. In this benchmark ``msgspec`` is ~10x -faster than ``mashumaro``, ~12x faster than ``cattrs``, and ~80x faster than -``pydantic``. +In this case ``msgspec structs`` (which measures ``msgspec`` with +``msgspec.Struct`` schemas pre-defined) is the fastest. When used without +schemas, ``msgspec`` is on-par with ``orjson`` (the next fastest JSON library). -Validating after decoding is slower for two reasons: +This shows that ``msgspec`` is able to decode JSON faster when a schema is +provided. Due to a more efficient in memory representation, JSON decoding AND +schema validation with ``msgspec`` than just JSON decoding alone. -- It requires traversing over the entire output structure a second time (which - can be slow due to pointer chasing) +.. _msgpack-benchmark: -- It may require converting some python objects to their desired output types - (e.g. converting a decoded `dict` to a pydantic_ model), resulting in - allocating many temporary python objects. +MessagePack Serialization +------------------------- -In contrast, libraries like ``msgspec`` that validate during decoding have none -of these issues. Only a single pass over the decoded data is taken, and the -specified output types are created correctly the first time, avoiding the need -for additional unnecessary allocations. +Likewise, ``msgspec`` includes its own high performance MessagePack_ library, +which may be used by itself without requiring usage of any of msgspec's +validation machinery. Here we compare msgspec's MessagePack implementation +against several other popular Python MessagePack libraries. -.. _memory-benchmark: +- msgspec_ (0.18.5) +- msgpack_ (1.0.7) +- ormsgpack_ (1.4.1) -Benchmark - Memory Usage ------------------------- +.. raw:: html + +
+ +As with the JSON benchmark above, ``msgspec`` with a schema provided (``msgspec +structs``) is faster than ``msgspec`` with no schema. In both cases though +``msgspec`` is measurably faster than other Python MessagePack libraries like +``msgpack`` or ``ormsgpack``. + + +JSON Serialization - Large Data +------------------------------- -Here we benchmark loading a `medium-sized JSON file -`__ (~65 MiB) +Here we benchmark loading a `large JSON file +`__ (~77 MiB) containing information on all the ``noarch`` packages in conda-forge_. We compare the following libraries: -- msgspec_ with ``msgspec.Struct`` schemas pre-defined -- msgspec_ -- json_ -- ujson_ -- orjson_ -- simdjson_ +- msgspec_ (0.18.5) +- orjson_ (3.9.10) +- ujson_ (5.9.0) +- rapidjson_ (1.13) +- simdjson_ (5.0.2) +- json_ (standard library) For each library, we measure both the peak increase in memory usage (RSS) and the time to JSON decode the file. The full benchmark source can be found `here -`__. +`__. **Results (smaller is better):** +---------------------+--------------+------+-----------+------+ | | memory (MiB) | vs. | time (ms) | vs. | +=====================+==============+======+===========+======+ -| **msgspec structs** | 83.6 | 1.0x | 170.6 | 1.0x | +| **msgspec structs** | 67.6 | 1.0x | 176.8 | 1.0x | +---------------------+--------------+------+-----------+------+ -| **msgspec** | 145.3 | 1.7x | 383.1 | 2.2x | +| **msgspec** | 218.3 | 3.2x | 630.5 | 3.6x | +---------------------+--------------+------+-----------+------+ -| **json** | 213.5 | 2.6x | 526.4 | 3.1x | +| **json** | 295.0 | 4.4x | 868.6 | 4.9x | +---------------------+--------------+------+-----------+------+ -| **ujson** | 230.6 | 2.8x | 666.8 | 3.9x | +| **ujson** | 349.1 | 5.2x | 1087.0 | 6.1x | +---------------------+--------------+------+-----------+------+ -| **orjson** | 263.9 | 3.2x | 410.0 | 2.4x | +| **rapidjson** | 375.0 | 5.6x | 1004.0 | 5.7x | +---------------------+--------------+------+-----------+------+ -| **simdjson** | 403.7 | 4.8x | 615.1 | 3.6x | +| **orjson** | 406.3 | 6.0x | 691.7 | 3.9x | ++---------------------+--------------+------+-----------+------+ +| **simdjson** | 603.2 | 8.9x | 1053.0 | 6.0x | +---------------------+--------------+------+-----------+------+ - ``msgspec`` decoding into :doc:`Struct ` types uses the least amount of @@ -193,25 +223,24 @@ The full benchmark source can be found `here large messages this can lead to significant memory savings. ``json`` and ``orjson`` also use similar optimizations, but not as effectively. -- ``orjson`` and ``simdjson`` use 3-5x more memory than ``msgspec`` in this +- ``orjson`` and ``simdjson`` use 6-9x more memory than ``msgspec`` in this benchmark. In addition to the reasons above, both of these decoders require copying the original message into a temporary buffer. In this case, the extra - copy adds an extra 65 MiB of overhead! - + copy adds an extra 77 MiB of overhead! .. _struct-benchmark: -Benchmark - Structs -------------------- +Structs +------- Here we benchmark common `msgspec.Struct` operations, comparing their performance against other similar libraries. The cases compared are: -- ``msgspec`` - Standard Python classes - dataclasses_ -- attrs_ -- pydantic_ +- msgspec_ (0.18.5) +- attrs_ (23.1.0) +- pydantic_ (2.5.2) For each library, the following operations are benchmarked: @@ -230,32 +259,32 @@ The full benchmark source can be found `here +----------------------+-------------+-------------+---------------+------------+ | | import (μs) | create (μs) | equality (μs) | order (μs) | +======================+=============+=============+===============+============+ -| **msgspec** | 9.92 | 0.09 | 0.02 | 0.03 | +| **msgspec** | 12.51 | 0.09 | 0.02 | 0.03 | +----------------------+-------------+-------------+---------------+------------+ -| **standard classes** | 6.86 | 0.45 | 0.13 | 0.29 | +| **standard classes** | 7.88 | 0.35 | 0.08 | 0.16 | +----------------------+-------------+-------------+---------------+------------+ -| **dataclasses** | 489.07 | 0.47 | 0.27 | 0.30 | +| **attrs** | 483.10 | 0.37 | 0.14 | 1.87 | +----------------------+-------------+-------------+---------------+------------+ -| **attrs** | 428.38 | 0.42 | 0.29 | 2.15 | +| **dataclasses** | 506.09 | 0.36 | 0.14 | 0.16 | +----------------------+-------------+-------------+---------------+------------+ -| **pydantic** | 371.52 | 4.84 | 10.56 | N/A | +| **pydantic** | 673.47 | 1.54 | 0.60 | N/A | +----------------------+-------------+-------------+---------------+------------+ - Standard Python classes are the fastest to import (any library can only add overhead here). Still, ``msgspec`` isn't *that* much slower, especially compared to other options. - Structs are optimized to be cheap to create, and that shows for the creation - benchmark. They're roughly 5x faster than standard - classes/``attrs``/``dataclasses``, and 50x faster than ``pydantic``. -- For equality comparison, msgspec Structs are roughly 6x to 500x faster than + benchmark. They're roughly 4x faster than standard + classes/``attrs``/``dataclasses``, and 17x faster than ``pydantic``. +- For equality comparison, msgspec Structs are roughly 4x to 30x faster than the alternatives. -- For order comparison, msgspec Structs are roughly 10x to 70x faster than the +- For order comparison, msgspec Structs are roughly 5x to 60x faster than the alternatives. .. _struct-gc-benchmark: -Benchmark - Garbage Collection ------------------------------- +Garbage Collection +------------------ `msgspec.Struct` instances implement several optimizations for reducing garbage collection (GC) pressure and decreasing memory usage. Here we benchmark structs @@ -306,10 +335,11 @@ The full benchmark source can be found `here .. _benchmark-library-size: -Benchmark - Library Size ------------------------- +Library Size +------------ -Here we compare the on-disk size of a few Python libraries. +Here we compare the on-disk size of ``msgspec`` and ``pydantic``, its closest +equivalent. The full benchmark source can be found `here `__. @@ -319,18 +349,13 @@ The full benchmark source can be found `here +--------------+---------+------------+-------------+ | | version | size (MiB) | vs. msgspec | +==============+=========+============+=============+ -| **msgspec** | 0.12.0 | 0.34 | 1.00x | -+--------------+---------+------------+-------------+ -| **orjson** | 3.8.5 | 0.56 | 1.64x | +| **msgspec** | 0.18.4 | 0.46 | 1.00x | +--------------+---------+------------+-------------+ -| **msgpack** | 1.0.4 | 0.99 | 2.91x | -+--------------+---------+------------+-------------+ -| **pydantic** | 1.10.4 | 8.71 | 25.67x | +| **pydantic** | 2.5.2 | 6.71 | 14.66x | +--------------+---------+------------+-------------+ -The functionality available in ``msgspec`` is comparable to that of orjson_, -msgpack_, and pydantic_ combined. However, the total installed binary size of -``msgspec`` is a fraction of that of any of these libraries. +For applications where dependency size matters, ``msgspec`` is roughly 15x +smaller on disk. .. raw:: html @@ -345,7 +370,7 @@ msgpack_, and pydantic_ combined. However, the total installed binary size of function buildPlot(div, rows, title) { var i, time_unit, scale, max_time = 0; for (i = 0; i < rows.length; i++) { - var total = rows[i][1] + rows[i][2]; + var total = rows[i].encode + rows[i].decode; if (total > max_time) { max_time = total; } @@ -366,13 +391,13 @@ msgpack_, and pydantic_ combined. However, the total installed binary size of var columns = ["encode", "decode", "total"]; var data = []; for (i = 0; i < rows.length; i++) { - var lib = rows[i][0]; - var et = rows[i][1] * scale; - var dt = rows[i][2] * scale; + var label = rows[i].label; + var et = rows[i].encode * scale; + var dt = rows[i].decode * scale; var tt = et + dt; - data.push({library: lib, method: "encode", time: et}); - data.push({library: lib, method: "decode", time: dt}); - data.push({library: lib, method: "total", time: tt}); + data.push({library: label, method: "encode", time: et}); + data.push({library: label, method: "decode", time: dt}); + data.push({library: label, method: "total", time: tt}); } var spec = { @@ -403,7 +428,6 @@ msgpack_, and pydantic_ combined. However, the total installed binary size of "row": { "field": "library", "header": { - "labelExpr": "split(datum.label, ' ')", "orient": "left", "labelAngle": 0, "labelAlign": "left", @@ -430,20 +454,92 @@ msgpack_, and pydantic_ combined. However, the total installed binary size of vegaEmbed(div, spec); } - var results = {"1": [["ujson", 8.829250499984482e-07, 8.730858320013794e-07], ["orjson", 3.096652690001065e-07, 6.008548780009733e-07], ["msgpack", 3.735713579990261e-07, 6.712430439984019e-07], ["msgspec msgpack", 1.209437355000773e-07, 2.4524554299932786e-07], ["msgspec json", 1.5702481800053648e-07, 2.9431164100060416e-07]], "1k": [["ujson", 0.0006268990559983649, 0.0008841279000007489], ["orjson", 0.00022851538299983076, 0.0005686095599994587], ["msgpack", 0.000333242345999679, 0.0007984013619970938], ["msgspec msgpack", 7.986827880013152e-05, 0.0002904889190012909], ["msgspec json", 0.00012921423349962423, 0.00030142520899971713]]} - var results_valid = [["msgspec", 0.00014108686700001273, 0.0003501984610011277], ["pydantic", 0.015396889400017244, 0.022798635399885823], ["cattrs", 0.0025966005599912024, 0.0033668910000051256], ["mashumaro", 0.0009302718219987582, 0.0037224738400072964]] - buildPlot('#bench-1', results["1"], "Benchmark - 1 Object"); - buildPlot('#bench-1k', results["1k"], "Benchmark - 1000 Objects"); - buildPlot('#bench-1k-validate', results_valid, "Benchmark - 1000 Objects, With Validation"); + function buildMemPlot(div, rows, title) { + var data = []; + for (i = 0; i < rows.length; i++) { + data.push({library: rows[i].label, memory: rows[i].memory}); + } + + var spec = { + "$schema": "https://vega.github.io/schema/vega-lite/v5.2.0.json", + "title": title, + "config": { + "view": {"stroke": null}, + "legend": {"title": null, "labelFontSize": 12}, + "title": {"fontSize": 14, "offset": 10}, + "axis": {"titleFontSize": 12, "titlePadding": 10} + }, + "width": "container", + "data": {"values": data}, + "transform": [ + { + "calculate": "join([format(datum.memory, '.3'), ' MiB'], '')", + "as": "tooltip", + } + ], + "mark": "bar", + "encoding": { + "row": { + "field": "library", + "header": { + "orient": "left", + "labelAngle": 0, + "labelAlign": "left", + "labelFontSize": 12 + }, + "sort": {"field": "memory", "order": "ascending"}, + "title": null, + "type": "nominal", + }, + "tooltip": {"field": "tooltip", "type": "nominal"}, + "x": { + "axis": {"grid": false, "title": "Memory (MiB)"}, + "field": "memory", + "type": "quantitative", + }, + }, + }; + vegaEmbed(div, spec); + } + + var results_valid = [ + {"label": "msgspec", "encode": 0.00016727479400015, "decode": 0.0004222057979986857, "memory": 0.640625}, + {"label": "mashumaro", "encode": 0.000797896412001137, "decode": 0.0026786830099990765, "memory": 7.1171875}, + {"label": "cattrs", "encode": 0.002065396289999626, "decode": 0.0033923348699954657, "memory": 3.25390625}, + {"label": "pydantic v2", "encode": 0.0034702956599994648, "decode": 0.0038069566000012854, "memory": 16.26171875}, + {"label": "pydantic v1", "encode": 0.01961492505001843, "decode": 0.02528851079996457, "memory": 10.03125}, + ]; + var results_json = [ + {"label": "msgspec structs", "encode": 0.00014051752349996606, "decode": 0.00036725287499939443}, + {"label": "msgspec", "encode": 0.00018274705249996258, "decode": 0.00048175174399875685}, + {"label": "json", "encode": 0.0012280583099982323, "decode": 0.0009195450700008223}, + {"label": "orjson", "encode": 0.00017935967999983403, "decode": 0.0004634268540012272}, + {"label": "ujson", "encode": 0.0006279176680000091, "decode": 0.0008554406740004197}, + {"label": "rapidjson", "encode": 0.000513588076000815, "decode": 0.0011320363100003306}, + {"label": "simdjson", "encode": 0.00123421613499886, "decode": 0.0007710835699999734}, + ]; + var results_msgpack = [ + {"label": "msgspec structs", "encode": 0.0001536652545000834, "decode": 0.0003513430250004603}, + {"label": "msgspec", "encode": 0.00012540720800006966, "decode": 0.00048454183800095054}, + {"label": "msgpack", "encode": 0.00040564010999878517, "decode": 0.0008212748599999031}, + {"label": "ormsgpack", "encode": 0.0001669060230001378, "decode": 0.000755966658000034}, + ]; + buildPlot('#bench-validate', results_valid, "Benchmark - JSON Serialization & Validation"); + buildMemPlot('#bench-validate-memory', results_valid, "Benchmark - Serialization & Validation"); + buildPlot('#bench-json', results_json, "Benchmark - JSON Serialization"); + buildPlot('#bench-msgpack', results_msgpack, "Benchmark - MessagePack Serialization"); .. _msgspec: https://jcristharif.com/msgspec/ .. _msgpack: https://github.com/msgpack/msgpack-python +.. _ormsgpack: https://github.com/aviramha/ormsgpack +.. _MessagePack: https://msgpack.org .. _orjson: https://github.com/ijl/orjson .. _json: https://docs.python.org/3/library/json.html .. _simdjson: https://github.com/TkTech/pysimdjson .. _ujson: https://github.com/ultrajson/ultrajson +.. _rapidjson: https://github.com/python-rapidjson/python-rapidjson .. _attrs: https://www.attrs.org .. _dataclasses: https://docs.python.org/3/library/dataclasses.html .. _pydantic: https://pydantic-docs.helpmanual.io/ diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt index fd160f3e..f973c2c6 100644 --- a/_sources/index.rst.txt +++ b/_sources/index.rst.txt @@ -13,11 +13,11 @@ support for JSON_, MessagePack_, YAML_, and TOML_. It features: - 🔍 **Zero-cost schema validation** using familiar Python type annotations. In :doc:`benchmarks ` ``msgspec`` decodes *and* validates JSON - ~2x faster than orjson_ can decode it alone. + faster than orjson_ can decode it alone. - ✨ **A speedy Struct type** for representing structured data. If you already use dataclasses_ or attrs_, :doc:`structs` should feel familiar. However, - they're :ref:`10-100x ` faster for common operations. + they're :ref:`5-60x ` faster for common operations. All of this is included in a :ref:`lightweight library ` with no required dependencies. diff --git a/_sources/perf-tips.rst.txt b/_sources/perf-tips.rst.txt index 1685027e..40a4a536 100644 --- a/_sources/perf-tips.rst.txt +++ b/_sources/perf-tips.rst.txt @@ -42,7 +42,7 @@ Use Structs ----------- :doc:`structs` are msgspec's native way of expressing user-defined types. -They're :ref:`fast to encode/decode ` and :ref:`fast to use +They're :ref:`fast to encode/decode ` and :ref:`fast to use `. If you have data with a known schema, we recommend defining a `msgspec.Struct` type (or types) for your schema and preferring that over other types like `dict`/`dataclasses`/... @@ -239,7 +239,7 @@ Use MessagePack --------------- ``msgspec`` supports both JSON_ and MessagePack_ protocols. The latter is less -commonly used, but :ref:`can be more performant `. If +commonly used, but :ref:`can be more performant `. If performance is an issue (and MessagePack is an acceptable solution), you may benefit from using it instead of JSON. And since ``msgspec`` supports both protocols with a consistent interface, switching from ``msgspec.json`` to diff --git a/_static/bench-validation.svg b/_static/bench-validation.svg index 1271a253..8082289b 100644 --- a/_static/bench-validation.svg +++ b/_static/bench-validation.svg @@ -1 +1 @@ -msgspecmashumarocattrspydantic0246810121416182022242628303234363840Time (ms)encodedecodetotalBenchmark - 1000 Objects, With Validation \ No newline at end of file +msgspecmashumarocattrspydantic v2pydantic v102468101214161820222426283032343638404244Time (ms)encodedecodetotalBenchmark - JSON Serialization & Validation \ No newline at end of file diff --git a/benchmarks.html b/benchmarks.html index b35eefb3..0c465890 100644 --- a/benchmarks.html +++ b/benchmarks.html @@ -273,87 +273,67 @@

Benchmarks -

Benchmark - Encoding/Decoding#

-

Here we show a simple benchmark serializing some structured data. The data -we’re serializing has the following schema (defined here using msgspec.Struct -types):

-
import datetime
+
+

JSON Serialization & Validation#

+

This benchmark covers the common case when working with msgspec or other +validation libraries. It measures two things:

+
    +
  • Decoding some JSON input, validating it against a schema, and converting it +into user-friendly python objects.

  • +
  • Encoding these same python objects back into JSON.

  • +
+

The data we’re working with has the following schema (defined here using +msgspec.Struct types):

+
import enum
+import datetime
 import msgspec
 
-class File(msgspec.Struct, tag="file"):
+class Permissions(enum.Enum):
+    READ = "READ"
+    WRITE = "WRITE"
+    READ_WRITE = "READ_WRITE"
+
+
+class File(msgspec.Struct, kw_only=True, tag="file"):
     name: str
     created_by: str
     created_at: datetime.datetime
-    updated_at: datetime.datetime
+    updated_by: str | None = None
+    updated_at: datetime.datetime | None = None
     nbytes: int
+    permissions: Permissions
+
 
-class Directory(msgspec.Struct, tag="directory"):
+class Directory(msgspec.Struct, kw_only=True, tag="directory"):
     name: str
     created_by: str
     created_at: datetime.datetime
-    updated_at: datetime.datetime
+    updated_by: str | None = None
+    updated_at: datetime.datetime | None = None
     contents: list[File | Directory]
 
-

The libraries we’re benchmarking are the following:

+

The libraries we’re comparing are the following:

Each benchmark creates a message containing one or more File/Directory -instances, then then serializes and deserializes it in a loop.

+instances, then then serializes, deserializes, and validates it in a loop.

The full benchmark source can be found -here.

-
-

1 Object#

-

Some workflows involve sending around very small messages. Here the overhead -per function call dominates (parsing of options, allocating temporary buffers, -etc…).

-

From the chart above, you can see that msgspec.msgpack and msgspec.json -performed quite well, encoding/decoding faster than all other options, even -those implementing the same serialization protocol. This is partly due to the -use of Struct types here - since all keys are statically known, the msgspec -decoders can apply a few optimizations not available to other Python libraries -that rely on dict types instead.

-

That said, all of these methods serialize/deserialize pretty quickly relative -to other python operations, so unless you’re counting every microsecond your -choice here probably doesn’t matter that much.

-
-
-

1000 Objects#

-

Here we serialize a tree of 1000 File/Directory objects. There’s a lot -more data here, so the per-call overhead will no longer dominate, and we’re now -measuring the efficiency of the encoding/decoding.

-
-
-
-

Benchmark - Schema Validation#

-

The above benchmarks aren’t 100% fair to msgspec, as it also performs -schema validation on deserialization, checking that the message matches the -specified schema. None of the other options benchmarked support this natively. -Instead, many users perform validation post deserialization using additional -tools like pydantic.

-

Here we benchmark the following validation libraries, measuring JSON encoding -and decoding time.

- -

The full benchmark source can be found -here.

-

This plot shows the performance benefit of performing type validation during +here.

+

In this benchmark msgspec is ~6x faster than mashumaro, ~10x faster +than cattrs, and ~12x faster than pydantic V2, and ~85x faster than +pydantic V1.

+

This plot shows the performance benefit of performing type validation during message decoding (as done by msgspec) rather than as a secondary step with -a third-party library like pydantic. In this benchmark msgspec is ~10x -faster than mashumaro, ~12x faster than cattrs, and ~80x faster than -pydantic.

-

Validating after decoding is slower for two reasons:

+a third-party library like cattrs or pydantic V1. Validating after decoding +is slower for two reasons:

  • It requires traversing over the entire output structure a second time (which can be slow due to pointer chasing)

  • @@ -365,23 +345,66 @@

    Benchmark - Schema Validation

Here we compare the peak increase in memory usage (RSS) after loading the +schemas and data. msgspec’s small library size, schema representation, and +in-memory state means it uses a fraction of the memory of other tools.

+ +
+

JSON Serialization#

+

msgspec includes its own high performance JSON library, which may be used +by itself as a replacement for the standard library’s json.dumps/json.loads +functions. Here we compare msgspec’s JSON implementation against several other +popular Python JSON libraries.

+ +

The full benchmark source can be found +here.

+

In this case msgspec structs (which measures msgspec with +msgspec.Struct schemas pre-defined) is the fastest. When used without +schemas, msgspec is on-par with orjson (the next fastest JSON library).

+

This shows that msgspec is able to decode JSON faster when a schema is +provided. Due to a more efficient in memory representation, JSON decoding AND +schema validation with msgspec than just JSON decoding alone.

+
+
+

MessagePack Serialization#

+

Likewise, msgspec includes its own high performance MessagePack library, +which may be used by itself without requiring usage of any of msgspec’s +validation machinery. Here we compare msgspec’s MessagePack implementation +against several other popular Python MessagePack libraries.

+ +

As with the JSON benchmark above, msgspec with a schema provided (msgspec +structs) is faster than msgspec with no schema. In both cases though +msgspec is measurably faster than other Python MessagePack libraries like +msgpack or ormsgpack.

-
-

Benchmark - Memory Usage#

-

Here we benchmark loading a medium-sized JSON file (~65 MiB) +

+

JSON Serialization - Large Data#

+

Here we benchmark loading a large JSON file (~77 MiB) containing information on all the noarch packages in conda-forge. We compare the following libraries:

For each library, we measure both the peak increase in memory usage (RSS) and the time to JSON decode the file.

-

The full benchmark source can be found here.

+

The full benchmark source can be found here.

Results (smaller is better):

-
-

Benchmark - Structs#

+
+

Structs#

Here we benchmark common msgspec.Struct operations, comparing their performance against other similar libraries. The cases compared are:

For each library, the following operations are benchmarked:

-
-

Benchmark - Garbage Collection#

+
+

Garbage Collection#

msgspec.Struct instances implement several optimizations for reducing garbage collection (GC) pressure and decreasing memory usage. Here we benchmark structs (with and without gc=False) against standard Python @@ -589,9 +618,10 @@

Benchmark - Schema Validation -

Benchmark - Library Size#

-

Here we compare the on-disk size of a few Python libraries.

+
+

Library Size#

+

Here we compare the on-disk size of msgspec and pydantic, its closest +equivalent.

The full benchmark source can be found here.

Results (smaller is better)

-

The functionality available in msgspec is comparable to that of orjson, -msgpack, and pydantic combined. However, the total installed binary size of -msgspec is a fraction of that of any of these libraries.

+

For applications where dependency size matters, msgspec is roughly 15x +smaller on disk.

@@ -791,16 +878,13 @@

Benchmark - Schema Validation diff --git a/index.html b/index.html index 11d60688..c2ea47d8 100644 --- a/index.html +++ b/index.html @@ -271,10 +271,10 @@

msgspecextensions.

  • 🔍 Zero-cost schema validation using familiar Python type annotations. In benchmarks msgspec decodes and validates JSON -~2x faster than orjson can decode it alone.

  • +faster than orjson can decode it alone.

  • A speedy Struct type for representing structured data. If you already use dataclasses or attrs, Structs should feel familiar. However, -they’re 10-100x faster for common operations.

  • +they’re 5-60x faster for common operations.

    All of this is included in a lightweight library with no required dependencies.


    diff --git a/objects.inv b/objects.inv index 728c7209f244ddb3b8cde34db38523ad803927fc..5fd6f1e3c9637a6d22b0b2bf2d0e22d7b06b458d 100644 GIT binary patch delta 1433 zcmV;K1!nq{42ukqgn!-XHJ6TKDH*qpt%)S}sDa3pgct-k1SpF+Yxk$OQH6vglqsylU6o^ zOy)4JDp?saoH8gilY$KRzYg$o5r_W*n)X(`26DgQTJIlb^M6m*>${af=M4$L6QF1wOS|9ERqSM(VHRcMwa6W8I24 z{2f!V1PxVW@J#)-Wh|6%PYcLbb;;ur>t2dD0#@xPd~7tZ*2m)O$UHa4bp~A1XjU8{ zIvCO5Jo=2U*SE7cf`~1>9Rnp9uX9ivfmvqwWhG0z9)FulDjsPS@4ceNu56=`vSDH; zV{XeR(l;fA@87D6#tp%E<(uEj{mvQEhBE;wkm{PnK;u043Pgl)V-mVf%m2rW*;enq zpb+&N3WD!sRZtxaSJ?py8VTQIvMBK^2(3bx_*>HKDLC0C_~3kNd7*hT!3U?#d0t@l zbmWr`H-GS?uUgZn))m{<8bV0z)f-F-&&`$*o}TWRpj`WO>#Nk8`)?WUa=ejZ$M(S_ zs&W?gD(M;8RO=XuebA^VhO9E!;N#82B!*Z)$!Qj3otB%ef82+`3my@93l9%_L!-1? z_+{-lAWG*Sa+wW3R*>t(Et$zoCG;p+p4xSp*ng+Bs1@X?kC$O`x&>~yc$M!`%}Uj3 zzcy4d^Hj37RASRsC0n%ZP|)fr}J_KaST_y<2!Q;L^%3_nh=vVg``GM%p0IbpgU zdVgW&Nu#B6*fC*31SbtbVXP;LtlUJRQ{x$glFYu3Nk=8`zJOA64-2eKL<-)#PvArg zJl5(rsv40onLZtdn>;h^Q^}3V>SjUyf+l^Wyauv_3VqNk#ck#^#ltCWu|21F4C!2% zQ}WfzdUcTRA>W==nLdy?ihpMxdkuS#=Bhrc!p}J!pF#e)e7NtKOyqDn z%d<0%HTSZfRyNoVf5ZMWHI?Bke++So7PL|(h~1nmEJ+vbv7%uLpbdVQU^U(1F|Wmw zkk8`m@owv4VKTk~h~!chZ+uVabt$;T+yrh83xV1Mi| z&jZyG(zdd777Xg%-~b|AQ_d&)ji}Ra2KK{WVuGG_1?Ez*GFf5roKeoc_X>QgI9RZk zx-}iq3X;MU&llb-o3x#9lrJ)`@yd06^*u$nrNhHMHdq!+Z?Lpbd`-QT5C)faxCb2B zkj$Kf*fXz^?ur=hetd6`1rAN`Er0NiUZFG@?Dc{Z77cccV(bg&*A$MD*Y*M&tUR4_ zTAbs_yp<*jXq6o%o3}DgaPtfFV1iD;ZYe#gl+%g1wQ+Il@t;5bSz74NAODi0GUGdX zG6S^UszKj|2heqPs^!`9o5~8i>b3&BdXDW!xCaky73{M&Ni(MCmK)WdX@9jfCA9x8 zOWs}QM-#pLeXlKiCodJYT1u&OiWioC)3k*_-5S)Qk{RapU{{*%vGik=dwDrdw5%+W z*l!oDS4T-Z#P{B>%Ti)l$y4(MVT>P7d0s2@rOQn9z1ADqV?XwEomEnse_~k0lTDpj n6xsG4BZ*ZwG_ha7U5m-{p%NL+f29v^bvt@**XY)+ZP5X4?tJItOZyC+ycqPS#ZG%Zv z=Pc}1(ld;$)-e?KpwUqbsWMpM4OMhbem zPO=>pTi|j##CO65e$@^We8^+|P-ZLj5Z{YEqZcIp@egWD@zRdr#|c&$FxXb6h_mLtew^8ZTcm|;)b8ltRQOSop(3);xhINWa!RwES zODwxU=i!*hO+EWln;QunXn`d|f1_g`FkCazH=Ah80 zy;5{rPE$Pi(iQSkijN^(XmU!vd0DRx@_#Ml>yv7lsfNC^J|oY}?8p?wlP|r7ElAr2 zoK)fG8XaFj{xyHN@0m>Ga5%|xGYxC%Wj(E|vDf~Ny=`i%&Po0;q){}ZO53F9=3LQA zy6ibtG)yV9!4DIx)N3pum3R{JS)42#ZEg0sa_tztXgF3|HMSsn4|Mca+N^wI|9?zg zIBJ0KH8S!2{xPa~0(ebsVC}F^58V>dwrX}33~K7&KqK5x&PV#KsMBu;?xSL2gYLV? z0lt?u6q^lX?gU8zg~Yn~t|NHoxJ`~Gg*}8Xyjs?2JJGCtC-Vxg^~S%lU}lANhT=2p zt!P?Y+Tk8>C}9mA4v8sZENvnt9XAnMK`L)J(|?Z@R$_4c%fr z$I|uk1|4ZxI3#f&J6aDPCG!y9N1`fAiM1k6?I(w0{PC3MwL)Ky>{Q>Jy^&S!>rmH< xC6)cJhf_S-)QLrr?f#RJI2?sT6Z;i>9eLi>!+9Jwv;Uyn*W5po{{fvNmfm&d;kW<* diff --git a/perf-tips.html b/perf-tips.html index eb92ef87..f038551c 100644 --- a/perf-tips.html +++ b/perf-tips.html @@ -295,7 +295,7 @@

    Reuse Encoders/Decoders

    Use Structs#

    Structs are msgspec’s native way of expressing user-defined types. -They’re fast to encode/decode and fast to use. If you have data with a known schema, we recommend +They’re fast to encode/decode and fast to use. If you have data with a known schema, we recommend defining a msgspec.Struct type (or types) for your schema and preferring that over other types like dict/dataclasses/…

    @@ -459,7 +459,7 @@

    Length-Prefix Framing

    Use MessagePack#

    msgspec supports both JSON and MessagePack protocols. The latter is less -commonly used, but can be more performant. If +commonly used, but can be more performant. If performance is an issue (and MessagePack is an acceptable solution), you may benefit from using it instead of JSON. And since msgspec supports both protocols with a consistent interface, switching from msgspec.json to diff --git a/searchindex.js b/searchindex.js index 4751cad6..5f270656 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api", "benchmarks", "changelog", "constraints", "converters", "examples/asyncio-kv", "examples/conda-repodata", "examples/edgedb", "examples/geojson", "examples/index", "examples/pyproject-toml", "extending", "index", "inspect", "install", "jsonschema", "perf-tips", "schema-evolution", "structs", "supported-types", "usage", "why"], "filenames": ["api.rst", "benchmarks.rst", "changelog.rst", "constraints.rst", "converters.rst", "examples/asyncio-kv.rst", "examples/conda-repodata.rst", "examples/edgedb.rst", "examples/geojson.rst", "examples/index.rst", "examples/pyproject-toml.rst", "extending.rst", "index.rst", "inspect.rst", "install.rst", "jsonschema.rst", "perf-tips.rst", "schema-evolution.rst", "structs.rst", "supported-types.rst", "usage.rst", "why.rst"], "titles": ["API Docs", "Benchmarks", "Changelog", "Constraints", "Converters", "Asyncio TCP Key-Value Server", "Conda Repodata", "Usage with EdgeDB", "GeoJSON", "Examples", "Parsing pyproject.toml", "Extending", "msgspec", "Inspecting Types", "Installation", "JSON Schema", "Performance Tips", "Schema Evolution", "Structs", "Supported Types", "Usage", "Why msgspec?"], "terms": {"class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 19, 20, 21], "msgspec": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20], "A": [0, 1, 2, 3, 5, 8, 10, 12, 13, 15, 16, 17, 18, 19, 20], "base": [0, 2, 10, 14, 18, 19], "defin": [0, 1, 2, 5, 6, 7, 8, 10, 12, 16, 17, 18, 19, 20], "effici": [0, 1, 2, 5, 6, 7, 13, 16, 17, 18, 19, 20, 21], "serializ": 0, "object": [0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21], "field": [0, 2, 4, 6, 7, 8, 10, 13, 17, 19, 21], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21], "type": [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 17, 21], "annot": [0, 2, 3, 5, 8, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21], "mai": [0, 1, 2, 3, 4, 7, 8, 11, 12, 13, 14, 16, 18, 19], "option": [0, 1, 2, 4, 6, 8, 12, 15, 16, 17, 18, 20, 21], "have": [0, 1, 2, 4, 7, 10, 11, 16, 17, 18, 19], "default": [0, 2, 3, 4, 7, 8, 10, 11, 13, 15, 17, 19, 20], "valu": [0, 2, 3, 4, 6, 8, 9, 10, 11, 15, 17, 19], "which": [0, 1, 3, 7, 10, 11, 13, 16, 18, 19], "result": [0, 1, 2, 4, 5, 6, 8, 10, 11, 16, 18, 19], "keyword": [0, 2, 4, 10, 18, 20], "paramet": [0, 2, 18, 19], "constructor": [0, 2], "automat": [0, 7, 18, 19], "__init__": [0, 2, 5, 18], "__eq__": [0, 18], "__repr__": [0, 18], "__copy__": [0, 18], "method": [0, 1, 2, 7, 8, 11, 16, 18, 19, 20], "addit": [0, 1, 2, 4, 7, 10, 11, 12, 13, 14, 18, 19], "can": [0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21], "need": [0, 1, 2, 3, 6, 7, 11, 16, 17, 18, 19, 20, 21], "note": [0, 3, 5, 7, 10, 11, 13, 14, 16, 18, 19, 20], "__new__": [0, 18], "cannot": [0, 18], "overridden": [0, 18], "other": [0, 1, 2, 4, 8, 11, 12, 16, 18, 19, 20, 21], "tupl": [0, 2, 3, 4, 6, 8, 11, 18], "name": [0, 1, 2, 3, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18, 19, 20], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "avail": [0, 1, 2, 18], "via": [0, 11, 14, 18, 20, 21], "__struct_fields__": [0, 18], "attribut": [0, 2, 4, 6, 18, 19, 21], "enabl": [0, 2, 4, 16, 18], "pass": [0, 1, 2, 5, 10, 11, 16, 18, 19, 20], "definit": [0, 2, 10, 16, 17], "see": [0, 1, 2, 3, 4, 6, 8, 13, 16, 18, 19, 20], "exampl": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 17, 18, 19, 20], "below": [0, 8, 11], "These": [0, 2, 3, 4, 7, 11, 18, 19], "configur": [0, 2, 4, 10, 11, 16, 18], "also": [0, 1, 2, 3, 7, 8, 10, 12, 13, 16, 18, 19, 21], "runtim": [0, 2, 19, 20, 21], "through": [0, 2, 7, 12, 18, 19, 20], "__struct_config__": [0, 2], "frozen": [0, 2, 19], "bool": [0, 2, 4, 13, 18], "fals": [0, 1, 2, 3, 4, 13, 18, 19, 20], "whether": [0, 3, 4, 10, 18, 19], "instanc": [0, 1, 2, 7, 13, 19], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "pseudo": 0, "immut": [0, 2, 18], "If": [0, 2, 3, 4, 5, 7, 11, 12, 14, 16, 17, 18, 19, 20, 21], "true": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 17, 18, 19], "assign": [0, 18, 19], "disabl": [0, 2, 16, 19], "correspond": [0, 5, 13, 15, 18, 19], "__hash__": [0, 18], "order": [0, 1, 2, 16, 19, 21], "__lt__": [0, 18], "__le__": [0, 18], "__gt__": [0, 18], "__ge__": [0, 18], "gener": [0, 2, 13, 15, 18], "eq": [0, 2, 18], "an": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 17, 18, 19, 20, 21], "set": [0, 2, 3, 4, 5, 8, 10, 12, 15, 16, 17, 18, 20], "compar": [0, 1, 6, 8, 12, 18, 19], "ident": [0, 4, 18, 19], "alon": [0, 12], "kw_onli": [0, 2, 18], "all": [0, 1, 2, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "treat": [0, 2, 3, 4, 19], "onli": [0, 1, 2, 3, 4, 6, 10, 16, 17, 18, 19], "argument": [0, 2, 4, 11, 18, 20], "omit_default": [0, 2, 10, 16, 18], "should": [0, 2, 4, 10, 11, 12, 16, 18, 19, 21], "omit": [0, 2, 10, 16, 19], "from": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 15, 16, 17, 18, 19, 21], "encod": [0, 2, 4, 5, 8, 10, 11, 12, 15, 17, 19], "reduc": [0, 1, 2, 18], "messag": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 16, 17, 18, 19, 20, 21], "size": [0, 2, 6, 12, 16, 18], "often": [0, 3, 16, 18, 20], "improv": [0, 2, 10, 16, 18, 19], "decod": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 17, 19, 21], "perform": [0, 1, 2, 6, 8, 12, 18, 19, 20], "forbid_unknown_field": [0, 2, 10, 13, 18], "error": [0, 2, 4, 5, 8, 10, 17, 18, 19, 20, 21], "rais": [0, 2, 4, 5, 7, 10, 11, 18, 19, 20, 21], "unknown": [0, 2, 10, 17, 19], "encount": [0, 16, 18], "while": [0, 2, 3, 5, 6, 8, 11, 12, 13, 16, 18, 19, 21], "skip": [0, 1, 17, 18], "tag": [0, 1, 2, 5, 8, 13, 15, 19], "str": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 20], "int": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 15, 16, 18, 20], "callabl": [0, 18], "none": [0, 1, 2, 3, 4, 5, 8, 10, 12, 13, 15, 17, 18, 20], "along": [0, 4, 7, 11, 15, 16], "tag_field": [0, 13, 18], "union": [0, 2, 5, 8], "support": [0, 1, 2, 3, 4, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21], "either": [0, 2, 3, 14, 18, 19], "non": [0, 2, 3, 4, 7, 16, 18], "consid": [0, 11, 18], "In": [0, 1, 2, 4, 5, 7, 8, 10, 12, 13, 18, 19], "case": [0, 1, 2, 4, 5, 10, 11, 13, 18, 19, 20], "extra": [0, 1, 2, 10, 14, 19], "ad": [0, 2, 3, 4, 7, 12, 18, 20], "differenti": [0, 2, 8, 19], "dure": [0, 1, 2, 6, 11, 12, 18, 19, 20], "altern": [0, 1, 2, 12, 16, 19], "you": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21], "provid": [0, 2, 4, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "string": [0, 1, 2, 4, 7, 10, 11, 15, 16, 18, 19, 20], "less": [0, 1, 3, 16, 18, 19, 21], "commonli": [0, 2, 16, 18], "directli": [0, 7, 11, 16, 18, 19], "e": [0, 1, 2, 3, 11, 16, 18, 19, 20], "g": [0, 1, 2, 11, 16, 18, 19, 20], "my": [0, 16, 18], "take": [0, 1, 4, 6, 8, 13, 18], "qualnam": [0, 18], "return": [0, 4, 5, 6, 7, 10, 11, 18, 19], "valid": [0, 2, 3, 4, 5, 8, 10, 12, 13, 19, 20, 21], "lower": [0, 18, 19], "more": [0, 1, 2, 3, 4, 6, 8, 13, 16, 18, 19, 20, 21], "inform": [0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 19, 20], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20], "abov": [0, 1, 3, 4, 7, 8, 10, 16, 18, 19, 20, 21], "renam": [0, 2, 10], "map": [0, 2, 15, 18, 19], "control": 0, "when": [0, 1, 2, 3, 8, 10, 11, 15, 16, 18, 19], "one": [0, 1, 4, 8, 11, 12, 16, 18, 19], "upper": [0, 18], "camel": [0, 18], "pascal": [0, 18], "kebab": [0, 2, 10], "lowercas": [0, 18, 19], "uppercas": [0, 18], "camelcas": [0, 2, 18], "pascalcas": [0, 18], "respect": [0, 2, 7, 12, 19, 20], "miss": [0, 5, 8, 17, 18, 19, 21], "new": [0, 1, 2, 5, 6, 7, 10, 11, 12, 16, 17, 18, 19], "repr_omit_default": [0, 2], "repr": [0, 2], "array_lik": [0, 2, 13, 17, 18, 19], "arrai": [0, 2, 3, 10, 15, 16, 19], "like": [0, 1, 2, 4, 6, 10, 12, 13, 15, 16, 18, 19, 20, 21], "rather": [0, 1, 2, 3, 4, 19, 20, 21], "than": [0, 1, 2, 3, 4, 6, 8, 11, 12, 13, 16, 18, 19, 20, 21], "dict": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 18, 20, 21], "cost": [0, 1, 6, 12, 16, 18, 19, 20], "inscrut": [0, 16, 18], "gc": [0, 1, 2, 18], "garbag": [0, 2, 16], "collect": [0, 2, 11, 16, 19], "help": [0, 10, 21], "pressur": [0, 1], "prevent": [0, 2, 18], "refer": [0, 2, 11, 16, 18], "cycl": [0, 16, 18], "compos": [0, 1, 2, 4, 7, 11, 19], "being": [0, 1, 2, 11], "It": [0, 1, 2, 6, 7, 10, 12, 18, 19, 21], "user": [0, 1, 2, 3, 11, 12, 13, 16, 17, 18, 19, 20], "": [0, 1, 2, 3, 4, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 20, 21], "respons": [0, 5, 18, 19], "ensur": [0, 2, 3, 8, 11, 18, 19], "don": [0, 2, 3, 6, 11, 13, 17, 18, 19, 21], "t": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21], "occur": [0, 18, 19], "weakref": [0, 2], "weak": 0, "includ": [0, 4, 7, 10, 12, 13, 15, 16, 17, 18, 19], "__dict__": [0, 2], "allow": [0, 2, 11, 18, 20, 21], "undeclar": 0, "hold": [0, 10], "privat": 0, "state": [0, 2, 16, 19], "cache_hash": 0, "hash": 0, "comput": 0, "most": [0, 1, 2, 3, 4, 8, 10, 11, 12, 18, 19, 20], "onc": [0, 2, 6, 16, 18, 19, 20], "cach": [0, 1, 2], "further": [0, 2, 18, 19], "reus": [0, 1, 3, 18, 19], "For": [0, 1, 2, 3, 4, 6, 10, 11, 12, 13, 16, 17, 18, 19, 20], "expens": [0, 18], "small": [0, 1, 2, 5, 6, 16], "amount": [0, 1], "memori": [0, 2, 11, 16, 18], "usag": [0, 2, 5, 9, 11, 16, 19], "here": [0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 19, 20, 21], "we": [0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21], "describ": [0, 8, 12, 16, 18, 19, 20, 21], "dog": 0, "ha": [0, 1, 5, 10, 12, 13, 14, 16, 18, 19, 20, 21], "three": [0, 19], "two": [0, 1, 7, 8, 11, 18, 19], "requir": [0, 1, 2, 3, 7, 10, 11, 12, 13, 14, 15, 16, 18, 19], "breed": 0, "is_good_boi": 0, "snicker": 0, "corgi": 0, "part": [0, 5, 6, 11, 16, 18, 19], "point": [0, 3, 4, 8, 13, 18, 19], "x": [0, 4, 16, 18, 19], "float": [0, 2, 3, 4, 8, 11, 15, 18], "y": [0, 4, 18, 19], "1": [0, 3, 4, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 20], "5": [0, 1, 4, 5, 8, 10, 18, 19], "2": [0, 1, 3, 4, 5, 7, 8, 10, 11, 16, 18, 19, 20], "0": [0, 1, 3, 5, 8, 10, 11, 12, 13, 15, 18, 19], "hashabl": [0, 2, 4, 18, 19], "nodefault": [0, 2], "default_factori": [0, 2, 13, 18], "ani": [0, 1, 2, 4, 5, 6, 10, 11, 13, 16, 17, 18, 20], "zero": [0, 12], "function": [0, 1, 2, 4, 11, 13, 16, 18, 19, 20], "call": [0, 1, 2, 3, 4, 10, 12, 13, 16, 18, 19, 20], "per": [0, 1, 2, 8, 10, 18, 19], "constant": 0, "present": [0, 5, 10, 16, 18, 19], "overrid": [0, 2, 18], "level": [0, 2, 4, 8, 10, 16], "defstruct": [0, 2, 18], "modul": [0, 2, 3, 4, 7, 8, 12, 13, 18, 19, 20], "namespac": [0, 2], "dynam": [0, 2, 10, 18], "iter": [0, 2, 4, 13], "element": [0, 2, 19], "without": [0, 1, 2, 14, 16, 17, 18, 19, 21], "specifi": [0, 1, 2, 3, 4, 5, 10, 17, 18, 19, 20], "infer": 0, "caller": 0, "stack": 0, "frame": [0, 5], "add": [0, 1, 2, 4, 5, 7, 17, 18, 19], "kwarg": [0, 2, 18], "import": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20], "email": [0, 10, 12, 13, 17, 18, 19, 20], "group": [0, 3, 12, 13, 17, 18, 19, 20], "alic": [0, 10, 12, 17, 18, 19, 20], "replac": [0, 2], "chang": [0, 2, 13, 17, 18, 21], "creat": [0, 1, 2, 3, 5, 6, 8, 11, 16, 18, 19, 20], "same": [0, 1, 2, 3, 6, 7, 16, 18, 19], "origin": [0, 1, 18], "new_struct": 0, "obj": [0, 4, 7, 11], "3": [0, 1, 3, 4, 5, 7, 8, 10, 14, 15, 18, 19, 20], "dataclass": [0, 1, 2, 4, 7, 12, 16, 18], "asdict": [0, 2], "astupl": [0, 2], "to_builtin": [0, 2, 4], "force_setattr": 0, "even": [0, 1, 10, 11, 18], "main": [0, 10, 13], "modifi": [0, 18], "__post_init__": [0, 2, 18, 19], "befor": [0, 1, 2, 5, 7, 18], "violat": 0, "guarante": [0, 12], "potenti": [0, 19], "unsaf": [0, 20], "know": [0, 7, 11, 16, 18, 19], "what": [0, 21], "re": [0, 1, 6, 7, 11, 12, 16, 18, 19, 20, 21], "do": [0, 1, 16, 18, 19, 21], "type_or_inst": 0, "get": [0, 2, 5, 6, 18, 19], "about": [0, 6, 16, 19], "fieldinfo": 0, "encode_nam": [0, 13], "factori": [0, 18], "record": [0, 7], "seen": 0, "python": [0, 1, 2, 4, 5, 6, 7, 8, 10, 12, 14, 16, 18, 19, 20, 21], "code": [0, 2, 4, 11, 13, 16, 17, 18, 19, 21], "field_on": [0, 18], "differ": [0, 1, 2, 4, 5, 6, 8, 18, 19, 21], "fieldon": [0, 18], "full": [0, 1, 2, 5, 6, 8, 10, 12, 16], "Will": [0, 8], "structconfig": 0, "given": [0, 11, 18, 19], "access": [0, 1, 2, 6, 20, 21], "expos": [0, 2, 16], "follow": [0, 1, 3, 4, 6, 7, 11, 16, 17, 18, 19, 21], "match": [0, 1, 2, 3, 4, 5, 19, 20], "docstr": [0, 2], "detail": [0, 3, 16], "singleton": [0, 2, 19], "indic": [0, 1, 2, 18, 19], "gt": [0, 2, 3, 13, 15], "ge": [0, 3, 13], "lt": [0, 2, 3, 13], "le": [0, 3, 13], "multiple_of": [0, 3, 13], "pattern": [0, 1, 2, 3, 5, 11, 13, 19], "min_length": [0, 3, 13], "max_length": [0, 3, 13], "tz": [0, 2, 3, 19], "titl": [0, 7, 13, 15], "descript": [0, 2, 10, 13, 15], "extra_json_schema": [0, 13], "metadata": [0, 2, 6, 10, 13], "constraint": [0, 2, 10, 13, 15, 19], "must": [0, 3, 17, 18, 19], "greater": [0, 2, 3, 18], "equal": [0, 1, 3, 16], "multipl": [0, 2, 3, 13, 15, 16, 19, 20], "regex": [0, 3], "against": [0, 1, 2, 21], "unanchor": [0, 3], "mean": [0, 1, 3, 6, 7, 8, 11, 16, 17, 18], "search": 0, "length": [0, 2, 3, 5, 11, 15, 19], "timezon": [0, 2, 3, 7, 19], "datetim": [0, 1, 2, 4, 7], "time": [0, 1, 2, 3, 4, 6, 16, 18, 21], "awar": [0, 2, 3, 19], "naiv": [0, 2, 3, 19], "accept": [0, 3, 16, 19], "list": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 15, 16, 18, 20], "recurs": 0, "merg": [0, 13], "conflict": [0, 18], "autogener": 0, "first": [0, 1, 6, 18, 19], "alia": [0, 19], "nonnegativeint": 0, "integ": [0, 2, 3, 5, 11, 15, 16, 18, 19, 20], "locat": 0, "second": [0, 1, 2, 19], "inlin": [0, 3], "restrict": [0, 2, 10, 18, 19], "maximum": [0, 3, 16], "32": [0, 2, 3, 11, 13, 19], "charact": [0, 2, 16, 19], "ag": [0, 19], "b": [0, 3, 7, 11, 12, 16, 18, 19, 20], "25": [0, 1, 6, 19], "buffer": [0, 1, 2, 5, 11, 19], "contain": [0, 1, 2, 6, 7, 10, 11, 16, 18, 19], "common": [0, 1, 2, 4, 10, 12, 16, 18, 19], "won": [0, 10, 16, 18, 20, 21], "immedi": [0, 7], "instead": [0, 1, 2, 7, 16, 18, 19, 20], "view": [0, 11, 16], "where": [0, 2, 4, 16, 18, 19, 20], "whose": 0, "after": [0, 1, 2, 7, 18, 19], "wrap": [0, 2, 3, 4, 7, 13, 18, 19], "pre": [0, 1, 2, 4, 16, 19], "compon": [0, 2, 3, 15, 18, 19], "larger": [0, 7, 11, 15, 16, 19], "pai": [0, 6, 16], "them": [0, 6, 7, 8, 10, 16, 18, 19], "msg": [0, 4, 7, 10, 11, 12, 16, 17, 18, 19], "byte": [0, 1, 2, 5, 6, 10, 11, 16, 18], "bytearrai": [0, 2, 3, 16, 18], "memoryview": [0, 11], "One": [0, 2, 4, 16, 18, 19], "implement": [0, 1, 2, 4, 7, 8, 12, 13, 16, 17, 19], "protocol": [0, 1, 2, 4, 12, 14, 16, 19, 20, 21], "empti": [0, 2, 3, 16, 18], "copi": [0, 1, 2, 16, 19], "back": [0, 5, 11, 12, 16, 18, 19], "happen": [0, 19], "releas": [0, 2, 13, 14], "kept": 0, "drop": [0, 2], "work": [0, 2, 3, 4, 5, 7, 8, 10, 11, 12, 16, 17, 18, 19], "explicit": [0, 18], "featur": [0, 8, 12, 14, 19], "attr": [0, 1, 2, 4, 7, 12, 18], "unsettyp": [0, 2, 19], "isn": [0, 1, 19], "explicitli": [0, 2, 3, 18, 19], "let": [0, 2, 19, 20, 21], "downstream": [0, 2, 10, 19], "consum": [0, 10, 19], "determin": [0, 5, 6, 16, 18, 19], "wa": [0, 8, 10, 11, 18, 19], "left": [0, 19], "null": [0, 12, 15, 18, 19], "enc_hook": [0, 4, 7, 11], "decimal_format": [0, 19], "uuid_format": [0, 19], "canon": [0, 19], "aren": [0, 1, 18, 19, 21], "unsupport": [0, 7, 19], "notimplementederror": [0, 7, 11], "number": [0, 6, 11, 15, 16, 17, 18, 19], "format": [0, 1, 2, 7, 8, 10, 19], "decim": [0, 2], "thei": [0, 1, 3, 5, 8, 11, 12, 16, 18, 19, 21], "recommend": [0, 2, 3, 7, 12, 16, 18, 19], "sinc": [0, 1, 2, 4, 6, 10, 11, 16, 18, 19], "precis": [0, 3, 19], "loss": [0, 19], "some": [0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 16, 18, 19, 20, 21], "librari": [0, 2, 4, 6, 7, 8, 10, 11, 12, 14, 18, 19, 20, 21], "hex": [0, 19], "uuid": [0, 2, 18], "hyphen": 0, "serial": [0, 1, 2, 4, 7, 11, 12, 16, 17, 18, 19, 20, 21], "data": [0, 1, 6, 8, 10, 11, 12, 16, 18, 19, 20], "encode_into": [0, 2, 16], "offset": [0, 16], "exist": [0, 2, 4, 5, 10, 16, 17, 18, 19], "upon": [0, 21], "success": [0, 11], "truncat": [0, 19], "end": [0, 16, 17, 18], "underli": [0, 1, 6, 11], "append": [0, 16, 17], "later": [0, 1, 6, 18, 19], "start": [0, 6, 13, 16, 19], "write": [0, 1, 5, 14, 16, 19, 21], "encode_lin": [0, 2], "item": [0, 15, 18, 19], "newlin": [0, 2, 16], "delimit": [0, 2], "line": [0, 3, 4, 10, 12, 18, 19, 20], "ben": [0, 19], "n": [0, 1, 5, 16], "strict": [0, 2, 4, 19], "dec_hook": [0, 2, 4, 11, 19], "float_hook": [0, 2], "form": [0, 11, 19], "check": [0, 1, 2, 10, 12, 18, 19, 21], "coercion": [0, 2, 4], "rule": [0, 2, 4, 18, 20], "wider": [0, 2, 4], "callback": [0, 2, 11], "handl": [0, 2, 4, 5, 8, 10, 11, 12, 16, 18, 19, 21], "custom": [0, 2, 18, 19, 21], "signatur": [0, 11, 18], "expect": [0, 3, 4, 10, 12, 13, 18, 19, 20], "represent": [0, 7, 11, 18, 19], "basic": [0, 14], "hook": [0, 2, 18], "transform": [0, 11], "untyp": [0, 2, 4, 10, 11, 18], "liter": [0, 2], "val": [0, 5, 18], "equival": [0, 1, 19], "buf": [0, 11], "deseri": [0, 1, 11, 12, 17, 18, 19], "decode_lin": [0, 2], "4": [0, 1, 3, 4, 5, 8, 10, 16, 18, 19], "dec": [0, 11, 18], "typeerror": [0, 11, 18], "indent": 0, "usual": [0, 11], "human": [0, 19], "readabl": [0, 8, 18, 19], "how": [0, 2, 6, 7, 11, 19, 20], "mani": [0, 1, 2, 6, 12, 16, 19, 21], "space": [0, 18, 21], "singl": [0, 1, 2, 5, 10, 13, 15, 16, 19], "between": [0, 2, 6, 8, 11, 13, 18, 19, 20, 21], "neg": [0, 19], "strip": [0, 2, 7], "unnecessari": [0, 1, 16, 19], "whitespac": 0, "minim": 0, "output": [0, 1, 4, 7, 10, 19, 20], "input": [0, 2, 4, 10, 16, 18, 19], "otherwis": [0, 4, 11], "msgpack": [0, 1, 2, 4, 5, 11, 16, 19, 20], "big": [0, 5, 16, 19], "endian": [0, 5, 16, 19], "binari": [0, 1, 2, 11, 12, 19], "128": [0, 19], "bit": [0, 19], "ext_hook": [0, 11], "extens": [0, 2, 7, 12, 17, 19], "found": [0, 1, 3, 5, 6, 8, 10, 13, 19], "out": [0, 5, 7, 8, 10, 15, 16], "caus": [0, 2, 18], "persist": [0, 11], "ext": [0, 11, 19], "repres": [0, 1, 8, 11, 12, 17, 18], "127": [0, 5, 11], "payload": [0, 16], "third": [0, 1, 19], "parti": [0, 1, 19], "pyyaml": [0, 14], "instal": [0, 1, 7], "schema_hook": 0, "share": [0, 16, 18], "extract": [0, 4, 6], "store": [0, 1, 2, 5, 10, 16, 18, 19], "top": [0, 2, 6, 13, 16], "def": [0, 4, 5, 6, 7, 10, 11, 15, 18, 19], "want": [0, 2, 11, 14, 16, 17, 18, 19, 21], "over": [0, 1, 16, 18, 19, 21], "schema_compon": [0, 15], "ref_templ": 0, "separ": [0, 20], "templat": 0, "ref": [0, 15], "intend": [0, 2, 7], "somewher": [0, 18], "might": [0, 13, 18], "openapi": [0, 13, 15], "each": [0, 1, 3, 5, 6, 8, 11, 16, 18, 19, 20], "from_attribut": [0, 2, 4, 7], "str_kei": [0, 4], "builtin_typ": [0, 2, 4], "accordingli": [0, 11], "impli": 0, "coerc": [0, 2, 4, 19], "databas": [0, 4, 7, 19], "queri": [0, 4, 6], "orm": [0, 2, 4], "structur": [0, 1, 2, 4, 6, 7, 12, 18, 19, 20], "builtin": [0, 2, 4, 7, 12, 13, 18, 19, 20, 21], "nativ": [0, 1, 2, 4, 12, 16, 19, 21], "convers": [0, 2, 4, 7, 20], "current": [0, 5, 10, 18, 19], "date": [0, 2, 4], "timedelta": [0, 2], "kei": [0, 1, 2, 4, 9, 18, 19], "aqi": 0, "construct": [0, 2], "simpler": 0, "x01": 0, "x02": 0, "complex": [0, 3, 7, 11, 19], "mainli": [0, 15, 18], "unchang": [0, 2], "base64": [0, 2, 19], "type_info": [0, 13], "compat": [0, 2, 7, 12, 13, 15, 19, 20], "multi_type_info": [0, 13], "sequenc": [0, 19], "info": [0, 11], "booltyp": [0, 13], "inttyp": [0, 13], "listtyp": [0, 13], "item_typ": [0, 13], "floattyp": 0, "strtype": [0, 13], "subtyp": 0, "attach": [0, 11], "anytyp": 0, "nonetyp": [0, 13], "bytestyp": 0, "bytearraytyp": 0, "datetimetyp": 0, "timetyp": 0, "datetyp": 0, "timedeltatyp": 0, "uuidtyp": 0, "decimaltyp": 0, "exttyp": 0, "rawtyp": 0, "enumtyp": 0, "cl": [0, 5, 13, 19], "enum": [0, 2], "literaltyp": 0, "possibl": [0, 2, 12, 13, 18, 19], "customtyp": [0, 19], "uniontyp": [0, 13], "properti": [0, 8, 15], "includes_non": 0, "helper": 0, "collectiontyp": 0, "settyp": 0, "etc": [0, 1, 16], "frozensettyp": 0, "frozenset": [0, 2, 3, 4], "vartupletyp": 0, "variad": 0, "tupletyp": 0, "dicttyp": 0, "key_typ": 0, "value_typ": 0, "doesn": [0, 1, 2, 5, 6, 7, 10, 11, 18, 19, 20], "necessarili": 0, "typeddicttyp": 0, "typeddict": [0, 2], "namedtupletyp": 0, "namedtupl": [0, 2, 7], "dataclasstyp": 0, "structtyp": [0, 13], "ignor": [0, 2, 10, 18, 19], "msgspecerror": 0, "encodeerror": [0, 2], "decodeerror": [0, 2], "validationerror": [0, 2, 3, 4, 10, 11, 12, 18, 19, 20], "didn": [0, 4], "hard": 1, "repeatedli": 1, "tight": 1, "loop": [1, 8, 13, 16], "lead": [1, 2, 3, 18, 19], "instruct": 1, "stai": 1, "hot": [1, 16], "branch": [1, 5, 14], "highli": 1, "predict": 1, "That": 1, "real": [1, 11, 19], "world": [1, 19, 20], "nonbias": 1, "wrote": 1, "natur": 1, "whatev": [1, 11], "publish": [1, 2], "go": [1, 7, 18], "well": [1, 2, 5, 6, 7, 8, 10, 11, 12, 13, 18, 19, 21], "so": [1, 2, 5, 6, 11, 18, 19], "peopl": 1, "ve": 1, "tri": 1, "hopefulli": 1, "few": [1, 2, 4, 5, 6, 7, 9, 11, 12, 15, 16, 17, 18, 19, 20], "tradeoff": 1, "make": [1, 2, 3, 5, 8, 16, 18, 19, 20, 21], "choos": [1, 11, 16], "encourag": 1, "your": [1, 2, 7, 11, 12, 14, 16, 18, 19, 21], "own": [1, 11], "decis": 1, "show": [1, 8, 11], "simpl": [1, 2, 4, 6, 18, 20], "file": [1, 3, 6, 10, 12, 16, 18, 19, 20], "created_bi": 1, "created_at": 1, "updated_at": 1, "nbyte": 1, "directori": [1, 7], "content": [1, 6, 16], "ujson": [1, 6, 21], "link": 1, "orjson": [1, 6, 8, 12, 21], "json": [1, 2, 3, 4, 6, 8, 11, 12, 13, 17, 18, 19, 20, 21], "sourc": [1, 5, 6, 8, 10, 12], "workflow": [1, 12, 16], "involv": 1, "send": [1, 5, 11], "around": [1, 2, 11], "veri": [1, 2, 10], "overhead": [1, 2], "domin": [1, 6], "pars": [1, 2, 6, 8, 9, 19, 21], "alloc": [1, 2, 6, 18], "temporari": [1, 16], "chart": 1, "quit": [1, 18], "faster": [1, 2, 6, 8, 12, 18, 19, 21], "those": [1, 2, 11, 16, 18, 21], "partli": [1, 6], "due": [1, 2, 3, 4, 6, 16], "static": [1, 2, 18, 19, 21], "known": [1, 6, 16, 18], "appli": [1, 2, 3, 7, 19], "optim": [1, 2, 6, 16, 18, 19], "reli": [1, 2, 6], "said": 1, "pretti": [1, 2, 5, 7, 18], "quickli": 1, "rel": 1, "oper": [1, 5, 12, 16], "unless": 1, "count": [1, 2, 18], "everi": [1, 6, 13, 16, 18], "microsecond": [1, 2, 19], "choic": [1, 6, 21], "probabl": [1, 21], "matter": [1, 6], "much": [1, 2, 6, 19, 20], "tree": [1, 10], "There": [1, 7, 13, 19], "lot": [1, 18], "longer": [1, 2, 11], "now": [1, 2, 7, 17, 19], "measur": [1, 6, 15, 16, 18], "100": [1, 2, 8], "fair": 1, "post": [1, 4], "tool": [1, 2, 10, 12, 13, 18, 19, 20, 21], "pydant": [1, 12, 18, 19, 20], "cattr": 1, "mashumaro": 1, "plot": 1, "benefit": [1, 12, 16, 18], "done": [1, 3, 7, 14, 16, 18], "secondari": 1, "step": 1, "10x": [1, 2], "12x": [1, 2], "80x": [1, 12], "slower": 1, "reason": 1, "travers": [1, 13], "entir": [1, 6], "slow": [1, 18], "pointer": 1, "chase": 1, "convert": [1, 2, 5, 11, 13, 18, 19], "desir": [1, 18], "model": [1, 19], "contrast": 1, "issu": [1, 2, 3, 10, 16, 18, 19], "taken": 1, "correctli": 1, "avoid": [1, 2, 6, 18, 19, 21], "load": [1, 4, 6, 8, 10, 16, 18], "medium": [1, 6], "65": 1, "mib": [1, 6], "noarch": [1, 6], "packag": [1, 2, 6], "conda": [1, 9, 14, 16], "forg": [1, 6, 14], "simdjson": [1, 6], "both": [1, 2, 10, 11, 16, 18, 19], "peak": 1, "increas": [1, 11, 16], "rss": 1, "smaller": [1, 16], "better": [1, 2, 7, 13], "v": [1, 2, 4, 19], "m": [1, 6, 8, 19], "83": [1, 2], "6": [1, 4, 5, 8, 10, 18, 19], "0x": 1, "170": [1, 2], "145": 1, "7x": 1, "383": [1, 2], "2x": [1, 2, 12, 16, 18], "213": 1, "6x": 1, "526": 1, "1x": 1, "230": 1, "8x": 1, "666": 1, "8": [1, 3, 4, 5, 8, 11, 14, 19], "9x": 1, "263": 1, "9": [1, 4, 8], "410": [1, 2], "4x": [1, 8], "403": 1, "7": [1, 4, 5, 8, 10], "615": 1, "least": [1, 19], "fastest": [1, 6, 12], "sens": 1, "cheaper": 1, "larg": [1, 2, 13, 16, 18, 19], "realli": 1, "up": [1, 2, 11, 16, 19], "best": [1, 11], "speed": 1, "assumpt": 1, "still": [1, 2, 6, 10, 16, 17, 18, 19], "short": [1, 2], "temporarili": 1, "realloc": [1, 16], "10": [1, 3, 6, 8, 12, 18, 19], "000": 1, "signific": 1, "save": 1, "similar": [1, 8, 11, 18, 19], "effect": [1, 19], "5x": [1, 16, 18], "standard": [1, 2, 4, 8, 12, 14, 18, 19], "abstract": [1, 2], "awai": 1, "boilerpl": 1, "\u03bc": 1, "92": [1, 2], "09": 1, "02": [1, 19], "03": [1, 19], "86": 1, "45": [1, 2, 19], "13": [1, 8], "29": 1, "489": 1, "07": 1, "47": [1, 2], "27": [1, 8], "30": [1, 2, 6, 19], "428": 1, "38": 1, "42": 1, "15": [1, 8], "371": 1, "52": 1, "84": [1, 2], "56": [1, 2], "especi": [1, 18], "cheap": 1, "creation": [1, 2, 18], "roughli": [1, 2], "50x": 1, "comparison": [1, 2, 18], "500x": 1, "70x": [1, 2], "sever": [1, 2, 4, 19], "decreas": [1, 2, 16], "__slots__": 1, "dictionari": [1, 2], "total": [1, 19], "80": [1, 2], "46": 1, "211": [1, 2], "66": [1, 6], "06": [1, 3, 19], "120": [1, 2], "11": [1, 14], "96": 1, "104": [1, 2], "85": [1, 2, 19], "hungri": 1, "largest": 1, "paus": [1, 16], "outer": [1, 7, 19], "layout": 1, "thu": [1, 16], "defer": 1, "track": [1, 2, 18], "complet": [1, 3, 4, 7, 10, 11, 13, 15, 19], "fraction": [1, 12], "lowest": 1, "lack": [1, 19], "16": [1, 3, 11], "75x": 1, "disk": 1, "version": [1, 10, 17, 19], "12": [1, 7, 15, 19], "34": [1, 2], "00x": 1, "64x": 1, "99": 1, "91x": 1, "71": [1, 2], "67x": 1, "combin": [1, 3, 4, 7, 19], "howev": [1, 2, 11, 12, 16, 18, 19, 21], "resolv": 2, "period": [2, 18], "segfault": 2, "cpython": 2, "pr": 2, "561": 2, "struct": [2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 15, 17, 20], "__rich_repr__": [2, 18], "557": 2, "built": 2, "wheel": 2, "558": 2, "_missing_": [2, 19], "532": 2, "fix": [2, 16, 20], "zoneinfo": 2, "534": 2, "538": 2, "relax": 2, "rfc3339": [2, 19], "iso8601": [2, 7, 19], "539": 2, "517": [2, 10], "try": [2, 5], "getattr": [2, 18], "getitem": 2, "519": 2, "521": 2, "485": 2, "499": 2, "overhaul": 2, "501": 2, "declar": [2, 10, 12, 18], "edgedb": [2, 9, 19], "510": 2, "511": 2, "445": 2, "interpret": [2, 19], "unix": [2, 13, 19], "epoch": [2, 19], "452": 2, "subclass": [2, 13, 18, 19], "453": 2, "454": 2, "455": 2, "458": 2, "459": 2, "460": 2, "numer": 2, "463": 2, "465": 2, "466": 2, "preliminari": 2, "beta": 2, "467": 2, "fit": [2, 16], "int64": 2, "uint64": 2, "469": 2, "470": 2, "471": 2, "__attrs_post_init__": [2, 19], "472": 2, "475": 2, "479": 2, "deprec": 2, "from_builtin": 2, "favor": 2, "superset": 2, "old": [2, 17], "431": 2, "419": 2, "427": 2, "lax": [2, 4, 19], "mode": [2, 4, 19], "434": 2, "418": 2, "passthrough": 2, "435": 2, "parametr": [2, 19], "415": 2, "429": 2, "bug": [2, 18], "introduc": 2, "409": 2, "upstream": 2, "properli": [2, 11, 18], "notrequir": 2, "__future__": [2, 5, 8, 18], "386": 2, "393": 2, "396": 2, "398": 2, "break": [2, 13, 17, 21], "No": [2, 18], "normal": [2, 16, 18, 19], "utc": [2, 7, 19], "391": 2, "unhyphen": 2, "392": 2, "fixup": 2, "387": 2, "dedent": 2, "schema": [2, 4, 6, 7, 10, 11, 12, 13, 16, 18, 19, 20, 21], "397": 2, "variant": 2, "__qualname__": 2, "auto": 2, "__name__": [2, 5], "399": 2, "400": 2, "threadsaf": 2, "402": 2, "write_buffer_s": 2, "remov": [2, 5, 16, 18, 19], "__del__": 2, "trashcan": 2, "369": 2, "__setattr__": 2, "376": 2, "378": 2, "leak": [2, 18], "variabl": [2, 19], "380": 2, "381": 2, "363": 2, "365": 2, "prealloc": 2, "367": 2, "323": 2, "322": 2, "328": 2, "util": [2, 5, 15], "inspect": 2, "330": 2, "331": 2, "mixin": 2, "332": 2, "335": 2, "343": 2, "arbitrari": [2, 11], "346": 2, "unset": [2, 13], "doc": [2, 7, 8, 13, 18, 19], "350": 2, "unlik": [2, 18, 20], "event": 2, "were": [2, 7, 18], "previou": [2, 16], "mypi": [2, 10, 12, 18, 19, 20, 21], "dataclass_transform": 2, "352": 2, "final": [2, 19], "354": 2, "356": 2, "inherit": [2, 18], "312": 2, "ones": [2, 19], "258": 2, "266": 2, "302": 2, "yaml": [2, 4, 12, 19, 20], "267": 2, "toml": [2, 4, 9, 12, 19, 20], "268": 2, "262": 2, "300": [2, 19], "arbitrarili": [2, 11], "nest": [2, 6, 13, 16, 19], "newtyp": 2, "272": 2, "invalid": [2, 3, 10, 18, 19], "273": 2, "274": 2, "With": 2, "except": [2, 5, 11, 18, 19], "mutabl": [2, 18], "deepcopi": 2, "pleas": [2, 19], "classvar": [2, 18], "281": 2, "288": 2, "abc": [2, 19], "mutablemap": [2, 19], "290": 2, "292": 2, "messagepack": [2, 12, 17, 19, 20], "294": 2, "298": 2, "249": 2, "251": 2, "raw": [2, 7, 10], "252": [2, 19], "experiment": [2, 13], "build": [2, 10, 13], "253": 2, "meta": [2, 3, 13, 15], "255": 2, "256": [2, 3], "237": 2, "239": 2, "behavior": [2, 11, 18], "242": 2, "shouldn": 2, "anyth": [2, 19], "ll": [2, 7, 8, 11, 16, 19, 21], "reorder": [2, 17, 18], "243": 2, "underscor": [2, 19], "_": [2, 18, 19], "234": 2, "210": 2, "217": 2, "218": 2, "221": 2, "222": 2, "224": 2, "225": 2, "print": [2, 5, 6, 7, 15, 18, 19], "alreadi": [2, 4, 7, 11, 12, 16, 19], "document": [2, 10, 13, 19], "226": 2, "just": [2, 3, 5, 19, 21], "229": 2, "205": 2, "resolut": 2, "timestamp": [2, 7, 19], "201": 2, "limit": [2, 7, 19], "191": 2, "176": 2, "181": 2, "rich": [2, 18], "183": 2, "175": 2, "185": 2, "135": 2, "142": 2, "161": 2, "test": [2, 6, 13, 18], "preleas": 2, "146": 2, "155": 2, "160": 2, "162": 2, "130": 2, "131": 2, "coupl": 2, "dealloc": 2, "routin": 2, "dramat": 2, "speedup": [2, 16, 18], "118": 2, "ascii": [2, 19], "40": [2, 6], "121": 2, "mirror": [2, 7], "122": 2, "averag": [2, 16, 18], "119": 2, "variou": [2, 5, 9, 19], "mostli": [2, 6], "101": 2, "102": [2, 8], "105": 2, "arm": 2, "linux": 2, "mac": 2, "debug": 2, "symbol": 2, "113": 2, "__reduce__": 2, "117": 2, "nogc": 2, "To": [2, 7, 11, 17, 18, 19, 21], "124": [2, 6], "delai": [2, 19], "94": 2, "alter": 2, "major": 2, "snake_cas": [2, 18], "98": 2, "fewer": 2, "benchmark": [2, 6, 8, 12, 16, 18], "interact": [2, 7], "applic": [2, 7, 18, 21], "93": [2, 8], "lookup": 2, "tabl": [2, 10, 19], "heavi": [2, 16], "91": [2, 6], "95": 2, "smatter": 2, "somestructtyp": 2, "significantli": [2, 8], "77": 2, "88": [2, 8], "asarrai": 2, "78": 2, "style": [2, 18], "75": [2, 11], "69": [2, 6], "intenum": 2, "68": 2, "cyclic": [2, 18], "collector": [2, 16, 18], "72": 2, "move": 2, "submodul": [2, 20], "path": [2, 16], "mistyp": [2, 19], "convent": [2, 10, 18], "60": 2, "encodingerror": 2, "decodingerror": 2, "61": 2, "pyright": [2, 10, 12, 18, 19, 20, 21], "caught": [2, 10], "checker": [2, 18], "53": 2, "54": 2, "across": 2, "micro": 2, "visibl": 2, "48": 2, "50": 2, "freelist": 2, "44": 2, "api": [2, 4, 13, 16, 18, 19, 20], "31": 2, "36": 2, "33": 2, "mark": [2, 3, 18], "39": 2, "On": [2, 18], "21": 2, "initi": [2, 7, 18], "oop": [3, 4, 18, 19], "traceback": [3, 4, 10, 12, 18, 19, 20], "recent": [3, 4, 10, 12, 18, 19, 20], "last": [3, 4, 10, 12, 18, 19, 20], "stdin": [3, 12, 18, 19, 20], "got": [3, 4, 10, 12, 18, 19, 20], "suffici": 3, "sometim": [3, 16, 18, 19], "impos": 3, "constrain": [3, 15], "posit": [3, 8, 18], "d": [3, 11, 18, 19, 20], "positiveint": [3, 13], "enforc": 3, "regular": 3, "express": [3, 16], "z_": [3, 13], "z0": [3, 13], "9_": [3, 13], "cpu_limit": 3, "mem_limit": 3, "8192": 3, "1024": 3, "unixnam": [3, 13], "As": [3, 11, 18], "shown": 3, "alias": [3, 18], "elsewher": [3, 19], "integr": [3, 7, 12, 13, 18, 20, 21], "erron": 3, "fine": [3, 16, 18, 21], "github": 3, "minimum": [3, 10], "inclus": [3, 11, 19], "anchor": 3, "prefix": [3, 5], "suffix": [3, 16], "usernam": [3, 13], "2022": 3, "04": [3, 19], "02t18": [3, 19], "18": [3, 19], "00": [3, 19], "zxhhbxbszq": 3, "c": [3, 5, 14, 18], "typic": 4, "wai": [4, 7, 8, 10, 12, 16, 17, 18, 19], "fail": [4, 19], "mismatch": [4, 17], "nice": [4, 5, 8, 10, 18, 19, 21], "design": [4, 11, 12, 18], "pair": [4, 5], "processor": 4, "dump": [4, 8], "could": [4, 5, 10, 16, 19], "high": [4, 8, 10, 12, 18], "cell": [4, 10], "beyond": [4, 19, 21], "among": 4, "url": [4, 10], "querystr": 4, "extend": [4, 16, 19], "look": [4, 13, 18], "anoth": [4, 8, 16, 18, 19], "tomllib": [4, 14], "extern": 4, "almost": 4, "demonstr": [5, 7, 19], "client": [5, 7, 17, 19, 21], "put": [5, 18], "delet": 5, "list_kei": 5, "request": [5, 6, 7, 10, 20, 21], "easier": 5, "boundari": 5, "read": [5, 8, 10, 14, 19], "reader": 5, "async": 5, "prefixed_send": 5, "stream": 5, "streamwrit": 5, "len": [5, 16, 18], "to_byt": [5, 16], "await": 5, "drain": 5, "prefixed_recv": 5, "streamread": 5, "next": 5, "readexactli": 5, "from_byt": 5, "del": 5, "listkei": 5, "self": [5, 16, 18], "host": 5, "port": 5, "8888": 5, "kv": 5, "handle_connect": 5, "writer": 5, "lifetim": 5, "connect": [5, 16], "open": [5, 8, 10, 12, 19], "receiv": 5, "req": 5, "process": [5, 7, 11, 16, 19], "resp": [5, 6], "handle_request": 5, "eoferror": 5, "close": 5, "els": [5, 11, 13, 18, 19], "statement": [5, 13, 19], "pop": 5, "sort": [5, 6], "serve_forev": 5, "start_serv": 5, "f": [5, 6, 7, 8, 10, 11, 18], "serv": [5, 7, 10, 20], "run": [5, 6, 7, 8, 18, 19], "until": [5, 18], "ctrl": 5, "classmethod": [5, 19], "open_connect": 5, "wait_clos": 5, "__main__": 5, "session": 5, "py": [5, 6], "foo": 5, "bar": 5, "fizz": 5, "buzz": 5, "current_repodata": 6, "14": 6, "long": [6, 16, 18], "query_repodata": 6, "139": 6, "73": 6, "commentari": 6, "fairli": [6, 16, 19], "quick": [6, 21], "script": [6, 10], "execut": [6, 7], "fast": [6, 12, 16, 18], "parser": 6, "far": 6, "node": 6, "simd": 6, "blob": 6, "proxi": 6, "lazili": 6, "downsid": [6, 16, 18], "indirect": 6, "beforehand": 6, "doe": [6, 11, 18, 21], "tip": 6, "query_msgspec": 6, "actual": [6, 16, 21], "repo_data": 6, "p": [6, 18, 19], "revers": [6, 11], "query_orjson": 6, "query_json": [6, 7], "query_ujson": 6, "query_simdjson": 6, "download": 6, "http": [6, 10, 14, 18], "anaconda": 6, "org": 6, "raise_for_statu": 6, "lib": 6, "func": 6, "perf_count": 6, "stop": 6, "1000": 6, "2f": 6, "interest": [7, 16], "graph": 7, "relat": 7, "system": [7, 10, 12, 20, 21], "power": 7, "ergonom": [7, 19, 21], "languag": [7, 19], "edgeql": 7, "ecosystem": [7, 19], "tutori": 7, "offici": [7, 19], "quickstart": 7, "assum": 7, "cli": 7, "clone": 7, "repo": 7, "navig": 7, "Then": [7, 17], "project": [7, 10, 12], "init": [7, 19], "server": [7, 9, 17, 21], "person": [7, 19], "movi": 7, "multi": 7, "actor": 7, "insert": 7, "dune": 7, "timoth\u00e9": 7, "chalamet": 7, "zendaya": 7, "insert_data": 7, "create_cli": [7, 19], "query_singl": [7, 19], "select": [7, 19], "filter": [7, 19], "duck": [7, 19], "id": [7, 8, 15, 19], "b21913c4": 7, "3b68": 7, "11ee": [7, 19], "89b0": 7, "2f0b6819503d": 7, "b219195a": 7, "5b3794805cc7": 7, "b2192058": 7, "f7d83b95fb13": 7, "query_single_json": 7, "edgedb_json": 7, "server_vers": 7, "query_result": 7, "2023": 7, "08": 7, "15t14": 7, "37": 7, "733731z": 7, "besid": 7, "remain": 7, "box": 7, "datedur": 7, "relativedur": 7, "isinst": [7, 11], "durat": [7, 16, 19], "cal": [7, 19], "date_dur": 7, "year": 7, "dai": [7, 19], "p1y2d": 7, "side": 7, "logic": [7, 18, 21], "wish": [7, 14, 18], "specif": [7, 8, 11, 12, 13, 15, 16, 19], "our": [7, 13], "would": [7, 11, 19], "mutat": 7, "popular": 8, "geograph": 8, "Its": 8, "nine": 8, "seven": 8, "geometri": 8, "plu": 8, "wrong": [8, 21], "fill": 8, "relev": [8, 19], "disambigu": 8, "coordin": 8, "multipoint": 8, "linestr": 8, "multilinestr": 8, "polygon": 8, "multipolygon": 8, "geometrycollect": 8, "featurecollect": 8, "msgspec_geojson": 8, "canada": 8, "rb": [8, 10], "timeit": 8, "\u00b5": 8, "std": 8, "dev": [8, 16], "67": 8, "20": 8, "3x": 8, "accomplish": [9, 11, 17], "task": 9, "geojson": 9, "asyncio": 9, "tcp": 9, "repodata": [9, 16], "pyproject": 9, "pep": [10, 18, 19], "518": 10, "depend": [10, 12, 16, 19], "develop": [10, 14], "black": 10, "pytest": 10, "seri": 10, "enhanc": 10, "propos": [10, 19], "independ": 10, "621": 10, "under": [10, 18], "catch": [10, 18], "typo": [10, 18], "earli": 10, "requires_python": 10, "buildsystem": 10, "build_backend": 10, "backend_path": 10, "readm": 10, "text": [10, 16], "content_typ": 10, "licens": 10, "contributor": 10, "author": 10, "maintain": 10, "classifi": 10, "optional_depend": 10, "gui_script": 10, "entry_point": 10, "build_system": 10, "starlett": 10, "urllib": 10, "githubusercont": 10, "com": [10, 14, 18, 19], "master": 10, "urlopen": 10, "hatchl": 10, "proper": [10, 19], "mutual": 10, "exclus": 10, "caveat": [10, 16, 19], "misspel": [10, 18], "silent": 10, "plai": 10, "tab": 10, "usabl": 10, "backend": 10, "myproject": 10, "super": 10, "great": [10, 18], "shmalic": 10, "compani": [10, 18, 19], "spot": 10, "msgpspec": 10, "detect": [10, 18], "valueerror": [11, 18, 19], "face": [11, 18], "context": [11, 18], "togeth": 11, "illustr": 11, "roundtrip": [11, 19], "sent": [11, 21], "dequ": 11, "imag": 11, "mymessag": 11, "field_1": 11, "field_2": 11, "enc": [11, 19], "thing": [11, 13, 18], "msg2": 11, "assert": 11, "consist": [11, 16, 19, 20], "By": [11, 16, 18, 19], "ext2": 11, "manual": [11, 14, 18], "commun": [11, 21], "perhap": [11, 16, 18], "imaginari": 11, "doubl": 11, "fulli": [11, 18], "uniqu": [11, 18], "complex_type_cod": 11, "pack": 11, "dd": 11, "unpack": 11, "root": 11, "5j": 11, "keep": 11, "accident": [11, 18], "necessari": 11, "regularli": 12, "wide": [12, 20, 21], "varieti": [12, 18, 20, 21], "familiar": 12, "speedi": [12, 18], "feel": 12, "100x": 12, "lightweight": [12, 18], "greatest": 12, "though": [12, 16, 21], "admin": [12, 17, 18, 19, 20], "engin": [12, 17, 18, 19, 20], "bob": [12, 17, 18, 19], "123": [12, 18, 19, 20], "retain": 12, "niciti": 12, "outperform": 12, "friendli": [12, 21], "excel": [12, 20], "editor": [12, 20], "flexibl": [12, 18, 19, 21], "rang": 12, "correct": 12, "strictli": [12, 19], "compliant": 12, "stronger": 12, "organ": 12, "nautilustrad": 12, "litestar": 12, "sanic": 12, "mosec": 12, "pioreactor": 12, "anywidget": 12, "promis": 13, "interfac": [13, 16, 20], "stabil": 13, "introspect": 13, "purpos": [13, 19, 20], "hypothesi": 13, "compound": 13, "find": [13, 16, 18, 19], "particular": 13, "_to_schema": 13, "pip": 14, "platform": 14, "tomli": 14, "tomli_w": 14, "hasn": 14, "been": 14, "yet": [14, 19], "git": 14, "jcrist": 14, "2020": 15, "positivefloat": 15, "dimens": [15, 19], "product": 15, "centimet": 15, "width": [15, 16], "height": 15, "catalog": 15, "price": 15, "exclusiveminimum": 15, "anyof": 15, "trick": 16, "squeez": 16, "sane": 16, "good": 16, "idea": 16, "intern": 16, "setup": 16, "goe": [16, 21], "sensit": 16, "input_buff": 16, "prefer": [16, 18, 19], "redund": [16, 18], "benefici": [16, 18], "inher": 16, "sai": [16, 19], "twitter": 16, "tweet": 16, "care": 16, "favorit": 16, "never": [16, 18], "full_text": 16, "favorite_count": 16, "example_json": 16, "70": 16, "Of": 16, "cours": 16, "bottleneck": 16, "techniqu": 16, "depth": 16, "possibli": [16, 19], "capac": 16, "socket": 16, "overwrit": 16, "sendal": 16, "expand": 16, "afterward": 16, "bloat": 16, "sy": 16, "getsizeof": 16, "__sizeof__": 16, "reflect": 16, "written": [16, 18], "slowdown": 16, "realist": 16, "workload": [16, 18], "place": [16, 18, 19], "come": 16, "json_msg": 16, "full_payload": 16, "someth": [16, 19, 21], "excess": 16, "64": [16, 19], "prepend": 16, "its": [16, 18], "uint32": 16, "front": 16, "latter": [16, 19], "solut": [16, 18], "And": 16, "switch": [16, 20], "painless": 16, "live": [16, 18], "suffer": 16, "frequenc": 16, "problem": 16, "certain": [16, 18, 20], "particip": [16, 18], "advanc": 16, "tout": 16, "higher": [16, 18], "my_first_field": 16, "my_second_field": 16, "older": 17, "deserializ": 17, "newer": 17, "smoothli": 17, "guidelin": 17, "suppos": 17, "had": 17, "msgpsec": 17, "phone": 17, "wouldn": 17, "prior": 17, "_optional_": 17, "user2": 17, "updat": 17, "exchang": 17, "likewis": [17, 19], "old_dec": 17, "new_dec": 17, "new_msg": 17, "financ": [17, 19], "512": 17, "867": 17, "5309": 17, "old_msg": 17, "individu": [18, 20], "__ne__": 18, "__match_args__": 18, "forbidden": 18, "2d": 18, "to_dict": 18, "uuid4": 18, "f63219d5": 18, "e9ca": 18, "4ae8": 18, "afd0": 18, "cba30e84222d": 18, "319a6c0f": 18, "2841": 18, "4439": 18, "8bc8": 18, "2c1daf7d77a2": 18, "kind": 18, "itself": 18, "occas": 18, "gotcha": 18, "lambda": 18, "functool": 18, "partial": 18, "forward": 18, "syntact": 18, "sugar": 18, "semant": 18, "mystruct": 18, "interv": 18, "low": 18, "direct": 18, "exclud": 18, "consequ": 18, "vm": 18, "thankfulli": 18, "mix": 18, "affect": [18, 20], "a_class_vari": 18, "563": 18, "postpon": 18, "evalu": 18, "spell": 18, "typ": 18, "cv": 18, "improp": 18, "intent": 18, "ever": 18, "unit": [18, 19], "down": 18, "program": 18, "enough": 18, "neglig": 18, "fact": 18, "block": 18, "replic": 18, "636": 18, "where_i": 18, "Not": 18, "addition": [18, 19], "rare": 18, "opt": 18, "fall": 18, "attributeerror": 18, "appropri": 18, "associ": 18, "rest": [18, 20], "unambigu": 18, "quickest": 18, "untag": [18, 19], "within": [18, 19], "op": 18, "taggedbas": 18, "situat": 18, "curiou": 18, "matches_default": 18, "evolut": [18, 21], "unnot": 18, "field_two": 18, "field_twoo": 18, "simplest": 18, "z": [18, 19], "field_z": 18, "ex": 18, "example_field": 18, "examplefield": 18, "fieldtwo": 18, "four": [18, 19], "acronym": 18, "fqdn": 18, "sethostnameasfqdn": 18, "guid": 18, "acroynm": 18, "kubernet": 18, "io": 18, "v1": 18, "19": 18, "podspec": 18, "core": 18, "v1podspec_nam": 18, "service_account_nam": 18, "serviceaccountnam": 18, "set_hostname_as_fqdn": 18, "v1podspec": 18, "arg": 18, "preced": [18, 19], "field_x": 18, "field_i": 18, "fieldx": 18, "point2": 18, "make_dataclass": 18, "who": 18, "understand": 18, "implic": 18, "freed": 18, "free": 18, "trigger": 18, "uncollect": 18, "threshold": 18, "themselv": 18, "referenc": 18, "scalar": 18, "contribut": 18, "ex1": 18, "untrack": 18, "is_track": 18, "ex2": 18, "boost": 18, "tricki": 18, "isol": 18, "frequent": 18, "worthwhil": 18, "likelihood": 18, "latenc": 18, "flag": 19, "intflag": 19, "typealiastyp": 19, "typealia": 19, "typevar": 19, "mutablesequ": 19, "abstractset": 19, "mutableset": 19, "yourself": 19, "attempt": [19, 20], "insensit": 19, "boolean": 19, "vari": 19, "63": 19, "rfc8259": 19, "nonfinit": 19, "nan": 19, "infin": 19, "accur": 19, "ieee754": 19, "inf": 19, "escap": 19, "unicod": 19, "utf": 19, "hello": [19, 20], "xf0": 19, "x9d": 19, "x84": 19, "x9e": 19, "bin": 19, "eng": 19, "hour": 19, "tz_awar": 19, "2021": 19, "tzinfo": 19, "000123": 19, "21600": 19, "tz_naiv": 19, "1617405490": 19, "iso": 19, "8601": 19, "underspecifi": 19, "stricter": 19, "subset": 19, "h": 19, "sign": 19, "whole": [19, 21], "negat": 19, "letter": 19, "segment": 19, "minut": 19, "digit": 19, "p0d": 19, "p1d": 19, "pt1h30": 19, "pt1": 19, "5h": 19, "pt1m30": 19, "90": 19, "pt1h30m25": 19, "java": 19, "javascript": 19, "tempor": 19, "pendulum": 19, "produc": 19, "interchang": 19, "pt123": 19, "p1dt30": 19, "5m": 19, "400000": 19, "rfc4122": 19, "u": 19, "c4524ac0": 19, "e81": 19, "4aa8": 19, "a595": 19, "0aec605a659a": 19, "uuid_hex": 19, "c4524ac0e81e4aa8a5950aec605a659a": 19, "uuid_byt": 19, "2345": 19, "1234567891234567811": 19, "shortest": 19, "float_val": 19, "trail": 19, "12345678912345678": 19, "although": 19, "wrong_typ": 19, "chad": 19, "twenti": 19, "dob": 19, "local_d": 19, "1984": 19, "01": 19, "ordereddict": 19, "At": 19, "typing_extens": 19, "backport": 19, "initvar": 19, "_not_": 19, "carol": 19, "doug": 19, "thirti": 19, "a6b951cc": 19, "2d00": 19, "91aa": 19, "b3f17e9898c": 19, "__attrs_pre_init__": 19, "think": 19, "page": 19, "forbid": 19, "unknown_field": 19, "david": 19, "anywher": 19, "member": 19, "fruit": 19, "appl": 19, "banana": 19, "grape": 19, "jobstat": 19, "succeed": 19, "_value2member_map_": 19, "bad": 19, "Their": 19, "pure": 19, "aid": 19, "analysi": [19, 21], "userid": 19, "1234": 19, "substitut": 19, "whenev": 19, "learn": [19, 21], "concret": 19, "pagin": 19, "wrapper": 19, "per_pag": 19, "json_str": 19, "dan": 19, "hr": 19, "ellen": 19, "team": 19, "some_other_messag": 19, "unparametr": 19, "bound": 19, "ambigu": 19, "alwai": 19, "fixabl": 19, "simpli": 19, "fragment": 19, "complic": 19, "point1d": 19, "point2d": 19, "point3d": 19, "decode_point": 19, "composit": 19, "point_typ": 19, "elif": 19, "too": 19, "finish": 19, "manner": 19, "expon": 19, "1e10": 19, "nil": 19, "x81": 20, "xa5hello": 20, "xa5world": 20, "handler": 20, "richer": 20, "bill": 20, "devop": 20, "implicit": 20, "cast": 20, "network": 21, "agre": 21, "decent": 21, "ubiquit": 21, "throw": 21, "500": 21, "poor": 21, "decoupl": 21, "futur": 21, "sure": 21, "evolv": 21, "magnitud": 21, "hope": 21, "focu": 21}, "objects": {"msgspec": [[0, 0, 1, "", "DecodeError"], [0, 0, 1, "", "EncodeError"], [0, 1, 1, "", "Meta"], [0, 0, 1, "", "MsgspecError"], [0, 2, 1, "", "NODEFAULT"], [0, 1, 1, "", "Raw"], [0, 1, 1, "", "Struct"], [0, 2, 1, "", "UNSET"], [0, 1, 1, "", "UnsetType"], [0, 0, 1, "", "ValidationError"], [0, 4, 1, "", "convert"], [0, 4, 1, "", "defstruct"], [0, 4, 1, "", "field"], [0, 4, 1, "", "to_builtins"]], "msgspec.Raw": [[0, 3, 1, "", "copy"]], "msgspec.inspect": [[0, 1, 1, "", "AnyType"], [0, 1, 1, "", "BoolType"], [0, 1, 1, "", "ByteArrayType"], [0, 1, 1, "", "BytesType"], [0, 1, 1, "", "CollectionType"], [0, 1, 1, "", "CustomType"], [0, 1, 1, "", "DataclassType"], [0, 1, 1, "", "DateTimeType"], [0, 1, 1, "", "DateType"], [0, 1, 1, "", "DecimalType"], [0, 1, 1, "", "DictType"], [0, 1, 1, "", "EnumType"], [0, 1, 1, "", "ExtType"], [0, 1, 1, "", "Field"], [0, 1, 1, "", "FloatType"], [0, 1, 1, "", "FrozenSetType"], [0, 1, 1, "", "IntType"], [0, 1, 1, "", "ListType"], [0, 1, 1, "", "LiteralType"], [0, 1, 1, "", "Metadata"], [0, 1, 1, "", "NamedTupleType"], [0, 1, 1, "", "NoneType"], [0, 1, 1, "", "RawType"], [0, 1, 1, "", "SetType"], [0, 1, 1, "", "StrType"], [0, 1, 1, "", "StructType"], [0, 1, 1, "", "TimeDeltaType"], [0, 1, 1, "", "TimeType"], [0, 1, 1, "", "TupleType"], [0, 1, 1, "", "Type"], [0, 1, 1, "", "TypedDictType"], [0, 1, 1, "", "UUIDType"], [0, 1, 1, "", "UnionType"], [0, 1, 1, "", "VarTupleType"], [0, 4, 1, "", "multi_type_info"], [0, 4, 1, "", "type_info"]], "msgspec.inspect.UnionType": [[0, 5, 1, "", "includes_none"]], "msgspec.json": [[0, 1, 1, "", "Decoder"], [0, 1, 1, "", "Encoder"], [0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"], [0, 4, 1, "", "format"], [0, 4, 1, "", "schema"], [0, 4, 1, "", "schema_components"]], "msgspec.json.Decoder": [[0, 3, 1, "", "decode"], [0, 3, 1, "", "decode_lines"]], "msgspec.json.Encoder": [[0, 3, 1, "", "encode"], [0, 3, 1, "", "encode_into"], [0, 3, 1, "", "encode_lines"]], "msgspec.msgpack": [[0, 1, 1, "", "Decoder"], [0, 1, 1, "", "Encoder"], [0, 1, 1, "", "Ext"], [0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"]], "msgspec.msgpack.Decoder": [[0, 3, 1, "", "decode"]], "msgspec.msgpack.Encoder": [[0, 3, 1, "", "encode"], [0, 3, 1, "", "encode_into"]], "msgspec.msgpack.Ext": [[0, 6, 1, "", "code"], [0, 6, 1, "", "data"]], "msgspec.structs": [[0, 1, 1, "", "FieldInfo"], [0, 1, 1, "", "StructConfig"], [0, 4, 1, "", "asdict"], [0, 4, 1, "", "astuple"], [0, 4, 1, "", "fields"], [0, 4, 1, "", "force_setattr"], [0, 4, 1, "", "replace"]], "msgspec.toml": [[0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"]], "msgspec.yaml": [[0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"]]}, "objtypes": {"0": "py:exception", "1": "py:class", "2": "py:data", "3": "py:method", "4": "py:function", "5": "py:property", "6": "py:attribute"}, "objnames": {"0": ["py", "exception", "Python exception"], "1": ["py", "class", "Python class"], "2": ["py", "data", "Python data"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"], "6": ["py", "attribute", "Python attribute"]}, "titleterms": {"api": 0, "doc": 0, "struct": [0, 1, 7, 16, 18, 19], "meta": 0, "raw": [0, 19], "unset": [0, 19], "json": [0, 7, 15, 16], "messagepack": [0, 11, 16], "yaml": [0, 14], "toml": [0, 10, 14], "schema": [0, 1, 15, 17], "convert": [0, 4, 7], "inspect": [0, 13], "except": 0, "benchmark": 1, "encod": [1, 7, 16, 18, 20], "decod": [1, 16, 18, 20], "1": [1, 2], "object": 1, "1000": 1, "valid": [1, 18], "memori": 1, "usag": [1, 7, 20], "garbag": [1, 18], "collect": [1, 18], "librari": 1, "size": 1, "changelog": 2, "version": 2, "0": 2, "18": 2, "4": 2, "2023": 2, "10": 2, "04": 2, "3": 2, "03": 2, "2": 2, "08": 2, "26": 2, "16": 2, "17": 2, "07": 2, "11": 2, "06": 2, "12": 2, "15": 2, "05": 2, "19": 2, "14": 2, "02": 2, "13": 2, "09": 2, "01": 2, "2022": 2, "9": 2, "27": 2, "8": 2, "7": 2, "20": 2, "6": 2, "5": 2, "28": 2, "23": 2, "2021": 2, "25": 2, "constraint": 3, "numer": 3, "string": 3, "datetim": [3, 19], "byte": [3, 19], "sequenc": 3, "map": [3, 11], "asyncio": 5, "tcp": 5, "kei": 5, "valu": [5, 16, 18], "server": 5, "conda": 6, "repodata": 6, "edgedb": 7, "setup": 7, "queri": 7, "result": 7, "support": [7, 19], "other": 7, "type": [7, 11, 13, 18, 19, 20], "geojson": 8, "exampl": [9, 15], "pars": 10, "pyproject": 10, "extend": 11, "from": [11, 14], "nativ": 11, "defin": 11, "custom": 11, "extens": 11, "onli": 11, "msgspec": [12, 21], "highlight": 12, "us": [12, 16], "By": 12, "instal": 14, "option": [14, 19], "depend": 14, "github": 14, "perform": 16, "tip": 16, "reus": 16, "avoid": 16, "default": [16, 18], "unus": 16, "field": [16, 18], "reduc": 16, "alloc": 16, "an": 16, "output": 16, "buffer": 16, "line": 16, "delimit": 16, "length": 16, "prefix": 16, "frame": 16, "gc": 16, "fals": 16, "array_lik": 16, "true": 16, "evolut": 17, "post": 18, "init": 18, "process": 18, "order": 18, "class": 18, "variabl": 18, "pattern": 18, "match": 18, "equal": 18, "frozen": 18, "instanc": 18, "tag": 18, "union": [18, 19], "omit": 18, "forbid": 18, "unknown": 18, "renam": 18, "arrai": 18, "runtim": 18, "definit": 18, "disabl": 18, "advanc": 18, "none": 19, "bool": 19, "int": 19, "float": 19, "str": 19, "bytearrai": 19, "memoryview": 19, "date": 19, "time": 19, "timedelta": 19, "uuid": 19, "decim": 19, "list": 19, "tupl": 19, "set": 19, "frozenset": 19, "namedtupl": 19, "dict": 19, "typeddict": 19, "dataclass": 19, "attr": 19, "enum": 19, "intenum": 19, "strenum": 19, "liter": 19, "newtyp": 19, "alias": 19, "gener": 19, "abstract": 19, "ani": 19, "strict": 20, "v": 20, "lax": 20, "mode": 20, "why": 21}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 58}, "alltitles": {"API Docs": [[0, "api-docs"]], "Structs": [[0, "structs"], [18, "structs"]], "Meta": [[0, "meta"]], "Raw": [[0, "raw"], [19, "raw"]], "Unset": [[0, "unset"]], "JSON": [[0, "json"]], "MessagePack": [[0, "messagepack"]], "YAML": [[0, "yaml"], [14, "yaml"]], "TOML": [[0, "toml"], [14, "toml"]], "JSON Schema": [[0, "json-schema"], [15, "json-schema"]], "Converters": [[0, "converters"], [4, "converters"]], "Inspect": [[0, "inspect"]], "Exceptions": [[0, "exceptions"]], "Benchmarks": [[1, "benchmarks"]], "Benchmark - Encoding/Decoding": [[1, "benchmark-encoding-decoding"]], "1 Object": [[1, "object"]], "1000 Objects": [[1, "objects"]], "Benchmark - Schema Validation": [[1, "benchmark-schema-validation"]], "Benchmark - Memory Usage": [[1, "benchmark-memory-usage"]], "Benchmark - Structs": [[1, "benchmark-structs"]], "Benchmark - Garbage Collection": [[1, "benchmark-garbage-collection"]], "Benchmark - Library Size": [[1, "benchmark-library-size"]], "Changelog": [[2, "changelog"]], "Version 0.18.4 (2023-10-04)": [[2, "version-0-18-4-2023-10-04"]], "Version 0.18.3 (2023-10-03)": [[2, "version-0-18-3-2023-10-03"]], "Version 0.18.2 (2023-08-26)": [[2, "version-0-18-2-2023-08-26"]], "Version 0.18.1 (2023-08-16)": [[2, "version-0-18-1-2023-08-16"]], "Version 0.18.0 (2023-08-10)": [[2, "version-0-18-0-2023-08-10"]], "Version 0.17.0 (2023-07-11)": [[2, "version-0-17-0-2023-07-11"]], "Version 0.16.0 (2023-06-12)": [[2, "version-0-16-0-2023-06-12"]], "Version 0.15.1 (2023-05-19)": [[2, "version-0-15-1-2023-05-19"]], "Version 0.15.0 (2023-05-10)": [[2, "version-0-15-0-2023-05-10"]], "Version 0.14.2 (2023-04-19)": [[2, "version-0-14-2-2023-04-19"]], "Version 0.14.1 (2023-04-07)": [[2, "version-0-14-1-2023-04-07"]], "Version 0.14.0 (2023-04-02)": [[2, "version-0-14-0-2023-04-02"]], "Version 0.13.1 (2023-02-09)": [[2, "version-0-13-1-2023-02-09"]], "Version 0.13.0 (2023-02-08)": [[2, "version-0-13-0-2023-02-08"]], "Version 0.12.0 (2023-01-05)": [[2, "version-0-12-0-2023-01-05"]], "Version 0.11.0 (2022-12-19)": [[2, "version-0-11-0-2022-12-19"]], "Version 0.10.1 (2022-12-08)": [[2, "version-0-10-1-2022-12-08"]], "Version 0.10.0 (2022-12-07)": [[2, "version-0-10-0-2022-12-07"]], "Version 0.9.1 (2022-10-27)": [[2, "version-0-9-1-2022-10-27"]], "Version 0.9.0 (2022-09-13)": [[2, "version-0-9-0-2022-09-13"]], "Version 0.8.0 (2022-08-01)": [[2, "version-0-8-0-2022-08-01"]], "Version 0.7.1 (2022-06-27)": [[2, "version-0-7-1-2022-06-27"]], "Version 0.7.0 (2022-06-20)": [[2, "version-0-7-0-2022-06-20"]], "Version 0.6.0 (2022-04-06)": [[2, "version-0-6-0-2022-04-06"]], "Version 0.5.0 (2022-03-09)": [[2, "version-0-5-0-2022-03-09"]], "Version 0.4.2 (2022-02-28)": [[2, "version-0-4-2-2022-02-28"]], "Version 0.4.1 (2022-02-23)": [[2, "version-0-4-1-2022-02-23"]], "Version 0.4.0 (2022-02-08)": [[2, "version-0-4-0-2022-02-08"]], "Version 0.3.2 (2021-07-23)": [[2, "version-0-3-2-2021-07-23"]], "Version 0.3.1 (2021-07-12)": [[2, "version-0-3-1-2021-07-12"]], "Version 0.3.0 (2021-07-07)": [[2, "version-0-3-0-2021-07-07"]], "Version 0.2.0 (2021-02-25)": [[2, "version-0-2-0-2021-02-25"]], "Version 0.1.0 (2021-02-23)": [[2, "version-0-1-0-2021-02-23"]], "Constraints": [[3, "constraints"]], "Numeric Constraints": [[3, "numeric-constraints"]], "String Constraints": [[3, "string-constraints"]], "Datetime Constraints": [[3, "datetime-constraints"]], "Bytes Constraints": [[3, "bytes-constraints"]], "Sequence Constraints": [[3, "sequence-constraints"]], "Mapping Constraints": [[3, "mapping-constraints"]], "Asyncio TCP Key-Value Server": [[5, "asyncio-tcp-key-value-server"]], "Conda Repodata": [[6, "conda-repodata"]], "Usage with EdgeDB": [[7, "usage-with-edgedb"]], "Setup": [[7, "setup"]], "JSON Encoding Query Results": [[7, "json-encoding-query-results"]], "Supporting Other EdgeDB Types": [[7, "supporting-other-edgedb-types"]], "Converting Results to Structs": [[7, "converting-results-to-structs"]], "GeoJSON": [[8, "geojson"]], "Examples": [[9, "examples"]], "Parsing pyproject.toml": [[10, "parsing-pyproject-toml"]], "Extending": [[11, "extending"]], "Mapping to/from native types": [[11, "mapping-to-from-native-types"]], "Defining a custom extension (MessagePack only)": [[11, "defining-a-custom-extension-messagepack-only"]], "msgspec": [[12, "msgspec"]], "Highlights": [[12, "highlights"]], "Used By": [[12, "used-by"]], "Inspecting Types": [[13, "inspecting-types"]], "Installation": [[14, "installation"]], "Optional Dependencies": [[14, "optional-dependencies"]], "Installing from GitHub": [[14, "installing-from-github"]], "Example": [[15, "example"]], "Performance Tips": [[16, "performance-tips"]], "Reuse Encoders/Decoders": [[16, "reuse-encoders-decoders"]], "Use Structs": [[16, "use-structs"]], "Avoid Encoding Default Values": [[16, "avoid-encoding-default-values"]], "Avoid Decoding Unused Fields": [[16, "avoid-decoding-unused-fields"]], "Reduce Allocations": [[16, "reduce-allocations"]], "Reusing an output buffer": [[16, "reusing-an-output-buffer"]], "Line-Delimited JSON": [[16, "line-delimited-json"]], "Length-Prefix Framing": [[16, "length-prefix-framing"]], "Use MessagePack": [[16, "use-messagepack"]], "Use gc=False": [[16, "use-gc-false"]], "Use array_like=True": [[16, "use-array-like-true"]], "Schema Evolution": [[17, "schema-evolution"]], "Default Values": [[18, "default-values"]], "Post-Init Processing": [[18, "post-init-processing"]], "Field Ordering": [[18, "field-ordering"]], "Class Variables": [[18, "class-variables"]], "Type Validation": [[18, "type-validation"]], "Pattern Matching": [[18, "pattern-matching"]], "Equality and Order": [[18, "equality-and-order"]], "Frozen Instances": [[18, "frozen-instances"]], "Tagged Unions": [[18, "tagged-unions"]], "Omitting Default Values": [[18, "omitting-default-values"]], "Forbidding Unknown Fields": [[18, "forbidding-unknown-fields"]], "Renaming Fields": [[18, "renaming-fields"]], "Encoding/Decoding as Arrays": [[18, "encoding-decoding-as-arrays"]], "Runtime Definition": [[18, "runtime-definition"]], "Disabling Garbage Collection (Advanced)": [[18, "disabling-garbage-collection-advanced"]], "Supported Types": [[19, "supported-types"]], "None": [[19, "none"]], "bool": [[19, "bool"]], "int": [[19, "int"]], "float": [[19, "float"]], "str": [[19, "str"]], "bytes / bytearray / memoryview": [[19, "bytes-bytearray-memoryview"]], "datetime": [[19, "datetime"]], "date": [[19, "date"]], "time": [[19, "time"]], "timedelta": [[19, "timedelta"]], "uuid": [[19, "uuid"]], "decimal": [[19, "decimal"]], "list / tuple / set / frozenset": [[19, "list-tuple-set-frozenset"]], "NamedTuple": [[19, "namedtuple"]], "dict": [[19, "dict"]], "TypedDict": [[19, "typeddict"]], "dataclasses": [[19, "dataclasses"]], "attrs": [[19, "attrs"]], "Struct": [[19, "struct"]], "UNSET": [[19, "unset"]], "Enum / IntEnum / StrEnum": [[19, "enum-intenum-strenum"]], "Literal": [[19, "literal"]], "NewType": [[19, "newtype"]], "Type Aliases": [[19, "type-aliases"]], "Generic Types": [[19, "generic-types"]], "Abstract Types": [[19, "abstract-types"]], "Union / Optional": [[19, "union-optional"]], "Any": [[19, "any"]], "Usage": [[20, "usage"]], "Encoding": [[20, "encoding"]], "Decoding": [[20, "decoding"]], "Typed Decoding": [[20, "typed-decoding"]], "\u201cStrict\u201d vs \u201cLax\u201d Mode": [[20, "strict-vs-lax-mode"]], "Why msgspec?": [[21, "why-msgspec"]]}, "indexentries": {"anytype (class in msgspec.inspect)": [[0, "msgspec.inspect.AnyType"]], "booltype (class in msgspec.inspect)": [[0, "msgspec.inspect.BoolType"]], "bytearraytype (class in msgspec.inspect)": [[0, "msgspec.inspect.ByteArrayType"]], "bytestype (class in msgspec.inspect)": [[0, "msgspec.inspect.BytesType"]], "collectiontype (class in msgspec.inspect)": [[0, "msgspec.inspect.CollectionType"]], "customtype (class in msgspec.inspect)": [[0, "msgspec.inspect.CustomType"]], "dataclasstype (class in msgspec.inspect)": [[0, "msgspec.inspect.DataclassType"]], "datetimetype (class in msgspec.inspect)": [[0, "msgspec.inspect.DateTimeType"]], "datetype (class in msgspec.inspect)": [[0, "msgspec.inspect.DateType"]], "decimaltype (class in msgspec.inspect)": [[0, "msgspec.inspect.DecimalType"]], "decodeerror": [[0, "msgspec.DecodeError"]], "decoder (class in msgspec.json)": [[0, "msgspec.json.Decoder"]], "decoder (class in msgspec.msgpack)": [[0, "msgspec.msgpack.Decoder"]], "dicttype (class in msgspec.inspect)": [[0, "msgspec.inspect.DictType"]], "encodeerror": [[0, "msgspec.EncodeError"]], "encoder (class in msgspec.json)": [[0, "msgspec.json.Encoder"]], "encoder (class in msgspec.msgpack)": [[0, "msgspec.msgpack.Encoder"]], "enumtype (class in msgspec.inspect)": [[0, "msgspec.inspect.EnumType"]], "ext (class in msgspec.msgpack)": [[0, "msgspec.msgpack.Ext"]], "exttype (class in msgspec.inspect)": [[0, "msgspec.inspect.ExtType"]], "field (class in msgspec.inspect)": [[0, "msgspec.inspect.Field"]], "fieldinfo (class in msgspec.structs)": [[0, "msgspec.structs.FieldInfo"]], "floattype (class in msgspec.inspect)": [[0, "msgspec.inspect.FloatType"]], "frozensettype (class in msgspec.inspect)": [[0, "msgspec.inspect.FrozenSetType"]], "inttype (class in msgspec.inspect)": [[0, "msgspec.inspect.IntType"]], "listtype (class in msgspec.inspect)": [[0, "msgspec.inspect.ListType"]], "literaltype (class in msgspec.inspect)": [[0, "msgspec.inspect.LiteralType"]], "meta (class in msgspec)": [[0, "msgspec.Meta"]], "metadata (class in msgspec.inspect)": [[0, "msgspec.inspect.Metadata"]], "msgspecerror": [[0, "msgspec.MsgspecError"]], "nodefault (in module msgspec)": [[0, "msgspec.NODEFAULT"]], "namedtupletype (class in msgspec.inspect)": [[0, "msgspec.inspect.NamedTupleType"]], "nonetype (class in msgspec.inspect)": [[0, "msgspec.inspect.NoneType"]], "raw (class in msgspec)": [[0, "msgspec.Raw"]], "rawtype (class in msgspec.inspect)": [[0, "msgspec.inspect.RawType"]], "settype (class in msgspec.inspect)": [[0, "msgspec.inspect.SetType"]], "strtype (class in msgspec.inspect)": [[0, "msgspec.inspect.StrType"]], "struct (class in msgspec)": [[0, "msgspec.Struct"]], "structconfig (class in msgspec.structs)": [[0, "msgspec.structs.StructConfig"]], "structtype (class in msgspec.inspect)": [[0, "msgspec.inspect.StructType"]], "timedeltatype (class in msgspec.inspect)": [[0, "msgspec.inspect.TimeDeltaType"]], "timetype (class in msgspec.inspect)": [[0, "msgspec.inspect.TimeType"]], "tupletype (class in msgspec.inspect)": [[0, "msgspec.inspect.TupleType"]], "type (class in msgspec.inspect)": [[0, "msgspec.inspect.Type"]], "typeddicttype (class in msgspec.inspect)": [[0, "msgspec.inspect.TypedDictType"]], "unset (in module msgspec)": [[0, "msgspec.UNSET"]], "uuidtype (class in msgspec.inspect)": [[0, "msgspec.inspect.UUIDType"]], "uniontype (class in msgspec.inspect)": [[0, "msgspec.inspect.UnionType"]], "unsettype (class in msgspec)": [[0, "msgspec.UnsetType"]], "validationerror": [[0, "msgspec.ValidationError"]], "vartupletype (class in msgspec.inspect)": [[0, "msgspec.inspect.VarTupleType"]], "asdict() (in module msgspec.structs)": [[0, "msgspec.structs.asdict"]], "astuple() (in module msgspec.structs)": [[0, "msgspec.structs.astuple"]], "code (msgspec.msgpack.ext attribute)": [[0, "msgspec.msgpack.Ext.code"]], "convert() (in module msgspec)": [[0, "msgspec.convert"]], "copy() (msgspec.raw method)": [[0, "msgspec.Raw.copy"]], "data (msgspec.msgpack.ext attribute)": [[0, "msgspec.msgpack.Ext.data"]], "decode() (in module msgspec.json)": [[0, "msgspec.json.decode"]], "decode() (in module msgspec.msgpack)": [[0, "msgspec.msgpack.decode"]], "decode() (in module msgspec.toml)": [[0, "msgspec.toml.decode"]], "decode() (in module msgspec.yaml)": [[0, "msgspec.yaml.decode"]], "decode() (msgspec.json.decoder method)": [[0, "msgspec.json.Decoder.decode"]], "decode() (msgspec.msgpack.decoder method)": [[0, "msgspec.msgpack.Decoder.decode"]], "decode_lines() (msgspec.json.decoder method)": [[0, "msgspec.json.Decoder.decode_lines"]], "defstruct() (in module msgspec)": [[0, "msgspec.defstruct"]], "encode() (in module msgspec.json)": [[0, "msgspec.json.encode"]], "encode() (in module msgspec.msgpack)": [[0, "msgspec.msgpack.encode"]], "encode() (in module msgspec.toml)": [[0, "msgspec.toml.encode"]], "encode() (in module msgspec.yaml)": [[0, "msgspec.yaml.encode"]], "encode() (msgspec.json.encoder method)": [[0, "msgspec.json.Encoder.encode"]], "encode() (msgspec.msgpack.encoder method)": [[0, "msgspec.msgpack.Encoder.encode"]], "encode_into() (msgspec.json.encoder method)": [[0, "msgspec.json.Encoder.encode_into"]], "encode_into() (msgspec.msgpack.encoder method)": [[0, "msgspec.msgpack.Encoder.encode_into"]], "encode_lines() (msgspec.json.encoder method)": [[0, "msgspec.json.Encoder.encode_lines"]], "field() (in module msgspec)": [[0, "msgspec.field"]], "fields() (in module msgspec.structs)": [[0, "msgspec.structs.fields"]], "force_setattr() (in module msgspec.structs)": [[0, "msgspec.structs.force_setattr"]], "format() (in module msgspec.json)": [[0, "msgspec.json.format"]], "includes_none (msgspec.inspect.uniontype property)": [[0, "msgspec.inspect.UnionType.includes_none"]], "multi_type_info() (in module msgspec.inspect)": [[0, "msgspec.inspect.multi_type_info"]], "replace() (in module msgspec.structs)": [[0, "msgspec.structs.replace"]], "schema() (in module msgspec.json)": [[0, "msgspec.json.schema"]], "schema_components() (in module msgspec.json)": [[0, "msgspec.json.schema_components"]], "to_builtins() (in module msgspec)": [[0, "msgspec.to_builtins"]], "type_info() (in module msgspec.inspect)": [[0, "msgspec.inspect.type_info"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["api", "benchmarks", "changelog", "constraints", "converters", "examples/asyncio-kv", "examples/conda-repodata", "examples/edgedb", "examples/geojson", "examples/index", "examples/pyproject-toml", "extending", "index", "inspect", "install", "jsonschema", "perf-tips", "schema-evolution", "structs", "supported-types", "usage", "why"], "filenames": ["api.rst", "benchmarks.rst", "changelog.rst", "constraints.rst", "converters.rst", "examples/asyncio-kv.rst", "examples/conda-repodata.rst", "examples/edgedb.rst", "examples/geojson.rst", "examples/index.rst", "examples/pyproject-toml.rst", "extending.rst", "index.rst", "inspect.rst", "install.rst", "jsonschema.rst", "perf-tips.rst", "schema-evolution.rst", "structs.rst", "supported-types.rst", "usage.rst", "why.rst"], "titles": ["API Docs", "Benchmarks", "Changelog", "Constraints", "Converters", "Asyncio TCP Key-Value Server", "Conda Repodata", "Usage with EdgeDB", "GeoJSON", "Examples", "Parsing pyproject.toml", "Extending", "msgspec", "Inspecting Types", "Installation", "JSON Schema", "Performance Tips", "Schema Evolution", "Structs", "Supported Types", "Usage", "Why msgspec?"], "terms": {"class": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 19, 20, 21], "msgspec": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20], "A": [0, 1, 2, 3, 5, 8, 10, 12, 13, 15, 16, 17, 18, 19, 20], "base": [0, 2, 10, 14, 18, 19], "defin": [0, 1, 2, 5, 6, 7, 8, 10, 12, 16, 17, 18, 19, 20], "effici": [0, 1, 2, 5, 6, 7, 13, 16, 17, 18, 19, 20, 21], "serializ": 0, "object": [0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21], "field": [0, 2, 4, 6, 7, 8, 10, 13, 17, 19, 21], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 15, 16, 18, 19, 20, 21], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 20, 21], "type": [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 17, 21], "annot": [0, 2, 3, 5, 8, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21], "mai": [0, 1, 2, 3, 4, 7, 8, 11, 12, 13, 14, 16, 18, 19], "option": [0, 1, 2, 4, 6, 8, 12, 15, 16, 17, 18, 20, 21], "have": [0, 1, 2, 4, 7, 10, 11, 16, 17, 18, 19], "default": [0, 2, 3, 4, 7, 8, 10, 11, 13, 15, 17, 19, 20], "valu": [0, 2, 3, 4, 6, 8, 9, 10, 11, 15, 17, 19], "which": [0, 1, 3, 7, 10, 11, 13, 16, 18, 19], "result": [0, 1, 2, 4, 5, 6, 8, 10, 11, 16, 18, 19], "keyword": [0, 2, 4, 10, 18, 20], "paramet": [0, 2, 18, 19], "constructor": [0, 2], "automat": [0, 7, 18, 19], "__init__": [0, 2, 5, 18], "__eq__": [0, 18], "__repr__": [0, 18], "__copy__": [0, 18], "method": [0, 2, 7, 8, 11, 16, 18, 19, 20], "addit": [0, 1, 2, 4, 7, 10, 11, 12, 13, 14, 18, 19], "can": [0, 1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21], "need": [0, 1, 2, 3, 6, 7, 11, 16, 17, 18, 19, 20, 21], "note": [0, 3, 5, 7, 10, 11, 13, 14, 16, 18, 19, 20], "__new__": [0, 18], "cannot": [0, 18], "overridden": [0, 18], "other": [0, 1, 2, 4, 8, 11, 12, 16, 18, 19, 20, 21], "tupl": [0, 2, 3, 4, 6, 8, 11, 18], "name": [0, 1, 2, 3, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18, 19, 20], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "avail": [0, 2, 18], "via": [0, 11, 14, 18, 20, 21], "__struct_fields__": [0, 18], "attribut": [0, 2, 4, 6, 18, 19, 21], "enabl": [0, 2, 4, 16, 18], "pass": [0, 1, 2, 5, 10, 11, 16, 18, 19, 20], "definit": [0, 2, 10, 16, 17], "see": [0, 1, 2, 3, 4, 6, 8, 13, 16, 18, 19, 20], "exampl": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 17, 18, 19, 20], "below": [0, 8, 11], "These": [0, 2, 3, 4, 7, 11, 18, 19], "configur": [0, 2, 4, 10, 11, 16, 18], "also": [0, 1, 2, 3, 7, 8, 10, 12, 13, 16, 18, 19, 21], "runtim": [0, 2, 19, 20, 21], "through": [0, 2, 7, 12, 18, 19, 20], "__struct_config__": [0, 2], "frozen": [0, 2, 19], "bool": [0, 2, 4, 13, 18], "fals": [0, 1, 2, 3, 4, 13, 18, 19, 20], "whether": [0, 3, 4, 10, 18, 19], "instanc": [0, 1, 2, 7, 13, 19], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "pseudo": 0, "immut": [0, 2, 18], "If": [0, 2, 3, 4, 5, 7, 11, 12, 14, 16, 17, 18, 19, 20, 21], "true": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 17, 18, 19], "assign": [0, 18, 19], "disabl": [0, 2, 16, 19], "correspond": [0, 5, 13, 15, 18, 19], "__hash__": [0, 18], "order": [0, 1, 2, 16, 19, 21], "__lt__": [0, 18], "__le__": [0, 18], "__gt__": [0, 18], "__ge__": [0, 18], "gener": [0, 2, 13, 15, 18], "eq": [0, 2, 18], "an": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 17, 18, 19, 20, 21], "set": [0, 2, 3, 4, 5, 8, 10, 12, 15, 16, 17, 18, 20], "compar": [0, 1, 6, 8, 12, 18, 19], "ident": [0, 4, 18, 19], "alon": [0, 1, 12], "kw_onli": [0, 1, 2, 18], "all": [0, 1, 2, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "treat": [0, 2, 3, 4, 19], "onli": [0, 1, 2, 3, 4, 6, 10, 16, 17, 18, 19], "argument": [0, 2, 4, 11, 18, 20], "omit_default": [0, 2, 10, 16, 18], "should": [0, 2, 4, 10, 11, 12, 16, 18, 19, 21], "omit": [0, 2, 10, 16, 19], "from": [0, 2, 3, 4, 5, 6, 8, 10, 13, 15, 16, 17, 18, 19, 21], "encod": [0, 1, 2, 4, 5, 8, 10, 11, 12, 15, 17, 19], "reduc": [0, 1, 2, 18], "messag": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 16, 17, 18, 19, 20, 21], "size": [0, 2, 6, 12, 16, 18], "often": [0, 3, 16, 18, 20], "improv": [0, 2, 10, 16, 18, 19], "decod": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 17, 19, 21], "perform": [0, 1, 2, 6, 8, 12, 18, 19, 20], "forbid_unknown_field": [0, 2, 10, 13, 18], "error": [0, 2, 4, 5, 8, 10, 17, 18, 19, 20, 21], "rais": [0, 2, 4, 5, 7, 10, 11, 18, 19, 20, 21], "unknown": [0, 2, 10, 17, 19], "encount": [0, 16, 18], "while": [0, 2, 3, 5, 6, 8, 11, 12, 13, 16, 18, 19, 21], "skip": [0, 1, 17, 18], "tag": [0, 1, 2, 5, 8, 13, 15, 19], "str": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 20], "int": [0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 15, 16, 18, 20], "callabl": [0, 18], "none": [0, 1, 2, 3, 4, 5, 8, 10, 12, 13, 15, 17, 18, 20], "along": [0, 4, 7, 11, 15, 16], "tag_field": [0, 13, 18], "union": [0, 2, 5, 8], "support": [0, 2, 3, 4, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21], "either": [0, 2, 3, 14, 18, 19], "non": [0, 2, 3, 4, 7, 16, 18], "consid": [0, 11, 18], "In": [0, 1, 2, 4, 5, 7, 8, 10, 12, 13, 18, 19], "case": [0, 1, 2, 4, 5, 10, 11, 13, 18, 19, 20], "extra": [0, 1, 2, 10, 14, 19], "ad": [0, 2, 3, 4, 7, 12, 18, 20], "differenti": [0, 2, 8, 19], "dure": [0, 1, 2, 6, 11, 12, 18, 19, 20], "altern": [0, 1, 2, 12, 16, 19], "you": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21], "provid": [0, 1, 2, 4, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "string": [0, 1, 2, 4, 7, 10, 11, 15, 16, 18, 19, 20], "less": [0, 1, 3, 16, 18, 19, 21], "commonli": [0, 2, 16, 18], "directli": [0, 7, 11, 16, 18, 19], "e": [0, 1, 2, 3, 11, 16, 18, 19, 20], "g": [0, 1, 2, 11, 16, 18, 19, 20], "my": [0, 1, 16, 18], "take": [0, 1, 4, 6, 8, 13, 18], "qualnam": [0, 18], "return": [0, 4, 5, 6, 7, 10, 11, 18, 19], "valid": [0, 2, 3, 4, 5, 8, 10, 12, 13, 19, 20, 21], "lower": [0, 18, 19], "more": [0, 1, 2, 3, 4, 6, 8, 13, 16, 18, 19, 20, 21], "inform": [0, 1, 2, 4, 6, 8, 11, 13, 16, 18, 19, 20], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20], "abov": [0, 1, 3, 4, 7, 8, 10, 16, 18, 19, 20, 21], "renam": [0, 2, 10], "map": [0, 2, 15, 18, 19], "control": 0, "when": [0, 1, 2, 3, 8, 10, 11, 15, 16, 18, 19], "one": [0, 1, 4, 8, 11, 12, 16, 18, 19], "upper": [0, 18], "camel": [0, 18], "pascal": [0, 18], "kebab": [0, 2, 10], "lowercas": [0, 18, 19], "uppercas": [0, 18], "camelcas": [0, 2, 18], "pascalcas": [0, 18], "respect": [0, 2, 7, 12, 19, 20], "miss": [0, 5, 8, 17, 18, 19, 21], "new": [0, 1, 2, 5, 6, 7, 10, 11, 12, 16, 17, 18, 19], "repr_omit_default": [0, 2], "repr": [0, 2], "array_lik": [0, 2, 13, 17, 18, 19], "arrai": [0, 2, 3, 10, 15, 16, 19], "like": [0, 1, 2, 4, 6, 10, 12, 13, 15, 16, 18, 19, 20, 21], "rather": [0, 1, 2, 3, 4, 19, 20, 21], "than": [0, 1, 2, 3, 4, 6, 8, 11, 12, 13, 16, 18, 19, 20, 21], "dict": [0, 1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 18, 20, 21], "cost": [0, 1, 6, 12, 16, 18, 19, 20], "inscrut": [0, 16, 18], "gc": [0, 1, 2, 18], "garbag": [0, 2, 16], "collect": [0, 2, 11, 16, 19], "help": [0, 10, 21], "pressur": [0, 1], "prevent": [0, 2, 18], "refer": [0, 2, 11, 16, 18], "cycl": [0, 16, 18], "compos": [0, 1, 2, 4, 7, 11, 19], "being": [0, 1, 2, 11], "It": [0, 1, 2, 6, 7, 10, 12, 18, 19, 21], "user": [0, 1, 2, 3, 11, 12, 13, 16, 17, 18, 19, 20], "": [0, 1, 2, 3, 4, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19, 20, 21], "respons": [0, 5, 18, 19], "ensur": [0, 2, 3, 8, 11, 18, 19], "don": [0, 2, 3, 6, 11, 13, 17, 18, 19, 21], "t": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 16, 17, 18, 19, 20, 21], "occur": [0, 18, 19], "weakref": [0, 2], "weak": 0, "includ": [0, 1, 4, 7, 10, 12, 13, 15, 16, 17, 18, 19], "__dict__": [0, 2], "allow": [0, 2, 11, 18, 20, 21], "undeclar": 0, "hold": [0, 10], "privat": 0, "state": [0, 1, 2, 16, 19], "cache_hash": 0, "hash": 0, "comput": 0, "most": [0, 1, 2, 3, 4, 8, 10, 11, 12, 18, 19, 20], "onc": [0, 2, 6, 16, 18, 19, 20], "cach": [0, 1, 2], "further": [0, 2, 18, 19], "reus": [0, 1, 3, 18, 19], "For": [0, 1, 2, 3, 4, 6, 10, 11, 12, 13, 16, 17, 18, 19, 20], "expens": [0, 18], "small": [0, 1, 2, 5, 6, 16], "amount": [0, 1], "memori": [0, 1, 2, 11, 16, 18], "usag": [0, 1, 2, 5, 9, 11, 16, 19], "here": [0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 19, 20, 21], "we": [0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21], "describ": [0, 8, 12, 16, 18, 19, 20, 21], "dog": 0, "ha": [0, 1, 5, 10, 12, 13, 14, 16, 18, 19, 20, 21], "three": [0, 19], "two": [0, 1, 7, 8, 11, 18, 19], "requir": [0, 1, 2, 3, 7, 10, 11, 12, 13, 14, 15, 16, 18, 19], "breed": 0, "is_good_boi": 0, "snicker": 0, "corgi": 0, "part": [0, 5, 6, 11, 16, 18, 19], "point": [0, 3, 4, 8, 13, 18, 19], "x": [0, 4, 16, 18, 19], "float": [0, 2, 3, 4, 8, 11, 15, 18], "y": [0, 4, 18, 19], "1": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 20], "5": [0, 1, 4, 5, 8, 10, 12, 18, 19], "2": [0, 1, 3, 4, 5, 7, 8, 10, 11, 16, 18, 19, 20], "0": [0, 1, 3, 5, 8, 10, 11, 12, 13, 15, 18, 19], "hashabl": [0, 2, 4, 18, 19], "nodefault": [0, 2], "default_factori": [0, 2, 13, 18], "ani": [0, 1, 2, 4, 5, 6, 10, 11, 13, 16, 17, 18, 20], "zero": [0, 12], "function": [0, 1, 2, 4, 11, 13, 16, 18, 19, 20], "call": [0, 1, 2, 3, 4, 10, 12, 13, 16, 18, 19, 20], "per": [0, 1, 2, 8, 10, 18, 19], "constant": 0, "present": [0, 5, 10, 16, 18, 19], "overrid": [0, 2, 18], "level": [0, 2, 4, 8, 10, 16], "defstruct": [0, 2, 18], "modul": [0, 2, 3, 4, 7, 8, 12, 13, 18, 19, 20], "namespac": [0, 2], "dynam": [0, 2, 10, 18], "iter": [0, 2, 4, 13], "element": [0, 2, 19], "without": [0, 1, 2, 14, 16, 17, 18, 19, 21], "specifi": [0, 1, 2, 3, 4, 5, 10, 17, 18, 19, 20], "infer": 0, "caller": 0, "stack": 0, "frame": [0, 5], "add": [0, 1, 2, 4, 5, 7, 17, 18, 19], "kwarg": [0, 2, 18], "import": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20], "email": [0, 10, 12, 13, 17, 18, 19, 20], "group": [0, 3, 12, 13, 17, 18, 19, 20], "alic": [0, 10, 12, 17, 18, 19, 20], "replac": [0, 1, 2], "chang": [0, 2, 13, 17, 18, 21], "creat": [0, 1, 2, 3, 5, 6, 8, 11, 16, 18, 19, 20], "same": [0, 1, 2, 3, 6, 7, 16, 18, 19], "origin": [0, 1, 18], "new_struct": 0, "obj": [0, 4, 7, 11], "3": [0, 1, 3, 4, 5, 7, 8, 10, 14, 15, 18, 19, 20], "dataclass": [0, 1, 2, 4, 7, 12, 16, 18], "asdict": [0, 2], "astupl": [0, 2], "to_builtin": [0, 2, 4], "force_setattr": 0, "even": [0, 1, 10, 11, 18], "main": [0, 10, 13], "modifi": [0, 18], "__post_init__": [0, 2, 18, 19], "befor": [0, 1, 2, 5, 7, 18], "violat": 0, "guarante": [0, 12], "potenti": [0, 19], "unsaf": [0, 20], "know": [0, 7, 11, 16, 18, 19], "what": [0, 21], "re": [0, 1, 6, 7, 11, 12, 16, 18, 19, 20, 21], "do": [0, 1, 16, 18, 19, 21], "type_or_inst": 0, "get": [0, 2, 5, 6, 18, 19], "about": [0, 6, 16, 19], "fieldinfo": 0, "encode_nam": [0, 13], "factori": [0, 18], "record": [0, 7], "seen": 0, "python": [0, 1, 2, 4, 5, 6, 7, 8, 10, 12, 14, 16, 18, 19, 20, 21], "code": [0, 2, 4, 11, 13, 16, 17, 18, 19, 21], "field_on": [0, 18], "differ": [0, 1, 2, 4, 5, 6, 8, 18, 19, 21], "fieldon": [0, 18], "full": [0, 1, 2, 5, 6, 8, 10, 12, 16], "Will": [0, 8], "structconfig": 0, "given": [0, 11, 18, 19], "access": [0, 1, 2, 6, 20, 21], "expos": [0, 2, 16], "follow": [0, 1, 3, 4, 6, 7, 11, 16, 17, 18, 19, 21], "match": [0, 2, 3, 4, 5, 19, 20], "docstr": [0, 2], "detail": [0, 3, 16], "singleton": [0, 2, 19], "indic": [0, 1, 2, 18, 19], "gt": [0, 2, 3, 13, 15], "ge": [0, 3, 13], "lt": [0, 2, 3, 13], "le": [0, 3, 13], "multiple_of": [0, 3, 13], "pattern": [0, 1, 2, 3, 5, 11, 13, 19], "min_length": [0, 3, 13], "max_length": [0, 3, 13], "tz": [0, 2, 3, 19], "titl": [0, 7, 13, 15], "descript": [0, 2, 10, 13, 15], "extra_json_schema": [0, 13], "metadata": [0, 2, 6, 10, 13], "constraint": [0, 2, 10, 13, 15, 19], "must": [0, 3, 17, 18, 19], "greater": [0, 2, 3, 18], "equal": [0, 1, 3, 16], "multipl": [0, 2, 3, 13, 15, 16, 19, 20], "regex": [0, 3], "against": [0, 1, 2, 21], "unanchor": [0, 3], "mean": [0, 1, 3, 6, 7, 8, 11, 16, 17, 18], "search": 0, "length": [0, 2, 3, 5, 11, 15, 19], "timezon": [0, 2, 3, 7, 19], "datetim": [0, 1, 2, 4, 7], "time": [0, 1, 2, 3, 4, 6, 16, 18, 21], "awar": [0, 2, 3, 19], "naiv": [0, 2, 3, 19], "accept": [0, 3, 16, 19], "list": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 15, 16, 18, 20], "recurs": 0, "merg": [0, 13], "conflict": [0, 18], "autogener": 0, "first": [0, 1, 6, 18, 19], "alia": [0, 19], "nonnegativeint": 0, "integ": [0, 2, 3, 5, 11, 15, 16, 18, 19, 20], "locat": 0, "second": [0, 1, 2, 19], "inlin": [0, 3], "restrict": [0, 2, 10, 18, 19], "maximum": [0, 3, 16], "32": [0, 2, 3, 11, 13, 19], "charact": [0, 2, 16, 19], "ag": [0, 19], "b": [0, 3, 7, 11, 12, 16, 18, 19, 20], "25": [0, 6, 19], "buffer": [0, 1, 2, 5, 11, 19], "contain": [0, 1, 2, 6, 7, 10, 11, 16, 18, 19], "common": [0, 1, 2, 4, 10, 12, 16, 18, 19], "won": [0, 10, 16, 18, 20, 21], "immedi": [0, 7], "instead": [0, 1, 2, 7, 16, 18, 19, 20], "view": [0, 11, 16], "where": [0, 1, 2, 4, 16, 18, 19, 20], "whose": 0, "after": [0, 1, 2, 7, 18, 19], "wrap": [0, 2, 3, 4, 7, 13, 18, 19], "pre": [0, 1, 2, 4, 16, 19], "compon": [0, 2, 3, 15, 18, 19], "larger": [0, 7, 11, 15, 16, 19], "pai": [0, 6, 16], "them": [0, 6, 7, 8, 10, 16, 18, 19], "msg": [0, 4, 7, 10, 11, 12, 16, 17, 18, 19], "byte": [0, 1, 2, 5, 6, 10, 11, 16, 18], "bytearrai": [0, 2, 3, 16, 18], "memoryview": [0, 11], "One": [0, 2, 4, 16, 18, 19], "implement": [0, 1, 2, 4, 7, 8, 12, 13, 16, 17, 19], "protocol": [0, 2, 4, 12, 14, 16, 19, 20, 21], "empti": [0, 2, 3, 16, 18], "copi": [0, 1, 2, 16, 19], "back": [0, 1, 5, 11, 12, 16, 18, 19], "happen": [0, 19], "releas": [0, 2, 13, 14], "kept": 0, "drop": [0, 2], "work": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 16, 17, 18, 19], "explicit": [0, 18], "featur": [0, 8, 12, 14, 19], "attr": [0, 1, 2, 4, 7, 12, 18], "unsettyp": [0, 2, 19], "isn": [0, 1, 19], "explicitli": [0, 2, 3, 18, 19], "let": [0, 2, 19, 20, 21], "downstream": [0, 2, 10, 19], "consum": [0, 10, 19], "determin": [0, 5, 6, 16, 18, 19], "wa": [0, 8, 10, 11, 18, 19], "left": [0, 19], "null": [0, 12, 15, 18, 19], "enc_hook": [0, 4, 7, 11], "decimal_format": [0, 19], "uuid_format": [0, 19], "canon": [0, 19], "aren": [0, 18, 19, 21], "unsupport": [0, 7, 19], "notimplementederror": [0, 7, 11], "number": [0, 6, 11, 15, 16, 17, 18, 19], "format": [0, 1, 2, 7, 8, 10, 19], "decim": [0, 2], "thei": [0, 1, 3, 5, 8, 11, 12, 16, 18, 19, 21], "recommend": [0, 2, 3, 7, 12, 16, 18, 19], "sinc": [0, 1, 2, 4, 6, 10, 11, 16, 18, 19], "precis": [0, 3, 19], "loss": [0, 19], "some": [0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 16, 18, 19, 20, 21], "librari": [0, 2, 4, 6, 7, 8, 10, 11, 12, 14, 18, 19, 20, 21], "hex": [0, 19], "uuid": [0, 2, 18], "hyphen": 0, "serial": [0, 2, 4, 7, 11, 12, 16, 17, 18, 19, 20, 21], "data": [0, 6, 8, 10, 11, 12, 16, 18, 19, 20], "encode_into": [0, 2, 16], "offset": [0, 16], "exist": [0, 2, 4, 5, 10, 16, 17, 18, 19], "upon": [0, 21], "success": [0, 11], "truncat": [0, 19], "end": [0, 16, 17, 18], "underli": [0, 1, 6, 11], "append": [0, 16, 17], "later": [0, 1, 6, 18, 19], "start": [0, 6, 13, 16, 19], "write": [0, 1, 5, 14, 16, 19, 21], "encode_lin": [0, 2], "item": [0, 15, 18, 19], "newlin": [0, 2, 16], "delimit": [0, 2], "line": [0, 3, 4, 10, 12, 18, 19, 20], "ben": [0, 19], "n": [0, 1, 5, 16], "strict": [0, 2, 4, 19], "dec_hook": [0, 2, 4, 11, 19], "float_hook": [0, 2], "form": [0, 11, 19], "check": [0, 2, 10, 12, 18, 19, 21], "coercion": [0, 2, 4], "rule": [0, 2, 4, 18, 20], "wider": [0, 2, 4], "callback": [0, 2, 11], "handl": [0, 2, 4, 5, 8, 10, 11, 12, 16, 18, 19, 21], "custom": [0, 2, 18, 19, 21], "signatur": [0, 11, 18], "expect": [0, 3, 4, 10, 12, 13, 18, 19, 20], "represent": [0, 1, 7, 11, 18, 19], "basic": [0, 14], "hook": [0, 2, 18], "transform": [0, 11], "untyp": [0, 2, 4, 10, 11, 18], "liter": [0, 2], "val": [0, 5, 18], "equival": [0, 1, 19], "buf": [0, 11], "deseri": [0, 1, 11, 12, 17, 18, 19], "decode_lin": [0, 2], "4": [0, 1, 3, 4, 5, 8, 10, 16, 18, 19], "dec": [0, 11, 18], "typeerror": [0, 11, 18], "indent": 0, "usual": [0, 11], "human": [0, 19], "readabl": [0, 8, 18, 19], "how": [0, 2, 6, 7, 11, 19, 20], "mani": [0, 1, 2, 6, 12, 16, 19, 21], "space": [0, 18, 21], "singl": [0, 1, 2, 5, 10, 13, 15, 16, 19], "between": [0, 2, 6, 8, 11, 13, 18, 19, 20, 21], "neg": [0, 19], "strip": [0, 2, 7], "unnecessari": [0, 1, 16, 19], "whitespac": 0, "minim": 0, "output": [0, 1, 4, 7, 10, 19, 20], "input": [0, 1, 2, 4, 10, 16, 18, 19], "otherwis": [0, 4, 11], "msgpack": [0, 1, 2, 4, 5, 11, 16, 19, 20], "big": [0, 5, 16, 19], "endian": [0, 5, 16, 19], "binari": [0, 2, 11, 12, 19], "128": [0, 19], "bit": [0, 19], "ext_hook": [0, 11], "extens": [0, 2, 7, 12, 17, 19], "found": [0, 1, 3, 5, 6, 8, 10, 13, 19], "out": [0, 5, 7, 8, 10, 15, 16], "caus": [0, 2, 18], "persist": [0, 11], "ext": [0, 11, 19], "repres": [0, 1, 8, 11, 12, 17, 18], "127": [0, 5, 11], "payload": [0, 16], "third": [0, 1, 19], "parti": [0, 1, 19], "pyyaml": [0, 14], "instal": [0, 7], "schema_hook": 0, "share": [0, 16, 18], "extract": [0, 4, 6], "store": [0, 1, 2, 5, 10, 16, 18, 19], "top": [0, 2, 6, 13, 16], "def": [0, 4, 5, 6, 7, 10, 11, 15, 18, 19], "want": [0, 2, 11, 14, 16, 17, 18, 19, 21], "over": [0, 1, 16, 18, 19, 21], "schema_compon": [0, 15], "ref_templ": 0, "separ": [0, 20], "templat": 0, "ref": [0, 15], "intend": [0, 2, 7], "somewher": [0, 18], "might": [0, 13, 18], "openapi": [0, 13, 15], "each": [0, 1, 3, 5, 6, 8, 11, 16, 18, 19, 20], "from_attribut": [0, 2, 4, 7], "str_kei": [0, 4], "builtin_typ": [0, 2, 4], "accordingli": [0, 11], "impli": 0, "coerc": [0, 2, 4, 19], "databas": [0, 4, 7, 19], "queri": [0, 4, 6], "orm": [0, 2, 4], "structur": [0, 1, 2, 4, 6, 7, 12, 18, 19, 20], "builtin": [0, 2, 4, 7, 12, 13, 18, 19, 20, 21], "nativ": [0, 2, 4, 12, 16, 19, 21], "convers": [0, 2, 4, 7, 20], "current": [0, 5, 10, 18, 19], "date": [0, 2, 4], "timedelta": [0, 2], "kei": [0, 1, 2, 4, 9, 18, 19], "aqi": 0, "construct": [0, 2], "simpler": 0, "x01": 0, "x02": 0, "complex": [0, 3, 7, 11, 19], "mainli": [0, 15, 18], "unchang": [0, 2], "base64": [0, 2, 19], "type_info": [0, 13], "compat": [0, 2, 7, 12, 13, 15, 19, 20], "multi_type_info": [0, 13], "sequenc": [0, 19], "info": [0, 11], "booltyp": [0, 13], "inttyp": [0, 13], "listtyp": [0, 13], "item_typ": [0, 13], "floattyp": 0, "strtype": [0, 13], "subtyp": 0, "attach": [0, 11], "anytyp": 0, "nonetyp": [0, 13], "bytestyp": 0, "bytearraytyp": 0, "datetimetyp": 0, "timetyp": 0, "datetyp": 0, "timedeltatyp": 0, "uuidtyp": 0, "decimaltyp": 0, "exttyp": 0, "rawtyp": 0, "enumtyp": 0, "cl": [0, 5, 13, 19], "enum": [0, 1, 2], "literaltyp": 0, "possibl": [0, 2, 12, 13, 18, 19], "customtyp": [0, 19], "uniontyp": [0, 13], "properti": [0, 8, 15], "includes_non": 0, "helper": 0, "collectiontyp": 0, "settyp": 0, "etc": [0, 16], "frozensettyp": 0, "frozenset": [0, 2, 3, 4], "vartupletyp": 0, "variad": 0, "tupletyp": 0, "dicttyp": 0, "key_typ": 0, "value_typ": 0, "doesn": [0, 2, 5, 6, 7, 10, 11, 18, 19, 20], "necessarili": 0, "typeddicttyp": 0, "typeddict": [0, 2], "namedtupletyp": 0, "namedtupl": [0, 2, 7], "dataclasstyp": 0, "structtyp": [0, 13], "ignor": [0, 2, 10, 18, 19], "msgspecerror": 0, "encodeerror": [0, 2], "decodeerror": [0, 2], "validationerror": [0, 2, 3, 4, 10, 11, 12, 18, 19, 20], "didn": [0, 4], "hard": 1, "repeatedli": 1, "tight": 1, "loop": [1, 8, 13, 16], "lead": [1, 2, 3, 18, 19], "instruct": 1, "stai": 1, "hot": [1, 16], "branch": [1, 5, 14], "highli": 1, "predict": 1, "That": 1, "real": [1, 11, 19], "world": [1, 19, 20], "nonbias": 1, "wrote": 1, "natur": 1, "whatev": [1, 11], "publish": [1, 2], "go": [1, 7, 18], "well": [1, 2, 5, 6, 7, 8, 10, 11, 12, 13, 18, 19, 21], "so": [1, 2, 5, 6, 11, 18, 19], "peopl": 1, "ve": 1, "tri": 1, "hopefulli": 1, "few": [1, 2, 4, 5, 6, 7, 9, 11, 12, 15, 16, 17, 18, 19, 20], "tradeoff": 1, "make": [1, 2, 3, 5, 8, 16, 18, 19, 20, 21], "choos": [1, 11, 16], "encourag": 1, "your": [1, 2, 7, 11, 12, 14, 16, 18, 19, 21], "own": [1, 11], "decis": 1, "were": [1, 2, 7, 18], "run": [1, 5, 6, 7, 8, 18, 19], "local": 1, "develop": [1, 10, 14], "machin": 1, "2020": [1, 15], "x86": 1, "linux": [1, 2], "laptop": 1, "cpython": [1, 2], "11": [1, 14], "cover": 1, "measur": [1, 6, 15, 16, 18], "thing": [1, 11, 13, 18], "schema": [1, 2, 4, 6, 7, 10, 11, 12, 13, 16, 18, 19, 20, 21], "convert": [1, 2, 5, 11, 13, 18, 19], "friendli": [1, 12, 21], "permiss": 1, "read": [1, 5, 8, 10, 14, 19], "read_writ": 1, "file": [1, 3, 6, 10, 12, 16, 18, 19, 20], "created_bi": 1, "created_at": 1, "updated_bi": 1, "updated_at": 1, "nbyte": 1, "directori": [1, 7], "content": [1, 6, 16], "18": [1, 3, 19], "mashumaro": 1, "pydant": [1, 12, 18, 19, 20], "both": [1, 2, 10, 11, 16, 18, 19], "10": [1, 3, 6, 8, 12, 18, 19], "13": [1, 8], "cattr": 1, "23": 1, "sourc": [1, 5, 6, 8, 10, 12], "6x": 1, "faster": [1, 2, 6, 8, 12, 18, 19, 21], "10x": [1, 2], "12x": [1, 2], "v2": 1, "85x": 1, "v1": [1, 18], "plot": 1, "show": [1, 8, 11], "benefit": [1, 12, 16, 18], "done": [1, 3, 7, 14, 16, 18], "secondari": 1, "step": 1, "slower": 1, "reason": 1, "travers": [1, 13], "entir": [1, 6], "slow": [1, 18], "due": [1, 2, 3, 4, 6, 16], "pointer": 1, "chase": 1, "desir": [1, 18], "model": [1, 19], "alloc": [1, 2, 6, 18], "temporari": [1, 16], "contrast": 1, "issu": [1, 2, 3, 10, 16, 18, 19], "taken": 1, "correctli": 1, "avoid": [1, 2, 6, 18, 19, 21], "up": [1, 2, 11, 16, 19], "peak": 1, "increas": [1, 11, 16], "rss": 1, "load": [1, 4, 6, 8, 10, 16, 18], "fraction": [1, 12], "tool": [1, 2, 10, 12, 13, 18, 19, 20, 21], "its": [1, 16, 18], "high": [1, 4, 8, 10, 12, 18], "itself": [1, 18], "standard": [1, 2, 4, 8, 12, 14, 18, 19], "dump": [1, 4, 8], "sever": [1, 2, 4, 19], "popular": [1, 8], "orjson": [1, 6, 8, 12, 21], "9": [1, 4, 8], "ujson": [1, 6, 21], "rapidjson": 1, "simdjson": [1, 6], "fastest": [1, 6, 12], "par": 1, "next": [1, 5], "abl": 1, "AND": 1, "just": [1, 2, 3, 5, 19, 21], "likewis": [1, 17, 19], "machineri": 1, "7": [1, 4, 5, 8, 10], "ormsgpack": 1, "As": [1, 3, 11, 18], "though": [1, 12, 16, 21], "77": [1, 2], "mib": [1, 6], "noarch": [1, 6], "packag": [1, 2, 6], "conda": [1, 9, 14, 16], "forg": [1, 6, 14], "smaller": [1, 16], "better": [1, 2, 7, 13], "v": [1, 2, 4, 19], "m": [1, 6, 8, 19], "67": [1, 8], "6": [1, 4, 5, 8, 10, 18, 19], "0x": 1, "176": [1, 2], "8": [1, 3, 4, 5, 8, 11, 14, 19], "218": [1, 2], "2x": [1, 2, 16, 18], "630": 1, "295": 1, "4x": [1, 8], "868": 1, "9x": 1, "349": 1, "1087": 1, "1x": 1, "375": 1, "1004": 1, "7x": 1, "406": 1, "691": 1, "603": 1, "1053": 1, "least": [1, 19], "sens": 1, "cheaper": 1, "realli": 1, "best": [1, 11], "speed": 1, "assumpt": 1, "probabl": [1, 21], "still": [1, 2, 6, 10, 16, 17, 18, 19], "short": [1, 2], "temporarili": 1, "realloc": [1, 16], "everi": [1, 6, 13, 16, 18], "000": 1, "signific": 1, "save": 1, "similar": [1, 8, 11, 18, 19], "optim": [1, 2, 6, 16, 18, 19], "effect": [1, 19], "overhead": [1, 2], "oper": [1, 5, 12, 16], "abstract": [1, 2], "awai": 1, "boilerpl": 1, "\u03bc": 1, "12": [1, 7, 15, 19], "51": 1, "09": 1, "02": [1, 19], "03": [1, 19], "88": [1, 2, 8], "35": 1, "08": [1, 7], "16": [1, 3, 11], "483": 1, "37": [1, 7], "14": [1, 6], "87": 1, "506": 1, "36": [1, 2], "673": 1, "47": [1, 2], "54": [1, 2], "60": [1, 2], "much": [1, 2, 6, 19, 20], "especi": [1, 18], "cheap": 1, "creation": [1, 2, 18], "roughli": [1, 2], "17x": 1, "comparison": [1, 2, 18], "30x": 1, "5x": [1, 16, 18], "60x": [1, 12], "decreas": [1, 2, 16], "__slots__": 1, "dictionari": [1, 2], "simpl": [1, 2, 4, 6, 18, 20], "total": [1, 19], "80": [1, 2], "46": 1, "211": [1, 2], "66": [1, 6], "06": [1, 3, 19], "120": [1, 2], "96": 1, "07": 1, "104": [1, 2], "85": [1, 2, 19], "hungri": 1, "largest": 1, "paus": [1, 16], "outer": [1, 7, 19], "layout": 1, "thu": [1, 16], "defer": 1, "track": [1, 2, 18], "complet": [1, 3, 4, 7, 10, 11, 13, 15, 19], "lowest": 1, "lack": [1, 19], "75x": 1, "disk": 1, "closest": 1, "version": [1, 10, 17, 19], "00x": 1, "71": [1, 2], "66x": 1, "applic": [1, 2, 7, 18, 21], "depend": [1, 10, 12, 16, 19], "matter": [1, 6], "15x": 1, "resolv": 2, "period": [2, 18], "segfault": 2, "pr": 2, "561": 2, "struct": [2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 15, 17, 20], "__rich_repr__": [2, 18], "557": 2, "built": 2, "wheel": 2, "558": 2, "_missing_": [2, 19], "532": 2, "fix": [2, 16, 20], "json": [2, 3, 4, 6, 8, 11, 12, 13, 17, 18, 19, 20, 21], "zoneinfo": 2, "534": 2, "538": 2, "relax": 2, "pars": [2, 6, 8, 9, 19, 21], "rfc3339": [2, 19], "iso8601": [2, 7, 19], "539": 2, "517": [2, 10], "try": [2, 5], "getattr": [2, 18], "getitem": 2, "519": 2, "521": 2, "485": 2, "499": 2, "overhaul": 2, "501": 2, "declar": [2, 10, 12, 18], "edgedb": [2, 9, 19], "510": 2, "511": 2, "445": 2, "interpret": [2, 19], "unix": [2, 13, 19], "epoch": [2, 19], "452": 2, "subclass": [2, 13, 18, 19], "453": 2, "454": 2, "455": 2, "458": 2, "459": 2, "460": 2, "numer": 2, "463": 2, "465": 2, "466": 2, "preliminari": 2, "beta": 2, "467": 2, "fit": [2, 16], "int64": 2, "uint64": 2, "469": 2, "470": 2, "471": 2, "__attrs_post_init__": [2, 19], "472": 2, "475": 2, "479": 2, "deprec": 2, "from_builtin": 2, "favor": 2, "superset": 2, "old": [2, 17], "431": 2, "419": 2, "427": 2, "lax": [2, 4, 19], "mode": [2, 4, 19], "434": 2, "418": 2, "passthrough": 2, "435": 2, "parametr": [2, 19], "415": 2, "429": 2, "count": [2, 18], "bug": [2, 18], "introduc": 2, "409": 2, "around": [2, 11], "upstream": 2, "properli": [2, 11, 18], "notrequir": 2, "__future__": [2, 5, 8, 18], "410": 2, "386": 2, "393": 2, "396": 2, "398": 2, "break": [2, 13, 17, 21], "No": [2, 18], "longer": [2, 11], "normal": [2, 16, 18, 19], "utc": [2, 7, 19], "391": 2, "unhyphen": 2, "392": 2, "fixup": 2, "383": 2, "387": 2, "dedent": 2, "397": 2, "variant": 2, "__qualname__": 2, "auto": 2, "__name__": [2, 5], "399": 2, "400": 2, "threadsaf": 2, "402": 2, "write_buffer_s": 2, "remov": [2, 5, 16, 18, 19], "__del__": 2, "trashcan": 2, "369": 2, "__setattr__": 2, "376": 2, "larg": [2, 13, 16, 18, 19], "378": 2, "leak": [2, 18], "variabl": [2, 19], "380": 2, "now": [2, 7, 17, 19], "381": 2, "363": 2, "365": 2, "prealloc": 2, "367": 2, "323": 2, "322": 2, "328": 2, "util": [2, 5, 15], "inspect": 2, "330": 2, "331": 2, "mixin": 2, "332": 2, "335": 2, "343": 2, "arbitrari": [2, 11], "346": 2, "unset": [2, 13], "doc": [2, 7, 8, 13, 18, 19], "350": 2, "unlik": [2, 18, 20], "event": 2, "previou": [2, 16], "mypi": [2, 10, 12, 18, 19, 20, 21], "dataclass_transform": 2, "352": 2, "final": [2, 19], "354": 2, "356": 2, "inherit": [2, 18], "312": 2, "ones": [2, 19], "258": 2, "266": 2, "302": 2, "yaml": [2, 4, 12, 19, 20], "267": 2, "toml": [2, 4, 9, 12, 19, 20], "268": 2, "appli": [2, 3, 7, 19], "262": 2, "300": [2, 19], "arbitrarili": [2, 11], "nest": [2, 6, 13, 16, 19], "newtyp": 2, "272": 2, "invalid": [2, 3, 10, 18, 19], "273": 2, "274": 2, "With": 2, "except": [2, 5, 11, 18, 19], "mutabl": [2, 18], "deepcopi": 2, "pleas": [2, 19], "classvar": [2, 18], "281": 2, "288": 2, "abc": [2, 19], "mutablemap": [2, 19], "290": 2, "292": 2, "messagepack": [2, 12, 17, 19, 20], "294": 2, "298": 2, "249": 2, "251": 2, "raw": [2, 7, 10], "252": [2, 19], "experiment": [2, 13], "build": [2, 10, 13], "253": 2, "meta": [2, 3, 13, 15], "255": 2, "256": [2, 3], "237": 2, "239": 2, "behavior": [2, 11, 18], "242": 2, "shouldn": 2, "anyth": [2, 19], "howev": [2, 11, 12, 16, 18, 19, 21], "ll": [2, 7, 8, 11, 16, 19, 21], "reorder": [2, 17, 18], "243": 2, "underscor": [2, 19], "_": [2, 18, 19], "234": 2, "210": 2, "217": 2, "221": 2, "222": 2, "224": 2, "225": 2, "pretti": [2, 5, 7, 18], "print": [2, 5, 6, 7, 15, 18, 19], "alreadi": [2, 4, 7, 11, 12, 16, 19], "document": [2, 10, 13, 19], "226": 2, "229": 2, "205": 2, "microsecond": [2, 19], "resolut": 2, "timestamp": [2, 7, 19], "201": 2, "limit": [2, 7, 19], "191": 2, "181": 2, "rich": [2, 18], "183": 2, "170": 2, "175": 2, "185": 2, "135": 2, "142": 2, "161": 2, "test": [2, 6, 13, 18], "preleas": 2, "146": 2, "those": [2, 11, 16, 18, 21], "155": 2, "160": 2, "162": 2, "130": 2, "131": 2, "coupl": 2, "dealloc": 2, "routin": 2, "dramat": 2, "speedup": [2, 16, 18], "118": 2, "ascii": [2, 19], "40": [2, 6], "121": 2, "mirror": [2, 7], "veri": [2, 10], "70x": 2, "122": 2, "averag": [2, 16, 18], "119": 2, "variou": [2, 5, 9, 19], "mostli": [2, 6], "100": [2, 8], "101": 2, "102": [2, 8], "105": 2, "arm": 2, "mac": 2, "debug": 2, "symbol": 2, "113": 2, "__reduce__": 2, "117": 2, "nogc": 2, "To": [2, 7, 11, 17, 18, 19, 21], "124": [2, 6], "delai": [2, 19], "92": 2, "94": 2, "alter": 2, "major": 2, "snake_cas": [2, 18], "98": 2, "fewer": 2, "benchmark": [2, 6, 8, 12, 16, 18], "interact": [2, 7], "93": [2, 8], "lookup": 2, "tabl": [2, 10, 19], "heavi": [2, 16], "91": [2, 6], "95": 2, "smatter": 2, "83": 2, "30": [2, 6, 19], "84": 2, "somestructtyp": 2, "significantli": [2, 8], "asarrai": 2, "78": 2, "style": [2, 18], "75": [2, 11], "69": [2, 6], "intenum": 2, "68": 2, "cyclic": [2, 18], "collector": [2, 16, 18], "72": 2, "move": 2, "submodul": [2, 20], "56": 2, "path": [2, 16], "mistyp": [2, 19], "convent": [2, 10, 18], "encodingerror": 2, "decodingerror": 2, "61": 2, "pyright": [2, 10, 12, 18, 19, 20, 21], "static": [2, 18, 19, 21], "caught": [2, 10], "checker": [2, 18], "53": 2, "across": 2, "micro": 2, "visibl": 2, "48": 2, "50": 2, "freelist": 2, "44": 2, "45": [2, 19], "api": [2, 4, 13, 16, 18, 19, 20], "34": 2, "31": 2, "reli": [2, 6], "33": 2, "mark": [2, 3, 18], "39": 2, "On": [2, 18], "21": 2, "initi": [2, 7, 18], "oop": [3, 4, 18, 19], "traceback": [3, 4, 10, 12, 18, 19, 20], "recent": [3, 4, 10, 12, 18, 19, 20], "last": [3, 4, 10, 12, 18, 19, 20], "stdin": [3, 12, 18, 19, 20], "got": [3, 4, 10, 12, 18, 19, 20], "suffici": 3, "sometim": [3, 16, 18, 19], "impos": 3, "constrain": [3, 15], "posit": [3, 8, 18], "d": [3, 11, 18, 19, 20], "positiveint": [3, 13], "combin": [3, 4, 7, 19], "enforc": 3, "regular": 3, "express": [3, 16], "z_": [3, 13], "z0": [3, 13], "9_": [3, 13], "cpu_limit": 3, "mem_limit": 3, "8192": 3, "1024": 3, "unixnam": [3, 13], "shown": 3, "alias": [3, 18], "elsewher": [3, 19], "integr": [3, 7, 12, 13, 18, 20, 21], "erron": 3, "fine": [3, 16, 18, 21], "github": 3, "minimum": [3, 10], "inclus": [3, 11, 19], "anchor": 3, "prefix": [3, 5], "suffix": [3, 16], "usernam": [3, 13], "2022": 3, "04": [3, 19], "02t18": [3, 19], "00": [3, 19], "zxhhbxbszq": 3, "c": [3, 5, 14, 18], "typic": 4, "wai": [4, 7, 8, 10, 12, 16, 17, 18, 19], "fail": [4, 19], "mismatch": [4, 17], "nice": [4, 5, 8, 10, 18, 19, 21], "design": [4, 11, 12, 18], "pair": [4, 5], "post": 4, "processor": 4, "could": [4, 5, 10, 16, 19], "cell": [4, 10], "beyond": [4, 19, 21], "among": 4, "url": [4, 10], "querystr": 4, "extend": [4, 16, 19], "look": [4, 13, 18], "anoth": [4, 8, 16, 18, 19], "tomllib": [4, 14], "extern": 4, "almost": 4, "demonstr": [5, 7, 19], "client": [5, 7, 17, 19, 21], "put": [5, 18], "delet": 5, "list_kei": 5, "request": [5, 6, 7, 10, 20, 21], "easier": 5, "boundari": 5, "reader": 5, "async": 5, "prefixed_send": 5, "stream": 5, "streamwrit": 5, "len": [5, 16, 18], "to_byt": [5, 16], "await": 5, "drain": 5, "prefixed_recv": 5, "streamread": 5, "readexactli": 5, "from_byt": 5, "del": 5, "listkei": 5, "self": [5, 16, 18], "host": 5, "port": 5, "8888": 5, "kv": 5, "handle_connect": 5, "writer": 5, "lifetim": 5, "connect": [5, 16], "open": [5, 8, 10, 12, 19], "receiv": 5, "req": 5, "process": [5, 7, 11, 16, 19], "resp": [5, 6], "handle_request": 5, "eoferror": 5, "close": 5, "els": [5, 11, 13, 18, 19], "statement": [5, 13, 19], "pop": 5, "sort": [5, 6], "serve_forev": 5, "start_serv": 5, "f": [5, 6, 7, 8, 10, 11, 18], "serv": [5, 7, 10, 20], "until": [5, 18], "ctrl": 5, "classmethod": [5, 19], "open_connect": 5, "wait_clos": 5, "send": [5, 11], "__main__": 5, "session": 5, "py": [5, 6], "foo": 5, "bar": 5, "fizz": 5, "buzz": 5, "current_repodata": 6, "medium": 6, "long": [6, 16, 18], "query_repodata": 6, "139": 6, "73": 6, "commentari": 6, "fairli": [6, 16, 19], "quick": [6, 21], "choic": [6, 21], "script": [6, 10], "domin": 6, "execut": [6, 7], "fast": [6, 12, 16, 18], "parser": 6, "far": 6, "node": 6, "partli": 6, "simd": 6, "blob": 6, "proxi": 6, "lazili": 6, "downsid": [6, 16, 18], "indirect": 6, "known": [6, 16, 18], "beforehand": 6, "doe": [6, 11, 18, 21], "tip": 6, "query_msgspec": 6, "actual": [6, 16, 21], "repo_data": 6, "p": [6, 18, 19], "revers": [6, 11], "query_orjson": 6, "query_json": [6, 7], "query_ujson": 6, "query_simdjson": 6, "download": 6, "http": [6, 10, 14, 18], "anaconda": 6, "org": 6, "raise_for_statu": 6, "lib": 6, "func": 6, "perf_count": 6, "stop": 6, "1000": 6, "2f": 6, "interest": [7, 16], "graph": 7, "relat": 7, "system": [7, 10, 12, 20, 21], "power": 7, "ergonom": [7, 19, 21], "languag": [7, 19], "edgeql": 7, "ecosystem": [7, 19], "tutori": 7, "offici": [7, 19], "quickstart": 7, "assum": 7, "cli": 7, "clone": 7, "repo": 7, "navig": 7, "Then": [7, 17], "project": [7, 10, 12], "init": [7, 19], "server": [7, 9, 17, 21], "person": [7, 19], "movi": 7, "multi": 7, "actor": 7, "insert": 7, "dune": 7, "timoth\u00e9": 7, "chalamet": 7, "zendaya": 7, "insert_data": 7, "create_cli": [7, 19], "query_singl": [7, 19], "select": [7, 19], "filter": [7, 19], "duck": [7, 19], "id": [7, 8, 15, 19], "b21913c4": 7, "3b68": 7, "11ee": [7, 19], "89b0": 7, "2f0b6819503d": 7, "b219195a": 7, "5b3794805cc7": 7, "b2192058": 7, "f7d83b95fb13": 7, "query_single_json": 7, "edgedb_json": 7, "server_vers": 7, "query_result": 7, "2023": 7, "15t14": 7, "733731z": 7, "besid": 7, "There": [7, 13, 19], "remain": 7, "box": 7, "datedur": 7, "relativedur": 7, "isinst": [7, 11], "durat": [7, 16, 19], "cal": [7, 19], "date_dur": 7, "year": 7, "dai": [7, 19], "p1y2d": 7, "side": 7, "logic": [7, 18, 21], "wish": [7, 14, 18], "specif": [7, 8, 11, 12, 13, 15, 16, 19], "our": [7, 13], "would": [7, 11, 19], "mutat": 7, "geograph": 8, "Its": 8, "nine": 8, "seven": 8, "geometri": 8, "plu": 8, "wrong": [8, 21], "fill": 8, "relev": [8, 19], "disambigu": 8, "coordin": 8, "multipoint": 8, "linestr": 8, "multilinestr": 8, "polygon": 8, "multipolygon": 8, "geometrycollect": 8, "featurecollect": 8, "msgspec_geojson": 8, "canada": 8, "rb": [8, 10], "timeit": 8, "15": 8, "\u00b5": 8, "std": 8, "dev": [8, 16], "20": 8, "27": 8, "3x": 8, "accomplish": [9, 11, 17], "task": 9, "geojson": 9, "asyncio": 9, "tcp": 9, "repodata": [9, 16], "pyproject": 9, "pep": [10, 18, 19], "518": 10, "black": 10, "pytest": 10, "seri": 10, "enhanc": 10, "propos": [10, 19], "independ": 10, "tree": 10, "621": 10, "under": [10, 18], "catch": [10, 18], "typo": [10, 18], "earli": 10, "requires_python": 10, "buildsystem": 10, "build_backend": 10, "backend_path": 10, "readm": 10, "text": [10, 16], "content_typ": 10, "licens": 10, "contributor": 10, "author": 10, "maintain": 10, "classifi": 10, "optional_depend": 10, "gui_script": 10, "entry_point": 10, "build_system": 10, "starlett": 10, "urllib": 10, "githubusercont": 10, "com": [10, 14, 18, 19], "master": 10, "urlopen": 10, "hatchl": 10, "proper": [10, 19], "mutual": 10, "exclus": 10, "caveat": [10, 16, 19], "misspel": [10, 18], "silent": 10, "plai": 10, "tab": 10, "usabl": 10, "backend": 10, "myproject": 10, "super": 10, "great": [10, 18], "shmalic": 10, "compani": [10, 18, 19], "spot": 10, "msgpspec": 10, "detect": [10, 18], "valueerror": [11, 18, 19], "face": [11, 18], "context": [11, 18], "togeth": 11, "illustr": 11, "roundtrip": [11, 19], "sent": [11, 21], "dequ": 11, "imag": 11, "mymessag": 11, "field_1": 11, "field_2": 11, "enc": [11, 19], "msg2": 11, "assert": 11, "consist": [11, 16, 19, 20], "By": [11, 16, 18, 19], "ext2": 11, "manual": [11, 14, 18], "commun": [11, 21], "perhap": [11, 16, 18], "imaginari": 11, "doubl": 11, "fulli": [11, 18], "uniqu": [11, 18], "complex_type_cod": 11, "pack": 11, "dd": 11, "unpack": 11, "root": 11, "5j": 11, "keep": 11, "accident": [11, 18], "necessari": 11, "regularli": 12, "wide": [12, 20, 21], "varieti": [12, 18, 20, 21], "familiar": 12, "speedi": [12, 18], "feel": 12, "lightweight": [12, 18], "greatest": 12, "workflow": [12, 16], "admin": [12, 17, 18, 19, 20], "engin": [12, 17, 18, 19, 20], "bob": [12, 17, 18, 19], "123": [12, 18, 19, 20], "retain": 12, "niciti": 12, "80x": 12, "outperform": 12, "excel": [12, 20], "editor": [12, 20], "flexibl": [12, 18, 19, 21], "rang": 12, "correct": 12, "strictli": [12, 19], "compliant": 12, "stronger": 12, "organ": 12, "nautilustrad": 12, "litestar": 12, "sanic": 12, "mosec": 12, "pioreactor": 12, "anywidget": 12, "promis": 13, "interfac": [13, 16, 20], "stabil": 13, "introspect": 13, "purpos": [13, 19, 20], "hypothesi": 13, "compound": 13, "find": [13, 16, 18, 19], "particular": 13, "_to_schema": 13, "pip": 14, "platform": 14, "tomli": 14, "tomli_w": 14, "hasn": 14, "been": 14, "yet": [14, 19], "git": 14, "jcrist": 14, "positivefloat": 15, "dimens": [15, 19], "product": 15, "centimet": 15, "width": [15, 16], "height": 15, "catalog": 15, "price": 15, "exclusiveminimum": 15, "anyof": 15, "trick": 16, "squeez": 16, "sane": 16, "good": 16, "idea": 16, "intern": 16, "setup": 16, "goe": [16, 21], "sensit": 16, "input_buff": 16, "prefer": [16, 18, 19], "redund": [16, 18], "benefici": [16, 18], "inher": 16, "sai": [16, 19], "twitter": 16, "tweet": 16, "care": 16, "favorit": 16, "never": [16, 18], "full_text": 16, "favorite_count": 16, "example_json": 16, "70": 16, "Of": 16, "cours": 16, "bottleneck": 16, "techniqu": 16, "depth": 16, "possibli": [16, 19], "capac": 16, "socket": 16, "overwrit": 16, "sendal": 16, "expand": 16, "afterward": 16, "bloat": 16, "sy": 16, "getsizeof": 16, "__sizeof__": 16, "reflect": 16, "written": [16, 18], "slowdown": 16, "realist": 16, "workload": [16, 18], "place": [16, 18, 19], "come": 16, "json_msg": 16, "full_payload": 16, "someth": [16, 19, 21], "excess": 16, "64": [16, 19], "prepend": 16, "uint32": 16, "front": 16, "latter": [16, 19], "solut": [16, 18], "And": 16, "switch": [16, 20], "painless": 16, "live": [16, 18], "suffer": 16, "frequenc": 16, "problem": 16, "certain": [16, 18, 20], "particip": [16, 18], "advanc": 16, "tout": 16, "higher": [16, 18], "my_first_field": 16, "my_second_field": 16, "older": 17, "deserializ": 17, "newer": 17, "smoothli": 17, "guidelin": 17, "suppos": 17, "had": 17, "msgpsec": 17, "phone": 17, "wouldn": 17, "prior": 17, "_optional_": 17, "user2": 17, "updat": 17, "exchang": 17, "old_dec": 17, "new_dec": 17, "new_msg": 17, "financ": [17, 19], "512": 17, "867": 17, "5309": 17, "old_msg": 17, "quit": 18, "individu": [18, 20], "__ne__": 18, "__match_args__": 18, "forbidden": 18, "2d": 18, "to_dict": 18, "uuid4": 18, "f63219d5": 18, "e9ca": 18, "4ae8": 18, "afd0": 18, "cba30e84222d": 18, "319a6c0f": 18, "2841": 18, "4439": 18, "8bc8": 18, "2c1daf7d77a2": 18, "kind": 18, "occas": 18, "gotcha": 18, "lambda": 18, "functool": 18, "partial": 18, "forward": 18, "syntact": 18, "sugar": 18, "semant": 18, "mystruct": 18, "interv": 18, "low": 18, "direct": 18, "exclud": 18, "consequ": 18, "vm": 18, "thankfulli": 18, "mix": 18, "affect": [18, 20], "a_class_vari": 18, "563": 18, "postpon": 18, "evalu": 18, "spell": 18, "typ": 18, "cv": 18, "improp": 18, "intent": 18, "ever": 18, "unit": [18, 19], "down": 18, "program": 18, "enough": 18, "neglig": 18, "fact": 18, "block": 18, "replic": 18, "636": 18, "where_i": 18, "Not": 18, "addition": [18, 19], "rare": 18, "opt": 18, "fall": 18, "attributeerror": 18, "appropri": 18, "associ": 18, "rest": [18, 20], "unambigu": 18, "quickest": 18, "untag": [18, 19], "within": [18, 19], "op": 18, "taggedbas": 18, "situat": 18, "curiou": 18, "matches_default": 18, "evolut": [18, 21], "unnot": 18, "field_two": 18, "field_twoo": 18, "simplest": 18, "z": [18, 19], "field_z": 18, "ex": 18, "lot": 18, "example_field": 18, "examplefield": 18, "fieldtwo": 18, "four": [18, 19], "acronym": 18, "fqdn": 18, "sethostnameasfqdn": 18, "guid": 18, "acroynm": 18, "kubernet": 18, "io": 18, "19": 18, "podspec": 18, "core": 18, "v1podspec_nam": 18, "service_account_nam": 18, "serviceaccountnam": 18, "set_hostname_as_fqdn": 18, "v1podspec": 18, "arg": 18, "preced": [18, 19], "field_x": 18, "field_i": 18, "fieldx": 18, "point2": 18, "make_dataclass": 18, "who": 18, "understand": 18, "implic": 18, "freed": 18, "free": 18, "trigger": 18, "uncollect": 18, "threshold": 18, "themselv": 18, "referenc": 18, "scalar": 18, "contribut": 18, "ex1": 18, "untrack": 18, "is_track": 18, "ex2": 18, "boost": 18, "tricki": 18, "isol": 18, "frequent": 18, "worthwhil": 18, "likelihood": 18, "latenc": 18, "flag": 19, "intflag": 19, "typealiastyp": 19, "typealia": 19, "typevar": 19, "mutablesequ": 19, "abstractset": 19, "mutableset": 19, "yourself": 19, "attempt": [19, 20], "insensit": 19, "boolean": 19, "vari": 19, "63": 19, "rfc8259": 19, "nonfinit": 19, "nan": 19, "infin": 19, "accur": 19, "ieee754": 19, "inf": 19, "escap": 19, "unicod": 19, "utf": 19, "hello": [19, 20], "xf0": 19, "x9d": 19, "x84": 19, "x9e": 19, "bin": 19, "eng": 19, "hour": 19, "tz_awar": 19, "2021": 19, "tzinfo": 19, "000123": 19, "21600": 19, "tz_naiv": 19, "1617405490": 19, "iso": 19, "8601": 19, "underspecifi": 19, "stricter": 19, "subset": 19, "h": 19, "sign": 19, "whole": [19, 21], "negat": 19, "letter": 19, "segment": 19, "minut": 19, "digit": 19, "p0d": 19, "p1d": 19, "pt1h30": 19, "pt1": 19, "5h": 19, "pt1m30": 19, "90": 19, "pt1h30m25": 19, "java": 19, "javascript": 19, "tempor": 19, "pendulum": 19, "produc": 19, "interchang": 19, "pt123": 19, "p1dt30": 19, "5m": 19, "400000": 19, "rfc4122": 19, "u": 19, "c4524ac0": 19, "e81": 19, "4aa8": 19, "a595": 19, "0aec605a659a": 19, "uuid_hex": 19, "c4524ac0e81e4aa8a5950aec605a659a": 19, "uuid_byt": 19, "2345": 19, "1234567891234567811": 19, "shortest": 19, "float_val": 19, "trail": 19, "12345678912345678": 19, "although": 19, "wrong_typ": 19, "chad": 19, "twenti": 19, "dob": 19, "local_d": 19, "1984": 19, "01": 19, "ordereddict": 19, "At": 19, "typing_extens": 19, "backport": 19, "initvar": 19, "_not_": 19, "carol": 19, "doug": 19, "thirti": 19, "a6b951cc": 19, "2d00": 19, "91aa": 19, "b3f17e9898c": 19, "__attrs_pre_init__": 19, "think": 19, "page": 19, "forbid": 19, "unknown_field": 19, "david": 19, "anywher": 19, "member": 19, "fruit": 19, "appl": 19, "banana": 19, "grape": 19, "jobstat": 19, "succeed": 19, "_value2member_map_": 19, "bad": 19, "Their": 19, "pure": 19, "aid": 19, "analysi": [19, 21], "userid": 19, "1234": 19, "substitut": 19, "whenev": 19, "learn": [19, 21], "concret": 19, "pagin": 19, "wrapper": 19, "per_pag": 19, "json_str": 19, "dan": 19, "hr": 19, "ellen": 19, "team": 19, "some_other_messag": 19, "unparametr": 19, "bound": 19, "ambigu": 19, "alwai": 19, "fixabl": 19, "simpli": 19, "fragment": 19, "complic": 19, "point1d": 19, "point2d": 19, "point3d": 19, "decode_point": 19, "composit": 19, "point_typ": 19, "elif": 19, "too": 19, "finish": 19, "manner": 19, "expon": 19, "1e10": 19, "nil": 19, "x81": 20, "xa5hello": 20, "xa5world": 20, "handler": 20, "richer": 20, "bill": 20, "devop": 20, "implicit": 20, "cast": 20, "network": 21, "agre": 21, "decent": 21, "ubiquit": 21, "throw": 21, "500": 21, "poor": 21, "decoupl": 21, "futur": 21, "sure": 21, "evolv": 21, "magnitud": 21, "hope": 21, "focu": 21}, "objects": {"msgspec": [[0, 0, 1, "", "DecodeError"], [0, 0, 1, "", "EncodeError"], [0, 1, 1, "", "Meta"], [0, 0, 1, "", "MsgspecError"], [0, 2, 1, "", "NODEFAULT"], [0, 1, 1, "", "Raw"], [0, 1, 1, "", "Struct"], [0, 2, 1, "", "UNSET"], [0, 1, 1, "", "UnsetType"], [0, 0, 1, "", "ValidationError"], [0, 4, 1, "", "convert"], [0, 4, 1, "", "defstruct"], [0, 4, 1, "", "field"], [0, 4, 1, "", "to_builtins"]], "msgspec.Raw": [[0, 3, 1, "", "copy"]], "msgspec.inspect": [[0, 1, 1, "", "AnyType"], [0, 1, 1, "", "BoolType"], [0, 1, 1, "", "ByteArrayType"], [0, 1, 1, "", "BytesType"], [0, 1, 1, "", "CollectionType"], [0, 1, 1, "", "CustomType"], [0, 1, 1, "", "DataclassType"], [0, 1, 1, "", "DateTimeType"], [0, 1, 1, "", "DateType"], [0, 1, 1, "", "DecimalType"], [0, 1, 1, "", "DictType"], [0, 1, 1, "", "EnumType"], [0, 1, 1, "", "ExtType"], [0, 1, 1, "", "Field"], [0, 1, 1, "", "FloatType"], [0, 1, 1, "", "FrozenSetType"], [0, 1, 1, "", "IntType"], [0, 1, 1, "", "ListType"], [0, 1, 1, "", "LiteralType"], [0, 1, 1, "", "Metadata"], [0, 1, 1, "", "NamedTupleType"], [0, 1, 1, "", "NoneType"], [0, 1, 1, "", "RawType"], [0, 1, 1, "", "SetType"], [0, 1, 1, "", "StrType"], [0, 1, 1, "", "StructType"], [0, 1, 1, "", "TimeDeltaType"], [0, 1, 1, "", "TimeType"], [0, 1, 1, "", "TupleType"], [0, 1, 1, "", "Type"], [0, 1, 1, "", "TypedDictType"], [0, 1, 1, "", "UUIDType"], [0, 1, 1, "", "UnionType"], [0, 1, 1, "", "VarTupleType"], [0, 4, 1, "", "multi_type_info"], [0, 4, 1, "", "type_info"]], "msgspec.inspect.UnionType": [[0, 5, 1, "", "includes_none"]], "msgspec.json": [[0, 1, 1, "", "Decoder"], [0, 1, 1, "", "Encoder"], [0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"], [0, 4, 1, "", "format"], [0, 4, 1, "", "schema"], [0, 4, 1, "", "schema_components"]], "msgspec.json.Decoder": [[0, 3, 1, "", "decode"], [0, 3, 1, "", "decode_lines"]], "msgspec.json.Encoder": [[0, 3, 1, "", "encode"], [0, 3, 1, "", "encode_into"], [0, 3, 1, "", "encode_lines"]], "msgspec.msgpack": [[0, 1, 1, "", "Decoder"], [0, 1, 1, "", "Encoder"], [0, 1, 1, "", "Ext"], [0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"]], "msgspec.msgpack.Decoder": [[0, 3, 1, "", "decode"]], "msgspec.msgpack.Encoder": [[0, 3, 1, "", "encode"], [0, 3, 1, "", "encode_into"]], "msgspec.msgpack.Ext": [[0, 6, 1, "", "code"], [0, 6, 1, "", "data"]], "msgspec.structs": [[0, 1, 1, "", "FieldInfo"], [0, 1, 1, "", "StructConfig"], [0, 4, 1, "", "asdict"], [0, 4, 1, "", "astuple"], [0, 4, 1, "", "fields"], [0, 4, 1, "", "force_setattr"], [0, 4, 1, "", "replace"]], "msgspec.toml": [[0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"]], "msgspec.yaml": [[0, 4, 1, "", "decode"], [0, 4, 1, "", "encode"]]}, "objtypes": {"0": "py:exception", "1": "py:class", "2": "py:data", "3": "py:method", "4": "py:function", "5": "py:property", "6": "py:attribute"}, "objnames": {"0": ["py", "exception", "Python exception"], "1": ["py", "class", "Python class"], "2": ["py", "data", "Python data"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"], "5": ["py", "property", "Python property"], "6": ["py", "attribute", "Python attribute"]}, "titleterms": {"api": 0, "doc": 0, "struct": [0, 1, 7, 16, 18, 19], "meta": 0, "raw": [0, 19], "unset": [0, 19], "json": [0, 1, 7, 15, 16], "messagepack": [0, 1, 11, 16], "yaml": [0, 14], "toml": [0, 10, 14], "schema": [0, 15, 17], "convert": [0, 4, 7], "inspect": [0, 13], "except": 0, "benchmark": 1, "serial": 1, "valid": [1, 18], "larg": 1, "data": 1, "garbag": [1, 18], "collect": [1, 18], "librari": 1, "size": 1, "changelog": 2, "version": 2, "0": 2, "18": 2, "4": 2, "2023": 2, "10": 2, "04": 2, "3": 2, "03": 2, "2": 2, "08": 2, "26": 2, "1": 2, "16": 2, "17": 2, "07": 2, "11": 2, "06": 2, "12": 2, "15": 2, "05": 2, "19": 2, "14": 2, "02": 2, "13": 2, "09": 2, "01": 2, "2022": 2, "9": 2, "27": 2, "8": 2, "7": 2, "20": 2, "6": 2, "5": 2, "28": 2, "23": 2, "2021": 2, "25": 2, "constraint": 3, "numer": 3, "string": 3, "datetim": [3, 19], "byte": [3, 19], "sequenc": 3, "map": [3, 11], "asyncio": 5, "tcp": 5, "kei": 5, "valu": [5, 16, 18], "server": 5, "conda": 6, "repodata": 6, "usag": [7, 20], "edgedb": 7, "setup": 7, "encod": [7, 16, 18, 20], "queri": 7, "result": 7, "support": [7, 19], "other": 7, "type": [7, 11, 13, 18, 19, 20], "geojson": 8, "exampl": [9, 15], "pars": 10, "pyproject": 10, "extend": 11, "from": [11, 14], "nativ": 11, "defin": 11, "custom": 11, "extens": 11, "onli": 11, "msgspec": [12, 21], "highlight": 12, "us": [12, 16], "By": 12, "instal": 14, "option": [14, 19], "depend": 14, "github": 14, "perform": 16, "tip": 16, "reus": 16, "decod": [16, 18, 20], "avoid": 16, "default": [16, 18], "unus": 16, "field": [16, 18], "reduc": 16, "alloc": 16, "an": 16, "output": 16, "buffer": 16, "line": 16, "delimit": 16, "length": 16, "prefix": 16, "frame": 16, "gc": 16, "fals": 16, "array_lik": 16, "true": 16, "evolut": 17, "post": 18, "init": 18, "process": 18, "order": 18, "class": 18, "variabl": 18, "pattern": 18, "match": 18, "equal": 18, "frozen": 18, "instanc": 18, "tag": 18, "union": [18, 19], "omit": 18, "forbid": 18, "unknown": 18, "renam": 18, "arrai": 18, "runtim": 18, "definit": 18, "disabl": 18, "advanc": 18, "none": 19, "bool": 19, "int": 19, "float": 19, "str": 19, "bytearrai": 19, "memoryview": 19, "date": 19, "time": 19, "timedelta": 19, "uuid": 19, "decim": 19, "list": 19, "tupl": 19, "set": 19, "frozenset": 19, "namedtupl": 19, "dict": 19, "typeddict": 19, "dataclass": 19, "attr": 19, "enum": 19, "intenum": 19, "strenum": 19, "liter": 19, "newtyp": 19, "alias": 19, "gener": 19, "abstract": 19, "ani": 19, "strict": 20, "v": 20, "lax": 20, "mode": 20, "why": 21}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 58}, "alltitles": {"API Docs": [[0, "api-docs"]], "Structs": [[0, "structs"], [1, "structs"], [18, "structs"]], "Meta": [[0, "meta"]], "Raw": [[0, "raw"], [19, "raw"]], "Unset": [[0, "unset"]], "JSON": [[0, "json"]], "MessagePack": [[0, "messagepack"]], "YAML": [[0, "yaml"], [14, "yaml"]], "TOML": [[0, "toml"], [14, "toml"]], "JSON Schema": [[0, "json-schema"], [15, "json-schema"]], "Converters": [[0, "converters"], [4, "converters"]], "Inspect": [[0, "inspect"]], "Exceptions": [[0, "exceptions"]], "Benchmarks": [[1, "benchmarks"]], "JSON Serialization & Validation": [[1, "json-serialization-validation"]], "JSON Serialization": [[1, "json-serialization"]], "MessagePack Serialization": [[1, "messagepack-serialization"]], "JSON Serialization - Large Data": [[1, "json-serialization-large-data"]], "Garbage Collection": [[1, "garbage-collection"]], "Library Size": [[1, "library-size"]], "Changelog": [[2, "changelog"]], "Version 0.18.4 (2023-10-04)": [[2, "version-0-18-4-2023-10-04"]], "Version 0.18.3 (2023-10-03)": [[2, "version-0-18-3-2023-10-03"]], "Version 0.18.2 (2023-08-26)": [[2, "version-0-18-2-2023-08-26"]], "Version 0.18.1 (2023-08-16)": [[2, "version-0-18-1-2023-08-16"]], "Version 0.18.0 (2023-08-10)": [[2, "version-0-18-0-2023-08-10"]], "Version 0.17.0 (2023-07-11)": [[2, "version-0-17-0-2023-07-11"]], "Version 0.16.0 (2023-06-12)": [[2, "version-0-16-0-2023-06-12"]], "Version 0.15.1 (2023-05-19)": [[2, "version-0-15-1-2023-05-19"]], "Version 0.15.0 (2023-05-10)": [[2, "version-0-15-0-2023-05-10"]], "Version 0.14.2 (2023-04-19)": [[2, "version-0-14-2-2023-04-19"]], "Version 0.14.1 (2023-04-07)": [[2, "version-0-14-1-2023-04-07"]], "Version 0.14.0 (2023-04-02)": [[2, "version-0-14-0-2023-04-02"]], "Version 0.13.1 (2023-02-09)": [[2, "version-0-13-1-2023-02-09"]], "Version 0.13.0 (2023-02-08)": [[2, "version-0-13-0-2023-02-08"]], "Version 0.12.0 (2023-01-05)": [[2, "version-0-12-0-2023-01-05"]], "Version 0.11.0 (2022-12-19)": [[2, "version-0-11-0-2022-12-19"]], "Version 0.10.1 (2022-12-08)": [[2, "version-0-10-1-2022-12-08"]], "Version 0.10.0 (2022-12-07)": [[2, "version-0-10-0-2022-12-07"]], "Version 0.9.1 (2022-10-27)": [[2, "version-0-9-1-2022-10-27"]], "Version 0.9.0 (2022-09-13)": [[2, "version-0-9-0-2022-09-13"]], "Version 0.8.0 (2022-08-01)": [[2, "version-0-8-0-2022-08-01"]], "Version 0.7.1 (2022-06-27)": [[2, "version-0-7-1-2022-06-27"]], "Version 0.7.0 (2022-06-20)": [[2, "version-0-7-0-2022-06-20"]], "Version 0.6.0 (2022-04-06)": [[2, "version-0-6-0-2022-04-06"]], "Version 0.5.0 (2022-03-09)": [[2, "version-0-5-0-2022-03-09"]], "Version 0.4.2 (2022-02-28)": [[2, "version-0-4-2-2022-02-28"]], "Version 0.4.1 (2022-02-23)": [[2, "version-0-4-1-2022-02-23"]], "Version 0.4.0 (2022-02-08)": [[2, "version-0-4-0-2022-02-08"]], "Version 0.3.2 (2021-07-23)": [[2, "version-0-3-2-2021-07-23"]], "Version 0.3.1 (2021-07-12)": [[2, "version-0-3-1-2021-07-12"]], "Version 0.3.0 (2021-07-07)": [[2, "version-0-3-0-2021-07-07"]], "Version 0.2.0 (2021-02-25)": [[2, "version-0-2-0-2021-02-25"]], "Version 0.1.0 (2021-02-23)": [[2, "version-0-1-0-2021-02-23"]], "Constraints": [[3, "constraints"]], "Numeric Constraints": [[3, "numeric-constraints"]], "String Constraints": [[3, "string-constraints"]], "Datetime Constraints": [[3, "datetime-constraints"]], "Bytes Constraints": [[3, "bytes-constraints"]], "Sequence Constraints": [[3, "sequence-constraints"]], "Mapping Constraints": [[3, "mapping-constraints"]], "Asyncio TCP Key-Value Server": [[5, "asyncio-tcp-key-value-server"]], "Conda Repodata": [[6, "conda-repodata"]], "Usage with EdgeDB": [[7, "usage-with-edgedb"]], "Setup": [[7, "setup"]], "JSON Encoding Query Results": [[7, "json-encoding-query-results"]], "Supporting Other EdgeDB Types": [[7, "supporting-other-edgedb-types"]], "Converting Results to Structs": [[7, "converting-results-to-structs"]], "GeoJSON": [[8, "geojson"]], "Examples": [[9, "examples"]], "Parsing pyproject.toml": [[10, "parsing-pyproject-toml"]], "Extending": [[11, "extending"]], "Mapping to/from native types": [[11, "mapping-to-from-native-types"]], "Defining a custom extension (MessagePack only)": [[11, "defining-a-custom-extension-messagepack-only"]], "msgspec": [[12, "msgspec"]], "Highlights": [[12, "highlights"]], "Used By": [[12, "used-by"]], "Inspecting Types": [[13, "inspecting-types"]], "Installation": [[14, "installation"]], "Optional Dependencies": [[14, "optional-dependencies"]], "Installing from GitHub": [[14, "installing-from-github"]], "Example": [[15, "example"]], "Performance Tips": [[16, "performance-tips"]], "Reuse Encoders/Decoders": [[16, "reuse-encoders-decoders"]], "Use Structs": [[16, "use-structs"]], "Avoid Encoding Default Values": [[16, "avoid-encoding-default-values"]], "Avoid Decoding Unused Fields": [[16, "avoid-decoding-unused-fields"]], "Reduce Allocations": [[16, "reduce-allocations"]], "Reusing an output buffer": [[16, "reusing-an-output-buffer"]], "Line-Delimited JSON": [[16, "line-delimited-json"]], "Length-Prefix Framing": [[16, "length-prefix-framing"]], "Use MessagePack": [[16, "use-messagepack"]], "Use gc=False": [[16, "use-gc-false"]], "Use array_like=True": [[16, "use-array-like-true"]], "Schema Evolution": [[17, "schema-evolution"]], "Default Values": [[18, "default-values"]], "Post-Init Processing": [[18, "post-init-processing"]], "Field Ordering": [[18, "field-ordering"]], "Class Variables": [[18, "class-variables"]], "Type Validation": [[18, "type-validation"]], "Pattern Matching": [[18, "pattern-matching"]], "Equality and Order": [[18, "equality-and-order"]], "Frozen Instances": [[18, "frozen-instances"]], "Tagged Unions": [[18, "tagged-unions"]], "Omitting Default Values": [[18, "omitting-default-values"]], "Forbidding Unknown Fields": [[18, "forbidding-unknown-fields"]], "Renaming Fields": [[18, "renaming-fields"]], "Encoding/Decoding as Arrays": [[18, "encoding-decoding-as-arrays"]], "Runtime Definition": [[18, "runtime-definition"]], "Disabling Garbage Collection (Advanced)": [[18, "disabling-garbage-collection-advanced"]], "Supported Types": [[19, "supported-types"]], "None": [[19, "none"]], "bool": [[19, "bool"]], "int": [[19, "int"]], "float": [[19, "float"]], "str": [[19, "str"]], "bytes / bytearray / memoryview": [[19, "bytes-bytearray-memoryview"]], "datetime": [[19, "datetime"]], "date": [[19, "date"]], "time": [[19, "time"]], "timedelta": [[19, "timedelta"]], "uuid": [[19, "uuid"]], "decimal": [[19, "decimal"]], "list / tuple / set / frozenset": [[19, "list-tuple-set-frozenset"]], "NamedTuple": [[19, "namedtuple"]], "dict": [[19, "dict"]], "TypedDict": [[19, "typeddict"]], "dataclasses": [[19, "dataclasses"]], "attrs": [[19, "attrs"]], "Struct": [[19, "struct"]], "UNSET": [[19, "unset"]], "Enum / IntEnum / StrEnum": [[19, "enum-intenum-strenum"]], "Literal": [[19, "literal"]], "NewType": [[19, "newtype"]], "Type Aliases": [[19, "type-aliases"]], "Generic Types": [[19, "generic-types"]], "Abstract Types": [[19, "abstract-types"]], "Union / Optional": [[19, "union-optional"]], "Any": [[19, "any"]], "Usage": [[20, "usage"]], "Encoding": [[20, "encoding"]], "Decoding": [[20, "decoding"]], "Typed Decoding": [[20, "typed-decoding"]], "\u201cStrict\u201d vs \u201cLax\u201d Mode": [[20, "strict-vs-lax-mode"]], "Why msgspec?": [[21, "why-msgspec"]]}, "indexentries": {"anytype (class in msgspec.inspect)": [[0, "msgspec.inspect.AnyType"]], "booltype (class in msgspec.inspect)": [[0, "msgspec.inspect.BoolType"]], "bytearraytype (class in msgspec.inspect)": [[0, "msgspec.inspect.ByteArrayType"]], "bytestype (class in msgspec.inspect)": [[0, "msgspec.inspect.BytesType"]], "collectiontype (class in msgspec.inspect)": [[0, "msgspec.inspect.CollectionType"]], "customtype (class in msgspec.inspect)": [[0, "msgspec.inspect.CustomType"]], "dataclasstype (class in msgspec.inspect)": [[0, "msgspec.inspect.DataclassType"]], "datetimetype (class in msgspec.inspect)": [[0, "msgspec.inspect.DateTimeType"]], "datetype (class in msgspec.inspect)": [[0, "msgspec.inspect.DateType"]], "decimaltype (class in msgspec.inspect)": [[0, "msgspec.inspect.DecimalType"]], "decodeerror": [[0, "msgspec.DecodeError"]], "decoder (class in msgspec.json)": [[0, "msgspec.json.Decoder"]], "decoder (class in msgspec.msgpack)": [[0, "msgspec.msgpack.Decoder"]], "dicttype (class in msgspec.inspect)": [[0, "msgspec.inspect.DictType"]], "encodeerror": [[0, "msgspec.EncodeError"]], "encoder (class in msgspec.json)": [[0, "msgspec.json.Encoder"]], "encoder (class in msgspec.msgpack)": [[0, "msgspec.msgpack.Encoder"]], "enumtype (class in msgspec.inspect)": [[0, "msgspec.inspect.EnumType"]], "ext (class in msgspec.msgpack)": [[0, "msgspec.msgpack.Ext"]], "exttype (class in msgspec.inspect)": [[0, "msgspec.inspect.ExtType"]], "field (class in msgspec.inspect)": [[0, "msgspec.inspect.Field"]], "fieldinfo (class in msgspec.structs)": [[0, "msgspec.structs.FieldInfo"]], "floattype (class in msgspec.inspect)": [[0, "msgspec.inspect.FloatType"]], "frozensettype (class in msgspec.inspect)": [[0, "msgspec.inspect.FrozenSetType"]], "inttype (class in msgspec.inspect)": [[0, "msgspec.inspect.IntType"]], "listtype (class in msgspec.inspect)": [[0, "msgspec.inspect.ListType"]], "literaltype (class in msgspec.inspect)": [[0, "msgspec.inspect.LiteralType"]], "meta (class in msgspec)": [[0, "msgspec.Meta"]], "metadata (class in msgspec.inspect)": [[0, "msgspec.inspect.Metadata"]], "msgspecerror": [[0, "msgspec.MsgspecError"]], "nodefault (in module msgspec)": [[0, "msgspec.NODEFAULT"]], "namedtupletype (class in msgspec.inspect)": [[0, "msgspec.inspect.NamedTupleType"]], "nonetype (class in msgspec.inspect)": [[0, "msgspec.inspect.NoneType"]], "raw (class in msgspec)": [[0, "msgspec.Raw"]], "rawtype (class in msgspec.inspect)": [[0, "msgspec.inspect.RawType"]], "settype (class in msgspec.inspect)": [[0, "msgspec.inspect.SetType"]], "strtype (class in msgspec.inspect)": [[0, "msgspec.inspect.StrType"]], "struct (class in msgspec)": [[0, "msgspec.Struct"]], "structconfig (class in msgspec.structs)": [[0, "msgspec.structs.StructConfig"]], "structtype (class in msgspec.inspect)": [[0, "msgspec.inspect.StructType"]], "timedeltatype (class in msgspec.inspect)": [[0, "msgspec.inspect.TimeDeltaType"]], "timetype (class in msgspec.inspect)": [[0, "msgspec.inspect.TimeType"]], "tupletype (class in msgspec.inspect)": [[0, "msgspec.inspect.TupleType"]], "type (class in msgspec.inspect)": [[0, "msgspec.inspect.Type"]], "typeddicttype (class in msgspec.inspect)": [[0, "msgspec.inspect.TypedDictType"]], "unset (in module msgspec)": [[0, "msgspec.UNSET"]], "uuidtype (class in msgspec.inspect)": [[0, "msgspec.inspect.UUIDType"]], "uniontype (class in msgspec.inspect)": [[0, "msgspec.inspect.UnionType"]], "unsettype (class in msgspec)": [[0, "msgspec.UnsetType"]], "validationerror": [[0, "msgspec.ValidationError"]], "vartupletype (class in msgspec.inspect)": [[0, "msgspec.inspect.VarTupleType"]], "asdict() (in module msgspec.structs)": [[0, "msgspec.structs.asdict"]], "astuple() (in module msgspec.structs)": [[0, "msgspec.structs.astuple"]], "code (msgspec.msgpack.ext attribute)": [[0, "msgspec.msgpack.Ext.code"]], "convert() (in module msgspec)": [[0, "msgspec.convert"]], "copy() (msgspec.raw method)": [[0, "msgspec.Raw.copy"]], "data (msgspec.msgpack.ext attribute)": [[0, "msgspec.msgpack.Ext.data"]], "decode() (in module msgspec.json)": [[0, "msgspec.json.decode"]], "decode() (in module msgspec.msgpack)": [[0, "msgspec.msgpack.decode"]], "decode() (in module msgspec.toml)": [[0, "msgspec.toml.decode"]], "decode() (in module msgspec.yaml)": [[0, "msgspec.yaml.decode"]], "decode() (msgspec.json.decoder method)": [[0, "msgspec.json.Decoder.decode"]], "decode() (msgspec.msgpack.decoder method)": [[0, "msgspec.msgpack.Decoder.decode"]], "decode_lines() (msgspec.json.decoder method)": [[0, "msgspec.json.Decoder.decode_lines"]], "defstruct() (in module msgspec)": [[0, "msgspec.defstruct"]], "encode() (in module msgspec.json)": [[0, "msgspec.json.encode"]], "encode() (in module msgspec.msgpack)": [[0, "msgspec.msgpack.encode"]], "encode() (in module msgspec.toml)": [[0, "msgspec.toml.encode"]], "encode() (in module msgspec.yaml)": [[0, "msgspec.yaml.encode"]], "encode() (msgspec.json.encoder method)": [[0, "msgspec.json.Encoder.encode"]], "encode() (msgspec.msgpack.encoder method)": [[0, "msgspec.msgpack.Encoder.encode"]], "encode_into() (msgspec.json.encoder method)": [[0, "msgspec.json.Encoder.encode_into"]], "encode_into() (msgspec.msgpack.encoder method)": [[0, "msgspec.msgpack.Encoder.encode_into"]], "encode_lines() (msgspec.json.encoder method)": [[0, "msgspec.json.Encoder.encode_lines"]], "field() (in module msgspec)": [[0, "msgspec.field"]], "fields() (in module msgspec.structs)": [[0, "msgspec.structs.fields"]], "force_setattr() (in module msgspec.structs)": [[0, "msgspec.structs.force_setattr"]], "format() (in module msgspec.json)": [[0, "msgspec.json.format"]], "includes_none (msgspec.inspect.uniontype property)": [[0, "msgspec.inspect.UnionType.includes_none"]], "multi_type_info() (in module msgspec.inspect)": [[0, "msgspec.inspect.multi_type_info"]], "replace() (in module msgspec.structs)": [[0, "msgspec.structs.replace"]], "schema() (in module msgspec.json)": [[0, "msgspec.json.schema"]], "schema_components() (in module msgspec.json)": [[0, "msgspec.json.schema_components"]], "to_builtins() (in module msgspec)": [[0, "msgspec.to_builtins"]], "type_info() (in module msgspec.inspect)": [[0, "msgspec.inspect.type_info"]]}}) \ No newline at end of file