1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
- import pytest
- import matplotlib
- matplotlib.use("Agg")
- from wandb.summary import FileSummary
- from click.testing import CliRunner
- from wandb import Histogram, Image, Graph, Table
- import matplotlib.pyplot as plt
- import plotly.graph_objs as go
- import numpy as np
- import os
- import glob
- import json
- import torch
- import tensorflow as tf
- import pandas as pd
- @pytest.fixture
- def summary():
- with CliRunner().isolated_filesystem():
- s = FileSummary()
- s.update({"foo": "init"})
- yield s
- def disk_summary():
- return json.load(open("wandb-summary.json"))
- def test_set_attrs(summary):
- summary.foo = "bar"
- assert disk_summary() == {"foo": "bar"}
- def test_get_attr(summary):
- assert summary.foo == "init"
- def test_update(summary):
- summary.update({"foo": "bar"})
- assert disk_summary() == {"foo": "bar"}
- def test_update_histogram(summary):
- summary.update({"hist": Histogram(np_histogram=([1, 2, 3], [1, 2, 3, 4]))})
- assert disk_summary() == {
- 'foo': 'init',
- "hist": {"_type": "histogram", "values": [1, 2, 3], "bins": [1, 2, 3, 4]}}
- def test_set_histogram(summary):
- summary["hist"] = Histogram(np_histogram=([1, 2, 3], [1, 2, 3, 4]))
- assert disk_summary() == {
- 'foo': 'init',
- "hist": {"_type": "histogram", "values": [1, 2, 3], "bins": [1, 2, 3, 4]}}
- def test_set_item(summary):
- summary["foo"] = "bar"
- assert disk_summary() == {"foo": "bar"}
- def test_get_item(summary):
- assert summary["foo"] == "init"
- def test_delete(summary):
- summary.update({"foo": "bar", "bad": True})
- del summary["bad"]
- assert disk_summary() == {"foo": "bar"}
- def test_image(summary):
- summary["image"] = Image(np.random.rand(28, 28))
- assert disk_summary()['image'] == {
- '_type': 'images', 'count': 1, 'height': 28, 'width': 28}
- assert os.path.exists("media/images/image_summary.jpg")
- def test_matplot_image(summary):
- img = plt.imshow(np.random.rand(28, 28), cmap='gray')
- summary["fig"] = img
- plt.close()
- assert disk_summary()["fig"] == {
- "_type": "images", "count": 1, "height": 480, "width": 640}
- assert os.path.exists("media/images/fig_summary.jpg")
- def test_matplot_plotly(summary):
- plt.plot([1, 2, 3])
- summary["plot"] = plt
- plt.close()
- plot = disk_summary()["plot"]
- assert plot["_type"] == "plotly"
- def test_plotly_plot(summary):
- summary["plot"] = go.Scatter(x=[0, 1, 2])
- plot = disk_summary()["plot"]
- assert plot["_type"] == "plotly"
- assert plot["plot"]['type'] == 'scatter'
- def test_newline(summary):
- summary["rad \n"] = 1
- summary.update({"bad \n ": 2})
- summ = disk_summary()
- assert summ["rad"] == 1
- assert summ["bad"] == 2
- def test_big_numpy(summary):
- summary.update({"rad": np.random.rand(1000)})
- assert disk_summary()["rad"]["max"] > 0
- assert os.path.exists("wandb.h5")
- def test_big_nested_numpy(summary):
- summary.update({"rad": {"deep": np.random.rand(1000)}})
- assert disk_summary()["rad"]["deep"]["max"] > 0
- assert os.path.exists("wandb.h5")
- def test_torch_tensor(summary):
- summary.update({"pytorch": torch.rand(1000, 1000)})
- assert os.path.exists("wandb.h5")
- assert disk_summary()["pytorch"]["_type"] == "torch.Tensor"
- def test_tensorflow_tensor(summary):
- with tf.Session().as_default():
- summary.update({"tensorflow": tf.random_normal([1000])})
- assert os.path.exists("wandb.h5")
- assert disk_summary()["tensorflow"]["_type"] == "tensorflow.Tensor"
- def test_pandas(summary):
- summary.update({"pandas": pd.DataFrame(data=np.random.rand(1000))})
- assert os.path.exists("wandb.h5")
- parsed = disk_summary()
- print(parsed)
- assert parsed["pandas"]["_type"] == "pandas.DataFrame"
- def test_read_numpy(summary):
- summary.update({"rad": np.random.rand(1000)})
- s = FileSummary()
- assert len(s["rad"]) == 1000
- def test_read_nested_numpy(summary):
- summary.update({"rad": {"deep": np.random.rand(1000)}})
- s = FileSummary()
- assert len(s["rad"]["deep"]) == 1000
|