biocomp


Namebiocomp JSON
Version 0.2.4 PyPI version JSON
download
home_pagehttps://www.biokomputer.pl
SummaryBioComp 'Coded Life' to propozycja języka domenowo-specyficznego (DSL) do edukacji i wdrażania biocomputingu
upload_time2024-10-18 19:17:27
maintainerNone
docs_urlNone
authorTom Sapletta
requires_pythonNone
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![biocomp](https://github.com/user-attachments/assets/f9a3d58d-fd75-4d62-b456-034d94e75a08)


[BioComp "Coded Life"](https://dsl.biokomputery.pl/) to propozycja języka domenowo-specyficznego (DSL) do edukacji i wdrażania biocomputingu obejmuje elementy języka opisu eksperymentów, symulacji, designu i utrzymania systemów biokomputerowych. 
Motto "Coded Life" Łączy w sobie koncepcję kodowania (nawiązując do aspektu programistycznego) z życiem (odnosząc się do biologicznej strony projektu).


### Składnia języka

**BioComp** jest zaimplementowany jako skrypt jezyka python z klasami dla modelu i funkcjami przetwarzania pliku **YAML**, generowania symulacji i grafu. 
Plik `biocomp.py` modelu jest konwertowany do obiektow klas potrzebnyh do uruchamienia symulacji.
Plik **YAML** zawiera potrzebne informacje do wykonania symulacji:
1. Definicje Molekularne
2. Tworzenie Biologicznych Układów Logicznych
3. Symulacje Eksperymentów
4. Drukowanie i Inżynieria BioSystemów
5. Monitorowanie i Utrzymanie Systemów



### Zależności

1. **`pyparsing`**: Biblioteka do parsowania, potrzebna do przetwarzania DSL.
2. **`matplotlib`**: Biblioteka do tworzenia wizualizacji, użyta do generowania wykresów wyników symulacji.
3. **`numpy`**: Biblioteka do operacji na tablicach wielowymiarowych, używana do generowania danych do symulacji.
4. **`graphviz`**: The addition of the `graphviz` module is necessary for graph visualization.


### Instalacja

Aby zainstalować te wymagania w swoim środowisku Python, wykonaj następujące kroki:

#### Stwórz i aktywuj wirtualne środowisko:

```bash
python -m venv env
source env/bin/activate  # Na Windows użyj: env\Scripts\activate
```
lub
If the user has Miniconda or Anaconda, I will provide instructions to create a new environment and install Graphviz within that environment:
```bash
conda create -n biokomputer python=3.12 graphviz
conda activate biokomputer
python main.py
```
 
#### Zainstaluj zależności z pliku `requirements.txt`:
```bash
pip install -r requirements.txt
pip install --upgrade pip
```


---

## Symulacje bramek logicznych 



### Uruchomienie

Aby uruchomić tę konfigurację, wykonaj następujące kroki:

1. Zapisz kod Python w pliku o nazwie `biocomp.py`.
2. Zapisz zawartość pliku YAML w pliku o nazwie `biocomp.yaml`.
3. Uruchom skrypt Python z pliku `biocomp.py`, podając plik YAML jako argument:

```bash
python biocomp.py biocomp.yaml
```


**Wzór Przetwarzania Danych Wejściowych:**

![obraz](https://github.com/user-attachments/assets/8a016acd-029d-4fd5-a868-b38d7257cfa2)

```latex
\[ \text{output\_level} = \frac{\sin(t)}{2} + 0.5 \]
```

```python
def run_simulation(simulation):
    time = np.linspace(0, float(simulation.conditions["time"]), 100)  # Generowanie 100 punktów czasowych
    output_levels = np.sin(time) / 2 + 0.5  # Przykładowa funkcja poziomu wyjściowego    
```

### Symulacja bramki AND

```yaml
molecules:
  - type: Protein
    name: Input1Prot
  - type: Protein
    name: Input2Prot
  - type: Protein
    name: OutputProt

logic_gates:
  - gate_type: AND
    input1: Input1Prot
    input2: Input2Prot
    output: OutputProt

biological_system:
  name: BioCompSystem1

simulation:
  conditions:
    time: 100
    temperature: 37
  outputs:
    - Protein OutputProt
```



### Interpretacja Wykresu

Wykresy generowane z symulacji opartej na pliku DSL pokazują dynamiczne zmiany w warunkach eksperymentalnych w funkcji czasu. 

1. **Oś X (czas)**: Przedstawia czas trwania symulacji w minutach. Parametr `simulation.conditions['time']` ustala zakres czasowy symulacji. Cały przedział czasowy jest podzielony na 100 równych odstępów, dzięki czemu otrzymujemy szczegółowy wykres zmienności w czasie.

2. **Oś Y (poziom wyjściowy)**: Przedstawia poziom wyjściowy białka lub innej zmiennej wyjściowej, określonej przez `simulation.outputs`. Funkcja `np.sin(time) / 2 + 0.5` daje synusoidalne zmiany poziomu wyjściowego o amplitudzie 0.5 i przesunięciu pionowym o 0.5, co oznacza, że wartości zmieniają się w zakresie od 0 do 1.

3. **Linia wykresu**: Jest to krzywa pokazująca zmiany poziomu wyjściowego w czasie. Nazwa białka lub zmiennej jest wyświetlana jako etykieta wykresu na podstawie zawartości `simulation.outputs[0]`.


### Przykładowe Wyniki Wykresu

W przypadku symulacji opartej na przykładzie z wcześniejszym pliku `1/biocomp.yaml`, uzyskany wykres może wyglądać tak:

- **Symulacja: BioCompSystem1**: Tytuł wykresu wskazuje, że symulacja jest wykonywana na systemie `BioCompSystem1`.
- **Etykieta: Protein OutputProt**: Etykieta na wykresie odnosi się do nazwy wyjściowego białka zdefiniowanego w symulacji.

Poniżej znajduje się przybliżona wizualizacja:

```
|          ________
|         /        \
|        /          \________ x100 minutes
|_______/                    \_______
0.0                                    100.0
```

**Przykładowy Wykres ze Wskazaniem**

- Wartości na osi Y zmieniają się synusoidalnie od poziomu 0 do 1.
- Wartości czasowe na osi X biegną od 0 do 100 minut.

### Rzeczywiste Zastosowanie i Dane

W praktycznych zastosowaniach, dane wejściowe będą bardziej złożone i precyzyjne, bazujące na faktycznych pomiarach lub modelach biomolekularnych.
Symulacje mogą prezentować poziomy ekspresji genów, aktywności enzymatycznej, stężeń cząsteczek sygnałowych i innych ważnych parametrów biologicznych w zależności od warunków eksperymentalnych.

## Przykłady

Przykładowa sinusoidalna funkcja pokazuje podstawowe podejście do wizualizacji tych danych, ale rzeczywiste dane mogą być o wiele bardziej skomplikowane, zależnie od specyfiki symulacji i modelu biokomputerowego.
Te przykłady obejmują różne konfiguracje dla różnych typów biologicznych układów logicznych. Przykłady obejmują różne typy bramek logicznych, takie jak "AND", "OR" i "NOT". Jeśli w twojej klasie `LogicGate` zostały zaimplementowane poprawne działanie dla tych bramek, to te przykłady powinny dawać odpowiednie wyniki na podstawie ustawionych warunków w plikach YAML.
Jeśli nie zaimplementowano jeszcze działania dla tych bramek w klasie `LogicGate`, to należy to zrobić.

Aby przetestować twoją aplikację z tą funkcjonalnością, należy zapisać każdy plik YAML jako osobny plik.


### BioCompSystem1
+ [biocomp.yaml](1/biocomp.yaml)

![bio_system_graph.png](1/bio_system_graph.png)

```py
digraph {
	Input1Prot [label="Input1Prot (Protein)"]
	Input2Prot [label="Input2Prot (Protein)"]
	OutputProt [label="OutputProt (Protein)"]
	"AND Gate"
	Input1Prot -> "AND Gate"
	Input2Prot -> "AND Gate"
	"AND Gate" -> OutputProt
}
```

```bash
python biocomp.py 1/biocomp.yaml
```

![1](1/sim.png)

```yaml
Running simulation for BioCompSystem1
Conditions: {'time': 100, 'temperature': 37}
Expected Outputs: ['Protein OutputProt']
```


### BioCompSystem2
+ [biocomp.yaml](2/biocomp.yaml)

![bio_system_graph.png](2/bio_system_graph.png)

```py
digraph {
	Input1Prot [label="Input1Prot (Protein)"]
	Input2Prot [label="Input2Prot (Protein)"]
	OutputProt [label="OutputProt (Protein)"]
	"OR Gate"
	Input1Prot -> "OR Gate"
	Input2Prot -> "OR Gate"
	"OR Gate" -> OutputProt
}
```

```bash
python biocomp.py 2/biocomp.yaml
```

```yaml
Running simulation for BioCompSystem2
Conditions: {'time': 150, 'temperature': 25}
Expected Outputs: ['Protein OutputProt']
```
![sym](2/sim.png)


### BioCompSystem3
+ [biocomp.yaml](3/biocomp.yaml)

![bio_system_graph.png](3/bio_system_graph.png)


```py
digraph {
	Input1Prot [label="Input1Prot (Protein)"]
	Input2Prot [label="Input2Prot (Protein)"]
	Input3Prot [label="Input3Prot (Protein)"]
	OutputProt1 [label="OutputProt1 (Protein)"]
	OutputProt2 [label="OutputProt2 (Protein)"]
	"AND Gate"
	Input1Prot -> "AND Gate"
	Input2Prot -> "AND Gate"
	"AND Gate" -> OutputProt1
	"OR Gate"
	OutputProt1 -> "OR Gate"
	Input3Prot -> "OR Gate"
	"OR Gate" -> OutputProt2
}
```

```sh
python biocomp.py 3/biocomp.yaml
```

```yaml
Running simulation for BioCompSystem3
Conditions: {'time': 200, 'temperature': 30}
Expected Outputs: ['Protein OutputProt1', 'Protein OutputProt2']
```
![3](3/sim.png)


### BioCompSystem4
+ [biocomp.yaml](4/biocomp.yaml)

![bio_system_graph.png](4/bio_system_graph.png)

```py
digraph {
	Input1Prot [label="Input1Prot (Protein)"]
	OutputProt [label="OutputProt (Protein)"]
	"NOT Gate"
	Input1Prot -> "NOT Gate"
	"NOT Gate" -> OutputProt
}
```

```sh
python biocomp.py 4/biocomp.yaml
```

```yaml
Running simulation for BioCompSystem4
Conditions: {'time': 120, 'temperature': 37}
Expected Outputs: ['Protein OutputProt']
```
![4](4/sim.png)



---

## Symulacje Grzybow

Aby przeprowadzić symulację, np. wzrostu grzybów, warto uwzględnić czynniki takie jak dostępność substancji odżywczych, temperatura, wilgotność i czas. 
Wzrost grzybów można modelować za pomocą różniczkowych równań wzrostu biologicznego, takich jak równanie Verhulsta (logistyczne równanie różniczkowe) lub modele podobne.

### Wzór Symulacji Wzrostu Grzybów

Równanie logistyczne może być używane do modelowania wzrostu populacji organizmu, w tym grzybów:

![obraz](https://github.com/user-attachments/assets/2af1d822-2f7b-49b0-942d-f1a6d24c0d58)

```latex
\[ \frac{dN}{dt} = rN \left(1 - \frac{N}{K}\right) \]
```

Gdzie:
- \( N \) jest liczbą organizmów (np. masa biomasy grzybów),
- \( r \) jest wskaźnikiem wzrostu,
- \( K \) jest nośnością środowiska.

#### Skrypt `fungi.py`

Skrypt Pythona, który przetwarza dane wejściowe z plików YAML i wykonuje symulację wzrostu grzybów.
Wzór logistyczny użyty w skrypcie pozwala modelować realistyczny wzrost populacji grzybów i może być dostosowany dzięki zmianie parametrów w plikach YAML.
Skrypt wspiera przetwarzanie wielu plików YAML oraz opcjonalnie przetwarzanie wszystkich plików YAML w podanym folderze.
Zawiera funkcje do generowania wykresów, tekstowych definicji grafów oraz graficznych reprezentacji grafów.

1. **Obsługa wielu plików YAML**: Pobieranie wielu plików jako argumentów lub obsługa folderu zawierającego pliki YAML.
2. **Parsowanie**: danych i tworzenie strukturę symulacji**,
3. **Symulacja**: wzrostu grzybów za pomocą równania logistycznego,
4. **Wizualizacja wyników**: Generowanie wykresów wzrostu biomasy.
5. **Generowanie tekstowej definicji grafu**: Zapisywanie parametrów symulacji i wyników do pliku tekstowego.
6. **Graficzna reprezentacja grafu**: Tworzenie grafów za pomocą Graphviz.



#### Wymagane biblioteki
Aby zapewnić pełną funkcjonalność, należy zainstalować następujące biblioteki:
- `yaml`
- `matplotlib`
- `graphviz`

Można je zainstalować za pomocą pip:
```bash
pip install pyyaml matplotlib graphviz
```


### FungiExperiment1

```bash
python fungi.py --folder ./11
```

```py
digraph G {
    node [shape=record];
    "Simulation" [label="{Name: FungiExperiment1|Initial Population: 10|Growth Rate: 0.2|Carrying Capacity: 1000|Conditions: time=30, temperature=25, humidity=80|Outputs: Biomass}"];
}
```
![fungi.dot.png](11/fungi.dot.png)
![fungi.png](11/fungi.png)
[fungi.yaml](11/fungi.yaml)

### FungiExperiment2

```bash
python fungi.py --folder ./11
```

```py
digraph G {
    node [shape=record];
    "Simulation" [label="{Name: FungiExperiment2|Initial Population: 5|Growth Rate: 0.1|Carrying Capacity: 500|Conditions: time=45, temperature=20, humidity=90|Outputs: Biomass}"];
}
```
[fungi.dot](12/fungi.dot)
![fungi.dot.png](12/fungi.dot.png)
![fungi.png](12/fungi.png)
[fungi.yaml](12/fungi.yaml)


---

## Symulacje Physarum

Aby zrealizować bardziej złożoną symulację wzrostu Physarum polycephalum (slime mold) jako hierarchicznej struktury komórkowej w kontekście modeli reakcyjno-dyfuzyjnych, należy przeanalizować kilka kluczowych procesów. Model reakcyjno-dyfuzyjny umożliwia symulację jak substancje (np. chemotaksyny) dyfundują oraz jak komórki reagują na te substancje, co prowadzi do wzrostu i formowania wzorca strukturalnego.

To jest dość zaawansowane zadanie, które można osiągnąć przy użyciu bibliotek takich jak NumPy do obliczeń oraz Matplotlib do wizualizacji. Do generowania grafów hierarchicznych użyjemy Graphviz.

Założenia:
1. **Hierarchiczna struktura**: Model Physarum jako siatki komórkowej.
2. **Model reakcyjno-dyfuzyjny**: Użyjemy prostego równania reakcyjno-dyfuzyjnego do modelowania rozprzestrzeniania się i reakcji chemotaksyn.

### Równanie Reakcyjno-Dyfuzyjne

![obraz](https://github.com/user-attachments/assets/ae15c732-641b-42b1-9300-1236819b09ea)

```latex
\[ \frac{\partial u}{\partial t} = D \nabla^2 u + f(u, v) \]
```


![obraz](https://github.com/user-attachments/assets/1336ed6f-4508-4c9b-9c9d-e07fa40c1c07)
```latex
\[ \frac{\partial v}{\partial t} = D \nabla^2 v + g(u, v) \]
```
gdzie:
- \( u \) i \( v \) są koncentracją substancji chemicznych,
- \( D \) jest współczynnikiem dyfuzji,
- \( f(u, v) \) oraz \( g(u, v) \) są funkcjami reakcji.

### Skrypt Python dla Modelu Hierarchicznej Struktury i Wykresu
Skrypt tworzy hierarchiczną strukturę Physarum jako maszynę reakcyjno-dyfuzyjną, przetwarza wiele plików YAML, a także generuje wizualizacje, tekstową definicję grafu i jego graficzną reprezentację. Wszystkie wygenerowane pliki są nazwane zgodnie z nazwami plików YAML, ale bez rozszerzenia `.yaml`.

#### Instalacja Wymaganych Bibliotek

Najpierw zainstaluj wymagane biblioteki:
```bash
pip install numpy matplotlib graphviz
```

### PhysarumExperiment1
+ [physarum.yaml](21/physarum.yaml)

```bash
python physarum.py --folder ./21
```
+ [physarum.dot](21/physarum.dot)
```py
digraph G {
    node [shape=record];
    "Simulation" [label="{
        Name: PhysarumSimulation2 |
        Grid Size: 101 |
        Steps: 200 |
        Diffusion Coefficient: 0.2 |
        Reaction Rate: 0.02 |
        k: 0.07 |
        Initial U Value: 0.2 |
        Initial V Value: 0.25 |
        Initial Radius: 1 |
        Conditions: time=2, temperature=2, humidity=50 |
        Outputs: u, v
    }"];
}
```
![physarum_hierarchy.png](21/physarum_hierarchy.png)

![physarum.dot.png](21/physarum.dot.png)

![physarum.png](21/physarum.png)

### PhysarumExperiment2

+ [physarum.yaml](22/physarum.yaml)

```bash
python physarum.py --folder ./22
```
+ [physarum.dot](22/physarum.dot)
```py
digraph G {
    node [shape=record];
    "Simulation" [label="{
        Name: PhysarumSimulation2 |
        Grid Size: 101 |
        Steps: 200 |
        Diffusion Coefficient: 0.2 |
        Reaction Rate: 0.02 |
        k: 0.07 |
        Initial U Value: 0.2 |
        Initial V Value: 0.25 |
        Initial Radius: 1 |
        Conditions: time=2, temperature=3, humidity=50 |
        Outputs: u, v
    }"];
}
```
![physarum_hierarchy.png](22/physarum_hierarchy.png)

![physarum.dot.png](22/physarum.dot.png)

![physarum.png](22/physarum.png)




### PhysarumExperiment3

+ [physarum.yaml](23/physarum.yaml)

```bash
python physarum.py --folder ./23
```
+ [physarum.dot](23/physarum.dot)
```py
digraph G {
    node [shape=record];
    "Simulation" [label="{
        Name: PhysarumSimulation2 |
        Grid Size: 101 |
        Steps: 200 |
        Diffusion Coefficient: 0.2 |
        Reaction Rate: 0.02 |
        k: 0.07 |
        Initial U Value: 0.2 |
        Initial V Value: 0.25 |
        Initial Radius: 1 |
        Conditions: time=3, temperature=3, humidity=50 |
        Outputs: u, v
    }"];
}
```
![physarum_hierarchy.png](23/physarum_hierarchy.png)

![physarum.dot.png](23/physarum.dot.png)

![physarum.png](23/physarum.png)




## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=biokomputer/dsl&type=Date)](https://star-history.com/#biokomputer/dsl&Date)


## [Contributions](http://contribution.softreck.dev)

[CONTRIBUTION](CONTRIBUTION.md) are always welcome:
+ did you found an [Issue or Mistake](https://github.com/biokomputer/dsl/issues/new)?
+ do you want to [improve](https://github.com/biokomputer/dsl/edit/main/README.md) the article?
+ are you interested do join another [git projects](https://github.com/biokomputer/)?
+ have something to contribute or discuss? [Open a pull request](https://github.com/biokomputer/dsl/pulls) or [create an issue](https://github.com/biokomputer/dsl/issues).



## Autor

![obraz](https://github.com/tom-sapletta-com/rynek-pracy-2030-eu/assets/5669657/24abdad9-5aff-4834-95a0-d7215cc6e0bc)

## Tom Sapletta

Na co dzień DevOps, ewangelista hipermodularyzacji, ostatnio entuzjasta biocomputing.
Łączy doświadczenie w programowaniu i research-u poprzez wdrażanie nowatorskich rozwiązań. 
Szerokie spektrum zainteresowań, umiejętności analityczne i doświadczenie w branży owocują eksperymentalnymi projektami opensource.

+ [Tom Sapletta, Linkedin](https://www.linkedin.com/in/tom-sapletta-com)
+ [Tom Sapletta, Github](https://github.com/tom-sapletta-com)


---



<script type="module">    
  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
  //import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.8.0/dist/mermaid.min.js';
  mermaid.initialize({
    startOnReady:true,
    theme: 'forest',
    flowchart:{
            useMaxWidth:false,
            htmlLabels:true
        }
  });
  mermaid.init(undefined, '.language-mermaid');
</script>


            

Raw data

            {
    "_id": null,
    "home_page": "https://www.biokomputer.pl",
    "name": "biocomp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "Tom Sapletta",
    "author_email": "info@softreck.dev",
    "download_url": "https://files.pythonhosted.org/packages/2f/68/43120ee6a723d2d6659e441fa3c673287ce75c4ad884672c6745c72d75d2/biocomp-0.2.4.tar.gz",
    "platform": null,
    "description": "![biocomp](https://github.com/user-attachments/assets/f9a3d58d-fd75-4d62-b456-034d94e75a08)\n\n\n[BioComp \"Coded Life\"](https://dsl.biokomputery.pl/) to propozycja j\u0119zyka domenowo-specyficznego (DSL) do edukacji i wdra\u017cania biocomputingu obejmuje elementy j\u0119zyka opisu eksperyment\u00f3w, symulacji, designu i utrzymania system\u00f3w biokomputerowych. \nMotto \"Coded Life\" \u0141\u0105czy w sobie koncepcj\u0119 kodowania (nawi\u0105zuj\u0105c do aspektu programistycznego) z \u017cyciem (odnosz\u0105c si\u0119 do biologicznej strony projektu).\n\n\n### Sk\u0142adnia j\u0119zyka\n\n**BioComp** jest zaimplementowany jako skrypt jezyka python z klasami dla modelu i funkcjami przetwarzania pliku **YAML**, generowania symulacji i grafu. \nPlik `biocomp.py` modelu jest konwertowany do obiektow klas potrzebnyh do uruchamienia symulacji.\nPlik **YAML** zawiera potrzebne informacje do wykonania symulacji:\n1. Definicje Molekularne\n2. Tworzenie Biologicznych Uk\u0142ad\u00f3w Logicznych\n3. Symulacje Eksperyment\u00f3w\n4. Drukowanie i In\u017cynieria BioSystem\u00f3w\n5. Monitorowanie i Utrzymanie System\u00f3w\n\n\n\n### Zale\u017cno\u015bci\n\n1. **`pyparsing`**: Biblioteka do parsowania, potrzebna do przetwarzania DSL.\n2. **`matplotlib`**: Biblioteka do tworzenia wizualizacji, u\u017cyta do generowania wykres\u00f3w wynik\u00f3w symulacji.\n3. **`numpy`**: Biblioteka do operacji na tablicach wielowymiarowych, u\u017cywana do generowania danych do symulacji.\n4. **`graphviz`**: The addition of the `graphviz` module is necessary for graph visualization.\n\n\n### Instalacja\n\nAby zainstalowa\u0107 te wymagania w swoim \u015brodowisku Python, wykonaj nast\u0119puj\u0105ce kroki:\n\n#### Stw\u00f3rz i aktywuj wirtualne \u015brodowisko:\n\n```bash\npython -m venv env\nsource env/bin/activate  # Na Windows u\u017cyj: env\\Scripts\\activate\n```\nlub\nIf the user has Miniconda or Anaconda, I will provide instructions to create a new environment and install Graphviz within that environment:\n```bash\nconda create -n biokomputer python=3.12 graphviz\nconda activate biokomputer\npython main.py\n```\n \n#### Zainstaluj zale\u017cno\u015bci z pliku `requirements.txt`:\n```bash\npip install -r requirements.txt\npip install --upgrade pip\n```\n\n\n---\n\n## Symulacje bramek logicznych \n\n\n\n### Uruchomienie\n\nAby uruchomi\u0107 t\u0119 konfiguracj\u0119, wykonaj nast\u0119puj\u0105ce kroki:\n\n1. Zapisz kod Python w pliku o nazwie `biocomp.py`.\n2. Zapisz zawarto\u015b\u0107 pliku YAML w pliku o nazwie `biocomp.yaml`.\n3. Uruchom skrypt Python z pliku `biocomp.py`, podaj\u0105c plik YAML jako argument:\n\n```bash\npython biocomp.py biocomp.yaml\n```\n\n\n**Wz\u00f3r Przetwarzania Danych Wej\u015bciowych:**\n\n![obraz](https://github.com/user-attachments/assets/8a016acd-029d-4fd5-a868-b38d7257cfa2)\n\n```latex\n\\[ \\text{output\\_level} = \\frac{\\sin(t)}{2} + 0.5 \\]\n```\n\n```python\ndef run_simulation(simulation):\n    time = np.linspace(0, float(simulation.conditions[\"time\"]), 100)  # Generowanie 100 punkt\u00f3w czasowych\n    output_levels = np.sin(time) / 2 + 0.5  # Przyk\u0142adowa funkcja poziomu wyj\u015bciowego    \n```\n\n### Symulacja bramki AND\n\n```yaml\nmolecules:\n  - type: Protein\n    name: Input1Prot\n  - type: Protein\n    name: Input2Prot\n  - type: Protein\n    name: OutputProt\n\nlogic_gates:\n  - gate_type: AND\n    input1: Input1Prot\n    input2: Input2Prot\n    output: OutputProt\n\nbiological_system:\n  name: BioCompSystem1\n\nsimulation:\n  conditions:\n    time: 100\n    temperature: 37\n  outputs:\n    - Protein OutputProt\n```\n\n\n\n### Interpretacja Wykresu\n\nWykresy generowane z symulacji opartej na pliku DSL pokazuj\u0105 dynamiczne zmiany w warunkach eksperymentalnych w funkcji czasu. \n\n1. **O\u015b X (czas)**: Przedstawia czas trwania symulacji w minutach. Parametr `simulation.conditions['time']` ustala zakres czasowy symulacji. Ca\u0142y przedzia\u0142 czasowy jest podzielony na 100 r\u00f3wnych odst\u0119p\u00f3w, dzi\u0119ki czemu otrzymujemy szczeg\u00f3\u0142owy wykres zmienno\u015bci w czasie.\n\n2. **O\u015b Y (poziom wyj\u015bciowy)**: Przedstawia poziom wyj\u015bciowy bia\u0142ka lub innej zmiennej wyj\u015bciowej, okre\u015blonej przez `simulation.outputs`. Funkcja `np.sin(time) / 2 + 0.5` daje synusoidalne zmiany poziomu wyj\u015bciowego o amplitudzie 0.5 i przesuni\u0119ciu pionowym o 0.5, co oznacza, \u017ce warto\u015bci zmieniaj\u0105 si\u0119 w zakresie od 0 do 1.\n\n3. **Linia wykresu**: Jest to krzywa pokazuj\u0105ca zmiany poziomu wyj\u015bciowego w czasie. Nazwa bia\u0142ka lub zmiennej jest wy\u015bwietlana jako etykieta wykresu na podstawie zawarto\u015bci `simulation.outputs[0]`.\n\n\n### Przyk\u0142adowe Wyniki Wykresu\n\nW przypadku symulacji opartej na przyk\u0142adzie z wcze\u015bniejszym pliku `1/biocomp.yaml`, uzyskany wykres mo\u017ce wygl\u0105da\u0107 tak:\n\n- **Symulacja: BioCompSystem1**: Tytu\u0142 wykresu wskazuje, \u017ce symulacja jest wykonywana na systemie `BioCompSystem1`.\n- **Etykieta: Protein OutputProt**: Etykieta na wykresie odnosi si\u0119 do nazwy wyj\u015bciowego bia\u0142ka zdefiniowanego w symulacji.\n\nPoni\u017cej znajduje si\u0119 przybli\u017cona wizualizacja:\n\n```\n|          ________\n|         /        \\\n|        /          \\________ x100 minutes\n|_______/                    \\_______\n0.0                                    100.0\n```\n\n**Przyk\u0142adowy Wykres ze Wskazaniem**\n\n- Warto\u015bci na osi Y zmieniaj\u0105 si\u0119 synusoidalnie od poziomu 0 do 1.\n- Warto\u015bci czasowe na osi X biegn\u0105 od 0 do 100 minut.\n\n### Rzeczywiste Zastosowanie i Dane\n\nW praktycznych zastosowaniach, dane wej\u015bciowe b\u0119d\u0105 bardziej z\u0142o\u017cone i precyzyjne, bazuj\u0105ce na faktycznych pomiarach lub modelach biomolekularnych.\nSymulacje mog\u0105 prezentowa\u0107 poziomy ekspresji gen\u00f3w, aktywno\u015bci enzymatycznej, st\u0119\u017ce\u0144 cz\u0105steczek sygna\u0142owych i innych wa\u017cnych parametr\u00f3w biologicznych w zale\u017cno\u015bci od warunk\u00f3w eksperymentalnych.\n\n## Przyk\u0142ady\n\nPrzyk\u0142adowa sinusoidalna funkcja pokazuje podstawowe podej\u015bcie do wizualizacji tych danych, ale rzeczywiste dane mog\u0105 by\u0107 o wiele bardziej skomplikowane, zale\u017cnie od specyfiki symulacji i modelu biokomputerowego.\nTe przyk\u0142ady obejmuj\u0105 r\u00f3\u017cne konfiguracje dla r\u00f3\u017cnych typ\u00f3w biologicznych uk\u0142ad\u00f3w logicznych. Przyk\u0142ady obejmuj\u0105 r\u00f3\u017cne typy bramek logicznych, takie jak \"AND\", \"OR\" i \"NOT\". Je\u015bli w twojej klasie `LogicGate` zosta\u0142y zaimplementowane poprawne dzia\u0142anie dla tych bramek, to te przyk\u0142ady powinny dawa\u0107 odpowiednie wyniki na podstawie ustawionych warunk\u00f3w w plikach YAML.\nJe\u015bli nie zaimplementowano jeszcze dzia\u0142ania dla tych bramek w klasie `LogicGate`, to nale\u017cy to zrobi\u0107.\n\nAby przetestowa\u0107 twoj\u0105 aplikacj\u0119 z t\u0105 funkcjonalno\u015bci\u0105, nale\u017cy zapisa\u0107 ka\u017cdy plik YAML jako osobny plik.\n\n\n### BioCompSystem1\n+ [biocomp.yaml](1/biocomp.yaml)\n\n![bio_system_graph.png](1/bio_system_graph.png)\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tInput2Prot [label=\"Input2Prot (Protein)\"]\n\tOutputProt [label=\"OutputProt (Protein)\"]\n\t\"AND Gate\"\n\tInput1Prot -> \"AND Gate\"\n\tInput2Prot -> \"AND Gate\"\n\t\"AND Gate\" -> OutputProt\n}\n```\n\n```bash\npython biocomp.py 1/biocomp.yaml\n```\n\n![1](1/sim.png)\n\n```yaml\nRunning simulation for BioCompSystem1\nConditions: {'time': 100, 'temperature': 37}\nExpected Outputs: ['Protein OutputProt']\n```\n\n\n### BioCompSystem2\n+ [biocomp.yaml](2/biocomp.yaml)\n\n![bio_system_graph.png](2/bio_system_graph.png)\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tInput2Prot [label=\"Input2Prot (Protein)\"]\n\tOutputProt [label=\"OutputProt (Protein)\"]\n\t\"OR Gate\"\n\tInput1Prot -> \"OR Gate\"\n\tInput2Prot -> \"OR Gate\"\n\t\"OR Gate\" -> OutputProt\n}\n```\n\n```bash\npython biocomp.py 2/biocomp.yaml\n```\n\n```yaml\nRunning simulation for BioCompSystem2\nConditions: {'time': 150, 'temperature': 25}\nExpected Outputs: ['Protein OutputProt']\n```\n![sym](2/sim.png)\n\n\n### BioCompSystem3\n+ [biocomp.yaml](3/biocomp.yaml)\n\n![bio_system_graph.png](3/bio_system_graph.png)\n\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tInput2Prot [label=\"Input2Prot (Protein)\"]\n\tInput3Prot [label=\"Input3Prot (Protein)\"]\n\tOutputProt1 [label=\"OutputProt1 (Protein)\"]\n\tOutputProt2 [label=\"OutputProt2 (Protein)\"]\n\t\"AND Gate\"\n\tInput1Prot -> \"AND Gate\"\n\tInput2Prot -> \"AND Gate\"\n\t\"AND Gate\" -> OutputProt1\n\t\"OR Gate\"\n\tOutputProt1 -> \"OR Gate\"\n\tInput3Prot -> \"OR Gate\"\n\t\"OR Gate\" -> OutputProt2\n}\n```\n\n```sh\npython biocomp.py 3/biocomp.yaml\n```\n\n```yaml\nRunning simulation for BioCompSystem3\nConditions: {'time': 200, 'temperature': 30}\nExpected Outputs: ['Protein OutputProt1', 'Protein OutputProt2']\n```\n![3](3/sim.png)\n\n\n### BioCompSystem4\n+ [biocomp.yaml](4/biocomp.yaml)\n\n![bio_system_graph.png](4/bio_system_graph.png)\n\n```py\ndigraph {\n\tInput1Prot [label=\"Input1Prot (Protein)\"]\n\tOutputProt [label=\"OutputProt (Protein)\"]\n\t\"NOT Gate\"\n\tInput1Prot -> \"NOT Gate\"\n\t\"NOT Gate\" -> OutputProt\n}\n```\n\n```sh\npython biocomp.py 4/biocomp.yaml\n```\n\n```yaml\nRunning simulation for BioCompSystem4\nConditions: {'time': 120, 'temperature': 37}\nExpected Outputs: ['Protein OutputProt']\n```\n![4](4/sim.png)\n\n\n\n---\n\n## Symulacje Grzybow\n\nAby przeprowadzi\u0107 symulacj\u0119, np. wzrostu grzyb\u00f3w, warto uwzgl\u0119dni\u0107 czynniki takie jak dost\u0119pno\u015b\u0107 substancji od\u017cywczych, temperatura, wilgotno\u015b\u0107 i czas. \nWzrost grzyb\u00f3w mo\u017cna modelowa\u0107 za pomoc\u0105 r\u00f3\u017cniczkowych r\u00f3wna\u0144 wzrostu biologicznego, takich jak r\u00f3wnanie Verhulsta (logistyczne r\u00f3wnanie r\u00f3\u017cniczkowe) lub modele podobne.\n\n### Wz\u00f3r Symulacji Wzrostu Grzyb\u00f3w\n\nR\u00f3wnanie logistyczne mo\u017ce by\u0107 u\u017cywane do modelowania wzrostu populacji organizmu, w tym grzyb\u00f3w:\n\n![obraz](https://github.com/user-attachments/assets/2af1d822-2f7b-49b0-942d-f1a6d24c0d58)\n\n```latex\n\\[ \\frac{dN}{dt} = rN \\left(1 - \\frac{N}{K}\\right) \\]\n```\n\nGdzie:\n- \\( N \\) jest liczb\u0105 organizm\u00f3w (np. masa biomasy grzyb\u00f3w),\n- \\( r \\) jest wska\u017anikiem wzrostu,\n- \\( K \\) jest no\u015bno\u015bci\u0105 \u015brodowiska.\n\n#### Skrypt `fungi.py`\n\nSkrypt Pythona, kt\u00f3ry przetwarza dane wej\u015bciowe z plik\u00f3w YAML i wykonuje symulacj\u0119 wzrostu grzyb\u00f3w.\nWz\u00f3r logistyczny u\u017cyty w skrypcie pozwala modelowa\u0107 realistyczny wzrost populacji grzyb\u00f3w i mo\u017ce by\u0107 dostosowany dzi\u0119ki zmianie parametr\u00f3w w plikach YAML.\nSkrypt wspiera przetwarzanie wielu plik\u00f3w YAML oraz opcjonalnie przetwarzanie wszystkich plik\u00f3w YAML w podanym folderze.\nZawiera funkcje do generowania wykres\u00f3w, tekstowych definicji graf\u00f3w oraz graficznych reprezentacji graf\u00f3w.\n\n1. **Obs\u0142uga wielu plik\u00f3w YAML**: Pobieranie wielu plik\u00f3w jako argument\u00f3w lub obs\u0142uga folderu zawieraj\u0105cego pliki YAML.\n2. **Parsowanie**: danych i tworzenie struktur\u0119 symulacji**,\n3. **Symulacja**: wzrostu grzyb\u00f3w za pomoc\u0105 r\u00f3wnania logistycznego,\n4. **Wizualizacja wynik\u00f3w**: Generowanie wykres\u00f3w wzrostu biomasy.\n5. **Generowanie tekstowej definicji grafu**: Zapisywanie parametr\u00f3w symulacji i wynik\u00f3w do pliku tekstowego.\n6. **Graficzna reprezentacja grafu**: Tworzenie graf\u00f3w za pomoc\u0105 Graphviz.\n\n\n\n#### Wymagane biblioteki\nAby zapewni\u0107 pe\u0142n\u0105 funkcjonalno\u015b\u0107, nale\u017cy zainstalowa\u0107 nast\u0119puj\u0105ce biblioteki:\n- `yaml`\n- `matplotlib`\n- `graphviz`\n\nMo\u017cna je zainstalowa\u0107 za pomoc\u0105 pip:\n```bash\npip install pyyaml matplotlib graphviz\n```\n\n\n### FungiExperiment1\n\n```bash\npython fungi.py --folder ./11\n```\n\n```py\ndigraph G {\n    node [shape=record];\n    \"Simulation\" [label=\"{Name: FungiExperiment1|Initial Population: 10|Growth Rate: 0.2|Carrying Capacity: 1000|Conditions: time=30, temperature=25, humidity=80|Outputs: Biomass}\"];\n}\n```\n![fungi.dot.png](11/fungi.dot.png)\n![fungi.png](11/fungi.png)\n[fungi.yaml](11/fungi.yaml)\n\n### FungiExperiment2\n\n```bash\npython fungi.py --folder ./11\n```\n\n```py\ndigraph G {\n    node [shape=record];\n    \"Simulation\" [label=\"{Name: FungiExperiment2|Initial Population: 5|Growth Rate: 0.1|Carrying Capacity: 500|Conditions: time=45, temperature=20, humidity=90|Outputs: Biomass}\"];\n}\n```\n[fungi.dot](12/fungi.dot)\n![fungi.dot.png](12/fungi.dot.png)\n![fungi.png](12/fungi.png)\n[fungi.yaml](12/fungi.yaml)\n\n\n---\n\n## Symulacje Physarum\n\nAby zrealizowa\u0107 bardziej z\u0142o\u017con\u0105 symulacj\u0119 wzrostu Physarum polycephalum (slime mold) jako hierarchicznej struktury kom\u00f3rkowej w kontek\u015bcie modeli reakcyjno-dyfuzyjnych, nale\u017cy przeanalizowa\u0107 kilka kluczowych proces\u00f3w. Model reakcyjno-dyfuzyjny umo\u017cliwia symulacj\u0119 jak substancje (np. chemotaksyny) dyfunduj\u0105 oraz jak kom\u00f3rki reaguj\u0105 na te substancje, co prowadzi do wzrostu i formowania wzorca strukturalnego.\n\nTo jest do\u015b\u0107 zaawansowane zadanie, kt\u00f3re mo\u017cna osi\u0105gn\u0105\u0107 przy u\u017cyciu bibliotek takich jak NumPy do oblicze\u0144 oraz Matplotlib do wizualizacji. Do generowania graf\u00f3w hierarchicznych u\u017cyjemy Graphviz.\n\nZa\u0142o\u017cenia:\n1. **Hierarchiczna struktura**: Model Physarum jako siatki kom\u00f3rkowej.\n2. **Model reakcyjno-dyfuzyjny**: U\u017cyjemy prostego r\u00f3wnania reakcyjno-dyfuzyjnego do modelowania rozprzestrzeniania si\u0119 i reakcji chemotaksyn.\n\n### R\u00f3wnanie Reakcyjno-Dyfuzyjne\n\n![obraz](https://github.com/user-attachments/assets/ae15c732-641b-42b1-9300-1236819b09ea)\n\n```latex\n\\[ \\frac{\\partial u}{\\partial t} = D \\nabla^2 u + f(u, v) \\]\n```\n\n\n![obraz](https://github.com/user-attachments/assets/1336ed6f-4508-4c9b-9c9d-e07fa40c1c07)\n```latex\n\\[ \\frac{\\partial v}{\\partial t} = D \\nabla^2 v + g(u, v) \\]\n```\ngdzie:\n- \\( u \\) i \\( v \\) s\u0105 koncentracj\u0105 substancji chemicznych,\n- \\( D \\) jest wsp\u00f3\u0142czynnikiem dyfuzji,\n- \\( f(u, v) \\) oraz \\( g(u, v) \\) s\u0105 funkcjami reakcji.\n\n### Skrypt Python dla Modelu Hierarchicznej Struktury i Wykresu\nSkrypt tworzy hierarchiczn\u0105 struktur\u0119 Physarum jako maszyn\u0119 reakcyjno-dyfuzyjn\u0105, przetwarza wiele plik\u00f3w YAML, a tak\u017ce generuje wizualizacje, tekstow\u0105 definicj\u0119 grafu i jego graficzn\u0105 reprezentacj\u0119. Wszystkie wygenerowane pliki s\u0105 nazwane zgodnie z nazwami plik\u00f3w YAML, ale bez rozszerzenia `.yaml`.\n\n#### Instalacja Wymaganych Bibliotek\n\nNajpierw zainstaluj wymagane biblioteki:\n```bash\npip install numpy matplotlib graphviz\n```\n\n### PhysarumExperiment1\n+ [physarum.yaml](21/physarum.yaml)\n\n```bash\npython physarum.py --folder ./21\n```\n+ [physarum.dot](21/physarum.dot)\n```py\ndigraph G {\n    node [shape=record];\n    \"Simulation\" [label=\"{\n        Name: PhysarumSimulation2 |\n        Grid Size: 101 |\n        Steps: 200 |\n        Diffusion Coefficient: 0.2 |\n        Reaction Rate: 0.02 |\n        k: 0.07 |\n        Initial U Value: 0.2 |\n        Initial V Value: 0.25 |\n        Initial Radius: 1 |\n        Conditions: time=2, temperature=2, humidity=50 |\n        Outputs: u, v\n    }\"];\n}\n```\n![physarum_hierarchy.png](21/physarum_hierarchy.png)\n\n![physarum.dot.png](21/physarum.dot.png)\n\n![physarum.png](21/physarum.png)\n\n### PhysarumExperiment2\n\n+ [physarum.yaml](22/physarum.yaml)\n\n```bash\npython physarum.py --folder ./22\n```\n+ [physarum.dot](22/physarum.dot)\n```py\ndigraph G {\n    node [shape=record];\n    \"Simulation\" [label=\"{\n        Name: PhysarumSimulation2 |\n        Grid Size: 101 |\n        Steps: 200 |\n        Diffusion Coefficient: 0.2 |\n        Reaction Rate: 0.02 |\n        k: 0.07 |\n        Initial U Value: 0.2 |\n        Initial V Value: 0.25 |\n        Initial Radius: 1 |\n        Conditions: time=2, temperature=3, humidity=50 |\n        Outputs: u, v\n    }\"];\n}\n```\n![physarum_hierarchy.png](22/physarum_hierarchy.png)\n\n![physarum.dot.png](22/physarum.dot.png)\n\n![physarum.png](22/physarum.png)\n\n\n\n\n### PhysarumExperiment3\n\n+ [physarum.yaml](23/physarum.yaml)\n\n```bash\npython physarum.py --folder ./23\n```\n+ [physarum.dot](23/physarum.dot)\n```py\ndigraph G {\n    node [shape=record];\n    \"Simulation\" [label=\"{\n        Name: PhysarumSimulation2 |\n        Grid Size: 101 |\n        Steps: 200 |\n        Diffusion Coefficient: 0.2 |\n        Reaction Rate: 0.02 |\n        k: 0.07 |\n        Initial U Value: 0.2 |\n        Initial V Value: 0.25 |\n        Initial Radius: 1 |\n        Conditions: time=3, temperature=3, humidity=50 |\n        Outputs: u, v\n    }\"];\n}\n```\n![physarum_hierarchy.png](23/physarum_hierarchy.png)\n\n![physarum.dot.png](23/physarum.dot.png)\n\n![physarum.png](23/physarum.png)\n\n\n\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=biokomputer/dsl&type=Date)](https://star-history.com/#biokomputer/dsl&Date)\n\n\n## [Contributions](http://contribution.softreck.dev)\n\n[CONTRIBUTION](CONTRIBUTION.md) are always welcome:\n+ did you found an [Issue or Mistake](https://github.com/biokomputer/dsl/issues/new)?\n+ do you want to [improve](https://github.com/biokomputer/dsl/edit/main/README.md) the article?\n+ are you interested do join another [git projects](https://github.com/biokomputer/)?\n+ have something to contribute or discuss? [Open a pull request](https://github.com/biokomputer/dsl/pulls) or [create an issue](https://github.com/biokomputer/dsl/issues).\n\n\n\n## Autor\n\n![obraz](https://github.com/tom-sapletta-com/rynek-pracy-2030-eu/assets/5669657/24abdad9-5aff-4834-95a0-d7215cc6e0bc)\n\n## Tom Sapletta\n\nNa co dzie\u0144 DevOps, ewangelista hipermodularyzacji, ostatnio entuzjasta biocomputing.\n\u0141\u0105czy do\u015bwiadczenie w programowaniu i research-u poprzez wdra\u017canie nowatorskich rozwi\u0105za\u0144. \nSzerokie spektrum zainteresowa\u0144, umiej\u0119tno\u015bci analityczne i do\u015bwiadczenie w bran\u017cy owocuj\u0105 eksperymentalnymi projektami opensource.\n\n+ [Tom Sapletta, Linkedin](https://www.linkedin.com/in/tom-sapletta-com)\n+ [Tom Sapletta, Github](https://github.com/tom-sapletta-com)\n\n\n---\n\n\n\n<script type=\"module\">    \n  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';\n  //import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10.8.0/dist/mermaid.min.js';\n  mermaid.initialize({\n    startOnReady:true,\n    theme: 'forest',\n    flowchart:{\n            useMaxWidth:false,\n            htmlLabels:true\n        }\n  });\n  mermaid.init(undefined, '.language-mermaid');\n</script>\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "BioComp  'Coded Life' to propozycja j\u0119zyka domenowo-specyficznego (DSL) do edukacji i wdra\u017cania biocomputingu",
    "version": "0.2.4",
    "project_urls": {
        "Homepage": "https://www.biokomputer.pl"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "759848429e2e3b3a27b1341e9e0326222fb738957fcff05ae302e0292e30c3d1",
                "md5": "ae072c71fac8dbe6d93e889d60706add",
                "sha256": "073353a878d9b2cf8f5055584bf8e44d3ce0f4cc027b45b71ca35911399326c8"
            },
            "downloads": -1,
            "filename": "biocomp-0.2.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ae072c71fac8dbe6d93e889d60706add",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 18914,
            "upload_time": "2024-10-18T19:17:25",
            "upload_time_iso_8601": "2024-10-18T19:17:25.461815Z",
            "url": "https://files.pythonhosted.org/packages/75/98/48429e2e3b3a27b1341e9e0326222fb738957fcff05ae302e0292e30c3d1/biocomp-0.2.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2f6843120ee6a723d2d6659e441fa3c673287ce75c4ad884672c6745c72d75d2",
                "md5": "7aae88ce1a4bed9ae4dd9241678408c8",
                "sha256": "1ce6cad7d0e9e90a2da9f7d515b1fc9a2e5da8297a15a3c2c2ee827c2b78219f"
            },
            "downloads": -1,
            "filename": "biocomp-0.2.4.tar.gz",
            "has_sig": false,
            "md5_digest": "7aae88ce1a4bed9ae4dd9241678408c8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 22110,
            "upload_time": "2024-10-18T19:17:27",
            "upload_time_iso_8601": "2024-10-18T19:17:27.793591Z",
            "url": "https://files.pythonhosted.org/packages/2f/68/43120ee6a723d2d6659e441fa3c673287ce75c4ad884672c6745c72d75d2/biocomp-0.2.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-18 19:17:27",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "biocomp"
}
        
Elapsed time: 0.29468s