o
�J�h�� �
@ s� d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZmZm Z m
Z
mZmZm
Z
mZmZ ejr5d dlZddlmZ ddlmZ ddlmZmZmZ e
d�Zeeeed f gef Ze
eef ZejZ d
Z!dZ"dZ#d
ee defdd�Z$dedee fdd�Z%dd� Z&eeee eee ee e eef eee ef Z'eeeef d f Z(eeeef Z)G dd� d�Z*de*dee de)de'fdd�Z+e �,d�e+�Z-de*d eded!e(def
d"d#�Z.de*d eded!e(def
d$d%�Z/e �,d&�d'ed(ed)eed f d*ede*f
d+d,��Z0d'ed(ed)eed f de ee*f fd-d.�Z1d e
eee f d'ed/ed!e def
d0d1�Z2d e
eee f d'ed!e defd2d3�Z3d e
eee f d'ed!e defd4d5�Z4d6ed'ede5fd7d8�Z6d9d:� Z7eZ8d ede8fd;d<�Z9d=d>� Z:e �,d&�d'edefd?d@��Z;ej<d ed'edefdAdB��Z=ej<dCedDed'edefdEdB��Z=ej<dCedDedFed'edef
dGdB��Z=ej<dCedDedFedHed'edefdIdB��Z=dJe
eef defdKdB�Z=dS )L� N)�OrderedDict)
�Set�Tuple�List�Dict�Union�Callable�Optional�TypeVar�cast�Any� )�EinopsError)�get_backend)�ParsedExpression� _ellipsis�
AnonymousAxis�Tensor.)�min�max�sum�mean�prod�any�alli����iay���sequence�returnc C s d}| D ]}||9 }q|S )zSminimalistic product that works both with numbers and symbols. Supports empty listsr
� )r �result�elementr r �KC:\pinokio\api\whisper-webui.git\app\env\lib\site-packages\einops\einops.py�_product s
r! �reduction_type�reduced_axesc C sN t |�r|| t|��S |tv sJ �|dkr|�| �std��|�| |t|��S )Nr z5reduce_mean is not available for non-floating tensors)�callable�tuple�_reductionsZ
is_float_type�NotImplementedError�reduce)�tensorr"