Repository: seandstewart/typical (language: python)

Issue:
Support new type union operator `|` in Python3.10
* typical version: 2.3.0
* Python version: 3.10.0b2
* Operating System: Linux

### Description

It seems that `typical` doesn't  support  new type union operator `|` in Python3.10.

```python
import typic


@typic.al
def foo(bar: str | int):
    pass
```

### Output

```
Traceback (most recent call last):
  File "/home/lsongzhi/code/python/pydemo/main.py", line 5, in <module>
    def foo(bar: str | int):
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/api.py", line 389, in typed
    return _typed(_cls_or_callable) if _cls_or_callable is not None else _typed
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/api.py", line 383, in _typed
    return wrap(obj, delay=delay, strict=strict)  # type: ignore
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/api.py", line 170, in wrap
    protocols(func)
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/serde/resolver.py", line 752, in protocols
    resolved = self.resolve(
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/serde/resolver.py", line 670, in resolve
    anno = self.annotation(
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/serde/resolver.py", line 484, in annotation
    self._get_configuration(util.origin(use), flags)
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/serde/resolver.py", line 307, in _get_configuration
    hints = util.cached_type_hints(origin)
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/site-packages/typic/util.py", line 460, in get_type_hints
    return _get_type_hints(obj)
  File "/home/lsongzhi/.pyenv/versions/3.10.0b2/lib/python3.10/typing.py", line 1749, in get_type_hints
    raise TypeError('{!r} is not a module, class, method, '
TypeError: str | int is not a module, class, method, or function.
```



Discussion / hints:

