code: def forward(self, x):
      xa = x if self.ctx.rank == self.rank_a else None
      xb = x if self.ctx.rank == self.rank_b else None
      s = self.ctx.mpc.sshe.cross_smm(
          ctx=self.ctx,
          group=self.group,
          xa=xa,
          xb=xb,
          wa=self.wa,
          wb=self.wb,
          rank_a=self.rank_a,
          rank_b=self.rank_b,
          phe_cipher=self.phe_cipher,
          precision_bits=self.precision_bits,
      )
      z = 0.25 * s + 0.5
  
      # set backward function
      z.backward = SSHELogisticRegressionLayerBackwardFunction(
          ctx=self.ctx,
          group=self.group,
          rank_a=self.rank_a,
          rank_b=self.rank_b,
          phe_cipher=self.phe_cipher,
          encoder=FixedPointEncoder(self.precision_bits),
          wa=self.wa,
          wb=self.wb,
          dz=z,
          x=x,
      )
      return z
  
imports: import typing
  import torch
  from fate.arch.context import Context
  from fate.arch.protocol.mpc.common.encoding import IgnoreEncodings
  from fate.arch.protocol.mpc.mpc import FixedPointEncoder
  from fate.arch.trace import auto_trace
label_desc: Use image node_id 2 for calling the SSHELogisticRegressionLayer obj's underlying member method code with example usage: obj.forward(x) and returns: z