# IPython

IPython (de l'anglès Interactive Python, Python Interactiu) és un intèrpret d'ordres interactiu que afegeix funcionalitats addicionals a la manera interactiva d'interactuar amb Python, com per exemple el ressaltat de línies i d'errors mitjançant colors, una sintaxi addicional per a l'intèrpret d'ordres i autocompleció mitjançant un tabulador de variables, mòduls i atributs, entre altres funcionalitats. És un component del paquet SciPy.

## Història

IPython és un intèrpret de comandes per al llenguatge de programació Python, on s'ha potenciat la component iterativa (d'aquí la lletra I). IPython és software lliure desenvolupat per múltiples programadors, destacant Fernando Pérez de la Universitat de Berkeley (California, EUA).
IPython, tal com el coneixem avui, va sorgir dels tres projectes següents:
* IPython va començar com a resultat del desig de Fernando Pérez de coses com les indicacions de l'estil de Mathematica, l'accés a resultats anteriors (novament com el % de sintaxi de Mathematica) i un sistema de configuració flexible.
* IPP de Janko Hauser. Molt ben organitzat, gran usabilitat. Tenia un antic sistema d'ajuda. L'IPP es va utilitzar com a codi "contenidor" al qual Fernando va afegir la funcionalitat d'IPython i LazyPython.
* LazyPython de Nathan Gray. Senzill però molt potent, D'aquí es va agafar la sintaxi ràpida (parèntesis automàtics, cometes automàtiques, etc.) i traçades detallades de colors es van agafar d'aquí.
Fernando Pérez descriu la història d'IPython com:
"Quan vaig conèixer IPP i LazyPython vaig intentar unir els tres en un sistema unificat. Vaig pensar que això podria proporcionar un entorn de treball molt bonic, tant per la programació regular com per a la computació científica: funcions similars a les closques, numèrics IDL / Matlab, historial ràpid del tipus Mathematica i gran facilitat d'introspecció i ajuda. Crec que va funcionar raonablement bé, tot i que era molta més feina de la que tenia previst inicialment".

## Computació en paral·lel

IPython es basa en una arquitectura que subministra computació distribuïda i en paral·lel. IPython permet l'execució d'aplicacions en paral·lel, deixant a aquestes desenvolupar-se, executar-se, depurar-se i ser monitorades interactivament. L'arquitectura abstreu situacions en paral·lel, cosa que permet a IPython donar suport a múltiples tipus de computació en paral·lel. Entre aquests s'inclouen:
* Paral·lelisme SPMD (Single Program, Multiple Data).
* Paral·lelisme MIMD (Multiple Program, Multiple Data).
* Message Passing utilitzant MPI.
* Task Parallelism o paral·lelisme de tasques.
* Data Parallelism o paral·lelisme de dades.
* Combinació de les anteriors.
* Protocols personalitzats.
Amb el llançament d' IPython 4.0, les capacitats de paral·lelització varen passar a ser optatives sota la sortida d'un paquet de Python ipyparallel.
Amb freqüència es basa en biblioteques de la “Scipy Stack" com Numpy i Scipy. IPython proporciona integracions amb algunes biblioteques de “Scipy Stack”, com per exemple matplotlib, produint gràfics en línia quan s'utilitza amb el Jupyter Notebook.

## Projecte Jupyter

L'any 2014 Fernando Pérez anuncià el projecte ‘spin-off’ Projecte Jupyter. En aquest projecte IPython serveix com a intèrpret o ‘shell' sota Jupyter però l'interfície i altres parts del llenguatge fou sobreescrites sota el nom de Jupyter. El nom és un acrònim dels llenguatges Julia, Python i R, tots tres llenguatges interpretats amb suport a Jupyter.
Jupyter Notebook és un entorn interactiu basat en web per crear, executar, i visualitzar codi interpretat amb IPython.
És similar a altres entorns a altres interfícies ‘notebook’ com les de Mapple, Mathematica o SageMath; un estil d'entorn originat als anys vuitanta. Dona suport a entorns d'execució (kernels) en diversos llenguatges però per defecte s'utilitza IPython com a kernel.

## Altres característiques

A més, IPython inclou una versió en GNU/Linux per a ser executat en X i usant la biblioteca WX. En l'ús de biblioteques d'interfície gràfica d'usuari, l'IPython no permet el bloqueig en la interacció amb Tkinter, GTK+, Qt ni WX; solament permet la interacció amb Tkinter. L'IPython pot gestionar de forma interactiva l'ús en paral·lel de diversos clústers. També es pot utilitzar per a reemplaçar l'intèrpret d'ordres de sistema gràcies a la flexibilitat d'ús i la capacitat de modificar-lo que permet el seu arxiu de configuració, especialment en Windows. L'IPython recorda un intèrpret d'ordres Unix i, fins i tot, permet utilitzar ordres Bash durant el seu ús per a, per exemple, canviar de directori de treball.
IPython no només permet executar directament codi Python i depurar-lo, també, des del mateix intèrpret podrem executar qualsevol comanda del sistema operatiu o scripts escrits en altres llenguatges (Bash, Perl, Ruby, etc.), sense necessitat d'iniciar altres consoles.

## Notebook

