import plotly.graph_objects as go 
import numpy as np

def pplane(system):
    """
        Trace les zéros et pôles pour les systèmes à temps continu.

        Cette fonction trace les zéros spécifiés dans le vecteur `z` et les pôles spécifiés
        dans le vecteur `p`.

        Mettre un vecteur si absence de pôles ou de zéros.

        Parametres
        ----------
        system : scipy.signal TransferFunctionContinuous / StateSpaceContinuous / ZerosPolesGainContinuous
            système à temps continu
        """
    
    z = system.to_zpk().zeros
    p = system.to_zpk().poles
    
    fig = go.Figure()
    
    # Add zeros
    fig.add_trace(go.Scatter(mode='markers', 
                            name="zeros",
                            marker=dict(symbol="circle-open", size=10, line=dict(width=2, color="DarkSlateGrey")), 
                            x=z.real, 
                            y=z.imag))
    
    # Add poles
    fig.add_trace(go.Scatter(mode='markers', 
                             name="poles",
                             marker=dict(symbol="x-thin", size=10, line=dict(width=2, color="DarkSlateGrey")),  
                             x=p.real, 
                             y=p.imag))
    
    # Set figure properties
    fig.update_layout(
    width = 500,
    height = 500,
    title = "Diagramme Pôles-Zéros")

    fig.update_yaxes(range=[None, None], zeroline=True, zerolinecolor='Gray', showgrid=True, gridwidth=1, gridcolor='LightGray', scaleanchor="x",    scaleratio=1  )
    fig.update_xaxes(range=[None, None], zeroline=True, zerolinecolor='Gray', showgrid=True, gridwidth=1, gridcolor='LightGray')
    
    fig.show()
