import torch as t
import numpy as np
import tempfile

ML_PATH = 'federatedml.nn'
LLM_PATH = "fate_llm"
HOMOMODELMETA = "HomoNNMeta"
HOMOMODELPARAM = "HomoNNParam"


def global_seed(seed):

    # set random seed of torch
    t.manual_seed(seed)
    t.cuda.manual_seed_all(seed)
    t.backends.cudnn.deterministic = True


def get_homo_model_dict(param, meta):
    return {HOMOMODELPARAM: param,  # param
            HOMOMODELMETA: meta}  # meta


def get_homo_param_meta(model_dict):
    return model_dict.get(HOMOMODELPARAM), model_dict.get(HOMOMODELMETA)


# read model from model bytes
def recover_model_bytes(model_bytes):
    with tempfile.TemporaryFile() as f:
        f.write(model_bytes)
        f.seek(0)
        model_dict = t.load(f)

    return model_dict


def get_torch_model_bytes(model_dict):

    with tempfile.TemporaryFile() as f:
        t.save(model_dict, f)
        f.seek(0)
        model_saved_bytes = f.read()

        return model_saved_bytes
