§
    OŠtjK™  ã                   óØ   — d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ  edddgi¬¦  «        Z G d„ d¦  «        ZdS )zJ
This module can be used to solve probelsm related to 2D parabolic arches
é    )Úsympify)ÚSymbolÚsymbols)ÚdiffÚsqrtÚcosÚsinÚatanÚradÚMin)ÚEq)Úsolve)Ú	Piecewise)Úplot)Úlimit)Údoctest_depends_on)Úimport_moduleÚnumpyÚfromlistÚarange)Úimport_kwargsc                   ó(  — e Zd ZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ed„ ¦   «         Z
ed„ ¦   «         Zdd
„Zd„ Zdd„Zdd„Zdd„Zd„ Zdd„Zdd„Zdd„Zd„ Z ed¬¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd	S )ÚArchaö  
    This class is used to solve problems related to a three hinged arch(determinate) structure.

    An arch is a curved vertical structure spanning an open space underneath it.

    Arches can be used to reduce the bending moments in long-span structures.


    Arches are used in structural engineering(over windows, door and even bridges)

    because they can support a very large mass placed on top of them.

    Example
    ========
    >>> from sympy.physics.continuum_mechanics.arch import Arch
    >>> a = Arch((0,0),(10,0),crown_x=5,crown_y=5)
    >>> a.get_shape_eqn
    5 - (x - 5)**2/5

    >>> from sympy.physics.continuum_mechanics.arch import Arch
    >>> a = Arch((0,0),(10,1),crown_x=6)
    >>> a.get_shape_eqn
    9/5 - (x - 6)**2/20
    c           	      óÒ  — d | _         t          |d         ¦  «        t          |d         ¦  «        f| _        t          |d         ¦  «        t          |d         ¦  «        f| _        d | _        d | _        d|v rt          |d         ¦  «        | _        d|v rt          |d         ¦  «        | _        | j        | _         i | _        i | _        | j        | j        dœ| _	        i | _
        dddœ| _        d | _        d | _        t          d¦  «        dt          d	¦  «        dt          d
¦  «        dt          d¦  «        di| _        t!          ¦   «         | _        t!          ¦   «         | _        i | _        i | _        i | _        i | _        t/          d¦  «        | _        t/          d¦  «        | _        t/          d¦  «        | _        t/          d¦  «        | _        d | _        d | _        d | _        d S )Nr   é   Úcrown_xÚcrown_y)ÚconcentratedÚdistributedÚhinge)ÚleftÚrightÚR_A_xÚR_A_yÚR_B_xÚR_B_y©r   T)Ú
_shape_eqnr   Ú_left_supportÚ_right_supportÚ_crown_xÚ_crown_yÚget_shape_eqnÚ_conc_loadsÚ_distributed_loadsÚ_loadsÚ_loads_appliedÚ	_supportsÚ_memberÚ_member_forcer   Ú_reaction_forceÚsetÚ_points_disc_xÚ_points_disc_yÚ	_moment_xÚ	_moment_yÚ_load_xÚ_load_yr   Ú_moment_x_funcÚ_moment_y_funcÚ_load_x_funcÚ_load_y_funcÚ_bending_momentÚ_shear_forceÚ_axial_force)ÚselfÚleft_supportÚright_supportÚkwargss       úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/physics/continuum_mechanics/arch.pyÚ__init__zArch.__init__&   sÀ  € ØˆŒÝ& |°A¤Ñ7Ô7½ÀÈQÄÑ8PÔ8PÐQˆÔÝ '¨°aÔ(8Ñ 9Ô 9½'À-ÐPQÔBRÑ:SÔ:SÐTˆÔØˆŒØˆŒØ˜ÐÐÝ# F¨9Ô$5Ñ6Ô6ˆDŒMØ˜ÐÐÝ# F¨9Ô$5Ñ6Ô6ˆDŒMØÔ,ˆŒØˆÔØ"$ˆÔØ'+Ô'7ÀtÔG^Ð_Ð_ˆŒØ ˆÔØ!(°'Ð:Ð:ˆŒØˆŒØ!ˆÔÝ & w¡¤°µ6¸'±?´?À1ÅfÈWÁoÄoÐVWÕY_Ð`gÑYhÔYhÐijÐkˆÔÝ!™eœeˆÔÝ!™eœeˆÔØˆŒØˆŒØˆŒØˆŒÝ'¨Ñ1Ô1ˆÔÝ'¨Ñ1Ô1ˆÔÝ% hÑ/Ô/ˆÔÝ% hÑ/Ô/ˆÔØ#ˆÔØ ˆÔØ ˆÔÐÐó    c                 óØ  — | j         r| j         S t          d¦  «        \  }}}t          dd¬¦  «        }| j        rº| j        r³| j        }| j        }|||z
  dz  z  |z   |z
  }|                     || j        d         || j        d         i¦  «        }t          ||¦  «        }	|	d         ||z
  dz  z  |z   }|                     || j        d         i¦  «        | j        d         k    rt          d¦  «        ‚nö| j        rà| j        }|||z
  dz  z  |z   |z
  }|                     || j        d         || j        d         i¦  «        }|                     || j        d         || j        d         i¦  «        }
t          ||
f||f¦  «        }	t          |	¦  «        dk     s|	|         dk    rt          d	¦  «        ‚|	|         ||z
  dz  z  |	|         z   }|	|         | _        nt          d
¦  «        ‚|S )z3returns the equation of the shape of arch developedzx y cÚaF)Úpositiveé   r   r   zQprovided coordinates of crown and supports are not consistent with parabolic archzYparabolic arch cannot be constructed with the provided coordinates, try providing crown_yz(please provide crown_x to construct arch)r(   r   r   r+   r,   Úsubsr)   r   r*   Ú
ValueErrorÚlenÚKeyError)rD   ÚxÚyÚcrL   Úx0Úy0Úparabola_eqnÚeq1ÚsolutionÚeq2s              rH   r-   zArch.get_shape_eqnH   s$  € ð Œ?ð 	#Ø”?Ð"å˜Ñ Ô ‰ˆˆ!ˆAÝ�3 Ð&Ñ&Ô&ˆØŒ=ð 	G˜Tœ]ð 	GØ”-ˆBØ”ˆBØ˜a ™d Q™Y™;¨Ñ+¨aÑ/ˆLØ×#Ò# Q tÔ'9¸!Ô'<¸aÀÔ@RÐSTÔ@UÐ$VÑWÔWˆCÝ˜c AÑ'Ô'ˆHØ# Aœ;¨¨"©¨q¡yÑ0°2Ñ5ˆLØ× Ò  ! DÔ$7¸Ô$:Ð!;Ñ<Ô<ÀÔ@SÐTUÔ@VÒVÐVÝ Ð!tÑuÔuÐuð Wð Œ]ð 	GØ”-ˆBØ˜a ™d Q™Y™;¨™?¨QÑ.ˆLØ×#Ò# Q tÔ'9¸!Ô'<¸aÀÔ@RÐSTÔ@UÐ$VÑWÔWˆCØ×#Ò# Q tÔ':¸1Ô'=¸qÀÔATÐUVÔAWÐ$XÑYÔYˆCÝ˜c #˜Y¨¨! uÑ-Ô-ˆHÝ�8‰}Œ}˜aÒÐ 8¨A¤;°!Ò#3Ð#3Ý Ð!|Ñ}Ô}Ð}Ø# Aœ;¨¨"©¨q¡yÑ0°(¸1´+Ñ=ˆLØ$ QœKˆDŒMˆMõ ÐEÑFÔFÐFàÐrJ   c                 ó   — | j         S )z\
        return the position of the applied load and angle (for concentrated loads)
        )r0   ©rD   s    rH   Ú	get_loadszArch.get_loadsj   s   € ð
 Œ{ÐrJ   c                 ó   — | j         S )z-
        Returns the type of support
        )r2   r]   s    rH   ÚsupportszArch.supportsq   s   € ð
 Œ~ÐrJ   c                 ó   — | j         S )z;
        Returns the position of the left support.
        )r)   r]   s    rH   rE   zArch.left_supportx   s   € ð
 Ô!Ð!rJ   c                 ó   — | j         S )z<
        Returns the position of the right support.
        )r*   r]   s    rH   rF   zArch.right_support   s   € ð
 Ô"Ð"rJ   c                 ó   — | j         S )z6
        return the reaction forces generated
        )r5   r]   s    rH   Úreaction_forcezArch.reaction_force†   s   € ð
 Ô#Ð#rJ   Nc           
      ón  — t          d¦  «        }t          d¦  «        }t          d¦  «        }	t          |¦  «        }t          |¦  «        }t          |¦  «        }|| j        v rt          d¦  «        ‚|dv rt          d¦  «        ‚|dk    �r|�||k     rt	          d	¦  «        ‚|||d