El quadern estén l'enfocament basat en consoles a la informàtica interactiva en una direcció qualitativament nova, proporcionant una aplicació basada en web adequada per capturar tot el procés de càlcul: desenvolupar, documentar i executar codi, així com comunicar els resultats. IPython Notebook combina dos components:
* Una aplicació web: una eina basada en un navegador per l'autorització interactiva de documents que combinen text explicatiu, càlculs i la seva rica producció multimèdia.
** Característiques principals:
*** Edició al navegador de codi, amb ressaltat automàtic de sintaxi, sagnat i finalització / introspecció de pestanyes
*** La possibilitat d'executar codi des del navegador, amb els resultats de les computacions adjuntes al codi que els ha generat.
*** Es mostra el resultat de la computació amb representacions multimèdia riques, com ara HTML, LaTeX, PNG, SVG, etc.
* Documents del notebook: una representació de tot el contingut visible a l'aplicació, incloent-hi: entrades i sortides de les computacions, text explicatiu, matemàtiques, imatges i representacions en suports rics d'objectes. Els documents de notebook contenen les entrades i sortides d'una sessió interactiva, així com un text addicional que acompanya el codi però no està pensat per a l'execució. D'aquesta manera, els fitxers de quaderns poden servir com a registre informàtic complet d'una sessió, entrellaçant codi executable amb text explicatiu, matemàtiques i representacions riques d'objectes resultants. Aquests documents són fitxers JSON interns i es desen amb l'ipyn extensió. Com que JSON és un format de text senzill, es poden controlar en versió i compartir-los amb els companys. El notebook es pot exportar a diversos formats estàtics, HTML, LaTeX, PDF, etc., mitjançant la nova comanda nbconvert.

## Fi de la compatibilitat amb Python 2

Les versions IPython 5.x, anomenades Long Term Support (LTS) o suport a llarg termini, seran les últimes versions d'IPython amb suport per Python 2. El projecte d'IPython es va comprometre a no donar suport a Python 2 més enllà del 2020 sent un dels primers projectes a adscriure-se’n a la declaració de Python 3. Les versions més enllà de les 6.x són sols compatible amb Python 3 o superior.

## En els mitjans de comunicació

L'IPython ha tingut repercussió en la premsa especialitzada de l'àmbit informàtic, i se'n parla en conferències del món científic. Se'l considera una eina per al treball científic i freqüentment s'ha presentat conjuntament amb Matplotlib.

## Ajuts i reconeixements

L'1 de gener de 2013, l'Alfred P. Sloan Foundation va anunciar que donaria suport al desenvolupament d'IPython durant els següents dos anys.
El 23 de març de 2013, Fernando Pérez va estar guardonat amb el premi Free Software Foundation Advancement of Free Software per IPython.
L'agost de 2013, Microsoft va fer una donació de 100.000 dòlars per patrocinar el desenvolupament continuat d'IPython.
El gener de 2014, va guanyar el premi Jolt Productivity Award del Dr. Dobb's en la categoria d'eines de codificació.
El juliol de 2015, el projecte va obtenir un finançament de 6 milions de dòlars de la Gordon and Betty Moore Foundation, Alfred P. Sloan Foundation i Leona M. i Harry B. Helmsley Charitable Trust.
El maig de 2018, va ser guardonat amb el premi ACM Software System Award 2017. L'equip d'IPython és l'equip amb més membres en haver guanyat el premi.

## Referències

* ↑ Cabrera, Díaz, Calderón, Melle, Domínguez-Adame, Ezquerro, D´ıaz «Manual de uso de IPython Notebook para docentes». Manual de uso de IPython Notebook para docentes, 2013, pàg. 67.
* ↑ «History — IPython 7.13.0 documentation». [Consulta: 20 març 2020].
* ↑ Team, IPython Development. «ipyparallel: Interactive Parallel Computing with IPython». [Consulta: 20 març 2020].
* 1 2 «Installation — SciPy.org». [Consulta: 20 març 2020].
* ↑ «Project Jupyter» (en anglès). [Consulta: 20 març 2020].
* ↑ «ipython/ipython», 20-03-2020. [Consulta: 20 març 2020].
* ↑ Jupyter, Project. «The Big Split™» (en anglès), 28-08-2017. [Consulta: 20 març 2020].
* ↑ «jupyter/design» (en anglès). [Consulta: 20 març 2020].
* ↑ Somers, Story by James «The Scientific Paper Is Obsolete». The Atlantic. ISSN: 1072-7825.
* ↑ «The IPython Notebook — IPython 3.2.1 documentation». [Consulta: 20 març 2020].
* ↑ Jupyter, Project. «Release of IPython 5.0» (en anglès), 28-08-2017. [Consulta: 20 març 2020].
* ↑ Conrad Koziol (September 12, 2005). "Introducing IPython". NewsForge.
* ↑ «About/Presentations - IPython». Arxivat de l'original el 2010-02-05. [Consulta: 12 agost 2014].
* ↑ Shen, Helen «Interactive notebooks: Sharing the code». Nature, 515, 7525, 06-11-2014, pàg. 151–152. DOI: 10.1038/515151a.
* ↑ IPython: A System for Interactive Scientific Computing.
* ↑ «"Announcement in scipy mailing list"». Arxivat de l'original el 2016-03-05. [Consulta: 20 març 2020].
* ↑ «"IPython announcement"».
* ↑ «"Jolt Productivity Award write-up in Dr. Dobb's"».
* ↑ «"$6M for UC Berkeley and Cal Poly to expand and enhance open-source software for scientific computing and data science"».
* ↑ «"Recent Software System Award News"».
* ↑ «"Jupyter receives the ACM Software System Award"».

## Enllaços externs

* Lloc web d'IPython