L ix,dZddlZddlmZgdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZGddeZeZdZGddeZeZdZdZdZdZdZdZdZdZGddeZeZGdd eZ e Z!y)!zI Collection of Model instances for use with the odrpack fitting package. N)Model)r exponential multilinear unilinear quadratic polynomialcr|d|dd}}|jddf|_|||zjdzSNraxis)shapesum)Bxabs W/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/odr/_models.py_lin_fcnr sB Q412qAwwqz1oAG !yyay  ctj|jdt}tj||j f}|jd|jdf|_|SN)nponesrfloat concatenateravel)rrrress r_lin_fjbr sS  U#A ..!QWWY (Caggbk*CI Jrc|dd}tj||jdf|jdzd}|j|_|S)Nr rrr )rrepeatr)rrrs r_lin_fjdr#sF !"A !aggbk^AGGBK/a8AggAG Hrct|jjdk(r|jjd}nd}tj|dzft SNrr )lenrrrrr)datams r_lin_estr*sF  466<<A FFLLO  77AE8U ##rc|d|dd}}|jddf|_|tj|tj||zdzSr rrrpower)rrpowersrrs r _poly_fcnr/,sN Q412qAwwqz1oAG rvva"((1f--A6 66rctjtj|jdttj ||j f}|jd|jdf|_|Sr)rrrrrr-flat)rrr.rs r _poly_fjacbr23s_ .."''!''"+u5((1f-224 5Caggbk*CI Jrc|dd}|jddf|_||z}tj|tj||dz zdS)Nr rr r,)rrr.rs r _poly_fjacdr4:sN !"Awwqz1oAG F A 66!bhhq&(++! 44rcD|dtj|d|zzSNrr rexprrs r_exp_fcnr:C" Q4"&&1" ""rcD|dtj|d|zzS)Nr r7r9s r_exp_fjdr=Gr;rctjtj|jdt|tj |d|zzf}d|jdf|_|S)Nrr r&)rrrrrr8)rrrs r_exp_fjbr?KsW .."''!''"+u5q266!A$(;K7KL MCAGGBK CI Jrc0tjddgS)N?)rarrayr(s r_exp_estrDQs 88RH rc"eZdZdZfdZxZS)_MultilinearModela Arbitrary-dimensional linear model This model is defined by :math:`y=\beta_0 + \sum_{i=1}^m \beta_i x_i` Examples -------- We can calculate orthogonal distance regression with an arbitrary dimensional linear model: >>> from scipy import odr >>> import numpy as np >>> x = np.linspace(0.0, 5.0) >>> y = 10.0 + 5.0 * x >>> data = odr.Data(x, y) >>> odr_obj = odr.ODR(data, odr.multilinear) >>> output = odr_obj.run() >>> print(output.beta) [10. 5.] c Vt|tttt ddddy)NzArbitrary-dimensional Linearz y = B_0 + Sum[i=1..m, B_i * x_i]z&$y=\beta_0 + \sum_{i=1}^m \beta_i x_i$nameequTeXequ)fjacbfjacdestimatemeta)super__init__rr r#r*self __class__s rrQz_MultilinearModel.__init__ms.  HHx8;EG  Hr__name__ __module__ __qualname____doc__rQ __classcell__rTs@rrFrFVs,HHrrFc "tj|}|jdk(rtjd|dz}t |df|_t |dz}|fd}t t tt||fdd|dz zd|dz zdS) a Factory function for a general polynomial model. Parameters ---------- order : int or sequence If an integer, it becomes the order of the polynomial to fit. If a sequence of numbers, then these are the explicit powers in the polynomial. A constant term (power 0) is always included, so don't include 0. Thus, polynomial(n) is equivalent to polynomial(range(1, n+1)). Returns ------- polynomial : Model instance Model instance. Examples -------- We can fit an input data using orthogonal distance regression (ODR) with a polynomial model: >>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy import odr >>> x = np.linspace(0.0, 5.0) >>> y = np.sin(x) >>> poly_model = odr.polynomial(3) # using third order polynomial model >>> data = odr.Data(x, y) >>> odr_obj = odr.ODR(data, poly_model) >>> output = odr_obj.run() # running ODR fitting >>> poly = np.poly1d(output.beta[::-1]) >>> poly_y = poly(x) >>> plt.plot(x, y, label="input data") >>> plt.plot(x, poly_y, label="polynomial ODR") >>> plt.legend() >>> plt.show() r c8tj|ftS)N)rrr)r(len_betas r _poly_estzpolynomial.._poly_estsww{E**rzSorta-general Polynomialz$y = B_0 + Sum[i=1..%s, B_i * (x**i)]z)$y=\beta_0 + \sum_{i=1}^{%s} \beta_i x^i$rH)rMrLrN extra_argsrO) rasarrayraranger'rr/r4r2)orderr.r_r`s rrrxsRZZ F ||r1fqj)K#FL6{QH!)+ +[# 9>(1*MG!!%& ''rc"eZdZdZfdZxZS)_ExponentialModela Exponential model This model is defined by :math:`y=\beta_0 + e^{\beta_1 x}` Examples -------- We can calculate orthogonal distance regression with an exponential model: >>> from scipy import odr >>> import numpy as np >>> x = np.linspace(0.0, 5.0) >>> y = -10.0 + np.exp(0.5*x) >>> data = odr.Data(x, y) >>> odr_obj = odr.ODR(data, odr.exponential) >>> output = odr_obj.run() >>> print(output.beta) [-10. 0.5] c Vt|tttt ddddy)N Exponentialzy= B_0 + exp(B_1 * x)z$y=\beta_0 + e^{\beta_1 x}$rHrMrLrNrO)rPrQr:r=r?rDrRs rrQz_ExponentialModel.__init__s. "*'4&=)GI  JrrUr[s@rrfrf*JJrrfc||dz|dzSr6r]r9s r_unilinrls QqT6AaD=rcVtj|jt|dzS)Nr)rrrrr9s r _unilin_fjdrns 77177E "QqT ))rctj|tj|jtf}d|jz|_|S)N)r&rrrrrrr_rets r _unilin_fjbrss8 >>1bggaggu56 7DDJ Krcy)N)rArAr]rCs r _unilin_estrus rc0|||dz|dzz|dzS)Nrr r&r]r9s r _quadraticrws& a!fqtm qt ##rc$d|z|dz|dzSr%r]r9s r _quad_fjdrys Q3qt8ad?rctj||z|tj|jtf}d|jz|_|S)N)rprqs r _quad_fjbr|s> >>1Q3277177E#:; >> from scipy import odr >>> import numpy as np >>> x = np.linspace(0.0, 5.0) >>> y = 1.0 * x + 2.0 >>> data = odr.Data(x, y) >>> odr_obj = odr.ODR(data, odr.unilinear) >>> output = odr_obj.run() >>> print(output.beta) [1. 2.] c Vt|tttt ddddy)NzUnivariate Linearzy = B_0 * x + B_1z$y = \beta_0 x + \beta_1$rHri)rPrQrlrnrsrurRs rrQz_UnilinearModel.__init__s.  ;"-':&9)FH  IrrUr[s@rrrs*IIrrc"eZdZdZfdZxZS)_QuadraticModela Quadratic model This model is defined by :math:`y = \beta_0 x^2 + \beta_1 x + \beta_2` Examples -------- We can calculate orthogonal distance regression with a quadratic model: >>> from scipy import odr >>> import numpy as np >>> x = np.linspace(0.0, 5.0) >>> y = 1.0 * x ** 2 + 2.0 * x + 3.0 >>> data = odr.Data(x, y) >>> odr_obj = odr.ODR(data, odr.quadratic) >>> output = odr_obj.run() >>> print(output.beta) [1. 2. 3.] c Vt|tttt ddddy)N Quadraticzy = B_0*x**2 + B_1*x + B_2z&$y = \beta_0 x^2 + \beta_1 x + \beta_2rHri)rPrQrwryr|r~rRs rrQz_QuadraticModel.__init__3s.  iy9%5GI  JrrUr[s@rrrrjrr)"rYnumpyrscipy.odr._odrpackr__all__rr r#r*r/r2r4r:r=r?rDrFrrrfrrlrnrsrurwryr|r~rrrrr]rrrs$ !  $75##  HH> ! :'zJJ< ! *$IeI<   JeJ<   r