Hi Prof. Peixoto,
My graph-tool version is 2.70
Operating system is ubuntu 22
I wanted to load and save an object of gt.ModeClusterState()
, I am able to save it to a pickle file, but I get the following error while loading it back:
TypeError: __init__() got an unexpected keyword argument 'entropy_args'
My minimal working example is the following:
import pickle
import graph_tool.all as gt
with open(f'bs.npy', 'rb') as f:
bs = pickle.load(f)
pmode = gt.ModeClusterState(bs, nested=True)
gt.mcmc_equilibrate(pmode, wait=1, mcmc_args=dict(niter=1, beta=np.inf))
with open(f'pmode.npy', 'wb') as f:
pickle.dump([pmode], f)
with open(f'pmode.npy', 'rb') as f:
[pmode] = pickle.load(f)
Many thanks,
Govinda
tiago
(Tiago Peixoto)
July 10, 2024, 9:11pm
2
Govinda,
The minimal working example you gave is not complete because it does not run without the bs.npy
file. Could you please either provide this file or modify the example? Many thanks.
Best,
Tiago
tiago
(Tiago Peixoto)
July 11, 2024, 2:22pm
4
If I use this file I get a completely different error:
AttributeError Traceback (most recent call last)
Cell In[6], line 7
4 with open(f'bs.npy', 'rb') as f:
5 bs = pickle.load(f)
----> 7 pmode = gt.ModeClusterState(bs, nested=True)
8 gt.mcmc_equilibrate(pmode, wait=1, mcmc_args=dict(niter=1, beta=np.inf))
10 with open(f'pmode.npy', 'wb') as f:
File ~/.local/lib/python3.12/site-packages/graph_tool/inference/partition_modes.py:299, in ModeClusterState.__init__(self, bs, b, B, nested, relabel)
297 for bv in bs:
298 if self.nested:
--> 299 bv = [Vector_int32_t(init=x) for x in bv]
300 else:
301 bv = [Vector_int32_t(init=bv)]
File ~/.local/lib/python3.12/site-packages/graph_tool/__init__.py:4147, in _vt_init(self, n, init)
4145 self.resize(n)
4146 if init is not None:
-> 4147 _vt_setstate(self, init)
File ~/.local/lib/python3.12/site-packages/graph_tool/__init__.py:4129, in _vt_setstate(self, state)
4128 def _vt_setstate(self, state):
-> 4129 self.resize(len(state))
4130 if self.a is not None:
4131 self.a = state
File ~/.local/lib/python3.12/site-packages/graph_tool/__init__.py:938, in VertexPropertyMap.__len__(self)
936 def __len__(self):
937 g = self.get_graph()
--> 938 return g.num_vertices()
AttributeError: 'NoneType' object has no attribute 'num_vertices'
This is happening because you pickled a property map without its graph. Could you please revise your MWE, so I can investigate?
Hi Prof. Peixoto,
This is the revised MWE:
import graph_tool.all as gt
import pickle
import numpy as np
with open('bs.npy', 'rb') as f:
[state, bs] = pickle.load(f)
pmode = gt.ModeClusterState(bs, nested=True)
gt.mcmc_equilibrate(pmode, wait=1, mcmc_args=dict(niter=1, beta=np.inf))
with open('pmode.npy', 'wb') as f:
pickle.dump([state, bs, pmode], f)
with open('pmode.npy', 'rb') as f:
[state, bs, pmode] = pickle.load(f)
Thanks,
Govinda
bs.npy (201.5 KB)
tiago
(Tiago Peixoto)
July 14, 2024, 9:33am
6
Thank you! I’ve fixed this bug in the new release (2.72). Please try it out.
Hi Prof. Peixoto,
Is there an efficient way to save the pmode
and state
variables?
When I save them in a pickle file, it takes around 5 minutes to load the file.
This is happening in graph-tool version 2.72 in the OS Ubuntu 22.
But when I had saved them in a pickle for graph-tool version 2.59 in the same OS, the file was loading within a minute.
am I doing anything silly?
Many thanks,
Govinda
tiago
(Tiago Peixoto)
August 8, 2024, 6:17pm
8
As usual, there’s little I can say without a MWE that shows the problem.
In the future, please open a new post for every different problem, instead of attaching them as answers to older threads.