in src/pythonserialization.h [320:366]
void serialize(X& x, py::object& v) {
pyTypes type;
x(type);
switch (type) {
case pyTypes::bool_:
v = py::bool_(x.template read<bool>());
break;
case pyTypes::none:
v = py::none();
break;
case pyTypes::float_:
v = py::float_(x.template read<float>());
break;
case pyTypes::dict:
v = x.template read<py::dict>();
break;
case pyTypes::str:
v = x.template read<py::str>();
break;
case pyTypes::array:
v = x.template read<py::array>();
break;
case pyTypes::int_:
v = py::int_(x.template read<int64_t>());
break;
case pyTypes::list:
v = x.template read<py::list>();
break;
case pyTypes::tensor:
v = toPython(x.template read<Tensor>());
break;
case pyTypes::tuple:
v = x.template read<py::tuple>();
break;
case pyTypes::args:
v = x.template read<py::args>();
break;
case pyTypes::kwargs:
v = x.template read<py::kwargs>();
break;
case pyTypes::pickled:
v = unpickle(x);
break;
default:
throw SerializationError("Can't deserialize python type (unknown type " + std::to_string(type) + ")");
}
}