From 65a07e9331c23e5a106f9f8e1a781a84dd7457ce Mon Sep 17 00:00:00 2001 From: Ben Torvaney Date: Tue, 17 May 2022 12:15:56 +0200 Subject: [PATCH 1/6] Add documentation for functional API enums --- docs/tutorial/parameter-types/enum.md | 13 +++++++++++++ docs_src/parameter_types/enum/tutorial003.py | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 docs_src/parameter_types/enum/tutorial003.py diff --git a/docs/tutorial/parameter-types/enum.md b/docs/tutorial/parameter-types/enum.md index 6af834bf54..5cdbf37ebb 100644 --- a/docs/tutorial/parameter-types/enum.md +++ b/docs/tutorial/parameter-types/enum.md @@ -66,3 +66,16 @@ Training neural network of type: lstm ``` + + +### Functional API + +In order to use an `Enum` created using the functional API, you need to create an enum with string values. + +You also need to supply the default value as a string (not the enum): + +```Python hl_lines="5 9" +{!../docs_src/parameter_types/enum/tutorial003.py!} +``` + +Alternatively, you can create an `Enum` that extends both `str` and `Enum`. In Python 3.11+, there is `enum.StrEnum`. For Python 3.10 or earlier, there is the StrEnum package. diff --git a/docs_src/parameter_types/enum/tutorial003.py b/docs_src/parameter_types/enum/tutorial003.py new file mode 100644 index 0000000000..2b4e7f60d3 --- /dev/null +++ b/docs_src/parameter_types/enum/tutorial003.py @@ -0,0 +1,18 @@ +from enum import Enum + +import typer + +NeuralNetwork = Enum( + "NeuralNetwork", + {k: k for k in ["simple", "conv", "lstm"]} +) + + +def main( + network: NeuralNetwork = typer.Option("simple", case_sensitive=False) +): + typer.echo(f"Training neural network of type: {network.value}") + + +if __name__ == "__main__": + typer.run(main) From e3f2d03773072e99d2f2ceab66d7fa4a22c2edd6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 17 May 2022 10:26:42 +0000 Subject: [PATCH 2/6] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs_src/parameter_types/enum/tutorial003.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/docs_src/parameter_types/enum/tutorial003.py b/docs_src/parameter_types/enum/tutorial003.py index 2b4e7f60d3..66c35ef308 100644 --- a/docs_src/parameter_types/enum/tutorial003.py +++ b/docs_src/parameter_types/enum/tutorial003.py @@ -2,15 +2,10 @@ import typer -NeuralNetwork = Enum( - "NeuralNetwork", - {k: k for k in ["simple", "conv", "lstm"]} -) +NeuralNetwork = Enum("NeuralNetwork", {k: k for k in ["simple", "conv", "lstm"]}) -def main( - network: NeuralNetwork = typer.Option("simple", case_sensitive=False) -): +def main(network: NeuralNetwork = typer.Option("simple", case_sensitive=False)): typer.echo(f"Training neural network of type: {network.value}") From 10c9aa84192342bbd426cd0fb3bfe34a3b0ab70f Mon Sep 17 00:00:00 2001 From: svlandeg Date: Fri, 19 Jul 2024 15:43:07 +0200 Subject: [PATCH 3/6] Move new tutorial file to 004 --- docs_src/parameter_types/enum/tutorial004.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs_src/parameter_types/enum/tutorial004.py b/docs_src/parameter_types/enum/tutorial004.py index e69de29bb2..25dd8c6ecd 100644 --- a/docs_src/parameter_types/enum/tutorial004.py +++ b/docs_src/parameter_types/enum/tutorial004.py @@ -0,0 +1,13 @@ +from enum import Enum + +import typer + +NeuralNetwork = Enum("NeuralNetwork", {k: k for k in ["simple", "conv", "lstm"]}) + + +def main(network: NeuralNetwork = typer.Option("simple", case_sensitive=False)): + typer.echo(f"Training neural network of type: {network.value}") + + +if __name__ == "__main__": + typer.run(main) \ No newline at end of file From 7abe6009c490b5485aadca6771e941ffd0d64e7e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 13:43:20 +0000 Subject: [PATCH 4/6] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs_src/parameter_types/enum/tutorial004.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs_src/parameter_types/enum/tutorial004.py b/docs_src/parameter_types/enum/tutorial004.py index 25dd8c6ecd..66c35ef308 100644 --- a/docs_src/parameter_types/enum/tutorial004.py +++ b/docs_src/parameter_types/enum/tutorial004.py @@ -10,4 +10,4 @@ def main(network: NeuralNetwork = typer.Option("simple", case_sensitive=False)): if __name__ == "__main__": - typer.run(main) \ No newline at end of file + typer.run(main) From 47009811012c3bbde428f863f863389c64fe1e23 Mon Sep 17 00:00:00 2001 From: svlandeg Date: Fri, 19 Jul 2024 15:46:06 +0200 Subject: [PATCH 5/6] Add annotated version --- docs/tutorial/parameter-types/enum.md | 17 ++++++++++++++--- docs_src/parameter_types/enum/tutorial004.py | 2 +- docs_src/parameter_types/enum/tutorial004_an.py | 16 ++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 docs_src/parameter_types/enum/tutorial004_an.py diff --git a/docs/tutorial/parameter-types/enum.md b/docs/tutorial/parameter-types/enum.md index d3dab97d8b..3429e283c1 100644 --- a/docs/tutorial/parameter-types/enum.md +++ b/docs/tutorial/parameter-types/enum.md @@ -142,8 +142,19 @@ In order to use an `Enum` created using the ../docs_src/parameter_types/enum/tutorial004_an.py!} + ``` + +=== "Python 3.7+ non-Annotated" + + !!! tip + Prefer to use the `Annotated` version if possible. + + ```Python hl_lines="5 9" + {!> ../docs_src/parameter_types/enum/tutorial004.py!} + ``` Alternatively, you can create an `Enum` that extends both `str` and `Enum`. In Python 3.11+, there is `enum.StrEnum`. For Python 3.10 or earlier, there is the StrEnum package. diff --git a/docs_src/parameter_types/enum/tutorial004.py b/docs_src/parameter_types/enum/tutorial004.py index 66c35ef308..8aae98c12e 100644 --- a/docs_src/parameter_types/enum/tutorial004.py +++ b/docs_src/parameter_types/enum/tutorial004.py @@ -6,7 +6,7 @@ def main(network: NeuralNetwork = typer.Option("simple", case_sensitive=False)): - typer.echo(f"Training neural network of type: {network.value}") + print(f"Training neural network of type: {network.value}") if __name__ == "__main__": diff --git a/docs_src/parameter_types/enum/tutorial004_an.py b/docs_src/parameter_types/enum/tutorial004_an.py new file mode 100644 index 0000000000..a60ed650e8 --- /dev/null +++ b/docs_src/parameter_types/enum/tutorial004_an.py @@ -0,0 +1,16 @@ +from enum import Enum + +import typer +from typing_extensions import Annotated + +NeuralNetwork = Enum("NeuralNetwork", {k: k for k in ["simple", "conv", "lstm"]}) + + +def main( + network: Annotated[NeuralNetwork, typer.Option(case_sensitive=False)] = "simple", +): + print(f"Training neural network of type: {network.value}") + + +if __name__ == "__main__": + typer.run(main) From b91c009ef485f4e8f0fc2440c4cb9dd361877094 Mon Sep 17 00:00:00 2001 From: svlandeg Date: Fri, 19 Jul 2024 15:53:09 +0200 Subject: [PATCH 6/6] Fix line numbers --- docs/tutorial/parameter-types/enum.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorial/parameter-types/enum.md b/docs/tutorial/parameter-types/enum.md index 3429e283c1..0475386fd5 100644 --- a/docs/tutorial/parameter-types/enum.md +++ b/docs/tutorial/parameter-types/enum.md @@ -144,7 +144,7 @@ You also need to supply the default value as a string (not the enum): === "Python 3.7+" - ```Python hl_lines="14" + ```Python hl_lines="6 10" {!> ../docs_src/parameter_types/enum/tutorial004_an.py!} ``` @@ -153,7 +153,7 @@ You also need to supply the default value as a string (not the enum): !!! tip Prefer to use the `Annotated` version if possible. - ```Python hl_lines="5 9" + ```Python hl_lines="5 8" {!> ../docs_src/parameter_types/enum/tutorial004.py!} ```