Automatizce ve fyzice: Notebooky

Petr Čermák

2024-10-17

Ú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[1], 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[3], 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 nežije
Kočka než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 ž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)
156 ns ± 2.48 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