œ| j        |<   | j                             |¦  «         || j        v rm| j        |xx         |t          ||¦  «        |z
  z  |	|t          ||¦  «        z   dz  z
  z  z  cc<   | j
        |xx         |t          ||¦  «        |z
  z  z  cc<   nW| t          ||¦  «        |z
  z  |	|t          ||¦  «        z   dz  z
  z  | j        |<   |t          ||¦  «        |z
  z  | j
        |<   d| j        |<   |dk    �r|€t          d¦  «        ‚| j                             d|i¦  «        }
||
|t          t          |¦  «        ¦  «        z  |t!          t          |¦  «        ¦  «        z  ||dœ| j        |<   | j                             |¦  «         | j                             |¦  «         || j        v rd| j        |xx         | j        |         d         || j        |         d         z
  z  z  cc<   | j        |xx         | j        |         d         z  cc<   nM| j        |         d         || j        |         d         z
  z  | j        |<   | j        |         d         | j        |<   || j        v rS| j        |xx         | j        |         d         |	|z
  z  z  cc<   | j
        |xx         | j        |         d         z  cc<   n=| j        |         d          |	|z
  z  | j        |<   | j        |         d         | j
        |<   d| j        |<   dS dS )aN  
        This method adds load to the Arch.

        Parameters
        ==========

            order : Integer
                Order of the applied load.

                    - For point/concentrated loads, order = -1
                    - For distributed load, order = 0

            label : String or Symbol
                The label of the load
                - should not use 'A' or 'B' as it is used for supports.

            start : Float

                    - For concentrated/point loads, start is the x coordinate
                    - For distributed loads, start is the starting position of distributed load

            mag : Sympifyable
                Magnitude of the applied load. Must be positive

            end : Float
                Required for distributed loads

                    - For concentrated/point load , end is None(may not be given)
                    - For distributed loads, end is the end position of distributed load

            angle: Sympifyable
                The angle in degrees, the load vector makes with the horizontal
                in the counter-clockwise direction.

        Examples
        ========
        For applying distributed load

        >>> from sympy.physics.continuum_mechanics.arch import Arch
        >>> a = Arch((0,0),(10,0),crown_x=5,crown_y=5)
        >>> a.apply_load(0,'C',start=3,end=5,mag=-10)

        For applying point/concentrated_loads

        >>> from sympy.physics.continuum_mechanics.arch import Arch
        >>> a = Arch((0,0),(10,0),crown_x=5,crown_y=5)
        >>> a.apply_load(-1,'C',start=2,mag=15,angle=45)

        rT   rS   rV   z(load with the given label already exists)ÚAÚBz1cannot use the given label, reserved for supportsr   Nzprovide end greater than start)ÚstartÚendÚf_yrN   r   éÿÿÿÿz!please provide direction of force)rS   rT   Úf_xrj   ÚmagÚanglerl   rj   r   )r   r   r1   rP   rR   r/   r8   Úaddr:   r   r<   Ú	TypeErrorr(   rO   r   r   r	   r.   r7   r9   r;   )rD   ÚorderÚlabelrh   rm   ri   rn   rT   rS   rV   Úheights              rH   Ú
apply_loadzArch.apply_load�   s  € õd �3‰KŒKˆÝ�3‰KŒKˆÝ�D‰\Œ\ˆå�u‰~Œ~ˆÝ�c‰lŒlˆÝ˜‘”ˆà�DÔ'Ð'Ð'ÝÐGÑHÔHÐHà�IÐÐÝÐPÑQÔQÐQà�AŠ:‰:Øˆ{˜c %ši˜iÝÐ?Ñ@Ô@Ð@à6;À3ÈsÐ-SÐ-SˆDÔ# EÑ*ØÔ×#Ò# EÑ*Ô*Ð*à˜œÐ&Ð&Ø”˜uÐ%Ð%Ô%¨­c°!°C©j¬j¸Ñ.>Ñ)?ÀÀUÍCÐPQÐRUÉJÌJÑEWÐYZÑDZÑAZÑ)[Ñ[Ð%Ð%Ñ%Ø”˜UÐ#Ð#Ô# s­C°°A©J¬J°uÑ,<Ñ'=Ñ=Ð#Ð#Ñ#Ð#à),¨­c°!°C©j¬j¸Ñ.>Ñ(?ÀÀUÍCÐPQÐRUÉJÌJÑEWÐYZÑDZÑAZÑ([�”˜uÑ%Ø&)­3¨s°1©:¬:°eÑ+;Ñ&<�”˜UÑ#à)6ˆDÔ Ñ&à�BŠ;‰;àˆ}ÝÐ CÑDÔDÐDØ”_×)Ò)¨3¨u¨+Ñ6Ô6ˆFà+0°fÀCÍÍCÐPUÉJÌJÉÌÑDWÐ`cÕdgÕhkÐlqÑhrÔhrÑdsÔdsÑ`sÐ{~ð  INð  'Oð  'OˆDÔ˜UÑ#ØÔ×#Ò# EÑ*Ô*Ð*ØÔ×#Ò# EÑ*Ô*Ð*à˜œÐ&Ð&Ø”˜uÐ%Ð%Ô%¨Ô)9¸%Ô)@ÀÔ)GÈÈ4ÔK[Ð\aÔKbÐcfÔKgÑIgÑ)hÑhÐ%Ð%Ñ%Ø”˜UÐ#Ð#Ô# tÔ'7¸Ô'>¸uÔ'EÑEÐ#Ð#Ñ#Ð#à(,Ô(8¸Ô(?ÀÔ(FÈÈ$ÔJZÐ[`ÔJaÐbeÔJfÑHfÑ(g�”˜uÑ%Ø&*Ô&6°uÔ&=¸eÔ&D�”˜UÑ#à˜œÐ&Ð&Ø”˜uÐ%Ð%Ô%¨Ô)9¸%Ô)@ÀÔ)GÈÈEÉÑ)RÑRÐ%Ð%Ñ%Ø”˜UÐ#Ð#Ô# tÔ'7¸Ô'>¸uÔ'EÑEÐ#Ð#Ñ#Ð#à)-Ô)9¸%Ô)@ÀÔ)GÐ(GÈÈEÉÑ(R�”˜uÑ%Ø&*Ô&6°uÔ&=¸eÔ&D�”˜UÑ#à)7ˆDÔ Ñ&Ð&Ð&ð1 ˆ;rJ   c           
      óD  — t          d¦  «        }t          d¦  «        }t          d¦  «        }|| j        v �r
