import Buffer from '../buffer'

export interface OpNode{
    props: OpProps;
    attrs: OpAttrs;
    inputs: OpEdge[];
    outputs: OpEdge[];
    hostDataOffset:number; //if op exits hostData,we read it by offset
    data: OpData;
}

export interface OpEdge{
    name: string;
    tensorInfo: tensorInfo;
}

export interface OpAttrs{
    [key: string]: any
}

export interface OpProps{
    type: string;
    name: string;
}

export interface OpData {
    [key: string]: opDataInfo;
}

export interface tensorInfo{
    name: string;
    shape: number[];
    precision: number; //0: fp16 1: fp32
    hostData?: number[] | Float32Array; //first put the host weight/bias data in hostData
    deviceData?: Buffer; //if backend if gpu,we will transform hostData to data and release hostData
}

export interface opDataInfo{
    size: number;
    precision: number; //0: fp16 1: fp32
    hostData?: number[] | Float32Array; //first put the host weight/bias data in hostData
    deviceData?: Buffer; //if backend if gpu,we will transform hostData to data and release hostData
}

export interface Model {
    ops: OpNode[];
}

export interface ModelConfig {
    modelPath: string;
    modelName?: string;
    binaryDataName?: string;
}

export enum backend {
    Backend_WebGPU,
}

export interface backend_config {
    backend_: backend;
    precision_:number;
    modelData_:Model;
    debug?: boolean; //printf some log to debug our code
}
