| 845 | |
| 846 | |
| 847 | def calculate_serialized_sizes( |
| 848 | benchmark_data: Dict[str, Any], |
| 849 | selected_datatypes: Iterable[str], |
| 850 | *, |
| 851 | fory: pyfory.Fory, |
| 852 | bench_pb2, |
| 853 | selected_serializers: Iterable[str], |
| 854 | schema_mismatch: bool, |
| 855 | ) -> Dict[str, Dict[str, int]]: |
| 856 | sizes: Dict[str, Dict[str, int]] = {} |
| 857 | serializer_names = ( |
| 858 | list(selected_serializers) if schema_mismatch else SERIALIZER_ORDER |
| 859 | ) |
| 860 | for datatype in selected_datatypes: |
| 861 | obj = benchmark_data[datatype] |
| 862 | datatype_sizes: Dict[str, int] = {} |
| 863 | |
| 864 | if "fory" in serializer_names: |
| 865 | datatype_sizes["fory"] = len(fory.serialize(obj)) |
| 866 | if "pickle" in serializer_names: |
| 867 | datatype_sizes["pickle"] = len( |
| 868 | pickle.dumps(obj, protocol=pickle.HIGHEST_PROTOCOL) |
| 869 | ) |
| 870 | |
| 871 | if "protobuf" in serializer_names: |
| 872 | to_pb, _, _ = PROTO_CONVERTERS[datatype] |
| 873 | datatype_sizes["protobuf"] = len(to_pb(bench_pb2, obj).SerializeToString()) |
| 874 | |
| 875 | sizes[datatype] = datatype_sizes |
| 876 | return sizes |
| 877 | |
| 878 | |
| 879 | def parse_csv_list(value: str, allowed: Iterable[str], default: List[str]) -> List[str]: |