def test_bin_data(): a = np.array([1, 2, 3]) serialized = pickle.dumps(a) data = {"binData": serialized} arr = get_data_from_json(data) assert not isinstance(arr, np.ndarray) assert arr == serialized
def Predict(): request = extract_message() sanity_check_request(request) features = get_data_from_json(request) names = request.get("data",{}).get("names") predictions = predict(user_model,features,names) # If predictions is an numpy array or we used the default data then return as numpy array if isinstance(predictions, np.ndarray) or "data" in request: predictions = np.array(predictions) if len(predictions.shape)>1: class_names = get_class_names(user_model, predictions.shape[1]) else: class_names = [] data = array_to_rest_datadef(predictions, class_names, request.get("data",{})) response = {"data":data,"meta":{}} else: response = {"binData":predictions,"meta":{}} tags = get_custom_tags(user_model) if tags: response["meta"]["tags"] = tags metrics = get_custom_metrics(user_model) if metrics: response["meta"]["metrics"] = metrics return jsonify(response)
def test_normal_data(): data = {"data": {"tensor": {"shape": [1, 1], "values": [1]}}} arr = get_data_from_json(data) assert isinstance(arr, np.ndarray) assert arr.shape[0] == 1 assert arr.shape[1] == 1 assert arr[0][0] == 1
def TransformInput(): request = extract_message() sanity_check_request(request) features = get_data_from_json(request) names = request.get("data", {}).get("names") transformed = transform_input(user_model, features, names) # If predictions is an numpy array or we used the default data then return as numpy array if isinstance(transformed, np.ndarray) or "data" in request: new_feature_names = get_feature_names(user_model, names) transformed = np.array(transformed) data = array_to_rest_datadef(transformed, new_feature_names, request.get("data", {})) response = {"data": data, "meta": {}} else: response = {"binData": transformed, "meta": {}} tags = get_custom_tags(user_model) if tags: response["meta"]["tags"] = tags metrics = get_custom_metrics(user_model) if metrics: response["meta"]["metrics"] = metrics return jsonify(response)
def TransformOutput(): request = extract_message() sanity_check_request(request) features = get_data_from_json(request) names = request.get("data", {}).get("names") transformed = transform_output(user_model, features, names) if isinstance(transformed, np.ndarray) or "data" in request: new_class_names = get_class_names(user_model, names) data = array_to_rest_datadef(transformed, new_class_names, request.get("data", {})) response = {"data": data, "meta": {}} else: response = {"binData": transformed, "meta": {}} tags = get_custom_tags(user_model) if tags: response["meta"]["tags"] = tags metrics = get_custom_metrics(user_model) if metrics: response["meta"]["metrics"] = metrics return jsonify(response)
def test_bad_data(): with pytest.raises(SeldonMicroserviceException): data = {"foo": "bar"} arr = get_data_from_json(data)
def test_str_data(): data = {"strData": "my string data"} arr = get_data_from_json(data) assert not isinstance(arr, np.ndarray) assert arr == "my string data"