Upload 14 files
Browse files- LICENSE +5 -15
- MODEL_SCOPE.md +20 -20
- README.md +83 -89
- REPOSITORY_LAYOUT.md +22 -0
- colab/README.md +11 -0
- colab/microfluidic_sciml_v16_1.ipynb +0 -0
- colab/microfluidic_sciml_v16_1.py +0 -0
- local/README.md +49 -0
- local/app.ipynb +41 -0
- local/app.py +92 -0
- local/microfluidic_sciml_v16_1.py +0 -0
- local/requirements.txt +11 -0
- local/run_mac_linux.sh +9 -0
- local/run_windows.bat +9 -0
LICENSE
CHANGED
|
@@ -1,17 +1,7 @@
|
|
| 1 |
-
Apache License
|
| 2 |
-
Version 2.0, January 2004
|
| 3 |
-
http://www.apache.org/licenses/
|
| 4 |
|
| 5 |
-
Copyright 2026
|
| 6 |
|
| 7 |
-
Licensed under the Apache License, Version 2.0
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
http://www.apache.org/licenses/LICENSE-2.0
|
| 12 |
-
|
| 13 |
-
Unless required by applicable law or agreed to in writing, software
|
| 14 |
-
distributed under the License is distributed on an "AS IS" BASIS,
|
| 15 |
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 16 |
-
See the License for the specific language governing permissions and
|
| 17 |
-
limitations under the License.
|
|
|
|
| 1 |
+
Apache License 2.0
|
|
|
|
|
|
|
| 2 |
|
| 3 |
+
Copyright 2026 contributors
|
| 4 |
|
| 5 |
+
Licensed under the Apache License, Version 2.0.
|
| 6 |
+
You may obtain a copy of the License at:
|
| 7 |
+
https://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MODEL_SCOPE.md
CHANGED
|
@@ -1,25 +1,25 @@
|
|
| 1 |
-
#
|
| 2 |
|
| 3 |
-
##
|
| 4 |
|
| 5 |
-
-
|
| 6 |
-
-
|
| 7 |
-
-
|
| 8 |
-
-
|
| 9 |
-
-
|
| 10 |
-
-
|
| 11 |
-
-
|
| 12 |
-
-
|
| 13 |
-
-
|
| 14 |
-
-
|
| 15 |
|
| 16 |
-
##
|
| 17 |
|
| 18 |
-
-
|
| 19 |
-
-
|
| 20 |
-
-
|
| 21 |
-
-
|
| 22 |
-
-
|
| 23 |
-
-
|
| 24 |
|
| 25 |
-
|
|
|
|
| 1 |
+
# Область применимости модели
|
| 2 |
|
| 3 |
+
## Реализовано
|
| 4 |
|
| 5 |
+
- точное сохранение массы и давления в сети каналов;
|
| 6 |
+
- специализированный расчёт больших древовидных сетей;
|
| 7 |
+
- варианты реологии обобщённо-ньютоновских жидкостей;
|
| 8 |
+
- локальный XPINN для повторяющихся плавных сужений;
|
| 9 |
+
- независимый физический допуск перед включением PINN-поправки;
|
| 10 |
+
- анализ технологического разброса и сценариев частичной закупорки;
|
| 11 |
+
- отдельная питающая сеть дисперсной фазы для капельных архитектур;
|
| 12 |
+
- physics-informed замыкание Т-образного генератора капель;
|
| 13 |
+
- опциональный локальный оператор DeepCFD в исследовательском режиме;
|
| 14 |
+
- обратное проектирование с ограничениями.
|
| 15 |
|
| 16 |
+
## За пределами текущего MVP
|
| 17 |
|
| 18 |
+
- полный трёхмерный расчёт свободной границы для всего чипа;
|
| 19 |
+
- сложная коалесценция и разрушение капель/струй;
|
| 20 |
+
- взаимодействие жидкости с деформируемыми стенками;
|
| 21 |
+
- общие модели вязкоупругой памяти;
|
| 22 |
+
- химические реакционные сети;
|
| 23 |
+
- калибровка по пользовательским экспериментальным данным.
|
| 24 |
|
| 25 |
+
Для таких задач необходимы специализированные высокоточные расчёты и/или экспериментальная проверка.
|
README.md
CHANGED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
license: apache-2.0
|
| 3 |
library_name: pytorch
|
| 4 |
language:
|
| 5 |
-
- en
|
| 6 |
- ru
|
|
|
|
| 7 |
tags:
|
| 8 |
- scientific-machine-learning
|
| 9 |
- sciml
|
|
@@ -11,128 +11,122 @@ tags:
|
|
| 11 |
- xpinn
|
| 12 |
- microfluidics
|
| 13 |
- microfluidic-design
|
| 14 |
-
- computational-fluid-dynamics
|
| 15 |
- inverse-design
|
| 16 |
- uncertainty-quantification
|
| 17 |
-
- physics-informed-machine-learning
|
| 18 |
---
|
| 19 |
|
| 20 |
-
#
|
| 21 |
|
| 22 |
-
|
|
|
|
| 23 |
|
| 24 |
-
|
| 25 |
-
physics-informed neural models and optional high-fidelity CFD-derived closures.
|
| 26 |
-
The repository is a **research/MVP code model**, not a hosted inference endpoint.
|
| 27 |
|
| 28 |
-
##
|
| 29 |
|
| 30 |
-
|
| 31 |
-
- specialized balanced-tree calculations up to **65,536 outlets**;
|
| 32 |
-
- local contraction **XPINN** with an independent physics quality gate;
|
| 33 |
-
- two-phase supply-network workflow for droplet-generator arrays;
|
| 34 |
-
- reduced two-phase physics-informed closure for T-junction droplet prediction;
|
| 35 |
-
- manufacturing-tolerance and blockage uncertainty analysis;
|
| 36 |
-
- inverse design / constrained geometry optimization;
|
| 37 |
-
- optional research workflow using the public **DeepCFD** benchmark;
|
| 38 |
-
- Colab/Jupyter graphical interface.
|
| 39 |
|
| 40 |
-
|
| 41 |
|
| 42 |
-
|
| 43 |
-
Exact network hydraulics without PINN/DeepCFD corrections.
|
| 44 |
|
| 45 |
-
|
| 46 |
-
1. Build the real chip/network.
|
| 47 |
-
2. Solve the complete network with the exact hydraulic solver.
|
| 48 |
-
3. Identify a representative repeated contraction.
|
| 49 |
-
4. Train and independently audit the local XPINN.
|
| 50 |
-
5. Transfer only an accepted local resistance correction to matching elements.
|
| 51 |
-
6. Re-solve the complete network exactly.
|
| 52 |
-
7. Compute uncertainty, derived physics and design outputs.
|
| 53 |
|
| 54 |
-
|
| 55 |
-
Adds an external validation / local-operator layer using the DeepCFD benchmark
|
| 56 |
-
before running the same exact-network + local-XPINN workflow.
|
| 57 |
|
| 58 |
-
##
|
| 59 |
|
| 60 |
-
|
| 61 |
|
| 62 |
-
`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
|
| 64 |
-
|
| 65 |
-
Python dependencies in Colab when necessary.
|
| 66 |
|
| 67 |
-
|
| 68 |
|
| 69 |
-
|
| 70 |
-
%run /content/microfluidic_meganet_pinn_colab_v16_1.py
|
| 71 |
-
```
|
| 72 |
|
| 73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
|
| 75 |
-
|
| 76 |
-
- `microfluidic_meganet_pinn_colab_v16_1.py` — complete source
|
| 77 |
-
- `requirements.txt` — Python dependencies
|
| 78 |
-
- `MODEL_SCOPE.md` — scientific scope and limitations
|
| 79 |
-
- `HF_UPLOAD_STEPS.md` — browser upload instructions
|
| 80 |
|
| 81 |
-
##
|
| 82 |
|
| 83 |
```text
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
```
|
| 98 |
|
| 99 |
-
|
| 100 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
-
|
|
|
|
|
|
|
|
|
|
| 103 |
|
| 104 |
-
|
| 105 |
-
local closures, including:
|
| 106 |
|
| 107 |
-
|
| 108 |
-
- DAFD 3.0 — publication DOI `10.1038/s41467-023-44068-3`
|
| 109 |
|
| 110 |
-
|
| 111 |
|
| 112 |
-
|
| 113 |
|
| 114 |
-
|
| 115 |
-
microfluidic networks, optional hydraulic transients, local contraction PINN
|
| 116 |
-
corrections and repeated T-junction droplet generators within the validated
|
| 117 |
-
feature range.
|
| 118 |
|
| 119 |
-
|
| 120 |
-
coalescence, strongly out-of-domain wetting, wall deformation or other physics
|
| 121 |
-
outside the implemented closures.
|
| 122 |
|
| 123 |
-
|
| 124 |
|
| 125 |
-
|
| 126 |
-
- scientific demonstration;
|
| 127 |
-
- hypothesis and architecture screening;
|
| 128 |
-
- rapid design-space exploration;
|
| 129 |
-
- preparation of candidate chip geometries for subsequent high-fidelity
|
| 130 |
-
simulation and/or experimental validation.
|
| 131 |
|
| 132 |
-
|
| 133 |
-
without domain-specific verification.
|
| 134 |
|
| 135 |
-
|
| 136 |
|
| 137 |
-
|
| 138 |
-
benchmarks remain subject to their own terms and citations.
|
|
|
|
| 2 |
license: apache-2.0
|
| 3 |
library_name: pytorch
|
| 4 |
language:
|
|
|
|
| 5 |
- ru
|
| 6 |
+
- en
|
| 7 |
tags:
|
| 8 |
- scientific-machine-learning
|
| 9 |
- sciml
|
|
|
|
| 11 |
- xpinn
|
| 12 |
- microfluidics
|
| 13 |
- microfluidic-design
|
|
|
|
| 14 |
- inverse-design
|
| 15 |
- uncertainty-quantification
|
|
|
|
| 16 |
---
|
| 17 |
|
| 18 |
+
# Модель проектирования микрофлюидных чипов V16.1
|
| 19 |
|
| 20 |
+
Исследовательский MVP для расчёта и проектирования крупных микрофлюидных систем.
|
| 21 |
+
Модель сочетает точный сетевой расчёт, локальные PINN/XPINN-модули, анализ неопределённости и обратное проектирование.
|
| 22 |
|
| 23 |
+
В репозитории есть **два варианта запуска одной и той же модели**.
|
|
|
|
|
|
|
| 24 |
|
| 25 |
+
## Быстрый выбор
|
| 26 |
|
| 27 |
+
### `colab/` — Google Colab
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
+
Подходит для демонстрации и работы без настройки локального Python-окружения.
|
| 30 |
|
| 31 |
+
Основной файл:
|
|
|
|
| 32 |
|
| 33 |
+
`colab/microfluidic_sciml_v16_1.ipynb`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
+
Откройте notebook в Google Colab и выполните основную ячейку.
|
|
|
|
|
|
|
| 36 |
|
| 37 |
+
### `local/` — локальный запуск / VS Code
|
| 38 |
|
| 39 |
+
Подходит, если модель должна работать на компьютере пользователя.
|
| 40 |
|
| 41 |
+
```bash
|
| 42 |
+
cd local
|
| 43 |
+
python -m venv .venv
|
| 44 |
+
pip install -r requirements.txt
|
| 45 |
+
python app.py
|
| 46 |
+
```
|
| 47 |
|
| 48 |
+
После запуска интерфейс откроется в браузере по адресу:
|
|
|
|
| 49 |
|
| 50 |
+
`http://127.0.0.1:8866`
|
| 51 |
|
| 52 |
+
## Что рассчитывает модель
|
|
|
|
|
|
|
| 53 |
|
| 54 |
+
- гидравлику крупных сетей микроканалов;
|
| 55 |
+
- распределение расходов и давления;
|
| 56 |
+
- локальные числа Рейнольдса и напряжение сдвига;
|
| 57 |
+
- влияние технологических допусков и частичных закупорок;
|
| 58 |
+
- локальные потери в сложных элементах;
|
| 59 |
+
- параметры генерации капель для соответствующих архитектур;
|
| 60 |
+
- варианты геометрии при обратном проектировании.
|
| 61 |
|
| 62 |
+
Для специализированной древовидной архитектуры поддерживается расчёт до **65 536 выходов**.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
|
| 64 |
+
## Архитектура расчёта
|
| 65 |
|
| 66 |
```text
|
| 67 |
+
геометрия и режим работы чипа
|
| 68 |
+
↓
|
| 69 |
+
точный сетевой расчёт
|
| 70 |
+
↓
|
| 71 |
+
поиск локально сложных элементов
|
| 72 |
+
↓
|
| 73 |
+
проверенный PINN / XPINN
|
| 74 |
+
↓
|
| 75 |
+
повторный точный расчёт всей сети
|
| 76 |
+
↓
|
| 77 |
+
неопределённость и проектирование
|
| 78 |
+
↓
|
| 79 |
+
локальный CFD только для сложных / OOD-случаев
|
| 80 |
```
|
| 81 |
|
| 82 |
+
Глобальный баланс массы и давления не передаётся нейронной сети: он решается детерминированным сетевым решателем. PINN используется как локальное физическое уточнение.
|
| 83 |
+
|
| 84 |
+
## Режимы
|
| 85 |
+
|
| 86 |
+
### Быстрый
|
| 87 |
+
|
| 88 |
+
Точный сетевой расчёт без PINN и DeepCFD.
|
| 89 |
+
|
| 90 |
+
### С локальным уточнением PINN — рекомендуется
|
| 91 |
+
|
| 92 |
+
1. Строится реальная геометрия чипа.
|
| 93 |
+
2. Выполняется предварительный точный расчёт всей сети.
|
| 94 |
+
3. Выбирается характерное повторяющееся сужение.
|
| 95 |
+
4. Для него обучается локальный XPINN.
|
| 96 |
+
5. PINN сравнивается с независимым эталоном.
|
| 97 |
+
6. Только прошедшая допуск поправка переносится на сходные элементы.
|
| 98 |
+
7. Вся сеть пересчитывается точным решателем.
|
| 99 |
+
8. Рассчитываются неопределённость и показатели проектирования.
|
| 100 |
+
|
| 101 |
+
### Расширенный — PINN + DeepCFD
|
| 102 |
+
|
| 103 |
+
К рекомендованному контуру добавляются открытая проверка и локальный оператор на данных DeepCFD. Этот режим тяжелее и предназначен прежде всего для исследовательской проверки многоуровневого расчёта.
|
| 104 |
+
|
| 105 |
+
## Варианты архитектуры чипа
|
| 106 |
|
| 107 |
+
- распределительная сеть;
|
| 108 |
+
- перфузионный чип;
|
| 109 |
+
- массив генераторов капель;
|
| 110 |
+
- гибридная архитектура.
|
| 111 |
|
| 112 |
+
## Что является PINN в этой модели
|
|
|
|
| 113 |
|
| 114 |
+
PINN не используется как универсальная замена CFD.
|
|
|
|
| 115 |
|
| 116 |
+
Основной PDE-PINN/XPINN решает локальную задачу для повторяющегося сужения. После независимой проверки локальная поправка включается в сетевой расчёт.
|
| 117 |
|
| 118 |
+
Для Т-образных генераторов предусмотрено отдельное physics-informed замыкание двухфазной задачи.
|
| 119 |
|
| 120 |
+
## Проверка и открытые эталоны
|
|
|
|
|
|
|
|
|
|
| 121 |
|
| 122 |
+
В коде предусмотрены внутренние тесты физических балансов и внешний набор проверок. В исследовательском режиме могут использоваться открытые данные DeepCFD и DAFD.
|
|
|
|
|
|
|
| 123 |
|
| 124 |
+
Ссылки и DOI соответствующих источников закреплены непосредственно в исходном коде.
|
| 125 |
|
| 126 |
+
## Ограничения
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
|
| 128 |
+
Текущая версия предназначена для ламинарных микрофлюидных систем и не заменяет полноценный трёхмерный CFD для сложного разрушения интерфейса, коалесценции, сильно выходящих за область применимости режимов смачивания, деформируемых стенок и других не включённых физических эффектов.
|
|
|
|
| 129 |
|
| 130 |
+
Модель следует рассматривать как исследовательский MVP и инструмент предварительного проектирования, а не как готовый производственный расчётный пакет.
|
| 131 |
|
| 132 |
+
Подробнее: [`MODEL_SCOPE.md`](MODEL_SCOPE.md).
|
|
|
REPOSITORY_LAYOUT.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Структура репозитория
|
| 2 |
+
|
| 3 |
+
```text
|
| 4 |
+
README.md
|
| 5 |
+
LICENSE
|
| 6 |
+
MODEL_SCOPE.md
|
| 7 |
+
colab/
|
| 8 |
+
README.md
|
| 9 |
+
microfluidic_sciml_v16_1.ipynb
|
| 10 |
+
microfluidic_sciml_v16_1.py
|
| 11 |
+
local/
|
| 12 |
+
README.md
|
| 13 |
+
requirements.txt
|
| 14 |
+
app.py
|
| 15 |
+
app.ipynb
|
| 16 |
+
microfluidic_sciml_v16_1.py
|
| 17 |
+
run_windows.bat
|
| 18 |
+
run_mac_linux.sh
|
| 19 |
+
```
|
| 20 |
+
|
| 21 |
+
`colab/` — запуск в Google Colab.
|
| 22 |
+
`local/` — запуск локально, в том числе из VS Code.
|
colab/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Версия для Google Colab
|
| 2 |
+
|
| 3 |
+
Самый простой вариант запуска модели.
|
| 4 |
+
|
| 5 |
+
## Как запустить
|
| 6 |
+
|
| 7 |
+
1. Откройте `microfluidic_sciml_v16_1.ipynb` в Google Colab.
|
| 8 |
+
2. Выполните основную ячейку.
|
| 9 |
+
3. Интерфейс модели появится прямо в notebook.
|
| 10 |
+
|
| 11 |
+
Файл `microfluidic_sciml_v16_1.py` содержит полный исходный код вычислительного ядра и интерфейса.
|
colab/microfluidic_sciml_v16_1.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
colab/microfluidic_sciml_v16_1.py
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
local/README.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Локальная версия / VS Code
|
| 2 |
+
|
| 3 |
+
Эта версия запускает модель на компьютере пользователя как небольшое локальное веб-приложение.
|
| 4 |
+
|
| 5 |
+
Рекомендуется Python **3.11 или 3.12**.
|
| 6 |
+
|
| 7 |
+
## Windows / VS Code
|
| 8 |
+
|
| 9 |
+
Откройте терминал в папке `local`:
|
| 10 |
+
|
| 11 |
+
```powershell
|
| 12 |
+
python -m venv .venv
|
| 13 |
+
.venv\Scripts\activate
|
| 14 |
+
python -m pip install --upgrade pip
|
| 15 |
+
pip install -r requirements.txt
|
| 16 |
+
python app.py
|
| 17 |
+
```
|
| 18 |
+
|
| 19 |
+
После запуска браузер автоматически откроет:
|
| 20 |
+
|
| 21 |
+
`http://127.0.0.1:8866`
|
| 22 |
+
|
| 23 |
+
Для остановки нажмите `Ctrl+C` в терминале.
|
| 24 |
+
|
| 25 |
+
## macOS / Linux
|
| 26 |
+
|
| 27 |
+
```bash
|
| 28 |
+
python3 -m venv .venv
|
| 29 |
+
source .venv/bin/activate
|
| 30 |
+
python -m pip install --upgrade pip
|
| 31 |
+
pip install -r requirements.txt
|
| 32 |
+
python app.py
|
| 33 |
+
```
|
| 34 |
+
|
| 35 |
+
## Как устроен локальный запуск
|
| 36 |
+
|
| 37 |
+
`app.py` запускает локальный Voilà-сервер. Он открывает служебный `app.ipynb`, который подключает вычислительное ядро `microfluidic_sciml_v16_1.py` и показывает интерфейс модели как отдельную веб-страницу.
|
| 38 |
+
|
| 39 |
+
Все расчёты выполняются локально на компьютере пользователя.
|
| 40 |
+
|
| 41 |
+
## Результаты
|
| 42 |
+
|
| 43 |
+
Экспортируемые файлы сохраняются в папке:
|
| 44 |
+
|
| 45 |
+
`local/model_outputs/`
|
| 46 |
+
|
| 47 |
+
## Расширенный режим
|
| 48 |
+
|
| 49 |
+
Режим `PINN + DeepCFD` требует доступа в интернет для загрузки открытого набора DeepCFD и заметно больше времени. Для обычного локального использования рекомендуется режим с локальным уточнением PINN.
|
local/app.ipynb
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "markdown",
|
| 5 |
+
"id": "2de1b354",
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"source": [
|
| 8 |
+
"# Модель проектирования микрофлюидных чипов V16.1 — локальный запуск\n",
|
| 9 |
+
"\n",
|
| 10 |
+
"Служебная оболочка для Voilà. Для обычного запуска используйте `python app.py`."
|
| 11 |
+
]
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"cell_type": "code",
|
| 15 |
+
"execution_count": null,
|
| 16 |
+
"id": "8023cbc2",
|
| 17 |
+
"metadata": {},
|
| 18 |
+
"outputs": [],
|
| 19 |
+
"source": [
|
| 20 |
+
"import os\n",
|
| 21 |
+
"os.environ[\"MEGANET_PINN_NO_AUTOLAUNCH\"] = \"1\"\n",
|
| 22 |
+
"\n",
|
| 23 |
+
"from microfluidic_sciml_v16_1 import launch\n",
|
| 24 |
+
"\n",
|
| 25 |
+
"MICROFLUIDIC_MODEL = launch(show_startup=True)\n"
|
| 26 |
+
]
|
| 27 |
+
}
|
| 28 |
+
],
|
| 29 |
+
"metadata": {
|
| 30 |
+
"kernelspec": {
|
| 31 |
+
"display_name": "Python 3",
|
| 32 |
+
"language": "python",
|
| 33 |
+
"name": "python3"
|
| 34 |
+
},
|
| 35 |
+
"language_info": {
|
| 36 |
+
"name": "python"
|
| 37 |
+
}
|
| 38 |
+
},
|
| 39 |
+
"nbformat": 4,
|
| 40 |
+
"nbformat_minor": 5
|
| 41 |
+
}
|
local/app.py
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""
|
| 3 |
+
Модель проектирования микрофлюидных чипов V16.1 — локальный запуск.
|
| 4 |
+
|
| 5 |
+
Команда:
|
| 6 |
+
python app.py
|
| 7 |
+
"""
|
| 8 |
+
from __future__ import annotations
|
| 9 |
+
|
| 10 |
+
import importlib.util
|
| 11 |
+
import os
|
| 12 |
+
from pathlib import Path
|
| 13 |
+
import subprocess
|
| 14 |
+
import sys
|
| 15 |
+
import threading
|
| 16 |
+
import time
|
| 17 |
+
import urllib.request
|
| 18 |
+
import webbrowser
|
| 19 |
+
|
| 20 |
+
APP_DIR = Path(__file__).resolve().parent
|
| 21 |
+
NOTEBOOK = APP_DIR / "app.ipynb"
|
| 22 |
+
OUTPUT_DIR = APP_DIR / "model_outputs"
|
| 23 |
+
|
| 24 |
+
HOST = os.environ.get("MICROFLUIDIC_HOST", "127.0.0.1")
|
| 25 |
+
PORT = int(os.environ.get("MICROFLUIDIC_PORT", "8866"))
|
| 26 |
+
URL = f"http://{HOST}:{PORT}/"
|
| 27 |
+
|
| 28 |
+
def _check_dependencies() -> None:
|
| 29 |
+
required = {
|
| 30 |
+
"voila": "voila",
|
| 31 |
+
"ipywidgets": "ipywidgets",
|
| 32 |
+
"numpy": "numpy",
|
| 33 |
+
"pandas": "pandas",
|
| 34 |
+
"matplotlib": "matplotlib",
|
| 35 |
+
"scipy": "scipy",
|
| 36 |
+
"sklearn": "scikit-learn",
|
| 37 |
+
"torch": "torch",
|
| 38 |
+
"requests": "requests",
|
| 39 |
+
"openpyxl": "openpyxl",
|
| 40 |
+
}
|
| 41 |
+
missing = [pip_name for module, pip_name in required.items()
|
| 42 |
+
if importlib.util.find_spec(module) is None]
|
| 43 |
+
if missing:
|
| 44 |
+
print("\nНе установлены зависимости:", ", ".join(missing))
|
| 45 |
+
print("Сначала выполните:")
|
| 46 |
+
print(f' "{sys.executable}" -m pip install -r "{APP_DIR / "requirements.txt"}"' )
|
| 47 |
+
raise SystemExit(1)
|
| 48 |
+
|
| 49 |
+
def _open_browser_when_ready(timeout: float = 60.0) -> None:
|
| 50 |
+
deadline = time.time() + timeout
|
| 51 |
+
while time.time() < deadline:
|
| 52 |
+
try:
|
| 53 |
+
with urllib.request.urlopen(URL, timeout=1.0):
|
| 54 |
+
webbrowser.open(URL)
|
| 55 |
+
return
|
| 56 |
+
except Exception:
|
| 57 |
+
time.sleep(0.4)
|
| 58 |
+
webbrowser.open(URL)
|
| 59 |
+
|
| 60 |
+
def main() -> None:
|
| 61 |
+
_check_dependencies()
|
| 62 |
+
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
| 63 |
+
|
| 64 |
+
env = os.environ.copy()
|
| 65 |
+
env["MEGANET_PINN_OUTPUT_DIR"] = str(OUTPUT_DIR)
|
| 66 |
+
env["PYTHONUNBUFFERED"] = "1"
|
| 67 |
+
|
| 68 |
+
print("Модель проектирования микрофлюидных чипов V16.1")
|
| 69 |
+
print(f"Интерфейс откроется в браузере: {URL}")
|
| 70 |
+
print("Для остановки нажмите Ctrl+C.\n")
|
| 71 |
+
|
| 72 |
+
threading.Thread(target=_open_browser_when_ready, daemon=True).start()
|
| 73 |
+
|
| 74 |
+
cmd = [
|
| 75 |
+
sys.executable, "-m", "voila", str(NOTEBOOK),
|
| 76 |
+
"--no-browser",
|
| 77 |
+
f"--Voila.ip={HOST}",
|
| 78 |
+
f"--Voila.port={PORT}",
|
| 79 |
+
"--Voila.theme=light",
|
| 80 |
+
"--Voila.show_tracebacks=True",
|
| 81 |
+
]
|
| 82 |
+
|
| 83 |
+
try:
|
| 84 |
+
subprocess.run(cmd, cwd=str(APP_DIR), env=env, check=True)
|
| 85 |
+
except KeyboardInterrupt:
|
| 86 |
+
print("\nМодель остановлена.")
|
| 87 |
+
except subprocess.CalledProcessError as exc:
|
| 88 |
+
print(f"\nVoilà завершился с кодом {exc.returncode}.")
|
| 89 |
+
raise SystemExit(exc.returncode)
|
| 90 |
+
|
| 91 |
+
if __name__ == "__main__":
|
| 92 |
+
main()
|
local/microfluidic_sciml_v16_1.py
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
local/requirements.txt
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
voila>=0.5,<0.6
|
| 2 |
+
ipywidgets>=8.1,<9
|
| 3 |
+
jupyterlab_widgets>=3.0,<4
|
| 4 |
+
numpy>=1.26,<3
|
| 5 |
+
pandas>=2.2,<3
|
| 6 |
+
matplotlib>=3.8,<4
|
| 7 |
+
scipy>=1.12,<2
|
| 8 |
+
scikit-learn>=1.4,<2
|
| 9 |
+
torch>=2.2,<3
|
| 10 |
+
requests>=2.31,<3
|
| 11 |
+
openpyxl>=3.1,<4
|
local/run_mac_linux.sh
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -e
|
| 3 |
+
if [ ! -d ".venv" ]; then
|
| 4 |
+
python3 -m venv .venv
|
| 5 |
+
fi
|
| 6 |
+
source .venv/bin/activate
|
| 7 |
+
python -m pip install --upgrade pip
|
| 8 |
+
pip install -r requirements.txt
|
| 9 |
+
python app.py
|
local/run_windows.bat
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@echo off
|
| 2 |
+
if not exist .venv (
|
| 3 |
+
python -m venv .venv
|
| 4 |
+
)
|
| 5 |
+
call .venv\Scripts\activate
|
| 6 |
+
python -m pip install --upgrade pip
|
| 7 |
+
pip install -r requirements.txt
|
| 8 |
+
python app.py
|
| 9 |
+
pause
|