Hi all,
I am reaching out because I have some questions regarding the writing of plugins. I quickly followed the documentation tutorial, but there is a fundamental concept that I think I am not understanding.
I am trying to write a workflow to autonomously perform pw.x
and epsilon.x
calculations. The first part of this involves writing a workflow to perform multiple scf
and nscf
calculations. For this purpose, I created a plugin called aiida-quantumespresso-rdmk
in which I developed a workflow. After installing the plugin via pip
, I see that the workflow has been correctly added to the list and is correctly recognized with verdi plugin list aiida.workflows quantumespresso_rdmk.random_kpoints
, which displays the correct information about the workflow. However, I cannot import it using WorkflowFactory
(even after restarting the daemon a couple of times):
Traceback (most recent call last):
File "/home/gjoalland/work/project/AuAu/jupyter/rdmk/calc_rdmk.py", line 12, in <module>
RdmKWorkchain = WorkflowFactory('quantumespresso_rdmk.random_kpoints')
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/factories.py", line 466, in WorkflowFactory
entry_point = BaseFactory(entry_point_group, entry_point_name, load=load)
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/factories.py", line 75, in BaseFactory
return load_entry_point(group, name)
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/entry_point.py", line 276, in load_entry_point
entry_point = get_entry_point(group, name)
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/entry_point.py", line 324, in get_entry_point
raise MissingEntryPointError(f"Entry point '{name}' not found in group '{group}'")
aiida.common.exceptions.MissingEntryPointError: Entry point 'quantumespresso_rdmk.random_kpoints' not found in group 'aiida.workflows'
Am I missing something for using the workflow with WorkflowFactory
?
Thanks in advance!
Hi, just as a first preliminary check: are you in the same virtual environment? And do you get that error from a script, or from a jupyter notebook or ipython shell? In the latter case, did you restart the kernel?
If all points above are taken care of, can you check, in the same script that fails, what is the content of the value eps
defined as:
import importlib.metadata
eps = importlib.metadata.entry_points()
in particular, check if your workflow is there, something like (but with your workflow values)
(name='core.arithmetic.add_multiply', value='aiida.workflows.arithmetic.add_multiply:add_multiply', group='aiida.workflows')
(Check also that it’s not registered twice)
Finally, if you still didn’t find the issue, check also that doing from XXX import YYY
using the values from the value
field works - maybe there is an import error that indirectly causes the problem
I am in the same virtual environement yes and restarted the kernel. It is correctly detected in the ipython shell:
In [1]: import importlib.metadata
...: eps = importlib.metadata.entry_points()
In [2]: eps['aiida.workflows'][0]
Out[2]: EntryPoint(name='quantumespresso_rdmk.random_kpoints', value='aiida_quantumespresso_rdmk.workflows.rdmk:PwRdmKpointsWorkChain', group='aiida.workflows')
In [3]: from aiida_quantumespresso_rdmk.workflows.rdmk import PwRdmKpointsWorkChain
In [4]: PwRdmKpointsWorkChain
Out[4]: aiida_quantumespresso_rdmk.workflows.rdmk.PwRdmKpointsWorkChain
In [5]: PwRdmKpointsWorkChain? # displays the help message
In [9]: from aiida.plugins import WorkflowFactory
In [10]: RdmKWorkchain = WorkflowFactory('quantumespresso_rdmk.random_kpoints')
In [11]: RdmKWorkchain
Out[11]: aiida_quantumespresso_rdmk.workflows.rdmk.PwRdmKpointsWorkChain
However running it with a python script results in an error:
(test-aiida) gjoalland@ctimac001:~/work/project/AuAu/jupyter/rdmk$ cat test.py
from aiida.plugins import WorkflowFactory
from aiida import load_profile
import importlib.metadata
load_profile()
eps = importlib.metadata.entry_points()['aiida.workflows'][0]
print(eps)
RdmKWorkchain = WorkflowFactory('quantumespresso_rdmk.random_kpoints')
(test-aiida) gjoalland@ctimac001:~/work/project/rdmk$ python test.py
EntryPoint(name='phonopy.ase', value='aiida_phonopy.workflows.ase:PhonopyAseWorkChain', group='aiida.workflows')
Traceback (most recent call last):
File "/home/gjoalland/work/project/rdmk/test.py", line 10, in <module>
RdmKWorkchain = WorkflowFactory('quantumespresso_rdmk.random_kpoints')
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/factories.py", line 466, in WorkflowFactory
entry_point = BaseFactory(entry_point_group, entry_point_name, load=load)
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/factories.py", line 75, in BaseFactory
return load_entry_point(group, name)
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/entry_point.py", line 276, in load_entry_point
entry_point = get_entry_point(group, name)
File "/home/gjoalland/work/setup/aiida-core/src/aiida/plugins/entry_point.py", line 324, in get_entry_point
raise MissingEntryPointError(f"Entry point '{name}' not found in group '{group}'")
aiida.common.exceptions.MissingEntryPointError: Entry point 'quantumespresso_rdmk.random_kpoints' not found in group 'aiida.workflows'
Additionally, I cannot directly import it with the from aiida_quantumespresso_rdmk.workflows.rdmk import PwRdmKpointsWorkChain
line either in a script.