%lsmagic

%ls

%pwd

# Konfiguracja zakładek do folderów
%bookmark -l
%bookmark my_pwd
%bookmark -l
%cd my_pwd

print(4)
print(5)

%macro foo #n1-n2 n1 n2

%store foo

"""
Explanation: Instalacja
* pip install ipython
* Z strony internetowej: https://www.anaconda.com/distribution/#windows
Ciekawostki:
* https://orgmode.org/
ipython profile create andrzejkrawczyk
stworzenie własnego profilu z konfiguracją
ipython --profile andrzejkrawczyk
Miejsce skryptów konfiguracyjnych

Windows: u'C:\Users\akrawczyk\.ipython\profile_andrzejkrawczyk\ipython_config.py'
Linux: "~/.ipython/"

Do modyfikacji konfiguracji jest potrzebne pobranie konfiguracji, dodajemy na starcie pliku:

c = get_config()

konfiguracja zapamiętywania aliasów / makr / zmiennych przez %store <nazwa>
c.StoreMagics.autorestore = False 
Auto uzupełnianie nawiasów i uruchamianie obiektów callable
np. def foo(x): print(x)  
foo 5 -> #5  
0 - wyłącz
1 - 'smart' - tylko jak są argumenty uruchom call
2 - force call  
c.InteractiveShell.autocall = 1
Ustawia możliwość uruchamiania magicznych komend bez %
c.InteractiveShell.automagic = True
Ustawienie koloru shella opcje: (NoColor, Neutral, Linux, or LightBG)
c.InteractiveShell.colors = 'Neutral'
Ustawienie edytora plików
c.TerminalInteractiveShell.editor = 'C:\Program Files\Notepad++\notepad++.exe'
Wykonanie wskazanych linii na start shell'a
c.InteractiveShellApp.exec_lines = ["import sys", "import os"]

Folder startup w config - ładowanie skryptów przy uruchomieniu.
Można pisać skrypty .py / .ipy
Skrypty ładowane w kolejności leksykograficznej.
End of explanation
"""


%alias whole_line echo "%l"
%whole_line ala ma kota

%alias params_echo echo ala ma %s a tomek ma %s a zuzia ma %s
%params_echo psa kota zyrafe

dane = !dir
print(dane)

dane = "Ala ma kota"
!echo $dane

!echo $$

from IPython.core.magic import register_line_magic

@register_line_magic
def my_custom_quadratic(line):
    print(int(line) ** 2)
del my_custom_quadratic

%my_custom_quadratic 4

def foo(a, b): # foo("5", "6")
    print(a, b)
    print(type(a), type(b))

,foo 5, 6 

def foo(a, b=None): # foo("5 6")
    print(a, b)
    print(type(a), type(b))

;foo 5, 6 

%hist -n

%hist -g

%hist -o -g -f ipython_history.md

%save example.py <zakres>

%reset

%paste

%timeit [x for x in range(10000)]

%%timeit L = []
for x in range(10000):
    L.append(x**x)
L = L[:int(len(L) / 2)]

"""
Explanation: Alias na komendę systemową z powłoki
alias
End of explanation
"""


