Fix flak8 warnings, make ipython hard-dep

This commit is contained in:
gmatteo 2021-05-26 23:26:17 +02:00
parent 084fa939a0
commit 313703278b
31 changed files with 68 additions and 62 deletions

View File

@ -356,7 +356,7 @@ def software_stack(as_dataframe=False):
try: try:
mod = import_module(pkg_name) mod = import_module(pkg_name)
return mod.__version__ return mod.__version__
except: except Exception:
return None return None
try: try:

View File

@ -749,7 +749,7 @@ def structure_from_abistruct_fmt(string):
v = xred[iatom] v = xred[iatom]
lines.append("%.16f %.16f %.16f" % (v[0], v[1], v[2])) lines.append("%.16f %.16f %.16f" % (v[0], v[1], v[2]))
s = "\n".join(head) + "\n" + "\n".join(lines) #; print(s) s = "\n".join(head) + "\n" + "\n".join(lines) #; print(s)
return AbinitInputFile.from_string(s).structure return AbinitInputFile.from_string(s).structure

View File

@ -1503,7 +1503,7 @@ def conduc_kerange_from_inputs(scf_input, nscf_input, tmesh, ddb_ngqpt, eph_ngqp
sigma_kerange[0] += epad sigma_kerange[0] += epad
if e_range > 0: if e_range > 0:
sigma_kerange[1] += epad sigma_kerange[1] += epad
# Modify the second nscf input to get a task that calculate the kpt in the sigma interval (Kerange.nc file) # Modify the second nscf input to get a task that calculate the kpt in the sigma interval (Kerange.nc file)
multi[2].set_vars(optdriver=8, wfk_task='"wfk_kpts_erange"', kptopt=1, multi[2].set_vars(optdriver=8, wfk_task='"wfk_kpts_erange"', kptopt=1,
sigma_ngkpt=sigma_ngkpt, einterp=einterp, sigma_erange=sigma_kerange) sigma_ngkpt=sigma_ngkpt, einterp=einterp, sigma_erange=sigma_kerange)

View File

@ -1138,7 +1138,7 @@ class KpointList(collections.abc.Sequence):
def plotly(self, fig=None, **kwargs): def plotly(self, fig=None, **kwargs):
"""Plot k-points with plotly.""" """Plot k-points with plotly."""
from abipy.tools.plotting import plotly_wigner_seitz, plotly_brillouin_zone from abipy.tools.plotting import plotly_brillouin_zone
fold = False fold = False
if self.is_path: if self.is_path:
labels = {k.name: k.frac_coords for k in self if k.name} labels = {k.name: k.frac_coords for k in self if k.name}

View File

@ -729,6 +729,7 @@ abilab.enable_notebook(with_seaborn=True)
nbformat.write(nb, fh) nbformat.write(nb, fh)
return nbpath return nbpath
class NotebookWriter(HasNotebookTools, metaclass=abc.ABCMeta): class NotebookWriter(HasNotebookTools, metaclass=abc.ABCMeta):
""" """
Mixin class for objects that are able to generate jupyter_ notebooks. Mixin class for objects that are able to generate jupyter_ notebooks.
@ -850,7 +851,7 @@ class NotebookWriter(HasNotebookTools, metaclass=abc.ABCMeta):
This function *generates* a predefined list of plotly figures with minimal input from the user. This function *generates* a predefined list of plotly figures with minimal input from the user.
Relies on yield_plotly_figs implemented by the subclass to generate the figures. Relies on yield_plotly_figs implemented by the subclass to generate the figures.
""" """
print("in plotly expose") #print("in plotly expose")
pn, template = self._get_panel_and_template() pn, template = self._get_panel_and_template()
pn.config.sizing_mode = 'stretch_width' pn.config.sizing_mode = 'stretch_width'

View File

@ -1315,7 +1315,6 @@ class Structure(pmg_Structure, NotebookWriter):
Args: Args:
with_cart_coords: True if Cartesian coordinates should be added as well. with_cart_coords: True if Cartesian coordinates should be added as well.
""" """
from collections import defaultdict
if with_cart_coords: if with_cart_coords:
group = {symb: {"site_idx": [], "frac_coords": [], "cart_coords": []} for symb in self.symbol_set} group = {symb: {"site_idx": [], "frac_coords": [], "cart_coords": []} for symb in self.symbol_set}
else: else:
@ -1339,8 +1338,8 @@ class Structure(pmg_Structure, NotebookWriter):
@add_fig_kwargs @add_fig_kwargs
def plot(self, **kwargs): def plot(self, **kwargs):
""" """
Plot structure in 3D with matplotlib. Return matplotlib Figure Plot structure in 3D with matplotlib. Return matplotlib Figure.
See plot_structure for kwargs See plot_structure for kwargs.
""" """
from abipy.tools.plotting import plot_structure from abipy.tools.plotting import plot_structure
return plot_structure(self, **kwargs) return plot_structure(self, **kwargs)
@ -1348,7 +1347,7 @@ class Structure(pmg_Structure, NotebookWriter):
@add_plotly_fig_kwargs @add_plotly_fig_kwargs
def plotly(self, **kwargs): def plotly(self, **kwargs):
""" """
Plot structure in 3D with plotly. Return plotly Figure Plot structure in 3D with plotly. Return plotly Figure.
See plot_structure for kwargs See plot_structure for kwargs
""" """
from abipy.tools.plotting import plotly_structure from abipy.tools.plotting import plotly_structure

View File

@ -1124,8 +1124,8 @@ See also <https://forum.abinit.org/viewtopic.php?f=10&t=545>
# Scatter plot with Bose-Einstein occupation factors for T = temp # Scatter plot with Bose-Einstein occupation factors for T = temp
factor = abu.phfactor_ev2units(units) factor = abu.phfactor_ev2units(units)
if temp < 1: temp = 1 if temp < 1: temp = 1
fig.layout.annotations=[dict(text="T = %.1f K" % temp, font_size=fontsize, x=0.5, xref='paper', fig.layout.annotations = [dict(text="T = %.1f K" % temp, font_size=fontsize, x=0.5, xref='paper',
xanchor='center', y=1, yref='paper', yanchor='bottom' ,showarrow=False)] xanchor='center', y=1, yref='paper', yanchor='bottom', showarrow=False)]
xs = np.arange(self.num_qpoints) xs = np.arange(self.num_qpoints)
for nu in self.branches: for nu in self.branches:
ws = self.phfreqs[:, nu] ws = self.phfreqs[:, nu]

View File

@ -10,7 +10,7 @@ from abipy.dfpt.ddb import DdbFile
from abipy.dfpt.phonons import PhononBands, get_dyn_mat_eigenvec, match_eigenvectors from abipy.dfpt.phonons import PhononBands, get_dyn_mat_eigenvec, match_eigenvectors
from abipy.abio.inputs import AnaddbInput from abipy.abio.inputs import AnaddbInput
from abipy.tools.plotting import add_fig_kwargs, get_ax_fig_plt, set_visible, get_fig_plotly, get_figs_plotly, \ from abipy.tools.plotting import add_fig_kwargs, get_ax_fig_plt, set_visible, get_fig_plotly, get_figs_plotly, \
add_plotly_fig_kwargs, plotlyfigs_to_browser, push_to_chart_studio, PlotlyRowColDesc add_plotly_fig_kwargs, plotlyfigs_to_browser, PlotlyRowColDesc
from pymatgen.core.units import bohr_to_angstrom, eV_to_Ha from pymatgen.core.units import bohr_to_angstrom, eV_to_Ha
@ -353,10 +353,10 @@ class SoundVelocity(Has_Structure, NotebookWriter):
if fig is None: if fig is None:
fig, _ = get_fig_plotly() fig, _ = get_fig_plotly()
fig.layout=dict(annotations=[dict(text=title, font_size=fontsize, x=0.5, xref='paper', xanchor='center', fig.layout = dict(annotations=[dict(text=title, font_size=fontsize, x=0.5, xref='paper', xanchor='center',
y=1, yref='paper', yanchor='bottom' ,showarrow=False)], y=1, yref='paper', yanchor='bottom' ,showarrow=False)],
yaxis_title_text=abu.wlabel_from_units(units, unicode=True), yaxis_title_text=abu.wlabel_from_units(units, unicode=True),
xaxis_title_text= "Wave Vector") xaxis_title_text="Wave Vector")
else: else:
fig.layout.annotations[idir].text = title fig.layout.annotations[idir].text = title
fig.layout.annotations[idir].font.size = fontsize fig.layout.annotations[idir].font.size = fontsize
@ -429,7 +429,7 @@ class SoundVelocity(Has_Structure, NotebookWriter):
horizontal_spacing=0.05) horizontal_spacing=0.05)
for i in range(self.n_directions): for i in range(self.n_directions):
rcd = PlotlyRowColDesc(i//2, i%2, nrows, ncols) rcd = PlotlyRowColDesc(i // 2, i % 2, nrows, ncols)
self.plotly_fit_freqs_dir(i, fig, rcd, units=units, fontsize=fontsize, show=False) self.plotly_fit_freqs_dir(i, fig, rcd, units=units, fontsize=fontsize, show=False)
return fig return fig

View File

@ -449,7 +449,6 @@ class HistFile(AbinitNcFile, NotebookWriter):
# yield self.plotly(show=False) # yield self.plotly(show=False)
# yield self.plotly_energies(show=False) # yield self.plotly_energies(show=False)
def mvplot_trajectories(self, colormap="hot", sampling=1, figure=None, show=True, def mvplot_trajectories(self, colormap="hot", sampling=1, figure=None, show=True,
with_forces=True, **kwargs): # pragma: no cover with_forces=True, **kwargs): # pragma: no cover
""" """

View File

@ -1,7 +1,7 @@
# coding: utf-8 # coding: utf-8
"""Density/potential files in netcdf/fortran format.""" """Density/potential files in netcdf/fortran format."""
import os import os
import tempfile #import tempfile
#import numpy as np #import numpy as np
from monty.string import marquee from monty.string import marquee

View File

@ -1410,7 +1410,7 @@ class ElectronBands(Has_Structure):
if unicode: if unicode:
import re import re
numl=re.findall(r'\d', formula) numl = re.findall(r'\d', formula)
for s in numl: for s in numl:
formula = formula.replace(s,SUBSCRIPT_UNICODE[s]) formula = formula.replace(s,SUBSCRIPT_UNICODE[s])
@ -1459,7 +1459,6 @@ class ElectronBands(Has_Structure):
k0_list.append(k) k0_list.append(k)
effmass_bands_f90.append(v) effmass_bands_f90.append(v)
# Set small values to zero. # Set small values to zero.
k0_list = np.reshape(k0_list, (-1, 3)) k0_list = np.reshape(k0_list, (-1, 3))
k0_list = np.where(np.abs(k0_list) > 1e-12, k0_list, 0.0) k0_list = np.where(np.abs(k0_list) > 1e-12, k0_list, 0.0)
@ -2105,7 +2104,7 @@ class ElectronBands(Has_Structure):
ply_row, ply_col = rcd.ply_row, rcd.ply_col ply_row, ply_col = rcd.ply_row, rcd.ply_col
# Decorate the axis (e.g add ticks and labels). # Decorate the axis (e.g add ticks and labels).
self.decorate_plotly(fig, klabels=klabels, iax = rcd.iax) self.decorate_plotly(fig, klabels=klabels, iax=rcd.iax)
plotly_set_lims(fig, ylims, "y") plotly_set_lims(fig, ylims, "y")
# Plot the band energies. # Plot the band energies.
@ -2386,12 +2385,12 @@ class ElectronBands(Has_Structure):
fig.add_scatter(x=xx, y=yy, mode="lines", name=label, showlegend=showlegend, line=line_opts, **kwargs, fig.add_scatter(x=xx, y=yy, mode="lines", name=label, showlegend=showlegend, line=line_opts, **kwargs,
row=ply_row, col=ply_col) row=ply_row, col=ply_col)
label = '' label = ''
showlegend=False showlegend = False
if with_linewidths: if with_linewidths:
w = self.linewidths[spin, :, band] * lw_fact / 2 w = self.linewidths[spin, :, band] * lw_fact / 2
lw_color = lines[-1].get_color()
raise NotImplementedError raise NotImplementedError
#lw_color = lines[-1].get_color()
# solution 1: Use scater points to fill # solution 1: Use scater points to fill
# solution 2: add two traces and fill the area between # solution 2: add two traces and fill the area between
# color problem # color problem
@ -3978,7 +3977,7 @@ class ElectronDos(object):
fig.add_scatter(x=x, y=y, mode='lines', name=trace_name, showlegend=showlegend, line=opts, **kwargs) fig.add_scatter(x=x, y=y, mode='lines', name=trace_name, showlegend=showlegend, line=opts, **kwargs)
xlabel, ylabel = 'Energy (eV)', 'DOS (states/eV)' xlabel, ylabel = 'Energy (eV)', 'DOS (states/eV)'
if exchange_xy: xlabel, ylabel = ylabel, xlabel if exchange_xy: xlabel, ylabel = ylabel, xlabel
fig.layout.xaxis.title = xlabel fig.layout.xaxis.title = xlabel
fig.layout.yaxis.title = ylabel fig.layout.yaxis.title = ylabel
plotly_set_lims(fig, xlims, "x") plotly_set_lims(fig, xlims, "x")

View File

@ -625,7 +625,8 @@ class RtaRobot(Robot, RobotWithEbands):
#def get_mobility_mu_dataframe(self, eh=0, component='xx', itemp=0, spin=0, **kwargs): #def get_mobility_mu_dataframe(self, eh=0, component='xx', itemp=0, spin=0, **kwargs):
@add_fig_kwargs @add_fig_kwargs
def plot_mobility_kconv(self, eh=0, bte=['serta','mrta','ibte'], component='xx', itemp=0, spin=0, fontsize=14, ax=None, **kwargs): def plot_mobility_kconv(self, eh=0, bte=('serta', 'mrta', 'ibte'), component='xx', itemp=0, spin=0,
fontsize=14, ax=None, **kwargs):
""" """
Plot the convergence of the mobility as a function of the number of k-points, Plot the convergence of the mobility as a function of the number of k-points,
for different transport formalisms included in the computation. for different transport formalisms included in the computation.
@ -662,9 +663,9 @@ class RtaRobot(Robot, RobotWithEbands):
if 'serta' in bte: if 'serta' in bte:
mob_serta = ncfile.reader.read_variable("mobility_mu")[0, spin, itemp, eh, j, i] mob_serta = ncfile.reader.read_variable("mobility_mu")[0, spin, itemp, eh, j, i]
if 'mrta' in bte: if 'mrta' in bte:
mob_mrta = ncfile.reader.read_variable("mobility_mu")[1, spin, itemp, eh, j, i] mob_mrta = ncfile.reader.read_variable("mobility_mu")[1, spin, itemp, eh, j, i]
if 'ibte' in bte: if 'ibte' in bte:
mob_ibte = ncfile.reader.read_variable("ibte_mob")[spin, itemp, eh, j, i] mob_ibte = ncfile.reader.read_variable("ibte_mob")[spin, itemp, eh, j, i]
res.append([kptrlattx, mob_serta, mob_mrta, mob_ibte]) res.append([kptrlattx, mob_serta, mob_mrta, mob_ibte])
temps.append(ncfile.tmesh[itemp]) temps.append(ncfile.tmesh[itemp])
@ -789,7 +790,7 @@ class RtaRobot(Robot, RobotWithEbands):
#if self.all_have_ibte: #if self.all_have_ibte:
yield self.plot_ibte_mrta_serta_conv(show=False) yield self.plot_ibte_mrta_serta_conv(show=False)
yield self.plot_ibte_vs_rta_rho(show=False) yield self.plot_ibte_vs_rta_rho(show=False)
# Determine the independent component. For the time being, # Determine the independent component. For the time being,
# only consider the cubic case separately # only consider the cubic case separately
abifile = self.abifiles[0] abifile = self.abifiles[0]

View File

@ -15,6 +15,7 @@ import abipy.data as abidata
from abipy import flowtk from abipy import flowtk
def make_scf_input(ngkpt, paral_kgb=0): def make_scf_input(ngkpt, paral_kgb=0):
""" """
This function constructs the input file for the GS calculation for a given IBZ sampling. This function constructs the input file for the GS calculation for a given IBZ sampling.

View File

@ -13,8 +13,6 @@ import abipy.abilab as abilab
import abipy.flowtk as flowtk import abipy.flowtk as flowtk
import abipy.core.abinit_units as abu import abipy.core.abinit_units as abu
from abipy.abilab import abiopen
def build_flow(options): def build_flow(options):
# Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_") # Working directory (default is the name of the script with '.py' removed and "run_" replaced by "flow_")

View File

@ -14,6 +14,7 @@ from abipy import abilab
# NB: This flow requires abinit >= "8.5.2" # NB: This flow requires abinit >= "8.5.2"
def make_scf_input(ecut=10, ngkpt=(8, 8, 8)): def make_scf_input(ecut=10, ngkpt=(8, 8, 8)):
""" """
This function constructs an `AbinitInput` for performing a This function constructs an `AbinitInput` for performing a

View File

@ -1,10 +1,11 @@
#!/usr/bin/env python #!/usr/bin/env python
r""" r"""
Phonopy + Abinit Flow Phonopy with AbiPy Flow
===================== =======================
This example shows how to compute phonon frequencies with phonopy This example shows how to compute phonon frequencies with phonopy
(supercells and finite-difference method). (supercells and finite-difference method).
This approach could be useful to obtain vibrational properties with XC functionals This approach could be useful to obtain vibrational properties with XC functionals
for which DFPT is not yet implemented. for which DFPT is not yet implemented.

View File

@ -11,7 +11,7 @@ import abipy.data as abidata
phdos_path = abidata.ref_file("al_161616q_PHDOS.nc") phdos_path = abidata.ref_file("al_161616q_PHDOS.nc")
ncfile = abilab.abiopen(abidata.ref_file("al_888k_161616q_A2F.nc")) ncfile = abilab.abiopen(abidata.ref_file("al_888k_161616q_A2F.nc"))
print(ncfile) print(ncfile)
#ncfile.phbands.plot() #ncfile.phbands.plot()

View File

@ -582,7 +582,7 @@ qadapters:
qname: localhost qname: localhost
job: job:
mpi_runner: mpirun mpi_runner: mpirun
pre_run: pre_run:
# List of shell commands executed before running abinit # List of shell commands executed before running abinit
# Change this part according to your Abinit installation and the location of the shared libs # Change this part according to your Abinit installation and the location of the shared libs
- export OMP_NUM_THREADS=1 - export OMP_NUM_THREADS=1
@ -623,15 +623,15 @@ Cannot locate `{cls.YAML_FILE}` neither in current directory nor in `{path}`
!!! PLEASE READ THIS !!! !!! PLEASE READ THIS !!!
To run AbiPy flows you need a manager.yaml describing your computer/cluster To run AbiPy flows you need a manager.yaml describing your computer/cluster
as well as the job submission engine being used (shell, Slurm, PBS, etc). as well as the job submission engine being used (shell, Slurm, PBS, etc).
Examples are provided in the `abipy/data/managers` directory. Examples are provided in the `abipy/data/managers` directory.
Use `abidoc.py manager` to access the documentation from the terminal. Use `abidoc.py manager` to access the documentation from the terminal.
See also https://abinit.github.io/abipy/workflows/manager_examples.html for examples. See also https://abinit.github.io/abipy/workflows/manager_examples.html for examples.
A minimalistic example of manager.yml for a laptop with the shell engine is reported below: A minimalistic example of manager.yml for a laptop with the shell engine is reported below:
{cls.get_simple_manager()} {cls.get_simple_manager()}
""", color="red")) """, color="red"))
@ -3945,7 +3945,8 @@ class KerangeTask(AbinitTask):
""" """
Class for kerange calculations. Class for kerange calculations.
""" """
color_rgb = np.array((255, 128, 0)) / 255 color_rgb = np.array((255, 128, 128)) / 255
class ManyBodyTask(AbinitTask): class ManyBodyTask(AbinitTask):
""" """

