def test_model_signature(): signature1 = ModelSignature(inputs=Schema( [ColSpec(DataType.boolean), ColSpec(DataType.binary)]), outputs=Schema([ ColSpec(name=None, type=DataType.double), ColSpec(name=None, type=DataType.double) ])) signature2 = ModelSignature(inputs=Schema( [ColSpec(DataType.boolean), ColSpec(DataType.binary)]), outputs=Schema([ ColSpec(name=None, type=DataType.double), ColSpec(name=None, type=DataType.double) ])) assert signature1 == signature2 signature3 = ModelSignature(inputs=Schema( [ColSpec(DataType.boolean), ColSpec(DataType.binary)]), outputs=Schema([ ColSpec(name=None, type=DataType.float), ColSpec(name=None, type=DataType.double) ])) assert signature3 != signature1 as_json = json.dumps(signature1.to_dict()) signature4 = ModelSignature.from_dict(json.loads(as_json)) assert signature1 == signature4 signature5 = ModelSignature(inputs=Schema( [ColSpec(DataType.boolean), ColSpec(DataType.binary)]), outputs=None) as_json = json.dumps(signature5.to_dict()) signature6 = ModelSignature.from_dict(json.loads(as_json)) assert signature5 == signature6
def test_model_signature_with_tensorspec(): signature1 = ModelSignature( inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]), outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10))]), ) signature2 = ModelSignature( inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]), outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10))]), ) # Single type mismatch assert signature1 == signature2 signature3 = ModelSignature( inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]), outputs=Schema([TensorSpec(np.dtype("int"), (-1, 10))]), ) assert signature3 != signature1 # Name mismatch signature4 = ModelSignature( inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]), outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10), "misMatch")]), ) assert signature3 != signature4 as_json = json.dumps(signature1.to_dict()) signature5 = ModelSignature.from_dict(json.loads(as_json)) assert signature1 == signature5 # Test with name signature6 = ModelSignature( inputs=Schema( [ TensorSpec(np.dtype("float"), (-1, 28, 28), name="image"), TensorSpec(np.dtype("int"), (-1, 10), name="metadata"), ] ), outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10), name="outputs")]), ) signature7 = ModelSignature( inputs=Schema( [ TensorSpec(np.dtype("float"), (-1, 28, 28), name="image"), TensorSpec(np.dtype("int"), (-1, 10), name="metadata"), ] ), outputs=Schema([TensorSpec(np.dtype("float"), (-1, 10), name="outputs")]), ) assert signature6 == signature7 assert signature1 != signature6 # Test w/o output signature8 = ModelSignature( inputs=Schema([TensorSpec(np.dtype("float"), (-1, 28, 28))]), outputs=None ) as_json = json.dumps(signature8.to_dict()) signature9 = ModelSignature.from_dict(json.loads(as_json)) assert signature8 == signature9
def from_dict(cls, model_dict): """Load a model from its YAML representation.""" if "signature" in model_dict and isinstance(model_dict["signature"], dict): model_dict = model_dict.copy() model_dict["signature"] = ModelSignature.from_dict(model_dict["signature"]) return cls(**model_dict)