<jupyter_start><jupyter_text>Vamos a usar %timeit para comparar la velocidad de ejecuión de la versión simple de `fib` con la fórmula de Binet<jupyter_code>import math

SQRT5 = math.sqrt(5)
PHI = (1 + SQRT5) / 2

def fibbn(n):
    """Fibonacci number, Binet's formula"""
    return round((PHI**n - (1-PHI)**n)/SQRT5)
%timeit fibbn(20)
%timeit fib(20)<jupyter_output><empty_output><jupyter_text>Podemos llamar a comandos del sistema y alamacenar los resultados en variables<jupyter_code>files = !ls
%sx ls
%%bash

echo $DISPLAY<jupyter_output><empty_output><jupyter_text>Algunos paquetes proporcionan comandos mágicos adicionales.Instalamos Cython para poder escribir directamente cython en las celdas y rpy2 para escribir R.rpy2 permite además comunicar datos entre Python y R.<jupyter_code>%pip install Cython
# %conda install Cython
# Cargando un "cell magic" proprocionado por Cython
%load_ext Cython
%%cython
def fibcy(int n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    return fibcy(n-1) + fibcy(n-2)
%timeit fibcy(20)
%pip install rpy2
%load_ext rpy2.ipython
%%R

fibr <- function(n) {
  if (n == 1) {  
    return(0)
  }
  else if(n == 2) {
    return(1)
  }
  else if(n > 2) {
    return(fibr(n - 1) + fibr(n - 2))
  }
}

fibr(20)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11455108359133127, 'fraction_numerical': 0.02476780185758514, 'mean_word_length': 4.192771084337349, 'pattern_counts': {'":': 0, '<': 14, '<?xml version=': 0, '>': 14, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '568710', 'license': 'BSD-3-Clause', 'n_tokens_mistral': 552, 'n_tokens_neox': 524, 'n_words': 142, 'path': 'cuadernos/Magics.ipynb', 'repo_name': 'sergiopasra/taller-jupyter', 'size': '1292'}