pytc2.general

Created on Thu Mar 2 11:22:31 2023

Originally based on the work of Combination of 2011 Christopher Felton Further modifications were added for didactic purposes by Mariano Llamedo llamedom _at_ frba_utn_edu_ar

@author: marianux

Module Contents

Functions

get_home_directory()

pp(z1, z2)

Asocia en paralelo dos impedancias o en serie dos admitancias.

factorSOS(ratfunc[, decimals])

Factoriza una función racional simbólica, en polinomios de segundo y primer

symbfunc2tf(tt)

Convierte una función racional simbólica, con coeficientes numéricos

simplify_n_monic(tt[, poly_val])

Factoriza una función racional tt, en polinmios numerador y denominador

_symbolic_gt(a, b)

Intenta decidir si a > b (para exponentes simbólicos) con fallback numérico y lexicográfico.

flatten_pow(expr)

Convierte potencias anidadas (a**b)**c -> a**(b*c)

simplify_symbolic_exponents(expr, poly_var)

Simplifica expresiones con exponentes simbólicos en la variable polinómica.

sort_poly_descending(poly_expr, poly_var, max_power, ...)

Reordenar el orden un polinomio. Especialmente para polinomios en la var.

simplify_n_monic_z(tt, poly_var[, bSortAscending])

Versión mejorada de simplify_n_monic que maneja exponentes simbólicos.

Chebyshev_polynomials(nn)

Calcula el polinomio de Chebyshev de grado nn.

a_equal_b_latex_s(a, b)

A partir de un string o expresión de SymPy (a), y otra expresión de SymPy (b):

expr_simb_expr(a, b[, symbol])

A partir de un string o expresión de SymPy (a), y otra expresión de SymPy (b):

to_latex(unsimbolo)

Convierte un símbolo en un string formateado para visualizarse en LaTeX.

print_latex(unstr)

Muestra una expresión LaTeX en formato matemático.

print_console_alert(unstr)

Imprime una cadena rodeada por símbolos de alerta en la consola.

print_console_subtitle(unstr)

Imprime un subtítulo en la consola.

running_in_spyder()

running_in_jupyter()

print_subtitle(unstr)

Imprime un subtítulo.

db2nepper(at_en_db)

Convierte una magnitud en decibels a su equivalente en nepers.

nepper2db(at_en_np)

Convierte una magnitud en neperios a su equivalente en decibelios.

Attributes

pytc2_full_path

Path a donde se encuentra pyTC2 localmente.

small_val

Es un valor muy pequeño para que las funciones que tienen restringido su evaluación

s

Variable compleja de Laplace s = σ + j.ω

w

Fourier real variable ω

pytc2.general.pytc2_full_path

Path a donde se encuentra pyTC2 localmente.

pytc2.general.small_val

Es un valor muy pequeño para que las funciones que tienen restringido su evaluación en 0 no arrojen warnings ni errores. e.g. los cálculos de los logaritmos

pytc2.general.s

Variable compleja de Laplace s = σ + j.ω En caso de necesitar usarla, importar el símbolo desde este módulo.

pytc2.general.w

Fourier real variable ω En caso de necesitar usarla, importar el símbolo desde este módulo.

pytc2.general.get_home_directory()[source]
pytc2.general.pp(z1, z2)[source]

Asocia en paralelo dos impedancias o en serie dos admitancias.

Parameters:
  • z1 (Symbolic o float) – Inmitancia 1.

  • z2 (Symbolic o float) – Inmitancia 2.

Returns:

zp – Inmitancia resultante.

Return type:

Symbolic o float

Raises:

ValueError – Si alguno de los argumentos no es de tipo Symbolic.:

Examples

