These benchmarks were generated using pytest-speed
as a drop-in replacement for pytest-benchmark
,
Using the following command:
make build-prod
BENCHMARK_VS_PYDANTIC=1 pytest tests/benchmarks --bench-save
There are also some benchmarks written in rust, see the benches
directory.
Benchmarks main (c07ec73)
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Group ┃ Test Name ┃ Best (ns/iter) ┃ Relative ┃ Stddev (ns/iter) ┃ Iterations ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ complete │ complete_core_lax │ 27242.5 │ │ 357.1 │ 108,500 │
│ │ complete_core_str… │ 30905.0 │ +13.44% │ 637.7 │ 93,500 │
│ │ complete_pyd │ 482301.5 │ x17.70 │ 5760.0 │ 6,200 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ complete-wrong │ complete_core_err… │ 226719.5 │ │ 3251.4 │ 13,030 │
│ │ complete_pyd_error │ 1478600.2 │ x6.52 │ 40137.5 │ 2,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ complete-json │ complete_core_json │ 52805.6 │ │ 644.1 │ 55,700 │
│ │ complete_pyd_json │ 541623.9 │ x10.26 │ 3254.5 │ 5,460 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ simple model - │ core_python │ 4402.5 │ │ 145.5 │ 647,300 │
│ python │ │ │ │ │ │
│ │ pyd_python │ 179636.8 │ x40.80 │ 4410.7 │ 16,460 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ simple model - │ core_json │ 13113.7 │ │ 86.17 │ 225,100 │
│ JSON │ │ │ │ │ │
│ │ pyd_json │ 195594.0 │ x14.92 │ 380.4 │ 15,150 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ bool │ bool_core │ 798.4 │ │ 5.07 │ 1,000,000 │
│ │ bool_pyd │ 12928.5 │ x16.19 │ 25.54 │ 229,300 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ create small │ small_class_core_… │ 154.9 │ │ 4.11 │ 1,000,000 │
│ model │ │ │ │ │ │
│ │ small_class_core_… │ 368.2 │ x2.38 │ 8.43 │ 1,000,000 │
│ │ small_class_pyd │ 2079.0 │ x13.42 │ 34.82 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ string │ core_string_lax │ 39.95 │ │ 1.56 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ recursive model │ definition_model_… │ 44502.8 │ │ 659.4 │ 66,900 │
│ │ definition_model_… │ 311657.3 │ x7.00 │ 11134.4 │ 8,890 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ List[TypedDict] │ list_of_dict_mode… │ 997.8 │ │ 22.00 │ 1,000,000 │
│ │ list_of_dict_mode… │ 215779.1 │ x216.26 │ 2607.4 │ 13,580 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ List │ list_of_ints_core… │ 17823.0 │ │ 94.48 │ 161,100 │
│ │ list_of_ints_pyd_… │ 1228884.4 │ x68.95 │ 25069.2 │ 2,430 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ List JSON │ list_of_ints_core… │ 73967.8 │ │ 535.0 │ 40,100 │
│ │ list_of_ints_pyd_… │ 1298000.5 │ x17.55 │ 4830.6 │ 2,300 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ List[Any] │ list_of_any_core_… │ 17810.3 │ │ 99.89 │ 164,800 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ Set │ set_of_ints_core │ 47056.8 │ │ 348.5 │ 62,400 │
│ │ set_of_ints_pyd │ 1265976.2 │ x26.90 │ 611.8 │ 2,350 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ Set JSON │ set_of_ints_core_… │ 113685.1 │ │ 698.0 │ 25,600 │
│ │ set_of_ints_pyd_j… │ 1312981.5 │ x11.55 │ 3943.3 │ 2,270 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ FrozenSet │ frozenset_of_ints… │ 20635.7 │ │ 32.46 │ 144,500 │
│ │ frozenset_of_ints… │ 600708.8 │ x29.11 │ 2424.5 │ 4,950 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ Dict │ dict_of_ints_core │ 68683.4 │ │ 188.8 │ 43,200 │
│ │ dict_of_ints_pyd │ 2417716.0 │ x35.20 │ 2351.8 │ 2,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ Dict │ dict_of_any_core │ 68990.7 │ │ 1183.5 │ 43,100 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ Dict JSON │ dict_of_ints_core… │ 287942.7 │ │ 3095.0 │ 10,110 │
│ │ dict_of_ints_pyd_… │ 2560366.2 │ x8.89 │ 26285.4 │ 2,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ List[SimpleMode] │ many_models_core_… │ 8736.1 │ │ 148.0 │ 339,100 │
│ │ many_models_pyd │ 2353543.1 │ x269.41 │ 37640.3 │ 2,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ List[DictSimpleM… │ many_models_core_… │ 8692.2 │ │ 140.1 │ 336,600 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ List[Nullable] │ list_of_nullable_… │ 10287.8 │ │ 222.1 │ 283,600 │
│ │ list_of_nullable_… │ 522372.1 │ x50.78 │ 7446.9 │ 5,530 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ bytes │ bytes_core │ 40.31 │ │ 0.570 │ 1,000,000 │
│ │ bytes_pyd │ 1380.7 │ x34.25 │ 8.83 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ datetime model - │ core_python │ 318.9 │ │ 2.21 │ 1,000,000 │
│ python │ │ │ │ │ │
│ │ pyd_python │ 1388.6 │ x4.35 │ 6.41 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ datetime model - │ model_core_json │ 530.0 │ │ 3.54 │ 1,000,000 │
│ JSON │ │ │ │ │ │
│ │ model_pyd_json │ 5984.3 │ x11.29 │ 24.47 │ 490,400 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ datetime datetime │ core_raw │ 43.14 │ │ 0.289 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ datetime str │ core_str │ 145.1 │ │ 0.417 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ datetime future │ core_future_str │ 151.3 │ │ 0.454 │ 1,000,000 │
│ │ core_future │ 373.2 │ x2.47 │ 1.43 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ date from date │ date_from_date │ 43.33 │ │ 0.235 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ date from str │ date_from_str │ 89.67 │ │ 0.439 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ date from │ date_from_datetime │ 254.6 │ │ 1.33 │ 1,000,000 │
│ datetime │ │ │ │ │ │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ date from │ date_from_datetim… │ 134.3 │ │ 0.330 │ 1,000,000 │
│ datetime str │ │ │ │ │ │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ date future │ core_future_str │ 92.81 │ │ 2.01 │ 1,000,000 │
│ │ core_future │ 128.4 │ +38.39% │ 4.02 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ smart-union │ smart_union_core │ 92.33 │ │ 0.512 │ 1,000,000 │
│ │ smart_union_pyd │ 1649.9 │ x17.87 │ 24.80 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ smart-union-coer… │ smart_union_coerc… │ 118.3 │ │ 1.79 │ 1,000,000 │
│ │ smart_union_coerc… │ 2189.1 │ x18.50 │ 39.24 │ 1,000,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ strict-union │ strict_union_core │ 114.5 │ │ 1.01 │ 1,000,000 │
│ │ strict_union_pyd │ 2981.8 │ x26.05 │ 13.78 │ 987,000 │
├─────────────────────┼──────────────────────┼──────────────────┼────────────┼────────────────────┼──────────────┤
│ strict-union-err… │ strict_union_erro… │ 537.3 │ │ 3.75 │ 1,000,000 │
│ │ strict_union_erro… │ 3372.6 │ x6.28 │ 60.71 │ 864,600 │
└─────────────────────┴──────────────────────┴──────────────────┴────────────┴────────────────────┴──────────────┘