查看原文
其他

dpdata推出Format插件机制,实现与数据格式的无缝集成

曾晋哲 深度势能 2024-03-31


随着DP用户使用的计算软件愈加广泛,我们迫切需要将新的数据格式与dpdata无缝集成。近日,dpdata推出Format架构,此架构可提供一种通过dpdata注册新格式的插件机制,且无需更改dpdata代码。


无缝集成的需求

在此之前,任何新格式的集成都需要对dpdata进行修改。这种方式有下列缺点:

复杂的依赖项。不同格式可能需要额外的Python依赖项,增加dpdata的技术复杂性。

开发速度较慢。更改需要DeepModeling团队审核代码,这一过程比较耗时间,拖慢各种格式的开发速度,影响用户的使用。

需要测试大量格式。每个新格式都会增加测试的数量。

容易损坏。各种格式与主程序高度耦合,缺少明确定义的API,因此更容易遭到损坏。


何为Format插件?

Format插件机制无需针对特定格式对dpdata代码进行更改。该机制可以通过dpdata提供的Format API添加新格式。插件开发者可以为插件维护单独的代码仓库和分发软件包,并负责测试相应的格式。在这种情况下,dpdata主程序的依赖项和测试过程不会受到插件的影响。


Format插件机制有以下组件:

自定义Format类:插件通过继承dpdata.format.Format类将自己的数据格式注册到dpdata中,该子类应当具有相应的from_system、to_system、from_labeled_system、to_labeled_system等方法。

Format键:Format类通过Format.register装饰器注册数据格式的键,一个Format类可以注册多个键,但应当不与其它格式的键重复。


创建和使用Format插件

这里,我们试图创建一个名为random的新格式,它可以随机生成一串Frame,用于我们的范例。

from dpdata.format import Formatimport numpy as np
@Format.register("random")class RandomFormat(Format):    def from_system(self, N, **kwargs):        return {            "atom_numbs": [20],            "atom_names": ['X'],            "atom_types": [0] * 20,            "cells": np.repeat(np.diag(np.diag(np.ones((3, 3))))[np.newaxis,...], N, axis=0) * 100.,            "coords": np.random.rand(N, 20, 3) * 100.,        }

这里,我们创建了RandomFormat类,这个类具有一个from_system方法,返回了包含数据的字典。我们为RandomFormat注册了random的键。之后,我们便可以使用random格式:

print(dpdata.System(12, fmt="random"))

Data SummaryUnlabeled System

-------------------

Frame Numbers     : 12

Atom Numbers      : 20

Element List      :

-------------------

X

20


此外,我们还可以用setuptools将这个插件打包,发布到pypi上。

from setuptools import setup
setup(    name="dpdata_random",    packages=['dpdata_random'],    version='0.0.1',    entry_points={        'dpdata.plugins': [            'random=dpdata_random:RandomFormat'        ]    },    install_requires=['dpdata', 'numpy'],)

这里需要注意的是,我们需要将RandomFormat类注册到dpdata.plugins的entry point中。



Deep Modeling社区

诚邀投稿


如果你用Deep Modeling社区软件做了有趣的工作,想让更多人看见;

如果你发现Deep Modeling社区的软件神奇的应用,想与更多人分享;

如果你有对领域前沿的真知灼见,欲与大家分享,欢迎来稿!

我们的邮箱:

contact@deepmodeing.org



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存