pbugnion / gmaps

Google maps for Jupyter notebooks
https://jupyter-gmaps.readthedocs.io/en/stable/
Other
760 stars 146 forks source link

Possible bug in gmaps or ipywidgets.embed.embed_minimal_html #357

Open ghost opened 2 years ago

ghost commented 2 years ago

During the generation of multiple heatmaps at the same location, I noticed the generated html files keep increasing in size without an equivalent increase in the volume at a given map. Here are the resulting file sizes when I generate the same map with the same data for 200 times:

import os
import shutil
import tempfile
from pathlib import Path

import gmaps
import numpy as np
from ipywidgets.embed import embed_minimal_html

tmp = tempfile.mkdtemp()
coordinates = np.random.randint(10, 50, (50, 2)).astype('float64')
for i in range(200):
    center = 20, 30
    fig = gmaps.figure(center=center, zoom_level=10)
    heatmap_layer = gmaps.heatmap_layer(coordinates)
    heatmap_layer.max_intensity = 100
    heatmap_layer.point_radius = 5
    fig.add_layer(heatmap_layer)
    p = Path(tmp) / f'{i}.html'
    embed_minimal_html(p.as_posix(), views=[fig])
    print(f'Current: {p.name}: {os.path.getsize(p.as_posix()) / 1024 ** 2} MB')
shutil.rmtree(tmp)

Result:

