print('Идет проверка и установка дополнительных библиотек, необходимых для работы terra_ai')
print('Это может занять несколько минут...')
import subprocess, os, warnings, time
from pandas.core.common import SettingWithCopyWarning
from subprocess import STDOUT, check_call
from IPython import display
def выполнить_команду(команда='!ls'):
  proc = subprocess.Popen(f'{команда}', shell=True, stdin=None, stdout=open(os.devnull,"wb"), stderr=STDOUT, executable="/bin/bash")
  proc.wait()
  pass
import os
import time
os.environ['TF_CPP_MIN_LOG_LEVEL'] = "2"
import tensorflow as tf
tf.get_logger().setLevel("WARNING")


выполнить_команду('apt install swig cmake libopenmpi-dev zlib1g-dev > /dev/null 2>&1')
выполнить_команду('pip -q install stable-baselines==2.5.1 box2d box2d-kengz > /dev/nul 2>&1')
выполнить_команду('pip -q install gym pyvirtualdisplay > /dev/null 2>&1')
выполнить_команду('pip -q install xvfbwrapper > /dev/null 2>&1')
выполнить_команду('apt-get update > /dev/null 2>&1')
выполнить_команду('sudo apt-get install xvfb > /dev/null 2>&1')
выполнить_команду('apt-get install xdpyinfo > /dev/null 2>&1')
выполнить_команду('pip -q install pymorphy2')


from . import датасет, модель, сегментация, traide, ряды, генетика, повышение_размерности, обнаружение, обработка_текста, сегментация_договоров, квартиры, home


import seaborn as sns
sns.set_style('darkgrid')
warnings.simplefilter(action="ignore", category=SettingWithCopyWarning)

display.clear_output(wait=True)
print('Все нобходимые библиотеки установлены и готовы к работе')

def загрузить_базу(база = '', справка = False):
  return датасет.загрузить_базу(
    база = база,
    справка = справка	
)

### ДАТАСЕТ
def показать_примеры(**kwargs):
  датасет.показать_примеры(**kwargs)

def показать_пример_договора(количество = 1):
    сегментация_договоров.показать_пример(количество)

def показать_пример_временного_ряда(база, старт, финиш):
    return ряды.показать_примеры(база, старт, финиш)

def показать_пример_квартиры(количество = 1):
    квартиры.samples(количество)

def показать_примеры_голосовых_команд():
    home.показать_примеры_голосовых_команд()

def показать_примеры_для_трейдинга(данные):
    traide.show_data(данные)

def предобработка_данных(**kwargs):
  return датасет.предобработка_данных(**kwargs)

def получить_входной_размер(arr):
  return arr.shape[1:]

def получить_выходной_размер(arr):
  return arr.max()+1
  

def создать_выборки(путь, размер, коэф_разделения=0.9):
  return датасет.создать_выборки(путь, размер, коэф_разделения)

def создать_текстовые_выборки(MWC, xLen):
  return обработка_текста.создать_выборки(MWC, xLen)

def создать_выборки_квартир():
  return квартиры.создать_выборки()

def создать_выборки_для_торговли(акции,количество_анализируемых_дней,период_предсказания):
  return traide.получить_данные(акции,
  количество_анализируемых_дней,
  период_предсказания)

def создать_выборки_голосовых_команд(длина, шаг):
  return home.создать_выборки(длина, шаг)

def создать_выборки_временного_ряда(база, период):
  return ряды.создать_выборки_трафик(база, период)

def создать_выборки_сегментация_текста(договоры):
  return сегментация_договоров.создать_выборки_договоров(договоры)
  
def создать_выборки_для_чатбота(вопросы, ответы,количество_пар=10000):
  return обработка_текста.создать_выборки_чатбота(вопросы, ответы,количество_пар)
  
def создать_выборки_для_сегментации(images_airplane, segments_airplane):
   return сегментация.create_xy(images_airplane, segments_airplane)

def создать_выборки_для_повышения_размерности():  
  return повышение_размерности.генератор_данных_DIV2K()

# МОДЕЛЬ
def схема_модели(мод):
  return модель.схема_модели(мод)

def обучение_модели_квартиры(мод, x_train, y_train, x_test=[], y_test=[], размер_пакета=None, количество_эпох=None, коэф_разделения = 0.2, инструменты = None):  
  модель.обучение_модели_квартиры(мод, x_train, y_train, x_test, y_test, размер_пакета, количество_эпох, коэф_разделения, инструменты)  

def обучение_модели(мод, x_train, y_train, x_test=[], y_test=[], размер_пакета=None, количество_эпох=None, коэф_разделения = 0.2):
   модель.обучение_модели(мод, x_train, y_train, x_test, y_test, размер_пакета, количество_эпох, коэф_разделения)