| j                             |¦  «         | j        |         d         }| j        |         d         }| j        |         d         }| j                             |¦  «         | j        |xx         |t          ||¦  «        |z
  z  z  cc<   | j        |xx         |t          ||¦  «        |z
  z  ||t          ||¦  «        z   dz  z
  z  z  cc<   | j                             |¦  «        }t          d|› d	|› �¦  «         dS || j
        v �rG| j                             |¦  «         | j
        |         d         }| j                             |¦  «         | j                             |¦  «         | j        |xx         | j
        |         d         ||z
  z  z  cc<   | j        |xx         | j
        |         d
         || j
        |         d         z
  z  z  cc<   | j        |xx         | j
        |         d
         z  cc<   | j        |xx         | j
        |         d         z  cc<   | j
                             |¦  «        }t          d|› d	|› �¦  «         dS t          d¦  «        ‚)aå  
        This methods removes the load applied to the arch

        Parameters
        ==========

        label : String or Symbol
            The label of the applied load

        Examples
        ========

        >>> from sympy.physics.continuum_mechanics.arch import Arch
        >>> a = Arch((0,0),(10,0),crown_x=5,crown_y=5)
        >>> a.apply_load(0,'C',start=3,end=5,mag=-10)
        >>> a.remove_load('C')
        removed load C: {'start': 3, 'end': 5, 'f_y': -10}
        rT   rS   rV   rh   ri   rj   rN   zremoved load ú: rl   zlabel not foundN)r   r/   r1   Úpopr8   Úremover<   r   r:   Úprintr.   r7   r9   r;   rP   )	rD   rr   rT   rS   rV   rh   ri   rm   Úvals	            rH   Úremove_loadzArch.remove_loadø   sÎ  € õ& �3‰KŒKˆÝ�3‰KŒKˆÝ�D‰\Œ\ˆà�DÔ+Ð+Ñ+àÔ×#Ò# EÑ*Ô*Ð*ØÔ+¨EÔ2°7Ô;ˆEØÔ)¨%Ô0°Ô7ˆCØÔ*¨5Ô1°%Ô8ˆCØÔ×&Ò& uÑ-Ô-Ð-ØŒL˜ÐÐÔ 3­¨A¨c©
¬
°5Ñ(8Ñ#9Ñ9ÐÐÑØŒN˜5Ð!Ð!Ô! S­#¨a°©*¬*°UÑ*:Ñ%;¸RÀÍÈAÈcÉ
Ì
ÑASÐUVÑ@VÑ=VÑ%WÑWÐ!Ð!Ñ!ØÔ)×-Ò-¨eÑ4Ô4ˆCÝÐ0 %Ð0Ð0¨3Ð0Ð0Ñ1Ô1Ð1Ð1Ð1à�dÔ&Ð&Ñ&àÔ×#Ò# EÑ*Ô*Ð*ØÔ$ UÔ+¨CÔ0ˆEØÔ×&Ò& uÑ-Ô-Ð-ØÔ×&Ò& uÑ-Ô-Ð-ØŒN˜5Ð!Ð!Ô! TÔ%5°eÔ%<¸UÔ%CÀRÈÁXÑ%NÑNÐ!Ð!Ñ!ØŒN˜5Ð!Ð!Ô! TÔ%5°eÔ%<¸UÔ%CÀQÀtÔGWÐX]ÔG^Ð_bÔGcÑEcÑ%dÑdÐ!Ð!Ñ!ØŒL˜ÐÐÔ 4Ô#3°EÔ#:¸5Ô#AÑAÐÐÑØŒL˜ÐÐÔ 4Ô#3°EÔ#:¸5Ô#AÑAÐÐÑØÔ"×&Ò& uÑ-Ô-ˆCÝÐ0 %Ð0Ð0¨3Ð0Ð0Ñ1Ô1Ð1Ð1Ð1õ Ð.Ñ/Ô/Ð/rJ   c                 óˆ   — |�|d         |d         f| _         |�|d         |d         f| _        d| _        | j        | _        dS )a.  
        Change position of supports.
        If not provided , defaults to the old value.
        Parameters
        ==========

            left_support: tuple (x, y)
                x: float
                    x-coordinate value of the left_support

                y: float
                    y-coordinate value of the left_support

            right_support: tuple (x, y)
                x: float
                    x-coordinate value of the right_support

                y: float
                    y-coordinate value of the right_support
        Nr   r   )r)   r*   r(   r-   )rD   rE   rF   s      rH   Úchange_support_positionzArch.change_support_position+  sQ   € ð* Ð#Ø".¨q¤/°,¸q´/Ð!BˆDÔàÐ$Ø#0°Ô#3°MÀ!Ô4DÐ"EˆDÔàˆŒØÔ,ˆŒˆˆrJ   c                 óH   — || _         || _        d| _        | j        | _        dS )a‹  
        Change the position of the crown/hinge of the arch

        Parameters
        ==========

            crown_x: Float
                The x coordinate of the position of the hinge
                - if not provided, defaults to old value

            crown_y: Float
                The y coordinate of the position of the hinge
                - if not provided defaults to None
        N)r+   r,   r(   r-   )rD   r   r   s      rH   Úchange_crown_positionzArch.change_crown_positionI  s'   € ð  ˆŒØˆŒØˆŒØÔ,ˆŒˆˆrJ   c                 óŽ   — ddg}|r||vrt          d¦  «        ‚|| j        d<   |r||vrt          d¦  «        ‚|| j        d<   dS dS )aâ  
        Add the type for support at each end.
        Can use roller or hinge support at each end.

        Parameters
        ==========

            left_support, right_support : string
                Type of support at respective end

                    - For roller support , left_support/right_support = "roller"
                    - For hinged support, left_support/right_support = "hinge"
                    - defaults to hinge if value not provided

        Examples
        ========

        For applying roller support at right end

        >>> from sympy.physics.continuum_mechanics.arch import Arch
        >>> a = Arch((0,0),(10,0),crown_x=5,crown_y=5)
        >>> a.change_support_type(right_support="roller")

        Úrollerr    z%supports must only be roller or hinger!   r"   N)rP   r2   )rD   rE   rF   Úsupport_typess       rH   Úchange_support_typezArch.change_support_type]  sz   € ð2 " 'Ð*ˆØð 	2Ø =Ð0Ð0Ý Ð!HÑIÔIÐIà%1ˆDŒN˜6Ñ"àð 	4Ø MÐ1Ð1Ý Ð!HÑIÔIÐIà&3ˆDŒN˜7Ñ#Ð#Ð#ð		4ð 	4rJ   c                 óâ  — || j         k    s*|t          | j        d         | j        d         ¦  «        k     r>t	          dt          | j        d         | j        d         ¦  «        › d| j         › �¦  «        ‚t          d¦  «        }t          | j        |¦  «                             || j	        dz   ¦  «        dz  }t          || j         z
  |z  ¦  «        }| j	        |z   }| j	        |z
  }|||f| _        dS )z›
        This method adds a member/rod at a particular height y.
        A rod is used for stability of the structure in case of a roller support.
        r   z&position of support must be between y=z and y=rS   rN   N)r,   Úminr)   r*   rP   r   r   r(   rO   r+   r   r3   )rD   rT   rS   rL   Úx_diffÚx1Úx2s          rH   Ú
