Skip to content

Commit

Permalink
feat: simplify project structure
Browse files Browse the repository at this point in the history
  • Loading branch information
julianhoever committed Jun 15, 2023
1 parent f029667 commit 81cbcb3
Show file tree
Hide file tree
Showing 90 changed files with 802 additions and 208 deletions.
8 changes: 5 additions & 3 deletions elasticai/creator/base_modules/layers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Callable, Optional
from typing import Callable, Optional, cast

import torch
from torch.nn.utils.parametrize import register_parametrization
Expand Down Expand Up @@ -104,10 +104,12 @@ def __init__(self, factors=0.5):
self.factors = torch.nn.Parameter(torch.Tensor([factors]), requires_grad=True)

def forward(self, input):
binarize = BinarizeFn.apply
def binarize(x: torch.Tensor) -> torch.Tensor:
return cast(torch.Tensor, BinarizeFn.apply(x))

first_half = binarize(input)
second_half = input - self.factors * binarize(input)
return binarize(torch.cat((first_half, second_half), dim=1))
return binarize(torch.cat([first_half, second_half], dim=1))


def _hook_quantizer(module: torch.nn.Module, quantizer: Module, bias: bool):
Expand Down
2 changes: 1 addition & 1 deletion elasticai/creator/generate_template.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from elasticai.creator.hdl.vhdl.base_template_generator import BaseTemplateGenerator
from elasticai.creator.vhdl.base_template_generator import BaseTemplateGenerator

generator = BaseTemplateGenerator()
print(generator.generate())
1 change: 0 additions & 1 deletion elasticai/creator/hdl/vhdl/code_generation/__init__.py

This file was deleted.

11 changes: 0 additions & 11 deletions elasticai/creator/hdl/vhdl/code_generation/twos_complement.py

This file was deleted.

4 changes: 2 additions & 2 deletions elasticai/creator/in_memory_path.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import Optional

from elasticai.creator.hdl.code_generation.template import Template, TemplateExpander
from elasticai.creator.hdl.savable import File, Path
from elasticai.creator.vhdl.code_generation.template import Template, TemplateExpander
from elasticai.creator.vhdl.savable import File, Path


class InMemoryFile(File):
Expand Down
8 changes: 8 additions & 0 deletions elasticai/creator/nn/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from .batch_normed_linear import FPBatchNormedLinear
from .hard_sigmoid import FPHardSigmoid
from .hard_tanh import FPHardTanh
from .identity import BufferedIdentity, BufferlessIdentity
from .linear import FPLinear
from .precomputed import FPSigmoid, FPTanh
from .relu import FPReLU
from .sequential import Sequential
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.nn.vhdl.linear.design import FPLinear
from elasticai.creator.nn.linear.design import FPLinear
from elasticai.creator.vhdl.translatable import Translatable


