It was my fault. I was trying to run the code in another folder and it was giving me the error
*from sympy.plotting.series import LineOver1DRangeSeriesModuleNotFoundError: No module named 'sympy.plotting.series'* . But when I run the code into a folder where the sympy code folder is also located the problem is solved. Thank you for your time. Στις Δευ 4 Μαρ 2024 στις 3:50 μ.μ., ο/η Shishir Kushwaha < kushwahashishir1...@gmail.com> έγραψε: > I dont see any particular problem with the code , however series does not > seem to be a sub-module in your sympy plotting module , try re-running it > or removing and putting back sympy . > > On Monday 4 March 2024 at 01:49:55 UTC+5:30 tsioupr...@gmail.com wrote: > >> The code is from this pull request [ >> https://github.com/sympy/sympy/pull/25251] >> >> from math import isclose >> from sympy import lambdify, latex >> from sympy.core.numbers import I, pi >> from sympy.core.symbol import Dummy >> from sympy.functions.elementary.complexes import (Abs, arg) >> from sympy.functions.elementary.exponential import log >> from sympy.abc import s, p, a >> from sympy.external import import_module >> from sympy.physics.control.control_plots import \ >> (pole_zero_numerical_data, pole_zero_plot, >> step_response_numerical_data, >> step_response_plot, impulse_response_numerical_data, >> impulse_response_plot, ramp_response_numerical_data, >> ramp_response_plot, bode_magnitude_numerical_data, >> bode_phase_numerical_data, bode_plot) >> from sympy.physics.control.lti import (TransferFunction, >> Series, Parallel, TransferFunctionMatrix) >> from sympy.polys.polytools import Poly >> from sympy.plotting.series import LineOver1DRangeSeries >> >> matplotlib = import_module( >> 'matplotlib', import_kwargs={'fromlist': ['pyplot']}, >> catch=(RuntimeError,)) >> >> numpy = import_module('numpy') >> >> if matplotlib: >> plt = matplotlib.pyplot >> >> if numpy: >> np = numpy # Matplotlib already has numpy as a compulsory >> dependency. No need to install it separately. >> >> tf1 = TransferFunction(1, p**2 + 0.5*p + 2, p) >> tf2 = TransferFunction(p, 6*p**2 + 3*p + 1, p) >> tf3 = TransferFunction(p, p**3 - 1, p) >> tf4 = TransferFunction(10, p**3, p) >> tf5 = TransferFunction(5, s**2 + 2*s + 10, s) >> tf6 = TransferFunction(1, 1, s) >> tf7 = TransferFunction(4*s*3 + 9*s**2 + 0.1*s + 11, 8*s**6 + 9*s**4 + 11, >> s) >> >> x, magnitude_data = bode_magnitude_numerical_data(tf1) >> rad, phase_data = bode_phase_numerical_data(tf1, phase_unit='deg') >> print(len(magnitude_data[0: len(phase_data)])) >> print(len(phase_data)) >> >> magnitude_data = magnitude_data[0: len(phase_data)] #cut some of the >> last data of magnitude because len(phase_data) = len(magnitude_data) >> >> >> >> #plt.plot(phase_data, magnitude_data) >> #plt.yscale('log') >> >> #plt.show() >> >> >> def nichols_numerical_data(system, initial_omega=0.01, final_omega=100, >> **kwargs): >> """ >> Returns the numerical data of Nichols plot of the system. >> It is internally used by ``nichols_plot`` to get the data >> for plotting Nichols plot. Users can use this data to further >> analyse the dynamics of the system or plot using a different >> backend/plotting-module. >> Parameters >> ========== >> system : SISOLinearTimeInvariant >> The system for which the pole-zero data is to be computed. >> initial_omega : Number, optional >> The initial value of frequency. Defaults to 0.01. >> final_omega : Number, optional >> The final value of frequency. Defaults to 100. >> Returns >> ======= >> tuple : (phase_points, mag_points) >> phase_points = phase values of the Nichols plot. >> mag_points = magnitude values of the Nichols plot. >> Raises >> ====== >> NotImplementedError >> When a SISO LTI system is not passed. >> When time delay terms are present in the system. >> ValueError >> When more than one free symbol is present in the system. >> The only variable in the transfer function should be >> the variable of the Laplace transform. >> Examples >> ======== >> >>> from sympy.abc import s >> >>> from sympy.physics.control.lti import TransferFunction >> >>> from sympy.physics.control.control_plots import >> nichols_numerical_data >> >>> tf1 = TransferFunction(-(0.1)*s**3 - (2.4)*s**2 - 181*s - 1950, >> s**3 + (3.3)*s**2 + 990*s + 2600, s) >> >>> nichols_numerical_data(tf1) # doctest: +SKIP >> (array([179.83501857, 179.67004337, 179.50508061, ..., 166.86071969, >> 166.86233751, 166.8639549 ]), >> array([ -2.49883392, -2.49901149, -2.49930742, ..., -20.5300856, >> -20.52996573, -20.52984591])) >> See Also >> ======== >> nichols_plot >> """ >> #_check_system(system) >> expr = system.to_expr() >> >> _w = Dummy("w", real=True) >> repl = I*_w >> w_expr = expr.subs({system.var: repl}) >> >> mag = 20*log(Abs(w_expr), 10) >> phase = arg(w_expr)*180/pi >> >> x = np.linspace(initial_omega, final_omega, 10000) >> >> #mag_func = lambdify(_w, mag) >> #phase_func = lambdify(_w, phase) >> hz, mag_points = LineOver1DRangeSeries(mag, x).get_points() >> rad, phase_points = LineOver1DRangeSeries(phase, x).get_points() >> mag_points = mag_points[0: len(phase_points)] #cut some of the last >> data of magnitude because len(phase_data) = len(magnitude_data) >> >> return phase_points, mag_points >> >> def nichols_plot(system, initial_omega=0.01, final_omega=100, >> color='b', grid=False, show=True,**kwargs): >> r""" >> Returns the nichols plot of a continuous-time system. >> Nichols Plot is a plot used in signal processing and control system >> design >> to determine the stability of a feedback system >> Parameters >> ========== >> system : SISOLinearTimeInvariant type >> The LTI SISO system for which the Ramp Response is to be computed. >> initial_omega : Number, optional >> The initial value of frequency. Defaults to 0.01. >> final_omega : Number, optional >> The final value of frequency. Defaults to 100. >> show : boolean, optional >> If ``True``, the plot will be displayed otherwise >> the equivalent matplotlib ``plot`` object will be returned. >> Defaults to True. >> show_axes : boolean, optional >> If ``True``, the coordinate axes will be shown. Defaults to False. >> grid : boolean, optional >> If ``True``, the plot will have a grid. Defaults to False. >> Examples >> ======== >> .. plot:: >> :context: close-figs >> :format: doctest >> :include-source: True >> >>> from sympy.abc import s >> >>> from sympy.physics.control.lti import TransferFunction >> >>> from sympy.physics.control.control_plots import nichols_plot >> >>> tf1 = TransferFunction(-(0.1)*s**3 - (2.4)*s**2 - 181*s - >> 1950, s**3 + (3.3)*s**2 + 990*s + 2600, s) >> >>> nichols_plot(tf1, 1, 100) # doctest: +SKIP >> See Also >> ======== >> bode_magnitude_plot, bode_phase_plot >> References >> ========== >> .. [1] https://en.wikipedia.org/wiki/Nichols_plot >> """ >> x, y = nichols_numerical_data(system, initial_omega=initial_omega, >> final_omega=final_omega) >> >> plt.plot(x, y, color=color, **kwargs) >> plt.xlabel('Open Loop Gain (dB)') >> plt.ylabel('Open Loop Phase (deg)') >> plt.title(f'Nichols Plot (Phase) of ${latex(system)}$', pad=20) >> plt.axhline(y=0, color='black', linestyle='dotted', linewidth=1) >> >> if grid: >> plt.grid(True) >> >> if show: >> plt.show() >> return >> >> return plt >> >> nichols_plot(tf1) >> >> Στις Κυρ 3 Μαρ 2024 στις 10:12 μ.μ., ο/η Shishir Kushwaha < >> kushwahas...@gmail.com> έγραψε: >> >>> >>> It is working fine for me in both jupyter notebook and intreactive sympy >>> shell . Do you mind sharing the full code snippet where you were using it >>> to cause the error . >>> >>> On Monday 4 March 2024 at 01:34:51 UTC+5:30 tsioupr...@gmail.com wrote: >>> >>>> Author: Spiros Tsioupros >>>> Github: https://github.com/Spiros7bit >>>> email: tsioupr...@gmail.com <https://groups.google.com/> >>>> >>>> Hallo, community, while I was trying to run a program this error popped >>>> up: >>>> >>>> *from sympy.plotting.series import >>>> LineOver1DRangeSeriesModuleNotFoundError: No module named >>>> 'sympy.plotting.series'* >>>> >>>> More specifically, the error is in the line: >>>> from sympy.plotting.series import LineOver1DRangeSeries >>>> ... >>>> >>>> From a small search I did I think the error has to do with the >>>> interpreter. Any information would be useful. >>>> >>>> More information: >>>> IDE: VSCode >>>> Interpreter: Python Default >>>> OS: Windows 11 >>>> sympy 1.12 >>>> mpmath 1.3.0 >>>> Python 3.10.11 >>>> >>>> Yours sincerely. >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "sympy" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to sympy+un...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/sympy/38088022-078c-423c-b22c-219705bf03e8n%40googlegroups.com >>> <https://groups.google.com/d/msgid/sympy/38088022-078c-423c-b22c-219705bf03e8n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sympy+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/4aa8338d-823a-43d3-840a-7e5283793b32n%40googlegroups.com > <https://groups.google.com/d/msgid/sympy/4aa8338d-823a-43d3-840a-7e5283793b32n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAO6438xYgGdjRKFXS5fS%3DvuzypAQnHUY3G%2B2i1ptN%3D9c3j2yGw%40mail.gmail.com.