add_memberzArch.add_memberƒ  s  € ð
 ˆTŒ]Š?ˆ?˜a¥ DÔ$6°qÔ$9¸DÔ<OÐPQÔ<RÑ SÔ SÒSÐSÝð  RÅcÈ$ÔJ\Ð]^ÔJ_ÐbfÔbuÐvwÔbxÑFyÔFyð  Rð  Rð  CGô  CPð  Rð  Rñ  Sô  Sð  SÝ�3‰KŒKˆÝ�” Ñ#Ô#×(Ò(¨¨4¬=¸©?Ñ;Ô;¸AÑ=ˆÝ�q˜4œ=Ñ(¨!Ñ+Ñ,Ô,ˆØŒ]˜VÑ#ˆØŒ]˜VÑ#ˆØ˜2˜a�yˆŒˆˆrJ   c                 ó°   — |€| j         S t          d¦  «        }d|v r |d         }t          | j         |||¬¦  «        S | j                              ||¦  «        S )zl
        return the shear at some x-coordinates
        if no x value provided, returns the formula
        NrS   Údir©r‹   )rB   r   r   rO   ©rD   ÚposrG   rS   r‹   s        rH   Úshear_force_atzArch.shear_force_at‘  ób   € ð
 ˆ;ØÔ$Ð$å�s‘”ˆAØ˜ˆˆØ˜U”m�Ý˜TÔ.¨q°¸Ð=Ñ=Ô=Ð=ØÔ$×)Ò)¨!¨CÑ0Ô0Ð0rJ   c                 ó°   — |€| j         S t          d¦  «        }d|v r |d         }t          | j         |||¬¦  «        S | j                              ||¦  «        S )zu
        return the bending moment at some x-coordinates
        if no x value provided, returns the formula
        NrV   r‹   rŒ   )rA   r   r   rO   )rD   rŽ   rG   rV   r‹   s        rH   Úbending_moment_atzArch.bending_moment_atŸ  sb   € ð
 ˆ;ØÔ'Ð'å˜‘”ˆBØ˜ˆˆØ˜U”m�Ý˜TÔ1°"°S¸SÐAÑAÔAÐAØÔ'×,Ò,¨R°Ñ4Ô4Ð4rJ   c                 ó°   — |€| j         S t          d¦  «        }d|v r |d         }t          | j         |||¬¦  «        S | j                              ||¦  «        S )z‚
        return the axial/normal force generated at some x-coordinate
        if no x value provided, returns the formula
        NrS   r‹   rŒ   )rC   r   r   rO   r�   s        rH   Úaxial_force_atzArch.axial_force_at®  r�   rJ   c                 óÀ  — t          d¦  «        }t          d¦  «        }t          d¦  «        }t          | j        ¦  «        }t          | j        ¦  «        }t	          d¦  «        | _        t	          d¦  «        | _        t	          d¦  «        | _        t	          d¦  «        | _        d}d}d}d}	|D ]d}
||
k    }|| j	        |
         z  }|| j
        |
         z  }t	          ||f| j        df¦  «        | _        t	          ||f| j        df¦  «        | _        Œe|D ]d}
||
k    }|| j        |
         z  }|	| j        |
         z  }	t	          |	|f| j        df¦  «        | _        t	          ||f| j        df¦  «        | _        Œe| j                             || j        d         ¦  «                             || j        d         ¦  «        | j                             || j        d         ¦  «                             || j        d         ¦  «        z   }| j                             || j        ¦  «                             || j        ¦  «        | j                             || j        ¦  «                             || j        ¦  «        z   }| j                             || j        d         ¦  «                             || j        ¦  «        | j                             || j        ¦  «                             || j        ¦  «        z
  | j                             || j        d         ¦  «                             || j        ¦  «        z   | j                             || j        ¦  «                             || j        ¦  «        z
  }| j                             || j        d         ¦  «        }| j                             || j        d         ¦  «        }| j        d         d	k    s| j        d
         d	k    r| j        st)          d¦  «         dS t+          d¦  «        \  }}}}}| j        d         d	k    �rÜ| j        d
         d	k    �rÊ| j        d         t-          | j        d         | j        d         ¦  «        k    r÷|dk    rt/          d¦  «        ‚t1          |d¦  «        }t1          |d¦  «        }t1          ||z   |z   d¦  «        }t1          || j        d         | j        d         z
  z  || j        d         | j        d         z
  z  z
  |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   || j        d         | j        z
  z  z   d¦  «        }t3          |||||f|||||f¦  «        }�nÆ| j        d         | j        d         k    r³t1          |d¦  «        }t1          |d¦  «        }t1          ||z   |z   d¦  «        }t1          || j        d         | j        d         z
  z  || j        d         | j        d         z
  z  z
  |z   d¦  «        }t1          ||z   d¦  «        }t3          |||||f|||||f¦  «        }�n÷| j        d         | j        d         k    r±t1          |d¦  «        }t1          |d¦  «        }t1          ||z   |z   d¦  «        }t1          || j        d         | j        d         z
  z  || j        d         | j        d         z
  z  z   |z   d¦  «        }t1          ||z
  d¦  «        }t3          |||||f|||||f¦  «        }�n(| j        d         d	k    �rH| j        d         t-          | j        d         | j        d         ¦  «        k    råt1          |d¦  «        }t1          ||z   d¦  «        }t1          ||z   |z   d¦  «        }t1          || j        d         | j        d         z
  z  || j        d         | j        d         z
  z  z
  |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   || j        d         | j        z
  z  z
  d¦  «        }t3          |||||f|||||f¦  «        }�nü| j        d         | j        d         k    �rt1          |d¦  «        }t1          ||z   |z   d¦  «        }t1          ||z   |z   d¦  «        }t1          || j        d         | j        d         z
  z  || j        d         | j        d         z
  z  z
  || j        d         | j        d         z
  z  z
  |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   || j        d         | j        z
  z  z
  d¦  «        }t3          |||||f|||||f¦  «        }�nØ| j        d         | j        d         k    rìt1          |d¦  «        }t1          ||z
  |z   d¦  «        }t1          ||z   |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   d¦  «        }t1          ||| j        d         | j        d         z
  z  z   || j        d         | j        d         z
  z  z
  || j        d         | j        d         z
  z  z   d¦  «        }t3          |||||f|||||f¦  «        }�nÎ| j        d
         d	k    �rè| j        d         t-          | j        d         | j        d         ¦  «        k    rÆt1          |d¦  «        }t1          ||z   d¦  «        }t1          ||z   |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   || j        d         | j        z
  z  z   d¦  «        }t1          ||| j        d         | j        d         z
  z  z   d¦  «        }t3          |||||f|||||f¦  «        }�nÁ| j        d         | j        d         k    rÏt1          |d¦  «        }t1          ||z   |z   d¦  «        }t1          ||z   |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   d¦  «        }t1          ||| j        d         | j        d         z
  z  z
  || j        d         | j        d         z
  z  z   d¦  «        }t3          |||||f|||||f¦  «        }�nÖ| j        d         | j        d         k    råt1          |d¦  «        }t1          ||z
  |z   d¦  «        }t1          ||z   |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   || j        d         | j        z
  z  z   d¦  «        }t1          ||| j        d         | j        d         z
  z  z   || j        d         | j        d         z
  z  z   ¦  «        }t3          |||||f|||||f¦  «        }nÔt1          ||z   |z   d¦  «        }t1          ||z   |z   d¦  «        }t1          || j        d         | j        d         z
  z  || j        d         | j        d         z
  z  z
  |z   d¦  «        }t1          ||| j        d         | j        z
  z  z   || j        d         | j        z
  z  z
  d¦  «        }t3          ||||f||||f¦  «        }| j        D ]}||         | j        |<   Œ| j                             ||¦  «        | j                             ||¦  «        z   ||         || j        d         z
  z  z
  ||         | j                             ||i¦  «        | j        d         z
  z  z    | _        t;          t=          | j        |¦  «        ¦  «        }| j        ||         z   }| j        ||         z   }|t?          |¦  «        z  |tA          |¦  «        z  z   } | tA          |¦  «        z  |t?          |¦  «        z  z   }!| | _!        |!| _"        dS )a�  
        This method solves for the reaction forces generated at the supports,

        and bending moment and generated in the arch and tension produced in the member if used.

        Examples
        ========

        >>> from sympy.physics.continuum_mechanics.arch import Arch
        >>> a = Arch((0,0),(10,0),crown_x=5,crown_y=5)
        >>> a.apply_load(0,'C',start=3,end=5,mag=-10)
        >>> a.solve()
        >>> a.reaction_force
        {R_A_x: 8, R_A_y: 12, R_B_x: -8, R_B_y: 8}

        >>> from sympy import Symbol
        >>> t = Symbol('t')
        >>> from sympy.physics.continuum_mechanics.arch import Arch
        >>> a = Arch((0,0),(16,0),crown_x=8,crown_y=5)
        >>> a.apply_load(0,'C',start=3,end=5,mag=t)
        >>> a.solve()
        >>> a.reaction_force
        {R_A_x: -4*t/5, R_A_y: -3*t/2, R_B_x: 4*t/5, R_B_y: -t/2}

        >>> a.bending_moment_at(4)
        -5*t/2
        rT   rS   rV   r'   r   Tr   r!   r�   r"   z5member must be added if any of the supports is rollerNzR_A_x R_A_y R_B_x R_B_y TrN   zDnet force in x direction not possible under the specified conditions)#r   Úsortedr7   r8   r   r=   r>   r?   r@   r;   r9   r:   r<   rO   r*   r)   r+   r,   r2   r3   ry   r   ÚmaxrP   r   r   r5   r(   rA   r
   r   r   r	   rC   rB   )"rD   rT   rS   rV   Údiscontinuity_points_xÚdiscontinuity_points_yÚaccumulated_x_momentÚaccumulated_y_momentÚaccumulated_x_loadÚaccumulated_y_loadÚpointÚcondÚmoment_AÚmoment_hinge_leftÚmoment_hinge_rightÚnet_xÚnet_yr#   r$   r%   r&   ÚTrY   r[   Úeq3Úeq4Úeq5rZ   Úsymbrn   ÚfxÚfyÚaxial_forceÚshear_forces"                                     rH   r   z
