Skip to content

Commit 052488a

Browse files
committed
move to vetiver_create_prototype
1 parent de2c222 commit 052488a

6 files changed

Lines changed: 59 additions & 38 deletions

File tree

vetiver/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Change to import.metadata when minimum python>=3.8
33
from importlib_metadata import version as _version
44

5-
from .ptype import * # noqa
5+
from .prototype import * # noqa
66
from .vetiver_model import VetiverModel # noqa
77
from .server import VetiverAPI, vetiver_endpoint, predict # noqa
88
from .mock import get_mock_data, get_mock_model # noqa
@@ -19,6 +19,7 @@
1919
from .rsconnect import deploy_rsconnect # noqa
2020
from .monitor import compute_metrics, pin_metrics, plot_metrics, _rolling_df # noqa
2121
from .model_card import model_card # noqa
22+
from .types import create_prototype, Prototype # noqa
2223

2324
__author__ = "Isabel Zimmerman <isabel.zimmerman@rstudio.com>"
2425
__all__ = []

vetiver/handlers/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from functools import singledispatch
33
from contextlib import suppress
44

5-
from ..ptype import vetiver_create_ptype
5+
from ..prototype import vetiver_create_prototype
66
from ..meta import _model_meta
77

88

@@ -106,7 +106,7 @@ def construct_prototype(self):
106106
prototype : pd.DataFrame or None
107107
Zero-row DataFrame for storing data types
108108
"""
109-
prototype = vetiver_create_ptype(self.prototype_data)
109+
prototype = vetiver_create_prototype(self.prototype_data)
110110
return prototype
111111

112112
def handler_startup():
Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,9 @@
88

99
import pandas as pd
1010
import numpy as np
11-
from pydantic import BaseModel, create_model
12-
13-
14-
class NoAvailablePTypeError(Exception):
15-
"""
16-
Throw an error if we cannot create
17-
a 0 row input data prototype for `model`
18-
"""
19-
20-
def __init__(
21-
self,
22-
message="There is no method to create a 0-row input data prototype for `model`",
23-
):
24-
self.message = message
25-
super().__init__(self.message)
11+
import pydantic
12+
from warnings import warn
13+
from .types import create_prototype
2614

2715

2816
class InvalidPTypeError(Exception):
@@ -39,14 +27,14 @@ def __init__(
3927

4028

4129
CREATE_PTYPE_TPL = """\
42-
Failed to create a data prototype (ptype) from data of \
30+
Failed to create a data prototype from data of \
4331
type {_data_type}. If your datatype is not one of \
4432
(pd.DataFrame, pydantic.BaseModel, np.ndarry, dict), \
45-
you should write a function to create the ptype. Here is \
33+
you should write a function to create the prototype. Here is \
4634
a template for such a function: \
4735
4836
from pydantic import create_model
49-
from vetiver.ptype import vetiver_create_ptype
37+
from vetiver.prototype import vetiver_create_ptype
5038
5139
@vetiver_create_ptype.register
5240
def _(data: {_data_type}):
@@ -59,8 +47,20 @@ def _(data: {_data_type}):
5947
"""
6048

6149

62-
@singledispatch
6350
def vetiver_create_ptype(data):
51+
52+
warn(
53+
"argument for creating input data prototypes has changed to "
54+
"vetiver_create_prototype, from vetiver_create_ptype",
55+
DeprecationWarning,
56+
stacklevel=2,
57+
)
58+
59+
return vetiver_create_prototype(data)
60+
61+
62+
@singledispatch
63+
def vetiver_create_prototype(data):
6464
"""Create zero row structure to save data types
6565
6666
Parameters
@@ -77,7 +77,7 @@ def vetiver_create_ptype(data):
7777
raise InvalidPTypeError(message=CREATE_PTYPE_TPL.format(_data_type=type(data)))
7878

7979

80-
@vetiver_create_ptype.register
80+
@vetiver_create_prototype.register
8181
def _(data: pd.DataFrame):
8282
"""
8383
Create input data prototype for a pandas dataframe
@@ -117,11 +117,11 @@ def _(data: pd.DataFrame):
117117
True
118118
"""
119119
dict_data = data.iloc[0, :].to_dict()
120-
ptype = create_model("ptype", **dict_data)
121-
return ptype
120+
prototype = create_prototype(**dict_data)
121+
return prototype
122122