View File

@ -468,9 +468,9 @@ class NodeContainer(metaclass=abc.ABCMeta):
kwargs.update({"manager": seq_manager}) kwargs.update({"manager": seq_manager})
if eph_inp.get("eph_task",0) == -4: if eph_inp.get("eph_task",0) == -4:
max_cores = TaskManager.from_user_config().qadapter.max_cores max_cores = TaskManager.from_user_config().qadapter.max_cores
natom3 = 3 * len(eph_inp.structure) natom3 = 3 * len(eph_inp.structure)
nprocs = max(max_cores - max_cores % natom3, 1) nprocs = max(max_cores - max_cores % natom3, 1)
new_manager = TaskManager.from_user_config().new_with_fixed_mpi_omp(nprocs, 1) new_manager = TaskManager.from_user_config().new_with_fixed_mpi_omp(nprocs, 1)
kwargs.update({"manager": new_manager}) kwargs.update({"manager": new_manager})

View File

@ -160,7 +160,7 @@ def itest_phonon_restart(fwp):
tolvrs=1.0e-5, tolvrs=1.0e-5,
) )
multi = abilab.MultiDataset(structure=structure, multi = abilab.MultiDataset(structure=structure,
pseudos=abidata.pseudos("13al.981214.fhi", "33as.pspnc"), pseudos=abidata.pseudos("13al.981214.fhi", "33as.pspnc"),
ndtset=1 + len(qpoints)) ndtset=1 + len(qpoints))

