make generated plot HTML reproducible
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 18.8k
- Forks
- 2.8k
- Merge moyen
- 16 h 26 min
- PR mergées (30 j)
- 21
Description
The HTML/js contains UUIDs generated by python's built-in uuid.uuid4. By nature, those are unique and totally random.
But if you generate documents as part of a pipeline (e.g. via https://dvc.org/ ) then it would be great to have them reproducible down to the byte.
import plotly.express as px
fig =px.scatter(x=range(10), y=range(10))
fig.write_html("file1.html")
fig.write_html("file2.html")
The files will be identical except from the UUIDs.
I "solved" this problem by monkey-patching the relevant function:
# monkey patch
import uuid
import random
uuid4_rnd = random.Random(0)
def uuid4_seeded():
"""Generate a random UUID using random.Random"""
return uuid.UUID(bytes=uuid4_rnd.randbytes(16), version=4)
uuid.uuid4 = uuid4_seeded
fig =px.scatter(x=range(10), y=range(10))
fig.write_html("file.html")
re-executing this snippet will produce identical files.
It would be great to exchange one function (or set a seed for an internal version of uuid) in plotly instead of hijacking the python built-in.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par le point d’entrée fig.write_html et suivez les endroits où les UUID sont insérés dans le HTML/JavaScript généré. Comparez plusieurs écritures de la figure d’exemple et déterminez comment Plotly devrait exposer la génération déterministe des UUID ou l’initialisation d’une seed. C’est terminé lorsque des fichiers HTML identiques octet par octet peuvent être générés sans faire de monkey-patching de uuid.uuid4 de Python.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- data-visualization
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100