import operator import torch __all__ = [ 'ELEMENTWISE_MODULE_OP', 'ELEMENTWISE_FUNC_OP', 'RESHAPE_FUNC_OP', 'CONV_MODULE_OP', 'CONV_FUNC_OP', 'LINEAR_MODULE_OP', 'LINEAR_FUNC_OP', 'BATCHNORM_MODULE_OP', 'POOL_MODULE_OP', 'NON_PARAM_FUNC_OP', 'BCAST_FUNC_OP', 'EMBEDDING_MODULE_OP', 'LAYERNORM_MODULE_OP', 'ELEMENTWISE_METHOD_OP', 'RESHAPE_METHOD_OP', 'INFINITY_COST' ] ELEMENTWISE_MODULE_OP = [torch.nn.Dropout, torch.nn.ReLU] ELEMENTWISE_FUNC_OP = [ torch.abs, torch.cos, torch.exp, operator.neg, torch.multiply, torch.nn.functional.relu, torch.nn.functional.dropout, # softmax should not be here torch.nn.functional.softmax ] ELEMENTWISE_METHOD_OP = [ torch.Tensor.to, torch.Tensor.type, # TODO: contiguous maybe need some extra processes. torch.Tensor.contiguous ] RESHAPE_FUNC_OP = [ torch.flatten, torch.reshape, torch.transpose, torch.split, torch.permute, operator.getitem, ] RESHAPE_METHOD_OP = [ torch.Tensor.view, torch.Tensor.unsqueeze, torch.Tensor.split, torch.Tensor.permute, torch.Tensor.transpose, ] BCAST_FUNC_OP = [ torch.add, torch.sub, torch.mul, torch.div, torch.floor_divide, torch.true_divide, operator.add, operator.sub, operator.mul, operator.floordiv, operator.truediv, torch.matmul, operator.pow, torch.pow ] CONV_MODULE_OP = [ torch.nn.Conv1d, torch.nn.Conv2d, torch.nn.Conv3d, torch.nn.ConvTranspose1d, torch.nn.ConvTranspose2d, torch.nn.ConvTranspose3d ] CONV_FUNC_OP = [ torch.conv1d, torch.conv2d, torch.conv3d, torch.conv_transpose1d, torch.conv_transpose2d, torch.conv_transpose3d ] EMBEDDING_MODULE_OP = [torch.nn.modules.sparse.Embedding] LINEAR_MODULE_OP = [torch.nn.Linear] LINEAR_FUNC_OP = [torch.nn.functional.linear, torch.matmul, torch.bmm] BATCHNORM_MODULE_OP = [torch.nn.BatchNorm1d, torch.nn.BatchNorm2d, torch.nn.BatchNorm3d, torch.nn.SyncBatchNorm] LAYERNORM_MODULE_OP = [torch.nn.LayerNorm] POOL_MODULE_OP = [torch.nn.MaxPool1d, torch.nn.MaxPool2d, torch.nn.MaxPool3d, torch.nn.AdaptiveAvgPool2d] NON_PARAM_FUNC_OP = [ torch.flatten, torch.reshape, torch.abs, torch.cos, torch.exp, operator.neg, torch.multiply, torch.nn.functional.relu, torch.nn.functional.dropout, torch.flatten, torch.where, operator.pow, torch.pow, torch.tanh, torch.add, torch.sub, torch.mul, torch.div, torch.floor_divide, torch.true_divide, operator.add, operator.sub, operator.mul, operator.floordiv, operator.truediv, # softmax should not be here torch.nn.functional.softmax ] INFINITY_COST = 1e13