View File

@ -77,7 +77,7 @@ def get_template_cls_from_name(name):
if hasattr(pn.template, name): if hasattr(pn.template, name):
return getattr(pn.template, name) return getattr(pn.template, name)
try_name = name + "Template" try_name = name + "Template"
if hasattr(pn.template, try_name): if hasattr(pn.template, try_name):
return getattr(pn.template, try_name) return getattr(pn.template, try_name)
@ -87,7 +87,6 @@ Possible templates are: {list(pn.template.__dict__.keys())}
""") """)
def depends_on_btn_click(btn_name): def depends_on_btn_click(btn_name):
def decorator(func): def decorator(func):
@ -190,9 +189,11 @@ If everything is properly configured, a new window is automatically created in y
""") """)
btn = pnw.Button(name="Upload to chart studio server") btn = pnw.Button(name="Upload to chart studio server")
def push_to_cs(event): def push_to_cs(event):
with ButtonContext(btn): with ButtonContext(btn):
push_to_chart_studio(fig) push_to_chart_studio(fig)
btn.on_click(push_to_cs) btn.on_click(push_to_cs)
if with_help: if with_help:
@ -397,7 +398,6 @@ class AbipyParameterized(param.Parameterized):
Please **refresh** the page using the refresh button of the browser if plotly figures are not shown. Please **refresh** the page using the refresh button of the browser if plotly figures are not shown.
""") """)
#def __repr__(self): #def __repr__(self):
# # https://github.com/holoviz/param/issues/396 # # https://github.com/holoviz/param/issues/396
# return f"AbiPyParametrized(name='{self.name}')" # return f"AbiPyParametrized(name='{self.name}')"
@ -516,7 +516,6 @@ class HasStructureParams(AbipyParameterized):
objects=[None, "jsmol", "vesta", "xcrysden", "vtk", "crystalk", "ngl", objects=[None, "jsmol", "vesta", "xcrysden", "vtk", "crystalk", "ngl",
"matplotlib", "plotly", "ase_atoms", "mayavi"]) "matplotlib", "plotly", "ase_atoms", "mayavi"])
#def __init__(self, **params): #def __init__(self, **params):
# self.struct_view_btn = pnw.Button(name="View structure", button_type='primary') # self.struct_view_btn = pnw.Button(name="View structure", button_type='primary')
# super(self).__init__(**params) # super(self).__init__(**params)
@ -639,7 +638,7 @@ def get_structure_info(structure):
df_len = pd.DataFrame(rows, index=["", "Bohr"]).transpose().rename_axis("Lattice lenghts") df_len = pd.DataFrame(rows, index=["", "Bohr"]).transpose().rename_axis("Lattice lenghts")
# Build dataframe with lattice angles. # Build dataframe with lattice angles.
rows = []; keys = ("alpha", "beta", "gamma") rows = []; keys = ("alpha", "beta", "gamma")
rows.append({k: d[k] for k in keys}) rows.append({k: d[k] for k in keys})
rows.append({k: np.radians(d[k]) for k in keys}) rows.append({k: np.radians(d[k]) for k in keys})
df_ang = pd.DataFrame(rows, index=["Degrees", "Radians"]).transpose().rename_axis("Lattice angles") df_ang = pd.DataFrame(rows, index=["Degrees", "Radians"]).transpose().rename_axis("Lattice angles")
@ -713,7 +712,7 @@ class PanelWithElectronBands(AbipyParameterized):
# e-DOS plot. # e-DOS plot.
edos_method = param.ObjectSelector(default="gaussian", objects=["gaussian", "tetra"], doc="e-DOS method") edos_method = param.ObjectSelector(default="gaussian", objects=["gaussian", "tetra"], doc="e-DOS method")
edos_step_ev = param.Number(0.1, bounds=(1e-6, None), step=0.1, doc='e-DOS step in eV') edos_step_ev = param.Number(0.1, bounds=(1e-6, None), step=0.1, doc='e-DOS step in eV')
edos_width_ev = param.Number(0.2, step=0.05, bounds=(1e-6, None), doc='e-DOS Gaussian broadening in eV' ) edos_width_ev = param.Number(0.2, step=0.05, bounds=(1e-6, None), doc='e-DOS Gaussian broadening in eV')
# SKW interpolation of the KS band energies. # SKW interpolation of the KS band energies.
skw_lpratio = param.Integer(5, bounds=(1, None)) skw_lpratio = param.Integer(5, bounds=(1, None))

