code: def encode(self, frame: Frame) -> Frame:
          
          # Skip control frames.
          if frame.opcode in CTRL_OPCODES:
              return frame
  
          # Since we always encode and never fragment messages, there's no logic
          # similar to decode() here at this time.
  
          if frame.opcode != OP_CONT:
              # Re-initialize per-message decoder.
              if self.local_no_context_takeover:
                  self.encoder = zlib.compressobj(
                      wbits=-self.local_max_window_bits, **self.compress_settings
                  )
  
          # Compress data frames.
          data = self.encoder.compress(frame.data) + self.encoder.flush(zlib.Z_SYNC_FLUSH)
          if frame.fin and data.endswith(_EMPTY_UNCOMPRESSED_BLOCK):
              data = data[:-4]
  
          # Allow garbage collection of the encoder if it won't be reused.
          if frame.fin and self.local_no_context_takeover:
              del self.encoder
  
          return frame._replace(data=data, rsv1=True)
docs: Encode an outgoing frame.