Skip to content

Formally drop python 3.8 support #2234

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 27 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions onnxscript/_internal/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from __future__ import annotations

import ast
from typing import Any, Optional, Sequence, Set
from collections.abc import Sequence
from typing import Any, Optional

from onnxscript import sourceinfo
from onnxscript._internal import ast_utils
Expand All @@ -15,7 +16,7 @@ def _get_loop_var(for_stmt: ast.For, formatter: sourceinfo.Formatter) -> str:
return for_stmt.target.id


def _used_vars(expr: Optional[ast.expr]) -> Set[str]:
def _used_vars(expr: Optional[ast.expr]) -> set[str]:
"""Return set of all variables used, including function names, in an expression."""
if expr is None:
return set()
Expand All @@ -35,7 +36,7 @@ def _used_vars(expr: Optional[ast.expr]) -> Set[str]:
return result


def _lhs_vars(lhs: ast.expr) -> Set[str]:
def _lhs_vars(lhs: ast.expr) -> set[str]:
"""Return set of assigned variables in the lhs of an assignment statement."""

def get_id(e):
Expand All @@ -49,12 +50,12 @@ def get_id(e):

def assigned_vars(
stmt: ast.stmt | list[ast.stmt], formatter: sourceinfo.Formatter
) -> Set[str]:
) -> set[str]:
"""Return the set of all variables that may be assigned to in an execution of input stmt
or sequence of statements.
"""

def assigned_in_block(block: Sequence[ast.stmt]) -> Set[str]:
def assigned_in_block(block: Sequence[ast.stmt]) -> set[str]:
result: set[Any] = set()
for s in block:
result = result | assigned_vars(s, formatter)
Expand Down Expand Up @@ -90,14 +91,14 @@ def do_liveness_analysis(fun: ast.FunctionDef, formatter: sourceinfo.Formatter):
and `s.live_out`.
"""

def visit(stmt: ast.stmt, live_out: Set[str]) -> Set[str]:
def visit(stmt: ast.stmt, live_out: set[str]) -> set[str]:
stmt.live_out = live_out # type: ignore[attr-defined]
live = do_visit(stmt, live_out)
stmt.live_in = live # type: ignore[attr-defined]
return live

def do_visit(stmt: ast.stmt, live_out: Set[str]) -> Set[str]:
def visitBlock(block: Sequence[ast.stmt], live_out: Set[str]) -> Set[str]:
def do_visit(stmt: ast.stmt, live_out: set[str]) -> set[str]:
def visitBlock(block: Sequence[ast.stmt], live_out: set[str]) -> set[str]:
for s in reversed(block):
live_out = visit(s, live_out)
return live_out
Expand Down Expand Up @@ -165,12 +166,12 @@ def exposed_uses(stmts: Sequence[ast.stmt], formatter: sourceinfo.Formatter):
(in the first statement). Hence x is included in the exposed_uses.
"""

def visitBlock(block: Sequence[ast.stmt], live_out: Set[str]) -> Set[str]:
def visitBlock(block: Sequence[ast.stmt], live_out: set[str]) -> set[str]:
for stmt in reversed(block):
live_out = visit(stmt, live_out)
return live_out

def visit(stmt: ast.stmt, live_out: Set[str]) -> Set[str]:
def visit(stmt: ast.stmt, live_out: set[str]) -> set[str]:
if isinstance(stmt, ast.Assign):
return live_out.difference(_lhs_vars(stmt.targets[0])) | _used_vars(stmt.value)
if isinstance(stmt, ast.AnnAssign):
Expand Down
3 changes: 2 additions & 1 deletion onnxscript/_internal/autocast.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@

from __future__ import annotations

from typing import TYPE_CHECKING, Any, Callable, Optional, Sequence
from collections.abc import Sequence
from typing import TYPE_CHECKING, Any, Callable, Optional

import numpy as np
import onnx
Expand Down
4 changes: 3 additions & 1 deletion onnxscript/_internal/param_manipulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
from __future__ import annotations

import collections
from typing import Any, OrderedDict, Sequence
from collections import OrderedDict
from collections.abc import Sequence
from typing import Any

from onnxscript import values

Expand Down
4 changes: 0 additions & 4 deletions onnxscript/_internal/runtime_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@

checked = typing.cast(typing.Callable[[T], T], _beartype_decorator)

