
    kWj                     @    S r SSKrSSKJrJr  SSKJr   " S S5      rg)u   
Cross-Validation для временных рядов.

Предотвращает Data Leakage при кросс-валидации, используя скользящее окно с зазором.
    N)IteratorTuple)loggerc                       \ rS rSrSrSS\S\S\4S jjrSS\\	\
R                  \
R                  4      4S	 jjrS
 rS rS rSrg)WalkForwardSplit   u  
Walk-Forward Cross-Validation для временных рядов.
Обучается на расширяющемся (или скользящем) окне, тестируется на следующем.
Поддерживает 'gap' для предотвращения Data Leakage от будущих таргетов.

Args:
    n_splits: Количество фолдов
    test_size: Размер тестового окна (float или int)
    gap: Зазор между train и test в баров

Example:
    >>> cv = WalkForwardSplit(n_splits=5, test_size=100, gap=5)
    >>> for train_idx, test_idx in cv.split(X):
    ...     X_train, X_test = X[train_idx], X[test_idx]
    ...     model.fit(X_train, y_train)
    ...     y_pred = model.predict(X_test)
n_splits	test_sizegapc                 (    Xl         X l        X0l        g)u   
Инициализация Walk-Forward сплита.

Args:
    n_splits: Количество фолдов
    test_size: Размер тестового окна (0.2 = 20% от данных)
    gap: Зазор между train и test (баров)
Nr	   r
   r   )selfr	   r
   r   s       )/home/ai/projects/AI_Strategy/utils/cv.py__init__WalkForwardSplit.__init__   s     !"    Nreturnc              #   "  #    [        U5      n[        U R                  [        5      (       a  [	        X@R                  -  5      nOU R                  nXEU R
                  -  -
  U R                  U R
                  -  -
  nXe:  a8  [        SU R
                   SU SU R                   SXPR                  -    S3	5      e[        R                  " SU R
                   SU SU R                   35        [        U R
                  5       H  nXgU-  -   nXR                  -   n	X-   n
X:  a  Un
[        R                  " SU5      n[        R                  " X5      n[        R                  " SUS	-    S
[        U5       S[        U5       35        X4v   M     g7f)u  
Генератор фолдов для кросс-валидации.

Args:
    X: Feature matrix (n_samples, n_features)
    y: Target vector or matrix
    groups: Not used (для совместимости с sklearn)

Yields:
    Tuple of (train_indices, test_indices)
uI   Недостаточно данных для заданного n_splits=, test_size=, gap=u   . Нужно минимум u    баров.zWalk-Forward Split: n_splits=r   zFold    z: Train=z, Test=N)len
isinstancer
   floatintr	   r   
ValueErrorr   inforangenparangedebug)r   Xygroups	n_samplesr
   initial_train_sizei	train_end
test_starttest_endtrain_indicestest_indicess                r   splitWalkForwardSplit.split,   sz     F	 dnne,,I67II 'dmm*CDSWS`S`H`a)[\`\i\i[j k&KvdhhZ 8--6-A,B,P  	3DMM?,ykY_`d`h`h_ijkt}}%A*]:I"XX-J!-H#$IIa3M99Z:LLL51Xc-.@-A\IZH[\]-- &s   FFc                     U R                   $ )u7   Возвращает количество фолдов.)r	   r   s    r   get_n_splitsWalkForwardSplit.get_n_splits\   s    }}r   c                 J    U R                   U R                  U R                  S.$ )u(   Возвращает параметры.r   r   r0   s    r   
get_paramsWalkForwardSplit.get_params`   s#     88
 	
r   c                 V    SU R                    SU R                   SU R                   S3$ )NzWalkForwardSplit(n_splits=r   r   )r   r0   s    r   __repr__WalkForwardSplit.__repr__h   s0    +DMM?,t~~FVV\]a]e]e\ffghhr   )r   r	   r
   )   g?r:   )NN)__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r   ndarrayr-   r1   r4   r8   __static_attributes__ r   r   r   r      sU    $ U s ..xbjj"**>T8U/V ..`
ir   r   )	r?   numpyr   typingr   r   utils.loggerr   r   rB   r   r   <module>rF      s#     " ]i ]ir   