Skip to content

Instantly share code, notes, and snippets.

@lmyyao
lmyyao / test_lwe.sage
Last active December 1, 2023 03:33
simple lwe demo
from sage.stats.distributions.discrete_gaussian_lattice import DiscreteGaussianDistributionLatticeSampler
def test_lwe(n, p, sigma, size=100):
F = GF(p)
a = random_vector(F, n)
HALF_P = int(p/2)
s = random_vector(F,n)
p41 = int(p/4)
p43 = int(p*3/4)
D = DiscreteGaussianDistributionLatticeSampler(F^1, sigma)
@lmyyao
lmyyao / kyber.sage
Created November 27, 2023 11:11
kyber kem demo
import numpy as np
P = next_prime(2^256)
N = 64
k = 16
BOUND = 32
HALF_P = int(P/2+0.5)
R.<x> = PolynomialRing(GF(P), 'x')
@lmyyao
lmyyao / pq_search.py
Created August 25, 2023 01:49
product quantization simlarity search demo
from scipy.cluster.vq import vq, kmeans
from scipy.spatial.distance import cdist
import numpy as np
class PQ(object):
def __init__(self, M, k):
self.M = M
self.k = k
def fit(self, vectors, iter=None):
@lmyyao
lmyyao / product_quantization.py
Created August 24, 2023 11:04
product_quantization demo
from scipy.cluster.vq import vq, kmeans
import numpy as np
class PQ(object):
def __init__(self, M, k):
self.M = M
self.k = k
def fit(self, vectors, iter=None):
assert vectors.ndim == 2, "vectors must be 2 dim array"
@lmyyao
lmyyao / kmeans_demo.py
Last active August 24, 2023 08:20
simple kmeans demo
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# https://drive.google.com/file/d/1ZzEouo7lRJvajxK6jLM2K_p9xAwGw1tS/view
df = pd.read_csv("clustering.csv")
k = 3
epoch = 10
@lmyyao
lmyyao / read_csv.py
Last active March 23, 2023 06:11
pandas, polars, pyarrow read_csv from s3
import s3fs
import pandas as pd
import time
import polars
s3conf = dict(
key="<key>",
secret="<secret>",
client_kwargs={"endpoint_url": "<url>"}
)
@lmyyao
lmyyao / regevs.py
Last active November 30, 2023 06:54
Public-Key Encryption from LWE (regevs scheme)
import math
import numpy as np
from sympy import nextprime
def generate_pk_sk(m, n, q):
A = np.random.randint(1, q, size=(m, n))
s = np.random.randint(1, q, n)
low = q // ((4*m) + 1)
e = np.random.randint(-low, low, m)
B = (A @ s + e) % q
@lmyyao
lmyyao / share.py
Created May 21, 2022 11:02
numpy share memory in multiprocessing
import mmap
import numpy as np
import os
import time
rows, cols = 10, 8
mm = mmap.mmap(-1, rows * cols * 8)
a = np.ndarray((rows, cols), dtype=np.int64, buffer=mm)
@lmyyao
lmyyao / client.py
Last active January 28, 2021 03:44
pyarrow server/client tcp demo
import pyarrow as pa
import pyarrow.csv
import socket
def make_endpoint(ip_addr, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip_addr, port))
@lmyyao
lmyyao / docker-compose.yaml
Created January 20, 2021 10:22
traefik tls docker example
version: '3'
services:
traefik:
# The official v2 Traefik docker image
image: traefik:v2.3.5
# Enables the web UI and tells Traefik to listen to docker
command:
- --api.insecure=true
- --providers.docker