View File

@ -600,6 +600,7 @@ class DdbRobotPanel(BaseRobotPanel, HasAnaddbParams):
"""Return tabs with widgets to interact with the DDB file.""" """Return tabs with widgets to interact with the DDB file."""
robot = self.robot robot = self.robot
d = {}
d["Summary"] = pn.Row( d["Summary"] = pn.Row(
bkw.PreText(text=robot.to_string(verbose=self.verbose), sizing_mode="scale_both") bkw.PreText(text=robot.to_string(verbose=self.verbose), sizing_mode="scale_both")
) )

View File

@ -4,7 +4,7 @@ import panel as pn
import panel.widgets as pnw import panel.widgets as pnw
import bokeh.models.widgets as bkw import bokeh.models.widgets as bkw
from abipy.panels.core import AbipyParameterized, ButtonContext, mpl, ply, depends_on_btn_click from abipy.panels.core import AbipyParameterized, mpl, ply, depends_on_btn_click
_what_list = ["pressure", "forces", "energy", "abc", "angles", "volume"] _what_list = ["pressure", "forces", "energy", "abc", "angles", "volume"]

View File

@ -4,7 +4,7 @@
import panel as pn import panel as pn
#import panel.widgets as pnw #import panel.widgets as pnw
import bokeh.models.widgets as bkw import bokeh.models.widgets as bkw
from abipy.panels.core import AbipyParameterized, mpl, ply, dfc #, ButtonContext from abipy.panels.core import AbipyParameterized, mpl, ply, dfc
class AbinitOutputFilePanel(AbipyParameterized): class AbinitOutputFilePanel(AbipyParameterized):