123123

124-
@vetiver_create_ptype.register
124+
@vetiver_create_prototype.register
125125
def _(data: np.ndarray):
126126
"""
127127
Create input data prototype for a numpy array
@@ -156,11 +156,11 @@ def _item(value):
156156
dict_data = dict(enumerate(data[0], 0))
157157
# pydantic requires strings as indicies
158158
dict_data = {f"{key}": _item(value) for key, value in dict_data.items()}
159-
ptype = create_model("ptype", **dict_data)
160-
return ptype
159+
prototype = create_prototype(**dict_data)
160+
return prototype
161161

162162

163-
@vetiver_create_ptype.register
163+
@vetiver_create_prototype.register
164164
def _(data: dict):
165165
"""
166166
Create input data prototype for a dict
@@ -170,11 +170,11 @@ def _(data: dict):
170170
data : dict
171171
Dictionary
172172
"""
173-
return create_model("ptype", **data)
173+
return create_prototype(**data)
174174

175175

176-
@vetiver_create_ptype.register
177-
def _(data: BaseModel):
176+
@vetiver_create_prototype.register
177+
def _(data: pydantic.BaseModel):
178178
"""
179179
Create input data prototype for a pydantic BaseModel object
180180
@@ -186,7 +186,7 @@ def _(data: BaseModel):
186186
return data
187187

188188

189-
@vetiver_create_ptype.register
189+
@vetiver_create_prototype.register
190190
def _(data: NoneType):
191191
"""
192192
Create input data prototype for None

vetiver/server.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ class VetiverAPI:
2323
Model to be deployed in API
2424
check_prototype : bool
2525
Determine if data prototype should be enforced
26-
check_ptype : bool
27-
Deprecated in favor of check_prototype
2826
app_factory :
2927
Type of API to be deployed
28+
**kwargs: dict
29+
Deprecated parameters.
3030
3131
Example
3232
-------
@@ -35,6 +35,11 @@ class VetiverAPI:
3535
>>> model = vt.get_mock_model().fit(X, y)
3636
>>> v = vt.VetiverModel(model = model, model_name = "my_model", prototype_data = X)
3737
>>> v_api = vt.VetiverAPI(model = v, check_prototype = True)
38+
39+
Notes
40+
-----
41+
Parameter `check_ptype` was changed to `check_prototype`. Handling of `check_ptype`
42+
will be removed in a future version.
3843
"""
3944

4045
app = None

vetiver/types.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from pydantic import BaseModel, create_model
2+
3+
all = ["Prototype", "create_prototype"]
4+
5+
6+
class Prototype(BaseModel):
7+
pass
8+
9+
10+
def create_prototype(**dict_data):
11+
return create_model("prototype", __base__=Prototype, **dict_data)

vetiver/vetiver_model.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,19 @@ class VetiverModel:
2929
Model name or ID
3030
prototype_data : pd.DataFrame, np.array
3131
Sample of data model should expect when it is being served
32-
ptype_data : pd.DataFrame, np.array
33-
Deprecated, in favor of prototype_data
3432
versioned :
3533
Should the model be versioned when created?
3634
description : str
3735
A detailed description of the model.
3836
If omitted, a brief description will be generated.
3937
metadata : dict
4038
Other details to be saved and accessed for serving
39+
**kwargs: dict
40+
Deprecated parameters.
4141
4242
Attributes
4343
----------
44-
ptype : pydantic.main.BaseModel
44+
prototype : pydantic.main.BaseModel
4545
Data prototype
4646
handler_predict:
4747
Method to make predictions from a trained model
@@ -50,6 +50,10 @@ class VetiverModel:
5050
-----
5151
VetiverModel can also take an initialized custom VetiverHandler
5252
as a model, for advanced use cases or non-supported model types.
53+
Parameter `ptype_data` was changed to `prototype_data`. Handling of `ptype_data`
54+
will be removed in a future version.
55+
56+
5357
5458
Example
5559
-------

0 commit comments

Comments
 (0)