{ "info": { "author": "Bin Li", "author_email": "libinsnet@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6", "Topic :: Scientific/Engineering :: Bio-Informatics" ], "description": "# User Guide for APEC (v1.1.0)\n\n(Accessibility Pattern based Epigenomic Clustering)\n\nAPEC can perform fine cell type clustering on single cell chromatin accessibility data from scATAC-seq, snATAC-seq, sciATAC-seq or any other relevant experiment. It can also be used to evaluate gene expression from relevant accesson, search for differential motifs/genes for each cell cluster, find super enhancers, and construct pseudo-time trajectory (by calling Monocle). **If users have already obtained the fragment-count-per-peak matrix from other mapping pipelines (such as CellRanger), please run APEC from the first Section \"Run APEC from fragment count matrix\". If users have only the raw fastq files, please jump to the second Section \"Get fragment count matrix from raw data\".**\n\n## Run AEPC from fragment count matrix\n\n### 1. Requirements and installation\n\n#### 1.1 Requirements\n\nAPEC requires Linux system (CentOS 7.3+ or Ubuntu 16.04+), as well as Python (2.7.15+ or 3.6.8+). If users want to build pseudotime trajectory with APEC, please install R (3.5.1) environment and monocle (2.10.0). Also, the following software are required for APEC:\n\n Bedtools: http://bedtools.readthedocs.io/en/latest/content/installation.html\n Meme 4.11.2: http://meme-suite.org/doc/download.html?man_type=web\n Homer: http://homer.ucsd.edu/homer/\n\n**notes: Users need to download genome reference for Homer by \"perl /path-to-homer/configureHomer.pl -install hg19\" and \"perl /path-to-homer/configureHomer.pl -install mm10\".**\n\nThe files in **reference** folder are required for APEC. **But we didn't upload reference files to GitHub since they are too big. Users can download all reference files from http://galaxy.ustc.edu.cn:30803/APEC/**. The **reference** folder should contains the following files:\n\n hg19_RefSeq_genes.gtf, hg19_chr.fa, hg19_chr.fa.fai,\n mm10_RefSeq_genes.gtf, mm10_chr.fa, mm10_chr.fa.fai,\n JASPAR2018_CORE_vertebrates_non-redundant_pfms_meme.txt, tier1_markov1.norc.txt\n\n#### 1.2 Install and import APEC\n\nUsers can install APEC by:\n\n pip install APEC==1.1.0.8\n\nDue to the compatibility problem (especially for rpy2), we don't recommend conda environment. Users can use **pyenv** to build a sub environment for APEC. If users want to call Paga (instead of monocle) to construct pseudotime trajectory, please use APEC in Python3 environment and install the following packages:\n\n pip install scanpy anndata\n\nIn Ipython, Jupyter-notebook or a python script, users can import packages of APEC by:\n\n from APEC import clustering,plot,generate\n\nUsers can inquire the manual for each function of APEC by using \"help()\" in Ipython or Jupyter, for example:\n\n help(clustering.cluster_byAccesson)\n\n### 2. Input data\n\nUsers need to prepare a project folder (termed '$project'), which contains **matrix**, **peak**, **result** and **figure** folders. Please place \"filtered_cells.csv\" and \"filtered_reads.mtx\" in **matrix** folder, \"top_filtered_peaks.bed\" in **peak** folder. Here is the instruction for three input files:\n\n filtered_cells.csv: Two-column (separated by tabs) list of cell information ('name' and 'notes'):\n The 'name' column stores cell names (or barcodes); the 'notes' column can be cell-type,\n development stage, batch index or any other cell information, such as:\n \tname notes\n \tCD4-001 CD4\n \tCD4-002 CD4\n \tCD8-001 CD8\n \tCD8-002 CD8\n top_filtered_peaks.bed: Three-column list of peaks, which is a standard bed format file.\n It is similar to the \"peaks.bed\" file in the CellRanger output of a 10X scATAC-seq dataset.\n filtered_reads.mtx: Fragment count matrix in mtx format, where each row is a peak and each column represents a cell.\n It is similar to the \"matrix.mtx\" file in the CellRanger output of a 10X scATAC-seq dataset.\n The order of cells should be the same with \"filtered_cells.csv\", and the order of peaks should\n be the same with \"top_filtered_peaks.bed\".\n\n### 3. Functions of APEC (step by step)\n\n#### 3.1 Clustering by APEC\n\nUse the following codes to cluster cells by APEC algorithm:\n\n clustering.build_accesson('$project', ngroup=600)\n clustering.cluster_byAccesson('$project', norm='zscore')\n\ninput parameters:\n\n ngroup: Number of accessons, default=600.\n nc: Number of cell clusters, set it to 0 if users want to predict cluster number by Louvain algorithm, default=0.\n norm: Normalization method for accesson matrix, can be 'zscore' or 'probability', default='zscore'.\n filter: Filter high dispersion accessons or not, can be 'yes' or 'no', default='yes'.\n\noutput files:\n\n $project/matrix/Accesson_peaks.csv\n $project/matrix/Accesson_reads.csv\n $project/result/louvain_cluster_by_APEC.csv\n\nThen users can plot tSNE, UMAP or corrlation heatmap for cells:\n\n plot.plot_tsne('$project', cell_label='notes')\n plot.plot_tsne('$project', cell_label='cluster')\n plot.plot_umap('$project', cell_label='notes')\n plot.correlation('$project', cell_label='notes')\n\ninput parameters:\n\n matrix_type: Type of input matrix, can be 'APEC' or 'chromVAR', default='APEC'.\n If matrix_type='APEC', it will use accesson matrix yielded by clustering.cluster_byAccesson();\n if matrix_type='chromVAR', it will use deviation matrix yielded by clustering.cluster_byMotif().\n cell_label: Color labels for cells, can be 'notes' or 'cluster', default='notes'.\n If cell_label='cluster', it will use clustering result of clustering.cluster_byXXX().\n cluster: Clustering algorithm used in clustering.cluster_byXXX(), default='louvain'.\n\noutput files:\n\n $project/result/TSNE_by_APEC.csv\n $project/figure/TSNE_by_APEC_with_notes_label.pdf\n $project/figure/TSNE_by_APEC_with_cluster_label.pdf\n $project/result/UMAP_by_APEC.csv\n $project/figure/UMAP_by_APEC_with_notes_label.pdf\n $project/figure/cell_cell_correlation_by_APEC_with_notes_label.png\n\n\n\n_TSNE_by_APEC_with_notes_label.pdf_\n\n\n\n_cell_cell_correlation_by_APEC_with_notes_label.png_\n\n#### 3.2 Clustering by chromVAR (optional, required for motif analysis)\n\nUse the following codes to cluster cells by chromVAR algorithm:\n\n generate.motif_matrix('$project', genome_fa='$reference/hg19_chr.fa',\n background='$reference/tier1_markov1.norc.txt',\n meme='$reference/JASPAR2018_CORE_vertebrates_redundant_pfms_meme.txt',\n np=4)\n clustering.cluster_byMotif('$project', np=4)\n\ninput parameters:\n\n genome_fa: Path to hg19_chr.fa or mm10_chr.fa in $reference folder.\n background: Path to tier1_markov1.norc.txt in $reference folder.\n meme: Path to JASPAR2018_CORE_vertebrates_redundant_pfms_meme.txt in $reference folder.\n np: Number of CPU cores used for parallel calculation, default=4.\n nc: Number of cell clusters, set it to 0 if users want to predict cluster number by Louvain algorithm, default=0.\n ns: Number of permuted sampling, default=50.\n\noutput files:\n\n $project/result/deviation_chromVAR.csv\n $project/result/louvain_cluster_by_chromVAR.csv\n\n#### 3.3 Evaluate ARI, NMI and AMI for clustering result\n\nIf users have the real cell type in the 'notes' column of '$project/matrix/filtered_cells.csv', please use the following code to calculate ARI, NMI and AMI to estimate the accuracy of the clustering algorithm.\n\n clustering.cluster_comparison('$project/matrix/filtered_cells.csv',\n '$project/result/louvain_cluster_by_APEC.csv')\n\nThe output ARI, NMI and AMI values will present on the screen directly. Please make sure filtered_cells.csv contains the FACS label for each cell. For some datasets, such as Hematopoietic cells, the user should ignore all \"unknown\" cells before the calculation of ARI.\n\n#### 3.4 Generate pseudotime trajectory\n\nBy default, APEC adapts monocle to generate pseudotime trajectory from accesson matrix:\n\n generate.monocle_trajectory('$project', npc=5)\n plot.plot_trajectory('$project', cell_label='notes', angles=[30,30])\n\ninput parameters:\n\n npc: Number of principal components used to build trajectory, default=5.\n cell_label: Color labels for cells, can be 'notes' or 'cluster', default='notes'.\n cluster: Clustering algorithm used in clustering.cluster_byXXX(), default='louvain'.\n angles: Rotation angles for 3D trajectory, e.g. [100,20], default=[30,30].\n\noutput files:\n\n $project/result/monocle_trajectory.csv\n $project/result/monocle_reduced_dimension.csv\n $project/figure/pseudotime_trajectory_with_notes_label.pdf\n\nIn Python3 environment, users can also use Paga to generate trajectory:\n\n generate.paga_trajectory('$project', cell_label='notes', npc=5)\n\noutput files:\n\n $project/figure/paga_skeleton_with_notes_label.pdf\n $project/figure/paga_trajectory_with_notes_label.pdf\n\n\n\n_pseudotime_trajectory_with_notes_label.pdf_\n\n#### 3.5 Generate gene expression\n\n generate.gene_expression('$project', genome='hg19', width=1000000, pvalue=0.01)\n\ninput parameters:\n\n genome: Genome reference for Homer, can be \"hg19\" or \"mm10\", default=\"hg19\".\n width: Width of Genome region for fisher exact test, default=1000000.\n pvalue: P-value threshold for fisher exact test, default=0.01.\n\noutput files:\n\n $project/matrix/Accesson_annotated.csv\n $project/matrix/gene_annotated.csv\n $project/matrix/gene_expression.csv\n\nUsers can also score genes by the peaks around their TSS regions:\n\n generate.gene_score('$project', genome_gtf='hg19_RefSeq_genes.gtf', distal=20000)\n\noutput file:\n\n $project/matrix/genes_scored_by_TSS_peaks.csv\n\n#### 3.6 Generate differential feature for a cell cluster\n\nGet differential accessons:\n\n generate.nearby_genes('$project', genome_gtf='hg19_RefSeq_genes.gtf', distal=20000) # optional step\n generate.differential_feature('$project', feature='accesson', target='0', vs='all')\n\nGet differential motifs/genes:\n\n generate.differential_feature('$project', feature='motif', target='0', vs='all')\n generate.differential_feature('$project', feature='gene', target='0', vs='all')\n\ninput parameters:\n\n feature: Type of feature, can be 'accesson' or 'motif' or 'gene', default='accesson'.\n If feature='accesson', run clustering.cluster_byAccesson() first;\n if feature='motif', run clustering.cluster_byMotif() first;\n if feature='gene', run generate.gene_expression() first.\n cell_label: Cell labels used for differential analysis, can be 'notes' or 'cluster', default='cluster'.\n cluster: Clustering algorithm used in clustering.cluster_byXXX(), default='louvain'.\n target: The target cluster that users search for differential features, default='1'.\n If cell_label='cluster', target is one element in the 'cluster' column of XXX_cluster_by_XXX.csv file;\n if cell_label='notes', target is one element in the 'notes' column of filtered_cells.csv file.\n vs: Versus which clusters, can be '2,3,4' or 'all', default='all' (means all the rest clusters).\n pvalue: P-value for student-t test, default=0.01.\n log2_fold: Cutoff for log2(fold_change), default=1.\n\noutput file:\n\n $project/result/differential_accesson_of_cluster_X_vs_XXX.csv\n $project/result/differential_motif_of_cluster_X_vs_XXX.csv\n $project/result/differential_gene_of_cluster_X_vs_XXX.csv\n\n#### 3.7 Plot motif/gene on tSNE/trajectory diagram\n\n plot.plot_feature('$project', space='tsne', feature='gene', name='FOXO1')\n plot.plot_feature('$project', space='trajectory', feature='motif', name='GATA1')\n\ninput parameters:\n\n space: In which space we draw the feature, can be 'tsne' or 'umap' or 'trajectory', default='tsne'.\n If space='tsne', run plot.plot_tsne() first;\n if space='umap', run plot.plot_umap() first;\n if space='trajectory', run generate.monocle_trajectory() first.\n feature: Type of the feature, can be 'accesson' or 'motif' or 'gene', default='accesson'.\n If feature='accesson', run clustering.cluster_byAccesson() first;\n if feature='motif', run clustering.cluster_byMotif() first;\n if feature='gene', run generate.gene_expression() first.\n matrix_type: Type of input matrix for tSNE/UMAP, can be 'APEC' or 'chromVAR', default='APEC'.\n If matrix_type='APEC', it will use tSNE/UMAP result of APEC;\n if matrix_type='chromVAR', it will use tSNE/UMAP result of chromVAR.\n name: Name of the feature.\n If feature='accesson', name=accesson number, i.e. '1';\n if feature='motif', name=motif symbol, i.e. 'GATA1';\n if feature='gene', name=gene symbol, i.e. 'CD36'.\n clip: Clip range for the input matrix, can be [min, max] or 'none', default='none'.\n angles: Rotation angles for 3D trajectory, e.g. [100,20], default=[30,30].\n\noutput files:\n\n $project/figure/gene_FOXO1_on_tsne_by_APEC.pdf\n $project/figure/motif_GATA1_on_trajectory_by_APEC.pdf\n\n\n\n_gene_FOXO1_on_tsne_by_APEC.pdf_\n\n\n\n_motif_GATA1_on_trajectory_by_APEC.pdf_\n\n**Notes: Plotting feature on tSNE diagram requires the running of plot.plot_tsne() beforehand (see 3.1), and plotting feature on trajectory requires the running of generate.monocle_trajectory() beforehand (see 3.4).**\n\n#### 3.8 Generate potential super enhancer\n\n generate.search_super_enhancer('$project', super_range=1000000)\n\ninput parameter:\n\n super_range: Genome range to search for super enhancer, default=1000000.\n\noutput file:\n\n $project/result/potential_super_enhancer.csv\n\n\n## Get fragment count matrix from raw data\n## (this part is only available on GitHub:https://github.com/QuKunLab/APEC)\n\n### 1. Requirements and installation\n\nAll of the following software needs to be placed in the global environment of the Linux system to ensure that they can be called in any path/folder. Picard is also required, but we have placed it into $APEC/reference folder, and users don't need to install it. We recommend that users adopt the latest version of these software, except Meme (version 4.11.2).\n\n Bowtie2: https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.2.9/\n Samtools: https://github.com/samtools/samtools\n Bedtools: http://bedtools.readthedocs.io/en/latest/content/installation.html\n Macs2: https://github.com/taoliu/MACS.git\n Meme 4.11.2: http://meme-suite.org/doc/download.html?man_type=web\n pysam for python: set up by \"pip install pysam\"\n Levenshtein for python: set up by \"pip install python-Levenshtein\"\n\n### 1.2\tInstallation\n\nUsers can simply install this part by copying the **code_v1.1.0** folder and **reference** folder into a same path. Users **must** run ***APEC_prepare_steps.sh*** directly in code_v1.1.0/, since each program will invoke the reference files automatically. The **reference** folder is required, **but we didn't upload reference files to GitHub since they are too big. Users can download all reference files from http://galaxy.ustc.edu.cn:30803/APEC/**. The **reference** folder should contains the following files:\n\n hg19_refseq_genes_TSS.txt, hg19_RefSeq_genes.gtf, hg19_blacklist.JDB.bed,\n hg19_chr.fa, hg19_chr.fa.fai, hg19.chrom.sizes,\n hg19.1.bt2, hg19.2.bt2, hg19.3.bt2, hg19.4.bt2, hg19.rev.1.bt2, hg19.rev.2.bt2,\n mm10_refseq_genes_TSS.txt, mm10_RefSeq_genes.gtf, mm10_blacklist.BIN.bed,\n mm10_chr.fa, mm10_chr.fa.fai, mm10.chrom.sizes,\n mm10.1.bt2, mm10.2.bt2, mm10.3.bt2, mm10.4.bt2, mm10.rev.1.bt2, mm10.rev.2.bt2,\n JASPAR2018_CORE_vertebrates_non-redundant_pfms_meme.txt, tier1_markov1.norc.txt, picard.jar\n\n## 2. Fragment count matrix\n\n### 2.1\tArrangement of raw data\n\nThe **raw_data** folder should contain all raw sequencing fastq files into the. All these pair-end fastq files should be named as:\n\n type1-001_1.fastq, type1-001_2.fastq, type1-002_1.fastq, type1-002_2.fastq, \u2026\u2026;\n type2-001_1.fastq, type2-001_2.fastq, type2-002_1.fastq, type2-002_2.fastq, \u2026\u2026;\n \u2026\u2026\n\nwhere \"\\_1\" and \"\\_2\" indicate forward and backward reads for pair-end sequencing. {type1, type2, ...} can be cell-types or batches of samples, such as {GM, K562, ...}, or {batch1, batch2, ...}, or any other words without underline \"\\_\" or dash \"-\".\nUsers need to build a **project** folder to store the result. The **work**, **matrix**, **peak** and **figure** folders will be automatically built by subsequent steps, and placed in **project** folder.\n\n### 2.2\tEasy-run of matrix preparation\n\nUsers can use the script ***APEC_prepare_steps.sh*** to finish the process from raw data to fragment count matrix. This script includes steps of \"trimming\", \"mapping\", \"peak calling\", \"aligning read counts matrix\", and \"quality contral\". Running this step on our example project (i.e. project01 with 672 cells) will take 10~20 hours on an 8-core 32 GB computer, since the sequence mapping step is the slowest step.\n\nExample:\n\n bash APEC_prepare_steps.sh -r $raw_data -s $project -g hg19 -n 4 -l 3 -p 0.2 -f 2000\n\nInput parameters:\n\n -r: The raw_data folder\n -s: The project folder.\n -g: \"hg19\" or \"mm10\".\n -n: Number of CPU cores.\n -l: Threshold for the \u2013log(Q-value) of peaks, used to filter peaks.\n -p: Threshold of the percentage of fragments in peaks, used to filter cells.\n -f: Threshold of the fragment number of each cell, used to filter cells.\n\nOutput files:\n\nThe script ***APEC_prepare_steps.sh*** will generate **work**, **peak**, **matrix**, and **figure** folders with many output files. Here, we only introduce files that are useful to users. For our example projects, all of these results can be reproduced on a general computer system.\n\n(1) In **work** folder:\n\nFor each cell, the mapping step can generate a subfolder (with cell name) in the **work** folder. There are several useful files in each subfolder:\n\n cell_name.hist.pdf: A histogram of fragment length distribution of each cell.\n cell_name.RefSeqTSS.pdf: Insert enrichment around TSS regions of each cell.\n\n(2) In **peak** folder:\n\n mergeAll.hist.pdf: A histogram of fragment length distribution of all cells.\n mergeAll.RefSeqTSS.pdf: Insert enrichment around TSS regions of all cells.\n top_filtered_peaks.bed: Filtered top peaks, ranked by Q-value.\n\n(3) In **matrix** folder:\n\n reads.csv: Fragment count matrix.\n cell_info.merged.csv: Data quality report of each cell.\n filtered_cells.csv: Filtered cells information in csv format.\n filtered_reads.mtx: Filtered fragment count matrix in mtx format.\n\n(4) In **figure** folder:\n\n cell_quality.pdf: A scatter plot of the fragment number and the percentage of fragments in peaks.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/QuKunLab/APEC", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "APEC", "package_url": "https://pypi.org/project/APEC/", "platform": "all", "project_url": "https://pypi.org/project/APEC/", "project_urls": { "Homepage": "https://github.com/QuKunLab/APEC" }, "release_url": "https://pypi.org/project/APEC/1.1.0.8/", "requires_dist": [ "numpy", "scipy (==1.0.0)", "pandas", "matplotlib", "seaborn", "numba", "networkx", "python-louvain (==0.11)", "scikit-learn (==0.20.0)", "MulticoreTsne", "umap-learn", "rpy2 (==2.8.5)", "setuptools" ], "requires_python": "", "summary": "Single cell epigenomic clustering based on accessibility pattern", "version": "1.1.0.8" }, "last_serial": 5516420, "releases": { "1.1.0.1": [ { "comment_text": "", "digests": { "md5": "472b32d975a0f397e1c986771ed54314", "sha256": "99409ba8188658ffed01c5713730791335fb8d221e0d1fc05a9a9cf0eb94b545" }, "downloads": -1, "filename": "APEC-1.1.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "472b32d975a0f397e1c986771ed54314", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 21422, "upload_time": "2019-06-12T12:01:55", "url": "https://files.pythonhosted.org/packages/fd/c6/d93f469c9d2d3fe5705c18efe8a6116f54dc5e8c1ef5b0899eba9b447873/APEC-1.1.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a855ed03c824275ec3b13da59889629", "sha256": "9ef9b6243f5eddc75309e8cd42b632f7d2e63e351fb7c0329dc77a8a0973b11a" }, "downloads": -1, "filename": "APEC-1.1.0.1.tar.gz", "has_sig": false, "md5_digest": "1a855ed03c824275ec3b13da59889629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20952, "upload_time": "2019-06-12T12:01:58", "url": "https://files.pythonhosted.org/packages/8a/21/920a1058febf34523dfedd68b6722be1953a5bda361afa0eca4aaf8b931a/APEC-1.1.0.1.tar.gz" } ], "1.1.0.2": [ { "comment_text": "", "digests": { "md5": "23b660ed8c593678732ae7b280599ba8", "sha256": "90953717e9248f6af397ce32d88c3f88225692ccba3fb351fd20f27b7f69a885" }, "downloads": -1, "filename": "APEC-1.1.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "23b660ed8c593678732ae7b280599ba8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 22462, "upload_time": "2019-06-13T09:04:56", "url": "https://files.pythonhosted.org/packages/bc/a3/3d25f77e193c3fdbb4784ba2ba706f7d9dee2e3a34d7c3c30e3387b7807f/APEC-1.1.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35c030f5655a19be441548b273739a1a", "sha256": "faec654602c3aecb83f5d9e541f861dd7c12ab3357308ce1102fce3657bb1afb" }, "downloads": -1, "filename": "APEC-1.1.0.2.tar.gz", "has_sig": false, "md5_digest": "35c030f5655a19be441548b273739a1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22139, "upload_time": "2019-06-13T09:04:59", "url": "https://files.pythonhosted.org/packages/a2/d3/95ce551b37779e37c1b7e79c10d8664519a20a88ece66bf0ee6f3a141aca/APEC-1.1.0.2.tar.gz" } ], "1.1.0.3": [ { "comment_text": "", "digests": { "md5": "537e28f32e306829a7da944080120800", "sha256": "6300c2af8777edf8cf8ff95eba6813ad922760ccb3e85d50e861447920bf1445" }, "downloads": -1, "filename": "APEC-1.1.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "537e28f32e306829a7da944080120800", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 22877, "upload_time": "2019-06-16T09:02:12", "url": "https://files.pythonhosted.org/packages/b2/2d/68ef0f98200b012aaa06a8021854897875998b14831f6349fcbdb4baf760/APEC-1.1.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04cf7cdcc12e7b2af9bde9c3820466f8", "sha256": "a6d8e918831dd0702df2f1b5851d60471c1639d70d4b4733c63d3cc981c2c726" }, "downloads": -1, "filename": "APEC-1.1.0.3.tar.gz", "has_sig": false, "md5_digest": "04cf7cdcc12e7b2af9bde9c3820466f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22754, "upload_time": "2019-06-16T09:02:14", "url": "https://files.pythonhosted.org/packages/eb/43/87dc77f0584a569e918a235382a0c584d613a280a2e8f5f3229af04c02ae/APEC-1.1.0.3.tar.gz" } ], "1.1.0.4": [ { "comment_text": "", "digests": { "md5": "4e95cc4554be3488667e377a8f76448a", "sha256": "3eea24eb4902f8548bc0096796429bd4a24119e7606e634d9961c8878a96ca75" }, "downloads": -1, "filename": "APEC-1.1.0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "4e95cc4554be3488667e377a8f76448a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 22876, "upload_time": "2019-06-17T08:54:49", "url": "https://files.pythonhosted.org/packages/fa/09/2ac4bae6375beb6a02e41d799bd54619ca40bdf6539a2ab5bf56023b7855/APEC-1.1.0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e01bcfaf7eff0baa528b9f409307326", "sha256": "a06a508506ae930d38d2ba053e5fad4e8848102d0569372b78dc81d4d5daac9d" }, "downloads": -1, "filename": "APEC-1.1.0.4.tar.gz", "has_sig": false, "md5_digest": "5e01bcfaf7eff0baa528b9f409307326", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22605, "upload_time": "2019-06-17T08:54:51", "url": "https://files.pythonhosted.org/packages/87/2b/4dadab9f6a3aa3d3972823bec4ab29ca9a0137863abe96b135f017e0f798/APEC-1.1.0.4.tar.gz" } ], "1.1.0.5": [ { "comment_text": "", "digests": { "md5": "d143df138a6bbbb5ce4efd9520e2d793", "sha256": "f425dc3d890f3fb46c918c70703bd28d6623bc97da7e6443c56ea87f300d6ff1" }, "downloads": -1, "filename": "APEC-1.1.0.5-py2-none-any.whl", "has_sig": false, "md5_digest": "d143df138a6bbbb5ce4efd9520e2d793", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 22877, "upload_time": "2019-06-19T11:26:54", "url": "https://files.pythonhosted.org/packages/8e/e8/c7e26ec37808e83536e847e98958a7507373d31cf68532b63dbcfadc4393/APEC-1.1.0.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fab79a4ca0ffe14ba0214618b374fc8b", "sha256": "91e0a78487a0980467d1be8fd3f10395563b17bd6bce78bcfcfd2ec3c4baeb97" }, "downloads": -1, "filename": "APEC-1.1.0.5.tar.gz", "has_sig": false, "md5_digest": "fab79a4ca0ffe14ba0214618b374fc8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22618, "upload_time": "2019-06-19T11:27:01", "url": "https://files.pythonhosted.org/packages/0e/d7/88bb2b270aaa0c5b790fdaa958c94490f64ab3f1609b7c617fbf005059b4/APEC-1.1.0.5.tar.gz" } ], "1.1.0.6": [ { "comment_text": "", "digests": { "md5": "21261cb37818f17c3415fedbb52f3a7a", "sha256": "4f5ab4517693e8cb061c85e26d65787ba100dd1a0bcd683db9cad75840e49e03" }, "downloads": -1, "filename": "APEC-1.1.0.6-py2-none-any.whl", "has_sig": false, "md5_digest": "21261cb37818f17c3415fedbb52f3a7a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 22891, "upload_time": "2019-06-23T08:11:10", "url": "https://files.pythonhosted.org/packages/57/de/b84da82c1941378fe4e9018c99fcc02540e09bddd252dbc3af595e889797/APEC-1.1.0.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d103e1aab1426b71e56379c96e1a2519", "sha256": "cd0e6b1ec16ea481f2610d40dd767d93ec169dce3166a46cd127a6e31a9bab43" }, "downloads": -1, "filename": "APEC-1.1.0.6.tar.gz", "has_sig": false, "md5_digest": "d103e1aab1426b71e56379c96e1a2519", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22649, "upload_time": "2019-06-23T08:11:13", "url": "https://files.pythonhosted.org/packages/ce/1a/8c7686eadf64d9319c785cb69b3e8756d1c9e8efc556a8f428365578403b/APEC-1.1.0.6.tar.gz" } ], "1.1.0.7": [ { "comment_text": "", "digests": { "md5": "767d2e3c9e9dcd310162e799c1c58cd2", "sha256": "77538f3cfcf6eb0b8ee4231dcca484988eb27be167ea4a7069cd806a33733980" }, "downloads": -1, "filename": "APEC-1.1.0.7-py2-none-any.whl", "has_sig": false, "md5_digest": "767d2e3c9e9dcd310162e799c1c58cd2", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 23335, "upload_time": "2019-07-02T01:26:15", "url": "https://files.pythonhosted.org/packages/4a/e9/b7800835aff1d213fd440d071a2ae45aca1aa28f65b75b35ea7f9cae0aeb/APEC-1.1.0.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e96a9475c101c46dc2e3fe3e40b078e8", "sha256": "25516af1ea0bb2f01f4fce20fc05634c0f8a37ffa5b7ecc8b37e592ad8925bd2" }, "downloads": -1, "filename": "APEC-1.1.0.7.tar.gz", "has_sig": false, "md5_digest": "e96a9475c101c46dc2e3fe3e40b078e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23387, "upload_time": "2019-07-02T01:26:17", "url": "https://files.pythonhosted.org/packages/e8/64/f173d6d75582c8585564f1b01f244bc74256ab942620d69d73afe8e3512d/APEC-1.1.0.7.tar.gz" } ], "1.1.0.8": [ { "comment_text": "", "digests": { "md5": "91c90253ca805907527753190694e3e5", "sha256": "3204c67bb6d960baa6354b169ed6ef949b823e2c268a91a5e67911a4884f60d7" }, "downloads": -1, "filename": "APEC-1.1.0.8-py2-none-any.whl", "has_sig": false, "md5_digest": "91c90253ca805907527753190694e3e5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 23598, "upload_time": "2019-07-11T09:10:47", "url": "https://files.pythonhosted.org/packages/ee/b6/443f9e2997414062636c0dac2f5b5532c3f5567b7f2e9c4109c4b13de0d6/APEC-1.1.0.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62a717e0e0a85c1c7dbfc3c05f3b9164", "sha256": "137dd71c415d0a3500d3b1ea73185b99d188abc812fc2014ccfeb0bd4a695892" }, "downloads": -1, "filename": "APEC-1.1.0.8.tar.gz", "has_sig": false, "md5_digest": "62a717e0e0a85c1c7dbfc3c05f3b9164", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23781, "upload_time": "2019-07-11T09:10:49", "url": "https://files.pythonhosted.org/packages/89/71/1fa1fd2a1613513236a9f6b5e80dc5402dc7000c577ddc6d23453ce90c51/APEC-1.1.0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "91c90253ca805907527753190694e3e5", "sha256": "3204c67bb6d960baa6354b169ed6ef949b823e2c268a91a5e67911a4884f60d7" }, "downloads": -1, "filename": "APEC-1.1.0.8-py2-none-any.whl", "has_sig": false, "md5_digest": "91c90253ca805907527753190694e3e5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 23598, "upload_time": "2019-07-11T09:10:47", "url": "https://files.pythonhosted.org/packages/ee/b6/443f9e2997414062636c0dac2f5b5532c3f5567b7f2e9c4109c4b13de0d6/APEC-1.1.0.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62a717e0e0a85c1c7dbfc3c05f3b9164", "sha256": "137dd71c415d0a3500d3b1ea73185b99d188abc812fc2014ccfeb0bd4a695892" }, "downloads": -1, "filename": "APEC-1.1.0.8.tar.gz", "has_sig": false, "md5_digest": "62a717e0e0a85c1c7dbfc3c05f3b9164", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23781, "upload_time": "2019-07-11T09:10:49", "url": "https://files.pythonhosted.org/packages/89/71/1fa1fd2a1613513236a9f6b5e80dc5402dc7000c577ddc6d23453ce90c51/APEC-1.1.0.8.tar.gz" } ] }