class FPBatchNormedLinear(Translatable, torch.nn.Module):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from elasticai.creator.hdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.hdl.code_generation.template import (
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.vhdl.code_generation.template import (
InProjectTemplate,
module_to_package,
)
from elasticai.creator.hdl.design_base.design import Design, Port
from elasticai.creator.hdl.savable import Path
from elasticai.creator.vhdl.design_base.design import Design, Port
from elasticai.creator.vhdl.savable import Path


class FPHardSigmoid(Design):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPHardSigmoid as FPHardSigmoidDesign

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from elasticai.creator.hdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.hdl.code_generation.template import (
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.vhdl.code_generation.template import (
InProjectTemplate,
module_to_package,
)
from elasticai.creator.hdl.design_base.design import Design, Port
from elasticai.creator.hdl.savable import Path
from elasticai.creator.vhdl.design_base.design import Design, Port
from elasticai.creator.vhdl.savable import Path


class FPHardTanh(Design):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPHardTanh as FPHardTanhDesign

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
from elasticai.creator.hdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.hdl.code_generation.code_generation import (
calculate_address_width,
)
from elasticai.creator.hdl.code_generation.template import (
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.vhdl.code_generation.addressable import calculate_address_width
from elasticai.creator.vhdl.code_generation.template import (
InProjectTemplate,
module_to_package,
)
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.design_base.ports import Port
from elasticai.creator.hdl.savable import Path
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.savable import Path


class BufferedIdentity(Design):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from elasticai.creator.base_modules.identity import Identity
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.nn.vhdl.identity.design import BufferedIdentity as IdentityDesign
from elasticai.creator.nn.vhdl.identity.design import BufferlessDesign
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import BufferedIdentity as IdentityDesign
from .design import BufferlessDesign


class BufferedIdentity(Translatable, Identity):
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
from itertools import chain
from typing import Optional

from elasticai.creator.hdl.auto_wire_protocols.port_definitions import (
create_port_for_buffered_design as create_port,
)
from elasticai.creator.hdl.code_generation.template import (
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.vhdl.code_generation.template import (
InProjectTemplate,
module_to_package,
)
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.design_base.ports import Port
from elasticai.creator.hdl.savable import Path
from elasticai.creator.hdl.vhdl.designs.rom import Rom
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.designs.rom import Rom
from elasticai.creator.vhdl.savable import Path


class FPLinear(Design):
@property
def port(self) -> Port:
return self._port

def __init__(
self,
*,
Expand All @@ -35,12 +29,6 @@ def __init__(
super().__init__(
name="fp_linear" if name is None else name,
)
self._port = create_port(
x_width=total_bits,
y_width=total_bits,
x_count=in_feature_num,
y_count=out_feature_num,
)
self.weights = weights
self.bias = bias
self.in_feature_num = in_feature_num
Expand All @@ -52,6 +40,15 @@ def __init__(
self.x_addr_width = self.port["x_address"].width
self.y_addr_width = self.port["y_address"].width

@property
def port(self) -> Port:
return create_port(
x_width=self.data_width,
y_width=self.data_width,
x_count=self.in_feature_num,
y_count=self.out_feature_num,
)

def _template_parameters(self) -> dict[str, str]:
return dict(
(key, str(getattr(self, key)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPLinear as FPLinearDesign

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
from elasticai.creator.base_modules.two_complement_fixed_point_config import (
FixedPointConfig,
)
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.hdl.vhdl.designs.precomputed_monotonic_increasing_scalar_function import (
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.designs.precomputed_monotonic_increasing_scalar_function import (
PrecomputedMonotonicIncreasingScalarFunction,
)
from elasticai.creator.vhdl.translatable import Translatable


class FPPrecomputedMonotonicIncreasingModule(torch.nn.Module, Translatable):
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from elasticai.creator.hdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.hdl.code_generation.template import (
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.vhdl.code_generation.template import (
InProjectTemplate,
module_to_package,
)
from elasticai.creator.hdl.design_base.design import Design, Port
from elasticai.creator.hdl.savable import Path
from elasticai.creator.vhdl.design_base.design import Design, Port
from elasticai.creator.vhdl.savable import Path


class FPReLU(Design):
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from elasticai.creator.base_modules.relu import ReLU
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import FPReLU as FPReLUDesign

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
from functools import partial, reduce
from itertools import chain

from elasticai.creator.hdl.auto_wire_protocols.autowiring import AutoWirer, DataFlowNode
from elasticai.creator.hdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.hdl.code_generation.template import (
InProjectTemplate,
module_to_package,
from elasticai.creator.vhdl.auto_wire_protocols.autowiring import (
AutoWirer,
DataFlowNode,
)
from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.design_base.ports import Port
from elasticai.creator.hdl.savable import Path
from elasticai.creator.hdl.vhdl.code_generation import create_instance
from elasticai.creator.hdl.vhdl.code_generation.code_generation import (
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import create_port
from elasticai.creator.vhdl.code_generation.code_abstractions import (
create_connections_using_to_from_pairs,
create_instance,
create_signal_definitions,
)
from elasticai.creator.vhdl.code_generation.template import (
InProjectTemplate,
module_to_package,
)
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.design_base.ports import Port
from elasticai.creator.vhdl.savable import Path


class Sequential(Design):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@

import torch

from elasticai.creator.hdl.design_base.design import Design
from elasticai.creator.hdl.translatable import Translatable
from elasticai.creator.nn.vhdl.sequential.design import Sequential as _SequentialDesign
from elasticai.creator.vhdl.design_base.design import Design
from elasticai.creator.vhdl.translatable import Translatable

from .design import Sequential as _SequentialDesign


class Sequential(Translatable, torch.nn.Sequential):
Expand Down
8 changes: 0 additions & 8 deletions elasticai/creator/nn/vhdl/__init__.py

This file was deleted.

4 changes: 2 additions & 2 deletions elasticai/creator/on_disk_path.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import os
from pathlib import Path as _PyPath

from elasticai.creator.hdl.code_generation.template import Template, TemplateExpander
from elasticai.creator.hdl.savable import File, Path
from elasticai.creator.vhdl.code_generation.template import Template, TemplateExpander
from elasticai.creator.vhdl.savable import File, Path


class OnDiskFile(File):
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
from typing import Optional, cast

from elasticai.creator.hdl.code_generation.code_generation import (
calculate_address_width,
)
from elasticai.creator.hdl.code_generation.vhdl_ports import (
from elasticai.creator.vhdl.code_generation.addressable import calculate_address_width
from elasticai.creator.vhdl.code_generation.vhdl_ports import (
template_string_for_port_definition,
)
from elasticai.creator.hdl.design_base import std_signals as _signals
from elasticai.creator.hdl.design_base.ports import Port
from elasticai.creator.vhdl.design_base import std_signals as _signals
from elasticai.creator.vhdl.design_base.ports import Port


def create_port(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from elasticai.creator.hdl.auto_wire_protocols.port_definitions import (
from elasticai.creator.vhdl.auto_wire_protocols.port_definitions import (
port_definition_template_for_bufferless_design,
)
from elasticai.creator.hdl.code_generation.template import (
from elasticai.creator.vhdl.code_generation.template import (
InProjectTemplate,
TemplateExpander,
module_to_package,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,3 @@

def calculate_address_width(num_items: int) -> int:
return max(1, math.ceil(math.log2(num_items)))


def to_hex(number: int, bit_width: int) -> str:
return f"{number:0{math.ceil(bit_width / 4)}x}"
Loading

0 comments on commit 81cbcb3

Please sign in to comment.