abrviz
Installation
pip3 install abrviz
Exemple 0
Code
from abrviz import Arbre, Noeud
valeurs = [3, 4, 7, 9, 5, 8, 1, 0, 6, 2]
noeuds = [Noeud(i) for i in valeurs]
a = Arbre()
for n in noeuds:
a.inserer(n)
texte = f"""Affichage imbriquée :
{a}
Hauteur : {a.hauteur()}
Taille : {len(a)}
Les parcours fournissent des listes d'objets :
Parcours en largeur : {a.largeur}
Pour obtenir les clés, on demande les valeurs :
Parcours en largeur : {[n.valeur for n in a.largeur]}
Parcours prefixe : {[n.valeur for n in a.prefixe]}
Parcours infixe : {[n.valeur for n in a.infixe]}
Parcours suffixe : {[n.valeur for n in a.suffixe]}
Une liste 'complète' en largeur peut être obtenue :
{[n if not n else n.valeur for n in a.liste_aplatie()]}
Recherche du noeud de clé 5 :
le noeud : {a.rechercher(5).__repr__()}
son arborescence : {a.rechercher(5)}
sa valeur : {a.rechercher(5).valeur}
son contenu (éventuellement transporté dans sa structure) : \
{a.rechercher(5).contenu}
le chemin qui y mène : {[n.valeur for n in a.chemin_vers(a.rechercher(5))]}
Si on connaît une référence vers le noeud, on peut l'utiliser.
le noeud de clé 5 est le 4ème de la liste noeuds : \
{noeuds[4]}
"""
print(texte)
a.supprimer(noeuds[0])
texte = f"""Nouveau parcours en largeur après suppression de la racine :
{[n.valeur for n in a.largeur]}
"""
print(texte)
Sortie console
Affichage imbriquée :
(((None -- 0 -- None) -- 1 -- (None -- 2 -- None)) -- 3 -- (None -- 4 -- ((None -- 5 -- (None -- 6 -- None)) -- 7 -- ((None -- 8 -- None) -- 9 -- None))))
Hauteur : 5
Taille : 10
Les parcours fournissent des listes d'objets :
Parcours en largeur : [<abrviz.abrviz.Noeud object at 0x7fec0c283eb0>, <abrviz.abrviz.Noeud object at 0x7fec0c283880>, <abrviz.abrviz.Noeud object at 0x7fec0c283f10>, <abrviz.abrviz.Noeud object at 0x7fec0c38c0d0>, <abrviz.abrviz.Noeud object at 0x7fec0c14da90>, <abrviz.abrviz.Noeud object at 0x7fec0c283f40>, <abrviz.abrviz.Noeud object at 0x7fec0c283fa0>, <abrviz.abrviz.Noeud object at 0x7fec0c283d30>, <abrviz.abrviz.Noeud object at 0x7fec0c14d760>, <abrviz.abrviz.Noeud object at 0x7fec0c283c70>]
Pour obtenir les clés, on demande les valeurs :
Parcours en largeur : [3, 1, 4, 0, 2, 7, 5, 9, 6, 8]
Parcours prefixe : [3, 1, 0, 2, 4, 7, 5, 6, 9, 8]
Parcours infixe : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Parcours suffixe : [0, 2, 1, 6, 5, 8, 9, 7, 4, 3]
Une liste 'complète' en largeur peut être obtenue :
[3, 1, 4, 0, 2, None, 7, None, None, None, None, None, None, 5, 9, None, None, None, None, None, None, None, None, None, None, None, None, None, 6, 8]
Recherche du noeud de clé 5 :
le noeud : <abrviz.abrviz.Noeud object at 0x7fec0c283fa0>
son arborescence : (None -- 5 -- (None -- 6 -- None))
sa valeur : 5
son contenu (éventuellement transporté dans sa structure) : None
le chemin qui y mène : [3, 4, 7, 5]
Si on connaît une référence vers le noeud, on peut l'utiliser.
le noeud de clé 5 est le 4ème de la liste noeuds : (None -- 5 -- (None -- 6 -- None))
Nouveau parcours en largeur après suppression de la racine :
[2, 1, 4, 0, 7, 5, 9, 6, 8]
Exemple 1
Code
from abrviz import Arbre, Noeud
a = Arbre()
liste = [Noeud(i) for i in [3, 2, 1, 5, 4, 6]]
for i in liste:
a.inserer(i)
# on visualise l'arbre
a.sortie(a.racine, "exemple1_0", "png")
# on demande une visualisation en arbre binaire complet : un peu
# plus d'espace dans la dernière ligne
a.sortie(a.racine, "exemple1_1", "png", style="complet")
# on demande une visualisation à partir du 2ème noeud rentré
a.sortie(liste[1], "exemple1_2", "png")
# on supprime la racine puis on visualise le nouvel arbre en pdf
a.supprimer(liste[0])
a.sortie(a.racine, "exemple1_3", "pdf")
Sortie Images
Exemple 2
Code
from abrviz import Arbre, Noeud
import random
liste = list(range(15))
random.shuffle(liste)
a = Arbre()
for e in liste:
a.inserer(Noeud(e))
# Visualisation de l'arbre
mon_noeud = a.racine
a.sortie(mon_noeud, "exemple2_0", "png")
# on peut demander une version "complète" avec les noeuds
# invisibles d'un arbre binaire complet : l'apparence est très
# large
a.sortie(mon_noeud, "exemple2_1", "png", style="complet")
# s'il y a un sous-arbre gauche, on le visualise
if mon_noeud.gauche is not None:
a.sortie(mon_noeud.gauche, "exemple2_2", "png")
Sortie Images
Exemple 3
Code
from abrviz import Arbre, Noeud
import random
liste = list(range(20))
random.shuffle(liste)
a = Arbre()
# on change la fonction de la relation d'ordre
a.fonction_ordre = lambda x, y: str(x.valeur) < str(y.valeur)
for e in liste:
a.inserer(Noeud(e))
a.sortie(a.racine, "exemple3_0", "png")
# on change le style
Arbre.options('node', {"style": "filled"})
Arbre.options('edge', {"arrowhead": "diamond", "arrowsize": "1"})
a.sortie(a.racine, "exemple3_1", "png")
# les flèches se courbent
Arbre.options('graph', {"splines": "true"})
a.sortie(a.racine, "exemple3_2", "png")
Sortie Images
Exemple 4
Code
from abrviz import Arbre, Noeud
# dictionnaire, les valeurs seront les clés de l'arbre
dico_contenu = {"abricot": 2, "poire": 5, "pomme": 1, "ananas": 7, "kiwi": 0}
a = Arbre()
for k in dico_contenu:
a.inserer(Noeud(dico_contenu[k], k))
# les noeuds montreront le contenu du noeud et non la clé ("valeur")
Arbre.etiquette = "contenu"
a.sortie(a.racine, "exemple4_0", "png")
# pour visualiser un mix des deux (clés et valeurs du dictionnaire)
# on redéfinit l'arbre et les noeuds :
a = Arbre()
for k in dico_contenu:
noeud = Noeud(dico_contenu[k])
# le contenu du noeud reprend les données complètes du dictionnaire
noeud.contenu = f"{k} ({dico_contenu[k]})"
a.inserer(noeud)
Arbre.etiquette = "contenu"
a.sortie(a.racine, "exemple4_1", "png")
Sortie Images
Exemple 5
Code
from abrviz import Arbre, Noeud
liste = [2, 3, 6, 0, 4, 5, 1]
liste_noeuds = [Noeud(i) for i in liste]
a = Arbre()
for e in liste_noeuds:
a.inserer(e)
# On peut effectuer des mouvements de rotation à droite ou à gauche
# L'arbre reste un ABR
a.sortie(a.racine, "exemple5_0", "png")
# le noeud "racine" du changement est passé en argument
a.rotation_gauche(a.rechercher(2))
a.sortie(a.racine, "exemple5_1", "png")
# on peut alors équilibrer l'arbre
a.rotation_gauche(a.rechercher(0))
a.rotation_droite(a.rechercher(2))
a.rotation_gauche(a.rechercher(4))
a.rotation_droite(a.rechercher(6))
a.sortie(a.racine, "exemple5_2", "png")
Sortie Images
Licence
CC-BY-NC-SA
Metadata
Release files for abrviz 0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| abrviz-0.3.tar.gz | 193.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| abrviz-0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 200.2 kB
Release files / abrviz-0.3.tar.gz
| Download URL | abrviz-0.3.tar.gz |
|---|---|
| Size | 193.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e622a1600b323033c4d18ec0d3cdd7c177ce931e7111fc03cf0cbda22a013c07
|
|
BLAKE2b-256 checksum How to use checksums |
03d99ba10c1313243b7b4f3ffd42e628fedb3c4302faac62f1564441df4dd7bd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.1
|
Release files / abrviz-0.3-py3-none-any.whl
| Download URL | abrviz-0.3-py3-none-any.whl |
|---|---|
| Size | 7.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f7f5b56bb839ca1b55f227839249c1b7a9e29385b03111aa34a2629977a2f08e
|
|
BLAKE2b-256 checksum How to use checksums |
2520099d50e9ded48cd410542ba03e0ce43d98c0ecbafd4f2cd283c56e5bd3f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.1
|
Security for abrviz 0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.