# Beartype warns when we import from typing because the types are deprecated
# in Python 3.9. But there will be a long time until we can move to using
# the native container types for type annotations (when 3.9 is the lowest
# supported version). So we silence the warning.
warnings.filterwarnings(
"ignore",
category=_roar.BeartypeDecorHintPep585DeprecationWarning,
Expand Down
3 changes: 2 additions & 1 deletion onnxscript/_internal/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from __future__ import annotations

import numbers
from typing import Optional, Sequence
from collections.abc import Sequence
from typing import Optional

import numpy as np
import onnx
Expand Down
3 changes: 2 additions & 1 deletion onnxscript/_internal/version_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
from __future__ import annotations

import warnings
from typing import Callable, Sequence
from collections.abc import Sequence
from typing import Callable

import packaging.version

Expand Down
6 changes: 3 additions & 3 deletions onnxscript/_legacy_ir/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import dataclasses
from collections import deque
from typing import List, Tuple, Union
from typing import Union

import numpy as np
import onnx
Expand Down Expand Up @@ -47,9 +47,9 @@ def __init__(self) -> None:
# TODO: Technically, SymbolicValue should be a recursive type to handle lists of lists of
# tensors, etc. However, we currently only handle lists of tensors.

SymbolicValue = Union[str, List[str]]
SymbolicValue = Union[str, list[str]]

FunctionId = Tuple[str, str, str]
FunctionId = tuple[str, str, str]


def get_function_id(function: onnx.FunctionProto) -> FunctionId:
Expand Down
3 changes: 2 additions & 1 deletion onnxscript/_legacy_ir/visitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

import dataclasses
import logging
from typing import Any, Sequence
from collections.abc import Sequence
from typing import Any

import numpy as np
import onnx
Expand Down
2 changes: 1 addition & 1 deletion onnxscript/_thirdparty/asciichartpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@

from __future__ import annotations

from collections.abc import Mapping
from math import ceil, floor, isnan
from typing import Mapping

black = "\033[30m"
red = "\033[31m"
Expand Down
2 changes: 1 addition & 1 deletion onnxscript/backend/onnx_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import os
import textwrap
from typing import Iterator
from collections.abc import Iterator

import numpy as np
import onnx
Expand Down
3 changes: 2 additions & 1 deletion onnxscript/backend/onnx_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# Licensed under the MIT License.
from __future__ import annotations

from typing import Any, Optional, Sequence
from collections.abc import Sequence
from typing import Any, Optional

import numpy
import onnx
Expand Down
2 changes: 1 addition & 1 deletion onnxscript/backend/onnx_export_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import re
import sys
import unittest
from typing import Pattern
from re import Pattern

import onnx
import onnxruntime as ort
Expand Down
35 changes: 10 additions & 25 deletions onnxscript/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,12 @@

import ast
import logging
from collections.abc import Sequence
from typing import (
TYPE_CHECKING,
Any,
Dict,
List,
NoReturn,
Optional,
Sequence,
Tuple,
Union,
)

Expand Down Expand Up @@ -178,11 +175,11 @@ def __init__(
self.default_opset_ = default_opset

# States initialized by `_init_function_translation`
self._outer: List[irbuilder.IRFunction] = []
self._outer: list[irbuilder.IRFunction] = []
self._current_fn: irbuilder.IRFunction = None
self._nextvar: int = 0
self._used_vars: set[str] = set()
self._locals: List[Dict[str, LocalSymValue]] = [{}]
self._locals: list[dict[str, LocalSymValue]] = [{}]

@property
def default_opset(self) -> values.Opset:
Expand Down Expand Up @@ -230,7 +227,7 @@ def _init_function_translation(self) -> None:
self._current_fn: Optional[irbuilder.IRFunction] = None
self._nextvar = 0
self._used_vars = set()
self._locals: List[Dict[str, LocalSymValue]] = [{}]
self._locals: list[dict[str, LocalSymValue]] = [{}]

def _source_of(self, node: ast.AST) -> sourceinfo.SourceInfo:
return sourceinfo.SourceInfo(node, self.source, self._current_fn.name)
Expand Down Expand Up @@ -269,7 +266,7 @@ def _exit_scope(self) -> irbuilder.IRFunction:
self._locals.pop(0)
return graph

def _current_scope(self) -> Dict[str, LocalSymValue]:
def _current_scope(self) -> dict[str, LocalSymValue]:
return self._locals[0]

def _bind(self, name: str, val: LocalSymValue) -> None:
Expand Down Expand Up @@ -528,12 +525,7 @@ def _translate_attr(
return attr

def _translate_docstring(self, node: ast.Expr) -> None:
if hasattr(node.value, "value"):
# python 3.8+
return self.ir_builder.add_docstring(self._current_fn, node.value.value)
raise TypeError(
f"Unexpected type {type(node)!r} for node. Unsupoorted version of python."
)
return self.ir_builder.add_docstring(self._current_fn, node.value.value)

def _translate_expr(
self, node: ast.AST, target: Optional[PreferredName] = None
Expand Down Expand Up @@ -697,9 +689,9 @@ def translate_slice(slice_expr: ast.Slice) -> tuple[str, str, str]:

# As the first step, we partition the index elements into four kinds: Slice (eg., 1:5:2),
# known-to-be-scalar (eg., 2), other-tensor (eg., I), skip/no-op (that is, just ":")
sliced_indices: List[Tuple[int, ast.expr]] = []
scalar_indices: List[Tuple[int, ast.expr]] = []
non_scalar_indices: List[Tuple[int, ast.expr]] = []
sliced_indices: list[tuple[int, ast.expr]] = []
scalar_indices: list[tuple[int, ast.expr]] = []
non_scalar_indices: list[tuple[int, ast.expr]] = []
for axis, elt in enumerate(indices):
if isinstance(elt, ast.Slice):
# Add to sliced_indices, unless it is "::", which is a no-op.
Expand Down Expand Up @@ -870,14 +862,7 @@ def _translate_unary_op_expr(self, node):
# should intercept this call and replace node
# by node.operand.
# This mechanism does not handle somthing like `(-(-5))`.
if hasattr(node.operand, "value"):
# python 3.8+
val = node.operand.value
else:
raise TypeError(
f"Unable to guess constant value from type {type(node.operand)!r} "
f"and attributes {dir(node.operand)!r}."
)
val = node.operand.value
if op == ast.USub:
cst = ast.Constant(-val, lineno=node.lineno, col_offset=node.col_offset)
return self._translate_expr(cst)
Expand Down
3 changes: 1 addition & 2 deletions onnxscript/evaluator.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
import abc
import contextlib
import pprint
from collections.abc import Mapping, Sequence
from typing import (
Any,
Callable,
Mapping,
Optional,
Protocol,
Sequence,
TypeVar,
Union,
runtime_checkable,
Expand Down
21 changes: 11 additions & 10 deletions onnxscript/function_libs/tools/torch_lib/deduce_type_constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import copy
import dataclasses
import logging
from typing import Dict, Mapping, Optional, Sequence, Set
from collections.abc import Mapping, Sequence
from typing import Optional

import onnx
import onnx.defs
Expand Down Expand Up @@ -47,10 +48,10 @@ class TypeConstraint:
"""Type constraint shared by multiple values."""

name: str
type_strs: Set[str]
values: Set[Value]
type_strs: set[str]
values: set[Value]

def __init__(self, name: str, type_strs: Set[str]):
def __init__(self, name: str, type_strs: set[str]):
self.name = name
self.type_strs = type_strs
self.values = set()
Expand Down Expand Up @@ -125,9 +126,9 @@ def __repr__(self) -> str:

@dataclasses.dataclass
class OnnxFunctionTypeConstraints:
input_type_constraints: Dict[str, Optional[TypeConstraint]]
output_type_constraints: Dict[str, Optional[TypeConstraint]]
intermediate_type_constraints: Dict[str, Optional[TypeConstraint]]
input_type_constraints: dict[str, Optional[TypeConstraint]]
output_type_constraints: dict[str, Optional[TypeConstraint]]
intermediate_type_constraints: dict[str, Optional[TypeConstraint]]

def __repr__(self):
repr_strs = [
Expand Down Expand Up @@ -190,7 +191,7 @@ def __repr__(self):
class TypeConstraintDeducer:
def __init__(self, onnx_function: onnxscript.OnnxFunction):
self.onnx_function = onnx_function
self.values: Dict[str, Value] = {}
self.values: dict[str, Value] = {}

def type_constraints(self, signature_only: bool = True) -> OnnxFunctionTypeConstraints:
"""Retrieve deduced type constraints for the ONNX function."""
Expand All @@ -210,7 +211,7 @@ def type_constraints(self, signature_only: bool = True) -> OnnxFunctionTypeConst
)

# Rename type constraints to T0, T1, T2, ...
seen_type_constraints: Set[TypeConstraint] = set()
seen_type_constraints: set[TypeConstraint] = set()
for type_constraint in (
*input_type_constraints.values(),
*output_type_constraints.values(),
Expand Down Expand Up @@ -250,7 +251,7 @@ def _bind_signature(
node: onnx.NodeProto,
param_names: Sequence[str],
param_schemas: Sequence[onnx.defs.OpSchema.FormalParameter],
op_type_constraints: Dict[str, TypeConstraint],
op_type_constraints: dict[str, TypeConstraint],
is_output: bool = False,
):
param_schemas = list(param_schemas)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import inspect
import logging
import unittest
from typing import Generator
from collections.abc import Generator

import parameterized

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
import os
import textwrap
import typing
from typing import Any, Sequence
from collections.abc import Sequence
from typing import Any

import torchgen.gen
import torchgen.model
Expand Down
Loading
Loading