>>> import sympy as sp
>>> from pytc2.general import pp
>>> # Asociación en paralelo de dos impedancias
>>> z1 = sp.symbols('z1')
>>> z2 = sp.symbols('z2')
>>> zp = pp(z1, z2)
>>> print(zp)
z1*z2/(z1 + z2)
>>> # Asociación en serie de dos admitancias
>>> y1 = 1/z1
>>> y2 = 1/z2
>>> yp = pp(y1, y2)
>>> print(yp)
1/(z1*z2*(1/z2 + 1/z1))
pytc2.general.factorSOS(ratfunc, decimals=4)[source]

Factoriza una función racional simbólica, en polinomios de segundo y primer orden.

Parameters:
  • ratfunc (Expr. simbólica) – Función racional simbólica.

  • decimals (entero) – Cantidad de decimales para la evaluación simbólica.

Returns:

Función racional simbólica factorizada.

Return type:

Expr. simbólica

Raises:

ValueError – Si la entrada no es una expresión simbólica.

Examples

>>> import sympy as sp
>>> from pytc2.general import s, factorSOS
>>> tt = (s**4 + 8*s**3 + 18*s**2 + 11*s + 2)/(s**3 + 16*s**2 + 65*s + 14)
>>> factorized_tt, _, _ = factorSOS(tt)
>>> print(factorized_tt)
(s + 0.382)*(s + 0.438)*(s + 2.62)*(s + 4.56)/((s + 0.228)*(s + 7.0)*(s + 8.77))
pytc2.general.symbfunc2tf(tt)[source]

Convierte una función racional simbólica, con coeficientes numéricos (convertibles a flotante), en un objeto transfer function.

Parameters:

tt (Expr. simbólica) – Función racional simbólica.

Returns:

TransferFunction que representa numéricamente la función.

Return type:

TransferFunction

Raises:

ValueError – Si la entrada no es una expresión simbólica.

Examples

>>> import sympy as sp
>>> from pytc2.general import s, symbfunc2tf
>>> tt = (s**2 + 3*s + 2) / (2*s**2 + 5*s + 3)
>>> simplified_tt = symbfunc2tf(tt)
>>> print(simplified_tt)
TransferFunctionContinuous(
array([0.5, 1.5, 1. ]),
array([1. , 2.5, 1.5]),
dt: None
)
pytc2.general.simplify_n_monic(tt, poly_val=s)[source]

Factoriza una función racional tt, en polinmios numerador y denominador mónicos multiplicados por un escalar k.

Parameters:

tt (Expr) – Polinomio de fracciones a simplificar.

Returns:

  • k – escala o factor de la función tt.

  • num – Polinomio numerador simplificado en forma monica.

  • den – Polinomio denominador simplificado en forma monica.

Raises:

ValueError – Si la entrada no es una expresión simbólica.

Examples

>>> import sympy as sp
>>> from pytc2.general import s, simplify_n_monic
>>> tt = (s**2 + 3*s + 2) / (2*s**2 + 5*s + 3)
>>> k, num, den = simplify_n_monic(tt)
>>> simplified_tt = k * num / den
>>> print(simplified_tt)
(s + 2)/(2*s + 3)
pytc2.general._symbolic_gt(a, b)

Intenta decidir si a > b (para exponentes simbólicos) con fallback numérico y lexicográfico.

pytc2.general.flatten_pow(expr)

Convierte potencias anidadas (a**b)**c -> a**(b*c) Repite la transformación hasta que ya no cambie la expresión.

pytc2.general.simplify_symbolic_exponents(expr, poly_var)

Simplifica expresiones con exponentes simbólicos en la variable polinómica. Intenta reescribir la expresión en términos de potencias enteras de poly_var.

Parameters:
  • expr (Expr) – Expresión a simplificar

  • poly_var (Symbol) – Variable del polinomio (ej: z)

Returns:

Expresión simplificada

Return type:

Expr

pytc2.general.sort_poly_descending(poly_expr, poly_var, max_power, max_coef)

Reordenar el orden un polinomio. Especialmente para polinomios en la var. compleja ‘z’.

