diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a1d6f179bf3f50fcd12c407d65b040d41bb7b0bf..0decc26863e234161203286245e88cfe4cc7422a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,3 +13,8 @@ repos: rev: 22.10.0 hooks: - id: black +- repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + name: isort (python) diff --git a/b_asic/GUI/arrow.py b/b_asic/GUI/arrow.py index dfc4cd59ba3a5d8902cdcd601260df1b8319a81c..d2bdfe0af04a3e5f0d7ab63ec21528687ca26c4e 100644 --- a/b_asic/GUI/arrow.py +++ b/b_asic/GUI/arrow.py @@ -1,5 +1,5 @@ from qtpy.QtCore import QPointF -from qtpy.QtGui import QPen, QPainterPath +from qtpy.QtGui import QPainterPath, QPen from qtpy.QtWidgets import QGraphicsPathItem, QMenu from b_asic.GUI._preferences import GRID, LINECOLOR, PORTHEIGHT, PORTWIDTH diff --git a/b_asic/GUI/drag_button.py b/b_asic/GUI/drag_button.py index 495291a3a859b6dfc71a9a3b24edd4e25cc0c39d..09184d177b0e7bd7afc3e47bc02434918a27e9d7 100644 --- a/b_asic/GUI/drag_button.py +++ b/b_asic/GUI/drag_button.py @@ -10,9 +10,6 @@ from qtpy.QtCore import QSize, Qt, Signal from qtpy.QtGui import QIcon from qtpy.QtWidgets import QAction, QMenu, QPushButton -from b_asic.GUI.port_button import PortButton -from b_asic.GUI.properties_window import PropertiesWindow -from b_asic.GUI.utils import decorate_class, handle_error from b_asic.GUI._preferences import ( GAP, GRID, @@ -20,6 +17,9 @@ from b_asic.GUI._preferences import ( PORTHEIGHT, PORTWIDTH, ) +from b_asic.GUI.port_button import PortButton +from b_asic.GUI.properties_window import PropertiesWindow +from b_asic.GUI.utils import decorate_class, handle_error from b_asic.port import InputPort @@ -153,9 +153,7 @@ class DragButton(QPushButton): path_to_image = os.path.join( os.path.dirname(__file__), "operation_icons", - ( - f"{self.operation.type_name().lower()}{'_grey.png' if self.pressed else '.png'}" - ), + f"{self.operation.type_name().lower()}{'_grey.png' if self.pressed else '.png'}", ) self.setIcon(QIcon(path_to_image)) self.setIconSize(QSize(MINBUTTONSIZE, MINBUTTONSIZE)) diff --git a/b_asic/GUI/main_window.py b/b_asic/GUI/main_window.py index f231a4d73b154765034556c57cba3fdbd07f5b0e..0a9cc98258b9d6304ea0a4e3d5837921c32782d5 100644 --- a/b_asic/GUI/main_window.py +++ b/b_asic/GUI/main_window.py @@ -28,17 +28,12 @@ from qtpy.QtWidgets import ( import b_asic.core_operations import b_asic.special_operations +from b_asic.GUI._preferences import GAP, GRID, MINBUTTONSIZE, PORTHEIGHT from b_asic.GUI.about_window import AboutWindow, FaqWindow, KeybindsWindow from b_asic.GUI.arrow import Arrow from b_asic.GUI.drag_button import DragButton from b_asic.GUI.gui_interface import Ui_main_window from b_asic.GUI.select_sfg_window import SelectSFGWindow -from b_asic.GUI._preferences import ( - GAP, - GRID, - MINBUTTONSIZE, - PORTHEIGHT, -) from b_asic.GUI.show_pc_window import ShowPCWindow from b_asic.GUI.simulate_sfg_window import Plot, SimulateSFGWindow from b_asic.GUI.utils import decorate_class, handle_error diff --git a/b_asic/operation.py b/b_asic/operation.py index ecedacef101c6ebcbe170d48609e15fb7cc56aee..3da6e4ab53792605658c28b39b77e6c9cfa02423 100644 --- a/b_asic/operation.py +++ b/b_asic/operation.py @@ -9,6 +9,7 @@ import itertools as it from abc import abstractmethod from numbers import Number from typing import ( + TYPE_CHECKING, Any, Dict, Iterable, @@ -20,7 +21,6 @@ from typing import ( Sequence, Tuple, Union, - TYPE_CHECKING, ) from b_asic.graph_component import ( @@ -32,15 +32,14 @@ from b_asic.graph_component import ( from b_asic.port import InputPort, OutputPort, SignalSourceProvider from b_asic.signal import Signal - if TYPE_CHECKING: # Conditionally imported to avoid circular imports from b_asic.core_operations import ( Addition, - Subtraction, - Multiplication, ConstantMultiplication, Division, + Multiplication, + Subtraction, ) from b_asic.signal_flow_graph import SFG diff --git a/b_asic/schedule.py b/b_asic/schedule.py index 3a4f0f7bbb5bcb8e1a3aaedaa8b7416adfee0448..e76fcccdc35f157fc75d48d3952d1c53391b37e1 100644 --- a/b_asic/schedule.py +++ b/b_asic/schedule.py @@ -7,14 +7,14 @@ Contains the schedule class for scheduling operations in an SFG. import io import sys from collections import defaultdict -from typing import cast, Dict, List, Optional, Tuple +from typing import Dict, List, Optional, Tuple, cast import matplotlib.pyplot as plt +import numpy as np from matplotlib.lines import Line2D from matplotlib.patches import PathPatch, Polygon from matplotlib.path import Path from matplotlib.ticker import MaxNLocator -import numpy as np from b_asic import Signal from b_asic._preferences import ( @@ -30,7 +30,6 @@ from b_asic.process import MemoryVariable, Process from b_asic.signal_flow_graph import SFG from b_asic.special_operations import Delay, Output - _EXECUTION_TIME_COLOR = tuple(c / 255 for c in EXECUTION_TIME_COLOR) _LATENCY_COLOR = tuple(c / 255 for c in LATENCY_COLOR) _SIGNAL_COLOR = tuple(c / 255 for c in SIGNAL_COLOR) diff --git a/b_asic/scheduler_gui/__init__.py b/b_asic/scheduler_gui/__init__.py index b0b416cacb5fa920c16ed06af6b0c3689e83d3af..ada1c2c7cc2ed9a9fe7f5b9b42c7b6d2bb899632 100644 --- a/b_asic/scheduler_gui/__init__.py +++ b/b_asic/scheduler_gui/__init__.py @@ -6,12 +6,11 @@ Graphical user interface for B-ASIC scheduler. __author__ = "Andreas Bolin" # __all__ = ['main_window', 'graphics_graph', 'component_item', 'graphics_axes', 'graphics_timeline_item'] from b_asic.scheduler_gui._version import * - from b_asic.scheduler_gui.axes_item import * +from b_asic.scheduler_gui.logger import * +from b_asic.scheduler_gui.main_window import * from b_asic.scheduler_gui.operation_item import * from b_asic.scheduler_gui.scheduler_event import * from b_asic.scheduler_gui.scheduler_item import * from b_asic.scheduler_gui.signal_item import * from b_asic.scheduler_gui.timeline_item import * -from b_asic.scheduler_gui.logger import * -from b_asic.scheduler_gui.main_window import * diff --git a/b_asic/scheduler_gui/compile.py b/b_asic/scheduler_gui/compile.py index 4c24f939e287062d2f3b5499afb4061202abba98..473526f01243ba30403d7719f3f0b1f0cd74077b 100644 --- a/b_asic/scheduler_gui/compile.py +++ b/b_asic/scheduler_gui/compile.py @@ -7,12 +7,13 @@ If no arguments is given, the compiler search for and compiles all form (.ui) files. """ -from qtpy import uic -import sys +import argparse import os import shutil import subprocess -import argparse +import sys + +from qtpy import uic from setuptools_scm import get_version try: diff --git a/b_asic/signal_flow_graph.py b/b_asic/signal_flow_graph.py index c52d7dba8fe794436327538e84e0e92f5850599d..af4ae35333c00aacff67829e8b2259736d0a0d5d 100644 --- a/b_asic/signal_flow_graph.py +++ b/b_asic/signal_flow_graph.py @@ -11,7 +11,6 @@ from io import StringIO from numbers import Number from queue import PriorityQueue from typing import ( - cast, DefaultDict, Deque, Dict, @@ -23,6 +22,7 @@ from typing import ( Set, Tuple, Union, + cast, ) from graphviz import Digraph diff --git a/examples/secondorderdirectformiir.py b/examples/secondorderdirectformiir.py index 49cb20d3bee656e51e5de001873a5e32439d6e13..b30f8bf7c15ef0e4639875e005798ce9ca511f25 100644 --- a/examples/secondorderdirectformiir.py +++ b/examples/secondorderdirectformiir.py @@ -12,10 +12,9 @@ IN1>--->C0>--->ADD1>----------+--->A0>--->ADD4>--->OUT1 """ from b_asic.core_operations import Addition, ConstantMultiplication -from b_asic.special_operations import Delay, Input, Output -from b_asic.signal_flow_graph import SFG from b_asic.schedule import Schedule - +from b_asic.signal_flow_graph import SFG +from b_asic.special_operations import Delay, Input, Output in1 = Input("IN1") c0 = ConstantMultiplication(5, in1, "C0") diff --git a/examples/thirdorderblwdf.py b/examples/thirdorderblwdf.py index bc2676d4476081c128c198421c35fc1e0feb9ce3..af59aff9c5e683fec076461a067adc94cd7f5f2e 100644 --- a/examples/thirdorderblwdf.py +++ b/examples/thirdorderblwdf.py @@ -2,10 +2,10 @@ Small bireciprocal lattice wave digital filter. """ from b_asic.core_operations import Addition, SymmetricTwoportAdaptor -from b_asic.special_operations import Delay, Input, Output +from b_asic.schedule import Schedule from b_asic.signal_flow_graph import SFG from b_asic.simulation import Simulation -from b_asic.schedule import Schedule +from b_asic.special_operations import Delay, Input, Output in0 = Input("x") D0 = Delay(in0) @@ -31,8 +31,8 @@ import scipy.signal w, h = scipy.signal.freqz(sim.results['0']) -import numpy as np import matplotlib.pyplot as plt +import numpy as np plt.plot(w, 20 * np.log10(np.abs(h) / 2)) diff --git a/examples/threepointwinograddft.py b/examples/threepointwinograddft.py index 6d81fea8eaa64d1d66949413427bc16481a4ada7..927cc5552a4f9038e977a4ec0a857f99bb644ec9 100644 --- a/examples/threepointwinograddft.py +++ b/examples/threepointwinograddft.py @@ -1,15 +1,16 @@ """Three-point Winograd DFT. """ +from math import cos, pi, sin + from b_asic.core_operations import ( Addition, ConstantMultiplication, Subtraction, ) -from b_asic.special_operations import Input, Output -from b_asic.signal_flow_graph import SFG from b_asic.schedule import Schedule -from math import cos, pi, sin +from b_asic.signal_flow_graph import SFG +from b_asic.special_operations import Input, Output u = -2 * pi / 3 c30 = cos(u) - 1 diff --git a/examples/twotapfirsfg.py b/examples/twotapfirsfg.py index 97d76c3298ebbfba998dca6da9b21de73678cbe1..b172e4fa7bd57f6dc8401d1ec38671bbbf0c685c 100644 --- a/examples/twotapfirsfg.py +++ b/examples/twotapfirsfg.py @@ -1,10 +1,18 @@ - """ B-ASIC automatically generated SFG file. Name: twotapfir Last saved: 2023-01-24 14:38:17.654639. """ -from b_asic import SFG, Signal, Input, Output, ConstantMultiplication, Delay, Input, Output, Addition +from b_asic import ( + SFG, + Addition, + ConstantMultiplication, + Delay, + Input, + Output, + Signal, +) + # Inputs: in1 = Input(name="in1") @@ -13,9 +21,15 @@ out1 = Output(name="") # Operations: t1 = Delay(initial_value=0, name="") -cmul1 = ConstantMultiplication(value=0.5, name="cmul2", latency_offsets={'in0': None, 'out0': None}) -add1 = Addition(name="", latency_offsets={'in0': None, 'in1': None, 'out0': None}) -cmul2 = ConstantMultiplication(value=0.5, name="cmul", latency_offsets={'in0': None, 'out0': None}) +cmul1 = ConstantMultiplication( + value=0.5, name="cmul2", latency_offsets={'in0': None, 'out0': None} +) +add1 = Addition( + name="", latency_offsets={'in0': None, 'in1': None, 'out0': None} +) +cmul2 = ConstantMultiplication( + value=0.5, name="cmul", latency_offsets={'in0': None, 'out0': None} +) # Signals: @@ -28,5 +42,12 @@ Signal(source=cmul2.output(0), destination=add1.input(1)) twotapfir = SFG(inputs=[in1], outputs=[out1], name='twotapfir') # SFG Properties: -prop = {'name':twotapfir} -positions = {'t1': (-209, 19), 'cmul1': (-95, 76), 'add1': (0, 95), 'cmul2': (-209, 114), 'out1': (76, 95), 'in1': (-323, 19)} +prop = {'name': twotapfir} +positions = { + 't1': (-209, 19), + 'cmul1': (-95, 76), + 'add1': (0, 95), + 'cmul2': (-209, 114), + 'out1': (76, 95), + 'in1': (-323, 19), +} diff --git a/pyproject.toml b/pyproject.toml index 07f862a255cd894a0bfdfc0372b705edbb37798d..4f5b7930898b7293f314b7cf2ff3c486d625a61a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,6 +56,13 @@ skip-string-normalization = true preview = true line-length = 79 exclude = [ - "examples", + "test/test_gui" +] + +[tool.isort] +profile = "black" +line_length = 79 +src_paths = ["b_asic", "test"] +skip = [ "test/test_gui" ] diff --git a/setup.py b/setup.py index 0c8ec302250cb891772351d37a005026fb3ebbc8..478976620117a547047ebc80e28b153c51d8d110 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,8 @@ import os -import sys import shutil import subprocess +import sys + import setuptools from setuptools import Extension from setuptools.command.build_ext import build_ext diff --git a/test/conftest.py b/test/conftest.py index baf848e2bcbef8ea877ac8af75ab69cd3204e3b5..179a82c24e7ed3f3fb375fdfa3088a33eac1ef31 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,12 +1,11 @@ +import os +from distutils import dir_util from test.fixtures.operation_tree import * from test.fixtures.port import * from test.fixtures.schedule import * from test.fixtures.signal import signal, signals from test.fixtures.signal_flow_graph import * -from distutils import dir_util -import os - import pytest diff --git a/test/fixtures/schedule.py b/test/fixtures/schedule.py index eb94c96dc5847a2e89e79bac806322a495c02f7e..40b953179eb962a0661efc90ad0befba4cf4bc7c 100644 --- a/test/fixtures/schedule.py +++ b/test/fixtures/schedule.py @@ -1,7 +1,7 @@ -import pytest - from test.fixtures.signal_flow_graph import precedence_sfg_delays +import pytest + from b_asic.core_operations import Addition, ConstantMultiplication from b_asic.schedule import Schedule diff --git a/test/test_gui.py b/test/test_gui.py index 7bf9a424560f1fa40b571f22feb6cfee83ec8837..9f182021b195ec3e2872ea4bf008e0ec8fe0e074 100644 --- a/test/test_gui.py +++ b/test/test_gui.py @@ -1,7 +1,5 @@ -from qtpy import QtCore - - import pytest +from qtpy import QtCore try: import b_asic.GUI as GUI @@ -157,7 +155,9 @@ def test_properties_window_smoke_test(qtbot, datadir): dragbutton = widget.operationDragDict[op] dragbutton.show_properties_window() assert dragbutton._properties_window.operation == dragbutton - qtbot.mouseClick(dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton) + qtbot.mouseClick( + dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton + ) widget.exit_app() @@ -175,7 +175,9 @@ def test_properties_window_change_name(qtbot, datadir): dragbutton.show_properties_window() assert dragbutton._properties_window.edit_name.text() == "cmul2" dragbutton._properties_window.edit_name.setText("cmul73") - qtbot.mouseClick(dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton) + qtbot.mouseClick( + dragbutton._properties_window.ok, QtCore.Qt.MouseButton.LeftButton + ) dragbutton._properties_window.save_properties() assert dragbutton.name == "cmul73" assert dragbutton.operation.name == "cmul73" diff --git a/test/test_gui/twotapfir.py b/test/test_gui/twotapfir.py index c0ab4c540113986e896ebc70196b21496f9290be..e0d7ca6fd9fc3685a961816d84c98744617a9219 100644 --- a/test/test_gui/twotapfir.py +++ b/test/test_gui/twotapfir.py @@ -1,10 +1,18 @@ - """ B-ASIC automatically generated SFG file. Name: twotapfir Last saved: 2023-01-24 14:38:17.654639. """ -from b_asic import SFG, Signal, Input, Output, ConstantMultiplication, Delay, Input, Output, Addition +from b_asic import ( + SFG, + Addition, + ConstantMultiplication, + Delay, + Input, + Output, + Signal, +) + # Inputs: in1 = Input(name="in1") @@ -13,9 +21,15 @@ out1 = Output(name="") # Operations: t1 = Delay(initial_value=0, name="") -cmul1 = ConstantMultiplication(value=-0.5, name="cmul1", latency_offsets={'in0': None, 'out0': None}) -add1 = Addition(name="add1", latency_offsets={'in0': None, 'in1': None, 'out0': None}) -cmul2 = ConstantMultiplication(value=0.5, name="cmul2", latency_offsets={'in0': None, 'out0': None}) +cmul1 = ConstantMultiplication( + value=-0.5, name="cmul1", latency_offsets={'in0': None, 'out0': None} +) +add1 = Addition( + name="add1", latency_offsets={'in0': None, 'in1': None, 'out0': None} +) +cmul2 = ConstantMultiplication( + value=0.5, name="cmul2", latency_offsets={'in0': None, 'out0': None} +) # Signals: @@ -28,5 +42,12 @@ Signal(source=cmul2.output(0), destination=add1.input(1)) twotapfir = SFG(inputs=[in1], outputs=[out1], name='twotapfir') # SFG Properties: -prop = {'name':twotapfir} -positions = {'t1': (-209, 19), 'cmul1': (-95, 76), 'add1': (0, 95), 'cmul2': (-209, 114), 'out1': (76, 95), 'in1': (-323, 19)} +prop = {'name': twotapfir} +positions = { + 't1': (-209, 19), + 'cmul1': (-95, 76), + 'add1': (0, 95), + 'cmul2': (-209, 114), + 'out1': (76, 95), + 'in1': (-323, 19), +}