View File

@ -3,7 +3,7 @@ import param
import panel as pn import panel as pn
import panel.widgets as pnw import panel.widgets as pnw
from abipy.panels.core import AbipyParameterized, ButtonContext, mpl, ply, dfc, depends_on_btn_click from abipy.panels.core import AbipyParameterized, mpl, ply, dfc, depends_on_btn_click
class PhononBandsPlotterPanel(AbipyParameterized): class PhononBandsPlotterPanel(AbipyParameterized):

View File

@ -5,7 +5,7 @@ import panel as pn
import panel.widgets as pnw import panel.widgets as pnw
import bokeh.models.widgets as bkw import bokeh.models.widgets as bkw
from abipy.panels.core import HasStructureParams, ButtonContext, dfc, mpl, ply, depends_on_btn_click from abipy.panels.core import HasStructureParams, dfc, mpl, ply, depends_on_btn_click
class StructurePanel(HasStructureParams): class StructurePanel(HasStructureParams):

View File

@ -676,9 +676,9 @@ def _invoke_robot(options):
if options.plotly: if options.plotly:
# plotly version. # plotly version.
if hasattr(robot, "plotly_expose"): if hasattr(robot, "plotly_expose"):
robot.plotly_expose(chart_studio=options.chart_studio, verbose=options.verbose) robot.plotly_expose(chart_studio=options.chart_studio, verbose=options.verbose)
else: else:
cprint("<%s> does not implement plotly_expose method" % type(robot), color="red") cprint("<%s> does not implement plotly_expose method" % type(robot), color="red")
elif hasattr(robot, "expose"): elif hasattr(robot, "expose"):
# matplotlib version. # matplotlib version.