Current: 0.html: 0.01 MB
Current: 1.html: 0.01 MB
Current: 2.html: 0.02 MB
Current: 3.html: 0.02 MB
Current: 4.html: 0.03 MB
Current: 5.html: 0.04 MB
Current: 6.html: 0.04 MB
Current: 7.html: 0.05 MB
Current: 8.html: 0.05 MB
Current: 9.html: 0.06 MB
Current: 10.html: 0.07 MB
Current: 11.html: 0.07 MB
Current: 12.html: 0.08 MB
Current: 13.html: 0.08 MB
Current: 14.html: 0.09 MB
Current: 15.html: 0.1 MB
Current: 16.html: 0.1 MB
Current: 17.html: 0.11 MB
Current: 18.html: 0.11 MB
Current: 19.html: 0.12 MB
Current: 20.html: 0.13 MB
Current: 21.html: 0.13 MB
Current: 22.html: 0.14 MB
Current: 23.html: 0.14 MB
Current: 24.html: 0.15 MB
Current: 25.html: 0.16 MB
Current: 26.html: 0.16 MB
Current: 27.html: 0.17 MB
Current: 28.html: 0.17 MB
Current: 29.html: 0.18 MB
Current: 30.html: 0.19 MB
Current: 31.html: 0.19 MB
Current: 32.html: 0.2 MB
Current: 33.html: 0.2 MB
Current: 34.html: 0.21 MB
Current: 35.html: 0.22 MB
Current: 36.html: 0.22 MB
Current: 37.html: 0.23 MB
Current: 38.html: 0.23 MB
Current: 39.html: 0.24 MB
Current: 40.html: 0.25 MB
Current: 41.html: 0.25 MB
Current: 42.html: 0.26 MB
Current: 43.html: 0.26 MB
Current: 44.html: 0.27 MB
Current: 45.html: 0.28 MB
Current: 46.html: 0.28 MB
Current: 47.html: 0.29 MB
Current: 48.html: 0.29 MB
Current: 49.html: 0.3 MB
Current: 50.html: 0.31 MB
Current: 51.html: 0.31 MB
Current: 52.html: 0.32 MB
Current: 53.html: 0.32 MB
Current: 54.html: 0.33 MB
Current: 55.html: 0.34 MB
Current: 56.html: 0.34 MB
Current: 57.html: 0.35 MB
Current: 58.html: 0.35 MB
Current: 59.html: 0.36 MB
Current: 60.html: 0.37 MB
Current: 61.html: 0.37 MB
Current: 62.html: 0.38 MB
Current: 63.html: 0.38 MB
Current: 64.html: 0.39 MB
Current: 65.html: 0.39 MB
Current: 66.html: 0.4 MB
Current: 67.html: 0.41 MB
Current: 68.html: 0.41 MB
Current: 69.html: 0.42 MB
Current: 70.html: 0.42 MB
Current: 71.html: 0.43 MB
Current: 72.html: 0.44 MB
Current: 73.html: 0.44 MB
Current: 74.html: 0.45 MB
Current: 75.html: 0.45 MB
Current: 76.html: 0.46 MB
Current: 77.html: 0.47 MB
Current: 78.html: 0.47 MB
Current: 79.html: 0.48 MB
Current: 80.html: 0.48 MB
Current: 81.html: 0.49 MB
Current: 82.html: 0.5 MB
Current: 83.html: 0.5 MB
Current: 84.html: 0.51 MB
Current: 85.html: 0.51 MB
Current: 86.html: 0.52 MB
Current: 87.html: 0.53 MB
Current: 88.html: 0.53 MB
Current: 89.html: 0.54 MB
Current: 90.html: 0.54 MB
Current: 91.html: 0.55 MB
Current: 92.html: 0.56 MB
Current: 93.html: 0.56 MB
Current: 94.html: 0.57 MB
Current: 95.html: 0.57 MB
Current: 96.html: 0.58 MB
Current: 97.html: 0.59 MB
Current: 98.html: 0.59 MB
Current: 99.html: 0.6 MB
Current: 100.html: 0.6 MB
Current: 101.html: 0.61 MB
Current: 102.html: 0.62 MB
Current: 103.html: 0.62 MB
Current: 104.html: 0.63 MB
Current: 105.html: 0.63 MB
Current: 106.html: 0.64 MB
Current: 107.html: 0.65 MB
Current: 108.html: 0.65 MB
Current: 109.html: 0.66 MB
Current: 110.html: 0.66 MB
Current: 111.html: 0.67 MB
Current: 112.html: 0.68 MB
Current: 113.html: 0.68 MB
Current: 114.html: 0.69 MB
Current: 115.html: 0.69 MB
Current: 116.html: 0.7 MB
Current: 117.html: 0.71 MB
Current: 118.html: 0.71 MB
Current: 119.html: 0.72 MB
Current: 120.html: 0.72 MB
Current: 121.html: 0.73 MB
Current: 122.html: 0.74 MB
Current: 123.html: 0.74 MB
Current: 124.html: 0.75 MB
Current: 125.html: 0.75 MB
Current: 126.html: 0.76 MB
Current: 127.html: 0.77 MB
Current: 128.html: 0.77 MB
Current: 129.html: 0.78 MB
Current: 130.html: 0.78 MB
Current: 131.html: 0.79 MB
Current: 132.html: 0.8 MB
Current: 133.html: 0.8 MB
Current: 134.html: 0.81 MB
Current: 135.html: 0.81 MB
Current: 136.html: 0.82 MB
Current: 137.html: 0.82 MB
Current: 138.html: 0.83 MB
Current: 139.html: 0.84 MB
Current: 140.html: 0.84 MB
Current: 141.html: 0.85 MB
Current: 142.html: 0.85 MB
Current: 143.html: 0.86 MB
Current: 144.html: 0.87 MB
Current: 145.html: 0.87 MB
Current: 146.html: 0.88 MB
Current: 147.html: 0.88 MB
Current: 148.html: 0.89 MB
Current: 149.html: 0.9 MB
Current: 150.html: 0.9 MB
Current: 151.html: 0.91 MB
Current: 152.html: 0.91 MB
Current: 153.html: 0.92 MB
Current: 154.html: 0.93 MB
Current: 155.html: 0.93 MB
Current: 156.html: 0.94 MB
Current: 157.html: 0.94 MB
Current: 158.html: 0.95 MB
Current: 159.html: 0.96 MB
Current: 160.html: 0.96 MB
Current: 161.html: 0.97 MB
Current: 162.html: 0.97 MB
Current: 163.html: 0.98 MB
Current: 164.html: 0.99 MB
Current: 165.html: 0.99 MB
Current: 166.html: 1.0 MB
Current: 167.html: 1.0 MB
Current: 168.html: 1.01 MB
Current: 169.html: 1.02 MB
Current: 170.html: 1.02 MB
Current: 171.html: 1.03 MB
Current: 172.html: 1.03 MB
Current: 173.html: 1.04 MB
Current: 174.html: 1.05 MB
Current: 175.html: 1.05 MB
Current: 176.html: 1.06 MB
Current: 177.html: 1.06 MB
Current: 178.html: 1.07 MB
Current: 179.html: 1.08 MB
Current: 180.html: 1.08 MB
Current: 181.html: 1.09 MB
Current: 182.html: 1.09 MB
Current: 183.html: 1.1 MB
Current: 184.html: 1.11 MB
Current: 185.html: 1.11 MB
Current: 186.html: 1.12 MB
Current: 187.html: 1.12 MB
Current: 188.html: 1.13 MB
Current: 189.html: 1.14 MB
Current: 190.html: 1.14 MB
Current: 191.html: 1.15 MB
Current: 192.html: 1.15 MB
Current: 193.html: 1.16 MB
Current: 194.html: 1.17 MB
Current: 195.html: 1.17 MB
Current: 196.html: 1.18 MB
Current: 197.html: 1.18 MB
Current: 198.html: 1.19 MB
Current: 199.html: 1.2 MB

