""" Интерфейс командной строки для использования вычислительных функций Позволяет использовать расчёты без графического интерфейса """ import json import argparse from typing import List, Dict from calculations import ( calculate_medium_composition, generate_factorial_design, analyze_experiment, convert_units, VOLUME_UNITS, MASS_UNITS ) def demo_medium_calculation(): """Демонстрация расчёта питательной среды""" print("\n" + "=" * 60) print("ДЕМОНСТРАЦИЯ РАСЧЁТА ПИТАТЕЛЬНОЙ СРЕДЫ") print("=" * 60) # Пример реагентов reagents = [ { 'name': 'Глюкоза', 'percentage': 2.0, 'unit': 'г', 'conversion_factor': 1.0, 'dilution_factor': 1.0 }, { 'name': 'Пептон', 'percentage': 1.0, 'unit': 'г', 'conversion_factor': 1.0, 'dilution_factor': 1.0 }, { 'name': 'Дрожжевой экстракт', 'percentage': 0.5, 'unit': 'г', 'conversion_factor': 1.0, 'dilution_factor': 1.0 } ] print("\nИсходные данные:") print(f"Общий объём: 1000 мл") print("Реагенты:") for r in reagents: print(f" - {r['name']}: {r['percentage']}%") # Расчёт result = calculate_medium_composition( total_volume=1000, volume_unit='мл', reagents=reagents, solvent_name='Вода' ) print("\nРезультаты расчёта:") print(f"Растворитель ({result['solvent_name']}): {result['solvent_volume']:.2f} {result['total_unit']} " f"({result['solvent_percentage']:.1f}%)") print("\nКоличества реагентов:") for r in result['reagents']: print(f" - {r['name']}: {r['calculated_amount']:.4f} {r['unit']}") def demo_doe_calculation(): """Демонстрация планирования эксперимента""" print("\n" + "=" * 60) print("ДЕМОНСТРАЦИЯ ПЛАНИРОВАНИЯ ЭКСПЕРИМЕНТА") print("=" * 60) # Факторы factors = [ {'name': 'Температура', 'low': 25, 'high': 37, 'center': 31, 'unit': '°C'}, {'name': 'pH', 'low': 6.5, 'high': 7.5, 'center': 7.0, 'unit': ''} ] print("\nФакторы эксперимента:") for f in factors: print(f" - {f['name']}: {f['low']} – {f['high']} {f['unit']} (центр: {f['center']})") # Генерация плана design = generate_factorial_design(factors, center_points=3, randomize=True) print(f"\nСгенерировано {len(design)} опытов:") for i, exp in enumerate(design): is_center = exp.get('is_center', False) type_str = "Центральная" if is_center else "Факторная" values = [] for key in sorted(exp.keys()): if key.startswith('Фактор_'): values.append(f"{exp[key]['natural']}{exp[key]['unit']}") print(f" {i+1}. {type_str}: {', '.join(values)}") def demo_unit_conversion(): """Демонстрация конвертации единиц""" print("\n" + "=" * 60) print("ДЕМОНСТРАЦИЯ КОНВЕРТАЦИИ ЕДИНИЦ") print("=" * 60) print("\nОбъёмные единицы (база: мкл):") for unit, factor in VOLUME_UNITS.items(): print(f" 1 {unit} = {factor} мкл") print("\nМассовые единицы (база: мг):") for unit, factor in MASS_UNITS.items(): print(f" 1 {unit} = {factor} мг") print("\nПримеры конвертации:") print(f" 100 мл = {convert_units(100, 'мл', 'мкл'):.0f} мкл") print(f" 5000 мкл = {convert_units(5000, 'мкл', 'мл'):.2f} мл") print(f" 2 г = {convert_units(2, 'г', 'мг'):.0f} мг") print(f" 500 мг = {convert_units(500, 'мг', 'г'):.2f} г") def main(): parser = argparse.ArgumentParser(description='Биохимический помощник - командная строка') parser.add_argument('--demo', choices=['medium', 'doe', 'units', 'all'], default='all', help='Демонстрация расчётов') args = parser.parse_args() if args.demo in ['medium', 'all']: demo_medium_calculation() if args.demo in ['doe', 'all']: demo_doe_calculation() if args.demo in ['units', 'all']: demo_unit_conversion() print("\n" + "=" * 60) print("Советы по использованию библиотеки:") print(" from calculations import *") print(" result = calculate_medium_composition(...)") print(" design = generate_factorial_design(...)") print(" analysis = analyze_experiment(...)") print("=" * 60) if __name__ == "__main__": main()