Automatizce ve fyzice: Notebooky

Author

Petr Čermák

Published

October 17, 2024

Úvod

Cíl hodiny

In the year 2525

if man is still alive
If woman can survive,
they may find… your data

. . .

and check your nfpl242 homework

. . .

and evaluate all your measurements

Pythoní okénko

Mrožík

Co udělají následující příkazy?

print(a)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[13], line 1
----> 1 print(a)

NameError: name 'a' is not defined
a = None
print(a)
None
print(a = 1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[15], line 1
----> 1 print(a = 1)

TypeError: 'a' is an invalid keyword argument for print()
print(a == 1)
False
print(a := 1)
1

Mrožík

Operátor přířazení a vrácení hodnoty, walrus, mrož:

:= 🦭

Mrožík

line = file1.readline()
while line:
    print(f"Line: {line}")
    line = file1.readline()

. . .

while True:
    line = file1.readline()
    if not line:
        break
    print(f"Line: {line}")

. . .

while line := file1.readline():
    print(f"Line: {line}")

. . .

for line in file1:
    print(f"Line: {line}")

f-string

  • vkládání hodnot do textu a jejich formátování
  • tři historické možnosti
    • modulo operátor
    • str.format
    • f-string

f-string

Modulo operátor

from random import choice
name = "Erwin"
cat_alive = choice(["žije", "nežije"])

print("Tohle je %s, jeho kočka %s" % (name, cat_alive))
Tohle je Erwin, jeho kočka nežije

f-string

str.format

from random import choice
name = "Erwin"
cat_alive = choice(["žije", "nežije"])

print("Kočka %s, chudák %s" % (name, cat_alive))
print("Kočka {1}, chudák {0}".format(name, cat_alive))
Kočka Erwin, chudák žije
Kočka žije, chudák Erwin

f-string

f-string

from random import choice
name = "Erwin"

print(f"{name}ova kočka {choice(['žije', 'nežije'])}")
Erwinova kočka nežije

f-string

Ladění

name = "Erwin"
print(f"{name = }")
name = 'Erwin'

Problémy

from random import choice
print(f"Házím {choice(["pana", "orel"])}")
Házím pana

Jen do verze Python 3.11

f-string

  • nový PEG parser
  • stejné uvozovky, lomítka, komentáře
  • lepší errory
## Python 3.12

f"{
    f"{
        f"{
            f"{
                f"{
                    f"To se\nhodí!"
                }"
            }"
        }"   ## navíc můžu komentovat
    }"
}"

Užitečné knihovny

Regexp

Teorie: NTIN071 Automaty a gramatiky

Praxe: NSWI177 Úvod do Linuxu

Fyzik: to bude něco na parsování…

regex101.com

Pandas

  • dataseries (ds)
    • 1D pole objektů stejných typů
    • má jeden index (popisek)
  • dataframe (df)
    • 2D tabulka, obsahuje ds
    • má dva indexa (sloupce, řádky)
  • pd.read_csv() - mocná funkce
  • df.plot() - matplotlib, ale i jíné (plotly)

Reprodukovatelnost

Virtual environment

  • venv
py -m venv .venv
env\Scripts\activate.bat  
source env/bin/activate
pip freeze > requirements.txt
  • anaconda
conda create --prefix env python
conda activate .\env
conda env export > environment.yml
  • renv
install.packages("renv")
renv::init()
renv::snapshot()

Notebooky

iPython: Interactive python

Co to je?

  • Interaktivní python shell
  • Jde se na něj připojit z klienta (web, vscode)
  • Auto-completion, interakce s shellem
  • různé backendy (cloud)

Mimo python příkazy

  • line magic %timeit, %matplotlib, %run
  • cell magic %%timeit
  • interakce se shellem !

iPython: příklady

files = !dir /b /a-d  #windows
files = !ls           #linux
print(files)

web = "mff.cuni.cz"
!ping -c 1 $web
["'ls' is not recognized as an internal or external command,", 'operable program or batch file.']
Access denied. Option -c requires administrative privileges.
%timeit range(5000)
158 ns ± 14.9 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)

iPython qtConsole

  • interaktivní klienta
  • pořád vypadá jako příkazová řádka
  • grafy!!
  • neumožňuje editaci předchozích cell

jupyter qtconsole

Jupyter, JupyterLab

  • webová aplikace, nejen python (JUlia, PYThon, R)
  • Latex, video, tlačítka

jupyter notebook

Jupyter: problémy

.ipynb je binární (obsahuje i výsledky)

Výhody

  • jde prohlížet bez pythonu
  • integrace v githubu
  • interní verzování (revisions)
  • přístup z webového prohlížeče

Nevýhody

  • nemusí jít znovu spustit (smazaná cela)
  • nejde verzovat v gitu
  • přístup z webového prohlížeče

VSCode: Jupyter

  • není webový prohlížeče
  • linting, etc.
  • search engine, snippets…
  • debugger
  • zabudovaný git
    • ale - > stále ipynb
    • řešení: export do .py souboru
    • trochu nešťastné
  • využití .py a syntaxe cell:
    • # %%
    • nevhodné formátování
    • podpora markdown

rMarkdown

formát dokumentace a zpracování textu, spojuje text s kódem (nejen v R)

Výhody

  • Hezké formátování
  • plain text –> verzování (Git)
  • různé výstupy (HTML, PDF, ale i presentace, dashboardy…)
  • kombinování jazyků

Nevýhody

  • hodně zaměřeno na r
  • python řešen přes reticulate
  • chybí iPython engine
  • pomalé

quarto

  • Ultimate solution
  • kombinace všeho co fyzik potřebuje
  • výborná integrace do vscode (run cell)
  • cachování, live preview
  • visual mode
  • více na cvičení
image: registry.gitlab.com/quarto-forge/docker/python

pages:
  script:
    - quarto render --execute --to html --output-dir public
  artifacts:
    paths:
      - public

Úkol #0 - bonus

Zadání

  • Mějme obecný nekonvexní n-úhelník
  • Hypotéza:

Pro zadané m existuje takový obecný m-úhelník, který je n-úhelníku opsaný a jehož plocha je nejmenší možná.

  • Dokažte :D
  • Napište algoritmus pro nalezení tohoto n-úhelníku pro n=<3,10>
  • Testovací data: shapes.py