Deserializes the Keras-serialized function.

(De)serializing Python functions from/to bytecode is unsafe. Therefore we also use the function's type as an anonymous function ('lambda') or named function in the Python environment ('function'). In the latter case, this lets us use the Python scope to obtain the function rather than reload it from bytecode. (Note that both cases are brittle!)

Keras-deserialized functions do not perform lexical scoping. Any modules that the function requires must be imported within the function itself.

This serialization mimicks the implementation in tf.keras.layers.Lambda.

serial Serialized Keras object: typically a dict, string, or bytecode.
function_type Python string denoting 'function' or 'lambda'.

function Function the serialized Keras object represents.


serial, function_type = serialize_function(lambda x: x)
function = deserialize_function(serial, function_type)
assert function(2.3) == 2.3  # function is identity