Skip to content

Commit b105686

Browse files
Circle CICircle CI
authored andcommitted
CircleCI update of dev docs (2073).
1 parent a608b3c commit b105686

537 files changed

Lines changed: 1515219 additions & 2759463 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎_downloads/006964755fe89c4eeb7c8b8016e96890/plot_otda_semi_supervised.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
ot_sinkhorn_semi.fit(Xs=Xs, Xt=Xt, ys=ys, yt=yt)
5151
transp_Xs_sinkhorn_semi = ot_sinkhorn_semi.transform(Xs=Xs)
5252

53-
# semi supervised DA uses available labaled target samples to modify the cost
53+
# semi supervised DA uses available labeled target samples to modify the cost
5454
# matrix involved in the OT problem. The cost of transporting a source sample
5555
# of class A onto a target sample of class B != A is set to infinite, or a
5656
# very large value
@@ -92,7 +92,7 @@
9292
pl.imshow(ot_sinkhorn_semi.cost_, interpolation='nearest')
9393
pl.xticks([])
9494
pl.yticks([])
95-
pl.title('Cost matrix - semisupervised DA')
95+
pl.title('Cost matrix - semi-supervised DA')
9696

9797
pl.tight_layout()
9898

‎_downloads/020b892b91e910d18254039df8f9f86e/plot_regpath.py‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
#%% parameters and data generation
2929

30-
n = 50 # nb samples
30+
n = 20 # nb samples
3131

3232
mu_s = np.array([-1, -1])
3333
cov_s = np.array([[1, 0], [0, 1]])
@@ -60,10 +60,10 @@
6060

6161
##############################################################################
6262
# Compute semi-relaxed and fully relaxed regularization paths
63-
# -----------
63+
# -----------------------------------------------------------
6464