A temporary fix to the issue is to add the following to the code:

from ipywidgets.widgets.widget import Widget 

And to include this line in the loop:

Widget.widgets.clear()

As gmaps.figure for some reason uses this object and keeps storing additional figure data inside it disregarding whether they are still needed. If this behavior is unintentional, I can issue a pr with the fix if there is one.

for i in range(200):
    Widget.widgets.clear()
    center = 20, 30
    fig = gmaps.figure(center=center, zoom_level=10)
    heatmap_layer = gmaps.heatmap_layer(coordinates)
    heatmap_layer.max_intensity = 100
    heatmap_layer.point_radius = 5
    fig.add_layer(heatmap_layer)
    p = Path(tmp) / f'{i}.html'
    embed_minimal_html(p.as_posix(), views=[fig])
    print(f'Current: {p.name}: {os.path.getsize(p.as_posix()) / 1024 ** 2} MB')
shutil.rmtree(tmp)

Result:

Current: 0.html: 0.0067386627197265625 MB
Current: 1.html: 0.0067386627197265625 MB
Current: 2.html: 0.0067386627197265625 MB
Current: 3.html: 0.0067386627197265625 MB
Current: 4.html: 0.0067386627197265625 MB
Current: 5.html: 0.0067386627197265625 MB
Current: 6.html: 0.0067386627197265625 MB
Current: 7.html: 0.0067386627197265625 MB
Current: 8.html: 0.0067386627197265625 MB
Current: 9.html: 0.0067386627197265625 MB
Current: 10.html: 0.0067386627197265625 MB
Current: 11.html: 0.0067386627197265625 MB
Current: 12.html: 0.0067386627197265625 MB
Current: 13.html: 0.0067386627197265625 MB
Current: 14.html: 0.0067386627197265625 MB
Current: 15.html: 0.0067386627197265625 MB
Current: 16.html: 0.0067386627197265625 MB
Current: 17.html: 0.0067386627197265625 MB
Current: 18.html: 0.0067386627197265625 MB
Current: 19.html: 0.0067386627197265625 MB
Current: 20.html: 0.0067386627197265625 MB
Current: 21.html: 0.0067386627197265625 MB
Current: 22.html: 0.0067386627197265625 MB
Current: 23.html: 0.0067386627197265625 MB
Current: 24.html: 0.0067386627197265625 MB
Current: 25.html: 0.0067386627197265625 MB
Current: 26.html: 0.0067386627197265625 MB
Current: 27.html: 0.0067386627197265625 MB
Current: 28.html: 0.0067386627197265625 MB
Current: 29.html: 0.0067386627197265625 MB
Current: 30.html: 0.0067386627197265625 MB
Current: 31.html: 0.0067386627197265625 MB
Current: 32.html: 0.0067386627197265625 MB
Current: 33.html: 0.0067386627197265625 MB
Current: 34.html: 0.0067386627197265625 MB
Current: 35.html: 0.0067386627197265625 MB
Current: 36.html: 0.0067386627197265625 MB
Current: 37.html: 0.0067386627197265625 MB
Current: 38.html: 0.0067386627197265625 MB
Current: 39.html: 0.0067386627197265625 MB
Current: 40.html: 0.0067386627197265625 MB
Current: 41.html: 0.0067386627197265625 MB
Current: 42.html: 0.0067386627197265625 MB
Current: 43.html: 0.0067386627197265625 MB
Current: 44.html: 0.0067386627197265625 MB
Current: 45.html: 0.0067386627197265625 MB
Current: 46.html: 0.0067386627197265625 MB
Current: 47.html: 0.0067386627197265625 MB
Current: 48.html: 0.0067386627197265625 MB
Current: 49.html: 0.0067386627197265625 MB
Current: 50.html: 0.0067386627197265625 MB
Current: 51.html: 0.0067386627197265625 MB
Current: 52.html: 0.0067386627197265625 MB
Current: 53.html: 0.0067386627197265625 MB
Current: 54.html: 0.0067386627197265625 MB
Current: 55.html: 0.0067386627197265625 MB
Current: 56.html: 0.0067386627197265625 MB
Current: 57.html: 0.0067386627197265625 MB
Current: 58.html: 0.0067386627197265625 MB
Current: 59.html: 0.0067386627197265625 MB
Current: 60.html: 0.0067386627197265625 MB
Current: 61.html: 0.0067386627197265625 MB
Current: 62.html: 0.0067386627197265625 MB
Current: 63.html: 0.0067386627197265625 MB
Current: 64.html: 0.0067386627197265625 MB
Current: 65.html: 0.0067386627197265625 MB
Current: 66.html: 0.0067386627197265625 MB
Current: 67.html: 0.0067386627197265625 MB
Current: 68.html: 0.0067386627197265625 MB
Current: 69.html: 0.0067386627197265625 MB
Current: 70.html: 0.0067386627197265625 MB
Current: 71.html: 0.0067386627197265625 MB
Current: 72.html: 0.0067386627197265625 MB
Current: 73.html: 0.0067386627197265625 MB
Current: 74.html: 0.0067386627197265625 MB
Current: 75.html: 0.0067386627197265625 MB
Current: 76.html: 0.0067386627197265625 MB
Current: 77.html: 0.0067386627197265625 MB
Current: 78.html: 0.0067386627197265625 MB
Current: 79.html: 0.0067386627197265625 MB
Current: 80.html: 0.0067386627197265625 MB
Current: 81.html: 0.0067386627197265625 MB
Current: 82.html: 0.0067386627197265625 MB
Current: 83.html: 0.0067386627197265625 MB
Current: 84.html: 0.0067386627197265625 MB
Current: 85.html: 0.0067386627197265625 MB
Current: 86.html: 0.0067386627197265625 MB
Current: 87.html: 0.0067386627197265625 MB
Current: 88.html: 0.0067386627197265625 MB
Current: 89.html: 0.0067386627197265625 MB
Current: 90.html: 0.0067386627197265625 MB
Current: 91.html: 0.0067386627197265625 MB
Current: 92.html: 0.0067386627197265625 MB
Current: 93.html: 0.0067386627197265625 MB
Current: 94.html: 0.0067386627197265625 MB
Current: 95.html: 0.0067386627197265625 MB
Current: 96.html: 0.0067386627197265625 MB
Current: 97.html: 0.0067386627197265625 MB
Current: 98.html: 0.0067386627197265625 MB
Current: 99.html: 0.0067386627197265625 MB
Current: 100.html: 0.0067386627197265625 MB
Current: 101.html: 0.0067386627197265625 MB
Current: 102.html: 0.0067386627197265625 MB
Current: 103.html: 0.0067386627197265625 MB
Current: 104.html: 0.0067386627197265625 MB
Current: 105.html: 0.0067386627197265625 MB
Current: 106.html: 0.0067386627197265625 MB
Current: 107.html: 0.0067386627197265625 MB
Current: 108.html: 0.0067386627197265625 MB
Current: 109.html: 0.0067386627197265625 MB
Current: 110.html: 0.0067386627197265625 MB
Current: 111.html: 0.0067386627197265625 MB
Current: 112.html: 0.0067386627197265625 MB
Current: 113.html: 0.0067386627197265625 MB
Current: 114.html: 0.0067386627197265625 MB
Current: 115.html: 0.0067386627197265625 MB
Current: 116.html: 0.0067386627197265625 MB
Current: 117.html: 0.0067386627197265625 MB
Current: 118.html: 0.0067386627197265625 MB
Current: 119.html: 0.0067386627197265625 MB
Current: 120.html: 0.0067386627197265625 MB
Current: 121.html: 0.0067386627197265625 MB
Current: 122.html: 0.0067386627197265625 MB
Current: 123.html: 0.0067386627197265625 MB
Current: 124.html: 0.0067386627197265625 MB
Current: 125.html: 0.0067386627197265625 MB
Current: 126.html: 0.0067386627197265625 MB
Current: 127.html: 0.0067386627197265625 MB
Current: 128.html: 0.0067386627197265625 MB
Current: 129.html: 0.0067386627197265625 MB
Current: 130.html: 0.0067386627197265625 MB
Current: 131.html: 0.0067386627197265625 MB
Current: 132.html: 0.0067386627197265625 MB
Current: 133.html: 0.0067386627197265625 MB
Current: 134.html: 0.0067386627197265625 MB
Current: 135.html: 0.0067386627197265625 MB
Current: 136.html: 0.0067386627197265625 MB
Current: 137.html: 0.0067386627197265625 MB
Current: 138.html: 0.0067386627197265625 MB
Current: 139.html: 0.0067386627197265625 MB
Current: 140.html: 0.0067386627197265625 MB
Current: 141.html: 0.0067386627197265625 MB
Current: 142.html: 0.0067386627197265625 MB
Current: 143.html: 0.0067386627197265625 MB
Current: 144.html: 0.0067386627197265625 MB
Current: 145.html: 0.0067386627197265625 MB
Current: 146.html: 0.0067386627197265625 MB
Current: 147.html: 0.0067386627197265625 MB
Current: 148.html: 0.0067386627197265625 MB
Current: 149.html: 0.0067386627197265625 MB
Current: 150.html: 0.0067386627197265625 MB
Current: 151.html: 0.0067386627197265625 MB
Current: 152.html: 0.0067386627197265625 MB
Current: 153.html: 0.0067386627197265625 MB
Current: 154.html: 0.0067386627197265625 MB
Current: 155.html: 0.0067386627197265625 MB
Current: 156.html: 0.0067386627197265625 MB
Current: 157.html: 0.0067386627197265625 MB
Current: 158.html: 0.0067386627197265625 MB
Current: 159.html: 0.0067386627197265625 MB
Current: 160.html: 0.0067386627197265625 MB
Current: 161.html: 0.0067386627197265625 MB
Current: 162.html: 0.0067386627197265625 MB
Current: 163.html: 0.0067386627197265625 MB
Current: 164.html: 0.0067386627197265625 MB
Current: 165.html: 0.0067386627197265625 MB
Current: 166.html: 0.0067386627197265625 MB
Current: 167.html: 0.0067386627197265625 MB
Current: 168.html: 0.0067386627197265625 MB
Current: 169.html: 0.0067386627197265625 MB
Current: 170.html: 0.0067386627197265625 MB
Current: 171.html: 0.0067386627197265625 MB
Current: 172.html: 0.0067386627197265625 MB
Current: 173.html: 0.0067386627197265625 MB
Current: 174.html: 0.0067386627197265625 MB
Current: 175.html: 0.0067386627197265625 MB
Current: 176.html: 0.0067386627197265625 MB
Current: 177.html: 0.0067386627197265625 MB
Current: 178.html: 0.0067386627197265625 MB
Current: 179.html: 0.0067386627197265625 MB
Current: 180.html: 0.0067386627197265625 MB
Current: 181.html: 0.0067386627197265625 MB
Current: 182.html: 0.0067386627197265625 MB
Current: 183.html: 0.0067386627197265625 MB
Current: 184.html: 0.0067386627197265625 MB
Current: 185.html: 0.0067386627197265625 MB
Current: 186.html: 0.0067386627197265625 MB
Current: 187.html: 0.0067386627197265625 MB
Current: 188.html: 0.0067386627197265625 MB
Current: 189.html: 0.0067386627197265625 MB
Current: 190.html: 0.0067386627197265625 MB
Current: 191.html: 0.0067386627197265625 MB
Current: 192.html: 0.0067386627197265625 MB
Current: 193.html: 0.0067386627197265625 MB
Current: 194.html: 0.0067386627197265625 MB
Current: 195.html: 0.0067386627197265625 MB
Current: 196.html: 0.0067386627197265625 MB
Current: 197.html: 0.0067386627197265625 MB
Current: 198.html: 0.0067386627197265625 MB
Current: 199.html: 0.0067386627197265625 MB