Fix patch:
diff --git a/README.md b/README.md
index 3482c9eb..0ceea5ac 100644
--- a/README.md
+++ b/README.md
@@ -17,16 +17,21 @@ validation, and enforcement of Python types,
 [PEP 484](https://www.python.org/dev/peps/pep-0484/) Type Hints, and
 custom user-defined data-types.
 
-It provides a high-level Functional API and Object API to suite most
-any occasion.
+Typical is fully compliant with the following Python Typing PEPs:
 
-## Getting Started
+- [PEP 484 -- Type Hints](https://www.python.org/dev/peps/pep-0484/)
+- [PEP 563 -- Postponed Evaluation of Annotations](https://www.python.org/dev/peps/pep-0563/)
+- [PEP 585 -- Type Hinting Generics In Standard Collections](https://www.python.org/dev/peps/pep-0585/)
+- [PEP 586 -- Literal Types](https://www.python.org/dev/peps/pep-0586/)
+- [PEP 589 -- TypedDict: Type Hints for Dictionaries with a Fixed Set of Keys](https://www.python.org/dev/peps/pep-0589/)
+- [PEP 604 -- Allow writing union types as X | Y](https://www.python.org/dev/peps/pep-0604/)
+
+It provides a high-level Protocol API, Functional API, and Object API to suit most any
+occasion.
 
-Installation is as simple as `pip install -U typical`. For more
-installation options to make *typical* even faster, see the
-[Install](https://typical-python.org/usage/install.md) section in the
-documentation.
+## Getting Started
 
+Installation is as simple as `pip install -U typical`.
 ## Help
 
 The latest documentation is hosted at
@@ -71,9 +76,10 @@ Typical has both a high-level *Object API* and high-level
 *Functional API*. In general, any method registered to one API is also
 available to the other.
 
-### The Object API
+### The Protocol API
 
 ```python
+import dataclasses
 from typing import Iterable
 
 import typic
@@ -89,25 +95,26 @@ class Tweet(str):
     ...
 
 
-@typic.klass
+@dataclasses.dataclass # or typing.TypedDict or typing.NamedTuple or annotated class...
 class Tweeter:
     id: ID
     tweets: Iterable[Tweet]
-    
+
 
 json = '{"id":1,"tweets":["I don\'t understand Twitter"]}'
-t = Tweeter.transmute(json)
+protocol = typic.protocol(Tweeter)
 
+t = protocol.transmute(json)
 print(t)
 #> Tweeter(id=1, tweets=["I don't understand Twitter"])
 
-print(t.tojson())
+print(protocol.tojson(t))
 #> '{"id":1,"tweets":["I don\'t understand Twitter"]}'
 
-Tweeter.validate({"id": 0, "tweets": []})
+protocol.validate({"id": 0, "tweets": []})
 #> Traceback (most recent call last):
 #>  ...
-#> typic.constraints.error.ConstraintValueError: Given value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
+#> typic.constraints.error.ConstraintValueError: Tweeter.id: value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
 ```
 
 ### The Functional API
@@ -136,25 +143,61 @@ class Tweeter:
 
 
 json = '{"id":1,"tweets":["I don\'t understand Twitter"]}'
-protocol = typic.protocol(Tweeter)
 
-t = protocol.transmute(json)  # or typic.transmute()
+t = typic.transmute(Tweeter, json)
 print(t)
 #> Tweeter(id=1, tweets=["I don't understand Twitter"])
 
-print(protocol.tojson(t))
+print(typic.tojson(t))
 #> '{"id":1,"tweets":["I don\'t understand Twitter"]}'
 
-protocol.validate({"id": 0, "tweets": []})  # or typic.validate()
+typic.validate(Tweeter, {"id": 0, "tweets": []})
 #> Traceback (most recent call last):
 #>  ...
 #> typic.constraints.error.ConstraintValueError: Tweeter.id: value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
 ```
 
+### The Object API
+
+```python
+from typing import Iterable
+
+import typic
+
+
+@typic.constrained(ge=1)
+class ID(int):
+    ...
+
+
+@typic.constrained(max_length=280)
+class Tweet(str):
+    ...
+
+
+@typic.klass
+class Tweeter:
+    id: ID
+    tweets: Iterable[Tweet]
+    
+
+json = '{"id":1,"tweets":["I don\'t understand Twitter"]}'
+t = Tweeter.transmute(json)
+
+print(t)
+#> Tweeter(id=1, tweets=["I don't understand Twitter"])
+
+print(t.tojson())
+#> '{"id":1,"tweets":["I don\'t understand Twitter"]}'
+
+Tweeter.validate({"id": 0, "tweets": []})
+#> Traceback (most recent call last):
+#>  ...
+#> typic.constraints.error.ConstraintValueError: Given value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
+```
 
 
 ## Changelog
 
 See our
 [Releases](https://github.com/seandstewart/typical/releases).
-
diff --git a/docs/index.md b/docs/index.md
index cb511d58..0ceea5ac 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -17,18 +17,21 @@ validation, and enforcement of Python types,
 [PEP 484](https://www.python.org/dev/peps/pep-0484/) Type Hints, and
 custom user-defined data-types.
 
-It is also fully compliant with [PEP 563](https://www.python.org/dev/peps/pep-0563/).
+Typical is fully compliant with the following Python Typing PEPs:
 
-It provides a high-level Functional API and Object API to suite most
-any occasion.
+- [PEP 484 -- Type Hints](https://www.python.org/dev/peps/pep-0484/)
+- [PEP 563 -- Postponed Evaluation of Annotations](https://www.python.org/dev/peps/pep-0563/)
+- [PEP 585 -- Type Hinting Generics In Standard Collections](https://www.python.org/dev/peps/pep-0585/)
+- [PEP 586 -- Literal Types](https://www.python.org/dev/peps/pep-0586/)
+- [PEP 589 -- TypedDict: Type Hints for Dictionaries with a Fixed Set of Keys](https://www.python.org/dev/peps/pep-0589/)
+- [PEP 604 -- Allow writing union types as X | Y](https://www.python.org/dev/peps/pep-0604/)
 
-## Getting Started
+It provides a high-level Protocol API, Functional API, and Object API to suit most any
+occasion.
 
-Installation is as simple as `pip install -U typical`. For more
-installation options to make *typical* even faster, see the
-[Install](https://typical-python.org/usage/install.md) section in the
-documentation.
+## Getting Started
 
+Installation is as simple as `pip install -U typical`.
 ## Help
 
 The latest documentation is hosted at
@@ -73,9 +76,10 @@ Typical has both a high-level *Object API* and high-level
 *Functional API*. In general, any method registered to one API is also
 available to the other.
 
-### The Object API
+### The Protocol API
 
 ```python
+import dataclasses
 from typing import Iterable
 
 import typic
@@ -91,25 +95,26 @@ class Tweet(str):
     ...
 
 
-@typic.klass
+@dataclasses.dataclass # or typing.TypedDict or typing.NamedTuple or annotated class...
 class Tweeter:
     id: ID
     tweets: Iterable[Tweet]
-    
+
 
 json = '{"id":1,"tweets":["I don\'t understand Twitter"]}'
-t = Tweeter.transmute(json)
+protocol = typic.protocol(Tweeter)
 
+t = protocol.transmute(json)
 print(t)
 #> Tweeter(id=1, tweets=["I don't understand Twitter"])
 
-print(t.tojson())
+print(protocol.tojson(t))
 #> '{"id":1,"tweets":["I don\'t understand Twitter"]}'
 
-Tweeter.validate({"id": 0, "tweets": []})
+protocol.validate({"id": 0, "tweets": []})
 #> Traceback (most recent call last):
 #>  ...
-#> typic.constraints.error.ConstraintValueError: Given value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
+#> typic.constraints.error.ConstraintValueError: Tweeter.id: value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
 ```
 
 ### The Functional API
@@ -138,25 +143,61 @@ class Tweeter:
 
 
 json = '{"id":1,"tweets":["I don\'t understand Twitter"]}'
-protocol = typic.protocol(Tweeter)
 
-t = protocol.transmute(json)  # or typic.transmute()
+t = typic.transmute(Tweeter, json)
 print(t)
 #> Tweeter(id=1, tweets=["I don't understand Twitter"])
 
-print(protocol.tojson(t))
+print(typic.tojson(t))
 #> '{"id":1,"tweets":["I don\'t understand Twitter"]}'
 
-protocol.validate({"id": 0, "tweets": []})  # or typic.validate()
+typic.validate(Tweeter, {"id": 0, "tweets": []})
 #> Traceback (most recent call last):
 #>  ...
 #> typic.constraints.error.ConstraintValueError: Tweeter.id: value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
 ```
 
+### The Object API
+
+```python
+from typing import Iterable
+
+import typic
+
+
+@typic.constrained(ge=1)
+class ID(int):
+    ...
+
+
+@typic.constrained(max_length=280)
+class Tweet(str):
+    ...
+
+
+@typic.klass
+class Tweeter:
+    id: ID
+    tweets: Iterable[Tweet]
+    
+
+json = '{"id":1,"tweets":["I don\'t understand Twitter"]}'
+t = Tweeter.transmute(json)
+
+print(t)
+#> Tweeter(id=1, tweets=["I don't understand Twitter"])
+
+print(t.tojson())
+#> '{"id":1,"tweets":["I don\'t understand Twitter"]}'
+
+Tweeter.validate({"id": 0, "tweets": []})
+#> Traceback (most recent call last):
+#>  ...
+#> typic.constraints.error.ConstraintValueError: Given value <0> fails constraints: (type=int, nullable=False, coerce=False, ge=1)
+```
 
 
 ## Changelog
 
 See our
 [Releases](https://github.com/seandstewart/typical/releases).
-
diff --git a/docs/static/Deserialize_Invalid_Data.svg b/docs/static/Deserialize_Invalid_Data.svg
index c5edbf4c..d9cba9fe 100644
--- a/docs/static/Deserialize_Invalid_Data.svg
+++ b/docs/static/Deserialize_Invalid_Data.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-740568a6-df15-4f84-821b-a58a374a628c" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-740568a6-df15-4f84-821b-a58a374a628c{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-740568a6-df15-4f84-821b-a58a374a628c .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-740568a6-df15-4f84-821b-a58a374a628c .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-740568a6-df15-4f84-821b-a58a374a628c text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-740568a6-df15-4f84-821b-a58a374a628c{background-color:rgba(249,249,249,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c path,#chart-740568a6-df15-4f84-821b-a58a374a628c line,#chart-740568a6-df15-4f84-821b-a58a374a628c rect,#chart-740568a6-df15-4f84-821b-a58a374a628c circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-740568a6-df15-4f84-821b-a58a374a628c .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .graph{fill:rgba(0,0,0,.87)}#chart-740568a6-df15-4f84-821b-a58a374a628c text.no_data{fill:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .title{fill:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .legends .legend text{fill:rgba(0,0,0,.87)}#chart-740568a6-df15-4f84-821b-a58a374a628c .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis .line{stroke:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis text.major{fill:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.y .guides:hover .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .line-graph .axis.x .guides:hover .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .stackedline-graph .axis.x .guides:hover .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-740568a6-df15-4f84-821b-a58a374a628c .ci{stroke:rgba(0,0,0,.87)}#chart-740568a6-df15-4f84-821b-a58a374a628c .reactive.active,#chart-740568a6-df15-4f84-821b-a58a374a628c .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-740568a6-df15-4f84-821b-a58a374a628c .ci .reactive.active{stroke-width:1.5}#chart-740568a6-df15-4f84-821b-a58a374a628c .series text{fill:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip .label{fill:rgba(0,0,0,.87)}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip .label{fill:rgba(0,0,0,.87)}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip .value{font-size:1.5em}#chart-740568a6-df15-4f84-821b-a58a374a628c .bound{font-size:.5em}#chart-740568a6-df15-4f84-821b-a58a374a628c .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-740568a6-df15-4f84-821b-a58a374a628c .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-740568a6-df15-4f84-821b-a58a374a628c .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-740568a6-df15-4f84-821b-a58a374a628c .color-0,#chart-740568a6-df15-4f84-821b-a58a374a628c .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-740568a6-df15-4f84-821b-a58a374a628c .color-1,#chart-740568a6-df15-4f84-821b-a58a374a628c .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-740568a6-df15-4f84-821b-a58a374a628c .color-2,#chart-740568a6-df15-4f84-821b-a58a374a628c .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-740568a6-df15-4f84-821b-a58a374a628c .color-3,#chart-740568a6-df15-4f84-821b-a58a374a628c .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-740568a6-df15-4f84-821b-a58a374a628c .color-4,#chart-740568a6-df15-4f84-821b-a58a374a628c .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-740568a6-df15-4f84-821b-a58a374a628c .color-5,#chart-740568a6-df15-4f84-821b-a58a374a628c .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay .color-0 text{fill:black}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay .color-1 text{fill:black}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay .color-2 text{fill:black}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay .color-3 text{fill:black}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay .color-4 text{fill:black}#chart-740568a6-df15-4f84-821b-a58a374a628c .text-overlay .color-5 text{fill:black}
-#chart-740568a6-df15-4f84-821b-a58a374a628c text.no_data{text-anchor:middle}#chart-740568a6-df15-4f84-821b-a58a374a628c .guide.line{fill:none}#chart-740568a6-df15-4f84-821b-a58a374a628c .centered{text-anchor:middle}#chart-740568a6-df15-4f84-821b-a58a374a628c .title{text-anchor:middle}#chart-740568a6-df15-4f84-821b-a58a374a628c .legends .legend text{fill-opacity:1}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.x text{text-anchor:middle}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.x:not(.web) text[transform]{text-anchor:start}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.y text{text-anchor:end}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.y text[transform].backwards{text-anchor:start}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.y2 text{text-anchor:start}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.y2 text[transform].backwards{text-anchor:end}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis .guide.line{stroke-dasharray:4,4}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis .major.guide.line{stroke-dasharray:6,6}#chart-740568a6-df15-4f84-821b-a58a374a628c .horizontal .axis.y .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .horizontal .axis.y2 .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .vertical .axis.x .guide.line{opacity:0}#chart-740568a6-df15-4f84-821b-a58a374a628c .horizontal .axis.always_show .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.y .guides:hover .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.y2 .guides:hover .guide.line,#chart-740568a6-df15-4f84-821b-a58a374a628c .axis.x .guides:hover .guide.line{opacity:1}#chart-740568a6-df15-4f84-821b-a58a374a628c .axis .guides:hover text{opacity:1}#chart-740568a6-df15-4f84-821b-a58a374a628c .nofill{fill:none}#chart-740568a6-df15-4f84-821b-a58a374a628c .subtle-fill{fill-opacity:.2}#chart-740568a6-df15-4f84-821b-a58a374a628c .dot{stroke-width:1px;fill-opacity:1}#chart-740568a6-df15-4f84-821b-a58a374a628c .dot.active{stroke-width:5px}#chart-740568a6-df15-4f84-821b-a58a374a628c .dot.negative{fill:transparent}#chart-740568a6-df15-4f84-821b-a58a374a628c text,#chart-740568a6-df15-4f84-821b-a58a374a628c tspan{stroke:none !important}#chart-740568a6-df15-4f84-821b-a58a374a628c .series text.active{opacity:1}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-740568a6-df15-4f84-821b-a58a374a628c .tooltip text{fill-opacity:1}#chart-740568a6-df15-4f84-821b-a58a374a628c .showable{visibility:hidden}#chart-740568a6-df15-4f84-821b-a58a374a628c .showable.shown{visibility:visible}#chart-740568a6-df15-4f84-821b-a58a374a628c .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-740568a6-df15-4f84-821b-a58a374a628c .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['740568a6-df15-4f84-821b-a58a374a628c'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [11, 1290], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Deserialize Invalid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-protocol-api", "typic-functional-api", "typic-object-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 11, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[typic-protocol-api] - 17114 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[typic-functional-api] - 15732 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[typic-object-api] - 13534 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[pydantic] - 4599 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[marshmallow] - 2732 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[djangorestframework] - 553 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c{background-color:rgba(249,249,249,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c path,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c rect,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .graph{fill:rgba(0,0,0,.87)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c text.no_data{fill:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .title{fill:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .legends .legend text{fill:rgba(0,0,0,.87)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis .line{stroke:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis text.major{fill:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.y .guides:hover .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .line-graph .axis.x .guides:hover .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .stackedline-graph .axis.x .guides:hover .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .ci{stroke:rgba(0,0,0,.87)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .reactive.active,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .ci .reactive.active{stroke-width:1.5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .series text{fill:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip .label{fill:rgba(0,0,0,.87)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip .label{fill:rgba(0,0,0,.87)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip .value{font-size:1.5em}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .bound{font-size:.5em}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-0,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-1,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-2,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-3,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-4,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-5,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay .color-0 text{fill:black}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay .color-1 text{fill:black}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay .color-2 text{fill:black}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay .color-3 text{fill:black}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay .color-4 text{fill:black}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .text-overlay .color-5 text{fill:black}
+#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c text.no_data{text-anchor:middle}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .guide.line{fill:none}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .centered{text-anchor:middle}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .title{text-anchor:middle}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .legends .legend text{fill-opacity:1}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.x text{text-anchor:middle}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.x:not(.web) text[transform]{text-anchor:start}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.y text{text-anchor:end}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.y text[transform].backwards{text-anchor:start}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.y2 text{text-anchor:start}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.y2 text[transform].backwards{text-anchor:end}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis .guide.line{stroke-dasharray:4,4}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis .major.guide.line{stroke-dasharray:6,6}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .horizontal .axis.y .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .horizontal .axis.y2 .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .vertical .axis.x .guide.line{opacity:0}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .horizontal .axis.always_show .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.y .guides:hover .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.y2 .guides:hover .guide.line,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis.x .guides:hover .guide.line{opacity:1}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .axis .guides:hover text{opacity:1}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .nofill{fill:none}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .subtle-fill{fill-opacity:.2}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .dot{stroke-width:1px;fill-opacity:1}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .dot.active{stroke-width:5px}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .dot.negative{fill:transparent}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c text,#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c tspan{stroke:none !important}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .series text.active{opacity:1}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .tooltip text{fill-opacity:1}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .showable{visibility:hidden}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .showable.shown{visibility:visible}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['9a0aa1f0-f1cf-4309-9db7-4c9bb1fb177c'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [15, 1468], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Deserialize Invalid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-protocol-api", "typic-functional-api", "typic-object-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 15, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[typic-protocol-api] - 15208 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[typic-functional-api] - 13616 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[typic-object-api] - 8509 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[pydantic] - 6253 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[marshmallow] - 2683 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_invalid_data[djangorestframework] - 542 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,40 +345,40 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Deserialize Invalid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(80, 46)"><rect class="background" height="378.0" width="700.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h700.000000" /><g class="guides"><path class="guide line" d="M0.000000 351.122602 h700.000000" /><text class="" x="-5" y="354.6226017922656">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 328.388495 h700.000000" /><text class="" x="-5" y="331.8884946171889">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 305.654387 h700.000000" /><text class="" x="-5" y="309.15438744211224">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 282.920280 h700.000000" /><text class="" x="-5" y="286.42028026703554">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 260.186173 h700.000000" /><text class="" x="-5" y="263.68617309195884">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 237.452066 h700.000000" /><text class="" x="-5" y="240.95206591688216">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 214.717959 h700.000000" /><text class="" x="-5" y="218.21795874180546">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 191.983852 h700.000000" /><text class="" x="-5" y="195.4838515667288">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 169.249744 h700.000000" /><text class="" x="-5" y="172.74974439165211">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 146.515637 h700.000000" /><text class="" x="-5" y="150.01563721657544">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 123.781530 h700.000000" /><text class="" x="-5" y="127.28153004149874">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 101.047423 h700.000000" /><text class="" x="-5" y="104.54742286642204">960</text><title>960</title></g><g class="guides"><path class="guide line" d="M0.000000 78.313316 h700.000000" /><text class="" x="-5" y="81.8133156913454">1040</text><title>1040</title></g><g class="guides"><path class="guide line" d="M0.000000 55.579209 h700.000000" /><text class="" x="-5" y="59.07920851626869">1120</text><title>1120</title></g><g class="guides"><path class="guide line" d="M0.000000 32.845101 h700.000000" /><text class="" x="-5" y="36.34510134119199">1200</text><title>1200</title></g><g class="guides"><path class="guide line" d="M0.000000 10.110994 h700.000000" /><text class="" x="-5" y="13.610994166115347">1280</text><title>1280</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M69.551282 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 69.551282 393.000000)" x="69.55128205128204" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M181.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 181.730769 393.000000)" x="181.73076923076923" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M293.910256 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 293.910256 393.000000)" x="293.9102564102564" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M406.089744 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 406.089744 393.000000)" x="406.0897435897436" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M518.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 518.269231 393.000000)" x="518.2692307692307" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M630.448718 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 630.448718 393.000000)" x="630.4487179487179" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M44.871795 370.706046 L94.230769 370.706046" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.192308 370.431532 L118.910256 370.431532" stroke-width="3" /><path class="reactive tooltip-trigger" d="M44.871795 369.961220 L94.230769 369.961220" stroke-width="3" /><path class="reactive tooltip-trigger" d="M69.551282 370.706046 L69.551282 370.494050" stroke-width="2" /><path class="reactive tooltip-trigger" d="M69.551282 369.961220 L69.551282 370.281202" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.2128480783698592" width="98.71794871794872" x="20.192307692307693" y="370.2812022613553" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="370.70604588951016" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="333.74607114911225" r="3" /><desc class="value">Min: 11.0870
-Q1-1.5IQR: 11.0870
-Q1: 11.8330
-Median: 12.0530
-Q3: 12.5820
-Q3+1.5IQR: 13.7080
-Max: 141.1470</desc><desc class="x centered">69.55128205128204</desc><desc class="y centered">370.3748099476199</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M157.051282 370.554864 L206.410256 370.554864" stroke-width="3" /><path class="reactive tooltip-trigger" d="M132.371795 369.921435 L231.089744 369.921435" stroke-width="3" /><path class="reactive tooltip-trigger" d="M157.051282 369.375816 L206.410256 369.375816" stroke-width="3" /><path class="reactive tooltip-trigger" d="M181.730769 370.554864 L181.730769 370.115385" stroke-width="2" /><path class="reactive tooltip-trigger" d="M181.730769 369.375816 L181.730769 369.820837" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.294548775975386" width="98.71794871794872" x="132.3717948717949" y="369.8208365913339" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="370.57702983121754" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="344.5893877427577" r="3" /><desc class="value">Min: 11.5410
-Q1-1.5IQR: 11.6190
-Q1: 13.1655
-Median: 13.8480
-Q3: 14.2020
-Q3+1.5IQR: 15.7680
-Max: 102.9900</desc><desc class="x centered">181.73076923076925</desc><desc class="y centered">369.95766749865544</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M269.230769 368.812295 L318.589744 368.812295" stroke-width="3" /><path class="reactive tooltip-trigger" d="M244.551282 368.488334 L343.269231 368.488334" stroke-width="3" /><path class="reactive tooltip-trigger" d="M269.230769 367.677010 L318.589744 367.677010" stroke-width="3" /><path class="reactive tooltip-trigger" d="M293.910256 368.812295 L293.910256 368.671627" stroke-width="2" /><path class="reactive tooltip-trigger" d="M293.910256 367.677010 L293.910256 368.273781" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.3978468751651576" width="98.71794871794872" x="244.55128205128204" y="368.27378059777993" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="368.8122947616242" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="339.4003277802853" r="3" /><desc class="value">Min: 17.7510
-Q1-1.5IQR: 17.7510
-Q1: 18.2460
-Median: 18.8910
-Q3: 19.6460
-Q3+1.5IQR: 21.7460
-Max: 121.2500</desc><desc class="x centered">293.9102564102564</desc><desc class="y centered">368.38460937024115</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M381.410256 355.632764 L430.769231 355.632764" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.730769 354.693278 L455.448718 354.693278" stroke-width="3" /><path class="reactive tooltip-trigger" d="M381.410256 350.986481 L430.769231 350.986481" stroke-width="3" /><path class="reactive tooltip-trigger" d="M406.089744 355.632764 L406.089744 355.125510" stroke-width="2" /><path class="reactive tooltip-trigger" d="M406.089744 350.986481 L406.089744 353.471035" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.654474650136251" width="98.71794871794872" x="356.7307692307692" y="353.47103506339107" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="355.63276447943855" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="268.02745083286663" r="3" /><desc class="value">Min: 64.1290
-Q1-1.5IQR: 64.1290
-Q1: 65.9140
-Median: 67.4350
-Q3: 71.7360
-Q3+1.5IQR: 80.4790
-Max: 372.4070</desc><desc class="x centered">406.0897435897436</desc><desc class="y centered">353.9818136164079</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M493.589744 313.151243 L542.948718 313.151243" stroke-width="3" /><path class="reactive tooltip-trigger" d="M468.910256 308.397400 L567.628205 308.397400" stroke-width="3" /><path class="reactive tooltip-trigger" d="M493.589744 288.525090 L542.948718 288.525090" stroke-width="3" /><path class="reactive tooltip-trigger" d="M518.269231 313.151243 L518.269231 311.496200" stroke-width="2" /><path class="reactive tooltip-trigger" d="M518.269231 288.525090 L518.269231 302.343307" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="9.152893636719227" width="98.71794871794872" x="468.9102564102564" y="302.3433068204357" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="313.1512434593866" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="-137.9960305525143" r="3" /><desc class="value">Min: 213.6190
-Q1-1.5IQR: 213.6190
-Q1: 219.4430
-Median: 230.3475
-Q3: 251.6515
-Q3+1.5IQR: 300.2770
-Max: 1801.1800</desc><desc class="x centered">518.2692307692307</desc><desc class="y centered">304.7826481024486</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M605.769231 144.133387 L655.128205 144.133387" stroke-width="3" /><path class="reactive tooltip-trigger" d="M581.089744 115.839370 L679.807692 115.839370" stroke-width="3" /><path class="reactive tooltip-trigger" d="M605.769231 7.449399 L655.128205 7.449399" stroke-width="3" /><path class="reactive tooltip-trigger" d="M630.448718 144.133387 L630.448718 139.688443" stroke-width="2" /><path class="reactive tooltip-trigger" d="M630.448718 7.449399 L630.448718 89.117984" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="50.57045844078041" width="98.71794871794872" x="581.0897435897436" y="89.11798430295966" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="144.13338696075525" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="-458.0402553072847" r="3" /><desc class="value">Min: 808.3830
-Q1-1.5IQR: 808.3830
-Q1: 824.0245
-Median: 907.9480
-Q3: 1001.9790
-Q3+1.5IQR: 1289.3660
-Max: 2927.3970</desc><desc class="x centered">630.448717948718</desc><desc class="y centered">99.24571645518648</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Deserialize Invalid Data</text><text class="title" x="430.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(80, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Deserialize Invalid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(80, 46)"><rect class="background" height="378.0" width="700.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h700.000000" /><g class="guides"><path class="guide line" d="M0.000000 354.471306 h700.000000" /><text class="" x="-5" y="357.97130605114086">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 334.459659 h700.000000" /><text class="" x="-5" y="337.95965906082904">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 314.448012 h700.000000" /><text class="" x="-5" y="317.9480120705172">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 294.436365 h700.000000" /><text class="" x="-5" y="297.9363650802054">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 274.424718 h700.000000" /><text class="" x="-5" y="277.9247180898936">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 254.413071 h700.000000" /><text class="" x="-5" y="257.91307109958177">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 234.401424 h700.000000" /><text class="" x="-5" y="237.90142410926995">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 214.389777 h700.000000" /><text class="" x="-5" y="217.8897771189581">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 194.378130 h700.000000" /><text class="" x="-5" y="197.8781301286463">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 174.366483 h700.000000" /><text class="" x="-5" y="177.86648313833447">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 154.354836 h700.000000" /><text class="" x="-5" y="157.85483614802266">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 134.343189 h700.000000" /><text class="" x="-5" y="137.8431891577108">960</text><title>960</title></g><g class="guides"><path class="guide line" d="M0.000000 114.331542 h700.000000" /><text class="" x="-5" y="117.831542167399">1040</text><title>1040</title></g><g class="guides"><path class="guide line" d="M0.000000 94.319895 h700.000000" /><text class="" x="-5" y="97.81989517708718">1120</text><title>1120</title></g><g class="guides"><path class="guide line" d="M0.000000 74.308248 h700.000000" /><text class="" x="-5" y="77.80824818677536">1200</text><title>1200</title></g><g class="guides"><path class="guide line" d="M0.000000 54.296601 h700.000000" /><text class="" x="-5" y="57.79660119646354">1280</text><title>1280</title></g><g class="guides"><path class="guide line" d="M0.000000 34.284954 h700.000000" /><text class="" x="-5" y="37.784954206151724">1360</text><title>1360</title></g><g class="guides"><path class="guide line" d="M0.000000 14.273307 h700.000000" /><text class="" x="-5" y="17.773307215839907">1440</text><title>1440</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M69.551282 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 69.551282 393.000000)" x="69.55128205128204" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M181.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 181.730769 393.000000)" x="181.73076923076923" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M293.910256 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 293.910256 393.000000)" x="293.9102564102564" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M406.089744 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 406.089744 393.000000)" x="406.0897435897436" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M518.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 518.269231 393.000000)" x="518.2692307692307" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M630.448718 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 630.448718 393.000000)" x="630.4487179487179" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M44.871795 370.654725 L94.230769 370.654725" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.192308 370.373561 L118.910256 370.373561" stroke-width="3" /><path class="reactive tooltip-trigger" d="M44.871795 369.726935 L94.230769 369.726935" stroke-width="3" /><path class="reactive tooltip-trigger" d="M69.551282 370.654725 L69.551282 370.465865" stroke-width="2" /><path class="reactive tooltip-trigger" d="M69.551282 369.726935 L69.551282 370.171068" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.2947965746785144" width="98.71794871794872" x="20.192307692307693" y="370.1710684790533" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="370.6547249718327" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="325.92744322077" r="3" /><desc class="value">Min: 15.3040
+Q1-1.5IQR: 15.3040
+Q1: 16.0590
+Median: 16.4280
+Q3: 17.2375
+Q3+1.5IQR: 19.0130
+Max: 194.1090</desc><desc class="x centered">69.55128205128204</desc><desc class="y centered">370.27843096497486</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M157.051282 370.435347 L206.410256 370.435347" stroke-width="3" /><path class="reactive tooltip-trigger" d="M132.371795 370.212217 L231.089744 370.212217" stroke-width="3" /><path class="reactive tooltip-trigger" d="M157.051282 369.899786 L206.410256 369.899786" stroke-width="3" /><path class="reactive tooltip-trigger" d="M181.730769 370.435347 L181.730769 370.281258" stroke-width="2" /><path class="reactive tooltip-trigger" d="M181.730769 369.899786 L181.730769 370.128919" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.15233866243227112" width="98.71794871794872" x="132.3717948717949" y="370.12891894764726" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="370.4353472922126" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="325.74883927126723" r="3" /><desc class="value">Min: 16.1810
+Q1-1.5IQR: 16.1810
+Q1: 16.7970
+Median: 17.0730
+Q3: 17.4060
+Q3+1.5IQR: 18.3220
+Max: 194.8230</desc><desc class="x centered">181.73076923076925</desc><desc class="y centered">370.19150537345575</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M269.230769 369.729937 L318.589744 369.729937" stroke-width="3" /><path class="reactive tooltip-trigger" d="M244.551282 369.463782 L343.269231 369.463782" stroke-width="3" /><path class="reactive tooltip-trigger" d="M269.230769 368.735358 L318.589744 368.735358" stroke-width="3" /><path class="reactive tooltip-trigger" d="M293.910256 369.729937 L293.910256 369.543078" stroke-width="2" /><path class="reactive tooltip-trigger" d="M293.910256 368.735358 L293.910256 369.221829" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.3212494709551379" width="98.71794871794872" x="244.55128205128204" y="369.221828511012" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="369.72993673564775" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="324.92160781423365" r="3" /><desc class="value">Min: 19.0010
+Q1-1.5IQR: 19.0010
+Q1: 19.7480
+Median: 20.0650
+Q3: 21.0323
+Q3+1.5IQR: 22.9770
+Max: 198.1300</desc><desc class="x centered">293.9102564102564</desc><desc class="y centered">369.3387965879282</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M381.410256 357.656160 L430.769231 357.656160" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.730769 356.822925 L455.448718 356.822925" stroke-width="3" /><path class="reactive tooltip-trigger" d="M381.410256 355.290783 L430.769231 355.290783" stroke-width="3" /><path class="reactive tooltip-trigger" d="M406.089744 357.656160 L406.089744 357.086078" stroke-width="2" /><path class="reactive tooltip-trigger" d="M406.089744 355.290783 L406.089744 356.368535" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.7175426172235007" width="98.71794871794872" x="356.7307692307692" y="356.36853525860766" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="357.65615966997996" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="279.844872677127" r="3" /><desc class="value">Min: 67.2680
+Q1-1.5IQR: 67.2680
+Q1: 69.5470
+Median: 70.5990
+Q3: 72.4155
+Q3+1.5IQR: 76.7240
+Max: 378.3320</desc><desc class="x centered">406.0897435897436</desc><desc class="y centered">356.6448961036595</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M493.589744 318.261482 L542.948718 318.261482" stroke-width="3" /><path class="reactive tooltip-trigger" d="M468.910256 314.693405 L567.628205 314.693405" stroke-width="3" /><path class="reactive tooltip-trigger" d="M493.589744 301.530244 L542.948718 301.530244" stroke-width="3" /><path class="reactive tooltip-trigger" d="M518.269231 318.261482 L518.269231 315.712748" stroke-width="2" /><path class="reactive tooltip-trigger" d="M518.269231 301.530244 L518.269231 310.084285" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="5.628463325240318" width="98.71794871794872" x="468.9102564102564" y="310.08428483522755" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="318.2614815502005" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="8.090959023546986" r="3" /><desc class="value">Min: 224.7550
+Q1-1.5IQR: 224.7550
+Q1: 234.9440
+Median: 239.0190
+Q3: 257.4447
+Q3+1.5IQR: 291.6410
+Max: 1464.7150</desc><desc class="x centered">518.2692307692307</desc><desc class="y centered">312.0564326460234</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M605.769231 167.494734 L655.128205 167.494734" stroke-width="3" /><path class="reactive tooltip-trigger" d="M581.089744 122.522184 L679.807692 122.522184" stroke-width="3" /><path class="reactive tooltip-trigger" d="M605.769231 7.285240 L655.128205 7.285240" stroke-width="3" /><path class="reactive tooltip-trigger" d="M630.448718 167.494734 L630.448718 149.745403" stroke-width="2" /><path class="reactive tooltip-trigger" d="M630.448718 7.285240 L630.448718 93.647504" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="56.09789957108268" width="98.71794871794872" x="581.0897435897436" y="93.64750383806421" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="167.4947337076649" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="-708.4705873788037" r="3" /><desc class="value">Min: 827.4710
+Q1-1.5IQR: 827.4710
+Q1: 898.4270
+Median: 1007.2565
+Q3: 1122.6880
+Q3+1.5IQR: 1467.9360
+Max: 4329.2930</desc><desc class="x centered">630.448717948718</desc><desc class="y centered">108.13901304986837</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Deserialize Invalid Data</text><text class="title" x="430.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(80, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/static/Deserialize_Valid_Data.svg b/docs/static/Deserialize_Valid_Data.svg
index 5f1292a5..187c01cd 100644
--- a/docs/static/Deserialize_Valid_Data.svg
+++ b/docs/static/Deserialize_Valid_Data.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-4070fb74-ea52-4e7b-ba00-c692d6519868" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-4070fb74-ea52-4e7b-ba00-c692d6519868{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-4070fb74-ea52-4e7b-ba00-c692d6519868{background-color:rgba(249,249,249,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 path,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 rect,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .graph{fill:rgba(0,0,0,.87)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 text.no_data{fill:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .title{fill:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis .line{stroke:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis text.major{fill:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.y .guides:hover .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .line-graph .axis.x .guides:hover .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .ci{stroke:rgba(0,0,0,.87)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .reactive.active,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .ci .reactive.active{stroke-width:1.5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .series text{fill:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip .value{font-size:1.5em}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .bound{font-size:.5em}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-0,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-1,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-2,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-3,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-4,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-5,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay .color-0 text{fill:black}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay .color-1 text{fill:black}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay .color-2 text{fill:black}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay .color-3 text{fill:black}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay .color-4 text{fill:black}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .text-overlay .color-5 text{fill:black}
-#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 text.no_data{text-anchor:middle}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .guide.line{fill:none}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .centered{text-anchor:middle}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .title{text-anchor:middle}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .legends .legend text{fill-opacity:1}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.x text{text-anchor:middle}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.y text{text-anchor:end}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.y text[transform].backwards{text-anchor:start}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.y2 text{text-anchor:start}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.y2 text[transform].backwards{text-anchor:end}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis .guide.line{stroke-dasharray:4,4}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis .major.guide.line{stroke-dasharray:6,6}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .horizontal .axis.y .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .horizontal .axis.y2 .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .vertical .axis.x .guide.line{opacity:0}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .horizontal .axis.always_show .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.y .guides:hover .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.y2 .guides:hover .guide.line,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis.x .guides:hover .guide.line{opacity:1}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .axis .guides:hover text{opacity:1}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .nofill{fill:none}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .subtle-fill{fill-opacity:.2}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .dot{stroke-width:1px;fill-opacity:1}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .dot.active{stroke-width:5px}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .dot.negative{fill:transparent}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 text,#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 tspan{stroke:none !important}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .series text.active{opacity:1}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .tooltip text{fill-opacity:1}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .showable{visibility:hidden}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .showable.shown{visibility:visible}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-4070fb74-ea52-4e7b-ba00-c692d6519868 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['4070fb74-ea52-4e7b-ba00-c692d6519868'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [42, 1050], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Deserialize Valid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-protocol-api", "typic-functional-api", "pydantic", "typic-object-api", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 42, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[typic-protocol-api] - 922 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[typic-functional-api] - 7469 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[pydantic] - 8596 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[typic-object-api] - 5981 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[marshmallow] - 3391 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[djangorestframework] - 718 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8{background-color:rgba(249,249,249,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 path,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 rect,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .graph{fill:rgba(0,0,0,.87)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 text.no_data{fill:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .title{fill:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis .line{stroke:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis text.major{fill:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.y .guides:hover .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .line-graph .axis.x .guides:hover .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .ci{stroke:rgba(0,0,0,.87)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .reactive.active,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .ci .reactive.active{stroke-width:1.5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .series text{fill:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip .value{font-size:1.5em}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .bound{font-size:.5em}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-0,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-1,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-2,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-3,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-4,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-5,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay .color-0 text{fill:black}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay .color-1 text{fill:black}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay .color-2 text{fill:black}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay .color-3 text{fill:black}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay .color-4 text{fill:black}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .text-overlay .color-5 text{fill:black}
+#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 text.no_data{text-anchor:middle}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .guide.line{fill:none}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .centered{text-anchor:middle}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .title{text-anchor:middle}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .legends .legend text{fill-opacity:1}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.x text{text-anchor:middle}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.y text{text-anchor:end}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.y text[transform].backwards{text-anchor:start}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.y2 text{text-anchor:start}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.y2 text[transform].backwards{text-anchor:end}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis .guide.line{stroke-dasharray:4,4}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis .major.guide.line{stroke-dasharray:6,6}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .horizontal .axis.y .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .horizontal .axis.y2 .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .vertical .axis.x .guide.line{opacity:0}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .horizontal .axis.always_show .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.y .guides:hover .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.y2 .guides:hover .guide.line,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis.x .guides:hover .guide.line{opacity:1}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .axis .guides:hover text{opacity:1}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .nofill{fill:none}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .subtle-fill{fill-opacity:.2}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .dot{stroke-width:1px;fill-opacity:1}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .dot.active{stroke-width:5px}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .dot.negative{fill:transparent}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 text,#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 tspan{stroke:none !important}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .series text.active{opacity:1}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .tooltip text{fill-opacity:1}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .showable{visibility:hidden}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .showable.shown{visibility:visible}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-64714cdb-9dd8-4d41-b0b1-730b5dd112b8 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['64714cdb-9dd8-4d41-b0b1-730b5dd112b8'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [46, 1068], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Deserialize Valid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-protocol-api", "pydantic", "typic-functional-api", "typic-object-api", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 46, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[typic-protocol-api] - 918 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[pydantic] - 8262 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[typic-functional-api] - 7710 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[typic-object-api] - 7830 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[marshmallow] - 3739 rounds", "benchmark/test_benchmarks.py::test_benchmarks_deserialize_valid_data[djangorestframework] - 1188 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,40 +345,40 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Deserialize Valid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(80, 46)"><rect class="background" height="378.0" width="700.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h700.000000" /><g class="guides"><path class="guide line" d="M0.000000 357.028846 h700.000000" /><text class="" x="-5" y="360.52884615384613">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 328.182692 h700.000000" /><text class="" x="-5" y="331.6826923076923">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 299.336538 h700.000000" /><text class="" x="-5" y="302.83653846153845">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 270.490385 h700.000000" /><text class="" x="-5" y="273.99038461538464">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 241.644231 h700.000000" /><text class="" x="-5" y="245.14423076923077">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 212.798077 h700.000000" /><text class="" x="-5" y="216.29807692307693">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 183.951923 h700.000000" /><text class="" x="-5" y="187.45192307692312">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 155.105769 h700.000000" /><text class="" x="-5" y="158.60576923076928">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 126.259615 h700.000000" /><text class="" x="-5" y="129.75961538461544">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 97.413462 h700.000000" /><text class="" x="-5" y="100.9134615384616">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 68.567308 h700.000000" /><text class="" x="-5" y="72.06730769230774">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 39.721154 h700.000000" /><text class="" x="-5" y="43.221153846153925">960</text><title>960</title></g><g class="guides"><path class="guide line" d="M0.000000 10.875000 h700.000000" /><text class="" x="-5" y="14.375000000000057">1040</text><title>1040</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M69.551282 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 69.551282 393.000000)" x="69.55128205128204" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M181.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 181.730769 393.000000)" x="181.73076923076923" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M293.910256 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 293.910256 393.000000)" x="293.9102564102564" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M406.089744 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 406.089744 393.000000)" x="406.0897435897436" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M518.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 518.269231 393.000000)" x="518.2692307692307" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M630.448718 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 630.448718 393.000000)" x="630.4487179487179" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M44.871795 370.449159 L94.230769 370.449159" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.192308 368.775180 L118.910256 368.775180" stroke-width="3" /><path class="reactive tooltip-trigger" d="M44.871795 356.888221 L94.230769 356.888221" stroke-width="3" /><path class="reactive tooltip-trigger" d="M69.551282 370.449159 L69.551282 369.424038" stroke-width="2" /><path class="reactive tooltip-trigger" d="M69.551282 356.888221 L69.551282 364.453125" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="4.97091346162415" width="98.71794871794872" x="20.192307692307693" y="364.45312499984635" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="370.4491586540493" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="316.1560096152721" r="3" /><desc class="value">Min: 42.7810
-Q1-1.5IQR: 42.7810
-Q1: 45.6240
-Median: 47.4235
-Q3: 59.4100
-Q3+1.5IQR: 80.3900
-Max: 193.3540</desc><desc class="x centered">69.55128205128204</desc><desc class="y centered">365.99794471148545</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M157.051282 370.349639 L206.410256 370.349639" stroke-width="3" /><path class="reactive tooltip-trigger" d="M132.371795 369.366346 L231.089744 369.366346" stroke-width="3" /><path class="reactive tooltip-trigger" d="M157.051282 367.667308 L206.410256 367.667308" stroke-width="3" /><path class="reactive tooltip-trigger" d="M181.730769 370.349639 L181.730769 370.044952" stroke-width="2" /><path class="reactive tooltip-trigger" d="M181.730769 367.667308 L181.730769 369.096995" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.947956730580529" width="98.71794871794872" x="132.3717948717949" y="369.096995192562" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="370.34963942273197" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="290.2481971154481" r="3" /><desc class="value">Min: 43.0570
-Q1-1.5IQR: 43.0570
-Q1: 43.9020
-Median: 45.7840
-Q3: 46.5310
-Q3+1.5IQR: 50.4960
-Max: 265.2050</desc><desc class="x centered">181.73076923076925</desc><desc class="y centered">369.3050480769698</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M269.230769 369.831130 L318.589744 369.831130" stroke-width="3" /><path class="reactive tooltip-trigger" d="M244.551282 368.528726 L343.269231 368.528726" stroke-width="3" /><path class="reactive tooltip-trigger" d="M269.230769 366.598197 L318.589744 366.598197" stroke-width="3" /><path class="reactive tooltip-trigger" d="M293.910256 369.831130 L293.910256 369.227885" stroke-width="2" /><path class="reactive tooltip-trigger" d="M293.910256 366.598197 L293.910256 368.176262" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.051622596375978" width="98.71794871794872" x="244.55128205128204" y="368.176262019044" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="369.83112980736007" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="261.4287259610586" r="3" /><desc class="value">Min: 44.4950
-Q1-1.5IQR: 44.4950
-Q1: 46.1680
-Median: 48.1070
-Q3: 49.0845
-Q3+1.5IQR: 53.4610
-Max: 345.1310</desc><desc class="x centered">293.9102564102564</desc><desc class="y centered">368.4724399037617</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M381.410256 368.221154 L430.769231 368.221154" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.730769 367.003125 L455.448718 367.003125" stroke-width="3" /><path class="reactive tooltip-trigger" d="M381.410256 364.139784 L430.769231 364.139784" stroke-width="3" /><path class="reactive tooltip-trigger" d="M406.089744 368.221154 L406.089744 367.868600" stroke-width="2" /><path class="reactive tooltip-trigger" d="M406.089744 364.139784 L406.089744 366.377885" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.4907151445945601" width="98.71794871794872" x="356.7307692307692" y="366.3778846149985" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="368.22115384583833" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="310.3269230768163" r="3" /><desc class="value">Min: 48.9600
-Q1-1.5IQR: 48.9600
-Q1: 49.9378
-Median: 52.3380
-Q3: 54.0720
-Q3+1.5IQR: 60.2790
-Max: 209.5200</desc><desc class="x centered">406.0897435897436</desc><desc class="y centered">366.7221093749126</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M493.589744 326.136418 L542.948718 326.136418" stroke-width="3" /><path class="reactive tooltip-trigger" d="M468.910256 321.487861 L567.628205 321.487861" stroke-width="3" /><path class="reactive tooltip-trigger" d="M493.589744 303.909736 L542.948718 303.909736" stroke-width="3" /><path class="reactive tooltip-trigger" d="M518.269231 326.136418 L518.269231 324.694381" stroke-width="2" /><path class="reactive tooltip-trigger" d="M518.269231 303.909736 L518.269231 316.394892" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="8.299489182284447" width="98.71794871794872" x="468.9102564102564" y="316.3948918273604" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="326.1364182692794" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="109.64134615424717" r="3" /><desc class="value">Min: 165.6750
-Q1-1.5IQR: 165.6750
-Q1: 169.6742
-Median: 178.5670
-Q3: 192.6915
-Q3+1.5IQR: 227.3170
-Max: 766.0880</desc><desc class="x centered">518.2692307692307</desc><desc class="y centered">318.52465745208457</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M605.769231 156.431611 L655.128205 156.431611" stroke-width="3" /><path class="reactive tooltip-trigger" d="M581.089744 114.638942 L679.807692 114.638942" stroke-width="3" /><path class="reactive tooltip-trigger" d="M605.769231 7.569231 L655.128205 7.569231" stroke-width="3" /><path class="reactive tooltip-trigger" d="M630.448718 156.431611 L630.448718 138.047596" stroke-width="2" /><path class="reactive tooltip-trigger" d="M630.448718 7.569231 L630.448718 85.941346" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="52.106249999995526" width="98.71794871794872" x="581.0897435897436" y="85.94134615391158" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="156.43161057686518" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="-548.8366586537791" r="3" /><desc class="value">Min: 636.3230
-Q1-1.5IQR: 636.3230
-Q1: 687.3080
-Median: 752.2280
-Q3: 831.8160
-Q3+1.5IQR: 1049.1680
-Max: 2592.2670</desc><desc class="x centered">630.448717948718</desc><desc class="y centered">100.52574519233269</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Deserialize Valid Data</text><text class="title" x="430.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(80, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Deserialize Valid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(80, 46)"><rect class="background" height="378.0" width="700.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h700.000000" /><g class="guides"><path class="guide line" d="M0.000000 358.639094 h700.000000" /><text class="" x="-5" y="362.1390937829294">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 330.188093 h700.000000" /><text class="" x="-5" y="333.6880927291886">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 301.737092 h700.000000" /><text class="" x="-5" y="305.23709167544786">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 273.286091 h700.000000" /><text class="" x="-5" y="276.7860906217071">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 244.835090 h700.000000" /><text class="" x="-5" y="248.3350895679663">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 216.384089 h700.000000" /><text class="" x="-5" y="219.8840885142255">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 187.933087 h700.000000" /><text class="" x="-5" y="191.43308746048473">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 159.482086 h700.000000" /><text class="" x="-5" y="162.98208640674395">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 131.031085 h700.000000" /><text class="" x="-5" y="134.5310853530032">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 102.580084 h700.000000" /><text class="" x="-5" y="106.08008429926241">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 74.129083 h700.000000" /><text class="" x="-5" y="77.6290832455216">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 45.678082 h700.000000" /><text class="" x="-5" y="49.178082191780845">960</text><title>960</title></g><g class="guides"><path class="guide line" d="M0.000000 17.227081 h700.000000" /><text class="" x="-5" y="20.72708113804009">1040</text><title>1040</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M69.551282 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 69.551282 393.000000)" x="69.55128205128204" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M181.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 181.730769 393.000000)" x="181.73076923076923" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M293.910256 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 293.910256 393.000000)" x="293.9102564102564" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M406.089744 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 406.089744 393.000000)" x="406.0897435897436" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M518.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 518.269231 393.000000)" x="518.2692307692307" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M630.448718 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 630.448718 393.000000)" x="630.4487179487179" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M44.871795 370.585313 L94.230769 370.585313" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.192308 368.811394 L118.910256 368.811394" stroke-width="3" /><path class="reactive tooltip-trigger" d="M44.871795 355.194033 L94.230769 355.194033" stroke-width="3" /><path class="reactive tooltip-trigger" d="M69.551282 370.585313 L69.551282 369.368678" stroke-width="2" /><path class="reactive tooltip-trigger" d="M69.551282 355.194033 L69.551282 363.711196" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="5.657481559519738" width="98.71794871794872" x="20.192307692307693" y="363.7111959957915" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="370.58531348809026" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="297.5252766066284" r="3" /><desc class="value">Min: 46.4090
+Q1-1.5IQR: 46.4090
+Q1: 49.8300
+Median: 51.3970
+Q3: 65.7380
+Q3+1.5IQR: 89.6870
+Max: 251.8430</desc><desc class="x centered">69.55128205128204</desc><desc class="y centered">365.5341227607776</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M157.051282 370.438791 L206.410256 370.438791" stroke-width="3" /><path class="reactive tooltip-trigger" d="M132.371795 369.497063 L231.089744 369.497063" stroke-width="3" /><path class="reactive tooltip-trigger" d="M157.051282 367.344033 L206.410256 367.344033" stroke-width="3" /><path class="reactive tooltip-trigger" d="M181.730769 370.438791 L181.730769 369.816781" stroke-width="2" /><path class="reactive tooltip-trigger" d="M181.730769 367.344033 L181.730769 368.833087" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.9836933613298697" width="98.71794871794872" x="132.3717948717949" y="368.8330874603814" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="370.4387908325432" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="294.5180057953305" r="3" /><desc class="value">Min: 46.8210
+Q1-1.5IQR: 46.8210
+Q1: 48.5700
+Median: 49.4690
+Q3: 51.3360
+Q3+1.5IQR: 55.5230
+Max: 260.2990</desc><desc class="x centered">181.73076923076925</desc><desc class="y centered">369.18595100096013</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M269.230769 370.413185 L318.589744 370.413185" stroke-width="3" /><path class="reactive tooltip-trigger" d="M244.551282 369.430914 L343.269231 369.430914" stroke-width="3" /><path class="reactive tooltip-trigger" d="M269.230769 365.861380 L318.589744 365.861380" stroke-width="3" /><path class="reactive tooltip-trigger" d="M293.910256 370.413185 L293.910256 369.679505" stroke-width="2" /><path class="reactive tooltip-trigger" d="M293.910256 365.861380 L293.910256 368.173380" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.5061248684471025" width="98.71794871794872" x="244.55128205128204" y="368.1733798731929" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="370.4131849313714" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="207.3380927294756" r="3" /><desc class="value">Min: 46.8930
+Q1-1.5IQR: 46.8930
+Q1: 48.9560
+Median: 49.6550
+Q3: 53.1910
+Q3+1.5IQR: 59.6920
+Max: 505.4360</desc><desc class="x centered">293.9102564102564</desc><desc class="y centered">368.71167281332015</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M381.410256 368.902437 L430.769231 368.902437" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.730769 367.017736 L455.448718 367.017736" stroke-width="3" /><path class="reactive tooltip-trigger" d="M381.410256 363.504215 L430.769231 363.504215" stroke-width="3" /><path class="reactive tooltip-trigger" d="M406.089744 368.902437 L406.089744 367.461749" stroke-width="2" /><path class="reactive tooltip-trigger" d="M406.089744 363.504215 L406.089744 365.880585" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.5811643842495187" width="98.71794871794872" x="356.7307692307692" y="365.8805848255896" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="368.9024367755022" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="88.52564541642118" r="3" /><desc class="value">Min: 51.1410
+Q1-1.5IQR: 51.1410
+Q1: 55.1920
+Median: 56.4405
+Q3: 59.6380
+Q3+1.5IQR: 66.3200
+Max: 839.5190</desc><desc class="x centered">406.0897435897436</desc><desc class="y centered">366.553344309707</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M493.589744 327.626436 L542.948718 327.626436" stroke-width="3" /><path class="reactive tooltip-trigger" d="M468.910256 321.997050 L567.628205 321.997050" stroke-width="3" /><path class="reactive tooltip-trigger" d="M493.589744 308.972893 L542.948718 308.972893" stroke-width="3" /><path class="reactive tooltip-trigger" d="M518.269231 327.626436 L518.269231 323.118197" stroke-width="2" /><path class="reactive tooltip-trigger" d="M518.269231 308.972893 L518.269231 317.466317" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="5.651880268539742" width="98.71794871794872" x="468.9102564102564" y="317.46631651736067" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="327.62643572175153" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="-60.5163461538944" r="3" /><desc class="value">Min: 167.2030
+Q1-1.5IQR: 167.2030
+Q1: 179.8795
+Median: 183.0320
+Q3: 195.7718
+Q3+1.5IQR: 219.6540
+Max: 1258.6030</desc><desc class="x centered">518.2692307692307</desc><desc class="y centered">319.8361782139063</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M605.769231 147.361604 L655.128205 147.361604" stroke-width="3" /><path class="reactive tooltip-trigger" d="M581.089744 118.661657 L679.807692 118.661657" stroke-width="3" /><path class="reactive tooltip-trigger" d="M605.769231 7.599974 L655.128205 7.599974" stroke-width="3" /><path class="reactive tooltip-trigger" d="M630.448718 147.361604 L630.448718 136.546312" stroke-width="2" /><path class="reactive tooltip-trigger" d="M630.448718 7.599974 L630.448718 85.755051" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="50.79126053725099" width="98.71794871794872" x="581.0897435897436" y="85.75505136982207" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="147.36160432045813" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="-444.0059668069259" r="3" /><desc class="value">Min: 674.0810
+Q1-1.5IQR: 674.0810
+Q1: 704.4920
+Median: 754.7810
+Q3: 847.3095
+Q3+1.5IQR: 1067.0700
+Max: 2336.9190</desc><desc class="x centered">630.448717948718</desc><desc class="y centered">99.18491965225098</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Deserialize Valid Data</text><text class="title" x="430.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(80, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/static/Serialize_Invalid_Data.svg b/docs/static/Serialize_Invalid_Data.svg
index 91751000..0fcf3f66 100644
--- a/docs/static/Serialize_Invalid_Data.svg
+++ b/docs/static/Serialize_Invalid_Data.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f{background-color:rgba(249,249,249,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f path,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f rect,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .graph{fill:rgba(0,0,0,.87)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f text.no_data{fill:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .title{fill:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .legends .legend text{fill:rgba(0,0,0,.87)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis .line{stroke:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis text.major{fill:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.y .guides:hover .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .line-graph .axis.x .guides:hover .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .stackedline-graph .axis.x .guides:hover .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .ci{stroke:rgba(0,0,0,.87)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .reactive.active,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .ci .reactive.active{stroke-width:1.5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .series text{fill:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip .label{fill:rgba(0,0,0,.87)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip .label{fill:rgba(0,0,0,.87)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip .value{font-size:1.5em}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .bound{font-size:.5em}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-0,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-1,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-2,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-3,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-4,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-5,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay .color-0 text{fill:black}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay .color-1 text{fill:black}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay .color-2 text{fill:black}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay .color-3 text{fill:black}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay .color-4 text{fill:black}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .text-overlay .color-5 text{fill:black}
-#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f text.no_data{text-anchor:middle}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .guide.line{fill:none}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .centered{text-anchor:middle}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .title{text-anchor:middle}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .legends .legend text{fill-opacity:1}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.x text{text-anchor:middle}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.x:not(.web) text[transform]{text-anchor:start}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.y text{text-anchor:end}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.y text[transform].backwards{text-anchor:start}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.y2 text{text-anchor:start}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.y2 text[transform].backwards{text-anchor:end}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis .guide.line{stroke-dasharray:4,4}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis .major.guide.line{stroke-dasharray:6,6}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .horizontal .axis.y .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .horizontal .axis.y2 .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .vertical .axis.x .guide.line{opacity:0}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .horizontal .axis.always_show .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.y .guides:hover .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.y2 .guides:hover .guide.line,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis.x .guides:hover .guide.line{opacity:1}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .axis .guides:hover text{opacity:1}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .nofill{fill:none}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .subtle-fill{fill-opacity:.2}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .dot{stroke-width:1px;fill-opacity:1}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .dot.active{stroke-width:5px}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .dot.negative{fill:transparent}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f text,#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f tspan{stroke:none !important}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .series text.active{opacity:1}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .tooltip text{fill-opacity:1}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .showable{visibility:hidden}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .showable.shown{visibility:visible}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-b4a28eb0-7984-468a-a149-6c1b3a65ea5f .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['b4a28eb0-7984-468a-a149-6c1b3a65ea5f'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [27, 833], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Serialize Invalid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-object-api", "typic-protocol-api", "typic-functional-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 27, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[typic-object-api] - 13642 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[typic-protocol-api] - 13061 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[typic-functional-api] - 10005 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[pydantic] - 6762 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[marshmallow] - 3458 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[djangorestframework] - 1316 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d{background-color:rgba(249,249,249,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d path,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d rect,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .graph{fill:rgba(0,0,0,.87)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d text.no_data{fill:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .title{fill:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .legends .legend text{fill:rgba(0,0,0,.87)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis .line{stroke:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis text.major{fill:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.y .guides:hover .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .line-graph .axis.x .guides:hover .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .stackedline-graph .axis.x .guides:hover .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .ci{stroke:rgba(0,0,0,.87)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .reactive.active,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .ci .reactive.active{stroke-width:1.5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .series text{fill:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip .label{fill:rgba(0,0,0,.87)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip .label{fill:rgba(0,0,0,.87)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip .value{font-size:1.5em}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .bound{font-size:.5em}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-0,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-1,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-2,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-3,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-4,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-5,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay .color-0 text{fill:black}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay .color-1 text{fill:black}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay .color-2 text{fill:black}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay .color-3 text{fill:black}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay .color-4 text{fill:black}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .text-overlay .color-5 text{fill:black}
+#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d text.no_data{text-anchor:middle}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .guide.line{fill:none}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .centered{text-anchor:middle}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .title{text-anchor:middle}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .legends .legend text{fill-opacity:1}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.x text{text-anchor:middle}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.x:not(.web) text[transform]{text-anchor:start}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.y text{text-anchor:end}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.y text[transform].backwards{text-anchor:start}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.y2 text{text-anchor:start}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.y2 text[transform].backwards{text-anchor:end}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis .guide.line{stroke-dasharray:4,4}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis .major.guide.line{stroke-dasharray:6,6}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .horizontal .axis.y .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .horizontal .axis.y2 .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .vertical .axis.x .guide.line{opacity:0}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .horizontal .axis.always_show .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.y .guides:hover .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.y2 .guides:hover .guide.line,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis.x .guides:hover .guide.line{opacity:1}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .axis .guides:hover text{opacity:1}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .nofill{fill:none}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .subtle-fill{fill-opacity:.2}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .dot{stroke-width:1px;fill-opacity:1}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .dot.active{stroke-width:5px}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .dot.negative{fill:transparent}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d text,#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d tspan{stroke:none !important}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .series text.active{opacity:1}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .tooltip text{fill-opacity:1}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .showable{visibility:hidden}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .showable.shown{visibility:visible}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-a71ef7a1-0acc-43a3-b4bf-47327de3478d .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['a71ef7a1-0acc-43a3-b4bf-47327de3478d'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [18, 886], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Serialize Invalid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-protocol-api", "typic-object-api", "typic-functional-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 18, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[typic-protocol-api] - 19409 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[typic-object-api] - 18098 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[typic-functional-api] - 15449 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[pydantic] - 7210 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[marshmallow] - 6321 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_invalid_data[djangorestframework] - 912 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,40 +345,40 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Serialize Invalid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(74, 46)"><rect class="background" height="378.0" width="706.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h706.000000" /><g class="guides"><path class="guide line" d="M0.000000 346.830693 h706.000000" /><text class="" x="-5" y="350.33069288032067">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 310.755106 h706.000000" /><text class="" x="-5" y="314.2551059362474">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 274.679519 h706.000000" /><text class="" x="-5" y="278.17951899217405">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 238.603932 h706.000000" /><text class="" x="-5" y="242.10393204810077">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 202.528345 h706.000000" /><text class="" x="-5" y="206.02834510402747">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 166.452758 h706.000000" /><text class="" x="-5" y="169.9527581599542">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 130.377171 h706.000000" /><text class="" x="-5" y="133.87717121588088">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 94.301584 h706.000000" /><text class="" x="-5" y="97.8015842718076">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 58.225997 h706.000000" /><text class="" x="-5" y="61.72599732773432">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 22.150410 h706.000000" /><text class="" x="-5" y="25.65041038366104">800</text><title>800</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M70.147436 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 70.147436 393.000000)" x="70.1474358974359" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M183.288462 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 183.288462 393.000000)" x="183.28846153846155" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M296.429487 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 296.429487 393.000000)" x="296.4294871794872" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M409.570513 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 409.570513 393.000000)" x="409.5705128205129" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M522.711538 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 522.711538 393.000000)" x="522.7115384615385" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M635.852564 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 635.852564 393.000000)" x="635.8525641025641" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M45.256410 370.497631 L95.038462 370.497631" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.365385 369.523590 L119.929487 369.523590" stroke-width="3" /><path class="reactive tooltip-trigger" d="M45.256410 367.936715 L95.038462 367.936715" stroke-width="3" /><path class="reactive tooltip-trigger" d="M70.147436 370.497631 L70.147436 370.015571" stroke-width="2" /><path class="reactive tooltip-trigger" d="M70.147436 367.936715 L70.147436 369.184479" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.8310913340995398" width="99.56410256410255" x="20.365384615384613" y="369.18447938590526" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="370.49763075037885" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="309.1957386908628" r="3" /><desc class="value">Min: 27.5170
-Q1-1.5IQR: 27.5170
-Q1: 28.5860
-Median: 29.6770
-Q3: 30.4290
-Q3+1.5IQR: 33.1960
-Max: 163.4580</desc><desc class="x centered">70.14743589743588</desc><desc class="y centered">369.43159715609175</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M158.397436 370.201811 L208.179487 370.201811" stroke-width="3" /><path class="reactive tooltip-trigger" d="M133.506410 369.308489 L233.070513 369.308489" stroke-width="3" /><path class="reactive tooltip-trigger" d="M158.397436 367.804137 L208.179487 367.804137" stroke-width="3" /><path class="reactive tooltip-trigger" d="M183.288462 370.201811 L183.288462 369.770708" stroke-width="2" /><path class="reactive tooltip-trigger" d="M183.288462 367.804137 L183.288462 368.985049" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.7856586412368642" width="99.56410256410255" x="133.50641025641025" y="368.9850490313499" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="370.2018109369924" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="307.6769564798148" r="3" /><desc class="value">Min: 28.1730
-Q1-1.5IQR: 28.1730
-Q1: 29.1290
-Median: 30.1540
-Q3: 30.8712
-Q3+1.5IQR: 33.4900
-Max: 166.8260</desc><desc class="x centered">183.28846153846152</desc><desc class="y centered">369.2140388195196</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M271.538462 369.670598 L321.320513 369.670598" stroke-width="3" /><path class="reactive tooltip-trigger" d="M246.647436 368.636581 L346.211538 368.636581" stroke-width="3" /><path class="reactive tooltip-trigger" d="M271.538462 366.298432 L321.320513 366.298432" stroke-width="3" /><path class="reactive tooltip-trigger" d="M296.429487 369.670598 L296.429487 369.259336" stroke-width="2" /><path class="reactive tooltip-trigger" d="M296.429487 366.298432 L296.429487 368.077748" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.1815882098674706" width="99.56410256410255" x="246.64743589743588" y="368.0777480187321" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="369.6705979185442" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="272.28770757783127" r="3" /><desc class="value">Min: 29.3510
-Q1-1.5IQR: 29.3510
-Q1: 30.2630
-Median: 31.6440
-Q3: 32.8833
-Q3+1.5IQR: 36.8290
-Max: 245.3040</desc><desc class="x centered">296.4294871794872</desc><desc class="y centered">368.38853920033705</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M384.679487 351.361336 L434.461538 351.361336" stroke-width="3" /><path class="reactive tooltip-trigger" d="M359.788462 349.092632 L459.352564 349.092632" stroke-width="3" /><path class="reactive tooltip-trigger" d="M384.679487 344.213860 L434.461538 344.213860" stroke-width="3" /><path class="reactive tooltip-trigger" d="M409.570513 351.361336 L409.570513 350.647039" stroke-width="2" /><path class="reactive tooltip-trigger" d="M409.570513 344.213860 L409.570513 348.097848" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="2.549191161882277" width="99.56410256410255" x="359.78846153846155" y="348.09784787220474" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="351.361335655404" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="127.28774813881694" r="3" /><desc class="value">Min: 69.9530
-Q1-1.5IQR: 69.9530
-Q1: 71.5370
-Median: 74.9840
-Q3: 77.1900
-Q3+1.5IQR: 85.8030
-Max: 566.8510</desc><desc class="x centered">409.5705128205128</desc><desc class="y centered">348.6825429470352</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M497.820513 348.946075 L547.602564 348.946075" stroke-width="3" /><path class="reactive tooltip-trigger" d="M472.929487 346.529236 L572.493590 346.529236" stroke-width="3" /><path class="reactive tooltip-trigger" d="M497.820513 340.958038 L547.602564 340.958038" stroke-width="3" /><path class="reactive tooltip-trigger" d="M522.711538 348.946075 L522.711538 348.063576" stroke-width="2" /><path class="reactive tooltip-trigger" d="M522.711538 340.958038 L522.711538 345.223075" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="2.8405015273287404" width="99.56410256410255" x="472.9294871794872" y="345.2230745368466" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="348.94607510911743" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="212.87482343896787" r="3" /><desc class="value">Min: 75.3090
-Q1-1.5IQR: 75.3090
-Q1: 77.2660
-Median: 80.6685
-Q3: 83.5650
-Q3+1.5IQR: 93.0230
-Max: 377.0560</desc><desc class="x centered">522.7115384615385</desc><desc class="y centered">345.94400004733234</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M610.961538 159.557361 L660.743590 159.557361" stroke-width="3" /><path class="reactive tooltip-trigger" d="M586.070513 131.769012 L685.634615 131.769012" stroke-width="3" /><path class="reactive tooltip-trigger" d="M610.961538 7.279603 L660.743590 7.279603" stroke-width="3" /><path class="reactive tooltip-trigger" d="M635.852564 159.557361 L635.852564 152.174943" stroke-width="2" /><path class="reactive tooltip-trigger" d="M635.852564 7.279603 L635.852564 95.246539" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="56.928403560007894" width="99.56410256410255" x="586.0705128205128" y="95.24653917752045" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="159.5573606604274" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="-807.5308193356075" r="3" /><desc class="value">Min: 495.2910
-Q1-1.5IQR: 495.2910
-Q1: 511.6620
-Median: 556.9135
-Q3: 637.9045
-Q3+1.5IQR: 832.9770
-Max: 2639.8730</desc><desc class="x centered">635.8525641025641</desc><desc class="y centered">109.20549150616</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Serialize Invalid Data</text><text class="title" x="427.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(74, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Serialize Invalid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(74, 46)"><rect class="background" height="378.0" width="706.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h706.000000" /><g class="guides"><path class="guide line" d="M0.000000 344.769231 h706.000000" /><text class="" x="-5" y="348.2692307692308">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 311.270471 h706.000000" /><text class="" x="-5" y="314.77047146401986">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 277.771712 h706.000000" /><text class="" x="-5" y="281.27171215880895">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 244.272953 h706.000000" /><text class="" x="-5" y="247.772952853598">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 210.774194 h706.000000" /><text class="" x="-5" y="214.27419354838707">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 177.275434 h706.000000" /><text class="" x="-5" y="180.77543424317616">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 143.776675 h706.000000" /><text class="" x="-5" y="147.27667493796525">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 110.277916 h706.000000" /><text class="" x="-5" y="113.77791563275434">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 76.779156 h706.000000" /><text class="" x="-5" y="80.27915632754343">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 43.280397 h706.000000" /><text class="" x="-5" y="46.78039702233252">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 9.781638 h706.000000" /><text class="" x="-5" y="13.281637717121555">880</text><title>880</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M70.147436 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 70.147436 393.000000)" x="70.1474358974359" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M183.288462 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 183.288462 393.000000)" x="183.28846153846155" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M296.429487 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 296.429487 393.000000)" x="296.4294871794872" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M409.570513 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 409.570513 393.000000)" x="409.5705128205129" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M522.711538 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 522.711538 393.000000)" x="522.7115384615385" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M635.852564 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 635.852564 393.000000)" x="635.8525641025641" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M45.256410 370.446030 L95.038462 370.446030" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.365385 370.016827 L119.929487 370.016827" stroke-width="3" /><path class="reactive tooltip-trigger" d="M45.256410 368.574287 L95.038462 368.574287" stroke-width="3" /><path class="reactive tooltip-trigger" d="M70.147436 370.446030 L70.147436 370.144960" stroke-width="2" /><path class="reactive tooltip-trigger" d="M70.147436 368.574287 L70.147436 369.516858" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.6281017361307022" width="99.56410256410255" x="20.365384615384613" y="369.51685794048535" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="370.4460297780957" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="262.89281947893375" r="3" /><desc class="value">Min: 18.6800
+Q1-1.5IQR: 18.6800
+Q1: 19.3990
+Median: 19.7050
+Q3: 20.8990
+Q3+1.5IQR: 23.1500
+Max: 275.5330</desc><desc class="x centered">70.14743589743588</desc><desc class="y centered">369.7397921837348</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M158.397436 370.445192 L208.179487 370.445192" stroke-width="3" /><path class="reactive tooltip-trigger" d="M133.506410 370.006359 L233.070513 370.006359" stroke-width="3" /><path class="reactive tooltip-trigger" d="M158.397436 369.328846 L208.179487 369.328846" stroke-width="3" /><path class="reactive tooltip-trigger" d="M183.288462 370.445192 L183.288462 370.128629" stroke-width="2" /><path class="reactive tooltip-trigger" d="M183.288462 369.328846 L183.288462 369.808716" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.3199131510569373" width="99.56410256410255" x="133.50641025641025" y="369.80871588165" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="370.44519230755617" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="263.55400124187156" r="3" /><desc class="value">Min: 18.6820
+Q1-1.5IQR: 18.6820
+Q1: 19.4380
+Median: 19.7300
+Q3: 20.2020
+Q3+1.5IQR: 21.3480
+Max: 273.9540</desc><desc class="x centered">183.28846153846152</desc><desc class="y centered">369.94354838740594</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M271.538462 370.049907 L321.320513 370.049907" stroke-width="3" /><path class="reactive tooltip-trigger" d="M246.647436 369.573806 L346.211538 369.573806" stroke-width="3" /><path class="reactive tooltip-trigger" d="M271.538462 369.084305 L321.320513 369.084305" stroke-width="3" /><path class="reactive tooltip-trigger" d="M296.429487 370.049907 L296.429487 369.699426" stroke-width="2" /><path class="reactive tooltip-trigger" d="M296.429487 369.084305 L296.429487 369.454048" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.24537841287400397" width="99.56410256410255" x="246.64743589743588" y="369.45404776642596" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="370.23456885736164" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="279.9771867248966" r="3" /><desc class="value">Min: 19.1850
+Q1-1.5IQR: 19.6260
+Q1: 20.4630
+Median: 20.7630
+Q3: 21.0490
+Q3+1.5IQR: 21.9320
+Max: 234.7330</desc><desc class="x centered">296.4294871794872</desc><desc class="y centered">369.5722983876316</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M384.679487 348.194060 L434.461538 348.194060" stroke-width="3" /><path class="reactive tooltip-trigger" d="M359.788462 346.773503 L459.352564 346.773503" stroke-width="3" /><path class="reactive tooltip-trigger" d="M384.679487 343.176783 L434.461538 343.176783" stroke-width="3" /><path class="reactive tooltip-trigger" d="M409.570513 348.194060 L409.570513 347.259445" stroke-width="2" /><path class="reactive tooltip-trigger" d="M409.570513 343.176783 L409.570513 345.628474" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.6309708432440289" width="99.56410256410255" x="359.78846153846155" y="345.6284739463648" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="348.19406017419715" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="61.25541253141381" r="3" /><desc class="value">Min: 71.8210
+Q1-1.5IQR: 71.8210
+Q1: 74.0530
+Median: 75.2135
+Q3: 77.9480
+Q3+1.5IQR: 83.8030
+Max: 757.0730</desc><desc class="x centered">409.5705128205128</desc><desc class="y centered">346.20645316420087</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M497.820513 344.959755 L547.602564 344.959755" stroke-width="3" /><path class="reactive tooltip-trigger" d="M472.929487 343.059119 L572.493590 343.059119" stroke-width="3" /><path class="reactive tooltip-trigger" d="M497.820513 336.719060 L547.602564 336.719060" stroke-width="3" /><path class="reactive tooltip-trigger" d="M522.711538 344.959755 L522.711538 343.541187" stroke-width="2" /><path class="reactive tooltip-trigger" d="M522.711538 336.719060 L522.711538 340.813655" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="2.727531793102969" width="99.56410256410255" x="472.9294871794872" y="340.81365539717063" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="344.9597549619597" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="179.39967431800724" r="3" /><desc class="value">Min: 79.5450
+Q1-1.5IQR: 79.5450
+Q1: 82.9327
+Median: 84.0840
+Q3: 89.4465
+Q3+1.5IQR: 99.2250
+Max: 474.9270</desc><desc class="x centered">522.7115384615385</desc><desc class="y centered">341.8185553656191</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M610.961538 166.272767 L660.743590 166.272767" stroke-width="3" /><path class="reactive tooltip-trigger" d="M586.070513 128.110561 L685.634615 128.110561" stroke-width="3" /><path class="reactive tooltip-trigger" d="M610.961538 7.379358 L660.743590 7.379358" stroke-width="3" /><path class="reactive tooltip-trigger" d="M635.852564 166.272767 L635.852564 148.966261" stroke-width="2" /><path class="reactive tooltip-trigger" d="M635.852564 7.379358 L635.852564 92.632235" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="56.33402605415705" width="99.56410256410255" x="586.0705128205128" y="92.63223480207682" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="166.27276674962374" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="-25789.689407568265" r="3" /><desc class="value">Min: 506.2760
+Q1-1.5IQR: 506.2760
+Q1: 547.6065
+Median: 597.4130
+Q3: 682.1405
+Q3+1.5IQR: 885.7370
+Max: 62492.9590</desc><desc class="x centered">635.8525641025641</desc><desc class="y centered">108.67223635237889</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Serialize Invalid Data</text><text class="title" x="427.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(74, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/static/Serialize_Valid_Data.svg b/docs/static/Serialize_Valid_Data.svg
index 0960404f..53d8cdae 100644
--- a/docs/static/Serialize_Valid_Data.svg
+++ b/docs/static/Serialize_Valid_Data.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-2ef60b53-c426-4699-ac6f-2cb74d503261" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-2ef60b53-c426-4699-ac6f-2cb74d503261{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-2ef60b53-c426-4699-ac6f-2cb74d503261{background-color:rgba(249,249,249,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 path,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 rect,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .graph{fill:rgba(0,0,0,.87)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 text.no_data{fill:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .title{fill:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis .line{stroke:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis text.major{fill:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.y .guides:hover .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .line-graph .axis.x .guides:hover .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .ci{stroke:rgba(0,0,0,.87)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .reactive.active,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .ci .reactive.active{stroke-width:1.5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .series text{fill:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip .value{font-size:1.5em}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .bound{font-size:.5em}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-0,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-1,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-2,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-3,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-4,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-5,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay .color-0 text{fill:black}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay .color-1 text{fill:black}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay .color-2 text{fill:black}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay .color-3 text{fill:black}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay .color-4 text{fill:black}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .text-overlay .color-5 text{fill:black}
-#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 text.no_data{text-anchor:middle}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .guide.line{fill:none}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .centered{text-anchor:middle}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .title{text-anchor:middle}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .legends .legend text{fill-opacity:1}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.x text{text-anchor:middle}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.y text{text-anchor:end}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.y text[transform].backwards{text-anchor:start}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.y2 text{text-anchor:start}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.y2 text[transform].backwards{text-anchor:end}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis .guide.line{stroke-dasharray:4,4}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis .major.guide.line{stroke-dasharray:6,6}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .horizontal .axis.y .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .horizontal .axis.y2 .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .vertical .axis.x .guide.line{opacity:0}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .horizontal .axis.always_show .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.y .guides:hover .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.y2 .guides:hover .guide.line,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis.x .guides:hover .guide.line{opacity:1}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .axis .guides:hover text{opacity:1}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .nofill{fill:none}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .subtle-fill{fill-opacity:.2}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .dot{stroke-width:1px;fill-opacity:1}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .dot.active{stroke-width:5px}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .dot.negative{fill:transparent}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 text,#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 tspan{stroke:none !important}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .series text.active{opacity:1}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .tooltip text{fill-opacity:1}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .showable{visibility:hidden}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .showable.shown{visibility:visible}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-2ef60b53-c426-4699-ac6f-2cb74d503261 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['2ef60b53-c426-4699-ac6f-2cb74d503261'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [41, 829], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Serialize Valid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-object-api", "typic-protocol-api", "typic-functional-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 41, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[typic-object-api] - 960 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[typic-protocol-api] - 2445 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[typic-functional-api] - 2162 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[pydantic] - 5383 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[marshmallow] - 6870 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[djangorestframework] - 1191 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-b89be339-91d7-4f3d-9d11-4388bff23f0c" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c{background-color:rgba(249,249,249,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c path,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c rect,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .graph{fill:rgba(0,0,0,.87)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c text.no_data{fill:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .title{fill:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .legends .legend text{fill:rgba(0,0,0,.87)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis .line{stroke:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis text.major{fill:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.y .guides:hover .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .line-graph .axis.x .guides:hover .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .stackedline-graph .axis.x .guides:hover .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .ci{stroke:rgba(0,0,0,.87)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .reactive.active,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .ci .reactive.active{stroke-width:1.5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .series text{fill:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip .label{fill:rgba(0,0,0,.87)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip .label{fill:rgba(0,0,0,.87)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip .value{font-size:1.5em}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .bound{font-size:.5em}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-0,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-1,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-2,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-3,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-4,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-5,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay .color-0 text{fill:black}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay .color-1 text{fill:black}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay .color-2 text{fill:black}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay .color-3 text{fill:black}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay .color-4 text{fill:black}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .text-overlay .color-5 text{fill:black}
+#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c text.no_data{text-anchor:middle}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .guide.line{fill:none}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .centered{text-anchor:middle}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .title{text-anchor:middle}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .legends .legend text{fill-opacity:1}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.x text{text-anchor:middle}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.x:not(.web) text[transform]{text-anchor:start}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.y text{text-anchor:end}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.y text[transform].backwards{text-anchor:start}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.y2 text{text-anchor:start}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.y2 text[transform].backwards{text-anchor:end}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis .guide.line{stroke-dasharray:4,4}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis .major.guide.line{stroke-dasharray:6,6}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .horizontal .axis.y .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .horizontal .axis.y2 .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .vertical .axis.x .guide.line{opacity:0}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .horizontal .axis.always_show .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.y .guides:hover .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.y2 .guides:hover .guide.line,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis.x .guides:hover .guide.line{opacity:1}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .axis .guides:hover text{opacity:1}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .nofill{fill:none}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .subtle-fill{fill-opacity:.2}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .dot{stroke-width:1px;fill-opacity:1}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .dot.active{stroke-width:5px}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .dot.negative{fill:transparent}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c text,#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c tspan{stroke:none !important}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .series text.active{opacity:1}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .tooltip text{fill-opacity:1}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .showable{visibility:hidden}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .showable.shown{visibility:visible}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-b89be339-91d7-4f3d-9d11-4388bff23f0c .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['b89be339-91d7-4f3d-9d11-4388bff23f0c'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [25, 872], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Serialize Valid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-protocol-api", "typic-object-api", "typic-functional-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 25, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[typic-protocol-api] - 2363 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[typic-object-api] - 913 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[typic-functional-api] - 2294 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[pydantic] - 5005 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[marshmallow] - 6502 rounds", "benchmark/test_benchmarks.py::test_benchmarks_serialize_valid_data[djangorestframework] - 1306 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,40 +345,40 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Serialize Valid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(74, 46)"><rect class="background" height="378.0" width="706.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h706.000000" /><g class="guides"><path class="guide line" d="M0.000000 352.742191 h706.000000" /><text class="" x="-5" y="356.2421905505662">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 334.292366 h706.000000" /><text class="" x="-5" y="337.79236626317845">120</text><title>120</title></g><g class="guides"><path class="guide line" d="M0.000000 315.842542 h706.000000" /><text class="" x="-5" y="319.3425419757907">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 297.392718 h706.000000" /><text class="" x="-5" y="300.89271768840297">200</text><title>200</title></g><g class="guides"><path class="guide line" d="M0.000000 278.942893 h706.000000" /><text class="" x="-5" y="282.4428934010152">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 260.493069 h706.000000" /><text class="" x="-5" y="263.9930691136275">280</text><title>280</title></g><g class="guides"><path class="guide line" d="M0.000000 242.043245 h706.000000" /><text class="" x="-5" y="245.54324482623974">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 223.593421 h706.000000" /><text class="" x="-5" y="227.093420538852">360</text><title>360</title></g><g class="guides"><path class="guide line" d="M0.000000 205.143596 h706.000000" /><text class="" x="-5" y="208.64359625146426">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 186.693772 h706.000000" /><text class="" x="-5" y="190.19377196407652">440</text><title>440</title></g><g class="guides"><path class="guide line" d="M0.000000 168.243948 h706.000000" /><text class="" x="-5" y="171.74394767668878">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 149.794123 h706.000000" /><text class="" x="-5" y="153.29412338930106">520</text><title>520</title></g><g class="guides"><path class="guide line" d="M0.000000 131.344299 h706.000000" /><text class="" x="-5" y="134.84429910191332">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 112.894475 h706.000000" /><text class="" x="-5" y="116.39447481452555">600</text><title>600</title></g><g class="guides"><path class="guide line" d="M0.000000 94.444651 h706.000000" /><text class="" x="-5" y="97.94465052713781">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 75.994826 h706.000000" /><text class="" x="-5" y="79.49482623975007">680</text><title>680</title></g><g class="guides"><path class="guide line" d="M0.000000 57.545002 h706.000000" /><text class="" x="-5" y="61.045001952362384">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 39.095178 h706.000000" /><text class="" x="-5" y="42.59517766497464">760</text><title>760</title></g><g class="guides"><path class="guide line" d="M0.000000 20.645353 h706.000000" /><text class="" x="-5" y="24.1453533775869">800</text><title>800</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M70.147436 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 70.147436 393.000000)" x="70.1474358974359" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M183.288462 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 183.288462 393.000000)" x="183.28846153846155" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M296.429487 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 296.429487 393.000000)" x="296.4294871794872" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M409.570513 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 409.570513 393.000000)" x="409.5705128205129" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M522.711538 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 522.711538 393.000000)" x="522.7115384615385" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M635.852564 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 635.852564 393.000000)" x="635.8525641025641" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M45.256410 370.424502 L95.038462 370.424502" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.365385 368.436764 L119.929487 368.436764" stroke-width="3" /><path class="reactive tooltip-trigger" d="M45.256410 358.623533 L95.038462 358.623533" stroke-width="3" /><path class="reactive tooltip-trigger" d="M70.147436 370.424502 L70.147436 368.926607" stroke-width="2" /><path class="reactive tooltip-trigger" d="M70.147436 358.623533 L70.147436 364.814833" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="4.111773964613519" width="99.56410256410255" x="20.365384615384613" y="364.81483307330967" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="370.4245021478817" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="294.07636177222196" r="3" /><desc class="value">Min: 41.6640
-Q1-1.5IQR: 41.6640
-Q1: 44.9115
-Median: 45.9735
-Q3: 53.8260
-Q3+1.5IQR: 67.2490
-Max: 207.1900</desc><desc class="x centered">70.14743589743588</desc><desc class="y centered">366.24524795026974</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M158.397436 370.366385 L208.179487 370.366385" stroke-width="3" /><path class="reactive tooltip-trigger" d="M133.506410 368.627951 L233.070513 368.627951" stroke-width="3" /><path class="reactive tooltip-trigger" d="M158.397436 365.875237 L208.179487 365.875237" stroke-width="3" /><path class="reactive tooltip-trigger" d="M183.288462 370.366385 L183.288462 368.973885" stroke-width="2" /><path class="reactive tooltip-trigger" d="M183.288462 365.875237 L183.288462 367.756542" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.2173424687071588" width="99.56410256410255" x="133.50641025641025" y="367.75654224417724" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="370.36638520148387" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="244.3374804767879" r="3" /><desc class="value">Min: 41.7900
-Q1-1.5IQR: 41.7900
-Q1: 44.8090
-Median: 45.5590
-Q3: 47.4483
-Q3+1.5IQR: 51.5270
-Max: 315.0260</desc><desc class="x centered">183.28846153846152</desc><desc class="y centered">368.31999987799645</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M271.538462 369.838259 L321.320513 369.838259" stroke-width="3" /><path class="reactive tooltip-trigger" d="M246.647436 368.118735 L346.211538 368.118735" stroke-width="3" /><path class="reactive tooltip-trigger" d="M271.538462 363.785794 L321.320513 363.785794" stroke-width="3" /><path class="reactive tooltip-trigger" d="M296.429487 369.838259 L296.429487 369.375168" stroke-width="2" /><path class="reactive tooltip-trigger" d="M296.429487 363.785794 L296.429487 367.144585" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="2.230583755734415" width="99.56410256410255" x="246.64743589743588" y="367.14458463501023" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="369.83825898098485" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="255.53744631046607" r="3" /><desc class="value">Min: 42.9350
-Q1-1.5IQR: 42.9350
-Q1: 43.9390
-Median: 46.6630
-Q3: 48.7750
-Q3+1.5IQR: 56.0570
-Max: 290.7440</desc><desc class="x centered">296.4294871794872</desc><desc class="y centered">367.65250829747197</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M384.679487 361.512776 L434.461538 361.512776" stroke-width="3" /><path class="reactive tooltip-trigger" d="M359.788462 359.368445 L459.352564 359.368445" stroke-width="3" /><path class="reactive tooltip-trigger" d="M384.679487 352.786470 L434.461538 352.786470" stroke-width="3" /><path class="reactive tooltip-trigger" d="M409.570513 361.512776 L409.570513 360.659933" stroke-width="2" /><path class="reactive tooltip-trigger" d="M409.570513 352.786470 L409.570513 357.514238" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="3.145695041341014" width="99.56410256410255" x="359.78846153846155" y="357.5142376023827" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="361.51277577150984" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="269.75903211610404" r="3" /><desc class="value">Min: 60.9850
-Q1-1.5IQR: 60.9850
-Q1: 62.8340
-Median: 65.6340
-Q3: 69.6540
-Q3+1.5IQR: 79.9040
-Max: 259.9110</desc><desc class="x centered">409.5705128205128</desc><desc class="y centered">358.3683722179758</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M497.820513 359.322320 L547.602564 359.322320" stroke-width="3" /><path class="reactive tooltip-trigger" d="M472.929487 358.420355 L572.493590 358.420355" stroke-width="3" /><path class="reactive tooltip-trigger" d="M497.820513 354.096869 L547.602564 354.096869" stroke-width="3" /><path class="reactive tooltip-trigger" d="M522.711538 359.322320 L522.711538 358.776206" stroke-width="2" /><path class="reactive tooltip-trigger" d="M522.711538 354.096869 L522.711538 356.906777" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.8694284457421304" width="99.56410256410255" x="472.9294871794872" y="356.90677713805303" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="359.32232038282405" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="223.08005417791637" r="3" /><desc class="value">Min: 65.7340
-Q1-1.5IQR: 65.7340
-Q1: 66.9180
-Median: 67.6895
-Q3: 70.9710
-Q3+1.5IQR: 77.0630
-Max: 361.1130</desc><desc class="x centered">522.7115384615385</desc><desc class="y centered">357.5045053202081</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M610.961538 166.465846 L660.743590 166.465846" stroke-width="3" /><path class="reactive tooltip-trigger" d="M586.070513 130.067571 L685.634615 130.067571" stroke-width="3" /><path class="reactive tooltip-trigger" d="M610.961538 7.344875 L660.743590 7.344875" stroke-width="3" /><path class="reactive tooltip-trigger" d="M635.852564 166.465846 L635.852564 153.261307" stroke-width="2" /><path class="reactive tooltip-trigger" d="M635.852564 7.344875 L635.852564 95.257711" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="58.00359539666502" width="99.56410256410255" x="586.0705128205128" y="95.2577112214044" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="166.46584586153986" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="-853.8352669855506" r="3" /><desc class="value">Min: 483.8550
-Q1-1.5IQR: 483.8550
-Q1: 512.4830
-Median: 562.7680
-Q3: 638.2372
-Q3+1.5IQR: 828.8360
-Max: 2695.9110</desc><desc class="x centered">635.8525641025641</desc><desc class="y centered">110.47946200219525</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Serialize Valid Data</text><text class="title" x="427.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(74, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Serialize Valid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(74, 46)"><rect class="background" height="378.0" width="706.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h706.000000" /><g class="guides"><path class="guide line" d="M0.000000 347.129371 h706.000000" /><text class="" x="-5" y="350.6293706293706">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 312.800064 h706.000000" /><text class="" x="-5" y="316.30006357279086">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 278.470757 h706.000000" /><text class="" x="-5" y="281.97075651621105">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 244.141449 h706.000000" /><text class="" x="-5" y="247.6414494596313">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 209.812142 h706.000000" /><text class="" x="-5" y="213.3121424030515">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 175.482835 h706.000000" /><text class="" x="-5" y="178.98283534647172">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 141.153528 h706.000000" /><text class="" x="-5" y="144.65352828989194">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 106.824221 h706.000000" /><text class="" x="-5" y="110.32422123331219">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 72.494914 h706.000000" /><text class="" x="-5" y="75.99491417673238">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 38.165607 h706.000000" /><text class="" x="-5" y="41.66560712015263">800</text><title>800</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M70.147436 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 70.147436 393.000000)" x="70.1474358974359" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M183.288462 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 183.288462 393.000000)" x="183.28846153846155" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M296.429487 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 296.429487 393.000000)" x="296.4294871794872" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M409.570513 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 409.570513 393.000000)" x="409.5705128205129" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M522.711538 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 522.711538 393.000000)" x="522.7115384615385" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M635.852564 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 635.852564 393.000000)" x="635.8525641025641" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M45.256410 370.443261 L95.038462 370.443261" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.365385 369.419390 L119.929487 369.419390" stroke-width="3" /><path class="reactive tooltip-trigger" d="M45.256410 366.352066 L95.038462 366.352066" stroke-width="3" /><path class="reactive tooltip-trigger" d="M70.147436 370.443261 L70.147436 370.125715" stroke-width="2" /><path class="reactive tooltip-trigger" d="M70.147436 366.352066 L70.147436 368.621341" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.5043746023218318" width="99.56410256410255" x="20.365384615384613" y="368.62134059146604" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="370.44326128441816" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="322.1921328670396" r="3" /><desc class="value">Min: 25.6700
+Q1-1.5IQR: 25.6700
+Q1: 26.4100
+Median: 28.0560
+Q3: 29.9157
+Q3+1.5IQR: 35.2040
+Max: 138.1130</desc><desc class="x centered">70.14743589743588</desc><desc class="y centered">368.9923545773824</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M158.397436 370.311093 L208.179487 370.311093" stroke-width="3" /><path class="reactive tooltip-trigger" d="M133.506410 369.026748 L233.070513 369.026748" stroke-width="3" /><path class="reactive tooltip-trigger" d="M158.397436 360.368039 L208.179487 360.368039" stroke-width="3" /><path class="reactive tooltip-trigger" d="M183.288462 370.311093 L183.288462 369.224142" stroke-width="2" /><path class="reactive tooltip-trigger" d="M183.288462 360.368039 L183.288462 365.709143" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="3.514999205749973" width="99.56410256410255" x="133.50641025641025" y="365.7091425615698" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="370.31109345198644" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="288.79529561332356" r="3" /><desc class="value">Min: 25.9780
+Q1-1.5IQR: 25.9780
+Q1: 28.5110
+Median: 28.9710
+Q3: 36.7023
+Q3+1.5IQR: 49.1490
+Max: 215.9400</desc><desc class="x centered">183.28846153846152</desc><desc class="y centered">366.9278329625994</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M271.538462 370.281055 L321.320513 370.281055" stroke-width="3" /><path class="reactive tooltip-trigger" d="M246.647436 369.198609 L346.211538 369.198609" stroke-width="3" /><path class="reactive tooltip-trigger" d="M271.538462 366.920216 L321.320513 366.920216" stroke-width="3" /><path class="reactive tooltip-trigger" d="M296.429487 370.281055 L296.429487 369.747664" stroke-width="2" /><path class="reactive tooltip-trigger" d="M296.429487 366.920216 L296.429487 368.635394" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.1122695484288556" width="99.56410256410255" x="246.64743589743588" y="368.63539415137114" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="370.2810553081133" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="269.2383184996627" r="3" /><desc class="value">Min: 26.0480
+Q1-1.5IQR: 26.0480
+Q1: 27.2910
+Median: 28.5705
+Q3: 29.8830
+Q3+1.5IQR: 33.8800
+Max: 261.5150</desc><desc class="x centered">296.4294871794872</desc><desc class="y centered">368.9565877304157</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M384.679487 355.345661 L434.461538 355.345661" stroke-width="3" /><path class="reactive tooltip-trigger" d="M359.788462 353.075636 L459.352564 353.075636" stroke-width="3" /><path class="reactive tooltip-trigger" d="M384.679487 346.741020 L434.461538 346.741020" stroke-width="3" /><path class="reactive tooltip-trigger" d="M409.570513 355.345661 L409.570513 353.618468" stroke-width="2" /><path class="reactive tooltip-trigger" d="M409.570513 346.741020 L409.570513 350.869334" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="2.7491338210344907" width="99.56410256410255" x="359.78846153846155" y="350.8693340747579" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="355.34566115744184" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="211.53375715224274" r="3" /><desc class="value">Min: 60.8530
+Q1-1.5IQR: 60.8530
+Q1: 64.8780
+Median: 66.1430
+Q3: 71.2845
+Q3+1.5IQR: 80.9050
+Max: 395.9880</desc><desc class="x centered">409.5705128205128</desc><desc class="y centered">351.930023839945</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M497.820513 351.415814 L547.602564 351.415814" stroke-width="3" /><path class="reactive tooltip-trigger" d="M472.929487 349.427503 L572.493590 349.427503" stroke-width="3" /><path class="reactive tooltip-trigger" d="M497.820513 342.517228 L547.602564 342.517228" stroke-width="3" /><path class="reactive tooltip-trigger" d="M522.711538 351.415814 L522.711538 350.082978" stroke-width="2" /><path class="reactive tooltip-trigger" d="M522.711538 342.517228 L522.711538 347.067149" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="3.015829625191145" width="99.56410256410255" x="472.9294871794872" y="347.06714876029326" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="351.4158137317072" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="232.26994596329584" r="3" /><desc class="value">Min: 70.0110
+Q1-1.5IQR: 70.0110
+Q1: 73.1170
+Median: 74.6445
+Q3: 80.1450
+Q3+1.5IQR: 90.7480
+Max: 347.6650</desc><desc class="x centered">522.7115384615385</desc><desc class="y centered">348.1021344565244</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M610.961538 161.740814 L660.743590 161.740814" stroke-width="3" /><path class="reactive tooltip-trigger" d="M586.070513 133.025421 L685.634615 133.025421" stroke-width="3" /><path class="reactive tooltip-trigger" d="M610.961538 7.341322 L660.743590 7.341322" stroke-width="3" /><path class="reactive tooltip-trigger" d="M635.852564 161.740814 L635.852564 152.078401" stroke-width="2" /><path class="reactive tooltip-trigger" d="M635.852564 7.341322 L635.852564 94.809822" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="57.26857914831666" width="99.56410256410255" x="586.0705128205128" y="94.80982199582706" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="161.74081373141325" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="-934.0746980295116" r="3" /><desc class="value">Min: 512.0240
+Q1-1.5IQR: 512.0240
+Q1: 534.5410
+Median: 578.9415
+Q3: 667.9980
+Q3+1.5IQR: 871.8320
+Max: 3065.6800</desc><desc class="x centered">635.8525641025641</desc><desc class="y centered">109.79915607101532</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Serialize Valid Data</text><text class="title" x="427.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(74, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/static/Translate_from_Arbitrary_Class.svg b/docs/static/Translate_from_Arbitrary_Class.svg
index 9df3d57c..35082555 100644
--- a/docs/static/Translate_from_Arbitrary_Class.svg
+++ b/docs/static/Translate_from_Arbitrary_Class.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-dc1925e9-d9b5-4d34-8239-40212b04d202" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-dc1925e9-d9b5-4d34-8239-40212b04d202{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-dc1925e9-d9b5-4d34-8239-40212b04d202{background-color:rgba(249,249,249,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 path,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 rect,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .graph{fill:rgba(0,0,0,.87)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 text.no_data{fill:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .title{fill:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis .line{stroke:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis text.major{fill:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.y .guides:hover .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .line-graph .axis.x .guides:hover .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .ci{stroke:rgba(0,0,0,.87)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .reactive.active,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .ci .reactive.active{stroke-width:1.5}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .series text{fill:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip .value{font-size:1.5em}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .bound{font-size:.5em}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-0,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-1,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-2,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-3,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .text-overlay .color-0 text{fill:black}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .text-overlay .color-1 text{fill:black}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .text-overlay .color-2 text{fill:black}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .text-overlay .color-3 text{fill:black}
-#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 text.no_data{text-anchor:middle}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .guide.line{fill:none}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .centered{text-anchor:middle}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .title{text-anchor:middle}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .legends .legend text{fill-opacity:1}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.x text{text-anchor:middle}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.y text{text-anchor:end}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.y text[transform].backwards{text-anchor:start}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.y2 text{text-anchor:start}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.y2 text[transform].backwards{text-anchor:end}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis .guide.line{stroke-dasharray:4,4}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis .major.guide.line{stroke-dasharray:6,6}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .horizontal .axis.y .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .horizontal .axis.y2 .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .vertical .axis.x .guide.line{opacity:0}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .horizontal .axis.always_show .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.y .guides:hover .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.y2 .guides:hover .guide.line,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis.x .guides:hover .guide.line{opacity:1}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .axis .guides:hover text{opacity:1}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .nofill{fill:none}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .subtle-fill{fill-opacity:.2}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .dot{stroke-width:1px;fill-opacity:1}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .dot.active{stroke-width:5px}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .dot.negative{fill:transparent}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 text,#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 tspan{stroke:none !important}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .series text.active{opacity:1}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .tooltip text{fill-opacity:1}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .showable{visibility:hidden}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .showable.shown{visibility:visible}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-dc1925e9-d9b5-4d34-8239-40212b04d202 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['dc1925e9-d9b5-4d34-8239-40212b04d202'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [31, 88], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Translate from Arbitrary Class", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-functional-api", "typic-protocol-api", "pydantic", "typic-object-api"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 31, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[typic-functional-api] - 55 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[typic-protocol-api] - 69 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[pydantic] - 5091 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[typic-object-api] - 1225 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-251c3984-c981-4c21-8f7d-71be3f3467e4" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-251c3984-c981-4c21-8f7d-71be3f3467e4{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-251c3984-c981-4c21-8f7d-71be3f3467e4{background-color:rgba(249,249,249,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 path,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 rect,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .graph{fill:rgba(0,0,0,.87)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 text.no_data{fill:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .title{fill:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis .line{stroke:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis text.major{fill:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.y .guides:hover .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .line-graph .axis.x .guides:hover .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .ci{stroke:rgba(0,0,0,.87)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .reactive.active,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .ci .reactive.active{stroke-width:1.5}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .series text{fill:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip .value{font-size:1.5em}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .bound{font-size:.5em}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-0,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-1,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-2,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-3,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .text-overlay .color-0 text{fill:black}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .text-overlay .color-1 text{fill:black}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .text-overlay .color-2 text{fill:black}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .text-overlay .color-3 text{fill:black}
+#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 text.no_data{text-anchor:middle}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .guide.line{fill:none}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .centered{text-anchor:middle}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .title{text-anchor:middle}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .legends .legend text{fill-opacity:1}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.x text{text-anchor:middle}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.y text{text-anchor:end}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.y text[transform].backwards{text-anchor:start}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.y2 text{text-anchor:start}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.y2 text[transform].backwards{text-anchor:end}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis .guide.line{stroke-dasharray:4,4}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis .major.guide.line{stroke-dasharray:6,6}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .horizontal .axis.y .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .horizontal .axis.y2 .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .vertical .axis.x .guide.line{opacity:0}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .horizontal .axis.always_show .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.y .guides:hover .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.y2 .guides:hover .guide.line,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis.x .guides:hover .guide.line{opacity:1}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .axis .guides:hover text{opacity:1}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .nofill{fill:none}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .subtle-fill{fill-opacity:.2}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .dot{stroke-width:1px;fill-opacity:1}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .dot.active{stroke-width:5px}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .dot.negative{fill:transparent}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 text,#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 tspan{stroke:none !important}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .series text.active{opacity:1}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .tooltip text{fill-opacity:1}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .showable{visibility:hidden}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .showable.shown{visibility:visible}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-251c3984-c981-4c21-8f7d-71be3f3467e4 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['251c3984-c981-4c21-8f7d-71be3f3467e4'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [33, 84], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Translate from Arbitrary Class", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-protocol-api", "typic-functional-api", "pydantic", "typic-object-api"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 33, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[typic-protocol-api] - 68 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[typic-functional-api] - 61 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[pydantic] - 6937 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_from_class[typic-object-api] - 1112 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,28 +345,28 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Translate from Arbitrary Class</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(68, 46)"><rect class="background" height="378.0" width="712.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h712.000000" /><g class="guides"><path class="guide line" d="M0.000000 364.354251 h712.000000" /><text class="" x="-5" y="367.85425101214577">32</text><title>32</title></g><g class="guides"><path class="guide line" d="M0.000000 338.848178 h712.000000" /><text class="" x="-5" y="342.3481781376518">36</text><title>36</title></g><g class="guides"><path class="major guide line" d="M0.000000 313.342105 h712.000000" /><text class="major" x="-5" y="316.8421052631579">40</text><title>40</title></g><g class="guides"><path class="guide line" d="M0.000000 287.836032 h712.000000" /><text class="" x="-5" y="291.33603238866397">44</text><title>44</title></g><g class="guides"><path class="guide line" d="M0.000000 262.329960 h712.000000" /><text class="" x="-5" y="265.82995951417">48</text><title>48</title></g><g class="guides"><path class="guide line" d="M0.000000 236.823887 h712.000000" /><text class="" x="-5" y="240.32388663967612">52</text><title>52</title></g><g class="guides"><path class="guide line" d="M0.000000 211.317814 h712.000000" /><text class="" x="-5" y="214.8178137651822">56</text><title>56</title></g><g class="guides"><path class="major guide line" d="M0.000000 185.811741 h712.000000" /><text class="major" x="-5" y="189.31174089068827">60</text><title>60</title></g><g class="guides"><path class="guide line" d="M0.000000 160.305668 h712.000000" /><text class="" x="-5" y="163.80566801619435">64</text><title>64</title></g><g class="guides"><path class="guide line" d="M0.000000 134.799595 h712.000000" /><text class="" x="-5" y="138.29959514170042">68</text><title>68</title></g><g class="guides"><path class="guide line" d="M0.000000 109.293522 h712.000000" /><text class="" x="-5" y="112.79352226720647">72</text><title>72</title></g><g class="guides"><path class="guide line" d="M0.000000 83.787449 h712.000000" /><text class="" x="-5" y="87.28744939271252">76</text><title>76</title></g><g class="guides"><path class="major guide line" d="M0.000000 58.281377 h712.000000" /><text class="major" x="-5" y="61.78137651821862">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 32.775304 h712.000000" /><text class="" x="-5" y="36.27530364372467">84</text><title>84</title></g><g class="guides"><path class="guide line" d="M0.000000 7.269231 h712.000000" /><text class="" x="-5" y="10.769230769230717">88</text><title>88</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M99.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 99.269231 393.000000)" x="99.26923076923076" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M270.423077 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 270.423077 393.000000)" x="270.4230769230769" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M441.576923 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 441.576923 393.000000)" x="441.5769230769231" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M612.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 612.730769 393.000000)" x="612.7307692307692" y="393.0">typic-object-api</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M61.615385 365.387247 L136.923077 365.387247" stroke-width="3" /><path class="reactive tooltip-trigger" d="M23.961538 363.270243 L174.576923 363.270243" stroke-width="3" /><path class="reactive tooltip-trigger" d="M61.615385 104.849089 L136.923077 104.849089" stroke-width="3" /><path class="reactive tooltip-trigger" d="M99.269231 365.387247 L99.269231 364.634818" stroke-width="2" /><path class="reactive tooltip-trigger" d="M99.269231 104.849089 L99.269231 263.240207" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="101.39461033135524" width="150.61538461538458" x="23.96153846153846" y="263.2402074771027" /><circle class="subtle-fill reactive tooltip-trigger" cx="99.26923076923075" cy="365.3872469752038" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="99.26923076923075" cy="-320.31801619272426" r="3" /><desc class="value">Min: 31.8380
-Q1-1.5IQR: 31.8380
-Q1: 31.9560
-Median: 32.1700
-Q3: 47.8573
-Q3+1.5IQR: 72.6970
-Max: 139.3740</desc><desc class="x centered">99.26923076923075</desc><desc class="y centered">292.2763208521597</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M232.769231 363.072571 L308.076923 363.072571" stroke-width="3" /><path class="reactive tooltip-trigger" d="M195.115385 355.140182 L345.730769 355.140182" stroke-width="3" /><path class="reactive tooltip-trigger" d="M232.769231 238.877125 L308.076923 238.877125" stroke-width="3" /><path class="reactive tooltip-trigger" d="M270.423077 363.072571 L270.423077 359.488968" stroke-width="2" /><path class="reactive tooltip-trigger" d="M270.423077 238.877125 L270.423077 311.271331" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="48.21763664212716" width="150.61538461538458" x="195.11538461538458" y="311.27133096289344" /><circle class="subtle-fill reactive tooltip-trigger" cx="270.4230769230769" cy="363.0725708515579" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="270.4230769230769" cy="-22.547368429281505" r="3" /><desc class="value">Min: 32.2010
-Q1-1.5IQR: 32.2010
-Q1: 32.7630
-Median: 33.4450
-Q3: 40.3248
-Q3+1.5IQR: 51.6780
-Max: 92.6760</desc><desc class="x centered">270.4230769230769</desc><desc class="y centered">325.57003542027707</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M403.923077 325.030263 L479.230769 325.030263" stroke-width="3" /><path class="reactive tooltip-trigger" d="M366.269231 306.901822 L516.884615 306.901822" stroke-width="3" /><path class="reactive tooltip-trigger" d="M403.923077 208.544028 L479.230769 208.544028" stroke-width="3" /><path class="reactive tooltip-trigger" d="M441.576923 325.030263 L441.576923 318.016093" stroke-width="2" /><path class="reactive tooltip-trigger" d="M441.576923 208.544028 L441.576923 274.254049" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="43.76204454199677" width="150.61538461538458" x="366.2692307692307" y="274.2540485810151" /><circle class="subtle-fill reactive tooltip-trigger" cx="441.576923076923" cy="325.0302631605137" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="441.576923076923" cy="-708.4821862267656" r="3" /><desc class="value">Min: 38.1670
-Q1-1.5IQR: 38.1670
-Q1: 39.2670
-Median: 41.0100
-Q3: 46.1300
-Q3+1.5IQR: 56.4350
-Max: 200.2480</desc><desc class="x centered">441.576923076923</desc><desc class="y centered">286.5492510159759</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M575.076923 199.062146 L650.384615 199.062146" stroke-width="3" /><path class="reactive tooltip-trigger" d="M537.423077 129.232895 L688.038462 129.232895" stroke-width="3" /><path class="reactive tooltip-trigger" d="M575.076923 10.157794 L650.384615 10.157794" stroke-width="3" /><path class="reactive tooltip-trigger" d="M612.730769 199.062146 L612.730769 139.181857" stroke-width="2" /><path class="reactive tooltip-trigger" d="M612.730769 10.157794 L612.730769 88.011893" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="51.16996458376019" width="150.61538461538458" x="537.4230769230768" y="88.01189270550628" /><circle class="subtle-fill reactive tooltip-trigger" cx="612.730769230769" cy="199.06214574977207" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="612.730769230769" cy="-2218.122874502915" r="3" /><desc class="value">Min: 57.9220
-Q1-1.5IQR: 57.9220
-Q1: 67.3127
-Median: 68.8730
-Q3: 75.3375
-Q3+1.5IQR: 87.5470
-Max: 436.9980</desc><desc class="x centered">612.730769230769</desc><desc class="y centered">113.12931680109693</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Translate from Arbitrary Class</text><text class="title" x="424.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /></g><g class="plot text-overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /></g><g class="plot tooltip-overlay" transform="translate(68, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Translate from Arbitrary Class</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(68, 46)"><rect class="background" height="378.0" width="712.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h712.000000" /><g class="guides"><path class="guide line" d="M0.000000 349.350679 h712.000000" /><text class="" x="-5" y="352.85067873303166">36</text><title>36</title></g><g class="guides"><path class="major guide line" d="M0.000000 320.843891 h712.000000" /><text class="major" x="-5" y="324.3438914027149">40</text><title>40</title></g><g class="guides"><path class="guide line" d="M0.000000 292.337104 h712.000000" /><text class="" x="-5" y="295.8371040723982">44</text><title>44</title></g><g class="guides"><path class="guide line" d="M0.000000 263.830317 h712.000000" /><text class="" x="-5" y="267.33031674208144">48</text><title>48</title></g><g class="guides"><path class="guide line" d="M0.000000 235.323529 h712.000000" /><text class="" x="-5" y="238.8235294117647">52</text><title>52</title></g><g class="guides"><path class="guide line" d="M0.000000 206.816742 h712.000000" /><text class="" x="-5" y="210.31674208144796">56</text><title>56</title></g><g class="guides"><path class="major guide line" d="M0.000000 178.309955 h712.000000" /><text class="major" x="-5" y="181.80995475113122">60</text><title>60</title></g><g class="guides"><path class="guide line" d="M0.000000 149.803167 h712.000000" /><text class="" x="-5" y="153.3031674208145">64</text><title>64</title></g><g class="guides"><path class="guide line" d="M0.000000 121.296380 h712.000000" /><text class="" x="-5" y="124.79638009049773">68</text><title>68</title></g><g class="guides"><path class="guide line" d="M0.000000 92.789593 h712.000000" /><text class="" x="-5" y="96.289592760181">72</text><title>72</title></g><g class="guides"><path class="guide line" d="M0.000000 64.282805 h712.000000" /><text class="" x="-5" y="67.78280542986425">76</text><title>76</title></g><g class="guides"><path class="major guide line" d="M0.000000 35.776018 h712.000000" /><text class="major" x="-5" y="39.276018099547514">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 7.269231 h712.000000" /><text class="" x="-5" y="10.769230769230774">84</text><title>84</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M99.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 99.269231 393.000000)" x="99.26923076923076" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M270.423077 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 270.423077 393.000000)" x="270.4230769230769" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M441.576923 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 441.576923 393.000000)" x="441.5769230769231" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M612.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 612.730769 393.000000)" x="612.7307692307692" y="393.0">typic-object-api</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M61.615385 367.951357 L136.923077 367.951357" stroke-width="3" /><path class="reactive tooltip-trigger" d="M23.961538 363.814310 L174.576923 363.814310" stroke-width="3" /><path class="reactive tooltip-trigger" d="M61.615385 203.153620 L136.923077 203.153620" stroke-width="3" /><path class="reactive tooltip-trigger" d="M99.269231 367.951357 L99.269231 365.474830" stroke-width="2" /><path class="reactive tooltip-trigger" d="M99.269231 203.153620 L99.269231 302.585294" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="62.88953619952082" width="150.61538461538458" x="23.96153846153846" y="302.58529411154365" /><circle class="subtle-fill reactive tooltip-trigger" cx="99.26923076923075" cy="367.95135747540115" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="99.26923076923075" cy="-184.8166289598479" r="3" /><desc class="value">Min: 33.3900
+Q1-1.5IQR: 33.3900
+Q1: 33.7375
+Median: 33.9705
+Q3: 42.5620
+Q3+1.5IQR: 56.5140
+Max: 110.9530</desc><desc class="x centered">99.26923076923075</desc><desc class="y centered">320.59588235080855</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M232.769231 366.903733 L308.076923 366.903733" stroke-width="3" /><path class="reactive tooltip-trigger" d="M195.115385 362.549321 L345.730769 362.549321" stroke-width="3" /><path class="reactive tooltip-trigger" d="M232.769231 352.208484 L308.076923 352.208484" stroke-width="3" /><path class="reactive tooltip-trigger" d="M270.423077 366.903733 L270.423077 364.427206" stroke-width="2" /><path class="reactive tooltip-trigger" d="M270.423077 352.208484 L270.423077 359.976584" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="4.450622154075347" width="150.61538461538458" x="195.11538461538458" y="359.976583724536" /><circle class="subtle-fill reactive tooltip-trigger" cx="270.4230769230769" cy="366.9037330302885" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="270.4230769230769" cy="167.9548642483284" r="3" /><desc class="value">Min: 33.5370
+Q1-1.5IQR: 33.5370
+Q1: 33.8845
+Median: 34.1480
+Q3: 34.5090
+Q3+1.5IQR: 35.5990
+Max: 61.4530</desc><desc class="x centered">270.4230769230769</desc><desc class="y centered">361.2130656108275</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M403.923077 321.271493 L479.230769 321.271493" stroke-width="3" /><path class="reactive tooltip-trigger" d="M366.269231 306.120136 L516.884615 306.120136" stroke-width="3" /><path class="reactive tooltip-trigger" d="M403.923077 255.135747 L479.230769 255.135747" stroke-width="3" /><path class="reactive tooltip-trigger" d="M441.576923 321.271493 L441.576923 311.201471" stroke-width="2" /><path class="reactive tooltip-trigger" d="M441.576923 255.135747 L441.576923 288.786227" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="22.415243200030602" width="150.61538461538458" x="366.2692307692307" y="288.78622738607174" /><circle class="subtle-fill reactive tooltip-trigger" cx="441.576923076923" cy="321.2714932082034" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="441.576923076923" cy="-3681.8796380110857" r="3" /><desc class="value">Min: 39.9400
+Q1-1.5IQR: 39.9400
+Q1: 41.3530
+Median: 42.0660
+Q3: 44.4982
+Q3+1.5IQR: 49.2200
+Max: 601.6520</desc><desc class="x centered">441.576923076923</desc><desc class="y centered">296.503014706709</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M575.076923 158.761425 L650.384615 158.761425" stroke-width="3" /><path class="reactive tooltip-trigger" d="M537.423077 110.346210 L688.038462 110.346210" stroke-width="3" /><path class="reactive tooltip-trigger" d="M575.076923 13.854299 L650.384615 13.854299" stroke-width="3" /><path class="reactive tooltip-trigger" d="M612.730769 158.761425 L612.730769 121.257183" stroke-width="2" /><path class="reactive tooltip-trigger" d="M612.730769 13.854299 L612.730769 78.913914" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="42.34326922756986" width="150.61538461538458" x="537.4230769230768" y="78.9139140353243" /><circle class="subtle-fill reactive tooltip-trigger" cx="612.730769230769" cy="158.7614253585252" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="612.730769230769" cy="-3644.649773740892" r="3" /><desc class="value">Min: 62.7430
+Q1-1.5IQR: 62.7430
+Q1: 68.0055
+Median: 69.5365
+Q3: 73.9470
+Q3+1.5IQR: 83.0760
+Max: 596.4280</desc><desc class="x centered">612.730769230769</desc><desc class="y centered">96.62660634006278</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Translate from Arbitrary Class</text><text class="title" x="424.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /></g><g class="plot text-overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /></g><g class="plot tooltip-overlay" transform="translate(68, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/static/Translate_to_Arbitrary_Class.svg b/docs/static/Translate_to_Arbitrary_Class.svg
index 91a0606b..9684721c 100644
--- a/docs/static/Translate_to_Arbitrary_Class.svg
+++ b/docs/static/Translate_to_Arbitrary_Class.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-fba19689-ba77-4d10-8419-4008b8c88192" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-fba19689-ba77-4d10-8419-4008b8c88192{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-fba19689-ba77-4d10-8419-4008b8c88192{background-color:rgba(249,249,249,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 path,#chart-fba19689-ba77-4d10-8419-4008b8c88192 line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 rect,#chart-fba19689-ba77-4d10-8419-4008b8c88192 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .graph{fill:rgba(0,0,0,.87)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 text.no_data{fill:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .title{fill:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis .line{stroke:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis text.major{fill:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.y .guides:hover .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .line-graph .axis.x .guides:hover .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .ci{stroke:rgba(0,0,0,.87)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .reactive.active,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .ci .reactive.active{stroke-width:1.5}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .series text{fill:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip .value{font-size:1.5em}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .bound{font-size:.5em}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .color-0,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .color-1,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .color-2,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .text-overlay .color-0 text{fill:black}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .text-overlay .color-1 text{fill:black}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .text-overlay .color-2 text{fill:black}
-#chart-fba19689-ba77-4d10-8419-4008b8c88192 text.no_data{text-anchor:middle}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .guide.line{fill:none}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .centered{text-anchor:middle}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .title{text-anchor:middle}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .legends .legend text{fill-opacity:1}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.x text{text-anchor:middle}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.y text{text-anchor:end}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.y text[transform].backwards{text-anchor:start}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.y2 text{text-anchor:start}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.y2 text[transform].backwards{text-anchor:end}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis .guide.line{stroke-dasharray:4,4}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis .major.guide.line{stroke-dasharray:6,6}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .horizontal .axis.y .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .horizontal .axis.y2 .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .vertical .axis.x .guide.line{opacity:0}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .horizontal .axis.always_show .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.y .guides:hover .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.y2 .guides:hover .guide.line,#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis.x .guides:hover .guide.line{opacity:1}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .axis .guides:hover text{opacity:1}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .nofill{fill:none}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .subtle-fill{fill-opacity:.2}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .dot{stroke-width:1px;fill-opacity:1}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .dot.active{stroke-width:5px}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .dot.negative{fill:transparent}#chart-fba19689-ba77-4d10-8419-4008b8c88192 text,#chart-fba19689-ba77-4d10-8419-4008b8c88192 tspan{stroke:none !important}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .series text.active{opacity:1}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .tooltip text{fill-opacity:1}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .showable{visibility:hidden}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .showable.shown{visibility:visible}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-fba19689-ba77-4d10-8419-4008b8c88192 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['fba19689-ba77-4d10-8419-4008b8c88192'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [28, 57], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Translate to Arbitrary Class", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-functional-api", "typic-object-api", "typic-protocol-api"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 28, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_translate_to_class[typic-functional-api] - 34 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_to_class[typic-object-api] - 215 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_to_class[typic-protocol-api] - 66 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-38b98c9d-85f1-4911-831b-52e836d7fef9" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-38b98c9d-85f1-4911-831b-52e836d7fef9{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-38b98c9d-85f1-4911-831b-52e836d7fef9{background-color:rgba(249,249,249,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 path,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 rect,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .graph{fill:rgba(0,0,0,.87)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 text.no_data{fill:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .title{fill:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis .line{stroke:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis text.major{fill:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.y .guides:hover .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .line-graph .axis.x .guides:hover .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .ci{stroke:rgba(0,0,0,.87)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .reactive.active,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .ci .reactive.active{stroke-width:1.5}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .series text{fill:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip .value{font-size:1.5em}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .bound{font-size:.5em}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .color-0,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .color-1,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .color-2,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .text-overlay .color-0 text{fill:black}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .text-overlay .color-1 text{fill:black}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .text-overlay .color-2 text{fill:black}
+#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 text.no_data{text-anchor:middle}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .guide.line{fill:none}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .centered{text-anchor:middle}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .title{text-anchor:middle}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .legends .legend text{fill-opacity:1}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.x text{text-anchor:middle}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.y text{text-anchor:end}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.y text[transform].backwards{text-anchor:start}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.y2 text{text-anchor:start}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.y2 text[transform].backwards{text-anchor:end}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis .guide.line{stroke-dasharray:4,4}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis .major.guide.line{stroke-dasharray:6,6}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .horizontal .axis.y .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .horizontal .axis.y2 .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .vertical .axis.x .guide.line{opacity:0}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .horizontal .axis.always_show .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.y .guides:hover .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.y2 .guides:hover .guide.line,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis.x .guides:hover .guide.line{opacity:1}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .axis .guides:hover text{opacity:1}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .nofill{fill:none}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .subtle-fill{fill-opacity:.2}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .dot{stroke-width:1px;fill-opacity:1}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .dot.active{stroke-width:5px}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .dot.negative{fill:transparent}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 text,#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 tspan{stroke:none !important}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .series text.active{opacity:1}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .tooltip text{fill-opacity:1}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .showable{visibility:hidden}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .showable.shown{visibility:visible}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-38b98c9d-85f1-4911-831b-52e836d7fef9 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['38b98c9d-85f1-4911-831b-52e836d7fef9'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [28, 82], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Translate to Arbitrary Class", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-functional-api", "typic-object-api", "typic-protocol-api"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 28, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_translate_to_class[typic-functional-api] - 35 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_to_class[typic-object-api] - 199 rounds", "benchmark/test_benchmarks.py::test_benchmarks_translate_to_class[typic-protocol-api] - 64 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,22 +345,22 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Translate to Arbitrary Class</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(68, 46)"><rect class="background" height="378.0" width="712.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h712.000000" /><g class="guides"><path class="guide line" d="M0.000000 370.730769 h712.000000" /><text class="" x="-5" y="374.2307692307692">28</text><title>28</title></g><g class="guides"><path class="major guide line" d="M0.000000 345.664456 h712.000000" /><text class="major" x="-5" y="349.1644562334218">30</text><title>30</title></g><g class="guides"><path class="guide line" d="M0.000000 320.598143 h712.000000" /><text class="" x="-5" y="324.0981432360743">32</text><title>32</title></g><g class="guides"><path class="guide line" d="M0.000000 295.531830 h712.000000" /><text class="" x="-5" y="299.0318302387268">34</text><title>34</title></g><g class="guides"><path class="guide line" d="M0.000000 270.465517 h712.000000" /><text class="" x="-5" y="273.9655172413793">36</text><title>36</title></g><g class="guides"><path class="guide line" d="M0.000000 245.399204 h712.000000" /><text class="" x="-5" y="248.89920424403184">38</text><title>38</title></g><g class="guides"><path class="major guide line" d="M0.000000 220.332891 h712.000000" /><text class="major" x="-5" y="223.83289124668434">40</text><title>40</title></g><g class="guides"><path class="guide line" d="M0.000000 195.266578 h712.000000" /><text class="" x="-5" y="198.76657824933685">42</text><title>42</title></g><g class="guides"><path class="guide line" d="M0.000000 170.200265 h712.000000" /><text class="" x="-5" y="173.70026525198938">44</text><title>44</title></g><g class="guides"><path class="guide line" d="M0.000000 145.133952 h712.000000" /><text class="" x="-5" y="148.63395225464188">46</text><title>46</title></g><g class="guides"><path class="guide line" d="M0.000000 120.067639 h712.000000" /><text class="" x="-5" y="123.56763925729439">48</text><title>48</title></g><g class="guides"><path class="major guide line" d="M0.000000 95.001326 h712.000000" /><text class="major" x="-5" y="98.50132625994695">50</text><title>50</title></g><g class="guides"><path class="guide line" d="M0.000000 69.935013 h712.000000" /><text class="" x="-5" y="73.43501326259945">52</text><title>52</title></g><g class="guides"><path class="guide line" d="M0.000000 44.868700 h712.000000" /><text class="" x="-5" y="48.36870026525196">54</text><title>54</title></g><g class="guides"><path class="guide line" d="M0.000000 19.802387 h712.000000" /><text class="" x="-5" y="23.302387267904464">56</text><title>56</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M127.794872 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 127.794872 393.000000)" x="127.7948717948718" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M356.000000 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 356.000000 393.000000)" x="356.0" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M584.205128 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 584.205128 393.000000)" x="584.2051282051282" y="393.0">typic-protocol-api</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M77.589744 368.299337 L178.000000 368.299337" stroke-width="3" /><path class="reactive tooltip-trigger" d="M27.384615 360.860908 L228.205128 360.860908" stroke-width="3" /><path class="reactive tooltip-trigger" d="M77.589744 155.649271 L178.000000 155.649271" stroke-width="3" /><path class="reactive tooltip-trigger" d="M127.794872 368.299337 L127.794872 364.501790" stroke-width="2" /><path class="reactive tooltip-trigger" d="M127.794872 155.649271 L127.794872 296.572082" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="67.92970823297469" width="200.8205128205128" x="27.38461538461538" y="296.57208223236097" /><circle class="subtle-fill reactive tooltip-trigger" cx="127.79487179487177" cy="368.2993368869572" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="127.79487179487177" cy="-816.2844827958186" r="3" /><desc class="value">Min: 28.1940
-Q1-1.5IQR: 28.1940
-Q1: 28.4970
-Median: 28.7875
-Q3: 33.9170
-Q3+1.5IQR: 45.1610
-Max: 122.7100</desc><desc class="x centered">127.79487179487177</desc><desc class="y centered">309.1766777285136</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M305.794872 342.067440 L406.205128 342.067440" stroke-width="3" /><path class="reactive tooltip-trigger" d="M255.589744 319.244562 L456.410256 319.244562" stroke-width="3" /><path class="reactive tooltip-trigger" d="M305.794872 281.231499 L406.205128 281.231499" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.000000 342.067440 L356.000000 329.622016" stroke-width="2" /><path class="reactive tooltip-trigger" d="M356.000000 281.231499 L356.000000 310.715749" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="18.90626659525742" width="200.8205128205128" x="255.58974358974353" y="310.7157493425403" /><circle class="subtle-fill reactive tooltip-trigger" cx="355.99999999999994" cy="342.0674403466053" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="355.99999999999994" cy="-537.0958885960335" r="3" /><desc class="value">Min: 30.2870
-Q1-1.5IQR: 30.2870
-Q1: 31.2800
-Median: 32.1080
-Q3: 32.7885
-Q3+1.5IQR: 35.1410
-Max: 100.4340</desc><desc class="x centered">355.99999999999994</desc><desc class="y centered">316.57625332533183</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M534.000000 341.152520 L634.410256 341.152520" stroke-width="3" /><path class="reactive tooltip-trigger" d="M483.794872 272.007096 L684.615385 272.007096" stroke-width="3" /><path class="reactive tooltip-trigger" d="M534.000000 15.428316 L634.410256 15.428316" stroke-width="3" /><path class="reactive tooltip-trigger" d="M584.205128 341.152520 L584.205128 289.628714" stroke-width="2" /><path class="reactive tooltip-trigger" d="M584.205128 15.428316 L584.205128 220.921950" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="68.70676395565962" width="200.8205128205128" x="483.7948717948717" y="220.92194958078656" /><circle class="subtle-fill reactive tooltip-trigger" cx="584.2051282051281" cy="341.15251989102796" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="584.2051282051281" cy="-651.2353448337324" r="3" /><desc class="value">Min: 30.3600
-Q1-1.5IQR: 30.3600
-Q1: 34.4710
-Median: 35.8770
-Q3: 39.9530
-Q3+1.5IQR: 56.3490
-Max: 109.5410</desc><desc class="x centered">584.2051282051281</desc><desc class="y centered">227.8277188308104</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Translate to Arbitrary Class</text><text class="title" x="424.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /></g><g class="plot text-overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /></g><g class="plot tooltip-overlay" transform="translate(68, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Translate to Arbitrary Class</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(68, 46)"><rect class="background" height="378.0" width="712.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h712.000000" /><g class="guides"><path class="guide line" d="M0.000000 370.730769 h712.000000" /><text class="" x="-5" y="374.2307692307692">28</text><title>28</title></g><g class="guides"><path class="guide line" d="M0.000000 343.807692 h712.000000" /><text class="" x="-5" y="347.3076923076923">32</text><title>32</title></g><g class="guides"><path class="guide line" d="M0.000000 316.884615 h712.000000" /><text class="" x="-5" y="320.3846153846154">36</text><title>36</title></g><g class="guides"><path class="major guide line" d="M0.000000 289.961538 h712.000000" /><text class="major" x="-5" y="293.46153846153845">40</text><title>40</title></g><g class="guides"><path class="guide line" d="M0.000000 263.038462 h712.000000" /><text class="" x="-5" y="266.53846153846155">44</text><title>44</title></g><g class="guides"><path class="guide line" d="M0.000000 236.115385 h712.000000" /><text class="" x="-5" y="239.6153846153846">48</text><title>48</title></g><g class="guides"><path class="guide line" d="M0.000000 209.192308 h712.000000" /><text class="" x="-5" y="212.69230769230768">52</text><title>52</title></g><g class="guides"><path class="guide line" d="M0.000000 182.269231 h712.000000" /><text class="" x="-5" y="185.76923076923077">56</text><title>56</title></g><g class="guides"><path class="major guide line" d="M0.000000 155.346154 h712.000000" /><text class="major" x="-5" y="158.84615384615384">60</text><title>60</title></g><g class="guides"><path class="guide line" d="M0.000000 128.423077 h712.000000" /><text class="" x="-5" y="131.9230769230769">64</text><title>64</title></g><g class="guides"><path class="guide line" d="M0.000000 101.500000 h712.000000" /><text class="" x="-5" y="105.0">68</text><title>68</title></g><g class="guides"><path class="guide line" d="M0.000000 74.576923 h712.000000" /><text class="" x="-5" y="78.0769230769231">72</text><title>72</title></g><g class="guides"><path class="guide line" d="M0.000000 47.653846 h712.000000" /><text class="" x="-5" y="51.15384615384619">76</text><title>76</title></g><g class="guides"><path class="major guide line" d="M0.000000 20.730769 h712.000000" /><text class="major" x="-5" y="24.230769230769226">80</text><title>80</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M127.794872 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 127.794872 393.000000)" x="127.7948717948718" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M356.000000 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 356.000000 393.000000)" x="356.0" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M584.205128 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 584.205128 393.000000)" x="584.2051282051282" y="393.0">typic-protocol-api</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M77.589744 366.625000 L178.000000 366.625000" stroke-width="3" /><path class="reactive tooltip-trigger" d="M27.384615 343.491346 L228.205128 343.491346" stroke-width="3" /><path class="reactive tooltip-trigger" d="M77.589744 10.547115 L178.000000 10.547115" stroke-width="3" /><path class="reactive tooltip-trigger" d="M127.794872 366.625000 L127.794872 362.889423" stroke-width="2" /><path class="reactive tooltip-trigger" d="M127.794872 10.547115 L127.794872 241.390625" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="121.49879809250857" width="200.8205128205128" x="27.38461538461538" y="241.39062499676012" /><circle class="subtle-fill reactive tooltip-trigger" cx="127.79487179487177" cy="366.6250000165443" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="127.79487179487177" cy="-0.8144230696706813" r="3" /><desc class="value">Min: 28.6100
+Q1-1.5IQR: 28.6100
+Q1: 29.1650
+Median: 32.0470
+Q3: 47.2163
+Q3+1.5IQR: 81.5130
+Max: 83.2010</desc><desc class="x centered">127.79487179487177</desc><desc class="y centered">264.9887019246779</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M305.794872 346.668269 L406.205128 346.668269" stroke-width="3" /><path class="reactive tooltip-trigger" d="M255.589744 332.446154 L456.410256 332.446154" stroke-width="3" /><path class="reactive tooltip-trigger" d="M305.794872 308.390385 L406.205128 308.390385" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.000000 346.668269 L356.000000 337.379808" stroke-width="2" /><path class="reactive tooltip-trigger" d="M356.000000 308.390385 L356.000000 326.368269" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="11.011538457984273" width="200.8205128205128" x="255.58974358974353" y="326.3682692402936" /><circle class="subtle-fill reactive tooltip-trigger" cx="355.99999999999994" cy="346.66826922213596" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="355.99999999999994" cy="-136.82980770014558" r="3" /><desc class="value">Min: 31.5750
+Q1-1.5IQR: 31.5750
+Q1: 32.9550
+Median: 33.6880
+Q3: 34.5910
+Q3+1.5IQR: 37.2620
+Max: 103.4090</desc><desc class="x centered">355.99999999999994</desc><desc class="y centered">330.2505769226368</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M534.000000 340.987500 L634.410256 340.987500" stroke-width="3" /><path class="reactive tooltip-trigger" d="M483.794872 331.439904 L684.615385 331.439904" stroke-width="3" /><path class="reactive tooltip-trigger" d="M534.000000 303.100000 L634.410256 303.100000" stroke-width="3" /><path class="reactive tooltip-trigger" d="M584.205128 340.987500 L584.205128 336.070673" stroke-width="2" /><path class="reactive tooltip-trigger" d="M584.205128 303.100000 L584.205128 324.658654" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="11.412019230460317" width="200.8205128205128" x="483.7948717948717" y="324.6586538457428" /><circle class="subtle-fill reactive tooltip-trigger" cx="584.2051282051281" cy="340.98749999958767" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="584.2051282051281" cy="10.1634615453533" r="3" /><desc class="value">Min: 32.4190
+Q1-1.5IQR: 32.4190
+Q1: 33.1495
+Median: 33.8375
+Q3: 34.8450
+Q3+1.5IQR: 38.0480
+Max: 81.5700</desc><desc class="x centered">584.2051282051281</desc><desc class="y centered">327.25134615274294</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Translate to Arbitrary Class</text><text class="title" x="424.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /></g><g class="plot text-overlay" transform="translate(68, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /></g><g class="plot tooltip-overlay" transform="translate(68, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/static/Validate_Invalid_Data.svg b/docs/static/Validate_Invalid_Data.svg
index d592e90b..d79ba867 100644
--- a/docs/static/Validate_Invalid_Data.svg
+++ b/docs/static/Validate_Invalid_Data.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e{background-color:rgba(249,249,249,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e path,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e rect,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .graph{fill:rgba(0,0,0,.87)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e text.no_data{fill:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .title{fill:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .legends .legend text{fill:rgba(0,0,0,.87)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis .line{stroke:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis text.major{fill:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.y .guides:hover .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .line-graph .axis.x .guides:hover .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .stackedline-graph .axis.x .guides:hover .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .ci{stroke:rgba(0,0,0,.87)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .reactive.active,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .ci .reactive.active{stroke-width:1.5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .series text{fill:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip .label{fill:rgba(0,0,0,.87)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip .label{fill:rgba(0,0,0,.87)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip .value{font-size:1.5em}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .bound{font-size:.5em}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-0,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-1,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-2,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-3,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-4,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-5,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay .color-0 text{fill:black}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay .color-1 text{fill:black}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay .color-2 text{fill:black}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay .color-3 text{fill:black}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay .color-4 text{fill:black}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .text-overlay .color-5 text{fill:black}
-#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e text.no_data{text-anchor:middle}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .guide.line{fill:none}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .centered{text-anchor:middle}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .title{text-anchor:middle}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .legends .legend text{fill-opacity:1}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.x text{text-anchor:middle}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.x:not(.web) text[transform]{text-anchor:start}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.y text{text-anchor:end}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.y text[transform].backwards{text-anchor:start}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.y2 text{text-anchor:start}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.y2 text[transform].backwards{text-anchor:end}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis .guide.line{stroke-dasharray:4,4}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis .major.guide.line{stroke-dasharray:6,6}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .horizontal .axis.y .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .horizontal .axis.y2 .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .vertical .axis.x .guide.line{opacity:0}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .horizontal .axis.always_show .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.y .guides:hover .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.y2 .guides:hover .guide.line,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis.x .guides:hover .guide.line{opacity:1}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .axis .guides:hover text{opacity:1}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .nofill{fill:none}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .subtle-fill{fill-opacity:.2}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .dot{stroke-width:1px;fill-opacity:1}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .dot.active{stroke-width:5px}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .dot.negative{fill:transparent}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e text,#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e tspan{stroke:none !important}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .series text.active{opacity:1}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .tooltip text{fill-opacity:1}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .showable{visibility:hidden}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .showable.shown{visibility:visible}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-26f75a8d-026b-4e55-89b9-6d1b0fe43d8e .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['26f75a8d-026b-4e55-89b9-6d1b0fe43d8e'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [10, 1260], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Validate Invalid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-object-api", "typic-protocol-api", "typic-functional-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 10, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[typic-object-api] - 19485 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[typic-protocol-api] - 20229 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[typic-functional-api] - 12739 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[pydantic] - 5496 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[marshmallow] - 2726 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[djangorestframework] - 551 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-93a85186-ef8b-42ab-b8d7-8251a60677cd" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd{background-color:rgba(249,249,249,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd path,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd rect,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .graph{fill:rgba(0,0,0,.87)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd text.no_data{fill:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .title{fill:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .legends .legend text{fill:rgba(0,0,0,.87)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis .line{stroke:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis text.major{fill:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.y .guides:hover .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .line-graph .axis.x .guides:hover .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .stackedline-graph .axis.x .guides:hover .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .ci{stroke:rgba(0,0,0,.87)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .reactive.active,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .ci .reactive.active{stroke-width:1.5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .series text{fill:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip .label{fill:rgba(0,0,0,.87)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip .label{fill:rgba(0,0,0,.87)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip .value{font-size:1.5em}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .bound{font-size:.5em}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-0,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-1,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-2,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-3,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-4,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-5,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay .color-0 text{fill:black}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay .color-1 text{fill:black}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay .color-2 text{fill:black}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay .color-3 text{fill:black}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay .color-4 text{fill:black}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .text-overlay .color-5 text{fill:black}
+#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd text.no_data{text-anchor:middle}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .guide.line{fill:none}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .centered{text-anchor:middle}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .title{text-anchor:middle}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .legends .legend text{fill-opacity:1}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.x text{text-anchor:middle}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.x:not(.web) text[transform]{text-anchor:start}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.y text{text-anchor:end}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.y text[transform].backwards{text-anchor:start}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.y2 text{text-anchor:start}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.y2 text[transform].backwards{text-anchor:end}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis .guide.line{stroke-dasharray:4,4}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis .major.guide.line{stroke-dasharray:6,6}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .horizontal .axis.y .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .horizontal .axis.y2 .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .vertical .axis.x .guide.line{opacity:0}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .horizontal .axis.always_show .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.y .guides:hover .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.y2 .guides:hover .guide.line,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis.x .guides:hover .guide.line{opacity:1}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .axis .guides:hover text{opacity:1}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .nofill{fill:none}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .subtle-fill{fill-opacity:.2}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .dot{stroke-width:1px;fill-opacity:1}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .dot.active{stroke-width:5px}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .dot.negative{fill:transparent}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd text,#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd tspan{stroke:none !important}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .series text.active{opacity:1}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .tooltip text{fill-opacity:1}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .showable{visibility:hidden}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .showable.shown{visibility:visible}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-93a85186-ef8b-42ab-b8d7-8251a60677cd .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['93a85186-ef8b-42ab-b8d7-8251a60677cd'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [10, 1390], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Validate Invalid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-object-api", "typic-protocol-api", "typic-functional-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 10, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[typic-object-api] - 19205 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[typic-protocol-api] - 18437 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[typic-functional-api] - 10298 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[pydantic] - 5314 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[marshmallow] - 2822 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_invalid_data[djangorestframework] - 577 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,40 +345,40 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Validate Invalid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(80, 46)"><rect class="background" height="378.0" width="700.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h700.000000" /><g class="guides"><path class="guide line" d="M0.000000 350.376923 h700.000000" /><text class="" x="-5" y="353.87692307692305">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 327.115385 h700.000000" /><text class="" x="-5" y="330.61538461538464">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 303.853846 h700.000000" /><text class="" x="-5" y="307.3538461538461">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 280.592308 h700.000000" /><text class="" x="-5" y="284.0923076923077">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 257.330769 h700.000000" /><text class="" x="-5" y="260.83076923076925">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 234.069231 h700.000000" /><text class="" x="-5" y="237.56923076923076">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 210.807692 h700.000000" /><text class="" x="-5" y="214.30769230769232">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 187.546154 h700.000000" /><text class="" x="-5" y="191.04615384615386">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 164.284615 h700.000000" /><text class="" x="-5" y="167.7846153846154">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 141.023077 h700.000000" /><text class="" x="-5" y="144.52307692307693">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 117.761538 h700.000000" /><text class="" x="-5" y="121.26153846153846">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 94.500000 h700.000000" /><text class="" x="-5" y="98.0">960</text><title>960</title></g><g class="guides"><path class="guide line" d="M0.000000 71.238462 h700.000000" /><text class="" x="-5" y="74.73846153846154">1040</text><title>1040</title></g><g class="guides"><path class="guide line" d="M0.000000 47.976923 h700.000000" /><text class="" x="-5" y="51.47692307692307">1120</text><title>1120</title></g><g class="guides"><path class="guide line" d="M0.000000 24.715385 h700.000000" /><text class="" x="-5" y="28.215384615384608">1200</text><title>1200</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M69.551282 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 69.551282 393.000000)" x="69.55128205128204" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M181.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 181.730769 393.000000)" x="181.73076923076923" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M293.910256 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 293.910256 393.000000)" x="293.9102564102564" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M406.089744 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 406.089744 393.000000)" x="406.0897435897436" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M518.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 518.269231 393.000000)" x="518.2692307692307" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M630.448718 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 630.448718 393.000000)" x="630.4487179487179" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M44.871795 370.581023 L94.230769 370.581023" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.192308 370.341429 L118.910256 370.341429" stroke-width="3" /><path class="reactive tooltip-trigger" d="M44.871795 369.756983 L94.230769 369.756983" stroke-width="3" /><path class="reactive tooltip-trigger" d="M69.551282 370.581023 L69.551282 370.466751" stroke-width="2" /><path class="reactive tooltip-trigger" d="M69.551282 369.756983 L69.551282 370.182960" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.28379076921049773" width="98.71794871794872" x="20.192307692307693" y="370.1829599999788" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="370.5810230767811" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="313.4027076921832" r="3" /><desc class="value">Min: 10.5150
-Q1-1.5IQR: 10.5150
-Q1: 10.9080
-Median: 11.3390
-Q3: 11.8840
-Q3+1.5IQR: 13.3490
-Max: 207.1600</desc><desc class="x centered">69.55128205128204</desc><desc class="y centered">370.26582923073505</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M157.051282 370.576662 L206.410256 370.576662" stroke-width="3" /><path class="reactive tooltip-trigger" d="M132.371795 370.350734 L231.089744 370.350734" stroke-width="3" /><path class="reactive tooltip-trigger" d="M157.051282 369.938714 L206.410256 369.938714" stroke-width="3" /><path class="reactive tooltip-trigger" d="M181.730769 370.576662 L181.730769 370.416448" stroke-width="2" /><path class="reactive tooltip-trigger" d="M181.730769 369.938714 L181.730769 370.225412" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.19103538466816872" width="98.71794871794872" x="132.3717948717949" y="370.2254123078263" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="370.5766615384752" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="335.2324984616421" r="3" /><desc class="value">Min: 10.5300
-Q1-1.5IQR: 10.5300
-Q1: 11.0810
-Median: 11.3070
-Q3: 11.7380
-Q3+1.5IQR: 12.7240
-Max: 132.0840</desc><desc class="x centered">181.73076923076925</desc><desc class="y centered">370.301593846238</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M269.230769 370.362365 L318.589744 370.362365" stroke-width="3" /><path class="reactive tooltip-trigger" d="M244.551282 370.041646 L343.269231 370.041646" stroke-width="3" /><path class="reactive tooltip-trigger" d="M269.230769 369.576125 L318.589744 369.576125" stroke-width="3" /><path class="reactive tooltip-trigger" d="M293.910256 370.362365 L293.910256 370.137891" stroke-width="2" /><path class="reactive tooltip-trigger" d="M293.910256 369.576125 L293.910256 369.913199" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.22469192287996975" width="98.71794871794872" x="244.55128205128204" y="369.91319884621606" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="370.36236461548685" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="302.6544230769116" r="3" /><desc class="value">Min: 11.2670
-Q1-1.5IQR: 11.2670
-Q1: 12.0390
-Median: 12.3700
-Q3: 12.8117
-Q3+1.5IQR: 13.9710
-Max: 244.1250</desc><desc class="x centered">293.9102564102564</desc><desc class="y centered">370.0062450000133</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M381.410256 355.089420 L430.769231 355.089420" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.730769 354.220020 L455.448718 354.220020" stroke-width="3" /><path class="reactive tooltip-trigger" d="M381.410256 351.528078 L430.769231 351.528078" stroke-width="3" /><path class="reactive tooltip-trigger" d="M406.089744 355.089420 L406.089744 354.498286" stroke-width="2" /><path class="reactive tooltip-trigger" d="M406.089744 351.528078 L406.089744 353.312238" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.1860476924339878" width="98.71794871794872" x="356.7307692307692" y="353.3122384614955" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="355.08942000005464" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="216.84028153861792" r="3" /><desc class="value">Min: 63.7930
-Q1-1.5IQR: 63.7930
-Q1: 65.8260
-Median: 66.7830
-Q3: 69.9050
-Q3+1.5IQR: 76.0410
-Max: 539.2530</desc><desc class="x centered">406.0897435897436</desc><desc class="y centered">353.729608615398</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M493.589744 311.287362 L542.948718 311.287362" stroke-width="3" /><path class="reactive tooltip-trigger" d="M468.910256 306.319424 L567.628205 306.319424" stroke-width="3" /><path class="reactive tooltip-trigger" d="M493.589744 286.066038 L542.948718 286.066038" stroke-width="3" /><path class="reactive tooltip-trigger" d="M518.269231 311.287362 L518.269231 309.748611" stroke-width="2" /><path class="reactive tooltip-trigger" d="M518.269231 286.066038 L518.269231 300.314312" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="9.434298461689366" width="98.71794871794872" x="468.9102564102564" y="300.3143123077504" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="311.2873615384094" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="-82.7136692308315" r="3" /><desc class="value">Min: 214.4350
-Q1-1.5IQR: 214.4350
-Q1: 219.7270
-Median: 231.5205
-Q3: 252.1730
-Q3+1.5IQR: 301.1750
-Max: 1569.4650</desc><desc class="x centered">518.2692307692307</desc><desc class="y centered">302.74714938468344</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M605.769231 140.310111 L655.128205 140.310111" stroke-width="3" /><path class="reactive tooltip-trigger" d="M581.089744 110.474862 L679.807692 110.474862" stroke-width="3" /><path class="reactive tooltip-trigger" d="M605.769231 7.442238 L655.128205 7.442238" stroke-width="3" /><path class="reactive tooltip-trigger" d="M630.448718 140.310111 L630.448718 133.260265" stroke-width="2" /><path class="reactive tooltip-trigger" d="M630.448718 7.442238 L630.448718 84.208950" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="49.05131538453361" width="98.71794871794872" x="581.0897435897436" y="84.20895000002497" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="140.31011076914743" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="-1225.4134846151976" r="3" /><desc class="value">Min: 802.4520
-Q1-1.5IQR: 802.4520
-Q1: 826.6975
-Median: 905.0600
-Q3: 995.3925
-Q3+1.5IQR: 1259.4050
-Max: 5499.3850</desc><desc class="x centered">630.448717948718</desc><desc class="y centered">95.13928523075242</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Validate Invalid Data</text><text class="title" x="430.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(80, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Validate Invalid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(80, 46)"><rect class="background" height="378.0" width="700.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h700.000000" /><g class="guides"><path class="guide line" d="M0.000000 352.294314 h700.000000" /><text class="" x="-5" y="355.7943143812709">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 331.224080 h700.000000" /><text class="" x="-5" y="334.7240802675585">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 310.153846 h700.000000" /><text class="" x="-5" y="313.65384615384613">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 289.083612 h700.000000" /><text class="" x="-5" y="292.58361204013374">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 268.013378 h700.000000" /><text class="" x="-5" y="271.5133779264214">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 246.943144 h700.000000" /><text class="" x="-5" y="250.443143812709">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 225.872910 h700.000000" /><text class="" x="-5" y="229.37290969899664">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 204.802676 h700.000000" /><text class="" x="-5" y="208.30267558528425">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 183.732441 h700.000000" /><text class="" x="-5" y="187.2324414715719">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 162.662207 h700.000000" /><text class="" x="-5" y="166.1622073578595">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 141.591973 h700.000000" /><text class="" x="-5" y="145.09197324414714">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 120.521739 h700.000000" /><text class="" x="-5" y="124.02173913043475">960</text><title>960</title></g><g class="guides"><path class="guide line" d="M0.000000 99.451505 h700.000000" /><text class="" x="-5" y="102.95150501672236">1040</text><title>1040</title></g><g class="guides"><path class="guide line" d="M0.000000 78.381271 h700.000000" /><text class="" x="-5" y="81.88127090300998">1120</text><title>1120</title></g><g class="guides"><path class="guide line" d="M0.000000 57.311037 h700.000000" /><text class="" x="-5" y="60.811036789297646">1200</text><title>1200</title></g><g class="guides"><path class="guide line" d="M0.000000 36.240803 h700.000000" /><text class="" x="-5" y="39.74080267558526">1280</text><title>1280</title></g><g class="guides"><path class="guide line" d="M0.000000 15.170569 h700.000000" /><text class="" x="-5" y="18.67056856187287">1360</text><title>1360</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M69.551282 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 69.551282 393.000000)" x="69.55128205128204" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M181.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 181.730769 393.000000)" x="181.73076923076923" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M293.910256 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 293.910256 393.000000)" x="293.9102564102564" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M406.089744 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 406.089744 393.000000)" x="406.0897435897436" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M518.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 518.269231 393.000000)" x="518.2692307692307" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M630.448718 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 630.448718 393.000000)" x="630.4487179487179" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M44.871795 370.603294 L94.230769 370.603294" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.192308 370.276969 L118.910256 370.276969" stroke-width="3" /><path class="reactive tooltip-trigger" d="M44.871795 369.876108 L94.230769 369.876108" stroke-width="3" /><path class="reactive tooltip-trigger" d="M69.551282 370.603294 L69.551282 370.335439" stroke-width="2" /><path class="reactive tooltip-trigger" d="M69.551282 369.876108 L69.551282 370.151865" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.18357441493344595" width="98.71794871794872" x="20.192307692307693" y="370.15186454841694" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="370.60329431422645" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="297.6639381272121" r="3" /><desc class="value">Min: 10.4840
+Q1-1.5IQR: 10.4840
+Q1: 11.5010
+Median: 11.7230
+Q3: 12.1980
+Q3+1.5IQR: 13.2450
+Max: 287.4220</desc><desc class="x centered">69.55128205128204</desc><desc class="y centered">370.2487349498163</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M157.051282 370.443161 L206.410256 370.443161" stroke-width="3" /><path class="reactive tooltip-trigger" d="M132.371795 370.220606 L231.089744 370.220606" stroke-width="3" /><path class="reactive tooltip-trigger" d="M157.051282 369.915351 L206.410256 369.915351" stroke-width="3" /><path class="reactive tooltip-trigger" d="M181.730769 370.443161 L181.730769 370.269858" stroke-width="2" /><path class="reactive tooltip-trigger" d="M181.730769 369.915351 L181.730769 370.128095" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.14176316887102303" width="98.71794871794872" x="132.3717948717949" y="370.1280946905206" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="370.4431605352804" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="306.15102842819283" r="3" /><desc class="value">Min: 11.0920
+Q1-1.5IQR: 11.0920
+Q1: 11.7500
+Median: 11.9370
+Q3: 12.2883
+Q3+1.5IQR: 13.0960
+Max: 255.1980</desc><desc class="x centered">181.73076923076925</desc><desc class="y centered">370.19541408861005</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M269.230769 370.241940 L318.589744 370.241940" stroke-width="3" /><path class="reactive tooltip-trigger" d="M244.551282 370.028604 L343.269231 370.028604" stroke-width="3" /><path class="reactive tooltip-trigger" d="M269.230769 369.472876 L318.589744 369.472876" stroke-width="3" /><path class="reactive tooltip-trigger" d="M293.910256 370.241940 L293.910256 370.092605" stroke-width="2" /><path class="reactive tooltip-trigger" d="M293.910256 369.472876 L293.910256 369.845819" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.2467851168904076" width="98.71794871794872" x="244.55128205128204" y="369.84581939809095" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="370.2419397994542" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="331.68683528439726" r="3" /><desc class="value">Min: 11.8560
+Q1-1.5IQR: 11.8560
+Q1: 12.4230
+Median: 12.6660
+Q3: 13.3600
+Q3+1.5IQR: 14.7760
+Max: 158.2430</desc><desc class="x centered">293.9102564102564</desc><desc class="y centered">369.9363687291543</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M381.410256 356.397216 L430.769231 356.397216" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.730769 354.798643 L455.448718 354.798643" stroke-width="3" /><path class="reactive tooltip-trigger" d="M381.410256 353.097354 L430.769231 353.097354" stroke-width="3" /><path class="reactive tooltip-trigger" d="M406.089744 356.397216 L406.089744 355.162237" stroke-width="2" /><path class="reactive tooltip-trigger" d="M406.089744 353.097354 L406.089744 354.338127" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.8241095316531073" width="98.71794871794872" x="356.7307692307692" y="354.3381270903738" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="356.45884615370915" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="280.5830894648795" r="3" /><desc class="value">Min: 64.1880
+Q1-1.5IQR: 64.4220
+Q1: 69.1110
+Median: 70.4915
+Q3: 72.2400
+Q3+1.5IQR: 76.9510
+Max: 352.2750</desc><desc class="x centered">406.0897435897436</desc><desc class="y centered">354.75871530095054</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M493.589744 314.610727 L542.948718 314.610727" stroke-width="3" /><path class="reactive tooltip-trigger" d="M468.910256 311.060788 L567.628205 311.060788" stroke-width="3" /><path class="reactive tooltip-trigger" d="M493.589744 294.055661 L542.948718 294.055661" stroke-width="3" /><path class="reactive tooltip-trigger" d="M518.269231 314.610727 L518.269231 312.320130" stroke-width="2" /><path class="reactive tooltip-trigger" d="M518.269231 294.055661 L518.269231 305.087245" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="7.232884615451951" width="98.71794871794872" x="468.9102564102564" y="305.0872449833153" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="314.6107274246647" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="-109.86599498345316" r="3" /><desc class="value">Min: 223.0780
+Q1-1.5IQR: 223.0780
+Q1: 231.7750
+Median: 236.5565
+Q3: 259.2370
+Q3+1.5IQR: 301.1220
+Max: 1834.7420</desc><desc class="x centered">518.2692307692307</desc><desc class="y centered">307.42691011703494</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M605.769231 148.144026 L655.128205 148.144026" stroke-width="3" /><path class="reactive tooltip-trigger" d="M581.089744 111.813675 L679.807692 111.813675" stroke-width="3" /><path class="reactive tooltip-trigger" d="M605.769231 7.281083 L655.128205 7.281083" stroke-width="3" /><path class="reactive tooltip-trigger" d="M630.448718 148.144026 L630.448718 137.535690" stroke-width="2" /><path class="reactive tooltip-trigger" d="M630.448718 7.281083 L630.448718 85.587225" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="51.94846467409806" width="98.71794871794872" x="581.0897435897436" y="85.58722512535991" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="148.14402591972893" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="-422.1611036789873" r="3" /><desc class="value">Min: 855.1230
+Q1-1.5IQR: 855.1230
+Q1: 895.4010
+Median: 993.0630
+Q3: 1092.6403
+Q3+1.5IQR: 1389.9550
+Max: 3020.4720</desc><desc class="x centered">630.448717948718</desc><desc class="y centered">98.07233967393995</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Validate Invalid Data</text><text class="title" x="430.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(80, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/static/Validate_Valid_Data.svg b/docs/static/Validate_Valid_Data.svg
index 9571e3c9..682196d2 100644
--- a/docs/static/Validate_Valid_Data.svg
+++ b/docs/static/Validate_Valid_Data.svg
@@ -1,8 +1,8 @@
 <?xml version='1.0' encoding='utf-8'?>
-<svg class="pygal-chart" id="chart-54471fd3-f83e-42d3-90ee-d01eba790e88" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-06-08--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-54471fd3-f83e-42d3-90ee-d01eba790e88{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
-#chart-54471fd3-f83e-42d3-90ee-d01eba790e88{background-color:rgba(249,249,249,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 path,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 rect,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .graph{fill:rgba(0,0,0,.87)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 text.no_data{fill:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .title{fill:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .legends .legend text{fill:rgba(0,0,0,.87)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis .line{stroke:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis text.major{fill:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.y .guides:hover .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .line-graph .axis.x .guides:hover .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .stackedline-graph .axis.x .guides:hover .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .ci{stroke:rgba(0,0,0,.87)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .reactive.active,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .ci .reactive.active{stroke-width:1.5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .series text{fill:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip .label{fill:rgba(0,0,0,.87)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip .value{font-size:1.5em}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .bound{font-size:.5em}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-0,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-1,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-2,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-3,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-4,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-5,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay .color-0 text{fill:black}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay .color-1 text{fill:black}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay .color-2 text{fill:black}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay .color-3 text{fill:black}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay .color-4 text{fill:black}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .text-overlay .color-5 text{fill:black}
-#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 text.no_data{text-anchor:middle}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .guide.line{fill:none}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .centered{text-anchor:middle}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .title{text-anchor:middle}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .legends .legend text{fill-opacity:1}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.x text{text-anchor:middle}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.x:not(.web) text[transform]{text-anchor:start}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.y text{text-anchor:end}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.y text[transform].backwards{text-anchor:start}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.y2 text{text-anchor:start}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.y2 text[transform].backwards{text-anchor:end}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis .guide.line{stroke-dasharray:4,4}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis .major.guide.line{stroke-dasharray:6,6}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .horizontal .axis.y .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .horizontal .axis.y2 .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .vertical .axis.x .guide.line{opacity:0}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .horizontal .axis.always_show .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.y .guides:hover .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.y2 .guides:hover .guide.line,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis.x .guides:hover .guide.line{opacity:1}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .axis .guides:hover text{opacity:1}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .nofill{fill:none}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .subtle-fill{fill-opacity:.2}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .dot{stroke-width:1px;fill-opacity:1}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .dot.active{stroke-width:5px}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .dot.negative{fill:transparent}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 text,#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 tspan{stroke:none !important}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .series text.active{opacity:1}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .tooltip text{fill-opacity:1}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .showable{visibility:hidden}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .showable.shown{visibility:visible}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-54471fd3-f83e-42d3-90ee-d01eba790e88 .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
-.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['54471fd3-f83e-42d3-90ee-d01eba790e88'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [34, 1003], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Validate Valid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-object-api", "typic-protocol-api", "typic-functional-api", "pydantic", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 34, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[typic-object-api] - 12589 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[typic-protocol-api] - 13522 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[typic-functional-api] - 9233 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[pydantic] - 5770 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[marshmallow] - 2276 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[djangorestframework] - 922 rounds"]}</script><script type="text/javascript">(function() {
+<svg class="pygal-chart" id="chart-32c0491e-1697-4610-967c-33a0b91e937e" viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg"><!--Generated with pygal 2.4.0 (etree) ©Kozea 2012-2016 on 2021-07-06--><!--http://pygal.org--><!--http://github.com/Kozea/pygal--><defs><style type="text/css">#chart-32c0491e-1697-4610-967c-33a0b91e937e{-webkit-user-select:none;-webkit-font-smoothing:antialiased;font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace}#chart-32c0491e-1697-4610-967c-33a0b91e937e .title{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-32c0491e-1697-4610-967c-33a0b91e937e .legends .legend text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis text{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis text.major{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay text.value{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:16px}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay text.label{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:10px}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:14px}#chart-32c0491e-1697-4610-967c-33a0b91e937e text.no_data{font-family:Consolas,"Deja Vu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace;font-size:64px}
+#chart-32c0491e-1697-4610-967c-33a0b91e937e{background-color:rgba(249,249,249,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e path,#chart-32c0491e-1697-4610-967c-33a0b91e937e line,#chart-32c0491e-1697-4610-967c-33a0b91e937e rect,#chart-32c0491e-1697-4610-967c-33a0b91e937e circle{-webkit-transition:150ms;-moz-transition:150ms;transition:150ms}#chart-32c0491e-1697-4610-967c-33a0b91e937e .graph &gt; .background{fill:rgba(249,249,249,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .plot &gt; .background{fill:rgba(255,255,255,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .graph{fill:rgba(0,0,0,.87)}#chart-32c0491e-1697-4610-967c-33a0b91e937e text.no_data{fill:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .title{fill:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .legends .legend text{fill:rgba(0,0,0,.87)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .legends .legend:hover text{fill:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis .line{stroke:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis .guide.line{stroke:rgba(0,0,0,.54)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis .major.line{stroke:rgba(0,0,0,.87)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis text.major{fill:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.y .guides:hover .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .line-graph .axis.x .guides:hover .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .stackedline-graph .axis.x .guides:hover .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .xy-graph .axis.x .guides:hover .guide.line{stroke:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis .guides:hover text{fill:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .reactive{fill-opacity:.7;stroke-opacity:.8}#chart-32c0491e-1697-4610-967c-33a0b91e937e .ci{stroke:rgba(0,0,0,.87)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .reactive.active,#chart-32c0491e-1697-4610-967c-33a0b91e937e .active .reactive{fill-opacity:.8;stroke-opacity:.9;stroke-width:4}#chart-32c0491e-1697-4610-967c-33a0b91e937e .ci .reactive.active{stroke-width:1.5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .series text{fill:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip rect{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,1);-webkit-transition:opacity 150ms;-moz-transition:opacity 150ms;transition:opacity 150ms}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip .label{fill:rgba(0,0,0,.87)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip .label{fill:rgba(0,0,0,.87)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip .legend{font-size:.8em;fill:rgba(0,0,0,.54)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip .x_label{font-size:.6em;fill:rgba(0,0,0,1)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip .xlink{font-size:.5em;text-decoration:underline}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip .value{font-size:1.5em}#chart-32c0491e-1697-4610-967c-33a0b91e937e .bound{font-size:.5em}#chart-32c0491e-1697-4610-967c-33a0b91e937e .max-value{font-size:.75em;fill:rgba(0,0,0,.54)}#chart-32c0491e-1697-4610-967c-33a0b91e937e .map-element{fill:rgba(255,255,255,1);stroke:rgba(0,0,0,.54) !important}#chart-32c0491e-1697-4610-967c-33a0b91e937e .map-element .reactive{fill-opacity:inherit;stroke-opacity:inherit}#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-0,#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-0 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-1,#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-1 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-2,#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-2 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-3,#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-3 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-4,#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-4 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-5,#chart-32c0491e-1697-4610-967c-33a0b91e937e .color-5 a:visited{stroke:#3F51B5;fill:#3F51B5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay .color-0 text{fill:black}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay .color-1 text{fill:black}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay .color-2 text{fill:black}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay .color-3 text{fill:black}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay .color-4 text{fill:black}#chart-32c0491e-1697-4610-967c-33a0b91e937e .text-overlay .color-5 text{fill:black}
+#chart-32c0491e-1697-4610-967c-33a0b91e937e text.no_data{text-anchor:middle}#chart-32c0491e-1697-4610-967c-33a0b91e937e .guide.line{fill:none}#chart-32c0491e-1697-4610-967c-33a0b91e937e .centered{text-anchor:middle}#chart-32c0491e-1697-4610-967c-33a0b91e937e .title{text-anchor:middle}#chart-32c0491e-1697-4610-967c-33a0b91e937e .legends .legend text{fill-opacity:1}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.x text{text-anchor:middle}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.x:not(.web) text[transform]{text-anchor:start}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.x:not(.web) text[transform].backwards{text-anchor:end}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.y text{text-anchor:end}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.y text[transform].backwards{text-anchor:start}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.y2 text{text-anchor:start}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.y2 text[transform].backwards{text-anchor:end}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis .guide.line{stroke-dasharray:4,4}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis .major.guide.line{stroke-dasharray:6,6}#chart-32c0491e-1697-4610-967c-33a0b91e937e .horizontal .axis.y .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .horizontal .axis.y2 .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .vertical .axis.x .guide.line{opacity:0}#chart-32c0491e-1697-4610-967c-33a0b91e937e .horizontal .axis.always_show .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .vertical .axis.always_show .guide.line{opacity:1 !important}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.y .guides:hover .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.y2 .guides:hover .guide.line,#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis.x .guides:hover .guide.line{opacity:1}#chart-32c0491e-1697-4610-967c-33a0b91e937e .axis .guides:hover text{opacity:1}#chart-32c0491e-1697-4610-967c-33a0b91e937e .nofill{fill:none}#chart-32c0491e-1697-4610-967c-33a0b91e937e .subtle-fill{fill-opacity:.2}#chart-32c0491e-1697-4610-967c-33a0b91e937e .dot{stroke-width:1px;fill-opacity:1}#chart-32c0491e-1697-4610-967c-33a0b91e937e .dot.active{stroke-width:5px}#chart-32c0491e-1697-4610-967c-33a0b91e937e .dot.negative{fill:transparent}#chart-32c0491e-1697-4610-967c-33a0b91e937e text,#chart-32c0491e-1697-4610-967c-33a0b91e937e tspan{stroke:none !important}#chart-32c0491e-1697-4610-967c-33a0b91e937e .series text.active{opacity:1}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip rect{fill-opacity:.95;stroke-width:.5}#chart-32c0491e-1697-4610-967c-33a0b91e937e .tooltip text{fill-opacity:1}#chart-32c0491e-1697-4610-967c-33a0b91e937e .showable{visibility:hidden}#chart-32c0491e-1697-4610-967c-33a0b91e937e .showable.shown{visibility:visible}#chart-32c0491e-1697-4610-967c-33a0b91e937e .gauge-background{fill:rgba(229,229,229,1);stroke:none}#chart-32c0491e-1697-4610-967c-33a0b91e937e .bg-lines{stroke:rgba(249,249,249,1);stroke-width:2px}
+.tooltip .value{font-size:1em !important}.axis text{font-size:9px !important}</style><script type="text/javascript">window.pygal = window.pygal || {};window.pygal.config = window.pygal.config || {};window.pygal.config['32c0491e-1697-4610-967c-33a0b91e937e'] = {"allow_interruptions": false, "box_mode": "tukey", "classes": ["pygal-chart"], "css": ["file://style.css", "file://graph.css", "inline:\n                .tooltip .value {\n                    font-size: 1em !important;\n                }\n                .axis text {\n                    font-size: 9px !important;\n                }\n            "], "defs": [], "disable_xml_declaration": false, "dots_size": 2.5, "dynamic_print_values": false, "explicit_size": false, "fill": false, "force_uri_protocol": "https", "formatter": null, "half_pie": false, "height": 600, "include_x_axis": false, "inner_radius": 0, "interpolate": null, "interpolation_parameters": {}, "interpolation_precision": 250, "inverse_y_axis": false, "js": ["file:///Users/god/PycharmProjects/typic/.venv/lib/python3.7/site-packages/pygaljs/static/2.0.x/pygal-tooltips.js"], "legend_at_bottom": false, "legend_at_bottom_columns": null, "legend_box_size": 12, "logarithmic": false, "margin": 20, "margin_bottom": null, "margin_left": null, "margin_right": null, "margin_top": null, "max_scale": 20, "min_scale": 20, "missing_value_fill_truncation": "x", "no_data_text": "No data", "no_prefix": false, "order_min": null, "pretty_print": false, "print_labels": false, "print_values": false, "print_values_position": "center", "print_zeroes": true, "range": [35, 1159], "rounded_bars": null, "secondary_range": null, "show_dots": true, "show_legend": false, "show_minor_x_labels": true, "show_minor_y_labels": true, "show_only_major_dots": false, "show_x_guides": false, "show_x_labels": true, "show_y_guides": true, "show_y_labels": true, "spacing": 10, "stack_from_top": false, "strict": false, "stroke": true, "stroke_style": null, "style": {"background": "rgba(249, 249, 249, 1)", "ci_colors": [], "colors": ["#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5", "#3F51B5"], "font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "foreground": "rgba(0, 0, 0, .87)", "foreground_strong": "rgba(0, 0, 0, 1)", "foreground_subtle": "rgba(0, 0, 0, .54)", "guide_stroke_dasharray": "4,4", "label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "label_font_size": 10, "legend_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "legend_font_size": 14, "major_guide_stroke_dasharray": "6,6", "major_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "major_label_font_size": 10, "no_data_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "no_data_font_size": 64, "opacity": ".7", "opacity_hover": ".8", "plot_background": "rgba(255, 255, 255, 1)", "stroke_opacity": ".8", "stroke_opacity_hover": ".9", "title_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "title_font_size": 16, "tooltip_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "tooltip_font_size": 14, "transition": "150ms", "value_background": "rgba(229, 229, 229, 1)", "value_colors": [], "value_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_font_size": 16, "value_label_font_family": "Consolas, \"Deja Vu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Courier New\", monospace", "value_label_font_size": 10}, "title": "Speed in Microseconds (us) of Validate Valid Data", "tooltip_border_radius": 0, "tooltip_fancy_mode": true, "truncate_label": 50, "truncate_legend": null, "width": 800, "x_label_rotation": 270, "x_labels": ["typic-object-api", "typic-protocol-api", "pydantic", "typic-functional-api", "marshmallow", "djangorestframework"], "x_labels_major": null, "x_labels_major_count": null, "x_labels_major_every": null, "x_title": "Trial", "xrange": null, "y_label_rotation": 0, "y_labels": null, "y_labels_major": null, "y_labels_major_count": null, "y_labels_major_every": null, "y_title": "Duration", "zero": 35, "legends": ["benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[typic-object-api] - 12824 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[typic-protocol-api] - 12716 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[pydantic] - 5735 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[typic-functional-api] - 11099 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[marshmallow] - 2267 rounds", "benchmark/test_benchmarks.py::test_benchmarks_validate_valid_data[djangorestframework] - 1031 rounds"]}</script><script type="text/javascript">(function() {
   var $, get_translation, init, init_svg, matches, padding, r_translation, sibl, svg_ns, tooltip_timeout, xlink_ns;
 
   svg_ns = 'http://www.w3.org/2000/svg';
@@ -345,40 +345,40 @@
   window.pygal.init_svg = init_svg;
 
 }).call(this);
-</script></defs><title>Speed in Microseconds (us) of Validate Valid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(74, 46)"><rect class="background" height="378.0" width="706.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h706.000000" /><g class="guides"><path class="guide line" d="M0.000000 353.476661 h706.000000" /><text class="" x="-5" y="356.97666110978804">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 323.469517 h706.000000" /><text class="" x="-5" y="326.9695165515599">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 293.462372 h706.000000" /><text class="" x="-5" y="296.9623719933318">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 263.455227 h706.000000" /><text class="" x="-5" y="266.9552274351036">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 233.448083 h706.000000" /><text class="" x="-5" y="236.94808287687545">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 203.440938 h706.000000" /><text class="" x="-5" y="206.9409383186473">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 173.433794 h706.000000" /><text class="" x="-5" y="176.93379376041915">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 143.426649 h706.000000" /><text class="" x="-5" y="146.92664920219102">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 113.419505 h706.000000" /><text class="" x="-5" y="116.91950464396285">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 83.412360 h706.000000" /><text class="" x="-5" y="86.91236008573469">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 53.405216 h706.000000" /><text class="" x="-5" y="56.90521552750653">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 23.398071 h706.000000" /><text class="" x="-5" y="26.898070969278365">960</text><title>960</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M70.147436 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 70.147436 393.000000)" x="70.1474358974359" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M183.288462 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 183.288462 393.000000)" x="183.28846153846155" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M296.429487 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 296.429487 393.000000)" x="296.4294871794872" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M409.570513 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 409.570513 393.000000)" x="409.5705128205129" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M522.711538 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 522.711538 393.000000)" x="522.7115384615385" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M635.852564 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 635.852564 393.000000)" x="635.8525641025641" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M45.256410 370.609990 L95.038462 370.609990" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.365385 369.632508 L119.929487 369.632508" stroke-width="3" /><path class="reactive tooltip-trigger" d="M45.256410 367.083776 L95.038462 367.083776" stroke-width="3" /><path class="reactive tooltip-trigger" d="M70.147436 370.609990 L70.147436 370.288914" stroke-width="2" /><path class="reactive tooltip-trigger" d="M70.147436 367.083776 L70.147436 369.012391" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.2765226839849788" width="99.56410256410255" x="20.365384615384613" y="369.0123913431343" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="370.60999047413975" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="70.14743589743588" cy="255.43956894494244" r="3" /><desc class="value">Min: 34.3220
-Q1-1.5IQR: 34.3220
-Q1: 35.1780
-Median: 36.9280
-Q3: 38.5813
-Q3+1.5IQR: 43.7230
-Max: 341.3700</desc><desc class="x centered">70.14743589743588</desc><desc class="y centered">369.3255158966553</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M158.397436 370.530847 L208.179487 370.530847" stroke-width="3" /><path class="reactive tooltip-trigger" d="M133.506410 370.043231 L233.070513 370.043231" stroke-width="3" /><path class="reactive tooltip-trigger" d="M158.397436 368.125774 L208.179487 368.125774" stroke-width="3" /><path class="reactive tooltip-trigger" d="M183.288462 370.530847 L183.288462 370.223648" stroke-width="2" /><path class="reactive tooltip-trigger" d="M183.288462 368.125774 L183.288462 369.384574" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.8390747798404163" width="99.56410256410255" x="133.50641025641025" y="369.38457370812813" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="370.5308466301488" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="183.28846153846152" cy="259.13644915456916" r="3" /><desc class="value">Min: 34.5330
-Q1-1.5IQR: 34.5330
-Q1: 35.3520
-Median: 35.8330
-Q3: 37.5890
-Q3+1.5IQR: 40.9450
-Max: 331.5140</desc><desc class="x centered">183.28846153846152</desc><desc class="y centered">369.6616146702307</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M271.538462 370.234526 L321.320513 370.234526" stroke-width="3" /><path class="reactive tooltip-trigger" d="M246.647436 369.253292 L346.211538 369.253292" stroke-width="3" /><path class="reactive tooltip-trigger" d="M271.538462 367.413854 L321.320513 367.413854" stroke-width="3" /><path class="reactive tooltip-trigger" d="M296.429487 370.234526 L296.429487 369.907073" stroke-width="2" /><path class="reactive tooltip-trigger" d="M296.429487 367.413854 L296.429487 368.911867" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.9952057037539248" width="99.56410256410255" x="246.64743589743588" y="368.91186740891715" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="370.23452607760487" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="296.4294871794872" cy="281.72357704224504" r="3" /><desc class="value">Min: 35.3230
-Q1-1.5IQR: 35.3230
-Q1: 36.1960
-Median: 37.9390
-Q3: 38.8492
-Q3+1.5IQR: 42.8430
-Max: 271.2960</desc><desc class="x centered">296.4294871794872</desc><desc class="y centered">369.1441227078255</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M384.679487 370.037979 L434.461538 370.037979" stroke-width="3" /><path class="reactive tooltip-trigger" d="M359.788462 369.241290 L459.352564 369.241290" stroke-width="3" /><path class="reactive tooltip-trigger" d="M384.679487 367.276947 L434.461538 367.276947" stroke-width="3" /><path class="reactive tooltip-trigger" d="M409.570513 370.037979 L409.570513 369.770916" stroke-width="2" /><path class="reactive tooltip-trigger" d="M409.570513 367.276947 L409.570513 368.775054" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.9958621099705169" width="99.56410256410255" x="359.78846153846155" y="368.77505358416226" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="370.0379792808103" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="409.5705128205128" cy="278.9194093831305" r="3" /><desc class="value">Min: 35.8470
-Q1-1.5IQR: 35.8470
-Q1: 36.5590
-Median: 37.9710
-Q3: 39.2140
-Q3+1.5IQR: 43.2080
-Max: 278.7720</desc><desc class="x centered">409.5705128205128</desc><desc class="y centered">369.0204370088017</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M497.820513 324.756448 L547.602564 324.756448" stroke-width="3" /><path class="reactive tooltip-trigger" d="M472.929487 322.452837 L572.493590 322.452837" stroke-width="3" /><path class="reactive tooltip-trigger" d="M497.820513 312.585925 L547.602564 312.585925" stroke-width="3" /><path class="reactive tooltip-trigger" d="M522.711538 324.756448 L522.711538 323.244651" stroke-width="2" /><path class="reactive tooltip-trigger" d="M522.711538 312.585925 L522.711538 318.981573" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="4.263077518383568" width="99.56410256410255" x="472.9294871794872" y="318.9815729936338" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="324.75644796378185" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="522.7115384615385" cy="184.5386877827677" r="3" /><desc class="value">Min: 156.5690
-Q1-1.5IQR: 156.5690
-Q1: 160.5995
-Median: 162.7105
-Q3: 171.9650
-Q3+1.5IQR: 189.0160
-Max: 530.3940</desc><desc class="x centered">522.7115384615385</desc><desc class="y centered">320.40428673496615</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M610.961538 150.945314 L660.743590 150.945314" stroke-width="3" /><path class="reactive tooltip-trigger" d="M586.070513 109.233133 L685.634615 109.233133" stroke-width="3" /><path class="reactive tooltip-trigger" d="M610.961538 7.434270 L660.743590 7.434270" stroke-width="3" /><path class="reactive tooltip-trigger" d="M635.852564 150.945314 L635.852564 135.739569" stroke-width="2" /><path class="reactive tooltip-trigger" d="M635.852564 7.434270 L635.852564 84.763807" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="50.975762086000145" width="99.56410256410255" x="586.0705128205128" y="84.76380685885755" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="150.94531436043508" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="635.8525641025641" cy="-10755.862919742785" r="3" /><desc class="value">Min: 619.9550
-Q1-1.5IQR: 619.9550
-Q1: 660.4940
-Median: 731.1610
-Q3: 796.3970
-Q3+1.5IQR: 1002.5600
-Max: 29697.8520</desc><desc class="x centered">635.8525641025641</desc><desc class="y centered">97.62321862347022</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Validate Valid Data</text><text class="title" x="427.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(74, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(74, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
+</script></defs><title>Speed in Microseconds (us) of Validate Valid Data</title><g class="graph custombox-graph vertical"><rect class="background" height="600" width="800" x="0" y="0" /><g class="plot" transform="translate(80, 46)"><rect class="background" height="378.0" width="700.0" x="0" y="0" /><g class="axis y always_show"><path class="line" d="M0.000000 378.000000 h700.000000" /><g class="guides"><path class="guide line" d="M0.000000 356.179373 h700.000000" /><text class="" x="-5" y="359.6793731179852">80</text><title>80</title></g><g class="guides"><path class="guide line" d="M0.000000 330.310224 h700.000000" /><text class="" x="-5" y="333.8102244730359">160</text><title>160</title></g><g class="guides"><path class="guide line" d="M0.000000 304.441076 h700.000000" /><text class="" x="-5" y="307.9410758280865">240</text><title>240</title></g><g class="guides"><path class="guide line" d="M0.000000 278.571927 h700.000000" /><text class="" x="-5" y="282.0719271831372">320</text><title>320</title></g><g class="guides"><path class="guide line" d="M0.000000 252.702779 h700.000000" /><text class="" x="-5" y="256.2027785381878">400</text><title>400</title></g><g class="guides"><path class="guide line" d="M0.000000 226.833630 h700.000000" /><text class="" x="-5" y="230.33362989323842">480</text><title>480</title></g><g class="guides"><path class="guide line" d="M0.000000 200.964481 h700.000000" /><text class="" x="-5" y="204.46448124828908">560</text><title>560</title></g><g class="guides"><path class="guide line" d="M0.000000 175.095333 h700.000000" /><text class="" x="-5" y="178.59533260333973">640</text><title>640</title></g><g class="guides"><path class="guide line" d="M0.000000 149.226184 h700.000000" /><text class="" x="-5" y="152.72618395839038">720</text><title>720</title></g><g class="guides"><path class="guide line" d="M0.000000 123.357035 h700.000000" /><text class="" x="-5" y="126.857035313441">800</text><title>800</title></g><g class="guides"><path class="guide line" d="M0.000000 97.487887 h700.000000" /><text class="" x="-5" y="100.98788666849168">880</text><title>880</title></g><g class="guides"><path class="guide line" d="M0.000000 71.618738 h700.000000" /><text class="" x="-5" y="75.11873802354228">960</text><title>960</title></g><g class="guides"><path class="guide line" d="M0.000000 45.749589 h700.000000" /><text class="" x="-5" y="49.24958937859293">1040</text><title>1040</title></g><g class="guides"><path class="guide line" d="M0.000000 19.880441 h700.000000" /><text class="" x="-5" y="23.38044073364358">1120</text><title>1120</title></g></g><g class="axis x"><path class="line" d="M0.000000 0.000000 v378.000000" /><g class="guides"><path class="guide line" d="M69.551282 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 69.551282 393.000000)" x="69.55128205128204" y="393.0">typic-object-api</text></g><g class="guides"><path class="guide line" d="M181.730769 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 181.730769 393.000000)" x="181.73076923076923" y="393.0">typic-protocol-api</text></g><g class="guides"><path class="guide line" d="M293.910256 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 293.910256 393.000000)" x="293.9102564102564" y="393.0">pydantic</text></g><g class="guides"><path class="guide line" d="M406.089744 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 406.089744 393.000000)" x="406.0897435897436" y="393.0">typic-functional-api</text></g><g class="guides"><path class="guide line" d="M518.269231 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 518.269231 393.000000)" x="518.2692307692307" y="393.0">marshmallow</text></g><g class="guides"><path class="guide line" d="M630.448718 0.000000 v378.000000" /><text class="backwards" transform="rotate(270 630.448718 393.000000)" x="630.4487179487179" y="393.0">djangorestframework</text></g></g><g class="series serie-0 color-0"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M44.871795 370.535457 L94.230769 370.535457" stroke-width="3" /><path class="reactive tooltip-trigger" d="M20.192308 369.959869 L118.910256 369.959869" stroke-width="3" /><path class="reactive tooltip-trigger" d="M44.871795 369.328985 L94.230769 369.328985" stroke-width="3" /><path class="reactive tooltip-trigger" d="M69.551282 370.535457 L69.551282 370.173936" stroke-width="2" /><path class="reactive tooltip-trigger" d="M69.551282 369.328985 L69.551282 369.836667" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.3372690255054067" width="98.71794871794872" x="20.192307692307693" y="369.8366667807028" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="370.5354571582772" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="69.55128205128204" cy="273.7822543114652" r="3" /><desc class="value">Min: 35.6040
+Q1-1.5IQR: 35.6040
+Q1: 36.7220
+Median: 37.3840
+Q3: 37.7650
+Q3+1.5IQR: 39.3350
+Max: 334.8120</desc><desc class="x centered">69.55128205128204</desc><desc class="y centered">369.9669826169852</desc><desc class="x_label" /></g></g></g><g class="series serie-1 color-1"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M157.051282 370.379919 L206.410256 370.379919" stroke-width="3" /><path class="reactive tooltip-trigger" d="M132.371795 369.655906 L231.089744 369.655906" stroke-width="3" /><path class="reactive tooltip-trigger" d="M157.051282 365.897442 L206.410256 365.897442" stroke-width="3" /><path class="reactive tooltip-trigger" d="M181.730769 370.379919 L181.730769 369.862051" stroke-width="2" /><path class="reactive tooltip-trigger" d="M181.730769 365.897442 L181.730769 368.277727" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="1.5843236721588596" width="98.71794871794872" x="132.3717948717949" y="368.2777272105981" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="370.3799189023916" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="181.73076923076925" cy="70.19528811930803" r="3" /><desc class="value">Min: 36.0850
+Q1-1.5IQR: 36.0850
+Q1: 37.6865
+Median: 38.3240
+Q3: 42.5860
+Q3+1.5IQR: 49.9470
+Max: 964.4020</desc><desc class="x centered">181.73076923076925</desc><desc class="y centered">368.8146090542219</desc><desc class="x_label" /></g></g></g><g class="series serie-2 color-2"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M269.230769 370.249926 L318.589744 370.249926" stroke-width="3" /><path class="reactive tooltip-trigger" d="M244.551282 369.444426 L343.269231 369.444426" stroke-width="3" /><path class="reactive tooltip-trigger" d="M269.230769 368.675465 L318.589744 368.675465" stroke-width="3" /><path class="reactive tooltip-trigger" d="M293.910256 370.249926 L293.910256 369.702794" stroke-width="2" /><path class="reactive tooltip-trigger" d="M293.910256 368.675465 L293.910256 369.295112" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.4076816145552016" width="98.71794871794872" x="244.55128205128204" y="369.2951123220343" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="370.2499264303217" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="293.9102564102564" cy="275.0048949493626" r="3" /><desc class="value">Min: 36.4870
+Q1-1.5IQR: 36.4870
+Q1: 38.1790
+Median: 38.9780
+Q3: 39.4398
+Q3+1.5IQR: 41.3560
+Max: 331.0310</desc><desc class="x centered">293.9102564102564</desc><desc class="y centered">369.47354477487147</desc><desc class="x_label" /></g></g></g><g class="series serie-3 color-3"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M381.410256 370.223734 L430.769231 370.223734" stroke-width="3" /><path class="reactive tooltip-trigger" d="M356.730769 369.644265 L455.448718 369.644265" stroke-width="3" /><path class="reactive tooltip-trigger" d="M381.410256 368.917019 L430.769231 368.917019" stroke-width="3" /><path class="reactive tooltip-trigger" d="M406.089744 370.223734 L406.089744 369.743538" stroke-width="2" /><path class="reactive tooltip-trigger" d="M406.089744 368.917019 L406.089744 369.416051" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="0.32748725351086705" width="98.71794871794872" x="356.7307692307692" y="369.4160505921191" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="370.2386086777147" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="406.0897435897436" cy="289.9824852860329" r="3" /><desc class="value">Min: 36.5220
+Q1-1.5IQR: 36.5680
+Q1: 38.0530
+Median: 38.3600
+Q3: 39.0657
+Q3+1.5IQR: 40.6090
+Max: 284.7130</desc><desc class="x centered">406.0897435897436</desc><desc class="y centered">369.5889211778821</desc><desc class="x_label" /></g></g></g><g class="series serie-4 color-4"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M493.589744 328.028242 L542.948718 328.028242" stroke-width="3" /><path class="reactive tooltip-trigger" d="M468.910256 325.256363 L567.628205 325.256363" stroke-width="3" /><path class="reactive tooltip-trigger" d="M493.589744 320.044700 L542.948718 320.044700" stroke-width="3" /><path class="reactive tooltip-trigger" d="M518.269231 328.028242 L518.269231 325.991047" stroke-width="2" /><path class="reactive tooltip-trigger" d="M518.269231 320.044700 L518.269231 323.643583" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="2.347463557321703" width="98.71794871794872" x="468.9102564102564" y="323.64358318508664" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="328.02824219816694" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="518.2692307692307" cy="57.46863707909739" r="3" /><desc class="value">Min: 167.0570
+Q1-1.5IQR: 167.0570
+Q1: 173.3570
+Median: 175.6290
+Q3: 180.6165
+Q3+1.5IQR: 191.7460
+Max: 1003.7590</desc><desc class="x centered">518.2692307692307</desc><desc class="y centered">324.5927869216996</desc><desc class="x_label" /></g></g></g><g class="series serie-5 color-5"><g class="boxes"><g class="box"><path class="reactive tooltip-trigger" d="M605.769231 178.583141 L655.128205 178.583141" stroke-width="3" /><path class="reactive tooltip-trigger" d="M581.089744 135.234855 L679.807692 135.234855" stroke-width="3" /><path class="reactive tooltip-trigger" d="M605.769231 7.377881 L655.128205 7.377881" stroke-width="3" /><path class="reactive tooltip-trigger" d="M630.448718 178.583141 L630.448718 158.382892" stroke-width="2" /><path class="reactive tooltip-trigger" d="M630.448718 7.377881 L630.448718 99.269543" stroke-width="2" /><rect class="subtle-fill reactive tooltip-trigger" height="59.11334904526032" width="98.71794871794872" x="581.0897435897436" y="99.26954344036841" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="178.5831405694165" r="3" /><circle class="subtle-fill reactive tooltip-trigger" cx="630.448717948718" cy="-10236.073532028486" r="3" /><desc class="value">Min: 629.2140
+Q1-1.5IQR: 629.2140
+Q1: 691.6830
+Median: 763.2680
+Q3: 874.4902
+Q3+1.5IQR: 1158.6640
+Max: 32836.4020</desc><desc class="x centered">630.448717948718</desc><desc class="y centered">115.76966252053631</desc><desc class="x_label" /></g></g></g></g><g class="titles"><text class="title plot_title" x="400.0" y="26">Speed in Microseconds (us) of Validate Valid Data</text><text class="title" x="430.0" y="580.0">Trial</text><text class="title" transform="rotate(-90 0.000000 235.000000)" x="0" y="261.0">Duration</text></g><g class="plot overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot text-overlay" transform="translate(80, 46)"><g class="series serie-0 color-0" /><g class="series serie-1 color-1" /><g class="series serie-2 color-2" /><g class="series serie-3 color-3" /><g class="series serie-4 color-4" /><g class="series serie-5 color-5" /></g><g class="plot tooltip-overlay" transform="translate(80, 46)"><g class="tooltip" style="opacity: 0" transform="translate(0 0)"><rect class="tooltip-box" height="0" rx="0" ry="0" width="0" /><g class="text" /></g></g></g></svg>
\ No newline at end of file
diff --git a/docs/usage/api.md b/docs/usage/api.md
index b961daf2..67764cf2 100644
--- a/docs/usage/api.md
+++ b/docs/usage/api.md
@@ -1,42 +1,58 @@
 # Using Typical
 
-Typical has two primary means of interaction - the *Object API* and
-the *Functional API*.
+Typical has three primary means of interaction - the *Functional API*, the *Protocol
+API*, and the *Object API*
 
+## The Functional API
 
-## The Object API
+The *Functional API* largely mirrors the
+[Object API](#the-object-api). It allows you to define your types and
+pass them into set of high-level methods for largely the same effect
+as binding directly to a class with `@typic.klass`.
 
-As touched on in [Basics](index.md), you can interact with the Object
-API in two ways: `@typic.al` and `@typic.klass`. What's the
-difference? Very little.
+!!! important
 
-`@typic.al` will wrap any class, but works best when combined with
-[dataclasses](https://docs.python.org/3/library/dataclasses.html).
-This is because of the declarative nature of defining fields and input
-which dataclasses provide. To whit...
+    One of the benefits to the Object API is that the protocols
+    for  serialization, deserialization, and validation are generated 
+    at compile-time of the module and cached for later use. The 
+    Functional API has no compile-time optimization, so the protocols 
+    for your custom types will not be generated and cached until the 
+    first call. 
+    
+    There are, however, other runtime benefits to the Functional API 
+    which we'll discuss below.
+    
+    !!! note ""
+        
+        We provide a path for optimizing this initial performance hit
+        by manually binding a protocol via `typic.protocol(...)`. See
+        [SerDes](serdes.md) for more.
 
-`@typic.klass` is a short-hand for the `@typic.al/@dataclass`
-combination, which also provides a *slightly* more powerful API. For
-brevity (the soul of wit), we'll be using `@typic.klass` for the
-examples in this section.
+### Defining Your Data
 
-### Defining your Objects
+Anything goes!
 
-!!! tip
+No, really, for the most part, any custom type definition is valid for
+the Functional API. The Functional API also knows to look out for
+types defined with the Object API, no additional cost is incurred for
+interacting with an object via either API, minus the cost of a few
+additional function calls.
 
-    If you're unfamiliar with dataclasses, it's best to take some time
-    now and review the official 
-    [documentation](https://docs.python.org/3/library/dataclasses.html) 
-    and [PEP 557](https://www.python.org/dev/peps/pep-0557/).
+Let's look at the models we defined in the Object API, but this time,
+only use the Functional API for interaction.
+
+!!! note
+
+    While we're using dataclasses to define our data, we could also
+    use vanilla classes, `TypedDict`, or `NamedTuple`. All we need for 
+    proper introspection is valid type annotations.
 
-As you've seen previously, defining your data is as simple as
-following the now-familiar pattern across many libraries:
 
 ```python
 from __future__ import annotations
 
 import enum
-import typic
+import dataclasses
 from typing import Iterable, Optional
 
 
@@ -47,10 +63,9 @@ class Instrument(str, enum.Enum):
     BASS = "bass"
     PIAN = "piano"
     DRUM = "drums"
-    VOCL = "vocals"
 
 
-@typic.klass
+@dataclasses.dataclass
 class Member:
     """A member in the band, man."""
 
@@ -59,7 +74,7 @@ class Member:
     id: Optional[int] = None
 
 
-@typic.klass
+@dataclasses.dataclass
 class Band:
     """It's the band, man."""
 
@@ -68,7 +83,7 @@ class Band:
     id: Optional[int] = None
 
 
-@typic.klass
+@dataclasses.dataclass
 class Song:
     """A sick tune - platinum fer sure."""
 
@@ -78,48 +93,28 @@ class Song:
     id: Optional[int] = None
 ```
 
-The `@typic.klass` decorator is built on top of the
-`@dataclass.dataclass` decorator, so any parameter which the
-`@dataclass.dataclass` decorator
-[accepts](https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass)
-is also accepted by `@typic.klass`, plus a few more:
-
-`strict: bool = False`
-> This enables "strict" validation of inputs. See
-> [validation](validation.md).
-
-`jsonschema: bool = True`
-> Generate a JSON Schema definition for your object.
-
-`serde: SerdeFlags = None`
-> Customize the serialization & deserialization of your object. See [SerDes](serdes.md).
-
-`slots: bool = True`
-> Automatically generate a class with slots for the attributes defined by your
-> annotations.
-
-### Interacting With Your Objects
-
-As we've already demonstrated, Typical will guarantee the  data
-passed into your models is parsed and transformed into the data you
-defined.
+!!! info ""
 
-First, let's define the API. Below are the methods which Typical
-will bind to your object when it is wrapped with `@typic.al` or
-`@typic.klass`.
+    The important thing to take away here is that there's *virtually
+    no difference in LOC or declaration* from the standard lib and the
+    `@typic.klass` declaration. This is a cornerstone of Typical's
+    design: Work with *with* standard libary, not against
+    (or parallel) to it.
 
+### Interacting With Your Data
 
-#### `.schema()`
+#### `typic.schema(...)`
 
-> A classmethod which returns a JSON Schema definition of your class.
+> A function which returns a JSON Schema definition of your class.
 >
-> This schema is computed and cached at compile-time so runtime calls
-> incur no additional compute time.
+> If the class was not bound using the [Object API](#the-object-api)
+> or by calling `typic.protocol()`, the schema will be generated at
+> first call and then cached for later use.
 >
 > ??? example "Rendering a Schema"
 >
 >     ```python
->     print(Member.schema().tojson(indent=2))
+>     print(typic.schema(Member).tojson(indent=2))
 >     #> {
 >     #>   "type": "object",
 >     #>   "title": "Member",
@@ -152,26 +147,37 @@ will bind to your object when it is wrapped with `@typic.al` or
 >     #> }
 >     ```
 
-#### `.transmute(...)`
+#### `typic.transmute(...)`
 
-> Convert incoming data into your Model.
+> Convert incoming data into an type or Annotation.
 >
-> This supports:
+> Incoming data may be:
 >
 > - Arbitrary classes (e.g., an ORM Model or other class)
 > - JSON strings/bytes
 > - Python literals
 >
+> The type may be any valid type annotation, standard Python type, or
+> custom user-defined class.
+>
 > ??? example "Transmute Data to Member"
 >
 >     ```python
->     Member.transmute('{"name":"Ben","instrument":"piano"}')
+>     typic.transmute(Member, '{"name":"Ben","instrument":"piano"}')
 >     #> Member(name='Ben', instrument=<Instrument.PIAN: 'piano'>, id=None)
 >     ```
 
-#### `.translate(...)`
+#### `typic.translate(...)`
 
-> Convert an instance of your model to another arbitrary class.
+> Convert an instance of any arbitrary class to another arbitrary class.
+>
+> !!! note
+>
+>     This function is considerably less powerful than 
+>     [transmute](#typictransmute). At a functional level, you're
+>     encouraged to make use of that method rather than this. To 
+>     understand *why* this function exists, take a look at its
+>     definition in the [Object API](#translate).
 >
 > ??? example "Translate Member"
 >
@@ -186,32 +192,21 @@ will bind to your object when it is wrapped with `@typic.al` or
 >             return f"<Member id={self.id} name={self.name} instrument={self.instrument}"
 >     
 >     
->     m = Member.transmute('{"name":"Robert","instrument":"guitar"}')
->     m.translate(MemberORM)
+>     m = typic.transmute(Member, '{"name":"Robert","instrument":"guitar"}')
+>     typic.translate(m, MemberORM)
 >     #> <Member id=None name=Robert instrument=guitar
 >     ```
->
-> !!! note ""
->
->     It's possible to translate *to* another class, then transmute *back*. e.g.:  
-> 
->     ``` python
->     m = Member.transmute('{"name":"Robert","instrument":"guitar"}')
->     orm = m.translate(MemberORM)
->     ... ## (do stuff with orm, save it, etc.)
->     Member.transmute(orm)
->     #> Member(name='Robert', instrument=<Instrument.GUIT: 'guitar'>, id=1)
->     ```
 
-#### `.validate(...)`
 
-> Validate some data against your model.
+#### `typic.validate(...)`
+
+> Validate some data against your an annotation or model.
 >
 > ??? example "Member Data Validation"
 >
 >     ```python
-> 
->     Member.validate({"name": "Paul", "instrument": "anything"})
+>
+>     typic.validate(Member, {"name": "Paul", "instrument": "anything"})
 >     #> Traceback (most recent call last):
 >     #> 	...
 >     #> typic.constraints.error.ConstraintValueError: Member.instrument: value <'anything'> fails constraints: (type=instrument, values=('guitar', 'bass', 'piano', 'drums', 'vocals'), nullable=False)
@@ -219,12 +214,12 @@ will bind to your object when it is wrapped with `@typic.al` or
 >
 > !!! fail "Gotcha"
 >
->     Validators don't do any type resolution, so passing raw JSON into 
->     the `.validate()` method will fail. See [Validation](validation.md)
+>     Validators don't do any type conversion, so passing raw JSON into
+>     the `typic.validate()` will fail. See [Validation](validation.md)
 
-#### `.primitive()`
+#### `typic.primitive(...)`
 
-> Convert your model instance into its "primitive" equivalent.
+> Convert any instance into its "primitive" equivalent.
 >
 > This method effectively *downgrades* your model into a
 > JSON-serializable dict.
@@ -232,12 +227,12 @@ will bind to your object when it is wrapped with `@typic.al` or
 > ??? example "Member to Primitive"
 >
 >     ```python
->     m = Member.transmute('{"name":"Darren","instrument":"drums"}')
->     print(m.primitive())
+>     m = typic.transmute(Member, '{"name":"Darren","instrument":"drums"}')
+>     print(typic.primitive(m))
 >     #> {"name": "Darren", "instrument":"drums", "id": None}
 >     ```
 
-#### `.tojson(...)`
+#### `typic.tojson(...)`
 
 > Serialize your model instance to JSON
 >
@@ -252,8 +247,8 @@ will bind to your object when it is wrapped with `@typic.al` or
 > ??? example "Member to JSON"
 >
 >     ```python
->     m = Member.transmute('{"name":"Darren","instrument":"drums"}')
->     print(m.tojson(indent=2))
+>     m = typic.transmute(Member, '{"name":"Darren","instrument":"drums"}')
+>     print(typic.tojson(m, indent=2))
 >     #> {
 >     #>   "name": "Darren",
 >     #>   "instrument": "drums",
@@ -266,7 +261,7 @@ will bind to your object when it is wrapped with `@typic.al` or
 >     It's possible to customize your serialized representation. See
 >     [SerDes](serdes.md).
 
-#### `.decode(...)`
+#### `typic.decode(...)`
 
 > Decode on-the-wire data into your Model.
 >
@@ -283,95 +278,154 @@ will bind to your object when it is wrapped with `@typic.al` or
 >         # Pretend we're using something other than a basic .decode()...
 >         return o.decode(encoding=encoding)
 >     
->     @typic.klass(serde=typic.flags(decoder=decode)
->     class Member:
->         name: str
->         instrument: Instrument
->         id: int = None
->     
 >     input = '{"name":"Ben","instrument":"piano","id":1}'.encode("utf-8-sig")
->     Member.decode(input, encoding="utf-8-sig")
+>     typic.decode(Member, input, decoder=decode, encoding="utf-8-sig")
 >     #> Member(name='Ben', instrument=<Instrument.PIAN: 'piano'>, id=1)
 >     ```
 
-#### `.encode(...)`
+#### `typic.encode(...)`
 
 > Encode your Model to a custom wire-format.
 >
 > This is useful if you plan to use a wire-format such as Avro, protocol buffers, etc.
 >
-> To use custom encoders, pass in a callable which takes the Model instance as its first
-> argument. All other keyword-arguments are passed on to the encoder function.
+> To use custom encoders, pass in a callable which takes the primitive representation of
+> your Model as the first argument. All other keyword-arguments are passed on to the
+> encoder function.
 >
 > ??? example "Encode a Member to Binary Data"
 >
 >     ```python
+>     import ujson
 >     
->     def encode(o: bytes, *, encoding: str = None):
->         # Pretend we're using something other than a basic .decode()...
->         return o.encode(encoding=encoding)
->     
->     @typic.klass(serde=typic.flags(encoder=encode)
->     class Member:
->         name: str
->         instrument: Instrument
->         id: int = None
+>     def encode(o: Any, *, encoding: str = None) -> bytes:
+>         # Pretend we're using something other than a basic dumps().encode()...
+>         return ujson.dumps(o).encode(encoding=encoding)
 >     
->     m = Member(name="Ben", instrument="piano", id=1)
->     m.encode()
+>     m = Member(name="Ben", instrument=Instrument.PIAN, id=1)
+>     typic.encode(m, encoder=encode)
 >     #> b'{"name":"Ben","instrument":"piano","id":1}'
 >     ```
 
-## The Functional API
+#### `typic.iterate(...)`
+
+> !!! info ""
+>
+>     New in version 2.4
+>
+> If compatible, iterate over your data. If the object is a mapping or class, you have
+> the option to iterate over (field, value) pairs, or simply over the values themselves.
+>
+> ??? example "Iterate a Member instance's data"
+>
+>     ```python
+>     
+>     m = Member(name="Ben", instrument=Instrument.PIAN, id=1)
+>     
+>     print([*typic.iterate(m)])
+>     #> [('name', 'Ben'), ('instrument', <Instrument.PIAN: 'piano'>), ('id', 1)]
+>     
+>     print(dict(typic.iterate(m)))
+>     #> {'name': 'Ben', 'instrument': <Instrument.PIAN: 'piano'>, 'id': 1}
+>     
+>     print([*typic.iterate(m, values=True)])
+>     #> ['Ben', <Instrument.PIAN: 'piano'>, 1]
+>     ```
+
+
+## The Protocol API
+
+As promised, Typical provides a path for optimizing your interactions with the
+Functional API. This is done by calling the `typic.protocol` method. This method is a
+public alias for our type resolver's main entry-point. This means that the protocol
+provided by this method is guaranteed to work exactly as the methods on a class bound by
+the Object API. Additionally, all high-level functional calls are guaranteed to have the
+same result as calls to the bound protocol.
+
+### Using Protocols
+
+Binding a protocol gives us the best of both the Object and Functional
+APIs. We get the benefit of the Object API's optimistic caching and
+brevity alongside the flexibility of the Functional API for
+interacting with virtually any type or class directly.
+
+#### `typic.protocol(...)`
+
+> Get a Serialization/Deserialization Protocol for the given type or
+> annotation.
+>
+> ??? example "Bind a Protocol to Member"
+>
+>     ```python
+>     protocol = typic.protocol(Member)
+>     protocol.transmute(b'{"name":"Ben","instrument":"piano"}')
+>     #> Member(name='Ben', instrument=<Instrument.PIAN: 'piano'>, id=None)
+>     ```
+>
+> ??? example "Bind a Protocol to an Annotation"
+>
+>     ```python
+>     from typing import Mapping
+>     
+>     MemberMappingT = Mapping[str, Member]
+>     protocol = typic.protocol(MemberMappingT)
+>     
+>     mapping = protocol.transmute(b'{"vocalist":{"name":"Janis","instrument":"vocals"}}')
+>     
+>     print(mapping)
+>     #> {'vocalist': Member(name='Janis', instrument=<Instrument.VOCL: 'vocals'>, id=None)}
+>     
+>     protocol.tojson(mapping)
+>     #> '{"vocalist":{"name":"Janis","instrument":"vocals","id":null}}'
+>     
+>     protocol.validate({"vocalist": {"name": "Al", "instrument": "xylophone"}})
+>     #> Traceback (most recent call last):
+>     #>   ...
+>     #> typic.constraints.error.ConstraintValueError: Member.instrument: value <'xylophone'> fails constraints: (type=instrument, values=('guitar', 'bass', 'piano', 'drums', 'vocals'), nullable=False)
+>     ```
+>
+
+As shown in the example above, we can get a protocol for a class and
+use that protocol to transmute inputs into the bound type.
 
-The *Functional API* largely mirrors the
-[Object API](#the-object-api). It allows you to define your types and
-pass them into set of high-level methods for largely the same effect
-as binding directly to a class with `@typic.klass`.
+We can also run validation, get a JSON schema, translate instances of
+our class to another arbitrary class, get primitive representations of
+instances, and dump instances to JSON.
 
-!!! important
 
-    One of the benefits to the Object API is that the protocols
-    for  serialization, deserialization, and validation are generated 
-    at compile-time of the module and cached for later use. The 
-    Functional API has no compile-time optimization, so the protocols 
-    for your custom types will not be generated and cached until the 
-    first call. 
-    
-    There are, however, other runtime benefits to the Functional API 
-    which we'll discuss below.
-    
-    !!! note ""
-        
-        We provide a path for optimizing this initial performance hit
-        by manually binding a protocol via `typic.protocol(...)`. See
-        [SerDes](serdes.md) for more.
+## The Object API
 
-### Defining Your Data
+As touched on in [Basics](index.md), you can interact with the Object
+API in two ways: `@typic.al` and `@typic.klass`. What's the
+difference? Very little.
 
-Anything goes!
+`@typic.al` will wrap any class, but works best when combined with
+[dataclasses](https://docs.python.org/3/library/dataclasses.html).
+This is because of the declarative nature of defining fields and input
+which dataclasses provide. To whit...
 
-No, really, for the most part, any custom type definition is valid for
-the Functional API. The Functional API also knows to look out for
-types defined with the Object API, no additional cost is incurred for
-interacting with an object via either API, minus the cost of a few
-additional function calls.
+`@typic.klass` is a short-hand for the `@typic.al/@dataclass`
+combination, which also provides a *slightly* more powerful API. For
+brevity (the soul of wit), we'll be using `@typic.klass` for the
+examples in this section.
 
-Let's look at the models we defined in the Object API, but this time,
-only use the Functional API for interaction.
+### Defining your Objects
 
-!!! note
+!!! tip
 
-    While we're using dataclasses to define our data, we could also
-    use vanilla classes, `TypedDict`, or `NamedTuple`. All we need for 
-    proper introspection is valid type annotations.
+    If you're unfamiliar with dataclasses, it's best to take some time
+    now and review the official 
+    [documentation](https://docs.python.org/3/library/dataclasses.html) 
+    and [PEP 557](https://www.python.org/dev/peps/pep-0557/).
 
+As you've seen previously, defining your data is as simple as
+following the now-familiar pattern across many libraries:
 
 ```python
 from __future__ import annotations
 
 import enum
-import dataclasses
+import typic
 from typing import Iterable, Optional
 
 
@@ -382,9 +436,10 @@ class Instrument(str, enum.Enum):
     BASS = "bass"
     PIAN = "piano"
     DRUM = "drums"
+    VOCL = "vocals"
 
 
-@dataclasses.dataclass
+@typic.klass
 class Member:
     """A member in the band, man."""
 
@@ -393,7 +448,7 @@ class Member:
     id: Optional[int] = None
 
 
-@dataclasses.dataclass
+@typic.klass
 class Band:
     """It's the band, man."""
 
@@ -402,7 +457,7 @@ class Band:
     id: Optional[int] = None
 
 
-@dataclasses.dataclass
+@typic.klass
 class Song:
     """A sick tune - platinum fer sure."""
 
@@ -412,28 +467,48 @@ class Song:
     id: Optional[int] = None
 ```
 
-!!! info ""
+The `@typic.klass` decorator is built on top of the
+`@dataclass.dataclass` decorator, so any parameter which the
+`@dataclass.dataclass` decorator
+[accepts](https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass)
+is also accepted by `@typic.klass`, plus a few more:
 
-    The important thing to take away here is that there's *virtually
-    no difference in LOC or declaration* from the standard lib and the
-    `@typic.klass` declaration. This is a cornerstone of Typical's
-    design: Work with *with* standard libary, not against
-    (or parallel) to it.
+`strict: bool = False`
+> This enables "strict" validation of inputs. See
+> [validation](validation.md).
 
-### Interacting With Your Data
+`jsonschema: bool = True`
+> Generate a JSON Schema definition for your object.
 
-#### `typic.schema(...)`
+`serde: SerdeFlags = None`
+> Customize the serialization & deserialization of your object. See [SerDes](serdes.md).
 
-> A function which returns a JSON Schema definition of your class.
+`slots: bool = True`
+> Automatically generate a class with slots for the attributes defined by your
+> annotations.
+
+### Interacting With Your Objects
+
+As we've already demonstrated, Typical will guarantee the  data
+passed into your models is parsed and transformed into the data you
+defined.
+
+First, let's define the API. Below are the methods which Typical
+will bind to your object when it is wrapped with `@typic.al` or
+`@typic.klass`.
+
+
+#### `.schema()`
+
+> A classmethod which returns a JSON Schema definition of your class.
 >
-> If the class was not bound using the [Object API](#the-object-api)
-> or by calling `typic.protocol()`, the schema will be generated at
-> first call and then cached for later use.
+> This schema is computed and cached at compile-time so runtime calls
+> incur no additional compute time.
 >
 > ??? example "Rendering a Schema"
 >
 >     ```python
->     print(typic.schema(Member).tojson(indent=2))
+>     print(Member.schema().tojson(indent=2))
 >     #> {
 >     #>   "type": "object",
 >     #>   "title": "Member",
@@ -466,37 +541,26 @@ class Song:
 >     #> }
 >     ```
 
-#### `typic.transmute(...)`
+#### `.transmute(...)`
 
-> Convert incoming data into an type or Annotation.
+> Convert incoming data into your Model.
 >
-> Incoming data may be:
+> This supports:
 >
 > - Arbitrary classes (e.g., an ORM Model or other class)
 > - JSON strings/bytes
 > - Python literals
 >
-> The type may be any valid type annotation, standard Python type, or
-> custom user-defined class.
->
 > ??? example "Transmute Data to Member"
 >
 >     ```python
->     typic.transmute(Member, '{"name":"Ben","instrument":"piano"}')
+>     Member.transmute('{"name":"Ben","instrument":"piano"}')
 >     #> Member(name='Ben', instrument=<Instrument.PIAN: 'piano'>, id=None)
 >     ```
 
-#### `typic.translate(...)`
+#### `.translate(...)`
 
-> Convert an instance of any arbitrary class to another arbitrary class.
->
-> !!! note
->
->     This function is considerably less powerful than 
->     [transmute](#typictransmute). At a functional level, you're
->     encouraged to make use of that method rather than this. To 
->     understand *why* this function exists, take a look at its
->     definition in the [Object API](#translate).
+> Convert an instance of your model to another arbitrary class.
 >
 > ??? example "Translate Member"
 >
@@ -511,21 +575,32 @@ class Song:
 >             return f"<Member id={self.id} name={self.name} instrument={self.instrument}"
 >     
 >     
->     m = typic.transmute(Member, '{"name":"Robert","instrument":"guitar"}')
->     typic.translate(m, MemberORM)
+>     m = Member.transmute('{"name":"Robert","instrument":"guitar"}')
+>     m.translate(MemberORM)
 >     #> <Member id=None name=Robert instrument=guitar
 >     ```
+>
+> !!! note ""
+>
+>     It's possible to translate *to* another class, then transmute *back*. e.g.:  
+> 
+>     ``` python
+>     m = Member.transmute('{"name":"Robert","instrument":"guitar"}')
+>     orm = m.translate(MemberORM)
+>     ... ## (do stuff with orm, save it, etc.)
+>     Member.transmute(orm)
+>     #> Member(name='Robert', instrument=<Instrument.GUIT: 'guitar'>, id=1)
+>     ```
 
+#### `.validate(...)`
 
-#### `typic.validate(...)`
-
-> Validate some data against your an annotation or model.
+> Validate some data against your model.
 >
 > ??? example "Member Data Validation"
 >
 >     ```python
->
->     typic.validate(Member, {"name": "Paul", "instrument": "anything"})
+> 
+>     Member.validate({"name": "Paul", "instrument": "anything"})
 >     #> Traceback (most recent call last):
 >     #> 	...
 >     #> typic.constraints.error.ConstraintValueError: Member.instrument: value <'anything'> fails constraints: (type=instrument, values=('guitar', 'bass', 'piano', 'drums', 'vocals'), nullable=False)
@@ -533,12 +608,12 @@ class Song:
 >
 > !!! fail "Gotcha"
 >
->     Validators don't do any type conversion, so passing raw JSON into
->     the `typic.validate()` will fail. See [Validation](validation.md)
+>     Validators don't do any type resolution, so passing raw JSON into 
+>     the `.validate()` method will fail. See [Validation](validation.md)
 
-#### `typic.primitive(...)`
+#### `.primitive()`
 
-> Convert any instance into its "primitive" equivalent.
+> Convert your model instance into its "primitive" equivalent.
 >
 > This method effectively *downgrades* your model into a
 > JSON-serializable dict.
@@ -546,12 +621,12 @@ class Song:
 > ??? example "Member to Primitive"
 >
 >     ```python
->     m = typic.transmute(Member, '{"name":"Darren","instrument":"drums"}')
->     print(typic.primitive(m))
+>     m = Member.transmute('{"name":"Darren","instrument":"drums"}')
+>     print(m.primitive())
 >     #> {"name": "Darren", "instrument":"drums", "id": None}
 >     ```
 
-#### `typic.tojson(...)`
+#### `.tojson(...)`
 
 > Serialize your model instance to JSON
 >
@@ -566,8 +641,8 @@ class Song:
 > ??? example "Member to JSON"
 >
 >     ```python
->     m = typic.transmute(Member, '{"name":"Darren","instrument":"drums"}')
->     print(typic.tojson(m, indent=2))
+>     m = Member.transmute('{"name":"Darren","instrument":"drums"}')
+>     print(m.tojson(indent=2))
 >     #> {
 >     #>   "name": "Darren",
 >     #>   "instrument": "drums",
@@ -580,7 +655,7 @@ class Song:
 >     It's possible to customize your serialized representation. See
 >     [SerDes](serdes.md).
 
-#### `typic.decode(...)`
+#### `.decode(...)`
 
 > Decode on-the-wire data into your Model.
 >
@@ -597,111 +672,90 @@ class Song:
 >         # Pretend we're using something other than a basic .decode()...
 >         return o.decode(encoding=encoding)
 >     
+>     @typic.klass(serde=typic.flags(decoder=decode)
+>     class Member:
+>         name: str
+>         instrument: Instrument
+>         id: int = None
+>     
 >     input = '{"name":"Ben","instrument":"piano","id":1}'.encode("utf-8-sig")
->     typic.decode(Member, input, decoder=decode, encoding="utf-8-sig")
+>     Member.decode(input, encoding="utf-8-sig")
 >     #> Member(name='Ben', instrument=<Instrument.PIAN: 'piano'>, id=1)
 >     ```
 
-#### `typic.encode(...)`
+#### `.encode(...)`
 
 > Encode your Model to a custom wire-format.
 >
 > This is useful if you plan to use a wire-format such as Avro, protocol buffers, etc.
 >
-> To use custom encoders, pass in a callable which takes the primitive representation of
-> your Model as the first argument. All other keyword-arguments are passed on to the
-> encoder function.
+> To use custom encoders, pass in a callable which takes the Model instance as its first
+> argument. All other keyword-arguments are passed on to the encoder function.
 >
 > ??? example "Encode a Member to Binary Data"
 >
 >     ```python
->     import ujson
 >     
->     def encode(o: Any, *, encoding: str = None) -> bytes:
->         # Pretend we're using something other than a basic dumps().encode()...
->         return ujson.dumps(o).encode(encoding=encoding)
+>     def encode(o: bytes, *, encoding: str = None):
+>         # Pretend we're using something other than a basic .encode()...
+>         return o.encode(encoding=encoding)
 >     
->     m = Member(name="Ben", instrument=Instrument.PIAN, id=1)
->     typic.encode(m, encoder=encode)
+>     @typic.klass(serde=typic.flags(encoder=encode)
+>     class Member:
+>         name: str
+>         instrument: Instrument
+>         id: int = None
+>     
+>     m = Member(name="Ben", instrument="piano", id=1)
+>     m.encode()
 >     #> b'{"name":"Ben","instrument":"piano","id":1}'
 >     ```
 
+#### `.iterate(...)`
 
-## The Protocol API
-
-As promised, Typical provides a path for optimizing your
-interactions with the Functional API. This is done by calling the
-`typic.protocol` method. This method is a public alias for the our
-type resolver's main entry-point. This means that the protocol
-provided by this method is guaranteed to work exactly as the methods
-on a class bound by the Object API. Additionally, all high-level
-functional calls are guaranteed to have the same result as calls to
-the bound protocol.
-
-### Using Protocols
-
-Binding a protocol gives us the best of both the Object and Functional
-APIs. We get the benefit of the Object API's optimistic caching and
-brevity alongside the flexibility of the Functional API for
-interacting with virtually any type or class directly.
-
-#### `typic.protocol(...)`
-
-> Get a Serialization/Deserialization Protocol for the given type or
-> annotation.
+> !!! info ""
 >
-> ??? example "Bind a Protocol to Member"
+>     New in version 2.4
 >
->     ```python
->     protocol = typic.protocol(Member)
->     protocol.transmute(b'{"name":"Ben","instrument":"piano"}')
->     #> Member(name='Ben', instrument=<Instrument.PIAN: 'piano'>, id=None)
->     ```
+> If compatible, iterate over your model instance's data. This will default to yielding
+> (field, value) pairs. You can retrieve just values by passing `values=True`.
 >
-> ??? example "Bind a Protocol to an Annotation"
+> The default behavior is also attached as the `__iter__()` magic method for your
+> instance.
+>
+> ??? example "Iterate a Member instance's data"
 >
 >     ```python
->     from typing import Mapping
 >     
->     MemberMappingT = Mapping[str, Member]
->     protocol = typic.protocol(MemberMappingT)
+>     m = Member(name="Ben", instrument=Instrument.PIAN, id=1)
 >     
->     mapping = protocol.transmute(b'{"vocalist":{"name":"Janis","instrument":"vocals"}}')
+>     print([*m.iterate()])
+>     #> [('name', 'Ben'), ('instrument', <Instrument.PIAN: 'piano'>), ('id', 1)]
 >     
->     print(mapping)
->     #> {'vocalist': Member(name='Janis', instrument=<Instrument.VOCL: 'vocals'>, id=None)}
+>     print(dict(m.iterate()))
+>     #> {'name': 'Ben', 'instrument': <Instrument.PIAN: 'piano'>, 'id': 1}
 >     
->     protocol.tojson(mapping)
->     #> '{"vocalist":{"name":"Janis","instrument":"vocals","id":null}}'
+>     print(dict(m))
+>     #> {'name': 'Ben', 'instrument': <Instrument.PIAN: 'piano'>, 'id': 1}
 >     
->     protocol.validate({"vocalist": {"name": "Al", "instrument": "xylophone"}})
->     #> Traceback (most recent call last):
->     #>   ...
->     #> typic.constraints.error.ConstraintValueError: Member.instrument: value <'xylophone'> fails constraints: (type=instrument, values=('guitar', 'bass', 'piano', 'drums', 'vocals'), nullable=False)
+>     print([*m.iterate(values=True)])
+>     #> ['Ben', <Instrument.PIAN: 'piano'>, 1]
 >     ```
->
-
-As shown in the example above, we can get a protocol for a class and
-use that protocol to transmute inputs into the bound type.
 
-We can also run validation, get a JSON schema, translate instances of
-our class to another arbitrary class, get primitive representations of
-instances, and dump instances to JSON.
 
 ## Which API Should I Use?
-There's no one answer that will solve every single case. In general,
-you'll likely find yourself using a combination of all three.
-
-If, say, you decide you want to define your models exclusively with
-TypedDicts, then I'd recommend binding protocols for your models so
-that you get the runtime performance of the Object API. In this
-scenario, you get type-safety and the enhanced performance at runtime
-of using simple dictionaries.
-
-There are also cases where using the Functional API may be more
-concise then writing out yet another list comprehension. The opposite
-can be said for interacting directly with a single instance - the
-Object API may provide
+The Functional API is the least intrusive way to introduce Typical into your code-base.
+It also has the benefit of greater flexibility w.r.t. which types can actually be
+supported out-of-the-box.
+
+The Protocol API provides a slight runtime performance boost and the benefit of
+explicitly defining, customizing, and using your protocols, but also retains all the
+flexibility of the Functional API. In practice, this is probably the best choice for
+most situations.
+
+Finally, if you prefer the pattern of containing ser/des logic within the model
+definition itself, the Object API is there to fill that void.
+
 
 ## Wrap Up and Next Steps
 
diff --git a/docs/usage/serdes.md b/docs/usage/serdes.md
index 0b76be63..cfdc8334 100644
--- a/docs/usage/serdes.md
+++ b/docs/usage/serdes.md
@@ -54,36 +54,41 @@ The simplest method for customizing your protocol is via the Protocol API.
 ??? example "Customizing a dataclass Protocol"
 
     ```python
-    import typic
+    import dataclasses
     import json
-    
-    
+
+    import typic
+
+
     def encode(o):
-        return json.encode(o).encode("utf-8-sig")
+        return json.dumps(o).encode("utf-8-sig")
     
     
     def decode(o):
-        return o.decode("utf-8-sig")
+        return json.loads(o.decode("utf-8-sig"))
     
     
     @dataclasses.dataclass
     class Foo:
-       bar: str
-       exclude: str
+        bar: str
+        exclude: str = None
     
     
     foo = Foo("bar", "exc")
-    flags = typic.flags(fields={"bar": "Bar"}, decoder=decode, encoder=encode)
+    flags = typic.flags(fields={"bar": "Bar"}, exclude=("exclude",), decoder=decode, encoder=encode)
     proto = typic.protocol(Foo, flags=flags)
-
-    print(proto.primitive(foo)
+    
+    print(proto.primitive(foo))
     #> {'Bar': 'bar'}
     
     print(proto.tojson(foo))
     #> '{"Bar":"bar"}'
     
     print(proto.encode(foo))
-    #> b'\xef\xbb\xbf{"Bar":bar}'
+    #> b'\xef\xbb\xbf{"Bar": "bar"}'
+    
+    print(proto.decode(b'\xef\xbb\xbf{"Bar": "bar"}'))
+    #> Foo(bar='bar', exclude=None)
     ```
 
 You can also assign the `__serde_flags__` attribute on any class.
diff --git a/poetry.lock b/poetry.lock
index 4c4de888..6ace912b 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -203,6 +203,18 @@ mccabe = ">=0.6.0,<0.7.0"
 pycodestyle = ">=2.7.0,<2.8.0"
 pyflakes = ">=2.3.0,<2.4.0"
 
+[[package]]
+name = "future-typing"
+version = "0.4.1"
+description = "Use generic type hints and new union syntax `|` with python 3.6+"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+dev = ["pre-commit (2.12.1)"]
+test = ["black (21.5b1)", "flake8 (3.9.2)", "isort (5.8.0)", "mypy (0.812)", "pytest (6.2.4)", "pytest-cov (2.11.1)", "typing-extensions (3.10.0.0)"]
+
 [[package]]
 name = "ghp-import"
 version = "2.0.1"
@@ -905,7 +917,7 @@ tests = ["fastjsonschema", "ujson", "pydantic", "sqlalchemy", "pandas", "mypy",
 [metadata]
 lock-version = "1.1"
 python-versions = "^3.7"
-content-hash = "472d93a442de2b22589bca592f32ecbe1c29f72d24a44945971487b0978548b6"
+content-hash = "d2043c24ae4a1853f734d6c1e2bd0bca9f07f13976ccf84bc2dc9af3d52fc5bb"
 
 [metadata.files]
 appdirs = [
@@ -1029,6 +1041,10 @@ flake8 = [
     {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"},
     {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"},
 ]
+future-typing = [
+    {file = "future_typing-0.4.1-py3-none-any.whl", hash = "sha256:af19e06b7fe6fdfb8d83c265a2688cba9ac74b0a6a2dac14c268910ecd14ac8d"},
+    {file = "future_typing-0.4.1.tar.gz", hash = "sha256:65fdc5034a95db212790fee5e977fb0a2df8deb60dccf3bac17d6d2b1a9bbacd"},
+]
 ghp-import = [
     {file = "ghp-import-2.0.1.tar.gz", hash = "sha256:753de2eace6e0f7d4edfb3cce5e3c3b98cd52aadb80163303d1d036bda7b4483"},
 ]
diff --git a/pyproject.toml b/pyproject.toml
index 6623fa9b..9f416d51 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -54,6 +54,7 @@ mkdocs = {version = "^1.1", optional = true}
 mkdocs-material = {version = "^5.5", optional = true}
 mkdocs-awesome-pages-plugin = {version = "^2.2.1", optional = true}
 pymdown-extensions = {version = "^7.0", optional = true}
+future-typing = "^0.4.1"
 
 [tool.poetry.dev-dependencies]
 pytest = "^6.2"
diff --git a/requirements.txt b/requirements.txt
index e98182a5..4c77b6c6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -101,6 +101,9 @@ filelock==3.0.12 \
 flake8==3.9.2 \
     --hash=sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907 \
     --hash=sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b
+future-typing==0.4.1 \
+    --hash=sha256:af19e06b7fe6fdfb8d83c265a2688cba9ac74b0a6a2dac14c268910ecd14ac8d \
+    --hash=sha256:65fdc5034a95db212790fee5e977fb0a2df8deb60dccf3bac17d6d2b1a9bbacd
 ghp-import==2.0.1 \
     --hash=sha256:753de2eace6e0f7d4edfb3cce5e3c3b98cd52aadb80163303d1d036bda7b4483
 greenlet==1.1.0; python_version >= "3" \
diff --git a/typic/api.py b/typic/api.py
index e6747e5c..8c77afc0 100644
--- a/typic/api.py
+++ b/typic/api.py
@@ -3,7 +3,6 @@
 import dataclasses
 import functools
 import inspect
-from operator import attrgetter
 from types import FunctionType, MethodType
 from typing import (
     Union,
@@ -34,6 +33,7 @@
     SerdeProtocolsT,
     DeserializerT,
     TranslatorT,
+    FieldIteratorT,
 )
 from typic.common import (
     ORIG_SETTER_NAME,
@@ -136,12 +136,14 @@ class TypicObjectT:
     __serde_protocols__: SerdeProtocolsT
     __setattr_original__: Callable[["WrappedObjectT", str, Any], None]
     __typic_resolved__: bool
+    __iter__: FieldIteratorT
     schema: SchemaGenT
     primitive: SerializerT
     transmute: DeserializerT
     translate: TranslatorT
     validate: "c.ValidatorT"
     tojson: Callable[..., str]
+    iterate: FieldIteratorT
 
 
 WrappedObjectT = Union[TypicObjectT, ObjectT]
@@ -179,15 +181,6 @@ def func_wrapper(*args, **kwargs) -> _T:
     return func_wrapper
 
 
-_sentinel = object()
-_origsettergetter: Callable[[Any], Callable[[str, Any], None]] = attrgetter(
-    ORIG_SETTER_NAME
-)
-_typic_attrs = frozenset(
-    (SERDE_ATTR, "primitive", "tojson", "transmute", "validate", "translate")
-)
-
-
 def _bind_proto(cls, proto: SerdeProtocol):
     for n, attr in (
         (SERDE_ATTR, proto),
@@ -198,6 +191,8 @@ def _bind_proto(cls, proto: SerdeProtocol):
         ("translate", proto.translate),
         ("encode", proto.encode),
         ("decode", staticmethod(proto.decode)),
+        ("iterate", proto.iterate),
+        ("__iter__", proto.iterate),
     ):
         setattr(cls, n, attr)
 
diff --git a/typic/checks.py b/typic/checks.py
index 42b3f066..3bdd6e7f 100644
--- a/typic/checks.py
+++ b/typic/checks.py
@@ -19,6 +19,7 @@
     Tuple,
     TypeVar,
     Iterable,
+    Iterator,
 )
 
 import typic
@@ -437,6 +438,12 @@ def isiterabletype(obj: Type[ObjectT]) -> bool:
     return _issubclass(obj, Iterable)
 
 
+@lru_cache(maxsize=None)
+def isiteratortype(obj: Type[ObjectT]) -> bool:
+    obj = util.origin(obj)
+    return _issubclass(obj, Iterator)
+
+
 @lru_cache(maxsize=None)
 def istupletype(obj: Type[ObjectT]) -> bool:
     obj = util.origin(obj)
diff --git a/typic/constraints/factory.py b/typic/constraints/factory.py
index bdb82147..d49f6b28 100644
--- a/typic/constraints/factory.py
+++ b/typic/constraints/factory.py
@@ -394,7 +394,14 @@ def get_constraints(
     if isnamedtuple(t) or istypeddict(t):
         handler = _from_class
     else:
-        handler = _CONSTRAINT_BUILDER_HANDLERS.get_by_parent(origin(t), _from_class)  # type: ignore
+        ot = origin(t)
+        if ot is type:
+            handler = _from_strict_type
+            t = ot
+        else:
+            handler = _CONSTRAINT_BUILDER_HANDLERS.get_by_parent(  # type: ignore
+                origin(t), _from_class
+            )
 
     __stack.add(t)
     c = handler(t, nullable=nullable, name=name, cls=cls)  # type: ignore
diff --git a/typic/ext/json.py b/typic/ext/json.py
index db4e90a7..8b0620a8 100644
--- a/typic/ext/json.py
+++ b/typic/ext/json.py
@@ -2,7 +2,6 @@
 
 dumps: Callable[..., AnyStr]
 loads: Callable[..., Any]
-NATIVE_JSON = False
 
 
 try:
@@ -12,12 +11,7 @@
     loads = ujson.loads
 
 except (ImportError, ModuleNotFoundError):  # pragma: nocover
-    NATIVE_JSON = True
     import json
 
     dumps = json.dumps  # type: ignore
     loads = json.loads
-
-
-def using_stdlib() -> bool:
-    return NATIVE_JSON
diff --git a/typic/ext/schema/field.py b/typic/ext/schema/field.py
index a4d1ba7c..c518d684 100644
--- a/typic/ext/schema/field.py
+++ b/typic/ext/schema/field.py
@@ -80,7 +80,7 @@ def primitive(self, *, lazy: bool = False, name: ReprT = None) -> Mapping[str, A
 
     def tojson(self, *, indent: int = 0, ensure_ascii: bool = False, **kwargs) -> str:
         return dumps(
-            self.primitive(lazy=True),
+            self.primitive(),
             indent=indent,
             ensure_ascii=ensure_ascii,
             **kwargs,
diff --git a/typic/serde/common.py b/typic/serde/common.py
index 3974685c..2e5c636c 100644
--- a/typic/serde/common.py
+++ b/typic/serde/common.py
@@ -28,7 +28,7 @@
 from typic import strict as st, util, constraints as const
 from typic.checks import isclassvartype
 from typic.common import AnyOrTypeT, Case, EMPTY, ObjectT
-from typic.compat import TypedDict, ForwardRef, evaluate_forwardref
+from typic.compat import TypedDict, ForwardRef, evaluate_forwardref, Protocol
 from typic.types import freeze
 
 if TYPE_CHECKING:  # pragma: nocover
@@ -47,7 +47,6 @@
 """The signature of an on-the-wire decoder for an input."""
 TranslatorT = Callable[..., Any]
 """The signature of a type translator."""
-FieldIteratorT = Callable[[Any], Iterator[Union[Tuple[str, Any], Any]]]
 FieldSerializersT = Mapping[str, SerializerT]
 """A mapping of field names to their serializer functions."""
 FieldDeserializersT = Mapping[str, DeserializerT]
@@ -69,6 +68,18 @@
 """
 
 
+class FieldIteratorT(Protocol):
+    """The type-signature for a FieldIterator function."""
+
+    __name__: str
+    __qualname__: str
+
+    def __call__(
+        self, o: ObjectT, *, values: bool = False, **kwargs
+    ) -> Iterator[Union[Tuple[str, Any], Any]]:
+        ...
+
+
 @util.slotted(dict=False)
 @dataclasses.dataclass(unsafe_hash=True)
 class SerdeFlags:
@@ -377,8 +388,10 @@ class SerdeProtocol(Generic[_T]):
     """Validate an input against the annotation."""
     translate: TranslatorT = dataclasses.field(repr=False)
     """Translate an instance of the annotation into another type."""
-    tojson: Callable[..., AnyStr]
+    tojson: Callable[..., AnyStr] = dataclasses.field(repr=False)
     """Dump an instance of the annotation to valid JSON."""
+    iterate: FieldIteratorT = dataclasses.field(repr=False)
+    """Iterate over an instance of the annotation, if possible."""
     transmute: DeserializerT = dataclasses.field(repr=False, init=False)
     """Transmute an input into the annotation."""
     primitive: SerializerT = dataclasses.field(repr=False, init=False)
diff --git a/typic/serde/resolver.py b/typic/serde/resolver.py
index 366a536e..38f54382 100644
--- a/typic/serde/resolver.py
+++ b/typic/serde/resolver.py
@@ -48,6 +48,7 @@
     DeserializerT,
     EncoderT,
     DecoderT,
+    FieldIteratorT,
 )
 from .des import DesFactory
 from .ser import SerFactory
@@ -556,7 +557,7 @@ def tojson(
             **kwargs,
         ) -> str:
             return __dumps(
-                __prim(val, lazy=True),
+                __prim(val),
                 indent=indent,
                 ensure_ascii=ensure_ascii,
                 **kwargs,
@@ -608,6 +609,18 @@ def translate(
         translate.__qualname__ = f"{SerdeProtocol.__name__}.{translate.__name__}"
         translate.__module__ = SerdeProtocol.__module__
 
+        # Create the iterator, if possible.
+        try:
+            iterator = self._iterator_from_annotation(annotation)
+        except TypeError as e:
+            msg = str(e)
+
+            def iterator(o: ObjectT, *, values: bool = False):  # type: ignore
+                raise TypeError(msg)
+
+        iterator.__qualname__ = f"{SerdeProtocol.__name__}.{iterator.__name__}"
+        iterator.__module__ = SerdeProtocol.__module__
+
         return SerdeProtocol(
             annotation=annotation,
             constraints=constraints,
@@ -618,8 +631,24 @@ def translate(
             validate=validate,
             translate=translate,  # type: ignore
             tojson=tojson,  # type: ignore
+            iterate=iterator,
         )
 
+    def _iterator_from_annotation(self, annotation: Annotation) -> FieldIteratorT:
+        fiterator = self.translator.iterator(annotation.resolved_origin, relaxed=True)
+        viterator = self.translator.iterator(
+            annotation.resolved_origin, values=True, relaxed=True
+        )
+
+        def iterator(
+            o: ObjectT, *, values: bool = False, __fields=fiterator, __values=viterator
+        ) -> Iterator[Union[Tuple[str, Any], Any]]:
+            if values:
+                return __values(o)
+            return __fields(o)
+
+        return cast(FieldIteratorT, iterator)
+
     @lru_cache(maxsize=None)
     def resolve(
         self,
diff --git a/typic/serde/ser.py b/typic/serde/ser.py
index c1ab2ec2..6609fcd7 100644
--- a/typic/serde/ser.py
+++ b/typic/serde/ser.py
@@ -26,18 +26,13 @@
     ClassVar,
     cast,
     TYPE_CHECKING,
-    TypeVar,
     Iterable,
     MutableMapping,
-    ItemsView,
-    KeysView,
-    ValuesView,
     Dict,
     Optional,
 )
 
 from typic import util, checks, gen, types
-from typic.ext import json
 from typic.common import DEFAULT_ENCODING
 from typic.compat import Literal
 from .common import (
@@ -45,10 +40,6 @@
     SerdeConfig,
     Annotation,
     ForwardDelayedAnnotation,
-    Unprocessed,
-    Omit,
-    KT,
-    VT,
     DelayedAnnotation,
     AnnotationT,
 )
@@ -58,267 +49,10 @@
     from .resolver import Resolver
 
 
-_T = TypeVar("_T")
-
-
-def make_class_serdict(annotation: Annotation, fields: Mapping[str, SerializerT]):
-    name = f"{util.get_name(annotation.resolved_origin)}SerDict"
-    bases = (ClassFieldSerDict,)
-    getters = annotation.serde.fields_getters
-    omit = (*annotation.serde.omit_values,)
-    if annotation.serde.fields_out:
-        fout = annotation.serde.fields_out
-        getters = {y: getters[x] for x, y in fout.items()}
-        fields = {y: fields[x] for x, y in fout.items()}
-
-    def getitem(self, key):
-        v = dict.__getitem__(self, key)
-        return self.__missing__(key) if v is Unprocessed else v
-
-    if omit:
-
-        def missing(
-            self,
-            item,
-            *,
-            __fields=fields,
-            __getters=getters,
-            __repr=util.joinedrepr,
-            __omit=omit,
-        ):
-            raw = __getters[item](self.instance)
-            if raw not in __omit:
-                self[item] = ret = __fields[item](
-                    raw, lazy=self.lazy, name=__repr(self._name, item)
-                )
-                return ret
-            return Omit
-
-        def iter(self, *, __fields=fields.keys(), Omit=Omit):
-            for k in fields:
-                v = self.__missing__(k)
-                if v is Omit:
-                    continue
-                yield k
-
-    else:
-
-        def missing(  # type: ignore
-            self,
-            item,
-            *,
-            __fields=fields,
-            __getters=getters,
-            __repr=util.joinedrepr,
-        ):
-            self[item] = ret = __fields[item](
-                __getters[item](self.instance),
-                lazy=self.lazy,
-                name=__repr(self._name, item),
-            )
-            return ret
-
-        def iter(self, *, __fields=fields.keys()):  # type: ignore
-            for k in __fields:
-                self.__missing__(k)
-                yield k
-
-    stdlib = json.using_stdlib()
-    ns = dict(
-        lazy=False,
-        getters=getters,
-        fields=fields,
-        omit=(*annotation.serde.omit_values,),
-        type=annotation.resolved_origin,
-        __missing__=missing,
-        __iter__=iter,
-        stdlib=stdlib,
-    )
-    if stdlib:
-        ns["__getitem__"] = getitem
-    return type(name, bases, ns)
-
-
 class SerializationValueError(ValueError):
     ...
 
 
-class ClassFieldSerDict(dict):
-    type: Type
-    instance: Any
-    lazy: bool
-    getters: Mapping[str, Callable[[str], Any]]
-    fields: Mapping[str, SerializerT]
-    omit: Iterable[Any]
-    stdlib: bool
-
-    __slots__ = ("instance", "lazy", "_name")
-
-    def __init__(
-        self,
-        instance: Any,
-        lazy: bool = False,
-        *,
-        __tfname__: util.ReprT = None,
-    ):
-        self._name = __tfname__
-        self.instance = instance
-        self.lazy = lazy
-        if self.stdlib:
-            dict.__init__(self, dict.fromkeys(self.fields, Unprocessed))
-
-    def __hash__(self):
-        return self.instance.__hash__()
-
-    def items(self) -> ItemsView[KT, VT]:  # pragma: nocover
-        return ItemsView(self)  # type: ignore
-
-    def keys(self) -> KeysView[KT]:  # pragma: nocover
-        return KeysView(self)  # type: ignore
-
-    def values(self) -> ValuesView[VT]:  # pragma: nocover
-        return ValuesView(self)  # type: ignore
-
-
-def make_kv_serdict(annotation: Annotation, kser: SerializerT, vser: SerializerT):
-    name = f"{util.get_name(annotation.resolved_origin)}KVSerDict"
-    bases = (KVSerDict,)
-    omit = (*annotation.serde.omit_values,)
-
-    def getitem(self, key):
-        v = dict.__getitem__(self, key)
-        return self.__missing__(key) if v is Unprocessed else v
-
-    if omit:
-
-        def missing(self, key, *, __repr=util.collectionrepr, __vser=vser, __omit=omit):
-            if key in self._unprocessed:
-                value = self._unprocessed[key]
-                if value in __omit:
-                    return Omit
-                newv = __vser(  # type: ignore
-                    value,
-                    lazy=self.lazy,
-                    name=__repr(self._name, key),
-                )
-                self[key] = newv
-                return newv
-            raise KeyError(f"{__repr(self._name, key)!r}")
-
-        def iter(self, *, Omit=Omit, __kser=kser):  # type: ignore
-            for k in self._unprocessed:
-                if self[k] is Omit:
-                    continue
-                yield k
-
-    else:
-
-        def missing(self, key, *, __repr=util.collectionrepr, __vser=vser):  # type: ignore
-            if key in self._unprocessed:
-                newv = vser(  # type: ignore
-                    self._unprocessed[key],
-                    lazy=self.lazy,
-                    name=__repr(self._name, key),
-                )
-                self[key] = newv
-                return newv
-            raise KeyError(f"{__repr(self._name, key)!r}")
-
-        def iter(self, *, __kser=kser):  # type: ignore
-            for k in self._unprocessed:
-                self[k]
-                yield k
-
-    stdlib = json.using_stdlib()
-    ns = dict(
-        type=annotation.generic,
-        lazy=False,
-        kser=staticmethod(kser),
-        vser=staticmethod(vser),
-        omit=omit,
-        __missing__=missing,
-        __iter__=iter,
-        stdlib=stdlib,
-    )
-    if stdlib:
-        ns["__getitem__"] = getitem
-    return type(name, bases, ns)
-
-
-class KVSerDict(dict):
-    kser: SerializerT
-    vser: SerializerT
-    lazy: bool
-    omit: Iterable[Any]
-    stdlib: bool
-
-    __slots__ = ("_unprocessed", "_name")
-
-    def __init__(self, mapping: Mapping, *, lazy: bool = False, __tfname__: util.ReprT):
-        kser = self.kser
-        self._name = __tfname__
-        self._unprocessed = {kser(k): v for k, v in mapping.items()}  # type: ignore
-        self.lazy = lazy
-        if self.stdlib:
-            dict.__init__(self, dict.fromkeys(self._unprocessed, Unprocessed))
-
-    def items(self) -> ItemsView[KT, VT]:  # pragma: nocover
-        return ItemsView(self)  # type: ignore
-
-    def keys(self) -> KeysView[KT]:
-        return KeysView(self)  # type: ignore
-
-    def values(self) -> ValuesView[VT]:  # pragma: nocover
-        return ValuesView(self)  # type: ignore
-
-
-def make_serlist(annotation: Annotation, serializer: SerializerT):
-    name = f"{util.get_name(annotation.resolved_origin)}SerList"
-    bases = (SerList,)
-    ns = dict(
-        lazy=False,
-        serializer=staticmethod(serializer),
-        omit=(*annotation.serde.omit_values,),
-    )
-    return type(name, bases, ns)
-
-
-class SerList(list):
-    serializer: SerializerT
-    omit: Iterable[Any]
-    lazy: bool
-
-    __slots__ = ("repr", "_name")
-
-    def __init__(self, seq=(), *, __tfname__: util.ReprT, lazy: bool = False):
-        self.repr = util.collectionrepr
-        self.lazy = lazy
-        self._name = __tfname__
-        ser = self.serializer
-        list.__init__(
-            self,
-            (
-                ser(x, lazy=lazy, name=self.repr(self._name, i))  # type: ignore
-                for i, x in enumerate(seq)
-            ),
-        )
-
-    def __setitem__(self, key, value):  # pragma: nocover
-        super().__setitem__(
-            key,
-            self.serializer(value, lazy=self.lazy, name=self.repr(self._name, key)),
-        )
-
-    def append(self, object: _T) -> None:  # pragma: nocover
-        super().append(
-            self.serializer(  # type: ignore
-                object,
-                lazy=self.lazy,
-                name=self.repr(self._name, len(self)),
-            )
-        )
-
-
 _decode = methodcaller("decode", DEFAULT_ENCODING)
 _pattern = attrgetter("pattern")
 
@@ -422,69 +156,20 @@ def _build_list_serializer(
         # Check for value types
         line = "[*o]"
         ns: Dict[str, Any] = {}
+        self._check_add_null_check(func, annotation)
+        self._add_type_check(func, annotation)
         if annotation.args:
             arg_a: "AnnotationT" = self.resolver.annotation(
                 annotation.args[0], flags=annotation.serde.flags
             )
             arg_ser = self.factory(arg_a)
             arg_ser_name = "arg_ser"
+            ns[arg_ser_name] = arg_ser
+            func.l(f"gen = ({arg_ser_name}(v) for v in o)")
+            line = "gen if lazy else [*gen]"
 
-            serlist = make_serlist(annotation, arg_ser)
-            serlist_name = serlist.__name__
-
-            ns = {serlist_name: serlist, arg_ser_name: arg_ser}
-            line = f"{serlist_name}(o, lazy=lazy, __tfname__={self._FNAME})"
-
-        self._check_add_null_check(func, annotation)
-        self._add_type_check(func, annotation)
         func.l(f"{gen.Keyword.RET} {line}", level=None, **ns)
 
-    def _build_key_serializer(
-        self, name: str, kser: SerializerT, annotation: Annotation
-    ) -> SerializerT:
-        kser_name = util.get_name(kser)
-        # Build the namespace
-        ns: Dict[str, Any] = {
-            kser_name: kser,
-        }
-        kvar = "k_"
-        with gen.Block(ns) as main:
-            with main.f(
-                name, main.param(kvar), main.param("lazy", default=False)
-            ) as kf:
-                k = f"{kser_name}({kvar})"
-                # If there are args & field mapping, get the correct field name
-                # AND serialize the key.
-                if annotation.serde.fields_out:
-                    ns["fields_out"] = annotation.serde.fields_out
-                    k = f"{kser_name}(fields_out.get({kvar}, {kvar}))"
-                # If there are only serializers, get the serialized value
-                if annotation.serde.flags.case:
-                    ns.update(case=annotation.serde.flags.case.transformer)
-                    k = f"case({k})"
-                kf.l(f"{gen.Keyword.RET} {k}")
-        return main.compile(name=name, ns=ns)
-
-    def _finalize_mapping_serializer(
-        self,
-        func: gen.Function,
-        serdict: Type,
-        annotation: Annotation,
-    ):
-        serdict_name = serdict.__name__
-        self._check_add_null_check(func, annotation)
-        self._add_type_check(func, annotation)
-
-        ns: Dict[str, Any] = {serdict_name: serdict}
-        func.l(
-            f"d = {serdict_name}(o, lazy=lazy, __tfname__={self._FNAME})",
-            level=None,
-            **ns,
-        )
-        # Write the line.
-        line = "d if lazy else {**d}"
-        func.l(f"{gen.Keyword.RET} {line}")
-
     def _build_dict_serializer(self, func: gen.Function, annotation: Annotation):
         # Check for args
         kser_: SerializerT
@@ -500,12 +185,29 @@ def _build_dict_serializer(self, func: gen.Function, annotation: Annotation):
                 vt, flags=annotation.serde.flags
             )
             kser_, vser_ = (self.factory(ktr), self.factory(vtr))
-        kser_ = self._build_key_serializer(f"{func.name}_kser", kser_, annotation)
-        # Get the names for our important variables
-
-        serdict = make_kv_serdict(annotation, kser_, vser_)
-
-        self._finalize_mapping_serializer(func, serdict, annotation)
+        # Add sanity checks.
+        self._check_add_null_check(func, annotation)
+        self._add_type_check(func, annotation)
+        ns: Dict[str, Any] = {
+            "kser": kser_,
+            "vser": vser_,
+        }
+        ksercall = "kser(k)"
+        if annotation.serde.fields_out:
+            ns["fields_out"] = annotation.serde.fields_out
+            ksercall = "kser(fields_out.get(k, k))"
+        if annotation.serde.flags.case:
+            ns["case"] = annotation.serde.flags.case.transformer
+            ksercall = f"case({ksercall})"
+        gencall = f"({ksercall}, vser(v)) for k, v in o.items()"
+        if annotation.serde.flags.omit:
+            ns["omit"] = annotation.serde.flags.omit
+            gencall = f"{gencall} if v not in omit"
+        func.l(
+            f"gen = ({gencall})",
+            **ns,
+        )
+        func.l(f"{gen.Keyword.RET} gen if lazy else {{k: v for k, v in gen}}")
 
     def _build_class_serializer(
         self,
@@ -514,10 +216,30 @@ def _build_class_serializer(
     ):
         # Get the field serializers
         fields_ser = {x: self.factory(y) for x, y in annotation.serde.fields.items()}
-
-        serdict = make_class_serdict(annotation, fields_ser)
-
-        self._finalize_mapping_serializer(func, serdict, annotation)
+        iterator = self.resolver.translator.iterator(annotation.resolved, relaxed=True)
+        self._check_add_null_check(func, annotation)
+        self._add_type_check(func, annotation)
+        ns: Dict[str, Any] = {
+            "fields_ser": fields_ser,
+            "fields_out": annotation.serde.fields_out.keys(),
+            "iterator": iterator,
+        }
+        # Determine how to dump the field.
+        f = "f"
+        # Get the mapping of attr->out
+        # If we have transforms, make sure we use them on dump.
+        transforms = {f: t for f, t in annotation.serde.fields_out.items() if f != t}
+        if transforms:
+            ns["transforms"] = transforms
+            f = "transforms.get(f, f)"
+        # Define the generator expression.
+        gencall = f"({f}, fields_ser[f](v)) for f, v in iterator(o) if f in fields_out"
+        if annotation.serde.flags.omit:
+            ns["omit"] = annotation.serde.flags.omit
+            gencall = f"{gencall} and v not in omit"
+
+        func.l(f"gen = ({gencall})", **ns)
+        func.l(f"{gen.Keyword.RET} gen if lazy else {{f: v for f, v in gen}}")
 
     def _compile_enum_serializer(self, annotation: Annotation) -> SerializerT:
         origin: Type[enum.Enum] = cast(Type[enum.Enum], annotation.resolved_origin)
diff --git a/typic/serde/translator.py b/typic/serde/translator.py
index ba72007a..0d214d8d 100644
--- a/typic/serde/translator.py
+++ b/typic/serde/translator.py
@@ -11,9 +11,18 @@
     Set,
     Dict,
     Any,
+    Callable,
+    Iterator,
+    Union,
 )
 
-from typic.checks import ismappingtype, isiterabletype, isliteral
+from typic.checks import (
+    ismappingtype,
+    isiterabletype,
+    isliteral,
+    isnamedtuple,
+    isiteratortype,
+)
 from typic.compat import lru_cache
 from typic.gen import Block, Keyword, ParameterKind
 from typic.util import (
@@ -22,10 +31,11 @@
     safe_get_params,
     get_unique_name,
     get_defname,
+    get_name,
 )
 
 if TYPE_CHECKING:
-    from .common import Annotation, TranslatorT, SerdeProtocol, FieldIteratorT
+    from .common import Annotation, TranslatorT, SerdeProtocol
     from .resolver import Resolver
 
 
@@ -128,36 +138,41 @@ def get_fields(
         return None if undefined else params
 
     @lru_cache(maxsize=None)
-    def iterator(self, type: Type, values: bool = False) -> FieldIteratorT:
+    def iterator(
+        self, type: Type, values: bool = False, relaxed: bool = False
+    ) -> IteratorT:
         """Get an iterator function for a given type, if possible."""
 
         if ismappingtype(type):
             iter = _valuescaller if values else _itemscaller
             return iter
 
-        if isiterabletype(type):
+        if isiterabletype(type) and not isnamedtuple(type):
             return _iter
 
         fields = self.get_fields(type, as_source=True) or {}
 
-        if fields:
-            func_name = get_defname("iterator", (type, values))
-            oname = "o"
-            ctx: dict = {}
-            with Block(ctx) as main:
-                with main.f(func_name, Block.p(oname)) as func:
+        if not fields and not relaxed:
+            raise TranslatorTypeError(
+                f"Cannot get iterator for type {type!r}, unable to determine fields."
+            ) from None
+
+        func_name = get_defname("iterator", (type, values))
+        oname = "o"
+        ctx: dict = {}
+        with Block(ctx) as main:
+            with main.f(func_name, Block.p(oname)) as func:
+                if fields:
                     if values:
                         for f in fields:
                             func.l(f"{Keyword.YLD} {oname}.{f}")
                     else:
                         for f in fields:
                             func.l(f"{Keyword.YLD} {f!r}, {oname}.{f}")
+                else:
+                    func.l(f"{Keyword.YLD}")
 
-            return main.compile(name=func_name, ns=ctx)
-
-        raise TranslatorTypeError(
-            f"Cannot get iterator for type {type!r}, unable to determine fields."
-        ) from None
+        return main.compile(name=func_name, ns=ctx)
 
     @staticmethod
     def _get_name(source: Type, target: Type) -> str:
@@ -181,6 +196,21 @@ def _iter_field_assigns(
                 fset = f"{f}={fset}"
             yield fset
 
+    def _compile_iterable_translator(self, source: Type, target: Type) -> TranslatorT:
+        func_name = self._get_name(source, target)
+        target_name = get_name(target)
+        oname = "o"
+        ismapping = ismappingtype(target)
+        iterator = self.iterator(source, not ismapping)
+        ctx = {"iterator": iterator, target_name: target}
+        with Block(ctx) as main:
+            with main.f(func_name, Block.p(oname)) as func:
+                retval = f"iterator({oname})"
+                if not isiteratortype(target):
+                    retval = f"{target_name}({retval})"
+                func.l(f"{Keyword.RET} {retval}")
+        return main.compile(name=func_name)
+
     @lru_cache(maxsize=None)
     def _compile_translator(self, source: Type, target: Type) -> TranslatorT:
         if isliteral(target):
@@ -194,6 +224,8 @@ def _compile_translator(self, source: Type, target: Type) -> TranslatorT:
         # Get the target fields for translation.
         target_fields = self.get_fields(target)
         if target_fields is None:
+            if isiterabletype(target):
+                return self._compile_iterable_translator(source, target)
             raise TranslatorTypeError(
                 f"Cannot translate to type {target!r}. "
                 f"Unable to determine target fields."
@@ -231,3 +263,6 @@ def _compile_translator(self, source: Type, target: Type) -> TranslatorT:
     def factory(self, annotation: "Annotation", target: Type) -> TranslatorT:
         """Generate a translator for :py:class:`typic.Annotation` -> ``type``."""
         return self._compile_translator(annotation.resolved, target)
+
+
+IteratorT = Union[Callable[[Any], Iterator[Any]], Callable[[Any], Tuple[str, Any]]]
diff --git a/typic/util.py b/typic/util.py
index d4cf3ab7..fb130fc3 100644
--- a/typic/util.py
+++ b/typic/util.py
@@ -12,6 +12,7 @@
 from datetime import date, datetime, timedelta, time
 from threading import RLock
 from types import MappingProxyType, MemberDescriptorType
+import typing
 from typing import (  # type: ignore  # ironic...
     Tuple,
     Any,
@@ -35,6 +36,7 @@
 )
 
 import pendulum
+from future_typing import transform_annotation
 
 import typic.checks as checks
 from typic.compat import ForwardRef, lru_cache, SpecialForm
@@ -429,7 +431,7 @@ def signature(obj: Union[Callable, Type]) -> inspect.Signature:
 
 def _safe_get_type_hints(annotation: Union[Type, Callable]) -> Dict[str, Type[Any]]:
     raw_annotations: Dict[str, Any] = {}
-    base_globals: Dict[str, Any] = {}
+    base_globals: Dict[str, Any] = {"typing": typing}
     if isinstance(annotation, type):
         for base in reversed(annotation.__mro__):
             base_globals.update(sys.modules[base.__module__].__dict__)
@@ -438,10 +440,11 @@ def _safe_get_type_hints(annotation: Union[Type, Callable]) -> Dict[str, Type[An
         raw_annotations = getattr(annotation, "__annotations__", None) or {}
         module_name = getattr(annotation, "__module__", None)
         if module_name:
-            base_globals = sys.modules[module_name].__dict__
+            base_globals.update(sys.modules[module_name].__dict__)
     annotations = {}
     for name, value in raw_annotations.items():
         if isinstance(value, str):
+            value = transform_annotation(value)
             if sys.version_info >= (3, 7):
                 value = ForwardRef(value, is_argument=False)
             else:
@@ -458,7 +461,7 @@ def _safe_get_type_hints(annotation: Union[Type, Callable]) -> Dict[str, Type[An
 def get_type_hints(obj: Union[Type, Callable]) -> Dict[str, Type[Any]]:
     try:
         return _get_type_hints(obj)
-    except NameError:
+    except (NameError, TypeError):
         return _safe_get_type_hints(obj)
 
 


Test patch:
diff --git a/tests/objects.py b/tests/objects.py
index 4e68e1d7..d391f684 100644
--- a/tests/objects.py
+++ b/tests/objects.py
@@ -430,6 +430,26 @@ class MutableClassVar:
     f: typing.ClassVar[typing.List[str]] = []
 
 
+@dataclasses.dataclass
+class Pep585:
+    data: dict[str, int]
+
+
+@dataclasses.dataclass
+class Pep604:
+    union: DFoo | DBar
+
+
+@typic.al
+def pep585(data: dict[str, int]) -> dict[str, int]:
+    return data
+
+
+@typic.al
+def pep604(union: DFoo | DBar) -> DFoo | DBar:
+    return union
+
+
 TYPIC_OBJECTS = [
     Typic,
     Inherited,
diff --git a/tests/test_serdes.py b/tests/test_serdes.py
index 8b354c44..078e5c00 100644
--- a/tests/test_serdes.py
+++ b/tests/test_serdes.py
@@ -254,9 +254,7 @@ class Bar:
     ],
 )
 def test_tojson_native(obj, expected):
-    native = (
-        json.dumps(typic.primitive(obj, lazy=True)).replace("\n", "").replace(" ", "")
-    )
+    native = json.dumps(typic.primitive(obj)).replace("\n", "").replace(" ", "")
     assert typic.tojson(obj) == native == expected
 
 
@@ -362,3 +360,32 @@ class Foo:
     assert isinstance(enc, bytes)
     assert enc.decode("utf-8-sig") == '{"bar":null}'
     assert dec == Foo()
+
+
+def test_proto_iterate():
+    @dataclasses.dataclass
+    class Foo:
+        bar: str = None
+
+    proto = typic.protocol(Foo)
+
+    assert dict(proto.iterate(Foo())) == {"bar": None}
+    assert [*proto.iterate(Foo(), values=True)] == [None]
+
+
+def test_functional_iterate():
+    @dataclasses.dataclass
+    class Foo:
+        bar: str = None
+
+    assert dict(typic.iterate(Foo())) == {"bar": None}
+    assert [*typic.iterate(Foo(), values=True)] == [None]
+
+
+def test_klass_iterate():
+    @typic.klass
+    class Foo:
+        bar: str = None
+
+    assert dict(Foo().iterate()) == dict(Foo()) == {"bar": None}
+    assert [*Foo().iterate(values=True)] == [None]
diff --git a/tests/test_typed.py b/tests/test_typed.py
index 2892e95c..76c4f18a 100644
--- a/tests/test_typed.py
+++ b/tests/test_typed.py
@@ -15,6 +15,7 @@
 import pendulum
 import pytest
 
+import typic
 from tests import objects
 from tests.module.index import MyClass
 from tests.module.other import factory
@@ -838,10 +839,7 @@ def test_validate_transmute(t, v):
 @pytest.mark.parametrize(
     argnames="t, v",
     argvalues=[
-        (
-            int,
-            "",
-        ),
+        (int, ""),
         (str, 0),
         (bytes, ""),
         (float, 1),
@@ -864,7 +862,16 @@ def test_validate_invalid(t, v):
 
 
 @pytest.mark.parametrize(
-    argnames="target", argvalues=[objects.Alchemy, objects.Pydantic, objects.Typical]
+    argnames="target",
+    argvalues=[
+        dict,
+        list,
+        tuple,
+        typing.Iterator,
+        objects.Alchemy,
+        objects.Pydantic,
+        objects.Typical,
+    ],
 )
 @pytest.mark.parametrize(
     argnames="value",
@@ -1110,3 +1117,17 @@ class Outer:
 
     obj = proto.transmute({"inner": {"field": "value"}})
     assert isinstance(obj.inner, Inner)
+
+
+def test_pep_585():
+    assert typic.transmute(objects.Pep585, {"data": {"foo": "1"}}) == objects.Pep585(
+        data={"foo": 1}
+    )
+    assert objects.pep585({"foo": "1"}) == {"foo": 1}
+
+
+def test_pep_604():
+    assert typic.transmute(
+        objects.Pep604, {"union": {"key": 1, "field": "blah"}}
+    ) == objects.Pep604(union=objects.DFoo("blah"))
+    assert objects.pep604({"key": 2, "field": "blah"}) == objects.DBar(b"blah")