Fake methods¶
A fake is a rule that says what a column's values look like in place of its real ones. Fake as little as you can: the identifying columns (names, emails, phones, addresses, identifiers). Every column you leave unfaked keeps its real values, so every real relationship, edge case and distribution survives. A column has a fake and, optionally, a synthetic rule laid over it. The fake is what a read shows in a Test (fake) environment; a column with none shows its real value. The synthetic rule applies only when a synthetic dataset is generated, and where declared it takes the place of the fake there. Every kind below may be either, except sql_group and sequence, which make sense only over a generated table: they are synthetic rules, and declaring one as a fake is refused by name.
A column declares one fake in the table editor's Fake field, as one call: email(), categories((new, paid, shipped)), after(placed_at, 1 to 10 days). The test-data guide shows where fakes fit; this page defines each one.
A declaration is checked when saved and when loaded. It is refused, naming the column and the cause, if it cannot describe values: an unknown name, arguments the kind does not take, shares that do not sum to 1, a distribution whose points are out of order, or a kind that cannot fill the column's type. Where this page says a fake "shows" a value, it means a read of a table in a Test (fake) environment. A synthetic dataset draws the same values into generated rows.
Writing a declaration¶
A declaration is kind(arguments). Arguments are positional or named (mean=50). A list of values is written in parentheses: (shoes, bra, sweater). A bare word or a quoted string is a value. A distance between two dates is written 3 days, or as a range 1 to 10 days.
categories((shoes, bra, sweater), (.1, .6, .3))
normal(mean=50, sd=10, min=0)
after(created_at, 1 to 10 days)
sql(quantity * price)
Any name that is not one of Provisa's own kinds below names a general fake method, called with the arguments given.
Properties every fake shares¶
Consistency. A fake that replaces a real value is a keyed function of that value: the same real value always shows the same fake, and different real values show different fakes. Joins, grouping and distinct counts through the column give the results they would give on the real values. The key is one platform key; without it a fake cannot be turned back into the value. A method's fake is drawn from the value's keyed digest mixed with a hash of the column's fake as declared (the method, its arguments, for a stable fake its definition version, and the column's type family: every integer type is one family and every text type another, a decimal keeps its precision and scale, and timestamps with and without a time zone differ), so two columns faked from the same value by different methods do not draw alike, and changing a column's fake changes all of its values.
Where it is computed. The engine of the region serving the read computes every fake at the read. Ordering, filtering, grouping, joining and aggregating through a faked column work on the fakes the reader sees, never on the real values.
Stable fakes. Tick Stable and a column's fake is computed from Provisa's portable definition, so it is the same on every engine, in every region and after an engine is replaced. A fake that is not stable is computed by the serving engine's own method and is consistent within its region only. In a Test (fake) environment a fake is stable unless declared otherwise, since test data is extracted, kept and compared over time. A stable fake must declare a fake. These methods can be stable, and no others:
city, company, country, email, first_name, job, last_name, name, phone_number, postcode, sentence, state, street_address, user_name, uuid4, word
Every distribution kind below, and bucket, truncate, prefix, hash and encrypt, is a pure function of its arguments and can be stable. A stable profile() must pin its run: profile(run=<id>). A stable method takes no arguments. A stable fake cannot be one that reads what is measured where it is read: pattern(), categories() with no values, bool() with no share, or after, before, greater_than and less_than with no distance. A stable fake that names another column, such as after(created_at, 1 day) or sql(quantity * price), needs each faked column it names to be stable too. Each of these is refused by name when saved.
A stable fake is pinned to the version of Provisa's portable definition it was saved under, and the column editor shows that version. A later release that adds a new version leaves the column on its pinned version, so its fakes do not change. The column moves to the newest version only when its fake is changed, or when it is made stable again after being made not stable.
Joined columns agree. Two columns joined by a relationship, both faked, must declare the same fake, the same stability and, when stable, the same definition version, and be of one type family, so the join still matches. A declaration that breaks this is refused, naming the relationship.
Uniqueness. Fakes of the identifier, email and phone kinds carry a short part derived from the keyed digest of the real value, so distinct real values give distinct fakes. Person names may collide, as real names do.
Provisa's own kinds¶
Values from a list¶
| Declaration | Meaning | Column type |
|---|---|---|
categories((shoes, bra, sweater)) |
A value from the list. Shares come from the column's measurement; a value with no measured share takes an even share of what remains. | Any; each value must fit the type |
categories((shoes, bra, sweater), (.1, .6, .3)) |
The values and their shares. There must be one share per value, each between 0 and 1, summing to 1. | Any |
categories() |
Values and shares both from measurement. Refused on an empty table, which asks for the values to be declared. | Any |
bool() |
True at the measured share of true; even on an empty table | Boolean |
bool(.8) |
True 8 times in 10 | Boolean |
Example:
Measured values and shares come from the column's latest profile run. With no profile run, or no full value-frequency table, they come from the table itself, read as the organization's administrator through the governed pipeline, as a profile is.
A categories list is the one way a real value reaches a synthetic dataset.
Numeric and temporal distributions¶
Each draws a uniform point and maps it through the distribution. Masking draws the point from the keyed digest of the real value, so a value always shows the same fake. A synthetic dataset draws it from the dataset's seed and the row. The result is cast to the column's type and scale, and an integer column stays integer. These fake a numeric column (integer or decimal), or a date or timestamp column when their points are dates, as in the second block below. A declaration with dates among its points and numbers among others is refused.
| Declaration | Meaning |
|---|---|
percentiles(min=0, p50=40, p95=300, max=900) |
Any three or more of min, p5, p25, p50, p75, p95, max, joined piecewise-linearly. Values must not decrease. |
normal(mean=50, sd=10) |
A normal distribution. sd must be above zero. Add min and max to bound it. |
lognormal(median=40, p95=300) |
A log-normal distribution given by its median and 95th percentile. Or lognormal(mu=3.7, sigma=1.1). Optional min, max. |
uniform(min=1, max=100) |
Every value in the range equally likely |
triangular(min=0, mode=20, max=100) |
Most likely at the mode. mode must lie between min and max. |
poisson(mean=3) |
Integer counts. mean must be above zero. Integer column only. |
profile() |
The column's profiled distribution (numeric or temporal). profile(run=<id>) pins one profile run. A column with few distinct values draws from the profile's value frequencies instead of its sketch. A serving region with no run of the named profile refuses the read, naming it. |
An integer column that declares lognormal(median=40, p95=300) gets whole numbers; a decimal column gets values at its scale. Arguments that cannot describe a distribution (points out of order, a minimum above a maximum, a standard deviation not above zero) are refused by name.
Over dates and times, write each point as a quoted ISO date or timestamp and each spread as an interval:
normal(mean='2026-01-01', sd=30 days)
uniform(min='2025-01-01', max='2026-01-01')
triangular(min='2025-01-01', mode='2025-06-01', max='2026-01-01')
percentiles(min='2025-01-01', p50='2025-06-01', max='2026-01-01')
lognormal(median='2025-03-01', p95='2025-12-01', min='2025-01-01')
A log-normal over dates needs min, the moment its times are measured from. A month counts as 30 days and a year as 365.25 days in a spread, which is a scale and not a calendar step. poisson and bucket do not take dates.
Pattern¶
pattern() fills the value shapes a profile recorded for the column, so codes and references keep their format: a column whose values look like AB-1234 gets values of the same shape. It fakes a text column and takes no arguments.
Bucket, truncate, prefix¶
Each is a function of the value alone, so grouping, sorting and filtering work on the result. None can be reversed.
| Declaration | Meaning | Example | Column type |
|---|---|---|---|
bucket(10) |
The fixed-width range the value falls in | 37 shows as a label for the 30 to 40 range | Numeric |
bucket((0, 18, 65)) |
The range between named edges, in ascending order | 37 shows as a label for the 18 to 65 range | Numeric |
truncate(month) |
The date cut to a unit: year, quarter, month, week, day, hour, minute, second |
2026-10-06 shows as 2026-10-01 | Date or timestamp. A date has no hour, minute or second. |
prefix(3) |
The first characters of a code | GB84MYNB48764759382421 shows as GB8 |
Text |
The exact text of a bucket label is the engine's.
Hash and encrypt¶
| Declaration | Meaning |
|---|---|
hash() |
A keyed digest of the value, under the platform key held inside the engine. The same value gives the same digest, so joins on it still match. Cannot be reversed. |
encrypt() |
A deterministic encryption under the same key that keeps the value's format: digits stay digits and the length is kept, so it passes the column's type and joins still match. Reversed only inside Provisa, for a reader granted the column unmasked. Never by a client. |
Both fake a text or integer column. A synthetic dataset applies them to generated values, never to real ones. Shuffling a column's values between rows is not a kind: it is not a function of the value and still shows the real ones.
After, before, greater than, less than¶
A column can follow another column of the same table.
| Declaration | Column and the one it names | Value |
|---|---|---|
after(placed_at, 3 days) |
Date or timestamp, both | The named column's value, later by 3 days |
after(placed_at, 1 to 10 days) |
Later by a distance drawn evenly from the range | |
before(delivered_at, 2 days) |
Earlier by 2 days | |
after(placed_at) |
Later by the measured difference between the two columns | |
greater_than(price, 5) |
Numeric, both | The named column's value plus 5 |
less_than(price, 1 to 3) |
The named column's value minus a distance drawn evenly from 1 to 3 | |
greater_than(price) |
Plus the measured difference |
A distance below zero, a range that runs backwards, or a date distance with no unit (days, hours, weeks and so on) is refused. A synthetic dataset generates the named column first. A read computes the value from the named column's faked value. The order between the two holds in every row either way.
sql¶
sql(expression) derives a value from other columns of the same row:
The expression is one scalar expression in the governed SQL dialect, translated for each engine: arithmetic, comparison, conditional, string, date and time operations, and a published list of functions (coalesce, nullif, greatest, least, abs, round, floor, ceil, power, sqrt, ln, exp, sign, upper and others). It allows no subquery, no other table, no aggregate or window, and nothing whose result could differ between two reads of the same row. An expression outside that subset, or naming a column the table does not hold, is refused when saved.
The columns it names are generated, or faked, first. The result is computed over those values.
sql_group¶
sql_group(expression) computes a value across rows. It is a synthetic rule: it builds a rule that spans rows, where sql checks one row. A read creates no rows, and a window over a filtered read would see only the rows read, so a read shows the column's fake, or its real value, and never applies the rule.
The expression is the sql subset plus window functions (row_number, rank, dense_rank, lag, lead, first_value, last_value) over partitions of the same table, and sums, counts and the like over a parent's children through a declared relationship (SUM(lines.amount)). Typical uses: the last row of each customer takes the remainder so that customer's amounts net to zero; a running balance; a sequence number within an order; an invoice total that sums its lines.
The expression may name self, the value the column's fake draws, or its profile draws where the column has no fake. A rule can then adjust only the rows it needs and keep the drawn value on the rest.
sequence¶
sequence((states), entity, order) is a synthetic rule that gives an entity's rows their states in order:
The three arguments are the states in order, the column that groups an entity's rows, and the column that orders them. Each entity's rows take the states in turn and never go back. An entity with fewer rows than states stops part-way, as an order not yet shipped does, and an entity is generated with no more rows than there are states. A read shows the column's fake, or its real value.
Evaluation order and cycles¶
A row's fakes and rules are computed in this order:
- Independent fakes first: every kind that names no other column.
- Relative fakes next:
after,before,greater_than,less_thanandsql. Each is computed after every column it names, in the order the references require. - Group rules last, in synthetic generation only:
sql_groupandsequence, after the rows they span exist, again in reference order.
A set of fakes whose references form a cycle, a chain that names itself, is refused when any of them is saved, and the message names the columns in the cycle:
General fake methods¶
Any other name is a general fake method: a realistic generated value of one kind (a name, an address, a phone number). A method is checked when declared. It must exist, take only the arguments listed below, and make values the column's type can hold: text, integer, decimal, boolean, date or timestamp.
Pass arguments by name: date_between(start_date='-5y', end_date='today'), pyint(min_value=1, max_value=100). The example outputs below come from one run; yours differ unless the column is stable.
A method not listed under Stable fakes above is computed by the serving engine's own implementation, seeded by the keyed digest of the real value. It is consistent within its region. Declaring such a method stable is refused, naming the methods that can be.
Now and today. A method whose range starts or ends at now or today, by default or through an argument such as end_date='now' or start_date='-30d', counts from one fixed reference instant, 15 July 2026 at 12:00 UTC, never from the clock. A value is the same at every read, on every engine and in every time zone. date_time_this_month() gives a time between 1 and 15 July 2026, and date_time_between(start_date='-30d', end_date='now') a time between 15 June and 15 July 2026.
Names¶
Return text unless noted.
| Method | Makes | Example |
|---|---|---|
name() |
A full name | Joshua Wood |
name_female() |
A full name from female first names | Kimberly Wood |
name_male() |
A full name from male first names | Joshua Wood |
name_nonbinary() |
A full name from nonbinary first names | Amy Wood |
first_name() |
A given name | John |
first_name_female() |
A female given name | Cynthia |
first_name_male() |
A male given name | David |
first_name_nonbinary() |
A nonbinary given name | John |
last_name() |
A family name | Young |
last_name_female() |
A family name from the female list | Young |
last_name_male() |
A family name from the male list | Young |
last_name_nonbinary() |
A family name from the nonbinary list | Young |
prefix() |
A title such as Dr. or Mx. | Mr. |
prefix_female() |
A female title | Mrs. |
prefix_male() |
A male title | Mr. |
prefix_nonbinary() |
A nonbinary title | Mx. |
suffix() |
A name suffix such as PhD | II |
suffix_female() |
A female suffix | MD |
suffix_male() |
A male suffix | II |
suffix_nonbinary() |
A nonbinary suffix | II |
language_name() |
The name of a language | Haitian |
Addresses and places¶
Text unless noted.
| Method | Makes | Example |
|---|---|---|
address() |
A full street address, city, state and postal code on two lines | 9791 Regina Mountains / Andreaborough, VT 62139 |
street_address() |
Building number, street and sometimes a unit | 825 Garrett Circles |
street_name() |
A street name | Brittany Curve |
street_suffix() |
A street type such as Vista | Freeway |
building_number() |
A building number | 98259 |
secondary_address() |
A unit such as Suite 604 | Apt. 982 |
city() |
A city name | New Amy |
city_prefix() |
A city name's first part such as Port | East |
city_suffix() |
A city name's last part | bury |
state() |
A state name | Kansas |
state_abbr() |
A two-letter state code | IA |
administrative_unit() |
A state or province name | Kansas |
postcode() |
A postal code | 31691 |
postalcode() |
A postal code (same as postcode) | 31691 |
zipcode() |
A ZIP code | 31691 |
postcode_in_state() |
A postal code inside a state | 52428 |
postalcode_in_state() |
A postal code inside a state | 52428 |
zipcode_in_state() |
A ZIP code inside a state | 52428 |
postalcode_plus4() |
A ZIP+4 code | 31691-9710 |
zipcode_plus4() |
A ZIP+4 code | 31691-9710 |
country() |
A country name | Dominica |
country_code() |
A two-letter country code | GW |
current_country() |
The default country's name | United States |
current_country_code() |
The default country's two-letter code | US |
military_dpo() |
A military diplomatic post office address | Unit 3982 Box 5979 |
military_ship() |
A military ship prefix | USNS |
military_state() |
A military postal state code | AE |
locale() |
A language and region tag | hi_IN |
language_code() |
A two-letter language code | hi |
Geography¶
Coordinates are numbers; the rest are text.
| Method | Makes | Example |
|---|---|---|
latitude() |
A latitude in degrees | -26.1218565 |
longitude() |
A longitude in degrees | -52.243713 |
Internet¶
Text unless noted.
| Method | Makes | Example |
|---|---|---|
email() |
An email address | [email protected] |
safe_email() |
An email address on a reserved example domain | [email protected] |
free_email() |
An email address at a free provider | [email protected] |
company_email() |
An email address at a company domain | [email protected] |
ascii_email() |
An email address of ASCII letters only | [email protected] |
ascii_safe_email() |
An ASCII email address on a reserved example domain | [email protected] |
ascii_free_email() |
An ASCII email address at a free provider | [email protected] |
ascii_company_email() |
An ASCII email address at a company domain | [email protected] |
free_email_domain() |
A free provider's domain | gmail.com |
user_name() |
A login name | brittanyanderson |
domain_name() |
A domain name | watkins.com |
domain_word() |
The first label of a domain | watkins |
safe_domain_name() |
A reserved example domain | example.org |
tld() |
A top-level domain | com |
hostname() |
A host name | srv-98.wood.info |
dga() |
A machine-generated domain name | gmjfulkjmkjgehahqffvkxvio.com |
url() |
A URL | http://www.moon-wells.org/ |
uri() |
A URI with a path | http://www.smith.com/list/tagfaq.html |
uri_path() |
A URI path | posts |
uri_page() |
A page name for a URI | main |
uri_extension() |
A file extension for a URI | .htm |
slug() |
A hyphenated URL slug | economy-person-off |
image_url() |
A placeholder image URL | https://dummyimage.com/487x267 |
ipv4() |
An IPv4 address | 114.22.54.54 |
ipv4_private() |
A private-range IPv4 address | 10.66.198.198 |
ipv4_public() |
A public-range IPv4 address | 40.88.216.218 |
ipv4_network_class() |
An IPv4 network class letter | a |
ipv6() |
An IPv6 address | 2163:6369:8b52:9b4a:97b7:5093:3ceb:3ffd |
mac_address() |
A hardware address | 9a:79:42:bd:f2:21 |
port_number() |
A port number (integer) | 31190 |
http_method() |
An HTTP method | PUT |
http_status_code() |
An HTTP status code (integer) | 221 |
iana_id() |
A registrar identifier | 3992384 |
nic_handle() |
A network information centre handle | MA93682-FAKE |
ripe_id() |
A regional registry identifier | ORG-MA93682-RIPE |
Phone numbers¶
Text.
| Method | Makes | Example |
|---|---|---|
phone_number() |
A phone number in a varying format | 298.925.9791 |
basic_phone_number() |
A phone number as ###-###-#### | 2989259791 |
msisdn() |
A mobile subscriber number | 9825979190748 |
country_calling_code() |
A calling code such as +687 | +881 0 |
Companies and jobs¶
Text.
| Method | Makes | Example |
|---|---|---|
company() |
A company name | Watkins and Sons |
company_suffix() |
A company type such as Group | and Sons |
catch_phrase() |
A marketing tagline | Front-line optimizing moratorium |
bs() |
A business-speak phrase | incentivize end-to-end relationships |
job() |
A job title | Field seismologist |
job_female() |
A job title (the female list) | Field seismologist |
job_male() |
A job title (the male list) | Field seismologist |
Finance¶
Text unless noted.
| Method | Makes | Example |
|---|---|---|
credit_card_number() |
A credit card number that passes the check digit | 4597919074832 |
credit_card_provider() |
A card network name | VISA 13 digit |
credit_card_expire() |
An expiry date as MM/YY | 02/29 |
credit_card_security_code() |
A three-digit security code | 982 |
credit_card_full() |
Provider, holder, number, expiry and code on separate lines | VISA 13 digit / Brittany Anderson / 491907483... |
iban() |
An international bank account number | GB46HSRE59791907483378 |
bban() |
A basic bank account number | HSRE59791907483378 |
bank() |
A bank name | Kroo Bank |
bank_country() |
A bank's two-letter country code | GB |
aba() |
A nine-digit bank routing number | 049825974 |
swift() |
A BIC / SWIFT code (8 or 11 characters) | SRELGB4E |
swift8() |
An 8-character BIC | HSREGBX4 |
swift11() |
An 11-character BIC | HSREGBX4EA4 |
currency_code() |
A currency code such as MWK | IDR |
currency_name() |
A currency's name | Indonesian rupiah |
currency_symbol() |
A currency symbol | Rp |
cryptocurrency_code() |
A cryptocurrency ticker | NMC |
cryptocurrency_name() |
A cryptocurrency's name | Namecoin |
pricetag() |
A formatted price such as $7,604.87 | $69.82 |
Government and personal identifiers¶
Text.
| Method | Makes | Example |
|---|---|---|
ssn() |
A US social security number | 244-76-8917 |
invalid_ssn() |
A social security number that is never issued | 243-69-0000 |
itin() |
A US individual taxpayer number | 930-87-9709 |
ein() |
A US employer identification number | 39-9942864 |
sbn9() |
A nine-digit standard book number | 398-25979-0 |
passport_number() |
A passport number | S82597919 |
passport_gender() |
A passport gender letter | F |
Identifiers and codes¶
Text.
| Method | Makes | Example |
|---|---|---|
uuid4() |
A random UUID (version 4) | 21636369-8b52-4b4a-97b7-50923ceb3ffd |
uuid1() |
A time-based UUID (version 1) | b7adc38d-6c57-11d0-a2d4-97b73ceb3ffd |
uuid7() |
A time-ordered UUID (version 7) | 012f3ceb-3ffd-78b5-97ad-586921636369 |
isbn10() |
A 10-digit book number | 0-597-91907-0 |
isbn13() |
A 13-digit book number | 978-0-597-91907-7 |
ean() |
A barcode (13 digits by default) | 3982597919071 |
ean13() |
A 13-digit barcode | 3982597919071 |
ean8() |
An 8-digit barcode | 39825971 |
localized_ean() |
A barcode with a local prefix | 0482597919079 |
localized_ean13() |
A 13-digit barcode with a local prefix | 0482597919079 |
localized_ean8() |
An 8-digit barcode with a local prefix | 10825976 |
upc_a() |
A 12-digit product code | 982597919074 |
upc_e() |
An 8-digit compressed product code | 13982591 |
vin() |
A vehicle identification number | F9PX51XG6XS0E8337 |
license_plate() |
A vehicle licence plate | 2S 5979R |
doi() |
A digital object identifier | 10.31940071/m9e8o25 |
md5() |
An MD5 hash string | 0303ec013e8b1aa62a1a2d06ca252d99 |
sha1() |
A SHA-1 hash string | e3e4da706e7519080db352b21b6ff30b82219fd4 |
sha256() |
A SHA-256 hash string | 1c0ade1d880eca1bc84cad5919d50d9d18b84908cd1b9... |
pystr(min_chars=8, max_chars=8) |
A random string of letters | EgVyEFVy |
Dates and times¶
Dates are dates, date-times are timestamps, the rest are text unless noted.
| Method | Makes | Example |
|---|---|---|
date() |
A date as text (YYYY-MM-DD) | 1997-12-22 |
date_object() |
A date | 1997-12-22 |
date_of_birth() |
A date of birth, 0 to 115 years ago | 1967-12-07 |
date_this_year() |
A date this year | 2026-04-07 |
date_this_month() |
A date this month | 2026-07-07 |
date_this_decade() |
A date this decade | 2023-03-27 |
date_this_century() |
A date this century | 2013-02-16 |
date_between(start_date='-5y', end_date='today') |
A date between two bounds | 2024-01-04 |
past_date() |
A date in the last 30 days | 2026-06-29 |
future_date() |
A date in the next 30 days | 2026-07-30 |
date_time() |
A timestamp since 1970 | 1997-12-22 09:26:17 |
date_time_ad() |
A timestamp since year 1 | 1003-03-29 11:17:12 |
date_time_this_year() |
A timestamp this year | 2026-04-07 17:36:22 |
date_time_this_month() |
A timestamp this month | 2026-07-08 04:11:26 |
date_time_this_decade() |
A timestamp this decade | 2023-03-27 08:05:50 |
date_time_this_century() |
A timestamp this century | 2013-02-16 20:36:31 |
date_time_between(start_date='-30d', end_date='now') |
A timestamp between two bounds | 2026-06-30 08:15:24 |
past_datetime() |
A timestamp in the last 30 days | 2026-06-30 08:15:23 |
future_datetime() |
A timestamp in the next 30 days | 2026-07-30 08:15:24 |
iso8601() |
A timestamp as ISO 8601 text | 1997-12-22T09:26:17.410707 |
unix_time() |
Seconds since 1970 (number) | 8.828e+08 |
time() |
A time of day as text (HH:MM:SS) | 09:26:17 |
year() |
A year as text | 1983 |
month() |
A month number as text | 07 |
month_name() |
A month name | July |
day_of_month() |
A day of the month as text | 05 |
day_of_week() |
A weekday name | Tuesday |
am_pm() |
AM or PM | PM |
century() |
A century in Roman numerals | VIII |
timezone() |
A time zone name | Africa/Bissau |
Text¶
Text.
| Method | Makes | Example |
|---|---|---|
word() |
One word | economy |
sentence() |
One sentence | Or candidate trouble listen ok. |
paragraph() |
One paragraph | Name have page personal assume actually study... |
text(max_nb_chars=100) |
A block of text up to a given length | Name have page personal assume actually study... |
Numbers and booleans¶
Numeric methods take bounds as arguments.
| Method | Makes | Example |
|---|---|---|
pyint(min_value=1, max_value=100) |
A whole number | 31 |
random_int(min=1, max=100) |
A whole number | 31 |
random_number(digits=4) |
A whole number with up to a number of digits | 3898 |
pyfloat(min_value=0, max_value=100) |
A floating-point number | 75.89 |
pydecimal(left_digits=4, right_digits=2, positive=True) |
A decimal number | 4898.98 |
pybool() |
True or false (boolean) | True |
boolean() |
True or false (boolean) | True |
null_boolean() |
True, false or null (boolean) | False |
random_digit() |
One digit, 0 to 9 | 3 |
random_digit_not_null() |
One digit, 1 to 9 | 4 |
random_digit_above_two() |
One digit, 2 to 9 | 5 |
random_digit_or_empty() |
One digit, or an empty string | `` |
random_digit_not_null_or_empty() |
One digit 1 to 9, or an empty string | `` |
Patterns¶
Fill a template. # becomes a digit and ? a letter.
| Method | Makes | Example |
|---|---|---|
numerify(text='###-####') |
Replaces each # in a template with a digit | 398-2597 |
lexify(text='??-??') |
Replaces each ? in a template with a letter | pL-Ii |
bothify(text='##-??') |
Replaces # with digits and ? with letters | 39-Ii |
hexify(text='^^^^') |
Replaces each ^ in a template with a hexadecimal digit | 74bf |
random_letter() |
One letter | p |
random_lowercase_letter() |
One lowercase letter | h |
random_uppercase_letter() |
One uppercase letter | H |
Colours¶
Methods that make a colour as a triple of numbers cannot be declared; see below.
| Method | Makes | Example |
|---|---|---|
color() |
A colour as #RRGGBB | #017c03 |
hex_color() |
A colour as #rrggbb | #3ceb40 |
safe_hex_color() |
A web-safe colour as #rrggbb | #7744bb |
color_name() |
A colour name | LavenderBlush |
safe_color_name() |
A basic colour name | navy |
rgb_color() |
A colour as r,g,b text | 121,66,189 |
rgb_css_color() |
A colour as rgb(r,g,b) text | rgb(121,66,189) |
Files and devices¶
Text.
| Method | Makes | Example |
|---|---|---|
file_name() |
A file name | off.png |
file_extension() |
A file extension | png |
file_path() |
A file path | /case/off.png |
mime_type() |
A media type | message/imdn+xml |
unix_device() |
A device path | /dev/sds |
unix_partition() |
A partition path | /dev/sds8 |
User agents¶
Text.
| Method | Makes | Example |
|---|---|---|
user_agent() |
A browser user-agent string | Mozilla/5.0 (Android 1.6; Mobile; rv:39.0) Ge... |
chrome() |
A Chrome user-agent | Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 lik... |
firefox() |
A Firefox user-agent | Mozilla/5.0 (Android 1.6; Mobile; rv:39.0) Ge... |
safari() |
A Safari user-agent | Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1 like ... |
opera() |
An Opera user-agent | Opera/9.90.(Windows NT 6.0; si-LK) Presto/2.9... |
internet_explorer() |
An Internet Explorer user-agent | Mozilla/5.0 (compatible; MSIE 6.0; Windows NT... |
android_platform_token() |
An Android platform token | Android 4.0.2 |
ios_platform_token() |
An iOS platform token | iPhone; CPU iPhone OS 17_4_1 like Mac OS X |
linux_platform_token() |
A Linux platform token | X11; Linux i686 |
mac_platform_token() |
A Mac platform token | Macintosh; PPC Mac OS X 10_7_5 |
windows_platform_token() |
A Windows platform token | Windows CE |
linux_processor() |
A Linux processor name | i686 |
mac_processor() |
A Mac processor name | PPC |
Symbols¶
Text.
| Method | Makes | Example |
|---|---|---|
emoji() |
An emoji | 🧑🏽🎨 |
Other single values¶
Text unless noted.
| Method | Makes | Example |
|---|---|---|
coordinate() |
One coordinate in degrees (number) | -52.243713 |
military_apo() |
A military post office address | PSC 3982, Box 5979 |
passport_dob() |
A date of birth for a passport (date) | 1938-05-14 |
passport_full() |
A passport's fields on separate lines | Jacqueline / Munoz / F / 14 May 1938 / 17 Mar... |
password(length=12) |
A random password | FWe$!n759MRN |
pystr_format() |
A string of letters and digits in a fixed shape | E8-2593898L |
random_element(elements=('new', 'paid', 'shipped')) |
One value from a list you give | new |
date_between_dates(date_start=datetime.date(2024,1,1), date_end=datetime.date(2024,12,31)) |
A date between two dates you give | 2024-03-27 |
date_time_between_dates(datetime_start=datetime.datetime(2024,1,1), datetime_end=datetime.datetime(2024,12,31)) |
A timestamp between two timestamps you give | 2024-03-27 20:34:12 |
json() |
A JSON document of sample records as text | [{"name": "Joshua Wood", "residency": "074 Ja... |
csv() |
Sample records as comma-separated text | "Joshua Wood","074 James Stravenue / Weaversi... |
tsv() |
Sample records as tab-separated text | "Joshua Wood" "074 James Stravenue / Weaversi... |
psv() |
Sample records as pipe-separated text | "Joshua Wood"|"074 James Stravenue / Weaversi... |
dsv() |
Sample records as delimiter-separated text | "Joshua Wood","074 James Stravenue / Weaversi |
fixed_width() |
Sample records in fixed-width columns as text | Joshua Wood 19 / Kevin Jacobs ... |
| ### Methods that make several values |
These methods make a list or a pair. Provisa shows the list as one text, joined by line for paragraphs and texts, by space for the others, and with no separator for random_letters. A currency or cryptocurrency shows its code.
| Method | Shows | Example |
|---|---|---|
cryptocurrency() |
A cryptocurrency's code | NMC |
currency() |
A currency's code | IDR |
get_words_list() |
The whole word list, joined by spaces | a ability able about above accept according account acros... |
nic_handles() |
Network information centre handles, joined by spaces | MA93682-EQJO |
paragraphs() |
Paragraphs, one per line | Name have page personal assume actually study else. Court... |
random_choices(elements=('a', 'b', 'c')) |
Elements drawn with repeats, joined by spaces | c |
random_elements(elements=('a', 'b', 'c')) |
Elements drawn, joined by spaces | c |
random_letters() |
Random letters run together | mCtFGdaRnmZyRyHh |
random_sample(elements=('a', 'b', 'c')) |
A sample of elements, joined by spaces | c |
sentences() |
Sentences, joined by spaces | Or candidate trouble listen ok. Actually study else docto... |
texts() |
Blocks of text, one per line | Name have page personal assume actually study else. Court... |
words() |
Words, joined by spaces | draw name have |
Methods no column can declare¶
These 29 methods make bytes, several values at once (a coordinate pair is two columns, and Provisa has no point type), structures of mixed values, objects or generators, or need a class argument. Declaring one is refused by name, on every engine: binary, color_hsl, color_hsv, color_rgb, color_rgb_float, enum, image, json_bytes, latlng, local_latlng, location_on_land, passport_dates, passport_owner, profile, pydict, pyiterable, pylist, pyobject, pyset, pystruct, pytimezone, pytuple, simple_profile, tar, time_delta, time_object, time_series, xml, zip.
For a single value from a pair, use the single-value method: latitude or longitude; color or hex_color; first_name or last_name.
Method arguments¶
A method takes the arguments below, by name, and no others. The same arguments work on every engine, which is why any other is refused by name, with the list the method does take. A method not listed takes none.
| Method | Arguments |
|---|---|
bothify |
text, letters |
numerify |
text |
lexify |
text, letters |
hexify |
text, upper |
pyint |
min_value, max_value, step |
random_int |
min, max, step |
random_number |
digits, fix_len |
pyfloat |
left_digits, right_digits, positive, min_value, max_value |
pydecimal |
left_digits, right_digits, positive, min_value, max_value |
pystr |
min_chars, max_chars, prefix, suffix |
password |
length, special_chars, digits, upper_case, lower_case |
nic_handle |
suffix |
nic_handles |
count, suffix |
date |
pattern, end_datetime |
time |
pattern, end_datetime |
date_object |
end_datetime |
date_time |
end_datetime |
date_time_ad |
start_datetime, end_datetime |
iso8601 |
end_datetime, sep |
boolean |
chance_of_getting_true |
pybool |
truth_probability |
random_element |
elements |
date_between |
start_date, end_date |
date_time_between |
start_date, end_date |
date_between_dates |
date_start, date_end |
date_time_between_dates |
datetime_start, datetime_end |
future_date |
end_date |
future_datetime |
end_date |
past_date |
start_date |
past_datetime |
start_date |
date_of_birth |
minimum_age, maximum_age |
date_this_century |
before_today, after_today |
date_this_decade |
before_today, after_today |
date_this_year |
before_today, after_today |
date_this_month |
before_today, after_today |
date_time_this_century |
before_now, after_now |
date_time_this_decade |
before_now, after_now |
date_time_this_year |
before_now, after_now |
date_time_this_month |
before_now, after_now |
unix_time |
start_datetime, end_datetime |
words |
nb, unique |
sentences |
nb |
paragraphs |
nb |
texts |
nb_texts, max_nb_chars |
sentence |
nb_words |
paragraph |
nb_sentences |
text |
max_nb_chars |
random_letters |
length |
random_choices |
elements, length |
random_elements |
elements, length, unique |
random_sample |
elements, length |