diff --git a/_doc/sphinxdoc/source/conf.py b/_doc/sphinxdoc/source/conf.py
index cd425cbd..a161e665 100644
--- a/_doc/sphinxdoc/source/conf.py
+++ b/_doc/sphinxdoc/source/conf.py
@@ -83,18 +83,32 @@
mathdef_link_only = True
epkg_dictionary.update({
+ 'algorithme': 'https://fr.wikipedia.org/wiki/Algorithme',
+ 'algorithmes numériques':
+ 'http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx3/'
+ 'specials/algorithm_culture.html#catalogue-d-algorithmes',
+ 'algorithmes de tri': 'https://fr.wikipedia.org/wiki/Algorithme_de_tri',
+ 'Anaconda': 'https://www.anaconda.com/',
+ 'Awesome Python': 'https://github.com/vinta/awesome-python',
'C': 'https://fr.wikipedia.org/wiki/C_(langage)',
'C++': 'https://fr.wikipedia.org/wiki/C%2B%2B',
'cython': 'http://cython.org/',
'format': 'https://docs.python.org/3/library/stdtypes.html#str.format',
'joblib': 'https://pythonhosted.org/joblib/',
+ 'jupyter': 'https://jupyter.org/',
'JSON': 'https://fr.wikipedia.org/wiki/JavaScript_Object_Notation',
+ 'Miniconda': 'https://docs.conda.io/en/latest/miniconda.html',
'nan': 'https://docs.scipy.org/doc/numpy/reference/generated/numpy.isnan.html',
'NaN': 'https://docs.scipy.org/doc/numpy/reference/generated/numpy.isnan.html',
'OpenMP': 'https://fr.wikipedia.org/wiki/OpenMP',
+ 'programmation fonctionnelle': 'https://fr.wikipedia.org/wiki/Programmation_fonctionnelle',
+ 'programmation impérative': 'https://fr.wikipedia.org/wiki/Programmation_imp%C3%A9rative',
'protobuf': 'https://developers.google.com/protocol-buffers/',
'pyformat': 'https://pyformat.info/',
+ 'pypi': 'https://pypi.org/',
+ 'Python': 'https://www.python.org/',
'shebang': 'https://fr.wikipedia.org/wiki/Shebang',
'ujson': 'https://github.com/esnme/ultrajson',
'ultrajson': 'https://github.com/esnme/ultrajson',
+ 'Visual Studio Code': 'https://code.visualstudio.com/',
})
diff --git a/_doc/sphinxdoc/source/index.rst b/_doc/sphinxdoc/source/index.rst
index 5da361fb..a3098fd7 100644
--- a/_doc/sphinxdoc/source/index.rst
+++ b/_doc/sphinxdoc/source/index.rst
@@ -8,9 +8,13 @@
Apprendre la programmation avec Python
======================================
-Le site `Python dans tous ses états `_
-est un peu bordélique même si j'essaye d'y apporter un peu d'ordre. Il s'étale. Il déborde un peu ici.
-Le site est aussi disponible en `PDF `_
+Internet est une source quasi-infinie de documents, papiers, bouts de
+code sur beaucoup de sujets mais il faut savoir picorer.
+Ce site se veut plus facile à lire de façon traditionnelle,
+un peu comme un livre. Il s'adresse surtout à ceux qui ne savent
+pas ou eu programmer.
+Il est aussi disponible en
+`PDF `_
(format brut de fonderie) et sur
`GitHub/teachpyx `_ |gitlogo|.
@@ -30,14 +34,12 @@ Le site est aussi disponible en `PDF `_
+contient beaucoup d'exemples sur beaucoup de sujets,
+souvent reliés au machine learning.
.. only:: html
diff --git a/_doc/sphinxdoc/source/introduction.rst b/_doc/sphinxdoc/source/introduction.rst
index d64eadc4..4ba9ecca 100644
--- a/_doc/sphinxdoc/source/introduction.rst
+++ b/_doc/sphinxdoc/source/introduction.rst
@@ -6,13 +6,54 @@ Introduction
Ceci est une relecture du livre que j'ai écrit en 2009
`Programmation avec le langage Python `_
et disponible au format `PDF `_.
-Internet est le média le plus utilisé quant il s'agit d'apprendre à programmer
-et un module Python est plus pratique pour s'assurer qu'un code Python reste valide
-lors du passage à une nouvelle version du langage.
+La transcription du livre sous la forme d'un site web et d'un
+module python a permis d'automatiser la vérification des exemples
+pour assurer que ceux-ci fonctionnent encore avec les dernières
+versions du langage et de ses dépendances.
+
+Installation de Python
+======================
+
+Pour ceux qui débutent, je recommande l'utilisation de la
+distribution :epkg:`Anaconda`. Elle fonctionne sous Windows,
+Linux et MacOS. Pour ceux qui souhaitent réduire la taille
+du premier téléchargement (> 500 Mo), elle existe en version
+allégée :epkg:`Miniconda`. Avec cette distribution, il est quasiment
+possible de tout faire grâce à une interface graphique.
+Comme ce n'est pas la version officielle, cette distribution
+est mise à jour avec quelques semaines ou mois de retard
+par rapport à cette dernière. C'est rarement un problème.
+
+En ce qui me concerne, je préfère la version officielle de :epkg:`Python`.
+Elle est moins gourmande sur le disque mais parfois plus
+difficile à maîtriser lors de l'installation de certaines
+extensions.
+
+Installation d'extensions ou modules ou packages
+================================================
+
+Le langage Python est un langage de programmation qui seul ne permet
+pas de faire grand chose hormis des calculs simples. Heureusement,
+des extensions existent pour le compléter et faire du calcul
+numérique, créer des sites webs, accéder à d'autres applications
+comme Excel. Ces extensions sont partagées sur le site officiel
+:epkg:`pypi`. Elles sont trop nombreuses mais certains sites prennent
+le temps de créer une sorte de florilège : :epkg:`Awesome Python`.
+Pour installer une extension, il suffit de d'écrire sur une ligne
+de commande :
-**Installation**
+::
+
+ pip install
+
+Si vous utilisez la distribution :epkg:`Anaconda` ou :epkg:`Miniconda`,
+il est préférable d'essayer d'abord :
+
+::
-Les exemples de codes sont disponibles sous la forme d'un module python
+ conda install
+
+Les exemples de codes sont d'ailleurs disponibles sous la forme d'un module python
et des :ref:`notebooks ` accessibles sur le site.
::
@@ -21,7 +62,10 @@ et des :ref:`notebooks ` accessibles sur le site.
.. _par_intro_accent_code:
-Le langage :epkg:`python` est conçu pour le monde anglophone
+Accents
+=======
+
+Le langage :epkg:`python` est conçu pour un monde anglophone
et l'utilisation des accents ne va pas de soi.
Le programme suivant qui demande d'afficher un message
contenant un accent provoque l'apparition d'une erreur :
@@ -62,14 +106,117 @@ livre ne fonctionnent pas sans cette première ligne qui a
parfois été enlevée pour des questions
de lisibilité. Il faut penser à l'ajouter pour reproduire
les exemples.
-Sur Internet, on trouve de nombreux exemples commençant
-par la ligne suivante :
+
+L'instruction ``print(...)`` ordonne à l'ordinateur d'afficher
+un message à l'écran. Il n'a aucun impact sur son fonctionnement.
+Elle est beaucoup utilisée pour vérifier que le programme
+fait bien ce qu'il est supposé faire.
+
+Trois concepts, séquence, test, boucle
+======================================
+
+.. index:: séquence, test, boucle
+
+La programmation autre que quantique s'appuient sur trois concepts simples.
+Tout programme est un assemblage souvent complexe de ceux-ci.
+Le premier est la **séquence**. Par défaut, l'ordinateur enchaîne
+les instructions.
+
+::
+
+ a = 1 # affecte 1 à a
+ b = a + 5 # affecte a + 5 à b
+
+`a` et `b` sont des variables. Elles permettent de manipuler
+des informations, ici, des nombres. Les nommer permet d'écrire
+des instructions qui ne dépendent plus des informations auxquelles
+elles sont associées.
+
+Le second concept est le **test**. C'est la capacité de choisir
+une direction plutôt qu'une autre. Le programme suivant compare
+la valeur associée à la variable `a`. Si elle est supérieur
+à 1 alors `b` reçoit la `1 + 5`, sinon `b` reçoit `1 + 6`.
::
- #!/usr/local/bin/python
+ if a > 1:
+ b = 1 + 5
+ else:
+ b = 1 + 6
+
+Le troisième concept est la **boucle**. C'est la capacité de
+répéter la même séquence d'instructions. L'exemple suivant
+répète 10 fois la même instructions qui consiste à ajouter
+deux nombres. Le résultat est la somme des 10 premiers
+entiers.
+
+
+::
-On rencontre souvent cette ligne pour un programme écrit
-sur une machine :epkg:`Linux`, elle indique l'emplacement
-de l'interpréteur :epkg:`python` à utiliser. Cette ligne
-s'appelle un :epkg:`shebang`.
+ a = 0 # initialisation
+ for i in range(1, 11): # pour i allant de 1 à 11 exclu
+ a = a + i # on ajoute i à a
+
+Excepté pour la programmation quantique, ces trois concepts sont identiques
+dans tous les langages relevant de la :epkg:`programmation impérative`
+ou de la :epkg:`programmation fonctionnelle`, soit tous ceux qui existent
+aujourd'hui.
+
+Algorithmes
+===========
+
+Pour simplifier, un :epkg:`algorithme` est un assemblage
+fini de ces trois concepts. On peut se dire que la tâche est
+immense lorsqu'on commence à programmer mais il existe déjà
+de nombreux algorithmes. Le plus souvent,
+un programme réutilise beaucoup de choses existantes, et ajoute
+le peu qui est nécessaire à son auteur pour faire la tâche
+pour laquelle il l'écrit. Il est rare que quelqu'un dans le monde
+entier n'ait pas déjà réfléchi au problème que vous vous posez.
+Le travail consiste d'abord à chercher ce qui existe puis
+de voir les bouts qui manquent pour assembler ce qu'on a trouvé.
+
+Les :epkg:`algorithmes numériques` sont généralement
+ceux qu'on qualifie d'algorithmes. Tout l'enjeu est faire
+des calculs le plus rapidement possibles et pour un grand
+nombres de problèmes, il existe déjà un algorithme optimal,
+pour lequel on sait qu'il n'existe pas de version plus rapide.
+L'algorithme le plus connu est celui du tri, il existe
+d'ailleurs plusieurs :epkg:`algorithmes de tri`.
+On programme plus vite quand on connaît déjà quelques-uns
+de ces algorithmes. Cette culture algorithmique est encore
+rarement abordée à l'école bien que la programmation fasse
+partie du cursus scolaire. Ces algorithmes sont aussi intemporels.
+Ils continueront d'exister jusqu'à la nuit des temps au même
+titre que les mathématiques.
+
+Les autres algorithmes couvrent tous les autres besoins,
+comme ceux d'accéder à une ressource comme internet, une
+base de données, un serveur de mail, une autre application
+comme Excel. Cette partie évolue rapidement. Il n'est pas rare
+d'en réécrire une partie tous les cinq ou dix ans parce qu'un
+outil a changé comme une base de données, la sécurité a changé,
+l'endroit où les données sont stockées...
+
+La suite du site se lit en diagonale ou en rang serré selon vos
+connaissances actuelles, selon que vous connaissez déjà un
+autre langage de programmation. Et il faut pratiquer.
+
+Fichier ou notebook
+===================
+
+Il faut bien écrire son programme quelque part. Il exite deux options.
+La première est d'écrire son programme dans un fichier texte
+qui doit obligatoirement avoir l'extension ``.py``. On peut ensuite
+l'exécuter avec l'instruction en ligne de commande
+``python ``. Il est recommandé d'utiliser
+un éditeur de texte dédié à cet usage. Le plus utilisé est
+:epkg:`Visual Studio Code`.
+
+La seconde option est un notebook. Cette façon de travailler
+nécessite l'installation de :epkg:`jupyter`. C'est plus facile
+quand on commence. Ce support vise principalement les chercheurs
+qui peuvent de cette façon avoir dans un même document
+du code, des sorties de code, du texte, des formules, des graphiques.
+C'est déconseillé dès qu'on doit utiliser un programme pour automatiser
+une tâche.