# pandasPGS: a Python package for easy retrieval of PGS Catalog data
## Installation
`pip install pandaspgs`
## Documentation
See [pandasPGS Documentation](https://tianzelab.github.io/pandaspgs/)
## Licensing information
### Source code
MIT License
### Data from PGS Catalog
The PGS Catalog and all its contents are available under the general terms of use for EMBL-EBI services
## Example 1. Investigating trends in diabetes-related polygenic risk scores
### Step 1
```Python
from pandaspgs import *
from plotnine import*
```
### Step 2
```Python
traits = get_traits(term='diabetes')
traits
# Trait is running in fat mode. It has 6 DataFrames with hierarchical dependencies.
# traits: 6 rows
# |
# -associated_pgs_ids: 186 rows
# |
# -child_associated_pgs_ids:265 rows
# |
# -trait_categories: 13 rows
# |
# -trait_mapped_terms: 57 rows
# |
# -trait_synonyms: 66 rows
```
### Step 3
```Python
traits.traits
# id label description url
# 0 EFO_0000400 diabetes mellitus A metabolic disorder characterized by abnormal... http://www.ebi.ac.uk/efo/EFO_0000400
# 1 EFO_0006842 diabetes mellitus biomarker http://www.ebi.ac.uk/efo/EFO_0006842
# 2 EFO_0003770 diabetic retinopathy A chronic, pathological complication associate... http://www.ebi.ac.uk/efo/EFO_0003770
# 3 EFO_0004593 gestational diabetes Carbohydrate intolerance first diagnosed durin... http://www.ebi.ac.uk/efo/EFO_0004593
# 4 MONDO_0005147 type 1 diabetes mellitus A chronic condition characterized by minimal o... http://purl.obolibrary.org/obo/MONDO_0005147
# 5 MONDO_0005148 type 2 diabetes mellitus A type of diabetes mellitus that is characteri... http://purl.obolibrary.org/obo/MONDO_0005148
```
### Step 4
```Python
score1 = get_scores(trait_id='EFO_0000400')
score2 = get_scores(trait_id='EFO_0006842')
score3 = get_scores(trait_id='EFO_0003770')
score4 = get_scores(trait_id='EFO_0004593')
score5 = get_scores(trait_id='MONDO_0005147')
score6 = get_scores(trait_id='MONDO_0005148')
diabetes_score = score1+score2+score3+score4+score5+score6
diabetes_score
# Score is running in fat mode. It has 7 DataFrames with hierarchical dependencies.
# scores:186 rows
# |
# -samples_variants: 253 rows
# |
# -samples_variants_cohorts: 386 rows
# |
# -samples_training: 107 rows
# |
# -samples_training_cohorts: 97 rows
# |
# -trait_efo: 195 rows
# |
# -ancestry_distribution: 447 rows
```
### Step 5
```Python
pic=ggplot(diabetes_score.trait_efo)+geom_bar(aes(x='label'))+coord_flip()
pic.save(filename='Additional file 1.png',dpi=300)
```
## Example 2: Investigating polygenic risk scores for gestational diabetes
### Step 1
```Python
from pandaspgs import *
```
### Step 2
```Python
traits = get_traits(term='gestational diabetes')
traits.traits
# id label description url
# 0 EFO_0004593 gestational diabetes Carbohydrate intolerance first diagnosed durin... http://www.ebi.ac.uk/efo/EFO_0004593
traits.traits['id'][0]
# 'EFO_0004593'
traits.traits['description'][0]
# 'Carbohydrate intolerance first diagnosed during pregnancy. [NCIT: P378]'
```
### Step 3
```Python
gd_pgs = get_scores(trait_id='EFO_0004593')
gd_pgs.scores
# id name ftp_scoring_file matches_publication trait_reported trait_additional method_name method_params variants_number variants_interactions variants_genomebuild weight_type date_release license publication.id publication.title publication.doi publication.PMID publication.journal publication.firstauthor publication.date_publication ftp_harmonized_scoring_files.GRCh38.positions ftp_harmonized_scoring_files.GRCh37.positions
# 0 PGS002256 GRS4_GDM https://ftp.ebi.ac.uk/pub/databases/spot/pgs/s... True Gestational diabetes mellitus in early pregnancy None Genome-wide significant variants p < 0.05 4 0 NR log(OR) 2022-02-16 PGS obtained from the Catalog should be cited ... PGP000282 An early prediction model for gestational diab... 10.1186/s13098-022-00788-y 35073990 Diabetol Metab Syndr Wu Q 2022-01-24 https://ftp.ebi.ac.uk/pub/databases/spot/pgs/s... https://ftp.ebi.ac.uk/pub/databases/spot/pgs/s...
gd_pgs.scores['id'][0]
# PGS002256
gd_pgs.scores['name'][0]
# 'GRS4_GDM'
gd_pgs.scores['matches_publication'][0]
# True
gd_pgs.scores['trait_reported'][0]
# 'Gestational diabetes mellitus in early pregnancy'
gd_pgs.scores['variants_number'][0]
# 4
```
### Step 4
```Python
gd_pgs.scores['publication.id'][0]
# PGP000282
gd_pgs.scores['publication.PMID'][0]
# 35073990
gd_pgs.scores['publication.date_publication'][0]
# '2022-01-24'
gd_pgs.scores['publication.journal'][0]
# 'Diabetol Metab Syndr'
gd_pgs.scores['publication.title'][0]
# 'An early prediction model for gestational diabetes mellitus based on genetic variants and clinical characteristics in China.'
open_in_pubmed(gd_pgs.scores['publication.PMID'][0])
```
### Step 5
```Python
gd_pgs.samples_variants
# sample_number sample_cases sample_controls sample_percent_male sample_age phenotyping_free followup_time ancestry_broad ancestry_free ancestry_country ancestry_additional source_GWAS_catalog source_PMID source_DOI cohorts_additional id score_id followup_time.estimate_type followup_time.estimate followup_time.interval.type followup_time.interval.lower followup_time.interval.upper followup_time.variability_type followup_time.variability followup_time.unit
# 0 671 332 339 0.0 None None None East Asian Chinese China None None None None None 0 PGS002256 NaN NaN NaN NaN NaN NaN NaN NaN
gd_pgs.samples_variants['sample_number'][0]
# 671
gd_pgs.samples_variants['ancestry_broad'][0]
# 'East Asian'
```
### Step 6
```Python
gd_file = read_scoring_file('PGS002256')
gd_file
# rsID effect_allele other_allele effect_weight hm_source hm_rsID hm_chr hm_pos hm_inferOtherAllele
# 0 rs10830963 G C 1.327 ENSEMBL rs10830963 11 92708710 NaN
# 1 rs1436953 T C 1.292 ENSEMBL rs1436953 15 62414014 NaN
# 2 rs7172432 G A 1.283 ENSEMBL rs7172432 15 62396389 NaN
# 3 rs16955379 C T 1.220 ENSEMBL rs16955379 16 81489373 NaN
```
### Step 7
```Python
snp1=gd_file[['rsID','effect_allele','other_allele','effect_weight']].loc[0]
snp1
# rsID rs10830963
# effect_allele G
# other_allele C
# effect_weight 1.327
# Name: 0, dtype: object
from pandaspgs.file_operation import genotype_weighted_score
genotype_weighted_score(snp1)
# rs10830963_genotype rs10830963_weighted_score
# 0 G/G 2.654
# 1 G/C 1.327
# 2 C/C 0.000
```
### Step 8
```Python
df_list = []
for x in range(len(gd_file)):
snp_x = gd_file[['rsID','effect_allele','other_allele','effect_weight']].loc[x]
df_x = genotype_weighted_score(snp_x)
df_x['key'] = 1
df_list.append(df_x)
from functools import reduce
combination_df = reduce(lambda x, y: x.merge(y,on='key'), df_list)
del combination_df['key']
combination_df
# rs10830963_genotype rs10830963_weighted_score rs1436953_genotype rs1436953_weighted_score rs7172432_genotype rs7172432_weighted_score rs16955379_genotype rs16955379_weighted_score
# 0 G/G 2.654 T/T 2.584 G/G 2.566 C/C 2.44
# 1 G/G 2.654 T/T 2.584 G/G 2.566 C/T 1.22
# 2 G/G 2.654 T/T 2.584 G/G 2.566 T/T 0.00
# 3 G/G 2.654 T/T 2.584 G/A 1.283 C/C 2.44
# 4 G/G 2.654 T/T 2.584 G/A 1.283 C/T 1.22
# .. ... ... ... ... ... ... ... ...
# 76 C/C 0.000 C/C 0.000 G/A 1.283 C/T 1.22
# 77 C/C 0.000 C/C 0.000 G/A 1.283 T/T 0.00
# 78 C/C 0.000 C/C 0.000 A/A 0.000 C/C 2.44
# 79 C/C 0.000 C/C 0.000 A/A 0.000 C/T 1.22
# 80 C/C 0.000 C/C 0.000 A/A 0.000 T/T 0.00
# [81 rows x 8 columns]
```
### Step 9
```Python
combination_df['genotypes']=combination_df['rs10830963_genotype']+"-"+combination_df['rs1436953_genotype']+"-"+combination_df['rs7172432_genotype']+"-"+combination_df['rs16955379_genotype']
combination_df['scores']= combination_df['rs10830963_weighted_score']+combination_df['rs1436953_weighted_score']+combination_df['rs7172432_weighted_score']+combination_df['rs16955379_weighted_score']
combination_df[['genotypes','scores']].sort_values(by='scores', ascending=False)
# genotypes scores
# 0 G/G-T/T-G/G-C/C 10.244
# 1 G/G-T/T-G/G-C/T 9.024
# 3 G/G-T/T-G/A-C/C 8.961
# 9 G/G-T/C-G/G-C/C 8.952
# 27 G/C-T/T-G/G-C/C 8.917
# .. ... ...
# 53 G/C-C/C-A/A-T/T 1.327
# 71 C/C-T/C-A/A-T/T 1.292
# 77 C/C-C/C-G/A-T/T 1.283
# 79 C/C-C/C-A/A-C/T 1.220
# 80 C/C-C/C-A/A-T/T 0.000
#
# [81 rows x 2 columns]
```
Raw data
{
"_id": null,
"home_page": "https://github.com/tianzelab/pandaspgs",
"name": "pandaspgs",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "pgs, genomics, snp, bioinformatics, pandas",
"author": "Cao Tianze",
"author_email": "hnrcao@qq.com",
"download_url": "https://files.pythonhosted.org/packages/29/44/257dca731de8152a69e38d52da96e5f42786b6dac2e2db82a2827335d007/pandaspgs-0.1.0.tar.gz",
"platform": null,
"description": "# pandasPGS: a Python package for easy retrieval of PGS Catalog data\r\n\r\n## Installation\r\n`pip install pandaspgs`\r\n## Documentation\r\nSee [pandasPGS Documentation](https://tianzelab.github.io/pandaspgs/)\r\n## Licensing information\r\n### Source code\r\nMIT License\r\n### Data from PGS Catalog\r\nThe PGS Catalog and all its contents are available under the general terms of use for EMBL-EBI services\r\n## Example 1. Investigating trends in diabetes-related polygenic risk scores\r\n### Step 1\r\n```Python\r\nfrom pandaspgs import *\r\nfrom plotnine import*\r\n```\r\n### Step 2\r\n```Python\r\ntraits = get_traits(term='diabetes')\r\ntraits\r\n# Trait is running in fat mode. It has 6 DataFrames with hierarchical dependencies.\r\n# traits: 6 rows\r\n# |\r\n# -associated_pgs_ids: 186 rows\r\n# |\r\n# -child_associated_pgs_ids:265 rows\r\n# |\r\n# -trait_categories: 13 rows\r\n# |\r\n# -trait_mapped_terms: 57 rows\r\n# |\r\n# -trait_synonyms: 66 rows\r\n```\r\n### Step 3\r\n```Python\r\ntraits.traits\r\n# id label description url \r\n# 0 EFO_0000400 diabetes mellitus A metabolic disorder characterized by abnormal... http://www.ebi.ac.uk/efo/EFO_0000400\r\n# 1 EFO_0006842 diabetes mellitus biomarker http://www.ebi.ac.uk/efo/EFO_0006842\r\n# 2 EFO_0003770 diabetic retinopathy A chronic, pathological complication associate... http://www.ebi.ac.uk/efo/EFO_0003770\r\n# 3 EFO_0004593 gestational diabetes Carbohydrate intolerance first diagnosed durin... http://www.ebi.ac.uk/efo/EFO_0004593\r\n# 4 MONDO_0005147 type 1 diabetes mellitus A chronic condition characterized by minimal o... http://purl.obolibrary.org/obo/MONDO_0005147\r\n# 5 MONDO_0005148 type 2 diabetes mellitus A type of diabetes mellitus that is characteri... http://purl.obolibrary.org/obo/MONDO_0005148\r\n```\r\n### Step 4\r\n```Python\r\nscore1 = get_scores(trait_id='EFO_0000400')\r\nscore2 = get_scores(trait_id='EFO_0006842')\r\nscore3 = get_scores(trait_id='EFO_0003770')\r\nscore4 = get_scores(trait_id='EFO_0004593')\r\nscore5 = get_scores(trait_id='MONDO_0005147')\r\nscore6 = get_scores(trait_id='MONDO_0005148')\r\ndiabetes_score = score1+score2+score3+score4+score5+score6\r\ndiabetes_score\r\n# Score is running in fat mode. It has 7 DataFrames with hierarchical dependencies.\r\n# scores:186 rows\r\n# |\r\n# -samples_variants: 253 rows\r\n# |\r\n# -samples_variants_cohorts: 386 rows\r\n# |\r\n# -samples_training: 107 rows\r\n# |\r\n# -samples_training_cohorts: 97 rows\r\n# |\r\n# -trait_efo: 195 rows\r\n# |\r\n# -ancestry_distribution: 447 rows\r\n```\r\n### Step 5\r\n```Python\r\npic=ggplot(diabetes_score.trait_efo)+geom_bar(aes(x='label'))+coord_flip()\r\npic.save(filename='Additional file 1.png',dpi=300)\r\n```\r\n## Example 2: Investigating polygenic risk scores for gestational diabetes\r\n### Step 1\r\n```Python\r\nfrom pandaspgs import *\r\n```\r\n### Step 2\r\n```Python\r\ntraits = get_traits(term='gestational diabetes')\r\ntraits.traits\r\n# id label description url \r\n# 0 EFO_0004593 gestational diabetes Carbohydrate intolerance first diagnosed durin... http://www.ebi.ac.uk/efo/EFO_0004593\r\ntraits.traits['id'][0]\r\n# 'EFO_0004593'\r\ntraits.traits['description'][0]\r\n# 'Carbohydrate intolerance first diagnosed during pregnancy. [NCIT: P378]'\r\n```\r\n### Step 3\r\n```Python\r\ngd_pgs = get_scores(trait_id='EFO_0004593')\r\ngd_pgs.scores\r\n# id name ftp_scoring_file matches_publication trait_reported trait_additional method_name method_params variants_number variants_interactions variants_genomebuild weight_type date_release license publication.id publication.title publication.doi publication.PMID publication.journal publication.firstauthor publication.date_publication ftp_harmonized_scoring_files.GRCh38.positions ftp_harmonized_scoring_files.GRCh37.positions \r\n# 0 PGS002256 GRS4_GDM https://ftp.ebi.ac.uk/pub/databases/spot/pgs/s... True Gestational diabetes mellitus in early pregnancy None Genome-wide significant variants p < 0.05 4 0 NR log(OR) 2022-02-16 PGS obtained from the Catalog should be cited ... PGP000282 An early prediction model for gestational diab... 10.1186/s13098-022-00788-y 35073990 Diabetol Metab Syndr Wu Q 2022-01-24 https://ftp.ebi.ac.uk/pub/databases/spot/pgs/s... https://ftp.ebi.ac.uk/pub/databases/spot/pgs/s...\r\ngd_pgs.scores['id'][0]\r\n# PGS002256\r\ngd_pgs.scores['name'][0]\r\n# 'GRS4_GDM'\r\ngd_pgs.scores['matches_publication'][0]\r\n# True\r\ngd_pgs.scores['trait_reported'][0]\r\n# 'Gestational diabetes mellitus in early pregnancy'\r\ngd_pgs.scores['variants_number'][0]\r\n# 4\r\n```\r\n### Step 4\r\n```Python\r\ngd_pgs.scores['publication.id'][0]\r\n# PGP000282\r\ngd_pgs.scores['publication.PMID'][0]\r\n# 35073990\r\ngd_pgs.scores['publication.date_publication'][0]\r\n# '2022-01-24'\r\ngd_pgs.scores['publication.journal'][0]\r\n# 'Diabetol Metab Syndr'\r\ngd_pgs.scores['publication.title'][0]\r\n# 'An early prediction model for gestational diabetes mellitus based on genetic variants and clinical characteristics in China.'\r\nopen_in_pubmed(gd_pgs.scores['publication.PMID'][0])\r\n```\r\n### Step 5\r\n```Python\r\ngd_pgs.samples_variants\r\n# sample_number sample_cases sample_controls sample_percent_male sample_age phenotyping_free followup_time ancestry_broad ancestry_free ancestry_country ancestry_additional source_GWAS_catalog source_PMID source_DOI cohorts_additional id score_id followup_time.estimate_type followup_time.estimate followup_time.interval.type followup_time.interval.lower followup_time.interval.upper followup_time.variability_type followup_time.variability followup_time.unit\r\n# 0 671 332 339 0.0 None None None East Asian Chinese China None None None None None 0 PGS002256 NaN NaN NaN NaN NaN NaN NaN NaN \r\ngd_pgs.samples_variants['sample_number'][0]\r\n# 671\r\ngd_pgs.samples_variants['ancestry_broad'][0]\r\n# 'East Asian'\r\n```\r\n### Step 6\r\n```Python\r\ngd_file = read_scoring_file('PGS002256')\r\ngd_file\r\n# rsID effect_allele other_allele effect_weight hm_source hm_rsID hm_chr hm_pos hm_inferOtherAllele\r\n# 0 rs10830963 G C 1.327 ENSEMBL rs10830963 11 92708710 NaN \r\n# 1 rs1436953 T C 1.292 ENSEMBL rs1436953 15 62414014 NaN \r\n# 2 rs7172432 G A 1.283 ENSEMBL rs7172432 15 62396389 NaN \r\n# 3 rs16955379 C T 1.220 ENSEMBL rs16955379 16 81489373 NaN \r\n```\r\n### Step 7\r\n```Python\r\nsnp1=gd_file[['rsID','effect_allele','other_allele','effect_weight']].loc[0]\r\nsnp1\r\n# rsID rs10830963\r\n# effect_allele G\r\n# other_allele C\r\n# effect_weight 1.327\r\n# Name: 0, dtype: object \r\nfrom pandaspgs.file_operation import genotype_weighted_score\r\ngenotype_weighted_score(snp1)\r\n# rs10830963_genotype rs10830963_weighted_score\r\n# 0 G/G 2.654 \r\n# 1 G/C 1.327 \r\n# 2 C/C 0.000 \r\n```\r\n### Step 8\r\n```Python\r\ndf_list = [] \r\nfor x in range(len(gd_file)):\r\n snp_x = gd_file[['rsID','effect_allele','other_allele','effect_weight']].loc[x]\r\n df_x = genotype_weighted_score(snp_x)\r\n df_x['key'] = 1\r\n df_list.append(df_x)\r\nfrom functools import reduce\r\ncombination_df = reduce(lambda x, y: x.merge(y,on='key'), df_list)\r\ndel combination_df['key']\r\ncombination_df\r\n# rs10830963_genotype rs10830963_weighted_score rs1436953_genotype rs1436953_weighted_score rs7172432_genotype rs7172432_weighted_score rs16955379_genotype rs16955379_weighted_score\r\n# 0 G/G 2.654 T/T 2.584 G/G 2.566 C/C 2.44 \r\n# 1 G/G 2.654 T/T 2.584 G/G 2.566 C/T 1.22 \r\n# 2 G/G 2.654 T/T 2.584 G/G 2.566 T/T 0.00 \r\n# 3 G/G 2.654 T/T 2.584 G/A 1.283 C/C 2.44 \r\n# 4 G/G 2.654 T/T 2.584 G/A 1.283 C/T 1.22 \r\n# .. ... ... ... ... ... ... ... ...\r\n# 76 C/C 0.000 C/C 0.000 G/A 1.283 C/T 1.22 \r\n# 77 C/C 0.000 C/C 0.000 G/A 1.283 T/T 0.00 \r\n# 78 C/C 0.000 C/C 0.000 A/A 0.000 C/C 2.44 \r\n# 79 C/C 0.000 C/C 0.000 A/A 0.000 C/T 1.22 \r\n# 80 C/C 0.000 C/C 0.000 A/A 0.000 T/T 0.00 \r\n# [81 rows x 8 columns]\r\n```\r\n### Step 9\r\n```Python\r\ncombination_df['genotypes']=combination_df['rs10830963_genotype']+\"-\"+combination_df['rs1436953_genotype']+\"-\"+combination_df['rs7172432_genotype']+\"-\"+combination_df['rs16955379_genotype']\r\ncombination_df['scores']= combination_df['rs10830963_weighted_score']+combination_df['rs1436953_weighted_score']+combination_df['rs7172432_weighted_score']+combination_df['rs16955379_weighted_score']\r\ncombination_df[['genotypes','scores']].sort_values(by='scores', ascending=False)\r\n# genotypes scores\r\n# 0 G/G-T/T-G/G-C/C 10.244\r\n# 1 G/G-T/T-G/G-C/T 9.024\r\n# 3 G/G-T/T-G/A-C/C 8.961\r\n# 9 G/G-T/C-G/G-C/C 8.952\r\n# 27 G/C-T/T-G/G-C/C 8.917\r\n# .. ... ...\r\n# 53 G/C-C/C-A/A-T/T 1.327\r\n# 71 C/C-T/C-A/A-T/T 1.292\r\n# 77 C/C-C/C-G/A-T/T 1.283\r\n# 79 C/C-C/C-A/A-C/T 1.220\r\n# 80 C/C-C/C-A/A-T/T 0.000\r\n# \r\n# [81 rows x 2 columns]\r\n```\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Python package for easy retrieval of PGS Catalog data",
"version": "0.1.0",
"project_urls": {
"Bug Tracker": "https://github.com/tianzelab/pandaspgs/issues",
"Homepage": "https://github.com/tianzelab/pandaspgs"
},
"split_keywords": [
"pgs",
" genomics",
" snp",
" bioinformatics",
" pandas"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8119f1fe9945ffcef771d955ed3998107fe5f862c935e658d8418013b27639b4",
"md5": "4acf2d75c5a120b191bdc92e8e7aa416",
"sha256": "3133faa34f4d3fbceb6c69c92f5be36d0a2aacf2b42a35dcd440f5dfd96cdb2a"
},
"downloads": -1,
"filename": "pandaspgs-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4acf2d75c5a120b191bdc92e8e7aa416",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 39917,
"upload_time": "2024-06-14T02:40:45",
"upload_time_iso_8601": "2024-06-14T02:40:45.563837Z",
"url": "https://files.pythonhosted.org/packages/81/19/f1fe9945ffcef771d955ed3998107fe5f862c935e658d8418013b27639b4/pandaspgs-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2944257dca731de8152a69e38d52da96e5f42786b6dac2e2db82a2827335d007",
"md5": "426223fab15eb6c7825aa582c59b7e78",
"sha256": "bde8d2b35c30aefc0e966e5f996a1169784906c685a13b31f096dc1d6a8fd16b"
},
"downloads": -1,
"filename": "pandaspgs-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "426223fab15eb6c7825aa582c59b7e78",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 29300,
"upload_time": "2024-06-14T02:40:47",
"upload_time_iso_8601": "2024-06-14T02:40:47.714784Z",
"url": "https://files.pythonhosted.org/packages/29/44/257dca731de8152a69e38d52da96e5f42786b6dac2e2db82a2827335d007/pandaspgs-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-14 02:40:47",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tianzelab",
"github_project": "pandaspgs",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pandaspgs"
}