Files
help_lab/cli.py
T

153 lines
5.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Интерфейс командной строки для использования вычислительных функций
Позволяет использовать расчёты без графического интерфейса
"""
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()