encode

GLEngine.encode(message, level)
리스트 형태의 메시지를 인코딩합니다. 한번에 인코딩 될 수 있는 최대 행렬 형상은 GLEngine.shape로 확인할 수 있습니다. 0번 축의 크기는 더 작을 수 있습니다. 예를 들어 엔진의 형상이 (256, 32, 32) 일 때, (n, 32, 32) 형태의 메시지 중 n <= 256인 경우에는 인코딩이 가능합니다. 메시지의 길이가 최대 형상 크기를 넘어서면 에러가 발생하며, 최대 크기보다 작은 경우에는 0으로 패딩되어서 인코딩 됩니다.
  • 인풋:
    • message: 파이썬 리스트나 numpy 어레이만 받습니다. dtype은 int, double, complex double 모두 가능합니다.
    • level: optional
      • 지정된 경우에는 해당 최대 곱셈 횟수에 필요한 만큼만 인코딩을 합니다. 레벨이 낮을 수록 차지하는 공간이 작지만 최대 곱셈 횟수가 줄어듭니다.
  • 아웃풋:
    • GLPlaintext
import numpy as np

from desilofhe import GLEngine

engine = GLEngine()

message = np.ones(engine.shape)
encoded = engine.encode(message)
from desilofhe import GLEngine

engine = GLEngine()

message = np.ones(engine.shape)
encoded = engine.encode(message, level=3)
import numpy as np

from desilofhe import GLEngine

engine = GLEngine()

# message with smaller batch
message = np.ones(23, 32, 32)
encoded = engine.encode(message)

기본적으로는 encrypt 함수 내부에서 encode 를 처리해주기 때문에 별도로 호출할 필요가 없지만, 같은 메시지를 여러번 다른 연산에서 사용할 경우에는 매번 인코딩하지 않아도 되어서 효율적일 수 있습니다.