View File

@ -123,6 +123,8 @@ def display_top(snapshot, key_type='lineno', limit=3):
snapshot = tracemalloc.take_snapshot() snapshot = tracemalloc.take_snapshot()
display_top(snapshot) display_top(snapshot)
""" """
import tracemalloc
import linecache
snapshot = snapshot.filter_traces(( snapshot = snapshot.filter_traces((
tracemalloc.Filter(False, "<frozen importlib._bootstrap>"), tracemalloc.Filter(False, "<frozen importlib._bootstrap>"),
tracemalloc.Filter(False, "<unknown>"), tracemalloc.Filter(False, "<unknown>"),

View File

@ -566,7 +566,7 @@ class PanelExpose(object): # pragma: no cover
self.verbose = verbose self.verbose = verbose
if self.verbose: if self.verbose:
print("\nLoading all figures before showing them. It may take some time...") print("\nLoading all figures before showing them. It may take some time...")
self.start_time = time.time() self.start_time = time.time()
@ -979,7 +979,7 @@ class PlotlyRowColDesc(object):
# Assume list with 4 integers # Assume list with 4 integers
try: try:
return cls(*obj) return cls(*obj)
except exc: except Exception as exc:
raise TypeError(f"Dont know how to convert `{type(obj)}` into `{cls}`") raise TypeError(f"Dont know how to convert `{type(obj)}` into `{cls}`")
def __init__(self, py_row, py_col, nrows, ncols): def __init__(self, py_row, py_col, nrows, ncols):
@ -1328,6 +1328,7 @@ def push_to_chart_studio(figs):
#################################################### ####################################################
import plotly.graph_objects as go import plotly.graph_objects as go
def go_points(points, size=4, color="black", labels=None, **kwargs): def go_points(points, size=4, color="black", labels=None, **kwargs):
#textposition = 'top right', #textposition = 'top right',
@ -1486,7 +1487,6 @@ def plot_fcc_prim():
fcc_conv = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) fcc_conv = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
fcc_conv_box = get_box(fcc_conv, name="conv lattice") fcc_conv_box = get_box(fcc_conv, name="conv lattice")
fig = go.Figure(data=[*fcc_prim_box, *fcc_prim_vectors, *fcc_conv_box, atoms]) fig = go.Figure(data=[*fcc_prim_box, *fcc_prim_vectors, *fcc_conv_box, atoms])
return fig return fig

View File

@ -1,4 +1,3 @@
ipython
jupyter jupyter
nbformat nbformat
pygments pygments
@ -11,7 +10,6 @@ ase
param param
panel panel
bokeh bokeh
chart-studio
XlsxWriter # For DataFrame.to_excel() XlsxWriter # For DataFrame.to_excel()
# Unit tests # Unit tests
python-coveralls python-coveralls

View File

@ -59,10 +59,15 @@ pytest -n 2 --cov-config=.coveragerc --cov=abipy -v --doctest-modules abipy \
def style(ctx): def style(ctx):
with cd(ABIPY_ROOTDIR): with cd(ABIPY_ROOTDIR):
ctx.run("pycodestyle 2>&1 | tee style.log", pty=True) ctx.run("pycodestyle 2>&1 | tee style.log", pty=True)
ctx.run("flake8 --count --show-source --statistics | tee -a style.log", pty=True)
#ctx.run("pydocstyle abipy | tee -a style.log", pty=True) #ctx.run("pydocstyle abipy | tee -a style.log", pty=True)
@task
def flake(ctx):
with cd(ABIPY_ROOTDIR):
ctx.run("flake8 --count --show-source --statistics | tee -a style.log", pty=True)
@task @task
def plots(ctx): def plots(ctx):
with cd(os.path.join(ABIPY_ROOTDIR, "abipy", "examples")): with cd(os.path.join(ABIPY_ROOTDIR, "abipy", "examples")):