6565
#%%
66-
final_gamma = 1e-8
66+
final_gamma = 1e-6
6767
t, t_list, g_list = ot.regpath.regularization_path(a, b, M, reg=final_gamma,
6868
semi_relaxed=False)
6969
t2, t_list2, g_list2 = ot.regpath.regularization_path(a, b, M, reg=final_gamma,
@@ -72,9 +72,9 @@
7272

7373
##############################################################################
7474
# Plot the regularization path
75-
# ----------------
75+
# ----------------------------
7676
#
77-
# The OT plan is ploted as a function of $\gamma$ that is the inverse of the
77+
# The OT plan is plotted as a function of $\gamma$ that is the inverse of the
7878
# weight on the marginal relaxations.
7979

8080
#%% fully relaxed l2-penalized UOT
@@ -109,9 +109,9 @@
109109

110110
# %%
111111
# Animation of the regpath for UOT l2
112-
# ------------------------
112+
# -----------------------------------
113113

114-
nv = 100
114+
nv = 50
115115
g_list_v = np.logspace(-.5, -2.5, nv)
116116

117117
pl.figure(3)
@@ -144,12 +144,12 @@ def _update_plot(iv):
144144
i = 0
145145
_update_plot(i)
146146

147-
ani = animation.FuncAnimation(pl.gcf(), _update_plot, nv, interval=50, repeat_delay=2000)
147+
ani = animation.FuncAnimation(pl.gcf(), _update_plot, nv, interval=100, repeat_delay=2000)
148148

149149

150150
##############################################################################
151151
# Plot the semi-relaxed regularization path
152-
# -------------------
152+
# -----------------------------------------
153153

154154
#%% semi-relaxed l2-penalized UOT
155155

@@ -181,10 +181,10 @@ def _update_plot(iv):
181181

182182
# %%
183183
# Animation of the regpath for semi-relaxed UOT l2
184-
# ------------------------
184+
# ------------------------------------------------
185185

186-
nv = 100
187-
g_list_v = np.logspace(2.5, -2, nv)
186+
nv = 50
187+
g_list_v = np.logspace(2, -2, nv)
188188

189189
pl.figure(5)
190190

@@ -216,4 +216,4 @@ def _update_plot(iv):
216216
i = 0
217217
_update_plot(i)
218218

219-
ani = animation.FuncAnimation(pl.gcf(), _update_plot, nv, interval=50, repeat_delay=2000)
219+
ani = animation.FuncAnimation(pl.gcf(), _update_plot, nv, interval=100, repeat_delay=2000)

‎_downloads/0598d5b45ff5db99569cf59aaff1ea1a/plot_screenkhorn_1D.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@
6262

6363
# Screenkhorn
6464
lambd = 2e-03 # entropy parameter
65-
ns_budget = 30 # budget number of points to be keeped in the source distribution
66-
nt_budget = 30 # budget number of points to be keeped in the target distribution
65+
ns_budget = 30 # budget number of points to be kept in the source distribution
66+
nt_budget = 30 # budget number of points to be kept in the target distribution
6767

6868
G_screen = screenkhorn(a, b, M, lambd, ns_budget, nt_budget, uniform=False, restricted=True, verbose=True)
6969
pl.figure(4, figsize=(5, 5))

‎_downloads/059a63fc6cb655dcd2f1c9a61bb9d7ec/plot_OT_2D_samples.ipynb‎

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,10 @@
11
{
22
"cells": [
3-
{
4-
"cell_type": "code",
5-
"execution_count": null,
6-
"metadata": {
7-
"collapsed": false
8-
},
9-
"outputs": [],
10-
"source": [
11-
"%matplotlib inline"
12-
]
13-
},
143
{
154
"cell_type": "markdown",
165
"metadata": {},
176
"source": [
18-
"\n# Optimal Transport between 2D empirical distributions\n\nIllustration of 2D optimal transport between discributions that are weighted\nsum of diracs. The OT matrix is plotted with the samples.\n"
7+
"\n# Optimal Transport between 2D empirical distributions\n\nIllustration of 2D optimal transport between distributions that are weighted\nsum of Diracs. The OT matrix is plotted with the samples.\n"
198
]
209
},
2110
{
@@ -105,7 +94,7 @@
10594
"cell_type": "markdown",
10695
"metadata": {},
10796
"source": [
108-
"## Emprirical Sinkhorn\n\n"
97+
"## Empirical Sinkhorn\n\n"
10998
]
11099
},
111100
{
@@ -136,7 +125,7 @@
136125
"name": "python",
137126
"nbconvert_exporter": "python",
138127
"pygments_lexer": "ipython3",
139-
"version": "3.9.16"
128+
"version": "3.10.12"
140129
}
141130
},
142131
"nbformat": 4,
Binary file not shown.
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"\n# Comparison of Fused Gromov-Wasserstein solvers\n\nThis example illustrates the computation of FGW for attributed graphs\nusing 3 different solvers to estimate the distance based on Conditional\nGradient [24] or Sinkhorn projections [12, 51].\n\nWe generate two graphs following Stochastic Block Models further endowed with\nnode features and compute their FGW matchings.\n\n[12] Gabriel Peyr\u00e9, Marco Cuturi, and Justin Solomon (2016),\n\"Gromov-Wasserstein averaging of kernel and distance matrices\".\nInternational Conference on Machine Learning (ICML).\n\n[24] Vayer Titouan, Chapel Laetitia, Flamary R\u00e9mi, Tavenard Romain\nand Courty Nicolas\n\"Optimal Transport for structured data with application on graphs\"\nInternational Conference on Machine Learning (ICML). 2019.\n\n[51] Xu, H., Luo, D., Zha, H., & Duke, L. C. (2019).\n\"Gromov-wasserstein learning for graph matching and node embedding\".\nIn International Conference on Machine Learning (ICML), 2019.\n"
8+
]
9+
},
10+
{
11+
"cell_type": "code",
12+
"execution_count": null,
13+
"metadata": {
14+
"collapsed": false
15+
},
16+
"outputs": [],
17+
"source": [
18+
"# Author: C\u00e9dric Vincent-Cuaz <cedvincentcuaz@gmail.com>\n#\n# License: MIT License\n\n# sphinx_gallery_thumbnail_number = 1\n\nimport numpy as np\nimport matplotlib.pylab as pl\nfrom ot.gromov import fused_gromov_wasserstein, entropic_fused_gromov_wasserstein\nimport networkx\nfrom networkx.generators.community import stochastic_block_model as sbm"
19+
]
20+
},
21+
{
22+
"cell_type": "markdown",
23+
"metadata": {},
24+
"source": [
25+
"## Generate two graphs following Stochastic Block models of 2 and 3 clusters.\n\n"
26+
]
27+
},
28+
{
29+
"cell_type": "code",
30+
"execution_count": null,
31+
"metadata": {
32+
"collapsed": false
33+
},
34+
"outputs": [],
35+
"source": [
36+
"np.random.seed(0)\n\nN2 = 20 # 2 communities\nN3 = 30 # 3 communities\np2 = [[1., 0.1],\n [0.1, 0.9]]\np3 = [[1., 0.1, 0.],\n [0.1, 0.95, 0.1],\n [0., 0.1, 0.9]]\nG2 = sbm(seed=0, sizes=[N2 // 2, N2 // 2], p=p2)\nG3 = sbm(seed=0, sizes=[N3 // 3, N3 // 3, N3 // 3], p=p3)\npart_G2 = [G2.nodes[i]['block'] for i in range(N2)]\npart_G3 = [G3.nodes[i]['block'] for i in range(N3)]\n\nC2 = networkx.to_numpy_array(G2)\nC3 = networkx.to_numpy_array(G3)\n\n\n# We add node features with given mean - by clusters\n# and inversely proportional to clusters' intra-connectivity\n\nF2 = np.zeros((N2, 1))\nfor i, c in enumerate(part_G2):\n F2[i, 0] = np.random.normal(loc=c, scale=0.01)\n\nF3 = np.zeros((N3, 1))\nfor i, c in enumerate(part_G3):\n F3[i, 0] = np.random.normal(loc=2. - c, scale=0.01)\n\n# Compute pairwise euclidean distance between node features\nM = (F2 ** 2).dot(np.ones((1, N3))) + np.ones((N2, 1)).dot((F3 ** 2).T) - 2 * F2.dot(F3.T)\n\nh2 = np.ones(C2.shape[0]) / C2.shape[0]\nh3 = np.ones(C3.shape[0]) / C3.shape[0]"
37+
]
38+
},
39+
{
40+
"cell_type": "markdown",
41+
"metadata": {},
42+
"source": [
43+
"## Compute their Fused Gromov-Wasserstein distances\n\n"
44+
]
45+
},
46+
{
47+
"cell_type": "code",
48+
"execution_count": null,
49+
"metadata": {
50+
"collapsed": false
51+
},
52+
"outputs": [],
53+
"source": [
54+
"alpha = 0.5\n\n\n# Conditional Gradient algorithm\nfgw0, log0 = fused_gromov_wasserstein(\n M, C2, C3, h2, h3, 'square_loss', alpha=alpha, verbose=True, log=True)\n\n# Proximal Point algorithm with Kullback-Leibler as proximal operator\nfgw, log = entropic_fused_gromov_wasserstein(\n M, C2, C3, h2, h3, 'square_loss', alpha=alpha, epsilon=1., solver='PPA',\n log=True, verbose=True, warmstart=False, numItermax=10)\n\n# Projected Gradient algorithm with entropic regularization\nfgwe, loge = entropic_fused_gromov_wasserstein(\n M, C2, C3, h2, h3, 'square_loss', alpha=alpha, epsilon=0.01, solver='PGD',\n log=True, verbose=True, warmstart=False, numItermax=10)\n\nprint('Fused Gromov-Wasserstein distance estimated with Conditional Gradient solver: ' + str(log0['fgw_dist']))\nprint('Fused Gromov-Wasserstein distance estimated with Proximal Point solver: ' + str(log['fgw_dist']))\nprint('Entropic Fused Gromov-Wasserstein distance estimated with Projected Gradient solver: ' + str(loge['fgw_dist']))\n\n# compute OT sparsity level\nfgw0_sparsity = 100 * (fgw0 == 0.).astype(np.float64).sum() / (N2 * N3)\nfgw_sparsity = 100 * (fgw == 0.).astype(np.float64).sum() / (N2 * N3)\nfgwe_sparsity = 100 * (fgwe == 0.).astype(np.float64).sum() / (N2 * N3)\n\n# Methods using Sinkhorn projections tend to produce feasibility errors on the\n# marginal constraints\n\nerr0 = np.linalg.norm(fgw0.sum(1) - h2) + np.linalg.norm(fgw0.sum(0) - h3)\nerr = np.linalg.norm(fgw.sum(1) - h2) + np.linalg.norm(fgw.sum(0) - h3)\nerre = np.linalg.norm(fgwe.sum(1) - h2) + np.linalg.norm(fgwe.sum(0) - h3)"
55+
]
56+
},
57+
{
58+
"cell_type": "markdown",
59+
"metadata": {},
60+
"source": [
61+
"## Visualization of the Fused Gromov-Wasserstein matchings\n\nWe color nodes of the graph on the right - then project its node colors\nbased on the optimal transport plan from the FGW matchings\nWe adjust the intensity of links across domains proportionaly to the mass\nsent, adding a minimal intensity of 0.1 if mass sent is not zero.\nFor each matching, all node sizes are proportionnal to their mass computed\nfrom marginals of the OT plan to illustrate potential feasibility errors.\nNB: colors refer to clusters - not to node features\n\n"
62+
]
63+
},
64+
{
65+
"cell_type": "code",
66+
"execution_count": null,
67+
"metadata": {
68+
"collapsed": false
69+
},
70+
"outputs": [],
71+
"source": [
72+
"# Add weights on the edges for visualization later on\nweight_intra_G2 = 5\nweight_inter_G2 = 0.5\nweight_intra_G3 = 1.\nweight_inter_G3 = 1.5\n\nweightedG2 = networkx.Graph()\npart_G2 = [G2.nodes[i]['block'] for i in range(N2)]\n\nfor node in G2.nodes():\n weightedG2.add_node(node)\nfor i, j in G2.edges():\n if part_G2[i] == part_G2[j]:\n weightedG2.add_edge(i, j, weight=weight_intra_G2)\n else:\n weightedG2.add_edge(i, j, weight=weight_inter_G2)\n\nweightedG3 = networkx.Graph()\npart_G3 = [G3.nodes[i]['block'] for i in range(N3)]\n\nfor node in G3.nodes():\n weightedG3.add_node(node)\nfor i, j in G3.edges():\n if part_G3[i] == part_G3[j]:\n weightedG3.add_edge(i, j, weight=weight_intra_G3)\n else:\n weightedG3.add_edge(i, j, weight=weight_inter_G3)\n\n\ndef draw_graph(G, C, nodes_color_part, Gweights=None,\n pos=None, edge_color='black', node_size=None,\n shiftx=0, seed=0):\n\n if (pos is None):\n pos = networkx.spring_layout(G, scale=1., seed=seed)\n\n if shiftx != 0:\n for k, v in pos.items():\n v[0] = v[0] + shiftx\n\n alpha_edge = 0.7\n width_edge = 1.8\n if Gweights is None:\n networkx.draw_networkx_edges(G, pos, width=width_edge, alpha=alpha_edge, edge_color=edge_color)\n else:\n # We make more visible connections between activated nodes\n n = len(Gweights)\n edgelist_activated = []\n edgelist_deactivated = []\n for i in range(n):\n for j in range(n):\n if Gweights[i] * Gweights[j] * C[i, j] > 0:\n edgelist_activated.append((i, j))\n elif C[i, j] > 0:\n edgelist_deactivated.append((i, j))\n\n networkx.draw_networkx_edges(G, pos, edgelist=edgelist_activated,\n width=width_edge, alpha=alpha_edge,\n edge_color=edge_color)\n networkx.draw_networkx_edges(G, pos, edgelist=edgelist_deactivated,\n width=width_edge, alpha=0.1,\n edge_color=edge_color)\n\n if Gweights is None:\n for node, node_color in enumerate(nodes_color_part):\n networkx.draw_networkx_nodes(G, pos, nodelist=[node],\n node_size=node_size, alpha=1,\n node_color=node_color)\n else:\n scaled_Gweights = Gweights / (0.5 * Gweights.max())\n nodes_size = node_size * scaled_Gweights\n for node, node_color in enumerate(nodes_color_part):\n networkx.draw_networkx_nodes(G, pos, nodelist=[node],\n node_size=nodes_size[node], alpha=1,\n node_color=node_color)\n return pos\n\n\ndef draw_transp_colored_GW(G1, C1, G2, C2, part_G1, p1, p2, T,\n pos1=None, pos2=None, shiftx=4, switchx=False,\n node_size=70, seed_G1=0, seed_G2=0):\n starting_color = 0\n # get graphs partition and their coloring\n part1 = part_G1.copy()\n unique_colors = ['C%s' % (starting_color + i) for i in np.unique(part1)]\n nodes_color_part1 = []\n for cluster in part1:\n nodes_color_part1.append(unique_colors[cluster])\n\n nodes_color_part2 = []\n # T: getting colors assignment from argmin of columns\n for i in range(len(G2.nodes())):\n j = np.argmax(T[:, i])\n nodes_color_part2.append(nodes_color_part1[j])\n pos1 = draw_graph(G1, C1, nodes_color_part1, Gweights=p1,\n pos=pos1, node_size=node_size, shiftx=0, seed=seed_G1)\n pos2 = draw_graph(G2, C2, nodes_color_part2, Gweights=p2, pos=pos2,\n node_size=node_size, shiftx=shiftx, seed=seed_G2)\n\n for k1, v1 in pos1.items():\n max_Tk1 = np.max(T[k1, :])\n for k2, v2 in pos2.items():\n if (T[k1, k2] > 0):\n pl.plot([pos1[k1][0], pos2[k2][0]],\n [pos1[k1][1], pos2[k2][1]],\n '-', lw=0.7, alpha=min(T[k1, k2] / max_Tk1 + 0.1, 1.),\n color=nodes_color_part1[k1])\n return pos1, pos2\n\n\nnode_size = 40\nfontsize = 13\nseed_G2 = 0\nseed_G3 = 4\n\npl.figure(2, figsize=(12, 3.5))\npl.clf()\npl.subplot(131)\npl.axis('off')\npl.axis\npl.title('(CG algo) FGW=%s \\n \\n OT sparsity = %s \\n feasibility error = %s' % (\n np.round(log0['fgw_dist'], 3), str(np.round(fgw0_sparsity, 2)) + ' %',\n np.round(err0, 4)), fontsize=fontsize)\n\np0, q0 = fgw0.sum(1), fgw0.sum(0) # check marginals\n\npos1, pos2 = draw_transp_colored_GW(\n weightedG2, C2, weightedG3, C3, part_G2, p1=p0, p2=q0, T=fgw0,\n shiftx=1.5, node_size=node_size, seed_G1=seed_G2, seed_G2=seed_G3)\n\npl.subplot(132)\npl.axis('off')\n\np, q = fgw.sum(1), fgw.sum(0) # check marginals\n\npl.title('(PP algo) FGW=%s\\n \\n OT sparsity = %s \\n feasibility error = %s' % (\n np.round(log['fgw_dist'], 3), str(np.round(fgw_sparsity, 2)) + ' %',\n np.round(err, 4)), fontsize=fontsize)\n\npos1, pos2 = draw_transp_colored_GW(\n weightedG2, C2, weightedG3, C3, part_G2, p1=p, p2=q, T=fgw,\n pos1=pos1, pos2=pos2, shiftx=0., node_size=node_size, seed_G1=0, seed_G2=0)\n\npl.subplot(133)\npl.axis('off')\n\npe, qe = fgwe.sum(1), fgwe.sum(0) # check marginals\n\npl.title('Entropic FGW=%s\\n \\n OT sparsity = %s \\n feasibility error = %s' % (\n np.round(loge['fgw_dist'], 3), str(np.round(fgwe_sparsity, 2)) + ' %',\n np.round(erre, 4)), fontsize=fontsize)\n\npos1, pos2 = draw_transp_colored_GW(\n weightedG2, C2, weightedG3, C3, part_G2, p1=pe, p2=qe, T=fgwe,\n pos1=pos1, pos2=pos2, shiftx=0., node_size=node_size, seed_G1=0, seed_G2=0)\n\npl.tight_layout()\n\npl.show()"
73+
]
74+
}
75+
],
76+
"metadata": {
77+
"kernelspec": {
78+
"display_name": "Python 3",
79+
"language": "python",
80+
"name": "python3"
81+
},
82+
"language_info": {
83+
"codemirror_mode": {
84+
"name": "ipython",
85+
"version": 3
86+
},
87+
"file_extension": ".py",
88+
"mimetype": "text/x-python",
89+
"name": "python",
90+
"nbconvert_exporter": "python",
91+
"pygments_lexer": "ipython3",
92+
"version": "3.10.12"
93+
}
94+
},
95+
"nbformat": 4,
96+
"nbformat_minor": 0
97+
}