def обучение_модели_временного_ряда(мод, ген1, ген2, количество_эпох=None):
  модель.обучение_модели_трафик(мод, ген1, ген2, количество_эпох) 

def предобучение_генератора(генератор, обучающая_выборка, проверочная_выборка, количество_шагов, интервал_вывода):
  повышение_размерности.предобучение_генератора(генератор,обучающая_выборка, проверочная_выборка, количество_шагов, интервал_вывода)
  print('Предобучение генератора завершено')
  
def обучение_модели_повышения_размерности(нейронка,обучающая_выборка):
  нейронка.train(обучающая_выборка, steps=5000) #Обучаем Srgan полностью

def обучение_модели_обнаружения(количество_эпох):
  обнаружение.обучение_модели_обнаружения(количество_эпох)

def тест_модели_классификации(нейронка, тестовый_набор, правильные_ответы, классы, количество=1):
  модель.тест_модели_классификации(нейронка, тестовый_набор, правильные_ответы, классы, количество)

def тест_модели_симптомы(нейронка, симптомы):
    обработка_текста.тест_модели(нейронка, симптомы)
    
def тест_модели_на_своем_изображении(нейронка, размер_изображения, классы):
  модель.тест_на_своем_изображении(нейронка, размер_изображения, классы)

def тест_модели_сегментации(мод, тестовые_изображения,  **kwargs):
  сегментация.тест_модели(мод, тестовые_изображения,  **kwargs)

def тест_модели_сегментации_договоров(мод, теги, договора):
  сегментация_договоров.тест_модели(мод, теги, договора)

def тест_модели_торговли(нейронка,тестовая_выборка, метки_тестовой_выборки, данные, период_предсказания,количество_анализируемых_дней):
  traide.model_test(
    нейронка, 
    тестовая_выборка, метки_тестовой_выборки,
    данные,
    период_предсказания,
    количество_анализируемых_дней)

def тест_модели_повышения_размерности(нейронка):
  модель.тест_модели_HR(нейронка)

def торговля(нейронка_1, тестовая_выборка, данные, тип):
  traide.traiding(нейронка_1, тестовая_выборка, данные, тип)

def тест_чат_бота(нейронка, размер_словаря, энкодер, декодер):
  обработка_текста.тест_модели_чат_бот(нейронка, размер_словаря, энкодер, декодер)
  
def тест_обученного_чат_бота():
  обработка_текста.загрузить_предобученную_модель()
  
def тест_модели_голосовых_команд(нейронка, порог, длина, шаг):
  home.тест_модели(нейронка, порог, длина, шаг)

def тест_модели_обнаружения_людей(нейронка):
  обнаружение.тест_модели()

def тест_модели_временного_ряда(мод, данные):
  ряды.тест_модели_трафика(мод, данные)

def тест_модели_квартиры(нейронка, инструменты, *данные,):
  квартиры.тест_модели(нейронка, инструменты, *данные,)

def создать_сеть(слои, входной_размер, задача, параметры_модели=None):
  return модель.создать_сеть(слои, входной_размер, параметры_модели, задача)


def создать_составную_сеть(данные, *нейронки):
  return модель.создать_составную_сеть(данные, *нейронки)

def создать_составную_сеть_квартиры(данные, *нейронки):
  return модель.создать_составную_сеть_квартиры(данные, *нейронки)

def создать_модель_Sequence_to_Sequence(размер_словаря, энкодер, декодер):
  return модель.создать_сеть_чат_бот(размер_словаря, энкодер, декодер)

def создать_генератор_повышения_размерности(стартовый_блок, основной_блок, финальный_блок):
  мод = модель.создать_генератор_повышения_размерности(стартовый_блок, основной_блок, финальный_блок)
  предобучение_генератора = повышение_размерности.SrganGeneratorTrainer(мод, checkpoint_dir=f'folder')    
  print('Модель генератора создана')    
  return предобучение_генератора

def создать_дискриминатор_повышения_размерности(блок_дискриминатора,количество_блоков, финальный_блок):
  return модель.создать_дискриминатор_повышения_размерности(блок_дискриминатора,количество_блоков, финальный_блок)

def создать_PSP(**kwargs):
  return модель.создать_PSP(**kwargs)

def создать_UNET(**kwargs):
  return модель.создать_UNET(**kwargs)

def создать_модель_повышения_размерности(генератор, дискриминатор):
  return повышение_размерности.создать_модель(генератор, дискриминатор)

def загрузить_модель_повышения_размерности():
  return повышение_размерности.загрузить_веса_готовой_модели()

def загрузка_обученной_модели_обнаружения_людей():
  return обнаружение.cоздать_модель_YOLO()  

def параметризация_аудио(файл):
  home.параметризация_аудио(файл)