
    M/Phi                     "    d Z ddlZddZddZdS )z4
SARIMAX tools.

Author: Chad Fulton
License: BSD-3
    Nc           	         t          j        |           } |dnd|z  }t          j        | |                     t                    k              st          d|d| d          |                     t                    } t          j        | dk               rt          d|z            | j        d	k    r| j        d
         d
k    r| dddf         } n!| j        d
k    rt          d|d| d          | j        dk    r| 	                                } n
t          |           dk    rd} nd| v }t          j        | d
k              d
k    }t          j        | d
k              }|s|r6|rt          d|z            t          j        | d
k              d         d
z   } nt          j        |           } t          |           dk    rd} nXt          j        | t          j        d
t          |           d
z             k              r	| d         } n|                                 } t!          | t"                    o)t          j        t          j        |           dk              }|rt          d|z            | S )a+  
    Standardize lag order input.

    Parameters
    ----------
    order : int or array_like
        Maximum lag order (if integer) or iterable of specific lag orders.
    title : str, optional
        Description of the order (e.g. "autoregressive") to use in error
        messages.

    Returns
    -------
    order : int or list of int
        Maximum lag order if consecutive lag orders were specified, otherwise
        a list of integer lag orders.

    Notes
    -----
    It is ambiguous if order=[1] is meant to be a boolean list or
    a list of lag orders to include, but this is irrelevant because either
    interpretation gives the same result.

    Order=[0] would be ambiguous, except that 0 is not a valid lag
    order to include, so there is no harm in interpreting as a boolean
    list, in which case it is the same as order=0, which seems like
    reasonable behavior.

    Examples
    --------
    >>> standardize_lag_order(3)
    3
    >>> standardize_lag_order(np.arange(1, 4))
    3
    >>> standardize_lag_order([1, 3])
    [1, 3]
    Norderz%s orderzInvalid z. Non-integer order (z) given.r   z#Terms in the %s cannot be negative.      zX. Must be an integer or 1-dimensional array-like object (e.g. list, ndarray, etc.). Got .zInvalid %s. Appears to be a boolean list (since it contains a 0 element and/or multiple elements) but also contains elements greater than 1 like a list of lag orders.z+Invalid %s. Cannot have duplicate elements.)nparrayallastypeint
ValueErroranyndimshapeitemlensumwheresortarangetolist
isinstancelistdiff)r   title	has_zeroshas_multiple_ones
has_gt_onehas_duplicates         [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/tsa/arima/tools.pystandardize_lag_orderr"   
   s   L HUOOE}GG*u*<E 6%5<<,,,-- +j!EE555* + + 	+LLE 
veai H>FGGG zQ5;q>Q..aaad	aj7<uueeeE F F 	F zQ

	Uq %Z	F5A:..2VEAI&&
 	#) 	# 9  "0 38	"8 9 9 9
 Xeqj))!,q0EE GENNE u::??EEVERYq#e**q.999:: 	#"IEE LLNNE ud++Krwu~~7J0K0KM PFNOOOL    Fc                    |dnd|z  }	 t          j        | t                    } d |                                 D             }t	          |          rt
          nt          }t          j        | |          } n # t          $ r t          d|z            w xY w|s^t          j        t          j	        |                     s&t          j        t          j
        |                     rt          d|z            t          j        t          j        |                     } | j        |fk    r%|dk    rdnd	}t          d
|||| j        fz            | S )a  
    Validate parameter vector for basic correctness.

    Parameters
    ----------
    params : array_like
        Array of parameters to validate.
    length : int
        Expected length of the parameter vector.
    allow_infnan : bool, optional
            Whether or not to allow `params` to contain -np.inf, np.inf, and
            np.nan. Default is False.
    title : str, optional
        Description of the parameters (e.g. "autoregressive") to use in error
        messages.

    Returns
    -------
    params : ndarray
        Array of validated parameters.

    Notes
    -----
    Basic check that the parameters are numeric and that they are the right
    shape. Optionally checks for NaN / infinite values.
    N z for %s)dtypec                 8    g | ]}t          |t                    S  )r   complex).0ps     r!   
<listcomp>z"validate_basic.<locals>.<listcomp>   s"    EEEjG,,EEEr#   z,Parameters vector%s includes invalid values.z/Parameters vector%s includes NaN or Inf values.r   szOSpecification%s implies %d parameter%s, but values with shape %s were provided.)r	   r
   objectravelr   r)   float	TypeErrorr   isnanisinf
atleast_1dsqueezer   )paramslengthallow_infnanr   
is_complexr&   plurals          r!   validate_basicr;   o   s}   6 -BBY%6E"&///EEfllnnEEE
z??5&... " " "G ! " " 	""
  "RVBHV$4$455 "VBHV$4$455"J ! " " 	" ]2:f--..F |y  {{ @!666<@A B B 	B Ms   A,A8 8B)N)FN)__doc__numpyr	   r"   r;   r(   r#   r!   <module>r>      sT        b b b bJ6 6 6 6 6 6r#   