Examples
This section provides detailed examples of different ways to use ConditionalArgumentParser.
Basic Usage
This example shows the simplest use case for conditional arguments - adding an argument that only appears when a flag is set.
from conditional_parser import ConditionalArgumentParser
# Create parser
parser = ConditionalArgumentParser(description="A parser with conditional arguments.")
# Add base argument
parser.add_argument("--use-regularization",
default=False,
action="store_true",
help="Uses regularization if included.")
# Add conditional argument
parser.add_conditional(
"use_regularization", # check this argument
True, # when it's True
"--regularizer-lambda", # add this argument
type=float,
default=0.01,
help="The lambda value for the regularizer."
)
Usage Examples:
Without regularization:
$ python script.py
Namespace(use_regularization=False)
With regularization:
$ python script.py --use-regularization --regularizer-lambda 0.1
Namespace(use_regularization=True, regularizer_lambda=0.1)
Error case (trying to set conditional without meeting condition):
$ python script.py --regularizer-lambda 0.1
error: unrecognized arguments: --regularizer-lambda 0.1
Parallel Conditionals
This example demonstrates using multiple conditional arguments in parallel, triggered by different values of the same parent argument.
from conditional_parser import ConditionalArgumentParser
parser = ConditionalArgumentParser()
# Base argument that controls multiple sets of conditionals
parser.add_argument("dataset", type=str,
help="Which dataset to use for training/testing.")
# Dataset1-specific parameters
parser.add_conditional("dataset", "dataset1",
"--dataset1-prm1", type=int,
help="Parameter 1 for dataset1")
parser.add_conditional("dataset", "dataset1",
"--dataset1-prm2", type=int,
help="Parameter 2 for dataset1")
# Dataset2-specific parameters
parser.add_conditional("dataset", "dataset2",
"--dataset2-prmA", type=str,
help="Parameter A for dataset2")
parser.add_conditional("dataset", "dataset2",
"--dataset2-prmB", type=str,
help="Parameter B for dataset2")
# Parameters shared between dataset3 and dataset4
parser.add_conditional("dataset",
lambda d: d in ["dataset3", "dataset4"],
"--datasets34-prmX", type=str,
help="Parameter X for datasets 3 and 4")
Key Features Demonstrated
Multiple conditionals can depend on the same parent argument
Different values of the parent can trigger different conditionals
Lambda functions allow complex conditional logic
Conditionals can be shared across multiple values
Hierarchical Conditionals
This example shows how to create nested conditional arguments, where one conditional argument can trigger additional conditional arguments.
from conditional_parser import ConditionalArgumentParser
parser = ConditionalArgumentParser()
# Top-level argument
parser.add_argument("--use-curriculum",
default=False,
action="store_true",
help="Use curriculum for training.")
# First-level conditional (activated when '--use-curriculum' is set)
parser.add_conditional("use_curriculum", True,
"--curriculum", type=str, required=True,
help="Which curriculum to use")
# Second-level conditional for curriculum1 (activated when '--curriculum' is "curriculum1")
parser.add_conditional("curriculum", "curriculum1",
"--curriculum1-prm1", type=int, required=True,
help="Parameter 1 for curriculum1")
parser.add_conditional("curriculum", "curriculum1",
"--curriculum1-prm2", type=int, required=True,
help="Parameter 2 for curriculum1")
# Second-level conditional for curriculum2 (activated when '--curriculum' is "curriculum2")
parser.add_conditional("curriculum", "curriculum2",
"--curriculum1-prm2", type=int, default=128,
help="Parameter A for curriculum2")
parser.add_conditional("curriculum", "curriculum2",
"--curriculum1-prm2", type=int, default=128,
help="Parameter B for curriculum2")
Understanding the Hierarchy
--use-curriculumis the top-level flagWhen True, it enables the
--curriculumargumentWhen
--curriculumis “curriculum1”, it enables curriculum1-specific parametersWhen
--curriculumis “curriculum2”, it enables curriculum2-specific parameters
This creates a tree of dependencies:
--use-curriculum
└── --curriculum
├── curriculum1
│ ├── --curriculum1-prm1
│ └── --curriculum1-prm2
└── curriculum2
├── --curriculum2-prmA
└── --curriculum2-prmB