def forward(self, input):
    return None

def eqBool(self, input: bool) -> bool:
    return input

def eqInt(self, input: int) -> int:
    return input

def eqFloat(self, input: float) -> float:
    return input

def eqStr(self, input: str) -> str:
    return input

def eqTensor(self, input: Tensor) -> Tensor:
    return input

def eqDictStrKeyIntValue(self, input: Dict[str, int]) -> Dict[str, int]:
    return input

def eqDictIntKeyIntValue(self, input: Dict[int, int]) -> Dict[int, int]:
    return input

def eqDictFloatKeyIntValue(self, input: Dict[float, int]) -> Dict[float, int]:
    return input

def listIntSumReturnTuple(self, input: List[int]) -> Tuple[List[int], int]:
    sum = 0
    for x in input:
        sum += x
    return (input, sum)

def listBoolConjunction(self, input: List[bool]) -> bool:
    res = True
    for x in input:
        res = res and x
    return res

def listBoolDisjunction(self, input: List[bool]) -> bool:
    res = False
    for x in input:
        res = res or x
    return res

def tupleIntSumReturnTuple(self, input: Tuple[int, int, int]) -> Tuple[Tuple[int, int, int], int]:
    sum = 0
    for x in input:
        sum += x
    return (input, sum)

def optionalIntIsNone(self, input: Optional[int]) -> bool:
    return input is None

def intEq0None(self, input: int) -> Optional[int]:
    if input == 0:
        return None
    return input

def str3Concat(self, input: str) -> str:
    return input + input + input

def newEmptyShapeWithItem(self, input):
    return torch.tensor([int(input.item())])[0]

def testAliasWithOffset(self) -> List[Tensor]:
    x = torch.tensor([100, 200])
    a = [x[0], x[1]]
    return a

def testNonContiguous(self):
    x = torch.tensor([100, 200, 300])[::2]
    assert not x.is_contiguous()
    assert x[0] == 100
    assert x[1] == 300
    return x

def conv2d(self, x: Tensor, w: Tensor, toChannelsLast: bool) -> Tensor:
    r = torch.conv2d(x, w)
    if (toChannelsLast):
        # memory_format=torch.channels_last
        r = r.contiguous(memory_format=2)
    else:
        r = r.contiguous()
    return r

def conv3d(self, x: Tensor, w: Tensor, toChannelsLast: bool) -> Tensor:
    r = torch.conv3d(x, w)
    if (toChannelsLast):
        # memory_format=torch.channels_last_3d
        r = r.contiguous(memory_format=2)
    else:
        r = r.contiguous()
    return r

def contiguous(self, x: Tensor) -> Tensor:
    return x.contiguous()

def contiguousChannelsLast(self, x: Tensor) -> Tensor:
    # memory_format=torch.channels_last
    return x.contiguous(memory_format=2)

def contiguousChannelsLast3d(self, x: Tensor) -> Tensor:
    # memory_format=torch.channels_last_3d
    return x.contiguous(memory_format=3)