Parameters:
  • poly_expr (Expr) – Polinomio a reordenar

  • poly_var (Symbol) – Variable del polinomio

  • max_power (Expr) – Máximo exponente del polinomio

  • max_coef (Expr) – Máximo coeficiente del término ‘max_power’ del polinomio

Returns:

Polinomio reordenado

Return type:

reorder_expr

pytc2.general.simplify_n_monic_z(tt, poly_var, bSortAscending=True)

Versión mejorada de simplify_n_monic que maneja exponentes simbólicos.

Parameters:
  • tt (Expr) – Función racional a simplificar

  • poly_var (Symbol) – Variable del polinomio

  • bSortAscending (bool) – Ordenar polinomio de forma ascendente. Default: True.

Returns:

  • k – Factor de escala

  • num – Numerador simplificado (no necesariamente mónico)

  • den – Denominador simplificado (no necesariamente mónico)

pytc2.general.Chebyshev_polynomials(nn)[source]

Calcula el polinomio de Chebyshev de grado nn.

Parameters:

nn (int) – Grado del polinomio de Chebyshev.

Returns:

Ts – Matriz de parámetros de transferencia scattering.

Return type:

Symbolic Matrix

Raises:

ValueError – Si nn no es un entero positivo.

Examples

>>> from pytc2.general import Chebyshev_polynomials
>>> Ts = Chebyshev_polynomials(3)
>>> print(Ts)
w*(4*w**2 - 3)
pytc2.general.a_equal_b_latex_s(a, b)[source]

A partir de un string o expresión de SymPy (a), y otra expresión de SymPy (b):

\[a = b\]

en un nuevo string formateado para visualizarse en LaTeX.

Parameters:
  • a (Symbolic or str) – Símbolo o cadena para el lado izquierdo de la igualdad.

  • b (Symbolic, str o lista de ambas) – Símbolo o cadena para el lado derecho de la igualdad.

Returns:

str – String formateado en LaTeX representando la igualdad.

Return type:

string

Raises:

ValueError – Si a no es un símbolo ni una cadena. Si b no es un símbolo.

Examples

>>> import sympy as sp
>>> from pytc2.general import a_equal_b_latex_s, print_latex
>>> s = sp.symbols('s')
>>> tt = (s**2 + 3*s + 2) / (2*s**2 + 5*s + 3)
>>> print(a_equal_b_latex_s(sp.symbols('tt'), tt))
'tt=\frac{s^{2} + 3 s + 2}{2 s^{2} + 5 s + 3}$'
>>> print_latex(a_equal_b_latex_s(sp.symbols('tt'), tt))
[LaTex formated equation]
pytc2.general.expr_simb_expr(a, b, symbol='=')[source]

A partir de un string o expresión de SymPy (a), y otra expresión de SymPy (b):

a symbol b

en un nuevo string formateado para visualizarse en LaTeX.

Parameters:
  • a (Symbolic or str) – Símbolo o cadena para el lado izquierdo de la expresión.

  • b (Symbolic or str) – Símbolo o cadena para el lado derecho de la expresión.

  • symbol (str, optional) – Símbolo de operación entre a y b (por defecto es ‘=’).

Returns:

String formateado en LaTeX representando la expresión.

Return type:

str

Raises:

ValueError – Si a no es un símbolo ni una cadena. Si b no es un símbolo.

Examples

>>> import sympy as sp
>>> from pytc2.general import expr_simb_expr, print_latex
>>> s = sp.symbols('s')
>>> tt = (s**2 + 3*s + 2) / (2*s**2 + 5*s + 3)
>>> tt1 = (s**2 + 4*s + 7) / (2*s**2 + 5*s + 3)
>>> print_latex(expr_simb_expr('tt', tt1, '\neq'))
[LaTex formated equation]
>>> print_latex(expr_simb_expr('tt', tt))
[LaTex formated equation]
pytc2.general.to_latex(unsimbolo)[source]

