diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..6daed0be --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,9 @@ +name: Prek checks +on: [push, pull_request] + +jobs: + prek: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v6 + - uses: j178/prek-action@v1 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..d8adc8a6 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,6 @@ +repos: + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.14.9 + hooks: + - id: ruff-check + args: [--fix] diff --git a/Examples/Circular Bin with Conical Hopper.py b/Examples/Circular Bin with Conical Hopper.py index 60f340e4..b015824e 100644 --- a/Examples/Circular Bin with Conical Hopper.py +++ b/Examples/Circular Bin with Conical Hopper.py @@ -1,6 +1,4 @@ -from math import pi from Pynite.FEModel3D import FEModel3D -from Pynite.Mesh import FrustrumMesh, CylinderMesh t = 0.25/12 E = 29000*1000*12**2 diff --git a/Examples/Simple Beam - Factored Envelope.py b/Examples/Simple Beam - Factored Envelope.py index 037b6fce..4a49ee4c 100644 --- a/Examples/Simple Beam - Factored Envelope.py +++ b/Examples/Simple Beam - Factored Envelope.py @@ -6,7 +6,6 @@ import numpy as np # Import 'Visualization' for rendering the model -from Pynite import Visualization # Create a new finite element model simple_beam = FEModel3D() diff --git a/Examples/Simple Beam - Point Load.py b/Examples/Simple Beam - Point Load.py index bd7e9c4e..49e73f5d 100644 --- a/Examples/Simple Beam - Point Load.py +++ b/Examples/Simple Beam - Point Load.py @@ -5,7 +5,6 @@ from Pynite import FEModel3D # Import 'Visualization' for rendering the model -from Pynite import Visualization # Create a new finite element model simple_beam = FEModel3D() diff --git a/Pynite/Analysis.py b/Pynite/Analysis.py index e96b761a..5cb28b24 100644 --- a/Pynite/Analysis.py +++ b/Pynite/Analysis.py @@ -2,7 +2,7 @@ from typing import TYPE_CHECKING from math import isclose -from numpy import array, atleast_2d, zeros, subtract, matmul, divide, seterr, nanmax +from numpy import array, zeros, subtract, matmul from numpy.linalg import solve from Pynite.LoadCombo import LoadCombo diff --git a/Pynite/FEModel3D.py b/Pynite/FEModel3D.py index 5f1fed05..dec61502 100644 --- a/Pynite/FEModel3D.py +++ b/Pynite/FEModel3D.py @@ -4,7 +4,6 @@ from typing import TYPE_CHECKING, Literal import numpy as np -from math import floor from numpy.linalg import solve from Pynite.Node3D import Node3D @@ -2563,7 +2562,7 @@ def analyze_PDelta(self, log=False, check_stability=True, max_iter=30, sparse=Tr # Import `scipy` features if the sparse solver is being used if sparse == True: - from scipy.sparse.linalg import spsolve + from scipy.sparse.linalg import spsolve # noqa: F401 # Prepare the model for analysis Analysis._prepare_model(self) diff --git a/Pynite/Node3D.py b/Pynite/Node3D.py index b474b823..f6d563f3 100644 --- a/Pynite/Node3D.py +++ b/Pynite/Node3D.py @@ -6,18 +6,16 @@ """ from __future__ import annotations # Allows more recent type hints features # %% -from numpy import array, zeros +from numpy import zeros from typing import List, Tuple, Dict, Optional,TYPE_CHECKING if TYPE_CHECKING: - from typing import Dict, List, Tuple, Optional, Any, Literal + from typing import Dict, List, Tuple, Optional - from numpy import float64 from numpy.typing import NDArray from Pynite.FEModel3D import FEModel3D - from Pynite.LoadCombo import LoadCombo class Node3D(): diff --git a/Pynite/PhysMember.py b/Pynite/PhysMember.py index b8beedbf..f6a0f460 100644 --- a/Pynite/PhysMember.py +++ b/Pynite/PhysMember.py @@ -6,13 +6,12 @@ from Pynite.Node3D import Node3D from Pynite.FEModel3D import FEModel3D - import numpy.typing as npt from numpy import float64 from numpy.typing import NDArray -from numpy import array, dot, linspace, hstack, empty +from numpy import array, linspace, hstack, empty from numpy.linalg import norm -from math import isclose, acos +from math import isclose class PhysMember(Member3D): """ diff --git a/Pynite/Rendering.py b/Pynite/Rendering.py index 4793839c..2e8ac777 100644 --- a/Pynite/Rendering.py +++ b/Pynite/Rendering.py @@ -1,9 +1,7 @@ from __future__ import annotations # Allows more recent type hints features -from json import load import warnings -from typing import TYPE_CHECKING, Callable, List, Any +from typing import TYPE_CHECKING, Callable, List -from IPython.display import Image import numpy as np import pyvista as pv import math diff --git a/Pynite/ShearWall.py b/Pynite/ShearWall.py index ca36259d..d9ec5a05 100644 --- a/Pynite/ShearWall.py +++ b/Pynite/ShearWall.py @@ -1,7 +1,5 @@ from __future__ import annotations # Allows more recent type hints features from math import isclose -from numpy import average -import io from typing import TYPE_CHECKING, Literal from prettytable import PrettyTable diff --git a/Pynite/Spring3D.py b/Pynite/Spring3D.py index 01312579..7069e74e 100644 --- a/Pynite/Spring3D.py +++ b/Pynite/Spring3D.py @@ -1,9 +1,8 @@ # %% from __future__ import annotations # Allows more recent type hints features -from numpy import zeros, array, add, subtract, matmul, insert, cross, divide +from numpy import zeros, array, matmul, cross, divide from numpy.linalg import inv from math import isclose -import Pynite.FixedEndReactions from Pynite.LoadCombo import LoadCombo from typing import TYPE_CHECKING diff --git a/Pynite/Tri3D.py b/Pynite/Tri3D.py index 0b3f3222..13fe4282 100644 --- a/Pynite/Tri3D.py +++ b/Pynite/Tri3D.py @@ -1,5 +1,5 @@ from __future__ import annotations # Allows more recent type hints features -from typing import List, TYPE_CHECKING +from typing import TYPE_CHECKING from numpy import zeros, array, matmul, cross, add, float64 from numpy.linalg import inv, norm, det diff --git a/Pynite/Visualization.py b/Pynite/Visualization.py index b93926d7..13602222 100644 --- a/Pynite/Visualization.py +++ b/Pynite/Visualization.py @@ -1,5 +1,4 @@ from __future__ import annotations # Allows more recent type hints features -from json import load import warnings from IPython.display import Image diff --git a/Pynite/__init__.py b/Pynite/__init__.py index 7356a6b0..6cddbd7e 100644 --- a/Pynite/__init__.py +++ b/Pynite/__init__.py @@ -5,6 +5,13 @@ from pip._vendor import pkg_resources +__all__ = ( + "FEModel3D", + "ShearWall", + "Pynite", + "__version__", +) + def get_version(package): package = package.lower() return next((p.version for p in pkg_resources.working_set if p.project_name.lower() == package), "No match") diff --git a/Testing/test_2D_frames.py b/Testing/test_2D_frames.py index 84c48fac..9a9a68b7 100644 --- a/Testing/test_2D_frames.py +++ b/Testing/test_2D_frames.py @@ -7,7 +7,6 @@ import unittest from Pynite import FEModel3D -import math import sys from io import StringIO diff --git a/Testing/test_AISC_PDelta_benchmarks.py b/Testing/test_AISC_PDelta_benchmarks.py index 42bff1bf..2a59207f 100644 --- a/Testing/test_AISC_PDelta_benchmarks.py +++ b/Testing/test_AISC_PDelta_benchmarks.py @@ -5,12 +5,9 @@ Copyright (c) 2020 D. Craig Brinck, SE; tamalone1 """ -import enum import unittest from Pynite import FEModel3D import math -import sys -from io import StringIO class Test_AISC_Benchmark(unittest.TestCase): """ diff --git a/Testing/test_TC_analysis.py b/Testing/test_TC_analysis.py index ef44e617..e0226d38 100644 --- a/Testing/test_TC_analysis.py +++ b/Testing/test_TC_analysis.py @@ -7,7 +7,6 @@ import unittest from Pynite import FEModel3D -import math import sys from io import StringIO diff --git a/Testing/test_Visualization.py b/Testing/test_Visualization.py index 4a4ffb72..2ebb4d68 100644 --- a/Testing/test_Visualization.py +++ b/Testing/test_Visualization.py @@ -1,4 +1,3 @@ -import os import pytest from io import BytesIO from IPython.display import Image diff --git a/Testing/test_end_releases.py b/Testing/test_end_releases.py index 1ba61f89..ef07cc4a 100644 --- a/Testing/test_end_releases.py +++ b/Testing/test_end_releases.py @@ -7,7 +7,6 @@ import unittest from Pynite import FEModel3D -import math import sys from io import StringIO diff --git a/Testing/test_loads.py b/Testing/test_loads.py index 962c0760..74ebed91 100644 --- a/Testing/test_loads.py +++ b/Testing/test_loads.py @@ -6,7 +6,7 @@ """ import unittest -from Pynite import FEModel3D, Section +from Pynite import FEModel3D import sys from io import StringIO diff --git a/Testing/test_meshes.py b/Testing/test_meshes.py index b6f85cd7..122f3fda 100644 --- a/Testing/test_meshes.py +++ b/Testing/test_meshes.py @@ -1,5 +1,4 @@ from Pynite import FEModel3D -from Pynite.Rendering import Renderer from math import isclose diff --git a/Testing/test_reanalysis.py b/Testing/test_reanalysis.py index 3f47911c..4853270e 100644 --- a/Testing/test_reanalysis.py +++ b/Testing/test_reanalysis.py @@ -7,7 +7,6 @@ import unittest from Pynite import FEModel3D -import math import sys from io import StringIO diff --git a/Testing/test_sloped_beam.py b/Testing/test_sloped_beam.py index f09e5c7c..7c194c9d 100644 --- a/Testing/test_sloped_beam.py +++ b/Testing/test_sloped_beam.py @@ -7,7 +7,6 @@ import unittest from Pynite import FEModel3D -import math import sys from io import StringIO diff --git a/Testing/test_support_settlement.py b/Testing/test_support_settlement.py index d7762c11..7131993b 100644 --- a/Testing/test_support_settlement.py +++ b/Testing/test_support_settlement.py @@ -12,7 +12,6 @@ import unittest from Pynite import FEModel3D -import math import sys from io import StringIO diff --git a/Testing/test_torsion.py b/Testing/test_torsion.py index 6f09f542..ea21174d 100644 --- a/Testing/test_torsion.py +++ b/Testing/test_torsion.py @@ -7,7 +7,6 @@ import unittest from Pynite import FEModel3D -import math import sys from io import StringIO diff --git a/Testing/test_unstable_structure.py b/Testing/test_unstable_structure.py index 158be3e9..f19f816a 100644 --- a/Testing/test_unstable_structure.py +++ b/Testing/test_unstable_structure.py @@ -7,7 +7,6 @@ import unittest -from numpy import True_ from Pynite import FEModel3D import sys from io import StringIO diff --git a/Testing/x_test_nonlinear.py b/Testing/x_test_nonlinear.py index c649ba69..2736e9a9 100644 --- a/Testing/x_test_nonlinear.py +++ b/Testing/x_test_nonlinear.py @@ -1,7 +1,5 @@ import unittest from Pynite import FEModel3D -from Pynite.Section import SteelSection -import math import sys from io import StringIO diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 00000000..c1da31fb --- /dev/null +++ b/ruff.toml @@ -0,0 +1,10 @@ +target-version = "py310" +extend-exclude = [ + "*.ipynb", +] + +[lint] +select = [ + # https://docs.astral.sh/ruff/rules/unused-import/ + "F401", +]