code: def __init__(
      self,
      in_channels,
      out_channels,
      kernel_size,
      stride=1,
      padding=0,
      bias=True,
      passport_distribute: Literal["gaussian", "uniform"] = "gaussian",
      passport_mode: Literal["single", "multi"] = "single",
      activation: Literal["relu", "tanh", "sigmoid"] = "relu",
      loc=-1.0,
      scale=1.0,
      low=-1.0,
      high=1.0,
      num_passport=1,
      ae_in=None,
      ae_out=None,
  ):
      super().__init__(
          passport_distribute=passport_distribute,
          passport_mode=passport_mode,
      )
  
      self._num_passport = num_passport
      self._conv = nn.Conv2d(
          in_channels=in_channels,
          out_channels=out_channels,
          kernel_size=kernel_size,
          stride=stride,
          padding=padding,
          bias=bias,
      )
  
      if ae_in is None:
          ae_in = out_channels
      if ae_out is None:
          ae_out = out_channels // 4
      self._init_autoencoder(ae_in, ae_out)
      self._bn = nn.BatchNorm2d(out_channels, affine=False)
      self.set_key(None, None)
      self._loc = loc
      self._scale = scale
      self._low = low
      self._high = high
      if activation is not None:
          self._activation = _get_activation(activation)
      else:
          self._activation = None
  
imports: import random
  import torch
  from torch import nn
  import numpy
  from typing import Literal
label_desc: Use image node_id 1 to create a new ConvPassportBlock object from inherited base classes: PassportBlock with example: obj = ConvPassportBlock(in_channels, out_channels, kernel_size, stride, padding, bias, passport_distribute, passport_mode, activation, loc, scale, low, high, num_passport, ae_in, ae_out)