Skip to content

Commit

Permalink
Merge pull request #238 from AsadNizami/master
Browse files Browse the repository at this point in the history
(#119) Wildcard imports removed
  • Loading branch information
armantekinalp committed Apr 6, 2023
2 parents bb0d16f + 530387b commit 0ff189f
Show file tree
Hide file tree
Showing 64 changed files with 674 additions and 556 deletions.
29 changes: 22 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<div align='center'>
<h1> PyElastica </h1>

[![Build_status][badge-travis]][link-travis] [![CI][badge-CI]][link-CI] [![Documentation Status][badge-docs-status]][link-docs-status] [![codecov][badge-codecov]][link-codecov] [![Downloads][badge-pepy-download-count]][link-pepy-download-count] [![Binder][badge-binder]][link-binder] [![Gitter][badge-gitter]][link-gitter]
[![Build_status][badge-travis]][link-travis] [![CI][badge-CI]][link-CI] [![Documentation Status][badge-docs-status]][link-docs-status] [![codecov][badge-codecov]][link-codecov] [![Downloads][badge-pepy-download-count]][link-pepy-download-count] [![DOI][badge-doi]][link-doi] [![Binder][badge-binder]][link-binder] [![Gitter][badge-gitter]][link-gitter]
</div>

PyElastica is the python implementation of **Elastica**: an *open-source* project for simulating assemblies of slender, one-dimensional structures using Cosserat Rod theory.
Expand All @@ -26,12 +26,25 @@ Documentation of PyElastica is available [here][link-docs-website].
We ask that any publications which use Elastica cite as following:

```
@misc{tekinalp2022pyelastica,
title={PyElastica: A computational framework for Cosserat rod assemblies},
author={Tekinalp, Arman and Kim, Seung Hyun and Parthasarathy, Tejaswin and Bhosale, Yashraj},
journal={https://github.com/GazzolaLab/PyElastica},
year={2022},
publisher={GitHub}
@software{arman_tekinalp_2023_7658872,
author = {Arman Tekinalp and
Seung Hyun Kim and
Yashraj Bhosale and
Tejaswin Parthasarathy and
Noel Naughton and
Maximilian Stölzle and
Zhi Dou and
Chia-Hsien (Cathy) Shih and
Mattia Gazzola},
title = {{PyElastica: Open-source software for the
simulation of assemblies of slender, one-
dimensional structures using Cosserat Rod theory}},
month = feb,
year = 2023,
publisher = {Zenodo},
version = {v0.3.0.post1},
doi = {10.5281/zenodo.7658872},
url = {https://doi.org/10.5281/zenodo.7658872}
}
```

Expand Down Expand Up @@ -91,6 +104,7 @@ _Names arranged alphabetically_
[badge-pepy-download-count]: https://pepy.tech/badge/pyelastica
[badge-codecov]: https://codecov.io/gh/GazzolaLab/PyElastica/branch/master/graph/badge.svg
[badge-gitter]: https://badges.gitter.im/PyElastica/community.svg
[badge-doi]: https://zenodo.org/badge/254172891.svg
[link-pypi]: https://badge.fury.io/py/pyelastica
[link-travis]: https://travis-ci.com/github/GazzolaLab/PyElastica
[link-CI]: https://github.com/GazzolaLab/PyElastica/actions
Expand All @@ -101,3 +115,4 @@ _Names arranged alphabetically_
[badge-binder-tutorial]: https://img.shields.io/badge/Launch-PyElastica%20Tutorials-579ACA.svg?logo=data:image/png;base64,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
[link-binder]: https://mybinder.org/v2/gh/GazzolaLab/PyElastica/master?filepath=examples%2FBinder%2F0_PyElastica_Tutorials_Overview.ipynb
[link-gitter]: https://gitter.im/PyElastica/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[link-doi]: https://zenodo.org/badge/latestdoi/254172891
86 changes: 72 additions & 14 deletions elastica/__init__.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,73 @@
from collections import defaultdict
from elastica.modules import *
from elastica.rod.cosserat_rod import *
from elastica.rod.knot_theory import *
from elastica.rigidbody import *
from elastica.boundary_conditions import *
from elastica.external_forces import *
from elastica.callback_functions import *
from elastica.dissipation import *
from elastica.interaction import *
from elastica.joint import *
from elastica.timestepper import *
from elastica.restart import *
from elastica.reset_functions_for_block_structure import *
from elastica.typing import *
from elastica.rod.knot_theory import KnotTheory, KnotTheoryCompatibleProtocol
from elastica.rod.rod_base import RodBase
from elastica.rod.cosserat_rod import CosseratRod
from elastica.rigidbody.rigid_body import RigidBodyBase
from elastica.rigidbody.cylinder import Cylinder
from elastica.rigidbody.sphere import Sphere
from elastica.boundary_conditions import (
ConstraintBase,
FreeBC,
OneEndFixedBC,
GeneralConstraint,
FixedConstraint,
HelicalBucklingBC,
FreeRod,
OneEndFixedRod,
)
from elastica.external_forces import (
NoForces,
EndpointForces,
GravityForces,
UniformForces,
UniformTorques,
MuscleTorques,
EndpointForcesSinusoidal,
)
from elastica.interaction import (
AnisotropicFrictionalPlane,
InteractionPlane,
SlenderBodyTheory,
)
from elastica.joint import (
FreeJoint,
ExternalContact,
FixedJoint,
HingeJoint,
SelfContact,
)
from elastica.callback_functions import CallBackBaseClass, ExportCallBack, MyCallBack
from elastica.dissipation import (
DamperBase,
AnalyticalLinearDamper,
LaplaceDissipationFilter,
)
from elastica.modules.base_system import BaseSystemCollection
from elastica.modules.callbacks import CallBacks
from elastica.modules.connections import Connections
from elastica.modules.constraints import Constraints
from elastica.modules.forcing import Forcing
from elastica.modules.damping import Damping
from elastica.transformations import inv_skew_symmetrize
from elastica.transformations import rotate
from elastica._calculus import (
position_difference_kernel,
position_average,
quadrature_kernel,
difference_kernel,
quadrature_kernel_for_block_structure,
difference_kernel_for_block_structure,
)
from elastica._linalg import levi_civita_tensor
from elastica.utils import isqrt
from elastica.typing import RodType, SystemType
from elastica.timestepper import (
integrate,
PositionVerlet,
PEFRL,
RungeKutta4,
EulerForward,
extend_stepper_interface,
)
from elastica.memory_block.memory_block_rigid_body import MemoryBlockRigidBody
from elastica.memory_block.memory_block_rod import MemoryBlockCosseratRod
8 changes: 0 additions & 8 deletions elastica/boundary_conditions.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,4 @@
__doc__ = """ Built-in boundary condition implementationss """
__all__ = [
"ConstraintBase",
"FreeBC",
"OneEndFixedBC",
"GeneralConstraint",
"FixedConstraint",
"HelicalBucklingBC",
]

import warnings
from typing import Optional
Expand Down
1 change: 0 additions & 1 deletion elastica/callback_functions.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
__doc__ = """ Module contains callback classes to save simulation data for rod-like objects """
__all__ = ["CallBackBaseClass", "MyCallBack", "ExportCallBack"]

import os
import sys
Expand Down
6 changes: 1 addition & 5 deletions elastica/dissipation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@
Built in damper module implementations
"""
__all__ = [
"DamperBase",
"AnalyticalLinearDamper",
"LaplaceDissipationFilter",
]

from abc import ABC, abstractmethod

from elastica.typing import RodType, SystemType
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
__doc__ = (
""" Module containing joint classes to connect rods and rigid bodies together. """
)
__all__ = ["GenericSystemTypeFreeJoint", "GenericSystemTypeFixedJoint"]
from elastica.joint import FreeJoint, FixedJoint
from elastica.typing import SystemType
import numpy as np
Expand Down
3 changes: 0 additions & 3 deletions elastica/experimental/interaction.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
__doc__ = """ Experimental interaction implementation."""
__all__ = [
"AnisotropicFrictionalPlaneRigidBody",
]


import numpy as np
Expand Down
10 changes: 1 addition & 9 deletions elastica/external_forces.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
__doc__ = """ Numba implementation module for boundary condition implementations that apply
external forces to the system."""
__all__ = [
"NoForces",
"GravityForces",
"EndpointForces",
"UniformTorques",
"UniformForces",
"MuscleTorques",
"EndpointForcesSinusoidal",
]


import numpy as np
from elastica._linalg import _batch_matvec
Expand Down
6 changes: 0 additions & 6 deletions elastica/interaction.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
__doc__ = """ Numba implementation module containing interactions between a rod and its environment."""
__all__ = [
"AnisotropicFrictionalPlane",
"InteractionPlane",
"InteractionPlaneRigidBody",
"SlenderBodyTheory",
]


import numpy as np
Expand Down
2 changes: 1 addition & 1 deletion elastica/joint.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
__doc__ = """ Module containing joint classes to connect multiple rods together. """
__all__ = ["FreeJoint", "HingeJoint", "FixedJoint", "ExternalContact", "SelfContact"]

from elastica._linalg import _batch_product_k_ik_to_ik
from elastica._rotations import _inv_rotate
from elastica.typing import SystemType, RodType
Expand Down
9 changes: 2 additions & 7 deletions elastica/memory_block/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,2 @@
__all__ = [
"MemoryBlockCosseratRod",
"MemoryBlockRigidBody",
]

from elastica.memory_block.memory_block_rod import MemoryBlockCosseratRod
from elastica.memory_block.memory_block_rigid_body import MemoryBlockRigidBody
from .memory_block_rigid_body import MemoryBlockRigidBody
from .memory_block_rod import MemoryBlockCosseratRod
8 changes: 0 additions & 8 deletions elastica/modules/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,6 @@
"""


__all__ = [
"BaseSystemCollection",
"Connections",
"Constraints",
"Forcing",
"CallBacks",
"Damping",
]
from .base_system import BaseSystemCollection
from .connections import Connections
from .constraints import Constraints
Expand Down
5 changes: 0 additions & 5 deletions elastica/reset_functions_for_block_structure/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
__all__ = [
"_reset_scalar_ghost",
"_reset_vector_ghost",
]

from elastica.reset_functions_for_block_structure._reset_ghost_vector_or_scalar import (
_reset_scalar_ghost,
_reset_vector_ghost,
Expand Down
2 changes: 1 addition & 1 deletion elastica/restart.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
__doc__ = """Generate or load restart file implementations."""
__all__ = ["save_state", "load_state"]

import numpy as np
import os
from itertools import groupby
Expand Down
1 change: 0 additions & 1 deletion elastica/rigidbody/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
__all__ = ["RigidBodyBase", "Cylinder", "Sphere"]
from .rigid_body import RigidBodyBase
from .cylinder import Cylinder
from .sphere import Sphere
1 change: 0 additions & 1 deletion elastica/rigidbody/cylinder.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
__doc__ = """"""
__all__ = ["Cylinder"]

import numpy as np

Expand Down
1 change: 0 additions & 1 deletion elastica/rigidbody/sphere.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
__doc__ = """"""
__all__ = ["Sphere"]

import numpy as np

Expand Down
10 changes: 8 additions & 2 deletions elastica/rod/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
__doc__ = """Rod classes and its data structures """


from elastica.rod.knot_theory import *
from elastica.rod.data_structures import *
from elastica.rod.knot_theory import KnotTheory
from elastica.rod.rod_base import RodBase
from elastica.rod.data_structures import (
_RodSymplecticStepperMixin,
_State,
_DerivativeState,
_KinematicState,
_DynamicState,
)
1 change: 0 additions & 1 deletion elastica/rod/cosserat_rod.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
__doc__ = """ Rod classes and implementation details """
__all__ = ["CosseratRod"]


import numpy as np
Expand Down
9 changes: 1 addition & 8 deletions elastica/rod/data_structures.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
__doc__ = "Data structure wrapper for rod components"
__all__ = [
"_RodSymplecticStepperMixin",
"_bootstrap_from_data",
"_State",
"_DerivativeState",
"_KinematicState",
"_DynamicState",
]

import numpy as np
from numba import njit
from elastica._rotations import _get_rotation_matrix, _rotate
Expand Down
1 change: 0 additions & 1 deletion elastica/rod/factory_function.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
__doc__ = """ Factory function to allocate variables for Cosserat Rod"""
__all__ = ["allocate"]
from typing import Optional, Tuple
import logging
import numpy as np
Expand Down
7 changes: 0 additions & 7 deletions elastica/rod/knot_theory.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,6 @@
The details discussion is included in `N Charles et. al. PRL (2019) <https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.123.208003>`_.
"""
__all__ = [
"KnotTheoryCompatibleProtocol",
"KnotTheory",
"compute_twist",
"compute_link",
"compute_writhe",
]

import sys

Expand Down
9 changes: 1 addition & 8 deletions elastica/timestepper/__init__.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
__doc__ = """Timestepping utilities to be used with Rod and RigidBody classes"""
__all__ = [
"integrate",
"PositionVerlet",
"PEFRL",
"RungeKutta4",
"EulerForward",
"extend_stepper_interface",
]


import numpy as np
from tqdm import tqdm
Expand Down
1 change: 0 additions & 1 deletion elastica/transformations.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
__doc__ = """ Rotation interface functions"""
__all__ = ["skew_symmetrize", "inv_skew_symmetrize", "rotate"]

import numpy as np

Expand Down
2 changes: 1 addition & 1 deletion elastica/utils.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
""" Handy utilities
"""
__all__ = ["isqrt"]

import functools
import numpy as np
from numpy import finfo, float64
Expand Down
2 changes: 2 additions & 0 deletions elastica/wrappers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@
"CallBacks",
"Damping",
]

from elastica.modules.base_system import BaseSystemCollection
from elastica.modules.connections import Connections
from elastica.modules.constraints import Constraints
from elastica.modules.forcing import Forcing
from elastica.modules.callbacks import CallBacks
from elastica.modules.damping import Damping


warnings.warn(
"elastica.wrappers is refactored to elastica.modules in version 0.3.0.",
DeprecationWarning,
Expand Down

0 comments on commit 0ff189f

Please sign in to comment.