‎_downloads/0e15d87ff8ae3d0dd037bf7ddc80d8a7/plot_variance.ipynb‎

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
{
22
"cells": [
3-
{
4-
"cell_type": "code",
5-
"execution_count": null,
6-
"metadata": {
7-
"collapsed": false
8-
},
9-
"outputs": [],
10-
"source": [
11-
"%matplotlib inline"
12-
]
13-
},
143
{
154
"cell_type": "markdown",
165
"metadata": {},
@@ -44,7 +33,7 @@
4433
},
4534
"outputs": [],
4635
"source": [
47-
"n = 500 # nb samples\n\nmu_s = np.array([0, 0])\ncov_s = np.array([[1, 0], [0, 1]])\n\nmu_t = np.array([4, 4])\ncov_t = np.array([[1, -.8], [-.8, 1]])\n\nxs = ot.datasets.make_2D_samples_gauss(n, mu_s, cov_s)\nxt = ot.datasets.make_2D_samples_gauss(n, mu_t, cov_t)\n\na, b = np.ones((n,)) / n, np.ones((n,)) / n # uniform distribution on samples"
36+
"n = 200 # nb samples\n\nmu_s = np.array([0, 0])\ncov_s = np.array([[1, 0], [0, 1]])\n\nmu_t = np.array([4, 4])\ncov_t = np.array([[1, -.8], [-.8, 1]])\n\nxs = ot.datasets.make_2D_samples_gauss(n, mu_s, cov_s)\nxt = ot.datasets.make_2D_samples_gauss(n, mu_t, cov_t)\n\na, b = np.ones((n,)) / n, np.ones((n,)) / n # uniform distribution on samples"
4837
]
4938
},
5039
{
@@ -80,7 +69,7 @@
8069
},
8170
"outputs": [],
8271
"source": [
83-
"n_seed = 50\nn_projections_arr = np.logspace(0, 3, 25, dtype=int)\nres = np.empty((n_seed, 25))"
72+
"n_seed = 20\nn_projections_arr = np.logspace(0, 3, 10, dtype=int)\nres = np.empty((n_seed, 10))"
8473
]
8574
},
8675
{
@@ -109,7 +98,7 @@
10998
},
11099
"outputs": [],
111100
"source": [
112-
"pl.figure(2)\npl.plot(n_projections_arr, res_mean, label=\"SWD\")\npl.fill_between(n_projections_arr, res_mean - 2 * res_std, res_mean + 2 * res_std, alpha=0.5)\n\npl.legend()\npl.xscale('log')\n\npl.xlabel(\"Number of projections\")\npl.ylabel(\"Distance\")\npl.title('Sliced Wasserstein Distance with 95% confidence inverval')\n\npl.show()"
101+
"pl.figure(2)\npl.plot(n_projections_arr, res_mean, label=\"SWD\")\npl.fill_between(n_projections_arr, res_mean - 2 * res_std, res_mean + 2 * res_std, alpha=0.5)\n\npl.legend()\npl.xscale('log')\n\npl.xlabel(\"Number of projections\")\npl.ylabel(\"Distance\")\npl.title('Sliced Wasserstein Distance with 95% confidence interval')\n\npl.show()"
113102
]
114103
}
115104
],
@@ -129,7 +118,7 @@
129118
"name": "python",
130119
"nbconvert_exporter": "python",
131120
"pygments_lexer": "ipython3",
132-
"version": "3.9.16"
121+
"version": "3.10.12"
133122
}
134123
},
135124
"nbformat": 4,

‎_downloads/0e77b32207676919c68b7f28c6029b1b/plot_unmix_optim_torch.ipynb‎

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
{
22
"cells": [
3-
{
4-
"cell_type": "code",
5-
"execution_count": null,
6-
"metadata": {
7-
"collapsed": false
8-
},
9-
"outputs": [],
10-
"source": [
11-
"%matplotlib inline"
12-
]
13-
},
143
{
154
"cell_type": "markdown",
165
"metadata": {},
@@ -105,7 +94,7 @@
10594
"cell_type": "markdown",
10695
"metadata": {},
10796
"source": [
108-
"## Ploting the reweighted source distribution\n\n"
97+
"## Plotting the reweighted source distribution\n\n"
10998
]
11099
},
111100
{
@@ -136,7 +125,7 @@
136125
"name": "python",
137126
"nbconvert_exporter": "python",
138127
"pygments_lexer": "ipython3",
139-
"version": "3.9.16"
128+
"version": "3.10.12"
140129
}
141130
},
142131
"nbformat": 4,

0 commit comments

Comments
 (0)