Convierte un símbolo en un string formateado para visualizarse en LaTeX.

Parameters:

unsimbolo (Symbolic or str) – Símbolo o cadena a convertir a formato LaTeX.

Returns:

String formateado en LaTeX.

Return type:

str

Raises:

ValueError – Si unsimbolo no es un símbolo ni una cadena.

Examples

>>> import sympy as sp
>>> from pytc2.general import to_latex, print_latex
>>> print(to_latex(sp.symbols('x')))
$x$
>>> print_latex(to_latex(sp.symbols('x')))
[LaTex formated equation]
pytc2.general.print_latex(unstr)[source]

Muestra una expresión LaTeX en formato matemático.

Parameters:

unstr (str) – Cadena que representa la expresión LaTeX.

Returns:

Esta función no devuelve nada, simplemente muestra la expresión en formato LaTeX.

Return type:

None

Raises:

ValueError – Si unstr no es una cadena.

Examples

>>> import sympy as sp
>>> from pytc2.general import to_latex, print_latex
>>> print(to_latex('x'))
$x$
>>> print_latex(to_latex('x'))
[LaTex formated equation]
pytc2.general.print_console_alert(unstr)[source]

Imprime una cadena rodeada por símbolos de alerta en la consola.

Parameters:

unstr (str) – Cadena a imprimir.

Returns:

Esta función no devuelve nada, simplemente imprime la cadena en la consola.

Return type:

None

Raises:

ValueError – Si unstr no es una cadena.

See also

print_subtitle(), print_latex(), print_alert()

Examples

>>> from pytc2.general import print_console_alert
>>> print_console_alert('Advertencia: Datos incompletos')
##################################
# Advertencia: Datos incompletos #
##################################
pytc2.general.print_console_subtitle(unstr)[source]

Imprime un subtítulo en la consola.

Parameters:

unstr (str) – Cadena que representa el subtítulo.

Returns:

Esta función no devuelve nada, simplemente imprime el subtítulo en la consola.

Return type:

None

Raises:

ValueError – Si unstr no es una cadena.

Examples

>>> from pytc2.general import print_console_subtitle
>>> print_console_subtitle('Subtítulo')
Subtítulo
---------
pytc2.general.running_in_spyder()
pytc2.general.running_in_jupyter()
pytc2.general.print_subtitle(unstr)[source]

Imprime un subtítulo.

Parameters:

unstr (str) – Cadena que representa el subtítulo.

Returns:

Esta función no devuelve nada, simplemente imprime el subtítulo.

Return type:

None

Raises:

ValueError – Si unstr no es una cadena.

Examples

>>> from pytc2.general import print_subtitle
>>> print_subtitle('Subtítulo')
<IPython.core.display.Markdown object>
pytc2.general.db2nepper(at_en_db)[source]

Convierte una magnitud en decibels a su equivalente en nepers.

Parameters:

at_en_db (float or numpy.ndarray) – Magnitud en decibelios a convertir.

Returns:

Equivalente en nepers.

Return type:

float or numpy.ndarray

Raises:

ValueError – Si at_en_db no es de tipo float.:

See also

nepper2db()

Examples

>>> from pytc2.general import db2nepper
>>> db2nepper(20.)
2.3025850929940455
>>> db2nepper(1.)
0.11512925464970228
pytc2.general.nepper2db(at_en_np)[source]

Convierte una magnitud en neperios a su equivalente en decibelios.

Parameters:

at_en_np (float or numpy.ndarray) – Magnitud en neperios a convertir.

Returns:

Equivalente en decibelios.

Return type:

float or numpy.ndarray

Raises:

ValueError – Si at_en_db no es de tipo float.:

See also

db2nepper()

Examples

>>> from pytc2.general import nepper2db
>>> nepper2db(1.)
8.685889638065037
>>> nepper2db(2.3025850929940455)
20.