Arch.solve¼  s  € õ6 �3‰KŒKˆÝ�3‰KŒKˆÝ�D‰\Œ\ˆå!'¨Ô(;Ñ!<Ô!<ÐÝ!'¨Ô(;Ñ!<Ô!<Ðå'¨Ñ1Ô1ˆÔÝ'¨Ñ1Ô1ˆÔå% hÑ/Ô/ˆÔÝ% hÑ/Ô/ˆÔà ÐØ ÐàÐØÐà+ð 	dð 	dˆEØ˜’JˆDØ $¤,¨uÔ"5Ñ5ÐØ  D¤N°5Ô$9Ñ9Ð Ý )Ð+=¸dÐ*CÀTÔEVÐW[ÐD\Ñ ]Ô ]ˆDÔÝ"+Ð-AÀ$Ð,GÈÔI\Ð]aÐHbÑ"cÔ"cˆDÔÐà+ð 	dð 	dˆEØ˜’JˆDØ  D¤N°5Ô$9Ñ9Ð Ø $¤,¨uÔ"5Ñ5ÐÝ )Ð+=¸dÐ*CÀTÔEVÐW[ÐD\Ñ ]Ô ]ˆDÔÝ"+Ð-AÀ$Ð,GÈÔI\Ð]aÐHbÑ"cÔ"cˆDÔÐàÔ&×+Ò+¨A¨dÔ.AÀ!Ô.DÑEÔE×JÒJÈ2ÈdÔN`ÐabÔNcÑdÔdØÔ&×+Ò+¨A¨dÔ.AÀ!Ô.DÑEÔE×JÒJÈ1ÈTÔM_Ð`aÔMbÑcÔcñdˆð !Ô/×4Ò4°Q°t´}ÑEÔE×JÒJÈ2ÈdÌmÑ\Ô\Ø Ô/×4Ò4°Q°t´}ÑEÔE×JÒJÈ1ÈTÌ]Ñ[Ô[ñ\Ðð "Ô0×5Ò5°a¸Ô8KÈAÔ8NÑOÔO×TÒTÐUWÐX\ÔXeÑfÔfØ!Ô0×5Ò5°a¸¼ÑFÔF×KÒKÈBÈtÌ}Ñ]Ô]ñ^à!Ô0×5Ò5°a¸Ô8KÈAÔ8NÑOÔO×TÒTÐUVÐW[ÔWdÑeÔeñfð "Ô0×5Ò5°a¸¼ÑFÔF×KÒKÈAÈdÌmÑ\Ô\ñ]Ðð
 Ô!×&Ò& q¨Ô)<¸QÔ)?Ñ@Ô@ˆØÔ!×&Ò& q¨Ô)<¸QÔ)?Ñ@Ô@ˆàŒN˜6Ô" HÒ,Ð,°´¸wÔ0GÈÒ0QÐ0QÐ[_Ô[gÐ0QÝÐIÑJÔJÐJØˆFå(/Ð0KÑ(LÔ(LÑ%ˆˆu�e˜U AàŒ>˜&Ô! XÒ-Ñ-°$´.ÀÔ2IÈXÒ2UÑ2UàŒ|˜AŒ¥ DÔ$6°qÔ$9¸$Ô:MÈaÔ:PÑ QÔ QÒQÐQà˜!’8�8Ý$Ð%kÑlÔlÐlõ ˜U A™,œ,�CÝ˜U A™,œ,�CÝ˜U U™]¨UÑ2°1Ñ5Ô5�Cå˜U DÔ$7¸Ô$:¸4Ô;MÈaÔ;PÑ$PÑQØ" DÔ$7¸Ô$:¸4Ô;MÈaÔ;PÑ$PÑQñRØRZñ[Ø[\ñ^ô ^�Cõ Ð/°%¸Ô9LÈQÔ9OÐPTÔP]Ñ9]Ñ2^Ñ^Ø ¤¨Q¤°´Ñ =Ñ>ñ?Ø?@ñBô B�Cå$ c¨#¨c°#°cÐ%:¸EÀ%ÈÈeÐTUÐ;VÑWÔW�H‘Hà”˜a” $Ô"4°QÔ"7Ò7Ð7Ý˜ ‘l”l�Ý˜ ‘l”l�Ý˜ ™¨Ñ.¨qÑ1Ô1�Ý˜ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMØ˜DœL¨œO¨DÔ,>¸qÔ,AÑAÑBñCØCKñLØLMñOô O�å˜˜5™ ‘m”m�Ý  # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�‘à”˜a” $Ô"5°aÔ"8Ò8Ð8Ý˜ ‘l”l�Ý˜ ‘l”l�Ý˜ ™¨Ñ.¨qÑ1Ô1�Ý˜ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMØ˜DœL¨œO¨DÔ,>¸qÔ,AÑAÑBñCØCKñLØLMñOô O�å˜˜5™ ‘m”m�Ý  # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�ùàŒ^˜FÔ# xÒ/Ñ/ØŒ|˜AŒ¥ DÔ$6°qÔ$9¸4Ô;NÈqÔ;QÑ RÔ RÒRÐRÝ˜ ‘l”l�Ý˜˜u™ QÑ'Ô'�Ý˜ ™¨Ñ.¨qÑ1Ô1�Ý˜ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMØ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMñNØNVñWØWXñZô Z�åÐ*¨U°DÔ4FÀqÔ4IÈ$Ì-Ñ4WÑ-XÑXØ˜DœL¨œO¨D¬MÑ9Ñ:ñ;Ø;<ñ>ô >�å  # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�‘à”˜a” $Ô"4°QÔ"7Ò7Ñ7Ý˜ ‘l”l�Ý˜ ™ 5™¨Ñ+Ô+�Ý˜ ™¨Ñ.¨qÑ1Ô1�Ý˜ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMØ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMñNà˜DœL¨œO¨DÔ,>¸qÔ,AÑAÑBñCàCKñLàLMñOô O�õ Ð*¨U°DÔ4FÀqÔ4IÈ$Ì-Ñ4WÑ-XÑXØ˜DœL¨œO¨D¬MÑ9Ñ:ñ;Ø;<ñ>ô >�å  # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�‘à”˜a” $Ô"5°aÔ"8Ò8Ð8Ý˜˜q‘k”k�Ý˜ ™ 5™¨Ñ+Ô+�Ý˜ ™¨Ñ.¨qÑ1Ô1�ÝÐ*¨5°$Ô2DÀQÔ2GÈÌÑ2UÑ+VÑVÐWXÑYÔY�Ý˜ %¨Ô)<¸QÔ)?ÀÔ@RÐSTÔ@UÑ)UÑ"VÑVØ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMñNà˜DœL¨œO¨DÔ,>¸qÔ,AÑAÑBñCàCDñFô F�õ ! # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�ùàŒ^˜GÔ$¨Ò0Ñ0ØŒ|˜AŒ¥ DÔ$6°qÔ$9¸4Ô;NÈqÔ;QÑ RÔ RÒRÐRÝ˜˜q‘k”k�Ý˜˜u™ QÑ'Ô'�Ý˜˜u™ UÑ*¨1Ñ-Ô-�ÝÐ+¨E°4Ô3FÀqÔ3IÈ$Ì-Ñ3WÑ,XÑXØ˜DœL¨œO¨D¬MÑ9Ñ:ñ;Ø;<ñ>ô >�å˜ %¨Ô)<¸QÔ)?ÀÔ@RÐSTÔ@UÑ)UÑ"VÑVÐWXÑYÔY�Ý  # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�‘à”˜a” $Ô"4°QÔ"7Ò7Ð7Ý˜˜q‘k”k�Ý˜˜q™ ™ qÑ)Ô)�Ý˜˜u™ UÑ*¨1Ñ-Ô-�ÝÐ+¨E°4Ô3FÀqÔ3IÈ$Ì-Ñ3WÑ,XÑXÐYZÑ[Ô[�Ý˜ ! T¤\°!¤_°TÔ5GÈÔ5JÑ%JÑ"KÑKØ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMñNØNOñQô Q�å  # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�‘à”˜a” $Ô"5°aÔ"8Ò8Ð8Ý˜˜q‘k”k�Ý˜˜q™ ™ qÑ)Ô)�Ý˜˜u™ UÑ*¨1Ñ-Ô-�ÝÐ+¨E°4Ô3FÀqÔ3IÈ$Ì-Ñ3WÑ,XÑXØ˜DœL¨œO¨D¬MÑ9Ñ:ñ;Ø;<ñ>ô >�å˜ ! T¤\°!¤_°TÔ5GÈÔ5JÑ%JÑ"KÑKØ Ô 3°AÔ 6°tÔ7IÈ!Ô7LÑ LÑMñNñ Oô O�å  # c¨#¨c°#Ð!6¸¸eÀEÈ%ÐPQÐ7RÑSÔS�øå�U˜U‘] UÑ*¨1Ñ-Ô-ˆCÝ�U˜U‘] UÑ*¨1Ñ-Ô-ˆCÝ�U˜DÔ/°Ô2°4Ô3EÀaÔ3HÑHÑIØ˜DÔ/°Ô2°4Ô3EÀaÔ3HÑHÑIñJØJRñSØSTñVô VˆCåÐ'¨%°Ô1DÀQÔ1GÈÌÑ1UÑ*VÑVØ˜DÔ/°Ô2°4´=Ñ@ÑAñBØBCñEô EˆCå˜c # c¨#Ð.°°e¸EÀ%Ð/HÑIÔIˆHàÔ(ð 	8ð 	8ˆDØ)1°$¬ˆDÔ  Ñ&Ð&à"&Ô"5×":Ò":¸1¸RÑ"@Ô"@À4ÔCV×C[ÒC[Ð\]Ð^`ÑCaÔCaÑ"aØ"*¨5¤/°2°dÔ6HÈÔ6KÑ3KÑ"Lñ#Mà"*¨5¤/°4´?×3GÒ3GÈÈ2ÈÑ3OÔ3OÐPTÔPbÐcdÔPeÑ3eÑ"fñ#gð  hˆÔõ •d˜4œ?¨1Ñ-Ô-Ñ.Ô.ˆàÔ ¨¤Ñ/ˆØÔ ¨¤Ñ/ˆà�˜U™œ‘m b­¨U©¬¡mÑ3ˆØ�c�#˜e™*œ*‘n r­#¨e©*¬*¡}Ñ4ˆà'ˆÔØ'ˆÔÐÐrJ   )r   )Úmodulesc                 ó  — t          d¦  «        }g }|                      ¦   «         }g }|                      ¦   «         }||z  }| j        d         }| j        d         }t          | j        d         | j        d         ¦  «        }| j        }	t          |dz  |dz  z
  dz   |	dz  |dz  z
  dz   ¦  «        }
