build_tools.name_selector.name_class
Name class policy data models and YAML loading.
This module defines the dataclasses for representing name class policies and provides functions to load them from YAML configuration files.
The Name Class Matrix is externalized to data/name_classes.yml, separating policy configuration from code. This enables: - Non-programmers to tune name classes - Version control tracking of policy evolution - Multiple projects sharing the codebase with different policies
Policy Structure
Each name class defines: - description: Human-readable purpose - syllable_range: [min, max] syllables (inclusive) - features: Dict mapping feature names to policy values
Policy values: - “preferred”: Actively sought (+1 score) - “tolerated”: Neutral (0 score) - “discouraged”: Rejected or penalized
Usage
>>> from build_tools.name_selector.name_class import load_name_classes
>>> policies = load_name_classes("data/name_classes.yml")
>>> first_name_policy = policies["first_name"]
>>> first_name_policy.description
'Direct social address. Optimized for addressability and mouth-feel.'
>>> first_name_policy.features["ends_with_vowel"]
'preferred'
Attributes
Classes
Policy configuration for a single name class. |
Functions
|
Load name class policies from a YAML file. |
Get the default path to name_classes.yml. |
Module Contents
- build_tools.name_selector.name_class.PolicyValue
- build_tools.name_selector.name_class.FEATURE_NAMES
- class build_tools.name_selector.name_class.NameClassPolicy[source]
Policy configuration for a single name class.
Defines feature preferences for evaluating name candidates. Policies are loaded from YAML and remain immutable during evaluation.
Attributes
- namestr
Identifier for this name class (e.g., “first_name”, “place_name”).
- descriptionstr
Human-readable description of the name class purpose.
- syllable_rangetuple[int, int]
Allowed syllable count range [min, max], inclusive.
- featuresdict[str, PolicyValue]
Mapping of feature name to policy value (“preferred”, “tolerated”, “discouraged”).
Examples
>>> policy = NameClassPolicy( ... name="first_name", ... description="Direct social address.", ... syllable_range=(2, 3), ... features={"ends_with_vowel": "preferred", "ends_with_stop": "discouraged"}, ... ) >>> policy.features["ends_with_vowel"] 'preferred'
- build_tools.name_selector.name_class.load_name_classes(yaml_path)[source]
Load name class policies from a YAML file.
Parameters
- yaml_pathstr | Path
Path to the name_classes.yml file.
Returns
- dict[str, NameClassPolicy]
Dictionary mapping name class identifiers to their policies.
Raises
- FileNotFoundError
If the YAML file does not exist.
- ValueError
If the YAML structure is invalid or policies fail validation.
Examples
>>> policies = load_name_classes("data/name_classes.yml") >>> "first_name" in policies True >>> policies["first_name"].syllable_range (2, 3)