# Path: brainforge/llatomic/_llops.py
# @nb.jit("{f2}({f2},{f2},{f1})".format(f1=Xd(1), f2=Xd(2)), nopython=True)
# def dense_forward(X, W, b):
#     return np.dot(X, W) + b
# 
# Path: brainforge/util/typing.py
# def zX(*dims, dtype=floatX):
#     return np.zeros(dims, dtype=dtype)


from ._llops import dense_forward
from brainforge.util.typing import zX


class DenseOp:

    @staticmethod
    def forward(X, W, b=None):
        if b is None:

# Path: brainforge/llatomic/_llops.py
# @nb.jit("{f2}({f2},{f2},{f1})".format(f1=Xd(1), f2=Xd(2)), nopython=True)
# def dense_forward(X, W, b):
#     return np.dot(X, W) + b
# 
# Path: brainforge/util/typing.py
# def zX(*dims, dtype=floatX):
#     return np.zeros(dims, dtype=dtype)


# Path: brainforge/llatomic/llcore_op.py
from ._llops import dense_forward
from brainforge.util.typing import zX



class DenseOp:

    @staticmethod
    def forward(X, W, b=None):
        if b is None:

            b = zX(W.shape[-1])