|                      ¦   «         }|  	                    ¦   «         }||z  }| j
        �®| j
        d         | j        d         k    r;|                     | j
        d         d|
z  z   g| j
        d         ggd	d
dddœ¦  «         | j
        d         | j        d         k    r;|                     | j
        d         d|
z  z
  g| j
        d         ggd	d
dddœ¦  «         |                     | j        g| j        d|
z  z
  ggd	ddddœ¦  «         |
|dz  |dz  z
  dz   k    rZt          | j        d|
z  z
  | j        || j        d         | j        d         f|d|||d|
z  z
  |dz  f|d|
z  z
  |dz  fdd¬¦  «        }nYt          | j        d|
z  z
  | j        || j        d         | j        d         f|d|||d|
z  z
  |	dz  f|d|
z  z
  |	dz  fdd¬¦  «        }|S )a7  
        This method returns a plot object containing the diagram of the specified arch along with the supports
        and forces applied to the structure.

        Examples
        ========

        >>> from sympy import Symbol
        >>> t = Symbol('t')
        >>> from sympy.physics.continuum_mechanics.arch import Arch
        >>> a = Arch((0,0),(40,0),crown_x=20,crown_y=12)
        >>> a.apply_load(-1,'C',8,150,angle=270)
        >>> a.apply_load(0,'D',start=20,end=40,mag=-4)
        >>> a.apply_load(-1,'E',10,t,angle=300)
        >>> p = a.draw()
        >>> p # doctest: +ELLIPSIS
        Plot object containing:
        [0]: cartesian line: 11.325 - 3*(x - 20)**2/100 for x over (0.0, 40.0)
        [1]: cartesian line: 12 - 3*(x - 20)**2/100 for x over (0.0, 40.0)
        ...
        >>> p.show()

        rS   r   r   çš™™™™™ñ?çš™™™™™é?NrN   ç{®Gázt?Úoé   ÚwhiteÚnone©ÚargsÚmarkerÚ
markersizeÚcolorÚmarkerfacecoloré   ç¸…ëQ¸Ž?Fçš™™™™™©?Úbrown)ÚmarkersÚshowÚannotationsÚ
rectanglesÚxlimÚylimÚaxisÚ
line_color)r   Ú_draw_loadsÚ_draw_supportsr*   r)   r…   r,   r—   Ú_draw_rectanglesÚ_draw_fillerr3   Úappendr+   r   r(   )rD   rS   rÁ   rÃ   rÄ   r`   ÚxmaxÚxminÚyminÚymaxÚlimÚfillerÚ	sing_plots                rH   Údrawz	Arch.drawˆ  s%  € õ2 �3‰KŒKˆØˆØ×&Ò&Ñ(Ô(ˆØˆ
Ø×&Ò&Ñ(Ô(ˆØ�ÑˆàÔ" 1Ô%ˆØÔ! !Ô$ˆÝ�4Ô% aÔ(¨Ô)<¸QÔ)?Ñ@Ô@ˆØŒ}ˆå�$�s‘(˜4 ™8Ñ# AÑ% t¨C¡x°°S±Ñ'8¸Ñ':Ñ;Ô;ˆà×*Ò*Ñ,Ô,ˆ
à×"Ò"Ñ$Ô$ˆØ�FÑˆ
àŒ<Ð#ØŒ|˜AŒ Ô 3°AÔ 6Ò6Ð6Ø—’à!%¤¨a¤°°s±Ñ!:Ð ;¸T¼\È!¼_Ð<MÐNØ!$Ø&'Ø!(Ø*0ðð ñô ð ð Œ|˜AŒ Ô 2°1Ô 5Ò5Ð5Ø—’à!%¤¨a¤°°s±Ñ!:Ð ;¸T¼\È!¼_Ð<MÐNØ!$Ø&'Ø!(Ø*0ðð ñô ð ð 	�ŠØ”]�O T¤]°5¸±9Ñ%<Ð$=Ð>ØØØØ$ð
ð 
ñ 	ô 	ð 	ð ��S‘˜˜c™Ñ! !Ñ#Ò#Ð#å˜Tœ_¨U°3©YÑ6Ø!œ_Ø Ô!3°AÔ!6¸Ô8KÈAÔ8NÐOØ%,Ø"'Ø)4Ø*4Ø#'¨¨S©¡=°$°s±(Ð";Ø#'¨¨S©¡=°$°s±(Ð";Ø"'Ø(/ð
1ñ 
1ô 
1ˆIˆIõ ˜Tœ_¨U°3©YÑ6Ø!œ_Ø Ô!3°AÔ!6¸Ô8KÈAÔ8NÐOØ%,Ø"'Ø)4Ø*4Ø#'¨¨S©¡=°$°s±(Ð";Ø#'¨¨S©¡=°$°s±(Ð";Ø"'Ø(/ð
1ñ 
1ô 
1ˆIð ÐrJ   c                 ó6  — g }| j         d         }| j        d         }t          | j        d         | j         d         ¦  «        }| j        }t	          d|z  d|z  z
  ¦  «        t	          d|z  d|z  z
  ¦  «        k    rd|z  d|z  z
  }nd|z  d|z  z
  }| j        d         dk    r<|                     | j        d         g| j        d         d|z  z
  ggdd	d
ddœ¦  «         n;|                     | j        d         g| j        d         d|z  z
  ggddd
ddœ¦  «         | j        d         dk    r<|                     | j         d         g| j         d         d|z  z
  ggdd	d
ddœ¦  «         n;|                     | j         d         g| j         d         d|z  z
  ggddd
ddœ¦  «         |                     | j         d         g| j         d         d|z  z
  ggddd
ddœ¦  «         |                     | j        d         g| j        d         d|z  z
  ggddd
ddœ¦  «         |S )Nr   r   r°   r±   r!   r�   g{®Gáz”?r³   é   Úblackr¶   r·   gyé&1¬|?é   é   r"   g;ßO�—n¢?Ú_)r*   r)   r…   r,   Úabsr2   rÍ   )rD   Úsupport_markersrÎ   rÏ   rÐ   rÑ   Úmax_diffs          rH   rÊ   zArch._draw_supportsó  s
  € ØˆàÔ" 1Ô%ˆØÔ! !Ô$ˆÝ�4Ô% aÔ(¨Ô)<¸QÔ)?Ñ@Ô@ˆØŒ}ˆåˆs�4‰x˜˜D™Ñ Ñ!Ô!¥# c¨$¡h¨s°4©xÑ&7Ñ"8Ô"8Ò8Ð8Ø˜4‘x  D¡Ñ(ˆHˆHà˜4‘x  D¡Ñ(ˆHàŒ>˜&Ô! 8Ò+Ð+Ø×"Ò"ð Ô+¨AÔ.Ð/ØÔ+¨AÔ.¨t°H©}Ñ<Ð=ðð !Ø!#Ø#Ø&,ð	ð 	ñô ð ð ð ×"Ò"ð Ô+¨AÔ.Ð/ØÔ+¨AÔ.¨u°X©~Ñ=Ð>ðð Ø!#Ø#Ø&,ð	ð 	ñô ð ð Œ>˜'Ô" HÒ,Ð,Ø×"Ò"ð Ô,¨QÔ/Ð0ØÔ,¨QÔ/°°X±Ñ=Ð>ðð !Ø!#Ø#Ø&,ð	ð 	ñô ð ð ð ×"Ò"ð Ô,¨QÔ/Ð0ØÔ,¨QÔ/°°h±Ñ>Ð?ðð Ø!#Ø#Ø&,ð	ð 	ñô ð ð 	×Òð Ô(¨Ô+Ð,ØÔ(¨Ô+¨E°(©NÑ:Ð;ðð ØØØ"(ð	ð 	ñ	
ô 	
ð 	
ð 	×Òð Ô'¨Ô*Ð+ØÔ'¨Ô*¨5°©>Ñ9Ð:ðð ØØØ"(ð	ð 	ñ	
ô 	
ð 	
ð ÐrJ   c                 óÀ  — g }| j         d         }| j        d         }t          | j        d         | j         d         ¦  «        }| j        }t	          d|z  d|z  z
  ¦  «        t	          d|z  d|z  z
  ¦  «        k    rd|z  d|z  z
  }nd|z  d|z  z
  }| j        ��_| j        d         t          | j        d         | j         d         ¦  «        k    rV|                     | j        d         | j        d         d|z  z
  f| j        d         | j        d         z
  d|z  ddd	œ¦  «         nÔ| j        d         | j        d         k    rV|                     | j        d         | j        d         d|z  z
  f| j         d         | j        d         z
  d|z  ddd	œ¦  «         nb|                     | j        d         | j        d         d|z  z
  ft	          | j        d         | j        d         z
  ¦  «        d|z  d
dd	œ¦  «         | j        r]| j        D ]U}| j        |         d         }| j        |         d         }	|                     || j        |dz  z   f|	|z
  |dz  ddœ¦  «         ŒV|S )Nr   r   r°   r±   rN   r²   g{®Gáz„?rÀ   )ÚxyÚwidthrs   rn   r»   é´   rh   ri   ç333333Ã?Úorange©rà   rá   rs   r»   )	r*   r)   r…   r,   rÜ   r3   r—   rÍ   r/   )
rD   ÚmemberrÎ   rÏ   rÐ   rÑ   rÞ   Úloadsrh   ri   s
             rH   rË   zArch._draw_rectanglesR  sµ  € ØˆàÔ" 1Ô%ˆØÔ! !Ô$ˆÝ�4Ô% aÔ(¨Ô)<¸QÔ)?Ñ@Ô@ˆØŒ}ˆåˆs�4‰x˜˜D™Ñ Ñ!Ô!¥# c¨$¡h¨s°4©xÑ&7Ñ"8Ô"8Ò8Ð8Ø˜4‘x  D¡Ñ(ˆHˆHà˜4‘x  D¡Ñ(ˆHàŒ<Ñ#ØŒ|˜AŒ¥ TÔ%7¸Ô%:¸4Ô;NÈqÔ;QÑ!RÔ!RÒRÐRØ—’à"œl¨1œo¨d¬l¸1¬o¸eÀH¹nÑ.LÐMØ $¤¨Q¤°´¸Q´Ñ ?Ø"& x¡-Ø!"Ø 'ðð ñô ð ð ð ”˜a” $Ô"4°QÔ"7Ò7Ð7Ø—’à"œl¨1œo¨d¬l¸1¬o¸eÀH¹nÑ.LÐMØ $Ô 3°AÔ 6°t´|ÀA´Ñ FØ"& x¡-Ø!"Ø 'ðð ñô ð ð ð —’à"œl¨1œo¨d¬l¸1¬o¸eÀH¹nÑ.LÐMÝ # DÔ$6°qÔ$9¸$¼,Àq¼/Ñ$IÑ JÔ JØ"& x¡-Ø!$Ø 'ðð ñô ð ð Ô"ð 	ØÔ0ð ð �àÔ/°Ô6°wÔ?�ØÔ-¨eÔ4°UÔ;�à—’à# D¤M°(¸4±-Ñ$?Ð@Ø"% e¡)Ø"*¨4¡-Ø!)ð	ð ñô ð ð ð ˆrJ   c                 óœ  — g }| j         d         }| j        d         }t          | j        d         | j         d         ¦  «        }| j        }t	          d|z  d|z  z
  ¦  «        t	          d|z  d|z  z
  ¦  «        k    rd|z  d|z  z
  }nd|z  d|z  z
  }| j        D �]#}| j        |         d         }| j        |         d         }	| j        |         d         }
| j        |         d         }|                     d	|t          t          |
¦  «        ¦  «        |z  d
z  z   |	t          t          |
¦  «        ¦  «        |z  d
z  z   f||	fddddddddœdœ¦  «         |                     |› d|› d�dd|t          t          |
¦  «        ¦  «        |z  dz  z   |	t          t          |
¦  «        ¦  «        |z  dz  z   fdœ¦  «         �Œ%| j
        D �]„}| j
        |         d         }| j
        |         d         }| j
        |         d         }t                               ||||z
  |dz  z  ¦  «        }t                               ||¦  «        }|D ]}}|dk     r;|                     d	|| j        |dz  z   f|| j        |dz  z   fddddddœdœ¦  «         ŒC|                     d	|| j        |dz  z   f|| j        |dz  z   fddddddœdœ¦  «         Œ~|dk     rB|                     |› dt	          |¦  «        › d�dd||z   d z  | j        |d!z  z   fdœ¦  «         �ŒD|                     |› dt	          |¦  «        › d�dd||z   d z  | j        |d"z  z   fdœ¦  «         �Œ†|S )#Nr   r   r°   r±   rS   rT   rn   rm   Ú g{®Gáz´?é
   Úboldg      ø?r½   Úblue)rá   Ú
headlengthÚ	headwidthÚ	facecolorÚ	edgecolor)Útextrà   ÚxytextÚfontsizeÚ
fontweightÚ
arrowpropsrv   z Ng¸…ëQ¸¾?)rñ   ró   rô   rà   rh   ri   rj   g      Ð?r¿   rã   rä   )rñ   rà   rò   rõ   gš™™™™™É?z N/mrN   gffffffÆ?g      À?)r*   r)   r…   r,   rÜ   r.   rÍ   r   r   r	   r/   r   r   )rD   Úload_annotationsrÎ   rÏ   rÐ   rÑ   rÞ   ÚloadrS   rT   rn   rm   rh   ri   Úx_pointsrž   s                   rH   rÉ   zArch._draw_loads“  sM  € ØÐàÔ" 1Ô%ˆØÔ! !Ô$ˆÝ�4Ô% aÔ(¨Ô)<¸QÔ)?Ñ@Ô@ˆØŒ}ˆåˆs�4‰x˜˜D™Ñ Ñ!Ô!¥# c¨$¡h¨s°4©xÑ&7Ñ"8Ô"8Ò8Ð8Ø˜4‘x  D¡Ñ(ˆHˆHà˜4‘x  D¡Ñ(ˆHàÔ$ð 	ñ 	ˆDØÔ  Ô& sÔ+ˆAØÔ  Ô& sÔ+ˆAØÔ$ TÔ*¨7Ô3ˆEØÔ" 4Ô(¨Ô/ˆCØ×#Ò#àà�#�c %™jœj™/œ/¨(Ñ2°4Ñ7Ñ7Ø�#�c %™jœj™/œ/¨(Ñ2°4Ñ7Ñ7ðð   ˜UØ!Ø"(Ø*-¸AÈ1ÐZ`ÐmsÐ!tÐ!tð
ð 
ñô ð ð ×#Ò#à"Ð-Ð- cÐ-Ð-Ð-Ø!Ø"(Ø�S¥ U¡¤™_œ_¨XÑ5°dÑ:Ñ:¸1½SÅÀUÁÄ¹_¼_ÈXÑ=UÐVZÑ=ZÑ;ZÐ[ð	ð ñô ð ñ ð Ô+ð *	ñ *	ˆDØÔ+¨DÔ1°'Ô:ˆEØÔ)¨$Ô/°Ô6ˆCØÔ)¨$Ô/°Ô6ˆCÝ—|’| E¨#¨s°5©y¸8ÀD¹=Ñ.IÑJÔJˆHÝ—|’| H¨SÑ1Ô1ˆHØ!ð ð �Ø�q’5�5Ø$×+Ò+à#%Ø"'¨¬°h¸t±mÑ(CÐ!DØ',¨T¬]¸8ÀD¹=Ñ-HÐ&IØ25ÀAÐSTÐbjÐwð  *Að  *Að	ð ñô ð ð ð %×+Ò+à#%Ø"'¨¬°h¸s±lÑ(BÐ!CØ',¨T¬]¸8ÀD¹=Ñ-HÐ&IØ25ÀAÐSTÐbjÐwð  *Að  *Að	ð ñô ð ð ð �1ŠuˆuØ ×'Ò'à"&Ð8Ð8­#¨c©(¬(Ð8Ð8Ð8Ø#%Ø&,Ø$ S™y¨!™m¨D¬M¸(À5¹.Ñ,HÐIð	ð ñô ð ñ ð !×'Ò'à"&Ð8Ð8­#¨c©(¬(Ð8Ð8Ð8Ø#%Ø&,Ø$ S™y¨!™m¨D¬M¸(À5¹.Ñ,HÐIð	ð ñô ð ñ ð  ÐrJ   c                 ó®  — t          d¦  «        }g }| j        d         }| j        d         }t          | j        d         | j        d         ¦  «        }| j        }t          d|z  d|z  z
  ¦  «        t          d|z  d|z  z
  ¦  «        k    rd|z  d|z  z
  }nd|z  d|z  z
  }t                               | j        d         | j        d         | j        d         | j        d         z
  ||z  z  ¦  «        }|D ]_}	|                     |	| j	         
                    ||	¦  «        |dz  z
  f| j        d         | j        d         z
  ||z  z  |dz  ddœ¦  «         Œ`|S )	NrS   r   r   r°   r±   r¾   rÀ   rå   )r   r*   r)   r…   r,   rÜ   r   r   rÍ   r(   rO   )
rD   rS   rÓ   rÎ   rÏ   rÐ   rÑ   rÞ   rø   rž   s
             rH   rÌ   zArch._draw_fillerè  s˜  € Ý�3‰KŒKˆØˆØÔ" 1Ô%ˆØÔ! !Ô$ˆÝ�4Ô% aÔ(¨Ô)<¸QÔ)?Ñ@Ô@ˆØŒ}ˆåˆs�4‰x˜˜D™Ñ Ñ!Ô!¥# c¨$¡h¨s°4©xÑ&7Ñ"8Ô"8Ò8Ð8Ø˜4‘x  D¡Ñ(ˆHˆHà˜4‘x  D¡Ñ(ˆHå—<’< Ô 2°1Ô 5°dÔ6IÈ!Ô6LÈdÔNaÐbcÔNdÐeiÔewÐxyÔezÑNzð  ~Fð  GOñ  ~Oñ  NPñ  Qô  Qˆàð 	ð 	ˆEØ�MŠMà# D¤O×$8Ò$8¸¸5Ñ$AÔ$AÀ(È5Á.Ñ$PÐQØ"&Ô"5°aÔ"8¸Ô9KÈAÔ9NÑ"NÐQYÐZbÑQbÑ!cØ"*¨5¡.Ø!(ð	ð ñô ð ð ð ˆrJ   )NN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rI   Úpropertyr-   r^   r`   rE   rF   rd   rt   r{   r}   r   rƒ   r‰   r�   r’   r”   r   r   rÕ   rÊ   rË   rÉ   rÌ   © rJ   rH   r   r      s  € € € € € ðð ð(!ð !ð !ðD ðð ñ „XððB ðð ñ „Xðð ðð ñ „Xðð ð"ð "ñ „Xð"ð ð#ð #ñ „Xð#ð ð$ð $ñ „Xð$ðh8ð h8ð h8ð h8ðV10ð 10ð 10ðf-ð -ð -ð -ð<-ð -ð -ð -ð($4ð $4ð $4ð $4ðL!ð !ð !ð1ð 1ð 1ð 1ð5ð 5ð 5ð 5ð1ð 1ð 1ð 1ðJ(ð J(ð J(ðX Ð 
Ð+Ñ+Ô+ðgð gñ ,Ô+ðgðT]ð ]ð ]ð~?ð ?ð ?ðBS ð S ð S ðjð ð ð ð rJ   r   N)rý   Úsympy.core.sympifyr   Úsympy.core.symbolr   r   Úsympyr   r   r   r	   r
   r   r   Úsympy.core.relationalr   Úsympy.solvers.solversr   Úsympy.functionsr   Úsympy.plottingr   r   Úsympy.utilities.decoratorr   Úsympy.external.importtoolsr   r   r   rÿ   rJ   rH   ú<module>r	     sF  ððð ð 'Ð &Ð &Ð &Ð &Ð &Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø $Ð $Ð $Ð $Ð $Ð $Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4àˆ�g¨j¸(¸Ð-DÐEÑEÔE€ðpð pð pð pð pñ pô pð pð pð prJ   