import sys
import asyncio
-from typing import Any, Awaitable, Generator, Optional, Union, TypeVar
+from typing import Any, Awaitable, Generator, Optional, Sequence, Union, TypeVar
if sys.version_info >= (3, 8):
from typing import Protocol
if sys.version_info >= (3, 8):
create_task = asyncio.create_task
+ from math import prod
else:
) -> "asyncio.Future[T]":
return asyncio.create_task(coro)
+ from functools import reduce
+
+ def prod(seq: Sequence[int]) -> int:
+ return reduce(int.__mul__, seq, 1)
+
if sys.version_info >= (3, 9):
from zoneinfo import ZoneInfo
"ZoneInfo",
"cache",
"create_task",
+ "prod",
]
import re
import struct
-from math import prod
from typing import Any, cast, Callable, List, Optional, Pattern, Set, Tuple, Type
from .. import pq
from .. import postgres
from ..abc import AdaptContext, Buffer, Dumper, DumperKey, NoneType, LoadFunc
from ..adapt import RecursiveDumper, RecursiveLoader, PyFormat
-from .._compat import cache
+from .._compat import cache, prod
from .._struct import pack_len, unpack_len
from ..postgres import TEXT_OID, INVALID_OID
from .._typeinfo import TypeInfo
-from math import prod
from typing import List, Any
from decimal import Decimal
from psycopg import sql
from psycopg.adapt import PyFormat, Transformer, Dumper
from psycopg.types import TypeInfo
+from psycopg._compat import prod
from psycopg.postgres import types as builtins