robinzyb / cp2kdata Goto Github PK
View Code? Open in Web Editor NEWcp2k postprocessing tools
Home Page: https://robinzyb.github.io/cp2kdata/
License: GNU Lesser General Public License v3.0
cp2k postprocessing tools
Home Page: https://robinzyb.github.io/cp2kdata/
License: GNU Lesser General Public License v3.0
Dear developers,
I parsed my AIMD data with cp2kdata 0.6.4. and found that DeePMD-kit is struggle to train a model with low RMSEs with these data.
Previously, I used the built-in dpdata functions (kind of old dpdata-native version of parser) to parse this AIMD run and no problems were found: training was succesful. The DeePMD .json training parameters were completely the same.
Is something wrong with my cp2kdata parsing script? Looks like the data is completely untrainable. In figure, there are RMSE in energies for the cases of native dpdata parser and cp2kdata parser. Forces and virials show large RMSEs as well. I have a weak guess that there could be dimension mismatch (for example, forces are treated as eV/Angstrom instead of Hartree/Bohr or vice versa).
The CP2K version I used is 6.1. However, I can confirm that for the latest CP2K 2023.2 the problem is remaining.
Sincerely yours,
Dmitry
The file attached is the log of parsing with cp2kdata
There is the data gained from both dpdata and cp2kdata: https://drive.google.com/file/d/1I9B38WK-17srTUyVa5OtI5wFtIo64exb/view?usp=sharing
There is the archive with raw AIMD data I used: https://drive.google.com/file/d/1Rx6tiBuxLDMuJq8epHW-AKQhFKTNvDHZ/view?usp=sharing
dpdata Python script:
import dpdata
import numpy as np
cp2kdata = dpdata.LabeledSystem("1350", fmt="cp2k/aimd_output")
print("# the data contains %d frames" % len(cp2kdata))
index_validation = np.random.choice(len(cp2kdata), size=1500, replace=False)
index_training = list(set(range(len(cp2kdata))) - set(index_validation))
data_training = cp2kdata.sub_system(index_training)
data_validation = cp2kdata.sub_system(index_validation)
data_training.to_deepmd_npy("1350_train")
data_validation.to_deepmd_npy("1350_test")
cp2kdata Python script:
import dpdata
import numpy as np
cp2kmd_dir = "1350"
cp2kmd_output_name = "LiCl_KCl_1350.log"
cp2kdata = dpdata.LabeledSystem(cp2kmd_dir, cp2k_output_name=cp2kmd_output_name, fmt="cp2kdata/md")
print(cp2kdata)
index_validation = np.random.choice(len(cp2kdata), size=1500, replace=False)
index_training = list(set(range(len(cp2kdata))) - set(index_validation))
data_training = cp2kdata.sub_system(index_training)
data_validation = cp2kdata.sub_system(index_validation)
data_training.to_deepmd_npy("1350_train_cp2kdata")
data_validation.to_deepmd_npy("1350_test_cp2kdata")
if we parse the atomic kind of systems with over 100 atoms, the len of atomic_kind will be 99 while the len of atomic_kind_list will be larger than 99.
in output.py
def get_chemical_symbols_fake(self): if (self.atom_kind_list is not None) and (self.atomic_kind is not None): return self.atomic_kind[self.atom_kind_list-1]
there will be an error
'index 99 is out of bounds for axis 0 with size 99'
version of cp2k 7.1
version of cp2kdata 0.6.9
When parsing unfinished or manually touch EXIT
AIMD tasks, it might run into the following issue causing failure in reading.
It happens when the length of frames, energies, forces, or virials are not the same, while the expected solution, in my own opinion, is to just drop the last ones and throw out a warning about the dropping, for in detail check.
Traceback (most recent call last):
File "/public/home/ypliucat/.conda/envs/local/bin/ai2-kit", line 8, in <module>
sys.exit(main())
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/ai2_kit/main.py", line 123, in main
Fire(ai2_kit)
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/fire/core.py", line 141, in Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/fire/core.py", line 475, in _Fire
component, remaining_args = _CallAndUpdateTrace(
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/fire/core.py", line 691, in _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/ai2_kit/tool/dpdata.py", line 57, in read
self._read(file, **kwargs)
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/ai2_kit/tool/dpdata.py", line 120, in _read
system = dpdata.LabeledSystem(data_path, **kwargs)
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/dpdata/system.py", line 183, in __init__
self.from_fmt(
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/dpdata/system.py", line 220, in from_fmt
return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/dpdata/system.py", line 1113, in from_fmt_obj
data = fmtobj.from_labeled_system(file_name, **kwargs)
File "/public/home/ypliucat/.conda/envs/local/lib/python3.10/site-packages/cp2kdata/dpdata_plugin.py", line 133, in from_labeled_system
data['virials'] = cp2kmd.stress_tensor_list*volumes/EV_ANG_m3_TO_GPa
ValueError: operands could not be broadcast together with shapes (90,3,3) (89,1,1)
A case for testing is provided. example.tgz
Hi,
I am trying to convert AIMD trajectory with cp2kdata to get datasets for deepmd. my cp2k version is 2023.1 and cp2kdata version is 0.4.1. I have put my .out, .ener,frc.xyz and pos.xyz into same dictionary but still get err:
--- You are parsing data using package Cp2kData ---
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 281, in __init__
self.from_fmt(
File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 318, in from_fmt
return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 1162, in from_fmt_obj
data = fmtobj.from_labeled_system(file_name, **kwargs)
File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/dpdata_plugin.py", line 71, in from_labeled_system
cp2kmd = Cp2kOutput(output_file=cp2k_output_name, run_type="MD", path_prefix=path_prefix)
File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/output.py", line 83, in __init__
self.Cp2kInfo = parse_cp2k_info(self.filename)
File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/block_parser/header_info.py", line 24, in parse_cp2k_info
return Cp2kInfo(version=cp2k_info["version"][0][0][0])
IndexError: list index out of range
Here is the command I used:
import dpdata
from dpdata import System, LabeledSystem, MultiSystems
data=LabeledSystem('./xyz_3/', cp2k_output_name='cp2k.log', fmt="cp2kdata/md")
For now I have not figure out the reason. Hope you can help me. thanks!
Hi yongbin,
I was recently using dpdata to process cp2k data and found that I was getting results with missing atoms. Finally I found that cp2k version 9.1 is partially incompatible. Can you leave your email and I will send you the output file?
Hello
I have issues in converting cp2k data into deepmd format.
My initial AIMD trajectory format is .dcd. Then I converted it into .xyz with VMD program. I tried to convert dp format. but it failed. The command I used is:
import dpdata
dir = "."
output = "pos."
dp = dpdata.LabelSystem (dir, cp2k_output_name=output, fmt = cp2kdata/md)
Then it failed.
Obtian Energies From ./POSCAR-1.ener Obtian Structures From ./pos.xyz Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 281, in __init__ self.from_fmt( File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 318, in from_fmt return self.from_fmt_obj(load_format(fmt), file_name, **kwargs) File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 1162, in from_fmt_obj data = fmtobj.from_labeled_system(file_name, **kwargs) File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/dpdata_plugin.py", line 71, in from_labeled_system cp2kmd = Cp2kOutput(output_file=cp2k_output_name, run_type="MD", path_prefix=path_prefix) File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/output.py", line 100, in __init__ Parse_Run_Type[self.GlobalInfo.run_type]() File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/output.py", line 378, in parse_md self.atomic_frames_list, energies_list_from_pos, self.chemical_symbols = parse_pos_xyz(pos_xyz_file_list[0]) File "/home/polyucmp/anaconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/block_parser/md_xyz.py", line 26, in parse_pos_xyz energies_list.append(match["energy"]) TypeError: 'NoneType' object is not subscriptable
I cannot figure out what happened. Hope you can help me. Files are also attached.
Hello:
I encountered the following error when I try to prepare training data from the CP2K MD calculation with the dpdata plugin. I have the following output files in my working directory: energy.out (main output file), qmworks-cp2k-1.ener, qmworks-cp2k-1.cell, qmworks-cp2k-frc-1.xyz, qmworks-cp2k-pos-1.xyz, qmworks-cp2k-1.stress
CP2K VERSION: 6.1
Can you please provide some suggestions to resolve this error.
import dpdata
cp2kmd_dir = "./test"
cp2kmd_output_name = "energy.out"
dp = dpdata.LabeledSystem(cp2kmd_dir, cp2k_output_name=cp2kmd_output_name, fmt="cp2kdata/md")
--- You are parsing data using package Cp2kData ---
Traceback (most recent call last):
File "", line 1, in
File "/afs/enea.it/por/user/irpannee/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 281, in init
self.from_fmt(
File "/afs/enea.it/por/user/irpannee/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 318, in from_fmt
return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
File "/afs/enea.it/por/user/irpannee/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 1162, in from_fmt_obj
data = fmtobj.from_labeled_system(file_name, **kwargs)
File "/afs/enea.it/por/user/irpannee/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/dpdata_plugin.py", line 71, in from_labeled_system
cp2kmd = Cp2kOutput(output_file=cp2k_output_name, run_type="MD", path_prefix=path_prefix)
File "/afs/enea.it/por/user/irpannee/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/output.py", line 100, in init
Parse_Run_Typeself.GlobalInfo.run_type
File "/afs/enea.it/por/user/irpannee/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/output.py", line 390, in parse_md
self.num_frames = len(self.energies_list)
AttributeError: 'Cp2kOutput' object has no attribute 'energies_list'. Did you mean: 'get_energies_list'?
Could the cp2kdata distinguish eg and t2g orbitals and plot the respective PDOS?
When I was reading the file, an error occurred. I tried rerunning cp2k molecular dynamics, but the error still occurred. Can you help me check what the reason is?
--- You are parsing data using package Cp2kData ---
Parsing Energies from water-dp/water-300K-1.ener
Parsing Structures from water-dp/water-300K-pos-1.xyz
Parsing Froces from water-dp/water-300K-nvt.force-frc-1.xyz
Parsing Stress from the CP2K output/log file: water-dp/md.log
Parsing Cells Information from water-dp/md.log
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
Traceback (most recent call last):
File "/home/xwj/materials/water/water-deepmd/water-dp.py", line 16, in <module>
data = dpdata.LabeledSystem(cp2kmd_dir, cp2k_output_name=cp2kmd_output_name, fmt="cp2kdata/md")
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 183, in __init__
self.from_fmt(
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 220, in from_fmt
return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 1120, in from_fmt_obj
self.check_data()
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 207, in check_data
dd.check(self)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/data_type.py", line 112, in check
raise DataError(
dpdata.data_type.DataError: Shape of coords is (5404, 687, 3), but expected (5405, 687, 3)
I've looked at other files and they contain 5404 data, but why does it show that it expects 5405 data.
The following is the inp file of cp2k.
water.zip
Below is the complete file, which I put on my Google Cloud Drive.
https://drive.google.com/file/d/1lc9H1od_g-j335F1BqCi-ysP7EjV0evg/view?usp=drive_link
Regex in header_info.py
could not identify higher verison info for CP2K version of 7.1/9.1/2022.2.
It will report like that:
Traceback (most recent call last):
File "~/miniconda3/lib/python3.9/site-packages/cp2kdata/output.py", line 84, in __init__
self.DFTInfo = parse_dft_info(self.filename)
File "~/miniconda3/lib/python3.9/site-packages/cp2kdata/block_parser/header_info.py", line 81, in parse_dft_info
return DFTInfo(ks_type=dft_info["ks_type"][0][0][0], multiplicity=dft_info["multiplicity"][0][0][0])
IndexError: list index out of range
When I use cp2k to run molecular dynamics, I set some parameters so that the output data is output every 30 frames, but md.log file seems to output data once every frame. Can you tell me how to use cp2kdata to read such data, or whether you can add such a function.
I meet some questions, when I use cp2kdata, in my file ,there is no force,only energy. but the code cannot load it ,and remind it 'Cp2kOutput' object has no attribute 'energies_list', in the directoty, there are enter, two xyz files in it.
output.zip
I was recently using dpdata to process cp2k data and found that I was getting results with missing atoms. Finally I found that cp2k version 9.1 is partially incompatible. Can you leave your email and I will send you the output file?
I used the log file output from 9.1 and got an error.
I noticed that the output file in the test is also version 9.1 and NPT_I, but it still got an error. data=dpdata.LabeledSystem("./",cp2k_output_name="output",fmt="cp2kdata/md")
error: NotImplementedError: cp2k version=9.1 is not supported yet for parsing MD cell from cp2k log files.
Could you help me? Thank you very much!
Hi!
I noticed that the current version of cp2kdata does not support Python 3.7, as indicated by the requires-python = ">=3.8"
in the pyproject.toml
file. Previous versions did support Python 3.7. Could you please clarify why support for Python 3.7 was dropped?
Thank you!
When I was using the dpdata package to convert the output of cp2k aimd, some errors occurred. Hopefully someone can help me figure out what the problem is.
import dpdata
data = dpdata.LabeledSystem('./water-dp', cp2k_output_name = 'md.log', fmt="cp2kdata/md")
print(data)
The following is the error:
--- You are parsing data using package Cp2kData ---
Traceback (most recent call last):
File "/home/xwj/materials/water/water-deepmd/water-dp.py", line 10, in
data = dpdata.LabeledSystem('./{}-dp'.format(file_label), cp2k_output_name = 'md.log', fmt="cp2kdata/md")
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 183, in init
self.from_fmt(
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 220, in from_fmt
return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 1113, in from_fmt_obj
data = fmtobj.from_labeled_system(file_name, **kwargs)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/dpdata_plugin.py", line 73, in from_labeled_system
cp2kmd = Cp2kOutput(output_file=cp2k_output_name, run_type="MD", path_prefix=path_prefix)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/output.py", line 68, in init
self.dft_info = parse_dft_info(self.filename)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/block_parser/header_info.py", line 91, in parse_dft_info
return DFTInfo(ks_type=dft_info["ks_type"][0][0][0], multiplicity=dft_info["multiplicity"][0][0][0])
IndexError: list index out of range
(deepmd) xwj@ERNIC:~/materials/water/water-deepmd$ python water-dp.py
--- You are parsing data using package Cp2kData ---
Traceback (most recent call last):
File "/home/xwj/materials/water/water-deepmd/water-dp.py", line 10, in
data = dpdata.LabeledSystem('./{}-dp'.format(file_label), cp2k_output_name = 'md.log', fmt="cp2kdata/md")
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 183, in init
self.from_fmt(
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 220, in from_fmt
return self.from_fmt_obj(load_format(fmt), file_name, **kwargs)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/dpdata/system.py", line 1113, in from_fmt_obj
data = fmtobj.from_labeled_system(file_name, **kwargs)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/dpdata_plugin.py", line 73, in from_labeled_system
cp2kmd = Cp2kOutput(output_file=cp2k_output_name, run_type="MD", path_prefix=path_prefix)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/output.py", line 68, in init
self.dft_info = parse_dft_info(self.filename)
File "/home/xwj/miniconda3/envs/deepmd/lib/python3.10/site-packages/cp2kdata/block_parser/header_info.py", line 91, in parse_dft_info
return DFTInfo(ks_type=dft_info["ks_type"][0][0][0], multiplicity=dft_info["multiplicity"][0][0][0])
IndexError: list index out of range
I provided my .inp file, the other files are too big for me to upload:
water-dp.zip
I notice pytest is added to dependencies.
Lines 29 to 30 in 854d95e
Considering it's not used for runtime, it should be just added to optional dependncies.
Currently, as shown in dpdata/plugins/init.py, dpdata firstly loads built-in Formats and then loads external Formats. When we keep this behavior, it is possible to override the built-in Format with a compatible Format so users can use the original script without changing the code. DP-GEN doesn't need to change the code as well.
As I am manually parsing hundreds of single point calculations, it might cause the log like following:
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
--- You are parsing data using package Cp2kData ---
Atom names are fake chemical symbols as you set in cp2k input.
--- You are parsing data using package Cp2kData ---
It is too long to do any other thing, so it might be a good idea to add a silent mode. And in my opinion, print
is not an elegent way to print log in Python, while using logger.info()
might be more popular.
So I just submit my concern as an issue.
I am new to CP2K and DeepMD. I have been running AIMD simulations using CP2K and subsequently parsing the data with cp2kdata. However, I encountered an issue where only 1 frame is detected in the output, as shown in the attached screenshot.
Code Snippet
from cp2kdata import Cp2kOutput
cp2k_output_file = "cp2k.log"
cp2koutput = Cp2kOutput(output_file=cp2k_output_file, run_type="MD")
I have attached a screenshot of the issue for reference. If more information or files are needed, please let me know. Thank you for your assistance!
In following example:
cp2koutput=Cp2kOutput(output_file)
cp2koutput.get_geo_opt_info_plot()
A named “geo_opt_info.png” will be output in current directory where might not be well customized.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.