From 2109894a27ad464f53d067c3d90ce71fd5cbdd8d Mon Sep 17 00:00:00 2001 From: Leodanis Pozo Ramos Date: Fri, 16 Oct 2026 10:49:51 +0000 Subject: [PATCH] Sample code for: Pyrefly: A Fast Static Type Checker for Python Projects --- pyrefly-python/README.md | 3 +++ pyrefly-python/aggregations.py | 17 +++++++++++++++++ pyrefly-python/collection_average.py | 13 +++++++++++++ pyrefly-python/incorrect_types.py | 8 ++++++++ pyrefly-python/requirements.txt | 1 + pyrefly-python/untyped.py | 7 +++++++ pyrefly-python/untyped_inferred.py | 7 +++++++ 7 files changed, 56 insertions(+) create mode 100644 pyrefly-python/README.md create mode 100644 pyrefly-python/aggregations.py create mode 100644 pyrefly-python/collection_average.py create mode 100644 pyrefly-python/incorrect_types.py create mode 100644 pyrefly-python/requirements.txt create mode 100644 pyrefly-python/untyped.py create mode 100644 pyrefly-python/untyped_inferred.py diff --git a/pyrefly-python/README.md b/pyrefly-python/README.md new file mode 100644 index 0000000000..6b47ca0814 --- /dev/null +++ b/pyrefly-python/README.md @@ -0,0 +1,3 @@ +# Pyrefly: A Fast Static Type Checker for Python Projects + +This folder provides the code examples for the Real Python tutorial [Pyrefly: A Fast Static Type Checker for Python Projects](https://realpython.com/pyrefly-python/) diff --git a/pyrefly-python/aggregations.py b/pyrefly-python/aggregations.py new file mode 100644 index 0000000000..5f3a0cc528 --- /dev/null +++ b/pyrefly-python/aggregations.py @@ -0,0 +1,17 @@ +from collections.abc import Iterable +from typing import Any + + +def average(numbers: list[int | float]) -> float: + if not numbers: + raise ValueError("average() requires at least one number") + return sum(numbers) / len(numbers) + + +def median(values: Any, sort=False): + values = sorted(values) if sort else values + return values[(len(values) - 1) // 2] + + +def count(values: Iterable[int | None]): + return sum(1 if v is not None else 0 for v in values) diff --git a/pyrefly-python/collection_average.py b/pyrefly-python/collection_average.py new file mode 100644 index 0000000000..a019533a9e --- /dev/null +++ b/pyrefly-python/collection_average.py @@ -0,0 +1,13 @@ +from collections.abc import Collection + + +# A Collection is any object that has a length and can be iterated over +def average(numbers: Collection[int | float]) -> float: + if not numbers: + raise ValueError("average() requires at least one number") + return sum(numbers) / len(numbers) + + +average([1, 2.2, 3]) +average({1, 2.2, 3}) +average((1, 2.2, 3)) diff --git a/pyrefly-python/incorrect_types.py b/pyrefly-python/incorrect_types.py new file mode 100644 index 0000000000..21efbc5125 --- /dev/null +++ b/pyrefly-python/incorrect_types.py @@ -0,0 +1,8 @@ +def average(numbers: list[int | float]) -> float: + if not numbers: + raise ValueError("average() requires at least one number") + return sum(numbers) / len(numbers) + + +average(["a", "b", "c"]) +average(["d", "e", "f"]) diff --git a/pyrefly-python/requirements.txt b/pyrefly-python/requirements.txt new file mode 100644 index 0000000000..f1b0cc5380 --- /dev/null +++ b/pyrefly-python/requirements.txt @@ -0,0 +1 @@ +pyrefly==1.2.0 diff --git a/pyrefly-python/untyped.py b/pyrefly-python/untyped.py new file mode 100644 index 0000000000..a08f5fb2a8 --- /dev/null +++ b/pyrefly-python/untyped.py @@ -0,0 +1,7 @@ +def average(numbers): + if not numbers: + raise ValueError("average() requires at least one number") + return sum(numbers) / len(numbers) + + +average([1, 2.2, 3]) diff --git a/pyrefly-python/untyped_inferred.py b/pyrefly-python/untyped_inferred.py new file mode 100644 index 0000000000..97c62660ad --- /dev/null +++ b/pyrefly-python/untyped_inferred.py @@ -0,0 +1,7 @@ +def average(numbers: list[float | int]) -> float: + if not numbers: + raise ValueError("average() requires at least one number") + return sum(numbers) / len(numbers) + + +average([1, 2.2, 3])