Files
2026-07-13 13:22:34 +08:00

347 lines
5.8 KiB
Python

import random
import uuid
_EXPERIMENT_ID_FIXED_WIDTH = 18
def _generate_unique_integer_id():
"""Utility function for generating a random fixed-length integer
Args:
id_length: The target length of the string representation of the integer without
leading zeros
Returns:
a fixed-width integer
"""
random_int = uuid.uuid4().int
# Cast to string to get a fixed length
random_str = str(random_int)[-_EXPERIMENT_ID_FIXED_WIDTH:]
# append a random int as string to the end of the generated string for as many
# leading zeros exist in the generated string in order to preserve the total length
# once cast back to int
for s in random_str:
if s == "0":
random_str = random_str + str(random.randint(0, 9))
else:
break
return int(random_str)
def _generate_string(sep, integer_scale):
predicate = random.choice(_GENERATOR_PREDICATES).lower()
noun = random.choice(_GENERATOR_NOUNS).lower()
num = random.randint(0, 10**integer_scale)
return f"{predicate}{sep}{noun}{sep}{num}"
def _generate_random_name(sep="-", integer_scale=3, max_length=20):
"""Helper function for generating a random predicate, noun, and integer combination
Args:
sep: String separator for word spacing.
integer_scale: Dictates the maximum scale range for random integer sampling (power of 10).
max_length: Maximum allowable string length.
Returns:
A random string phrase comprised of a predicate, noun, and random integer.
"""
name = None
for _ in range(10):
name = _generate_string(sep, integer_scale)
if len(name) <= max_length:
return name
# If the combined length isn't below the threshold after 10 iterations, truncate it.
return name[:max_length]
_GENERATOR_NOUNS = [
"ant",
"ape",
"asp",
"auk",
"bass",
"bat",
"bear",
"bee",
"bird",
"boar",
"bug",
"calf",
"carp",
"cat",
"chimp",
"cod",
"colt",
"conch",
"cow",
"crab",
"crane",
"croc",
"crow",
"cub",
"deer",
"doe",
"dog",
"dolphin",
"donkey",
"dove",
"duck",
"eel",
"elk",
"fawn",
"finch",
"fish",
"flea",
"fly",
"foal",
"fowl",
"fox",
"frog",
"gnat",
"gnu",
"goat",
"goose",
"grouse",
"grub",
"gull",
"hare",
"hawk",
"hen",
"hog",
"horse",
"hound",
"jay",
"kit",
"kite",
"koi",
"lamb",
"lark",
"loon",
"lynx",
"mare",
"midge",
"mink",
"mole",
"moose",
"moth",
"mouse",
"mule",
"newt",
"owl",
"ox",
"panda",
"penguin",
"perch",
"pig",
"pug",
"quail",
"ram",
"rat",
"ray",
"robin",
"roo",
"rook",
"seal",
"shad",
"shark",
"sheep",
"shoat",
"shrew",
"shrike",
"shrimp",
"skink",
"skunk",
"sloth",
"slug",
"smelt",
"snail",
"snake",
"snipe",
"sow",
"sponge",
"squid",
"squirrel",
"stag",
"steed",
"stoat",
"stork",
"swan",
"tern",
"toad",
"trout",
"turtle",
"vole",
"wasp",
"whale",
"wolf",
"worm",
"wren",
"yak",
"zebra",
]
_GENERATOR_PREDICATES = [
"abundant",
"able",
"abrasive",
"adorable",
"adaptable",
"adventurous",
"aged",
"agreeable",
"ambitious",
"amazing",
"amusing",
"angry",
"auspicious",
"awesome",
"bald",
"beautiful",
"bemused",
"bedecked",
"big",
"bittersweet",
"blushing",
"bold",
"bouncy",
"brawny",
"bright",
"burly",
"bustling",
"calm",
"capable",
"carefree",
"capricious",
"caring",
"casual",
"charming",
"chill",
"classy",
"clean",
"clumsy",
"colorful",
"crawling",
"dapper",
"debonair",
"dashing",
"defiant",
"delicate",
"delightful",
"dazzling",
"efficient",
"enchanting",
"entertaining",
"enthused",
"exultant",
"fearless",
"flawless",
"fortunate",
"fun",
"funny",
"gaudy",
"gentle",
"gifted",
"glamorous",
"grandiose",
"gregarious",
"handsome",
"hilarious",
"honorable",
"illustrious",
"incongruous",
"indecisive",
"industrious",
"intelligent",
"inquisitive",
"intrigued",
"invincible",
"judicious",
"kindly",
"languid",
"learned",
"legendary",
"likeable",
"loud",
"luminous",
"luxuriant",
"lyrical",
"magnificent",
"marvelous",
"masked",
"melodic",
"merciful",
"mercurial",
"monumental",
"mysterious",
"nebulous",
"nervous",
"nimble",
"nosy",
"omniscient",
"orderly",
"overjoyed",
"peaceful",
"painted",
"persistent",
"placid",
"polite",
"popular",
"powerful",
"puzzled",
"rambunctious",
"rare",
"rebellious",
"respected",
"resilient",
"righteous",
"receptive",
"redolent",
"resilient",
"rogue",
"rumbling",
"salty",
"sassy",
"secretive",
"selective",
"sedate",
"serious",
"shivering",
"skillful",
"sincere",
"skittish",
"silent",
"smiling",
"sneaky",
"sophisticated",
"spiffy",
"stately",
"suave",
"stylish",
"tasteful",
"thoughtful",
"thundering",
"traveling",
"treasured",
"trusting",
"unequaled",
"upset",
"unique",
"unleashed",
"useful",
"upbeat",
"unruly",
"valuable",
"vaunted",
"victorious",
"welcoming",
"whimsical",
"wistful",
"wise",
"worried",
"youthful",
"zealous",
]