"""
Скрипт для проверки структуры HDF5 датасета X5 D1.
"""
import h5py
import numpy as np

f = h5py.File('src/ml/models/saved/x5_d1_dataset.h5', 'r')
print('=== Ключи в HDF5 ===')
for key in f.keys():
    print(f'  {key} -> shape: {f[key].shape if hasattr(f[key], "shape") else "группа"}')

train_feat = f['train_features'][:]
train_targets = f['train_targets'][:]
val_feat = f['val_features'][:]
val_targets = f['val_targets'][:]
test_feat = f['test_features'][:]
test_targets = f['test_targets'][:]

print(f'\nTrain features: {train_feat.shape}')
print(f'Train targets: {train_targets.shape}')
print(f'Val features: {val_feat.shape}')
print(f'Val targets: {val_targets.shape}')
print(f'Test features: {test_feat.shape}')
print(f'Test targets: {test_targets.shape}')

print('\n=== Распределение классов ===')
for split_name, classes, counts in [
    ('Train', *np.unique(train_targets, return_counts=True)),
    ('Val', *np.unique(val_targets, return_counts=True)),
    ('Test', *np.unique(test_targets, return_counts=True))
]:
    total = counts.sum()
    print(f'{split_name}:')
    for c, cnt in zip(classes, counts):
        label = {0: 'HOLD', 1: 'BUY', 2: 'SELL'}.get(c, f'Class {c}')
        print(f'  {label} ({c}): {cnt} ({cnt/total*100:.1f}%)')
    print(f'  Всего: {total}')

# Определение seq_len и n_features
if train_feat.ndim == 3:
    print(f'\n=== Seq info ===')
    print(f'seq_len={train_feat.shape[1]}, n_features={train_feat.shape[2]}')

# Дополнительные метаданные
if 'feature_names' in f:
    feat_names = f['feature_names'][:]
    if isinstance(feat_names[0], bytes):
        feat_names = [n.decode() for n in feat_names]
    print(f'\nFeature names: {len(feat_names)} features')
    print(f'First 5: {feat_names[:5]}')
    print(f'Last 5: {feat_names[-5:]}')

f.close()
