# Path: seapy/base.py
# class Attribute(object):
#     """Descriptor for storing spectral values.
#     """
# 
#     def __init__(self, dtype="float64"):
#         self.dtype = dtype
#         self.attribute = None
#         """Attribute will be set by Base.__init__"""
# 
#     def __get__(self, instance, cls):
#         if instance is None:
#             return self
#         else:
#             return instance.__dict__[self.attribute]
# 
#     def __set__(self, instance, value):
#         try:
#             instance.__dict__[self.attribute][:] = value
#         except ValueError:
#             raise ValueError("Invalid value.")
# 
# Path: seapy/components/structural.py
# class ComponentStructural(Component):
#     """Abstract base class for structural components.
#     """
# 
#     @property
#     def velocity(self):
#         """Velocity of the component :math:`v_{component}`. 
#         
#         :rtype: :class:`numpy.ndarray`
#         
#         This is the sum of all subsystems velocities.       
#         """
#         return sum(subsystem.velocity for subsystem in self.linked_subsystems)
# 
#     @property
#     def velocity_level(self):
#         """
#         Velocity level :math:`L_v`.
#         
#         :rtype: :class:`numpy.ndarray`
#         
#         The structural velocity level is calculated as
#         
#         .. math:: L_v = 20 \\log_{10}{\\left( \\frac{v}{v_0} \\right) }
#         
#         .. seealso:: :attr:`seapy.system.System.reference_velocity`
#         
#         """
#         return 20.0 * np.log10(self.velocity / self.system.reference_velocity)
# 
# Path: seapy/subsystems/subsystemstructural.py
# class SubsystemStructural(Subsystem):
#     """
#     Abstract base class for all structural subsystems.
#     """
# 
#     @property
#     def conductance_point_average(self):
#         """
#         Average point conductance of a structural component.
#         
#         .. math:: \\overline{G} = \\frac{1}{4} M \overline{\\delta f}
#         
#         See Lyon, page 149, equation 8.5.2 as well as page 200.
#         
#         """
#         return 0.25 * self.component.mass * self.average_frequency_spacing
# 
#     @property
#     def resistance_point_average(self):
#         """
#         Average point resistance.
#         """
#         return 1.0 / self.conductance_point_average
# 
#     @property
#     def velocity(self):
#         """
#         Vibrational velocity :math:`v`.
#         
#         .. math:: v = \\sqrt{\\frac{E}{m}}
#         
#         Craik, equation 3.11, page 55.
#         
#         """
#         return np.sqrt(self.energy / self.component.mass)
# 
#     @property
#     def velocity_level(self):
#         """
#         Velocity level :math:`L_v`.
#         
#         :rtype: :class:`numpy.ndarray`
#         
#         The structural velocity level is calculated as
#         
#         .. math:: L_v = 20 \\log_{10}{\\left( \\frac{v}{v_0} \\right) }
#         
#         .. seealso:: :attr:`seapy.system.System.reference_velocity`
#         
#         """
#         return 20.0 * np.log10(self.velocity / self.system.reference_velocity)


import numpy as np
from ..base import Attribute
from .structural import ComponentStructural
from ..subsystems import SubsystemStructural

    #:rtype: :class:`numpy.ndarray`

    # """
    # raise NotImplementedError

    @property
    def impedance_point_force(self):
        """Point impedance.
        
        .. math:: Z_{B}^{F, 2D} = 8 \\rho h \\kappa_B c_L
        
        with:
        
        * density of the plate :math:`\\rho`
        * radius of gyration :math:`kappa_B`
        * soundspeed of longitudinal waves :math:`c_L`
        
        See Lyon, page 201, table 10.1
        
        """
        return (
            8.0
            * self.component.material.density
            * self.component.height
            * self.component.radius_of_gyration
            * self.component.subsystem_long.soundspeed_group
        )



# Path: seapy/base.py
# class Attribute(object):
#     """Descriptor for storing spectral values.
#     """
# 
#     def __init__(self, dtype="float64"):
#         self.dtype = dtype
#         self.attribute = None
#         """Attribute will be set by Base.__init__"""
# 
#     def __get__(self, instance, cls):
#         if instance is None:
#             return self
#         else:
#             return instance.__dict__[self.attribute]
# 
#     def __set__(self, instance, value):
#         try:
#             instance.__dict__[self.attribute][:] = value
#         except ValueError:
#             raise ValueError("Invalid value.")
# 
# Path: seapy/components/structural.py
# class ComponentStructural(Component):
#     """Abstract base class for structural components.
#     """
# 
#     @property
#     def velocity(self):
#         """Velocity of the component :math:`v_{component}`. 
#         
#         :rtype: :class:`numpy.ndarray`
#         
#         This is the sum of all subsystems velocities.       
#         """
#         return sum(subsystem.velocity for subsystem in self.linked_subsystems)
# 
#     @property
#     def velocity_level(self):
#         """
#         Velocity level :math:`L_v`.
#         
#         :rtype: :class:`numpy.ndarray`
#         
#         The structural velocity level is calculated as
#         
#         .. math:: L_v = 20 \\log_{10}{\\left( \\frac{v}{v_0} \\right) }
#         
#         .. seealso:: :attr:`seapy.system.System.reference_velocity`
#         
#         """
#         return 20.0 * np.log10(self.velocity / self.system.reference_velocity)
# 
# Path: seapy/subsystems/subsystemstructural.py
# class SubsystemStructural(Subsystem):
#     """
#     Abstract base class for all structural subsystems.
#     """
# 
#     @property
#     def conductance_point_average(self):
#         """
#         Average point conductance of a structural component.
#         
#         .. math:: \\overline{G} = \\frac{1}{4} M \overline{\\delta f}
#         
#         See Lyon, page 149, equation 8.5.2 as well as page 200.
#         
#         """
#         return 0.25 * self.component.mass * self.average_frequency_spacing
# 
#     @property
#     def resistance_point_average(self):
#         """
#         Average point resistance.
#         """
#         return 1.0 / self.conductance_point_average
# 
#     @property
#     def velocity(self):
#         """
#         Vibrational velocity :math:`v`.
#         
#         .. math:: v = \\sqrt{\\frac{E}{m}}
#         
#         Craik, equation 3.11, page 55.
#         
#         """
#         return np.sqrt(self.energy / self.component.mass)
# 
#     @property
#     def velocity_level(self):
#         """
#         Velocity level :math:`L_v`.
#         
#         :rtype: :class:`numpy.ndarray`
#         
#         The structural velocity level is calculated as
#         
#         .. math:: L_v = 20 \\log_{10}{\\left( \\frac{v}{v_0} \\right) }
#         
#         .. seealso:: :attr:`seapy.system.System.reference_velocity`
#         
#         """
#         return 20.0 * np.log10(self.velocity / self.system.reference_velocity)


# Path: seapy/components/plate.py
import numpy as np
from ..base import Attribute
from .structural import ComponentStructural
from ..subsystems import SubsystemStructural


    #:rtype: :class:`numpy.ndarray`

    # """
    # raise NotImplementedError

    @property
    def impedance_point_force(self):
        """Point impedance.
        
        .. math:: Z_{B}^{F, 2D} = 8 \\rho h \\kappa_B c_L
        
        with:
        
        * density of the plate :math:`\\rho`
        * radius of gyration :math:`kappa_B`
        * soundspeed of longitudinal waves :math:`c_L`
        
        See Lyon, page 201, table 10.1
        
        """
        return (
            8.0
            * self.component.material.density
            * self.component.height
            * self.component.radius_of_gyration
            * self.component.subsystem_long.soundspeed_group
        )



class SubsystemShear(SubsystemStructural):