From fded2f99b5f766cb6b18f4f3c3fd4fe599524671 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 25 Nov 2015 14:20:58 +0100 Subject: [PATCH 01/78] Reuse the same linkage clustering for both heatmap and dendrogram in dnadiff --- scripts/dnadiff_dist_matrix.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/dnadiff_dist_matrix.py b/scripts/dnadiff_dist_matrix.py index 41e0ec2..624ccfe 100755 --- a/scripts/dnadiff_dist_matrix.py +++ b/scripts/dnadiff_dist_matrix.py @@ -169,9 +169,12 @@ def plot_dist_matrix(matrix, fasta_names, heatmap_out, dendrogram_out): # Create pdm = pd.DataFrame(matrix, index=fasta_names, columns=fasta_names) + # Create linkage clustering + link = linkage(pdm, metric='euclidean', method='average') + # Plot heatmap figsizex = max(10, len(fasta_names) / 4) - clustergrid = sns.clustermap(pdm, metric='euclidean', method='average', + clustergrid = sns.clustermap(pdm, col_linkage=link, row_linkage=link, figsize=(figsizex, figsizex)) clustergrid.savefig(heatmap_out) @@ -179,7 +182,6 @@ def plot_dist_matrix(matrix, fasta_names, heatmap_out, dendrogram_out): sns.set_style('white') figsizey = max(10, len(fasta_names) / 8) f, ax = plt.subplots(figsize=(figsizex, figsizey)) - link = linkage(pdm, metric='euclidean', method='average') dendrogram(link, labels=pdm.index, ax=ax) no_spine = {'left': True, 'bottom': True, 'right': True, 'top': True} sns.despine(**no_spine) From 89d0064cf4f118309268c18d307842291e7a10ec Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 25 Nov 2015 16:29:19 +0100 Subject: [PATCH 02/78] Output clustering from dnadiff --- scripts/dnadiff_dist_matrix.py | 19 ++++++++++++++----- scripts/tests/test_dnadiff_dist_matrix.py | 10 ++++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/scripts/dnadiff_dist_matrix.py b/scripts/dnadiff_dist_matrix.py index 624ccfe..d262b01 100755 --- a/scripts/dnadiff_dist_matrix.py +++ b/scripts/dnadiff_dist_matrix.py @@ -155,7 +155,7 @@ def get_dist_matrix(pairwise_folder, fasta_names, min_coverage): return matrix -def plot_dist_matrix(matrix, fasta_names, heatmap_out, dendrogram_out): +def plot_dist_matrix(matrix, fasta_names, heatmap_out, dendrogram_out, cluster_threshold, clustering_out): """Cluster the distance matrix hierarchically and plot using seaborn. Average linkage method is used.""" # Load required modules for plotting @@ -164,13 +164,17 @@ def plot_dist_matrix(matrix, fasta_names, heatmap_out, dendrogram_out): import matplotlib.pyplot as plt import seaborn as sns import pandas as pd - from scipy.cluster.hierarchy import dendrogram, linkage + from scipy.cluster.hierarchy import dendrogram, linkage, fcluster # Create pdm = pd.DataFrame(matrix, index=fasta_names, columns=fasta_names) # Create linkage clustering link = linkage(pdm, metric='euclidean', method='average') + flat_clusters = fcluster(link, cluster_threshold, criterion='distance') + + clustering = pd.Series(dict(zip(fasta_names, flat_clusters))) + clustering.to_csv(clustering_out, sep='\t') # Plot heatmap figsizex = max(10, len(fasta_names) / 4) @@ -223,6 +227,8 @@ def parse_input(): "plotting the distance matrix. By default the distance matrix is " "clustered hierarchically using euclidean average linkage clustering. " "This step requires seaborn and scipy.") + parser.add_argument("--cluster-threshold", type=float, default=0.05, + help=("The maximum within cluster distance allowed.")) args = parser.parse_args() # Get fasta names if args.fasta_names is not None: @@ -244,7 +250,7 @@ def parse_input(): return args.output_folder, args.fasta_files, fasta_names, \ args.min_coverage, args.skip_dnadiff, args.skip_matrix, \ - args.skip_plot, args.plot_image_extension + args.skip_plot, args.plot_image_extension, args.cluster_threshold def verbose_check_dependencies(progs): @@ -258,7 +264,7 @@ def verbose_check_dependencies(progs): def main(output_folder, fasta_files, fasta_names, min_coverage, skip_dnadiff=False, skip_matrix=False, skip_plot=False, - plot_image_extension="pdf"): + plot_image_extension="pdf", cluster_threshold=0.05): """Output distance matrix between fasta files using MUMmer's dnadiff""" # create logger logging.basicConfig( @@ -293,7 +299,10 @@ def main(output_folder, fasta_files, fasta_names, min_coverage, ospj(output_folder, "hclust_heatmap.{}".format(plot_image_extension)), ospj(output_folder, - "hclust_dendrogram.{}".format(plot_image_extension))) + "hclust_dendrogram.{}".format(plot_image_extension)), + cluster_threshold, + ospj(output_folder, + "clustering.tsv")) else: logging.info("Skipping plotting") logging.info("Writing fasta names of fasta files to " diff --git a/scripts/tests/test_dnadiff_dist_matrix.py b/scripts/tests/test_dnadiff_dist_matrix.py index cd3a6fe..daa6c10 100644 --- a/scripts/tests/test_dnadiff_dist_matrix.py +++ b/scripts/tests/test_dnadiff_dist_matrix.py @@ -126,9 +126,12 @@ def test_plot_dist_matrix(self): delimiter="\t") heatmap = ospj(TMP_BASENAME_DIR, "hclust_heatmap.pdf") dendrogram = ospj(TMP_BASENAME_DIR, "hclust_dendrogram.pdf") - dnadiff_dist_matrix.plot_dist_matrix(matrix, names, heatmap, dendrogram) + clustering = ospj(TMP_BASENAME_DIR, "clustering.tsv") + clustering_threshold = 0.05 + dnadiff_dist_matrix.plot_dist_matrix(matrix, names, heatmap, dendrogram, clustering_threshold, clustering) ok_(os.path.exists(heatmap)) ok_(os.path.exists(dendrogram)) + ok_(os.path.exists(clustering)) def test_plot_dist_matrix_88_bins(self): """Plot a distance matrix with 88 samples""" @@ -139,9 +142,12 @@ def test_plot_dist_matrix_88_bins(self): delimiter="\t") heatmap = ospj(TMP_BASENAME_DIR, "hclust_heatmap.pdf") dendrogram = ospj(TMP_BASENAME_DIR, "hclust_dendrogram.pdf") - dnadiff_dist_matrix.plot_dist_matrix(matrix, names, heatmap, dendrogram) + clustering = ospj(TMP_BASENAME_DIR, "clustering.tsv") + clustering_threshold = 0.05 + dnadiff_dist_matrix.plot_dist_matrix(matrix, names, heatmap, dendrogram, clustering_threshold, clustering) ok_(os.path.exists(heatmap)) ok_(os.path.exists(dendrogram)) + ok_(os.path.exists(clustering)) def test_write_fasta_names(self): names = [ From 2057a9e550cbe9e8bcee3d411498e132c3a2e436 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 25 Nov 2015 16:29:52 +0100 Subject: [PATCH 03/78] Added two bins to dnadiff test data that would cluster with the other bins --- .../test_data/bins/sample1_gt1000_bin98.fa | 156 ++++++++++++++++++ .../test_data/bins/sample1_gt1000_bin99.fa | 44 +++++ 2 files changed, 200 insertions(+) create mode 100644 scripts/tests/test_data/bins/sample1_gt1000_bin98.fa create mode 100644 scripts/tests/test_data/bins/sample1_gt1000_bin99.fa diff --git a/scripts/tests/test_data/bins/sample1_gt1000_bin98.fa b/scripts/tests/test_data/bins/sample1_gt1000_bin98.fa new file mode 100644 index 0000000..5a24cc0 --- /dev/null +++ b/scripts/tests/test_data/bins/sample1_gt1000_bin98.fa @@ -0,0 +1,156 @@ +>contig12595 +GgCAACGGCAAAGCATTAGAGCCATTAGAGTCATTAGAGCCATTGTAGGTCATTTGAAGT +CATAAATAAACCTACAATGGCTCATACTTTTTTGTATATACTTTTTGTACATACTTTTTT +CTTATTTCTGATAATTTTCGCTCATTTAATATAATTCTGGTGGAGGATATATTTTATGAG +CATAGATCCCTTTGAGCTATTTGAACCATTTGCTGAAAACAACAGTGCTAAAGAGACAGA +AGAACTAGgAAATATTGAAGCTGGTGtcGCACCTCTACCAcaTGTAGTATCACTTTCAAC +TTCTCCACCGCAACCTATACAACCTGTAGTATCTATAGCACCTACAGAGCCTACAGAAGC +TACTGTAACTACTTCTACTACAACACCTTATAAAGAATTAAAAGAAATTTATACATCAGT +AGCAGAAGAGCTTTTTAGTGAAACACAGAATACATCAACAGAGCCATTAGAGCCATATAA +AGAATTAAAAGAAATTTATACACAAGAAAGTTCTGTTGATGTACAAAAAATGTCTACTAC +TGTAACTACTAAACAACAGTGTCAAGATGCTCAAGATGCTCAAGTTCCAACAGTTCCACA +AAAGAAGCAAGAAGGCCTGTTAAACGAGTTAAGTGAAAGTAATAGTACACCAGAGCCTAT +AGAGCCTAAAGATGAGCCACAGAGCCAACAGAAGCCTCTTAAACGACCACCTGTAGTACC +TTCAGAGTTAATTACAGGTCGTCCTAAAGGTGCAAAGAACAGAACCTGCATGATGTCTTT +AGATGAGCGGTTAAAAGTACTAACAGGAATTATAAAGAACAAAAATACAAAAACATCAGA +TAAAATTGCAGCTATTAAGTGTATAACCGACTTGCTGAATGATAAAGTAGAACGTGAAGG +TACTAACGGACATACTACAATACTGAAATTTGAGAAGATGAATATGCCTAAACAACGTAA +AAAGAATAAAGATAGATATAGTAAAATATTTAGAGTTCGTTCAAATACTATGGAAAACTT +GAATAATTTTTTGGAGAACTTAACTACAGAAGCTACTGAGGCTACTGAAGAAACAGAAGC +TACcGAAGAaGATAGCACTGTTGAAGAcGATAGCACTGTTGAATAAtTGTATAGTGGTAA +CAAAAGAGGAGTGTTAAGGTGCCACATAACATATTAGCCAACGACAAAAGATATAATAAC +TACACAATAGGCAGATATACATATGGTTCTCCTAAAGTACATGGATATAGAAATACCTTA +GAAATAGGCCACTTTTGTAGTATTGCAGAAGGTGTAGAGATATTTTTAGATGGCCAACAT +AGAACTAAATGGATAACTACTTCGCCTTTATATCACTTGTTAATATCTAAAAGAGTATAT +GGTAAACCTAAATACGGAGTTTCTTCTAAAGGGCCTGTAGTTATTGGCTCaGATGTATGG +ATAGGTTATAAGGCTTTAATACTATCTGGAGTaACTATAGGCGATGGTGCAGTTATAGGA +GCAAAGAGTGTAGTAAGTAAAGATATTCCTCCTTATGCTATTGCTGTTGGTTCGCCTATA +GTTGTAAAGAAGTATAGGTTTACAGAAGAACAGATAACAGAGCTACTTAGAATACAGTGG +TGGAATTGGCCTGAAGAGAAGATAAAACAGAATATTAAGTTGCTTTTAAGTGAAAATATA +GAAGAATTTATAAGAACTTTTAAAGTGTAAATGTATAATAATACTGTGAAGCCTAAGAAG +TTAGTGATGGTGGTGAATGACAAGTGCGGAGCCGTAGTAGTAATTTACAAAGATGATATT +A +>contig18313 +AAAATGCCGGTCACAGTAATATTCTACTTGAGATTGGACAACAGGCAGAAGTGATGTTAT +GTAGGCGTCGAAACCATCAGCCGCAGTTGTGTTTGTCAGCGTTCTAAAATGTGCTAACGT +TAAAATACTCATTCCGATACTCCTTTTACATCATCGGTATCGGAATTTAGTCTAACGATG +ATGTAGAACTCTTAGAACTTTCCGAGCTTTCCGATTGTGAAGAATAACTTTCCGGAGTTG +ACGAAGAACTACTTTCACTTACAGAACTTTCCGATTGCGAACTGTTTGTTGATCTACTTG +ATGCCGCTTCATGCGACTCTTCTTCTGAGCTTGTAGATGAAGCAGAACTTTCAGAAGTTT +CAGTTTCAGAGCTTGAACTTTCACTTACAGTACTTTCGCTTACAGAGCTTTCACTTGTCG +AACTATGAGTGCTTTCGCTTACAGTGCTTTCGCTTACAGAACTTTCCGATTGCGAACTTC +CAGTACTAGCAGAACTCTGACTTACCGTACTTGCAGAACTCTGGCTTACAGTACTAGCAG +AACTCTGGCTCTTAGACGAAGAACTACTTGAACTTACAGAACTTGCACTCGATGTTGAAC +TGTCATATATTTCAGTACTCAAGCTTTCCGAACTATCAGAACTCAAGCTTACAACACTCT +GAGAACTCAACGAAGACGAACTATTAGAACTATGCGTAATTTCAGAGCTTGCCGAAGATG +TGCTTGCCGAAGATGTAGAACTTGAAGAAACATTACCGGCACTTTCAGAACTTGAAGAAG +AACTGACAGTAGGACCAGTACCTTCAGCTATTACGAAAGGCGCAACTTGCTCACCATCAT +CCATTGTATATACATTACCATAAGAGCATCCGCCGAAACGAACTTCTAATATTAACTCTT +CTTCATTATAATTCCATCTAAGAGCAACAGACATATGCTTTCTAATTTCTACTTCGGTTA +CAACATATTGAGAGAAGTCACCTAAAACTATACCTTCGTCACCTGATAATTGCTCCATTA +TATTGACTTTATGACCAAATATTACAGGAGTGCCATCAGATGTCCATGAAAGCCACGGAT +TAGTTTTTGTATCATCAACTAGATCCGTAATATCATTCCAATTCTCCTTAGAAAAATACC +ATTCAGCCTTTTTTGAGTTTGCAGGAGCTATTTTCTTCTCAAAATTTCTTAAAACGGCTA +ATGTTAATGGATCCGCAGAAGCAGCACCTATAACTCCATTCGCACCTGCAC +>contig15080 +GAACTTGTAGAAGAAGCAGAACTTTCACTTGTAGAAGAAGCAGAACTTTCACTTGTAGAA +CTTAAGCTGCTCTCGGAAACAGAACTCTCACTCGTAGAAGAAGCAGAACTCTCACTTAAG +CTACTCTCAGAAAGACTTGAACTCTCAGAAACACTTGAACTACTCTTAGAACTACTTGAA +CTCTCGGAAACGCTTGAACTGGAACTACTTACAGAACTTGAACTTGAAGAAGAAGCAGAC +GAAGCCGAACTTGCACTTGATGTTGAACTTGAACTTGAAGAAGAACTTGAAGCAGAAGAC +GTTGAACTAGATGAAGCAGAACTTGTAGAACTAGACGAAGCAGAAGATGTACTTGAACTG +CTCCTTGAACTTGTAGAAGAATACGAAGAgAggCTtTCTGTAATTGAACTTGTAGAAGAA +CTATAACTcTCTGTTACACTaCTACTgGAACTATACTCAAATATCTCAGGAGCCTTTATG +CCAAGTAAtAAaACCTCTATaTGATGAGACATTCGGTTgCATTTGTCAATATACTTTATG +CCATACCAATGTCCTTTTATATAAACAAGATTGGTACTTTTGAGATGTCTTATATCACAA +AAAAGCCTGTGAGTAGCAACAATATTCTGTTTACCAAAGGCTTTTCGTTCATCAGCAGAA +AGAAGAGTAAAATAGCAAGGTATATTTGAGGCAATTAGAGCAGCAGTACGAATGATGCCG +CCCATATTATCCCGGCCAGTAATTTCATAACTGTATAAACTGTATTTGGACCAGTATAAA +TTATTGATGCTTCCAGCCACACAAATTATTTCCTTAAGTTTGCTTTTTTACAAACGGCCA +TAACGAGTCTGCATATCCATCTAATATGTTCTTTAATAATAAAGTATCCGCATATGTAAT +AGAGTAATTTGTAATAGTTTGACTCTTTATTAAACCAATATCAGGTAACTTACTCTTTGC +CAACATGTCCTTAATAATATTTGCACAAACATTCTGTAAAGCATCTGGCATATCTGCATT +TGTATAACCAGCATTCCAAATAATATAAAGGTTCTCTGGAAAATAAAAGTCAATGTTATA +CGAGAAAACACTATCTTCCGCAAACTTTAATGTTCTTTCTGTACCATCCTCAATTAAAGC +ATGACAGTCAACTCTAGTAGCAATAGTCCATGTTAAACCAACACAAGGACGTAACATATT +TGAAGAAGTTGTCTCGTAACCACTTACAATTGCGACAGTTATAGCAGGATAGTCATCTTC +TATTTCTGTTTTTAATGCAGTTAGAGTAGTGTTATCTGCAAACAAGTAGTCTGTAGCAGC +aTAGTTTATATTTGTAACATCAATTACAGTAACCCTATCCGTTTTAACCTGTATCGTATA +GTCAAAGGCACTGTCAATAGTTATGTTTGCAGCAGTTACAGGAGAGCCAATAAATACTAT +GGTGTTAAcAGGATATTCAGGCAGTAAAACTCTTCTGTACGGAGTAAATTTGAACCATTG +CTTGTAGTTTGCAGCATC +>contig07253 +AGTCCAATACCAATACCAACAATTACACCTGAGACCACAAACTCACTAATTGTAATTATT +GCCACACAAAGCGCAGCGAATAAAACATTTTCCAATTATAGCATTACTACTGAGAATCCA +AGCTGGACAGAACGATTTGATATACAAGGTTCTATTGCCGCTAATGGTACTTTTGCAATG +GGAACCGGTCCAAGAGCATCAGCAGCGGCAACCGGAACTGGATATGTAAGTACAGCACCG +GTCGCTGGCTTTCCTTCTGCAGCTTTGTTCTCTTTGAATGGAAGTTAAAAAGTTAATAAT +ATAATTTAATATGAGGCCAATATGTTACTTACACAACAGGTTTTAAGACTAATCTTCGCC +AAACTAGGTGGCTTGATAACTGAAGGCACCATTACAGGCGTATATCCGTATATGGCTCCT +GATGAGGCTGTATATCCATTTGTAGTAGTAATTCCTGTTGGTCTGGATATGGACTACGCC +TTCACCAAAGACTACGAATTAATAGATGTTCAATTTAGTGTTTTTGATAGCAATCCAGAA +CATATATCAACTCTTTTAATTCTAAACGAAATTGAAGAAATATTTCACAGAGCACATATG +GAATTCTATGATACCGATAATGCTAAACATCTAGTGTGTATTGCTAAAACTAATGAAAAA +ATTGAATATATGGACGAAGATCACTATTGGCATGGTATTGGAGAATATGACTTTAGATGT +CAGAAAGATGCTGGAACAACTAGAAGTAGCTCCTCAAGTAGTATAACAGAAAGCCTGAGT +TCTGCCTCTACAAGCAGTTCCACGAGCTCGTCTACATCTTCTATAAGTTCTAATAGTTCT +TCAAGTAGTTCAAGTCGTAGCTCCTCAAGCACAAGCCAGACAAGCGAAAGTTCTAAGAGT +AGCTCAAGTACATCCTCGAGTAGCGCAGAACCTTCAACTTCTTCACAGAGTACCACAAGT +GAAAGTTCTAAGAGTAGTTCAAGTGAGTCTCTAAGTAGTGCGGAACCTTCTACTTCTTCA +CAAAGTACAACAAGTGAAAGTTCTAGAAGTAGTTCAAGCCAGTCTCTAAGTAGCGGAGAG +CCTTCAACTTCTTCACAGAGCACAACAAGTGAAAGTTCCAGAAGTAGCTCAAGTAATTCT +TCAAGTAGTGCAGAGCCTTCAACTTCTTCACAAAGTACAACAAGTGAAAGTTCTAGAAGT +AGTTCAAGCCAGTCTCTAAGTAGCGGAGAGCCTTCAACTTCTTCACAGAGCACAACAAGT +GAAAGTTCCAGAAGTAGCTCAAGTAATTCTTCAAGTAGTGCAGAGCCTTCAACTTCTTCA +CAGAGCACCACAAGCGAAAGTTCTAAGAGTAGTTCAAGTAATTCCTCAAGTAGTGCAGAG +CCTTCAACCAGTTCGCAAAGTACAACAAGTGAAAGTTCCAGAAGCAGCCTAAGCACATCT +TCAAGTAGCGCGGAACCTTCTACTTCTTCACAAAGTACCACAAGTGAAAGTTCTAAGAGT +AGTTCAAGCCAGTCTCTAAGTAGCGGAGAACCTTCAACTTCTTCACAAAGTACTACAAGC +GAAAGTTCTGGAAGTAGTTCAAGCGAATCAATGAGTAGCCGTAGTAGCTCTTCTACAAGC +GAAAGTTCTACATCTTCTGCAAGTTCTGTAAGTAATTCAAGTGTAAGTTCTTCGTCTACA +AGCAGTTATAGCGGTTCAAGTAGTTCAACAGGAAGTTCTGAAAGTTCTGTAAGTGAAAGT +TCTGTAAGTAATTCAAGCGAGTCGTCAAATTCAAGTAGCAACTCTTCTTCTAGTAGTCAC +AGTAGTTCTTCTGATAGCACAATGTCAAGTAGCTCTACATCTAGCGCAAGTTCAAATAGT +TCCAGTAGTTCTTCTATAAGCACTCCTTCTTCGGAAAGTTCTGAAAGCTCTAGTAGTTCT +GTTGAGTTTAGTTCTAGTAGTTCTTTAAGTTCTGAAAGCGAAGGAAATACTTCTAGCAGT +TCAACAGGTTCGTCTTTATCAACACAGAGTGAAAGTAGCAGTTCAACATTATCAAGTGAA +AGTTCTGTAAGCGAAAGTTCTGAAAGTTCTGCAAGTGAAAGTTCTGCAAGTACACAAAGT +AGTAGCTCCTCAAGTCTATATGATGCTTGCGATATGCTACCGGTTATGACAAGCAATACA +ACTCCTAAACCTTATGTAACATCGGCCGGTTATGATACTATACTCGGATACGCTTGGCAG +GCTACTACTATTGCTGGATGGTACTTATGGCAACCTGGCGGCAATGAGTGGGGCTGGTGG +ATAATTGACTACTCAGAAGAGAAGCAAATTGTTAAGAGATATGGATACTATGGCGTTTCT +GTAGTTGACTATCCTACAACTTGGTACTTCTATGGTTCAATGCACGGCGACGACTGGACG +CAACTAGAGGGTTACCCAAGACAAGGCGCTCCTACACTTGGACAATGGAACAACTTTGAT +ATTGAAAATGATACTGCATATAGATATTACAAACTGTATATACCTAATGTTTCTACTGAT +AACTGTACGATGCGGCTACGCTTCTGCGGAATAACTGAATTGTATAGTAGCTCAAGTAGT +TTTTCTAATAGCTCTAGTAGTTCTGTAATTGAGTCTAGAAGCTCAGCAAGTACAGGAAGT +AGCGAAAGTACAGTTAGTGAAAGTTCTGTAAGCTCTGATAGCTCGCCTTAAAATACCATG +AACTATTACGATCTCAATCCAGGACAAGGCAGGATTAAATGGCAGTGGCATATCGAAGAA +TTCTTGCTTAAACTCGAACCTAAAATAACTGAGGCCTTAGAAGACTCTATTGAAATGATG +GCTGATAGTGCAAAAGACAAGGCACCTGTGAAAACTGGACGACTAAAGAACAGTATATAT +ACTGAGAGTTTTCATCCTGATAAATGCTCTTGGATAGGAAGAGTAATATCACCTGTACCT +TATACACAGTGTGTTGAaTATGGAACCAGGAAGAGATCGGCTAAACCGTTTATGAGGCCT +GCTTTTAGAGGTACCTGGAGTAAGGTACTAAGTAGATTTAGAAATATTATAGGCTAA +>contig18116 +AAAGTGCCTATCACAGTAATATTCTACTTGAGATTGCACAACCGGCAGAAGCGATGTTAT +GTAAGCATTAAAACCATCAGCCGCAGTGGTATTTGTCAGCGTTCTATATTGCGCCAGCGT +TAAAATACTCATTCCGATACTCCTTTTACATCATCGGTATCGGAATTTAGTCTAACGATG +ATGTAGAACTCTTAGAACTTTCCGAGCTTTCCGATTGTGAAGAATAACTTTCCGGAGTTG +ACGAAGAACTACTTTCACTTACAGAACTTTCCGATTGCGAACTGTTTGTTGATCTACTTG +ATGCCGAACTATGCGACTCTTCTTCTGAGCTTGTAGACGAAACAGAACTTTCGCTTACAG +TACTTTCACTTACAGAACTTTCAGAAGTTTCAGAACTTTCAGAAGTTTCAGTACTTTCAG +AAGTTTCAGAAGTTGAACTATGAGTGCTTTCGCTTACAGTGCTTTCGCTTACAGAACTTT +CCGATTGCGAACTTCCAGTACTAGCAGAACTCTGACTTACCGTACTTGCAGAACTCTGGC +TTACAGTACTAGCAGAACTCTGGCTCTTAGACGAAGAACTACTTGAACTTACAGAACTTG +CACTCGATGTTGAACTGTCATATATTTCAGTACTCAAGCTTTCCGAACTATCAGAACTCA +AGCTTACAACACTCTGAGAACTCAACGAAGAGGAACTTTCAGAACTATGCGTAATTTCAG +AGCTTGCCGAAGATGTGCTTGCCGAAGATGTAGAACTTGAAGAAACATTACCGGCACTTT +CAGAACTTGAAGAAGAACTGACAGTAGGACCAGTACCTTCAGCTATTACGAAAGGCGCAA +CTTGCTCACCATCATCCATTGTATATACATTACCATAAGAGCATCCGCCGAAACGAACTT +CTAATATTAACTCTTCTTCATTATAATTCCATCTAAGAGCAACAGACATATGCTTTCTAA +TTTCTACTTCGGTTACAACATATTGAGAGAAGTCACCTAAAACTATACCTTCGTCACCTG +ATAATTGCTCCATTATATTGACTTTATGACCAAATATTACAGGAGTGCCATCAGATGTCC +ATGAAAGCCACGGATTAGTTTTTGTATCATCAACTAGATCCGTAATATCATTCCAATTCT +CCTTAGAAAAATACCATTCAGCCTTTTTTGAGTTTGCAGGAGCTATTTTCTTCTCAAAAT +TTCTTAAAACGGCTAATGTTAATGGATCCGCAGAAGCAGCACCTATAACTCCATTTGCAC +CAATACTAAAAATACCTTCA diff --git a/scripts/tests/test_data/bins/sample1_gt1000_bin99.fa b/scripts/tests/test_data/bins/sample1_gt1000_bin99.fa new file mode 100644 index 0000000..bff9596 --- /dev/null +++ b/scripts/tests/test_data/bins/sample1_gt1000_bin99.fa @@ -0,0 +1,44 @@ +>contig06860 +TTATAGCCGGTTTAGCCCCGTGCTTACGGGGAACAGCTTTAGCTTTTGCAATGCTTCTCC +GTCACTGTCGGTTTAGCCCCGTGCTTACGGGGAACAGTAGCGGCTCTTTCGGCCCTTCCA +GCTTTTCGACGGTTTAGCCCCGTGCTTACGGGGAACAGGCGTCTACATCAATGCGCGATT +GAACCAGCGCCGGTTTAGCCCCGTGCTTACGGGGAACAGGATTCATCGTATTTCGTAGGT +CTAGCCACAGGCGGTTTAGCCCCGTGCTTACGGGGAACAGCTACCTAATGCGCCAAGGTA +AATCACTGGTAGCGGTTTAGCCCCGTGCTTACGGGGAACAGGCCAAGATTTCCAAGCTGC +ATAAGTCTGGTTTGCGGTTTAGCCCCGTGCTTACGGGGAACAGTTTCAACTGGCAGCCAT +TTAAGCGCCTGCCCGCGGTTTAGCCCCGTGCTTACGGGGAACAGCTAAAATAAGATAGCG +CTCTACATCTGTATGCCGGTTTAGCCCCGTGCTTACGGGGAACAGAAGGCTAACGGCGTG +AACATTTGTTATGCTTACGGTTTAGCCCCGTGCTTACGGGGAACAGCATCCTGTAATGTC +TAAAATCTGATTAGCTAACGGTTTAGCCCCGTGCTTACGGGGAACAGAGTATCCAGCCAT +ATCATCTCAATATAGTTAGCGGTTTAGCCCCGTGCTTACGGGGAACAGATTATTTAAATT +ATTTTCTATTTCAATATATTCGGTTTAGCCCCGTGCTTACGGGGAACAGTCAAAATCAAT +CTGAGACATTCCAGCAAAGTACGGTTTAGCCCCGTGCTTACGGGGAACAGTTGTTGAGTC +AATCACGTTTTGCCACCTGTTGCGGTTTAGCCCCGTGCTTACGGGGAACAGTTCCTGAAT +GACTCTGTGAATGCAGACAGAAACGGTTTAGCCCCGTGCTTACGGGGAACAGCTAATAAT +GCGATCCATTATTTACCGCCTTTGCGGTTTAGCCCCGTGCTTACGGGGAACAGCGCAGAT +TCCGTACTGTTTCCGAGCCGTTCCGCGGTTTAGCCCCGTGCTTACGGGGAACAGAAGACC +AACTATTTCTAAAGTGACGGGTTTACCGGTTTAGCCCCGTGCTTACGGGGAACAGGTCAG +GGCAGGTTGCTGGACACGTAGCGGGATCGGTTTAGCCCCGTGCTTACGGGGAACAGAAAA +ACTTTTGTATCTCAGGAAGATTTATAGACGGTTTAGCCCCGTGCTTACGGGGAACAGTCA +GGGCATCCAAGCTACTTGGACCCAGGAGGCGGTTTAGCCCCGTGCTTACGGGGAACAGAC +GCAAAGTTTTCATCTGGAAGTGACCCTATGCGGTTTAGCCCCGTGCTTACGGGGAACAGT +AGCAATGGCTGAAACTGTCACTATTGAACACCGGTTTAGCCCCGTGCTTACGGGGAACAG +ACGTTTTAATTTGTCTGACTTAAAAGAGTGTTCGGTTTAGCCCCGTGCTTACGGGGAACA +GTCCACAAGTACCAAGACGGTGACGACAACCTACGGTTTAGCCCCGTGCTTACGGGGAAC +AGGTTTTTCCATCCGTCAGCACTGACAAGGGGCGCGGTTTAGCCCCGTGCTTACGGGGAA +CAGGCCAAAGACGCCAATGGAGCAGGCTCAGTATGCGGTTTAGCCCCGTGCTTACGGGGA +ACAGTCTATTTCACTGACAGCGGCTTTATGTGCTCGCGGTTTAGCCCCGTGCTTACGGGG +AACAGTGGCGTTAATCTTTACCCGAACACTCCACGTCCGGTTTAGCCCCGTGCTTACGGG +GAACAGTCTCGGAATGGCTTCAGTGTCTGTTCCGTTAACGGTTTAGCCCCGTGCTTACGG +GGAACAGTAAATGCGGTTAAGTTAAGGTTGACAACCTCGCGGTTTAGCCCCGTGCTTACG +GGGAACAGCCTTGCTGCCAAACTGGAAATGACGCAAACGACGGTTTAGCCCCGTGCTTAC +GGGGAACAGATCAAAGTCGTTTGGCGCATCAAATGTGCCTACGGTTTAGCCCCGTGCTTA +CGGGGAACAGCGCCACCTTCTAACCGTTGAACTGAACTCAGACGGTTTAGCCCCGTGCTT +ACGGGGAACAGTATCGGTATGGCTCTCAAGTCCTGCGCTGAGCCGGTTTAGCCCCGTGCT +TACGGGGAACAGTCTGCCGCAAAAGCTCTTAACTGCCCGACCGTCGGTTTAGCCCCGTGC +TTACGGGGAACAGTCGATGCCCGGATTCGCTTTAGGTGGGTTAGACGGTTTAGCCCCGTG +CTTACGGGGAACAGCCAAAGACGCCAATGGAGCAGGCTCAGTATGCCGGTTTAGCCCCGT +GCTTACGGGGAACAGATCTGGCATCAATTTTAAATGTGTTGGTGTTTCGGTTTAGCCCCG +TGCTTACGGGGAACAGGAACGCAGCCGCTGCCATTGCAGCCAAGACAACGGTTTAGCCCC +GTGCTTACGGGGAACAGTAGCCGTAATAACCAAGGTCGTAACGTTTGAGCGGTTTAGCCC +CGTGCTTACGGGGAACAGGCGCTACCGCCCCCA From 93ba40599bf7ecc9839fe3199ad004d643be8f9a Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 25 Nov 2015 17:03:19 +0100 Subject: [PATCH 04/78] Updated documentation for new dnadiff dist matrix functionality. Thanks @inodb --- doc/source/scripts/dnadiff_dist_matrix.rst | 1 + scripts/dnadiff_dist_matrix.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/source/scripts/dnadiff_dist_matrix.rst b/doc/source/scripts/dnadiff_dist_matrix.rst index eecf468..23fafe2 100644 --- a/doc/source/scripts/dnadiff_dist_matrix.rst +++ b/doc/source/scripts/dnadiff_dist_matrix.rst @@ -21,6 +21,7 @@ This results in the following output files in the folder ``test_dnadiff_out/``: - ``dist_matrix.stv`` The distance matrix - ``fasta_names.tsv`` The names given to each bin (or fasta file) + - ``clustering.tsv`` This file will give a cluster assignment for each bin (or fasta file) - :download:`hcust_dendrogram.pdf <../_static/scripts/dna_diff_dist_matrix/hclust_dendrogram.pdf>` Dendrogram of the clustering (click for example) - :download:`hcust_heatmap.pdf <../_static/scripts/dna_diff_dist_matrix/hclust_heatmap.pdf>` diff --git a/scripts/dnadiff_dist_matrix.py b/scripts/dnadiff_dist_matrix.py index d262b01..4852d43 100755 --- a/scripts/dnadiff_dist_matrix.py +++ b/scripts/dnadiff_dist_matrix.py @@ -25,7 +25,8 @@ A hierarchical clustering of the distance using euclidean average linkage clustering is plotted. This can be deactivated by using --skip_plot. The resulting heatmap is in output_folder/hclust_heatmap.pdf or -output_folder/hclust_dendrogram.pdf. The image extension can be changed. +output_folder/hclust_dendrogram.pdf and the resulting clustering is presented +in output_folder/clustering.tsv. The image extension can be changed. """ import argparse import subprocess From 6c9cb6856fb54c9bcbf24706804130425b0368e3 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Sat, 21 May 2016 12:37:10 +0100 Subject: [PATCH 05/78] Updated to newer Cython interface --- bin/concoct | 9 +- .../temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o | Bin 0 -> 69284 bytes .../build/temp.macosx-10.9-x86_64-2.7/vbgmm.o | Bin 0 -> 145964 bytes c-concoct2/c_vbgmm_fit.c | 1250 ++++ c-concoct2/c_vbgmm_fit.h | 163 + c-concoct2/setup.py | 15 + c-concoct2/vbgmm.c | 5691 +++++++++++++++++ c-concoct2/vbgmm.pyx | 39 + c-concoct2/vbgmm.so | Bin 0 -> 68068 bytes setup.py | 18 +- 10 files changed, 7178 insertions(+), 7 deletions(-) create mode 100644 c-concoct2/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o create mode 100644 c-concoct2/build/temp.macosx-10.9-x86_64-2.7/vbgmm.o create mode 100644 c-concoct2/c_vbgmm_fit.c create mode 100644 c-concoct2/c_vbgmm_fit.h create mode 100644 c-concoct2/setup.py create mode 100644 c-concoct2/vbgmm.c create mode 100644 c-concoct2/vbgmm.pyx create mode 100755 c-concoct2/vbgmm.so diff --git a/bin/concoct b/bin/concoct index 861b8e2..62a3e95 100755 --- a/bin/concoct +++ b/bin/concoct @@ -4,6 +4,7 @@ from __future__ import division import sys import logging import vbgmm +import numpy as np from concoct.output import Output from concoct.parser import arguments @@ -11,7 +12,6 @@ from concoct.cluster import cluster from concoct.input import load_data from concoct.transform import perform_pca -import vbgmm def main(args): # Initialize output handling @@ -61,8 +61,13 @@ def main(args): logging.info('PCA transformed data.') logging.info('Will call vbgmm with parameters: %s, %s, %s' % (Output.CONCOCT_PATH, args.clusters, args.length_threshold)) + import ipdb; ipdb.set_trace() + NC = transform_filter.shape[0] + assign = np.zeros(NC,dtype=np.int32) + debug=False + vbgmm.fit(transform_filter, assign, args.clusters, debug) - vbgmm.fit(Output.CONCOCT_PATH, args.clusters, args.length_threshold,args.seed,args.iterations,args.epsilon,args.converge_out) +# vbgmm.fit(Output.CONCOCT_PATH, args.clusters, args.length_threshold,args.seed,args.iterations,args.epsilon,args.converge_out) logging.info("CONCOCT Finished") diff --git a/c-concoct2/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o b/c-concoct2/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o new file mode 100644 index 0000000000000000000000000000000000000000..9a64bd0ca05f8ee487da2e695359d6504fa4e835 GIT binary patch literal 69284 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∥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

pgko9yitU9i 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 literal 0 HcmV?d00001 diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c new file mode 100644 index 0000000..fc64114 --- /dev/null +++ b/c-concoct2/c_vbgmm_fit.c @@ -0,0 +1,1250 @@ + + +/* C functions for running vbgmm from Cython*/ + +/*System includes*/ +#include +#include +#include +#include +#include +#include + +/*GSL includes*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*User includes*/ +#include "c_vbgmm_fit.h" + +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug) +{ + driver(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug); + + return; +} + +int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug) +{ + t_Params tParams; + t_Data tData; + gsl_rng *ptGSLRNG = NULL; + const gsl_rng_type *ptGSLRNGType = NULL; + t_VBParams tVBParams; + t_Cluster *ptBestCluster = NULL; + int i = 0; + + /*initialise GSL RNG*/ + gsl_rng_env_setup(); + + gsl_set_error_handler_off(); + + ptGSLRNGType = gsl_rng_default; + ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); + + /*set clusters params*/ + tParams.nKStart = nKStart; + tParams.nMaxIter = nMaxIter; + tParams.dEpsilon = dEpsilon; + tParams.lSeed = lSeed; + + generateInputData(adX, nN, nD, &tData); + + setVBParams(&tVBParams, &tData); + + ptBestCluster = (t_Cluster *) malloc(sizeof(t_Cluster)); + + ptBestCluster->nN = nN; + ptBestCluster->nK = tParams.nKStart; + ptBestCluster->nD = nD; + ptBestCluster->ptData = &tData; + ptBestCluster->ptVBParams = &tVBParams; + ptBestCluster->lSeed = tParams.lSeed; + ptBestCluster->nMaxIter = tParams.nMaxIter; + ptBestCluster->dEpsilon = tParams.dEpsilon; + + ptBestCluster->szCOutFile = NULL; + + if(debug>0){ + ptBestCluster->szCOutFile = DEF_FILE_STUB; + } + else{ + ptBestCluster->szCOutFile = NULL; + } + + runRThreads((void *) &ptBestCluster); + + compressCluster(ptBestCluster); + + calcCovarMatrices(ptBestCluster,&tData); + + for(i = 0; i < nN; i++){ + anAssign[i] = ptBestCluster->anMaxZ[i]; + } + + /*free up memory in data object*/ + destroyData(&tData); + + /*free up best BIC clusters*/ + + destroyCluster(ptBestCluster); + free(ptBestCluster); + + gsl_rng_free(ptGSLRNG); + gsl_matrix_free(tVBParams.ptInvW0); + + return EXIT_SUCCESS; +} + + +void generateInputData(double *adX, int nN, int nD, t_Data *ptData) +{ + double **aadX = NULL; + int i = 0, j = 0; + + /*allocate memory for data matrix*/ + aadX = (double **) malloc(nN*sizeof(double*)); + if(!aadX) + goto memoryError; + + for(i = 0; i < nN; i++){ + aadX[i] = (double *) malloc(nD*sizeof(double)); + if(!aadX[i]) + goto memoryError; + } + + for(i = 0; i < nN; i++){ + for(j = 0; j < nD; j++){ + aadX[i][j] = adX[i*nD + j]; + } + } + ptData->nD = nD; + ptData->nN = nN; + ptData->aadX = aadX; + return; + + memoryError: + fprintf(stderr, "Failed allocating memory in readInputData\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + +void destroyData(t_Data *ptData) +{ + int nN = ptData->nN; + int i = 0; + + for(i = 0; i < nN; i++){ + free(ptData->aadX[i]); + } + free(ptData->aadX); + + return; +} + +void calcSampleVar(t_Data *ptData,double *adVar, double *adMu) +{ + double **aadX = ptData->aadX; + int i = 0, n = 0; + int nD = ptData->nD, nN = ptData->nN; + /*sample means*/ + double dN = (double) nN; + + for(i = 0; i < nD; i++){ + adMu[i] = 0.0; + adVar[i] = 0.0; + } + + for(i = 0; i < nD; i++){ + for(n = 0; n < nN; n++){ + adMu[i] += aadX[n][i]; + adVar[i] += aadX[n][i]*aadX[n][i]; + } + + adMu[i] /= dN; + + adVar[i] = (adVar[i] - dN*adMu[i]*adMu[i])/(dN - 1.0); + } + + return; +} + +void setVBParams(t_VBParams *ptVBParams, t_Data *ptData) +{ + int i = 0, nD = ptData->nD; + double adVar[nD], adMu[nD]; + + ptVBParams->dBeta0 = DEF_BETA0; + ptVBParams->dNu0 = (double) nD; + ptVBParams->ptInvW0 = gsl_matrix_alloc(nD,nD); + + calcSampleVar(ptData,adVar, adMu); + gsl_matrix_set_zero (ptVBParams->ptInvW0); + + for(i = 0; i < nD; i++){ + double dRD = adVar[i]*((double) nD); + + gsl_matrix_set(ptVBParams->ptInvW0,i,i,dRD); + } + + ptVBParams->dLogWishartB = dLogWishartB(ptVBParams->ptInvW0, nD, ptVBParams->dNu0, TRUE); +} + +void allocateCluster(t_Cluster *ptCluster, int nN, int nK, int nD, t_Data *ptData, long lSeed, int nMaxIter, double dEpsilon, char *szCOutFile) +{ + int i = 0, j = 0, k = 0; + + ptCluster->szCOutFile = szCOutFile; + ptCluster->ptVBParams = NULL; + ptCluster->lSeed = lSeed; + ptCluster->nMaxIter = nMaxIter; + ptCluster->dEpsilon = dEpsilon; + ptCluster->ptData = ptData; + + ptCluster->nN = nN; + ptCluster->nK = nK; + ptCluster->nKSize = nK; + ptCluster->nD = nD; + + ptCluster->dVBL = 0.0; + + ptCluster->anMaxZ = (int *) malloc(nN*sizeof(int)); /*destroyed*/ + if(!ptCluster->anMaxZ) + goto memoryError; + + ptCluster->anW = (int *) malloc(nK*sizeof(int)); /*destroyed*/ + if(!ptCluster->anW) + goto memoryError; + + for(i = 0; i < nN; i++){ + ptCluster->anMaxZ[i] = NOT_SET; + } + + for(i = 0; i < nK; i++){ + ptCluster->anW[i] = 0; + } + + ptCluster->aadZ = (double **) malloc(nN*sizeof(double *)); /*destroyed*/ + if(!ptCluster->aadZ) + goto memoryError; + + for(i = 0; i < nN; i++){ + ptCluster->aadZ[i] = (double *) malloc(nK*sizeof(double)); /*destroyed*/ + if(!ptCluster->aadZ[i]) + goto memoryError; + + for(j = 0; j < nK; j++){ + ptCluster->aadZ[i][j] = 0.0; + } + } + + ptCluster->adLDet = (double *) malloc(nK*sizeof(double)); /*all*/ + ptCluster->adPi = (double *) malloc(nK*sizeof(double)); + ptCluster->adBeta = (double *) malloc(nK*sizeof(double)); + ptCluster->adNu = (double *) malloc(nK*sizeof(double)); /*destroyed*/ + + if(!ptCluster->adLDet || !ptCluster->adPi) + goto memoryError; + + if(!ptCluster->adBeta || !ptCluster->adNu) + goto memoryError; + + for(k = 0; k < nK; k++){ + ptCluster->adLDet[k] = 0.0; + ptCluster->adPi[k] = 0.0; + ptCluster->adBeta[k] = 0.0; + ptCluster->adNu[k] = 0.0; + } + + ptCluster->aadMu = (double **) malloc(nK*sizeof(double *)); + if(!ptCluster->aadMu) + goto memoryError; + + ptCluster->aadM = (double **) malloc(nK*sizeof(double *)); + if(!ptCluster->aadM) + goto memoryError; + + for(i = 0; i < nK; i++){ + ptCluster->aadM[i] = (double*) malloc (nD*sizeof(double)); + if(!ptCluster->aadM[i]) + goto memoryError; + + ptCluster->aadMu[i] = (double*) malloc (nD*sizeof(double)); + if(!ptCluster->aadMu[i]) + goto memoryError; + } + + ptCluster->aptSigma = (gsl_matrix **) malloc(nK*sizeof(gsl_matrix *)); + if(!ptCluster->aptSigma) + goto memoryError; + + for(i = 0; i < nK ; i++){ + ptCluster->aptSigma[i] = (gsl_matrix*) gsl_matrix_alloc (nD, nD); + } + + ptCluster->aptCovar = (gsl_matrix **) malloc(nK*sizeof(gsl_matrix *)); + if(!ptCluster->aptCovar) + goto memoryError; + + for(i = 0; i < nK ; i++){ + ptCluster->aptCovar[i] = (gsl_matrix*) gsl_matrix_alloc (nD, nD); + } + + return; + + memoryError: + fprintf(stderr, "Failed allocating memory in allocateCluster\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + +void destroyCluster(t_Cluster* ptCluster) +{ + int i = 0, nN = ptCluster->nN, nKSize = ptCluster->nKSize; + + if(ptCluster->szCOutFile != NULL){ + free(ptCluster->szCOutFile); + } + + free(ptCluster->anMaxZ); + + free(ptCluster->anW); + + for(i = 0; i < nN; i++){ + free(ptCluster->aadZ[i]); + } + free(ptCluster->aadZ); + + free(ptCluster->adLDet); + free(ptCluster->adPi); + free(ptCluster->adBeta); + free(ptCluster->adNu); + + for(i = 0; i < nKSize; i++){ + free(ptCluster->aadMu[i]); + free(ptCluster->aadM[i]); + } + + free(ptCluster->aadMu); + free(ptCluster->aadM); + + for(i = 0; i < nKSize ; i++){ + gsl_matrix_free(ptCluster->aptSigma[i]); + gsl_matrix_free(ptCluster->aptCovar[i]); + } + free(ptCluster->aptSigma); + free(ptCluster->aptCovar); + return; +} + +void* fitEM(void *pvCluster) +{ + t_Cluster *ptCluster = (t_Cluster *) pvCluster; + gsl_rng *ptGSLRNG = NULL; + const gsl_rng_type *ptGSLRNGType = NULL; + + /*initialise GSL RNG*/ + ptGSLRNGType = gsl_rng_default; + ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); + + gsl_rng_set (ptGSLRNG, ptCluster->lSeed); + + initKMeans(ptGSLRNG, ptCluster, ptCluster->ptData); + + gmmTrainVB(ptCluster, ptCluster->ptData); + + gsl_rng_free(ptGSLRNG); + + return NULL; +} + +void* runRThreads(void *pvpDCluster) +{ + t_Cluster **pptDCluster = (t_Cluster **) pvpDCluster; + t_Cluster *ptDCluster = (t_Cluster *) *pptDCluster; + double dBestVBL = -DBL_MAX; + t_Cluster** aptCluster = NULL; + pthread_t atRestarts[N_RTHREADS]; /*run each restart on a separate thread*/ + int iret[N_RTHREADS]; + int r = 0, nBestR = -1; + char *szCOutFile = NULL; + aptCluster = (t_Cluster **) malloc(N_RTHREADS*sizeof(t_Cluster*)); + if(!aptCluster) + goto memoryError; + + for(r = 0; r < N_RTHREADS; r++){ + if(ptDCluster->szCOutFile != NULL){ + szCOutFile = (char *) malloc(sizeof(char)*MAX_FILE_NAME_LENGTH); + + sprintf(szCOutFile,"%sr%d.csv",ptDCluster->szCOutFile,r); + } + + aptCluster[r] = (t_Cluster *) malloc(sizeof(t_Cluster)); + + allocateCluster(aptCluster[r],ptDCluster->nN,ptDCluster->nK,ptDCluster->nD,ptDCluster->ptData,ptDCluster->lSeed + r*R_PRIME,ptDCluster->nMaxIter,ptDCluster->dEpsilon,szCOutFile); + aptCluster[r]->ptVBParams = ptDCluster->ptVBParams; + aptCluster[r]->nThread = r; + iret[r] = pthread_create(&atRestarts[r], NULL, fitEM, (void*) aptCluster[r]); + } + + for(r = 0; r < N_RTHREADS; r++){ + pthread_join(atRestarts[r], NULL); + } + + /*free up memory associated with input cluster*/ + free(ptDCluster); + + for(r = 0; r < N_RTHREADS; r++){ + if(aptCluster[r]->dVBL > dBestVBL){ + nBestR = r; + dBestVBL = aptCluster[r]->dVBL; + } + } + + *pptDCluster = aptCluster[nBestR]; + for(r = 0; r < N_RTHREADS; r++){ + if(r != nBestR){ + destroyCluster(aptCluster[r]); + free(aptCluster[r]); + } + } + free(aptCluster); + + return NULL; + memoryError: + fprintf(stderr, "Failed allocating memory in runRThreads\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + +void compressCluster(t_Cluster *ptCluster) +{ + int i = 0, k = 0, nNewK = 0, nN = ptCluster->nN; + double **aadNewZ = NULL, dN = (double) nN; + + for(i = 0; i < ptCluster->nK; i++){ + if(ptCluster->adPi[i] > 0.0){ + nNewK++; + } + } + + aadNewZ = (double **) malloc(nN*sizeof(double *)); + if(!aadNewZ) + goto memoryError; + + for(i = 0; i < nN; i++){ + aadNewZ[i] = (double *) malloc(nNewK*sizeof(double)); + if(!aadNewZ[i]) + goto memoryError; + } + + for(i = 0; i < nN; i++){ + int nC = 0; + for(k = 0; k < ptCluster->nK; k++){ + if(ptCluster->adPi[k] > 0.0){ + aadNewZ[i][nC] = ptCluster->aadZ[i][k]; + nC++; + } + } + } + + for(i = 0; i < nN; i++){ + free(ptCluster->aadZ[i]); + } + free(ptCluster->aadZ); + + /*reset Z and K*/ + ptCluster->aadZ = aadNewZ; + ptCluster->nK = nNewK; + + /*recalculate Pi*/ + for(k = 0; k < ptCluster->nK; k++){ + ptCluster->adPi[k] = 0.0; + for(i = 0; i < nN; i++){ + ptCluster->adPi[k] += ptCluster->aadZ[i][k]; + } + ptCluster->adPi[k] /= dN; + } + + /*assign to best clusters*/ + for(i = 0; i < nN; i++){ + double dMaxZ = ptCluster->aadZ[i][0]; + int nMaxK = 0; + for(k = 1; k < ptCluster->nK; k++){ + if(ptCluster->aadZ[i][k] > dMaxZ){ + nMaxK = k; + dMaxZ = ptCluster->aadZ[i][k]; + } + } + ptCluster->anMaxZ[i] = nMaxK; + } + + for(k = 0; k < ptCluster->nK; k++){ + ptCluster->anW[k] = 0; + } + + for(i = 0; i < nN; i++){ + ptCluster->anW[ptCluster->anMaxZ[i]]++; + } + + return; + + memoryError: + fprintf(stderr, "Failed allocating memory in main\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + +double decomposeMatrix(gsl_matrix *ptSigmaMatrix, int nD) +{ + double dDet = 0.0; + int status; + int l = 0; + + status = gsl_linalg_cholesky_decomp(ptSigmaMatrix); + + if(status == GSL_EDOM){ + fprintf(stderr,"Failed Cholesky decomposition in decomposeMatrix\n"); + fflush(stderr); + exit(EXIT_FAILURE); + } + else{ + for(l = 0; l < nD; l++){ + double dT = gsl_matrix_get(ptSigmaMatrix,l,l); + dDet += 2.0*log(dT); + } + gsl_linalg_cholesky_invert(ptSigmaMatrix); + return dDet; + } +} + + +void performMStep(t_Cluster *ptCluster, t_Data *ptData){ + int i = 0, j = 0, k = 0, l = 0, m = 0; + int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; + double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; + double *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; + double **aadCovar = NULL, **aadInvWK = NULL; + t_VBParams *ptVBParams = ptCluster->ptVBParams; + + aadCovar = (double **) malloc(nD*sizeof(double*)); + if(!aadCovar) + goto memoryError; + + for(i = 0; i < nD; i++){ + aadCovar[i] = (double *) malloc(nD*sizeof(double)); + if(!aadCovar[i]) + goto memoryError; + } + + aadInvWK = (double **) malloc(nD*sizeof(double*)); + if(!aadInvWK) + goto memoryError; + + for(i = 0; i < nD; i++){ + aadInvWK[i] = (double *) malloc(nD*sizeof(double)); + if(!aadInvWK[i]) + goto memoryError; + } + + /*perform M step*/ + for(k = 0; k < nK; k++){ /*loop components*/ + double* adMu = ptCluster->aadMu[k]; + gsl_matrix *ptSigmaMatrix = ptCluster->aptSigma[k]; + double dF = 0.0; + /*recompute mixture weights and means*/ + for(j = 0; j < nD; j++){ + adMu[j] = 0.0; + for(l = 0; l < nD; l++){ + aadCovar[j][l] = 0.0; + } + } + + /* compute weight associated with component k*/ + adPi[k] = 0.0; + for(i = 0; i < nN; i++){ + if(aadZ[i][k] > MIN_Z){ + adPi[k] += aadZ[i][k]; + for(j = 0; j < nD; j++){ + adMu[j] += aadZ[i][k]*aadX[i][j]; + } + } + } + + /*normalise means*/ + if(adPi[k] > MIN_PI){ + /*Equation 10.60*/ + ptCluster->adBeta[k] = ptVBParams->dBeta0 + adPi[k]; + + for(j = 0; j < nD; j++){ + /*Equation 10.61*/ + ptCluster->aadM[k][j] = adMu[j]/ptCluster->adBeta[k]; + adMu[j] /= adPi[k]; + } + + ptCluster->adNu[k] = ptVBParams->dNu0 + adPi[k]; + + + /*calculate covariance matrices*/ + for(i = 0; i < nN; i++){ + if(aadZ[i][k] > MIN_Z){ + double adDiff[nD]; + + for(j = 0; j < nD; j++){ + adDiff[j] = aadX[i][j] - adMu[j]; + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <=l ; m++){ + aadCovar[l][m] += aadZ[i][k]*adDiff[l]*adDiff[m]; + } + } + } + } + + for(l = 0; l < nD; l++){ + for(m = l + 1; m < nD; m++){ + aadCovar[l][m] = aadCovar[m][l]; + } + } + + /*save sample covariances for later use*/ + for(l = 0; l < nD; l++){ + for(m = 0; m < nD; m++){ + double dC = aadCovar[l][m] / adPi[k]; + gsl_matrix_set(ptCluster->aptCovar[k],l,m,dC); + } + } + + /*Now perform equation 10.62*/ + dF = (ptVBParams->dBeta0*adPi[k])/ptCluster->adBeta[k]; + for(l = 0; l < nD; l++){ + for(m = 0; m <= l; m++){ + aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m) + aadCovar[l][m] + dF*adMu[l]*adMu[m]; + } + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l ; m++){ + aadCovar[l][m] /= adPi[k]; + gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); + gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); + } + } + + + /*Implement Equation 10.65*/ + adLDet[k] = ((double) nD)*log(2.0); + + for(l = 0; l < nD; l++){ + double dX = 0.5*(ptCluster->adNu[k] - (double) l); + adLDet[k] += gsl_sf_psi (dX); + } + + adLDet[k] -= decomposeMatrix(ptSigmaMatrix,nD); + } + else{ + /*Equation 10.60*/ + adPi[k] = 0.0; + + ptCluster->adBeta[k] = ptVBParams->dBeta0; + + for(j = 0; j < nD; j++){ + /*Equation 10.61*/ + ptCluster->aadM[k][j] = 0.0; + adMu[j] = 0.0; + } + + ptCluster->adNu[k] = ptVBParams->dNu0; + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l; m++){ + aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); + } + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l ; m++){ + aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); + } + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l ; m++){ + gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); + gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); + } + } + + /*Implement Equation 10.65*/ + adLDet[k] = ((double) nD)*log(2.0); + + for(l = 0; l < nD; l++){ + double dX = 0.5*(ptCluster->adNu[k] - (double) l); + adLDet[k] += gsl_sf_psi (dX); + } + + adLDet[k] -= decomposeMatrix(ptSigmaMatrix,nD); + } + } + + /*Normalise pi*/ + + if(1){ + double dNP = 0.0; + + for(k = 0; k < nK; k++){ + dNP += adPi[k]; + } + + for(k = 0; k < nK; k++){ + adPi[k] /= dNP; + } + } + + /*free up memory*/ + for(i = 0; i < nD; i++){ + free(aadCovar[i]); + free(aadInvWK[i]); + } + + free(aadCovar); + free(aadInvWK); + + return; + + memoryError: + fprintf(stderr, "Failed allocating memory in performMStep\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + +void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData) +{ + /*very simple initialisation assign each data point to random cluster*/ + int i = 0, k = 0, nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; + double **aadMu = ptCluster->aadMu, **aadX = ptData->aadX; + int *anMaxZ = ptCluster->anMaxZ, *anW = ptCluster->anW, nChange = nN; + int nIter = 0, nMaxIter = ptCluster->nMaxIter; + for(i = 0; i < nN; i++){ + int nIK = gsl_rng_uniform_int (ptGSLRNG, nK); + ptCluster->anMaxZ[i] = nIK; + anW[nIK]++; + } + + updateMeans(ptCluster, ptData); + + while(nChange > 0 && nIter < nMaxIter){ + nChange = 0; + /*reassign vectors*/ + for(i = 0; i < nN; i++){ + double dMinDist = DBL_MAX; + int nMinK = NOT_SET; + + for(k = 0; k < nK; k++){ + double dDist = calcDist(aadX[i],aadMu[k],nD); + + if(dDist < dMinDist){ + nMinK = k; + dMinDist = dDist; + } + } + + if(nMinK != anMaxZ[i]){ + int nCurr = anMaxZ[i]; + nChange++; + anW[nCurr]--; + anW[nMinK]++; + anMaxZ[i] = nMinK; + + /*check for empty clusters*/ + if(anW[nCurr] == 0){ + int nRandI = gsl_rng_uniform_int (ptGSLRNG, nN); + int nKI = 0; + /*select at random from non empty clusters*/ + + while(anW[anMaxZ[nRandI]] == 1){ + nRandI = gsl_rng_uniform_int (ptGSLRNG, nN); + } + + nKI = anMaxZ[nRandI]; + anW[nKI]--; + anW[nCurr] = 1; + anMaxZ[nRandI] = nCurr; + } + } + } + //printf("%d %d\n",nIter,nChange); + nIter++; + updateMeans(ptCluster, ptData); + } + + for(i = 0; i < nN; i++){ + for(k = 0; k < nK; k++){ + ptCluster->aadZ[i][k] = 0.0; + } + ptCluster->aadZ[i][anMaxZ[i]] = 1.0; + } + + performMStep(ptCluster, ptData); + return; +} + +double calcVBL(t_Cluster* ptCluster) +{ + int i = 0, k = 0, l = 0, nN = ptCluster->nN; + int nK = ptCluster->nK, nD = ptCluster->nD; + double dBishop1 = 0.0, dBishop2 = 0.0, dBishop3 = 0.0, dBishop4 = 0.0, dBishop5 = 0.0; /*Bishop equations 10.71...*/ + gsl_matrix *ptRes = gsl_matrix_alloc(nD,nD); + gsl_vector *ptDiff = gsl_vector_alloc(nD); + gsl_vector *ptR = gsl_vector_alloc(nD); + double dD = (double) nD; + double** aadMu = ptCluster->aadMu, **aadM = ptCluster->aadM, **aadZ = ptCluster->aadZ; + double* adBeta = ptCluster->adBeta, *adNu = ptCluster->adNu, *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; + double adNK[nK]; + double d2Pi = 2.0*M_PI, dBeta0 = ptCluster->ptVBParams->dBeta0, dNu0 = ptCluster->ptVBParams->dNu0, dRet = 0.0; + double dK = 0.0; + + for(k = 0; k < nK; k++){ + adNK[k] = 0.0; + } + + /*Equation 10.72*/ + for(i = 0; i < nN; i++){ + for(k = 0; k < nK; k++){ + adNK[k] += aadZ[i][k]; + if(adPi[k] > 0.0){ + dBishop2 += aadZ[i][k]*log(adPi[k]); + } + } + } + + for(k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + dK++; + } + } + + /*Equation 10.71*/ + for(k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + double dT1 = 0.0, dT2 = 0.0, dF = 0.0; + + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptCluster->aptCovar[k],ptCluster->aptSigma[k],0.0,ptRes); + + for(l = 0; l < nD; l++){ + dT1 += gsl_matrix_get(ptRes,l,l); + } + + for(l = 0; l < nD; l++){ + gsl_vector_set(ptDiff,l,aadMu[k][l] - aadM[k][l]); + } + + gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptR); + + gsl_blas_ddot (ptDiff, ptR, &dT2); + + dF = adLDet[k] - adNu[k]*(dT1 + dT2) - dD*(log(d2Pi) + (1.0/adBeta[k])); + + dBishop1 += 0.5*adNK[k]*dF; + } + } + + /*Equation 10.74*/ + for(k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + double dT1 = 0.0, dT2 = 0.0, dF = 0.0; + + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptCluster->ptVBParams->ptInvW0,ptCluster->aptSigma[k],0.0,ptRes); + + for(l = 0; l < nD; l++){ + dT1 += gsl_matrix_get(ptRes,l,l); + } + + for(l = 0; l < nD; l++){ + gsl_vector_set(ptDiff,l,aadM[k][l]); + } + + gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptR); + + gsl_blas_ddot (ptDiff, ptR, &dT2); + + dF = dD*log(dBeta0/d2Pi) + adLDet[k] - ((dD*dBeta0)/adBeta[k]) - dBeta0*adNu[k]*dT2 - adNu[k]*dT1; + + dBishop3 += 0.5*(dF + (dNu0 - dD - 1.0)*adLDet[k]); + } + } + + dBishop3 += dK*ptCluster->ptVBParams->dLogWishartB; + + /*Equation 10.75*/ + for(i = 0; i < nN; i++){ + for(k = 0; k < nK; k++){ + if(aadZ[i][k] > 0.0){ + dBishop4 += aadZ[i][k]*log(aadZ[i][k]); + } + } + } + + /*Equation 10.77*/ + for(k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + dBishop5 += 0.5*adLDet[k] + 0.5*dD*log(adBeta[k]/d2Pi) - 0.5*dD - dWishartExpectLogDet(ptCluster->aptSigma[k], adNu[k], nD); + } + } + + gsl_matrix_free(ptRes); + gsl_vector_free(ptDiff); + gsl_vector_free(ptR); + + dRet = dBishop1 + dBishop2 + dBishop3 - dBishop4 - dBishop5; + + return dRet; +} + +void calcZ(t_Cluster* ptCluster, t_Data *ptData){ + double **aadX = ptData->aadX, **aadZ = ptCluster->aadZ; + int i = 0, k = 0, l = 0; + int nK = ptCluster->nK, nD = ptCluster->nD, nN = ptData->nN; + gsl_vector *ptDiff = gsl_vector_alloc(nD); + gsl_vector *ptRes = gsl_vector_alloc(nD); + double adDist[nK], dD = (double) nD; + double** aadM = ptCluster->aadM, *adPi = ptCluster->adPi; + + for(i = 0; i < nN; i++){ + double dMinDist = DBL_MAX; + double dTotalZ = 0.0; + double dNTotalZ = 0.0; + + for(k = 0; k < nK; k++){ + if(adPi[k] > 0.){ + /*set vector to data point*/ + for(l = 0; l < nD; l++){ + gsl_vector_set(ptDiff,l,aadX[i][l] - aadM[k][l]); + } + + gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptRes); + + gsl_blas_ddot (ptDiff, ptRes, &adDist[k]); + + adDist[k] *= ptCluster->adNu[k]; + + adDist[k] -= ptCluster->adLDet[k]; + + adDist[k] += dD/ptCluster->adBeta[k]; + + if(adDist[k] < dMinDist){ + dMinDist = adDist[k]; + } + } + } + + for(k = 0; k < nK; k++){ + if(adPi[k] > 0.){ + aadZ[i][k] = adPi[k]*exp(-0.5*(adDist[k]-dMinDist)); + dTotalZ += aadZ[i][k]; + } + else{ + aadZ[i][k] = 0.0; + } + } + + for(k = 0; k < nK; k++){ + double dF = aadZ[i][k] / dTotalZ; + if(dF < MIN_Z){ + aadZ[i][k] = 0.0; + } + dNTotalZ += aadZ[i][k]; + } + if(dNTotalZ > 0.){ + for(k = 0; k < nK; k++){ + aadZ[i][k] /= dNTotalZ; + } + } + } + + gsl_vector_free(ptRes); + gsl_vector_free(ptDiff); + return; +} + +void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData) +{ + int i = 0, k = 0,nIter = 0; + int nN = ptData->nN, nK = ptCluster->nK; + /*change in log-likelihood*/ + double dLastVBL = 0.0, dDelta = DBL_MAX; + double **aadZ = ptCluster->aadZ; + int nMaxIter = ptCluster->nMaxIter; + double dEpsilon = ptCluster->dEpsilon; + FILE *ofp = NULL; + + if(ptCluster->szCOutFile){ + ofp = fopen(ptCluster->szCOutFile,"w"); + if(!ofp){ + fprintf(stderr, "Failed to open file %s in gmmTrainVB\n",ptCluster->szCOutFile); + fflush(stderr); + } + } + + /*calculate data likelihood*/ + calcZ(ptCluster,ptData); + ptCluster->dVBL = calcVBL(ptCluster); + + while(nIter < nMaxIter && dDelta > dEpsilon){ + + /*update parameter estimates*/ + performMStep(ptCluster, ptData); + + /*calculate responsibilities*/ + calcZ(ptCluster,ptData); + + dLastVBL = ptCluster->dVBL; + ptCluster->dVBL = calcVBL(ptCluster); + dDelta = fabs(ptCluster->dVBL - dLastVBL); + + if(ofp){ + fprintf(ofp,"%d,%f,%f,",nIter, ptCluster->dVBL, dDelta); + for(k = 0; k < nK-1; k++){ + fprintf(ofp,"%f,",ptCluster->adPi[k]); + } + fprintf(ofp,"%f\n",ptCluster->adPi[nK - 1]); + fflush(ofp); + } + nIter++; + } + + if(ofp){ + fclose(ofp); + } + + /*assign to best clusters*/ + for(i = 0; i < nN; i++){ + double dMaxZ = aadZ[i][0]; + int nMaxK = 0; + for(k = 1; k < nK; k++){ + if(aadZ[i][k] > dMaxZ){ + nMaxK = k; + dMaxZ = aadZ[i][k]; + } + } + ptCluster->anMaxZ[i] = nMaxK; + } + + return; +} + +void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData) +{ + int i = 0, j = 0, k = 0, l = 0, m = 0; + int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; + double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; + double *adPi = ptCluster->adPi, **aadCovar = NULL; + double dN = (double) nN; + + aadCovar = (double **) malloc(nD*sizeof(double*)); + if(!aadCovar) + goto memoryError; + + for(i = 0; i < nD; i++){ + aadCovar[i] = (double *) malloc(nD*sizeof(double)); + if(!aadCovar[i]) + goto memoryError; + } + + + for(k = 0; k < nK; k++){ /*loop components*/ + double* adMu = ptCluster->aadMu[k]; + gsl_matrix *ptSigmaMatrix = ptCluster->aptSigma[k]; + /*recompute mixture weights and means*/ + for(j = 0; j < nD; j++){ + adMu[j] = 0.0; + for(l = 0; l < nD; l++){ + aadCovar[j][l] = 0.0; + } + /*prevents singularities*/ + aadCovar[j][j] = MIN_COVAR; + } + + /* compute weight associated with component k*/ + adPi[k] = 0.0; + for(i = 0; i < nN; i++){ + adPi[k] += aadZ[i][k]; + for(j = 0; j < nD; j++){ + adMu[j] += aadZ[i][k]*aadX[i][j]; + } + } + /*normalise means*/ + for(j = 0; j < nD; j++){ + adMu[j] /= adPi[k]; + } + + /*calculate covariance matrices*/ + for(i = 0; i < nN; i++){ + double adDiff[nD]; + + for(j = 0; j < nD; j++){ + adDiff[j] = aadX[i][j] - adMu[j]; + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <=l ; m++){ + aadCovar[l][m] += aadZ[i][k]*adDiff[l]*adDiff[m]; + } + } + } + + for(l = 0; l < nD; l++){ + for(m = l + 1; m < nD; m++){ + aadCovar[l][m] = aadCovar[m][l]; + } + } + + for(l = 0; l < nD; l++){ + for(m = 0; m < nD; m++){ + aadCovar[l][m] /= adPi[k]; + gsl_matrix_set(ptSigmaMatrix, l, m, aadCovar[l][m]); + } + } + + adPi[k] /= dN; /*normalise weights*/ + } + /*free up memory*/ + for(i = 0; i < nD; i++){ + free(aadCovar[i]); + } + + //gsl_matrix_free(ptSigmaMatrix); + free(aadCovar); + + return; + memoryError: + fprintf(stderr, "Failed allocating memory in performMStep\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + +/*note assuming you are using inverse W matrix*/ +double dLogWishartB(gsl_matrix *ptInvW, int nD, double dNu, int bInv) +{ + int i = 0; + double dRet = 0.0, dT = 0.0; + double dLogDet = 0.0, dD = (double) nD; + gsl_matrix* ptTemp = gsl_matrix_alloc(nD,nD); + + gsl_matrix_memcpy(ptTemp, ptInvW); + + dLogDet = decomposeMatrix(ptTemp, nD); + + if(bInv == TRUE){ + dRet = 0.5*dNu*dLogDet; + } + else{ + dRet = -0.5*dNu*dLogDet; + } + + dT = 0.5*dNu*dD*log(2.0); + + dT += 0.25*dD*(dD - 1.0)*log(M_PI); + + for(i = 0; i < nD; i++){ + dT += gsl_sf_lngamma(0.5*(dNu - (double) i)); + } + + gsl_matrix_free(ptTemp); + + return dRet - dT; +} + +double dWishartExpectLogDet(gsl_matrix *ptW, double dNu, int nD) +{ + int i = 0; + double dRet = 0.0, dLogDet = 0.0, dD = (double) nD; + gsl_matrix* ptTemp = gsl_matrix_alloc(nD,nD); + + gsl_matrix_memcpy(ptTemp, ptW); + + dLogDet = decomposeMatrix(ptW, nD); + + dRet = dD*log(2.0) + dLogDet; + + for(i = 0; i < nD; i++){ + dRet += gsl_sf_psi(0.5*(dNu - (double) i)); + } + + gsl_matrix_free(ptTemp); + + return dRet; +} + +void updateMeans(t_Cluster *ptCluster, t_Data *ptData) +{ + int i = 0, j = 0, k = 0; + int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; + int *anMaxZ = ptCluster->anMaxZ; + int *anW = ptCluster->anW; + double **aadX = ptData->aadX, **aadMu = ptCluster->aadMu; + + for(k = 0; k < nK; k++){ + + for(j = 0; j < nD; j++){ + aadMu[k][j] = 0.0; + } + } + + for(i = 0; i < nN; i++){ + int nZ = anMaxZ[i]; + + for(j = 0; j < nD; j++){ + aadMu[nZ][j] += aadX[i][j]; + } + } + + for(k = 0; k < nK; k++){ /*loop components*/ + + /*normalise means*/ + if(anW[k] > 0){ + for(j = 0; j < nD; j++){ + aadMu[k][j] /= (double) anW[k]; + } + } + else{ + for(j = 0; j < nD; j++){ + aadMu[k][j] = 0.0; + } + } + } + + return; +} + +double calcDist(double* adX, double *adMu, int nD) +{ + double dDist = 0.0; + int i = 0; + + for(i = 0; i < nD; i++){ + double dV = adX[i] - adMu[i]; + dDist += dV*dV; + } + + return sqrt(dDist); +} diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h new file mode 100644 index 0000000..c6c2472 --- /dev/null +++ b/c-concoct2/c_vbgmm_fit.h @@ -0,0 +1,163 @@ +#ifndef NMGS_H +#define NMGS_H + +typedef struct s_Params +{ + /*seed*/ + unsigned long int lSeed; + /*min change VBL*/ + double dEpsilon; + /*maximum no. iterations*/ + int nMaxIter; + /*initial cluster size*/ + int nKStart; +} t_Params; + + +typedef struct s_Data +{ + int nN; + + int nD; + + double **aadX; +} t_Data; + +typedef struct s_VBParams +{ + /*scale for mean prior*/ + double dBeta0; + + /*Wishart degrees of freedom*/ + double dNu0; + + /*Inverse! of the Wishart scale precision-matrix*/ + gsl_matrix *ptInvW0; + + /*Log Wishart normalisation*/ + double dLogWishartB; + +} t_VBParams; + + +typedef struct s_Cluster +{ + /*output file for convergence if not null*/ + char *szCOutFile; + /*parameters for variational Bayes*/ + t_VBParams *ptVBParams; + /*start seed*/ + unsigned long lSeed; + /* maximum no. iterations*/ + int nMaxIter; + /* min. change in VBL bound*/ + double dEpsilon; + /*thread index*/ + int nThread; + /*pointer to data*/ + t_Data *ptData; + /*number of data points*/ + int nN; + /*size no. of clusters allocated*/ + int nKSize; + /*number of clusters*/ + int nK; + /*number of dimensions*/ + int nD; + /*variational lower bound*/ + double dVBL; + /*Means*/ + double **aadMu; + /*Scaled weight Bishop 10.60*/ + double *adBeta; + /*Scaled means Bishop 10.61*/ + double **aadM; + /*sample covariance matrix for each cluster storing this helps with lower bound calcn*/ + gsl_matrix **aptCovar; + /*Inverse regularised variances Bishop 10.62*/ + gsl_matrix **aptSigma; + /*Bishop 10.63*/ + double *adNu; + /*Responsibilities*/ + double **aadZ; + /*log-Matrix determinants*/ + double *adLDet; + /*mixture weights*/ + double *adPi; + /*assigned cluster for each data point*/ + int *anMaxZ; + /*frequencies for each cluster*/ + int *anW; +} t_Cluster; + + +#define DELIM ",\n" +#define MAX_LINE_LENGTH 1048576 +#define MAX_FILE_NAME_LENGTH 1024 +#define MAX_WORD_LENGTH 128 +#define DEF_FILE_STUB "debug_out" + +#define TRUE 1 +#define FALSE 0 + +#define NOT_SET -1 + +/*Default parameters*/ +#define DEF_BETA0 1.0e-3 + +#define MIN_Z 1.0e-6 +#define MIN_PI 0.1 /*Unormalised*/ +#define MIN_COVAR 0.001 + +#define N_RTHREADS 2 +#define R_PRIME 1009 + + +#define DEF_EPSILON 1.0e-6 +#define DEF_MAX_ITER 500 +#define DEF_SEED 1l + +/*user defines*/ +int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug); + +void generateInputData(double *adX, int nN, int nD, t_Data *ptData); + +void destroyData(t_Data *ptData); + +void calcSampleVar(t_Data *ptData,double *adVar, double *adMu); + +void setVBParams(t_VBParams *ptVBParams, t_Data *ptData); + +void* fitEM(void *pvCluster); + +void* runRThreads(void *pvpDCluster); + +void allocateCluster(t_Cluster *ptCluster, int nN, int nK, int nD, t_Data *ptData, long lSeed, int nMaxIter, double dEpsilon, char *szCOutFile); + +void destroyCluster(t_Cluster* ptCluster); + +void compressCluster(t_Cluster *ptCluster); + +double decomposeMatrix(gsl_matrix *ptSigmaMatrix, int nD); + +void performMStep(t_Cluster *ptCluster, t_Data *ptData); + +void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData); + +double calcVBL(t_Cluster* ptCluster); + +void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData); + +double dLogWishartB(gsl_matrix *ptInvW, int nD, double dNu, int bInv); + +void updateMeans(t_Cluster *ptCluster, t_Data *ptData); + +double dWishartExpectLogDet(gsl_matrix *ptW, double dNu, int nD); + +void calcZ(t_Cluster* ptCluster, t_Data *ptData); + +void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData); + +double calcDist(double* adX, double *adMu, int nD); + +#endif diff --git a/c-concoct2/setup.py b/c-concoct2/setup.py new file mode 100644 index 0000000..e660e2d --- /dev/null +++ b/c-concoct2/setup.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +from distutils.core import setup +from distutils.extension import Extension +from Cython.Distutils import build_ext + +import numpy + +setup( + cmdclass = {'build_ext': build_ext}, + ext_modules = [Extension("vbgmm", + sources=["vbgmm.pyx", "c_vbgmm_fit.c"], + libraries =['gsl', 'gslcblas'], + include_dirs=[numpy.get_include(), '/opt/local/include/'])], +) diff --git a/c-concoct2/vbgmm.c b/c-concoct2/vbgmm.c new file mode 100644 index 0000000..a571651 --- /dev/null +++ b/c-concoct2/vbgmm.c @@ -0,0 +1,5691 @@ +/* Generated by Cython 0.22 */ + +#define PY_SSIZE_T_CLEAN +#ifndef CYTHON_USE_PYLONG_INTERNALS +#ifdef PYLONG_BITS_IN_DIGIT +#define CYTHON_USE_PYLONG_INTERNALS 0 +#else +#include "pyconfig.h" +#ifdef PYLONG_BITS_IN_DIGIT +#define CYTHON_USE_PYLONG_INTERNALS 1 +#else +#define CYTHON_USE_PYLONG_INTERNALS 0 +#endif +#endif +#endif +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000) + #error Cython requires Python 2.6+ or Python 3.2+. +#else +#define CYTHON_ABI "0_22" +#include +#ifndef offsetof +#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION +#define CYTHON_COMPILING_IN_PYPY 1 +#define CYTHON_COMPILING_IN_CPYTHON 0 +#else +#define CYTHON_COMPILING_IN_PYPY 0 +#define CYTHON_COMPILING_IN_CPYTHON 1 +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) +#define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyType_Type +#endif +#if PY_MAJOR_VERSION >= 3 + #define Py_TPFLAGS_CHECKTYPES 0 + #define Py_TPFLAGS_HAVE_INDEX 0 + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) +#else + #define CYTHON_PEP393_ENABLED 0 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) + #define __Pyx_PyFrozenSet_Size(s) PyObject_Size(s) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) + #define __Pyx_PyFrozenSet_Size(s) PySet_Size(s) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#ifndef CYTHON_INLINE + #if defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and + a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is + a quiet NaN. */ + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#define __Pyx_void_to_None(void_result) (void_result, Py_INCREF(Py_None), Py_None) +#ifdef __cplusplus +template +void __Pyx_call_destructor(T* x) { + x->~T(); +} +template +class __Pyx_FakeReference { + public: + __Pyx_FakeReference() : ptr(NULL) { } + __Pyx_FakeReference(T& ref) : ptr(&ref) { } + T *operator->() { return ptr; } + operator T&() { return *ptr; } + private: + T *ptr; +}; +#endif + + +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) +#define _USE_MATH_DEFINES +#endif +#include +#define __PYX_HAVE__vbgmm +#define __PYX_HAVE_API__vbgmm +#include "string.h" +#include "stdio.h" +#include "stdlib.h" +#include "numpy/arrayobject.h" +#include "numpy/ufuncobject.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#ifdef PYREX_WITHOUT_ASSERTIONS +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ + (sizeof(type) < sizeof(Py_ssize_t)) || \ + (sizeof(type) > sizeof(Py_ssize_t) && \ + likely(v < (type)PY_SSIZE_T_MAX || \ + v == (type)PY_SSIZE_T_MAX) && \ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ + v == (type)PY_SSIZE_T_MIN))) || \ + (sizeof(type) == sizeof(Py_ssize_t) && \ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#if PY_MAJOR_VERSION < 3 +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) +{ + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#else +#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen +#endif +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) +#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_COMPILING_IN_CPYTHON +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ + +static PyObject *__pyx_m; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif defined(_Complex_I) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + + +static const char *__pyx_f[] = { + "vbgmm.pyx", + "__init__.pxd", + "type.pxd", +}; +#define IS_UNSIGNED(type) (((type) -1) > 0) +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":726 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":727 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":728 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":729 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":733 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":734 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":735 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":736 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":740 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":741 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":750 + * # The int types are mapped a bit surprising -- + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t + */ +typedef npy_long __pyx_t_5numpy_int_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":751 + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong longlong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_long_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":752 + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_ulong uint_t + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":754 + * ctypedef npy_longlong longlong_t + * + * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t + */ +typedef npy_ulong __pyx_t_5numpy_uint_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":755 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":756 + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":758 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":759 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":761 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":762 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":763 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cfloat cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif + + +/*--- Type declarations ---*/ + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":765 + * ctypedef npy_longdouble longdouble_t + * + * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t + */ +typedef npy_cfloat __pyx_t_5numpy_cfloat_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":766 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":767 + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cdouble complex_t + */ +typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":769 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; + +/* --- Runtime support code (head) --- */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil) \ + if (acquire_gil) { \ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ + PyGILState_Release(__pyx_gilstate_save); \ + } else { \ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil) \ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext() \ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do { \ + PyObject *tmp = (PyObject *) r; \ + r = v; __Pyx_XDECREF(tmp); \ + } while (0) +#define __Pyx_DECREF_SET(r, v) do { \ + PyObject *tmp = (PyObject *) r; \ + r = v; __Pyx_DECREF(tmp); \ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ + const char* function_name); + +static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact); + +static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); + +#define __Pyx_BufPtrCContig2d(type, buf, i0, s0, i1, s1) ((type)((char*)buf + i0 * s0) + i1) +#define __Pyx_BufPtrCContig1d(type, buf, i0, s0) ((type)buf + i0) +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +#if PY_MAJOR_VERSION >= 3 +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) + PyErr_SetObject(PyExc_KeyError, args); + Py_XDECREF(args); + } + return NULL; + } + Py_INCREF(value); + return value; +} +#else + #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#endif + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +typedef struct { + int code_line; + PyCodeObject* code_object; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0}; +static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1}; + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif +#if (defined(_WIN32) || defined(__clang__)) && defined(__cplusplus) && CYTHON_CCOMPLEX + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eqf(a, b) ((a)==(b)) + #define __Pyx_c_sumf(a, b) ((a)+(b)) + #define __Pyx_c_difff(a, b) ((a)-(b)) + #define __Pyx_c_prodf(a, b) ((a)*(b)) + #define __Pyx_c_quotf(a, b) ((a)/(b)) + #define __Pyx_c_negf(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zerof(z) ((z)==(float)0) + #define __Pyx_c_conjf(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_absf(z) (::std::abs(z)) + #define __Pyx_c_powf(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zerof(z) ((z)==0) + #define __Pyx_c_conjf(z) (conjf(z)) + #if 1 + #define __Pyx_c_absf(z) (cabsf(z)) + #define __Pyx_c_powf(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#endif + +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eq(a, b) ((a)==(b)) + #define __Pyx_c_sum(a, b) ((a)+(b)) + #define __Pyx_c_diff(a, b) ((a)-(b)) + #define __Pyx_c_prod(a, b) ((a)*(b)) + #define __Pyx_c_quot(a, b) ((a)/(b)) + #define __Pyx_c_neg(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero(z) ((z)==(double)0) + #define __Pyx_c_conj(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs(z) (::std::abs(z)) + #define __Pyx_c_pow(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero(z) ((z)==0) + #define __Pyx_c_conj(z) (conj(z)) + #if 1 + #define __Pyx_c_abs(z) (cabs(z)) + #define __Pyx_c_pow(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +static int __Pyx_check_binary_version(void); + +#if !defined(__Pyx_PyIdentifier_FromString) +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) +#else + #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) +#endif +#endif + +static PyObject *__Pyx_ImportModule(const char *name); + +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'cython' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'libc.stdlib' */ + +/* Module declarations from 'numpy' */ + +/* Module declarations from 'numpy' */ +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ + +/* Module declarations from 'vbgmm' */ +__PYX_EXTERN_C DL_IMPORT(void) c_vbgmm_fit(double *, int, int, int, int *, int); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; +#define __Pyx_MODULE_NAME "vbgmm" +int __pyx_module_is_main_vbgmm = 0; + +/* Implementation of 'vbgmm' */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_RuntimeError; +static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyArrayObject *__pyx_v_assign, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug); /* proto */ +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ +static char __pyx_k_B[] = "B"; +static char __pyx_k_H[] = "H"; +static char __pyx_k_I[] = "I"; +static char __pyx_k_L[] = "L"; +static char __pyx_k_O[] = "O"; +static char __pyx_k_Q[] = "Q"; +static char __pyx_k_b[] = "b"; +static char __pyx_k_d[] = "d"; +static char __pyx_k_f[] = "f"; +static char __pyx_k_g[] = "g"; +static char __pyx_k_h[] = "h"; +static char __pyx_k_i[] = "i"; +static char __pyx_k_l[] = "l"; +static char __pyx_k_q[] = "q"; +static char __pyx_k_Zd[] = "Zd"; +static char __pyx_k_Zf[] = "Zf"; +static char __pyx_k_Zg[] = "Zg"; +static char __pyx_k_nD[] = "nD"; +static char __pyx_k_nK[] = "nK"; +static char __pyx_k_nN[] = "nN"; +static char __pyx_k_np[] = "np"; +static char __pyx_k_fit[] = "fit"; +static char __pyx_k_main[] = "__main__"; +static char __pyx_k_test[] = "__test__"; +static char __pyx_k_debug[] = "debug"; +static char __pyx_k_numpy[] = "numpy"; +static char __pyx_k_range[] = "range"; +static char __pyx_k_vbgmm[] = "vbgmm"; +static char __pyx_k_assign[] = "assign"; +static char __pyx_k_import[] = "__import__"; +static char __pyx_k_xarray[] = "xarray"; +static char __pyx_k_nClusters[] = "nClusters"; +static char __pyx_k_ValueError[] = "ValueError"; +static char __pyx_k_RuntimeError[] = "RuntimeError"; +static char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; +static char __pyx_k_Users_u1375038_Projects_CONCOCT[] = "/Users/u1375038/Projects/CONCOCT3/CONCOCT/c-concoct2/vbgmm.pyx"; +static char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; +static char __pyx_k_vbgmm_pyx_simple_cython_wrapper[] = "\nvbgmm.pyx\n\nsimple cython wrapper for variational Gaussian mixture model in C \n\n"; +static char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; +static char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; +static char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; +static char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; +static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; +static PyObject *__pyx_n_s_RuntimeError; +static PyObject *__pyx_kp_s_Users_u1375038_Projects_CONCOCT; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_assign; +static PyObject *__pyx_n_s_debug; +static PyObject *__pyx_n_s_fit; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_nClusters; +static PyObject *__pyx_n_s_nD; +static PyObject *__pyx_n_s_nK; +static PyObject *__pyx_n_s_nN; +static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; +static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; +static PyObject *__pyx_n_s_vbgmm; +static PyObject *__pyx_n_s_xarray; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_codeobj__8; + +/* "vbgmm.pyx":19 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_5vbgmm_fit[] = "\n fit (xarray, assign, nK)\n\n Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters\n\n and returns cluster assignments in assign\n\n param: xarray -- a 2-d numpy array of np.float64\n param: assigns -- cluster assignments must have same number of rows as xarray\n\n "; +static PyMethodDef __pyx_mdef_5vbgmm_1fit = {"fit", (PyCFunction)__pyx_pw_5vbgmm_1fit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5vbgmm_fit}; +static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_xarray = 0; + PyArrayObject *__pyx_v_assign = 0; + PyObject *__pyx_v_nClusters = 0; + PyObject *__pyx_v_debug = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("fit (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xarray,&__pyx_n_s_assign,&__pyx_n_s_nClusters,&__pyx_n_s_debug,0}; + PyObject* values[4] = {0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xarray)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_assign)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nClusters)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_debug)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + } + __pyx_v_xarray = ((PyArrayObject *)values[0]); + __pyx_v_assign = ((PyArrayObject *)values[1]); + __pyx_v_nClusters = values[2]; + __pyx_v_debug = values[3]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xarray), __pyx_ptype_5numpy_ndarray, 0, "xarray", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_assign), __pyx_ptype_5numpy_ndarray, 0, "assign", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_r = __pyx_pf_5vbgmm_fit(__pyx_self, __pyx_v_xarray, __pyx_v_assign, __pyx_v_nClusters, __pyx_v_debug); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyArrayObject *__pyx_v_assign, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug) { + int __pyx_v_nN; + int __pyx_v_nD; + int __pyx_v_nK; + __Pyx_LocalBuf_ND __pyx_pybuffernd_assign; + __Pyx_Buffer __pyx_pybuffer_assign; + __Pyx_LocalBuf_ND __pyx_pybuffernd_xarray; + __Pyx_Buffer __pyx_pybuffer_xarray; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + npy_intp __pyx_t_1; + npy_intp __pyx_t_2; + int __pyx_t_3; + long __pyx_t_4; + long __pyx_t_5; + long __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("fit", 0); + __pyx_pybuffer_xarray.pybuffer.buf = NULL; + __pyx_pybuffer_xarray.refcount = 0; + __pyx_pybuffernd_xarray.data = NULL; + __pyx_pybuffernd_xarray.rcbuffer = &__pyx_pybuffer_xarray; + __pyx_pybuffer_assign.pybuffer.buf = NULL; + __pyx_pybuffer_assign.refcount = 0; + __pyx_pybuffernd_assign.data = NULL; + __pyx_pybuffernd_assign.rcbuffer = &__pyx_pybuffer_assign; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer, (PyObject*)__pyx_v_xarray, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_pybuffernd_xarray.diminfo[0].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_xarray.diminfo[0].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_xarray.diminfo[1].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_xarray.diminfo[1].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[1]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_assign.rcbuffer->pybuffer, (PyObject*)__pyx_v_assign, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_pybuffernd_assign.diminfo[0].strides = __pyx_pybuffernd_assign.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_assign.diminfo[0].shape = __pyx_pybuffernd_assign.rcbuffer->pybuffer.shape[0]; + + /* "vbgmm.pyx":33 + * cdef int nN, nD, nK + * + * nN, nD = xarray.shape[0], xarray.shape[1] # <<<<<<<<<<<<<< + * + * nK = nClusters + */ + __pyx_t_1 = (__pyx_v_xarray->dimensions[0]); + __pyx_t_2 = (__pyx_v_xarray->dimensions[1]); + __pyx_v_nN = __pyx_t_1; + __pyx_v_nD = __pyx_t_2; + + /* "vbgmm.pyx":35 + * nN, nD = xarray.shape[0], xarray.shape[1] + * + * nK = nClusters # <<<<<<<<<<<<<< + * + * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) + */ + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_nClusters); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_nK = __pyx_t_3; + + /* "vbgmm.pyx":37 + * nK = nClusters + * + * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) # <<<<<<<<<<<<<< + * + * return None + */ + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_6 = 0; + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_debug); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + c_vbgmm_fit((&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_xarray.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_xarray.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_xarray.diminfo[1].strides))), __pyx_v_nN, __pyx_v_nD, __pyx_v_nK, (&(*__Pyx_BufPtrCContig1d(int *, __pyx_pybuffernd_assign.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_assign.diminfo[0].strides))), __pyx_t_3); + + /* "vbgmm.pyx":39 + * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) + * + * return None # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_None); + __pyx_r = Py_None; + goto __pyx_L0; + + /* "vbgmm.pyx":19 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK) + */ + + /* function exit code */ + __pyx_L1_error:; + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":197 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fullfill the PEP. + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_copy_shape; + int __pyx_v_i; + int __pyx_v_ndim; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + int __pyx_v_t; + char *__pyx_v_f; + PyArray_Descr *__pyx_v_descr = 0; + int __pyx_v_offset; + int __pyx_v_hasfields; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getbuffer__", 0); + if (__pyx_v_info != NULL) { + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":203 + * # of flags + * + * if info == NULL: return # <<<<<<<<<<<<<< + * + * cdef int copy_shape, i, ndim + */ + __pyx_t_1 = ((__pyx_v_info == NULL) != 0); + if (__pyx_t_1) { + __pyx_r = 0; + goto __pyx_L0; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":206 + * + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + */ + __pyx_v_endian_detector = 1; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":207 + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * + * ndim = PyArray_NDIM(self) + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":209 + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":211 + * ndim = PyArray_NDIM(self) + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * copy_shape = 1 + * else: + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":212 + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * copy_shape = 1 # <<<<<<<<<<<<<< + * else: + * copy_shape = 0 + */ + __pyx_v_copy_shape = 1; + goto __pyx_L4; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":214 + * copy_shape = 1 + * else: + * copy_shape = 0 # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + */ + __pyx_v_copy_shape = 0; + } + __pyx_L4:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":216 + * copy_shape = 0 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L6_bool_binop_done; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":217 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not C contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L6_bool_binop_done:; + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":218 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":220 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L9_bool_binop_done; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":221 + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not Fortran contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L9_bool_binop_done:; + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":222 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":224 + * raise ValueError(u"ndarray is not Fortran contiguous") + * + * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< + * info.ndim = ndim + * if copy_shape: + */ + __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":225 + * + * info.buf = PyArray_DATA(self) + * info.ndim = ndim # <<<<<<<<<<<<<< + * if copy_shape: + * # Allocate new buffer for strides and shape info. + */ + __pyx_v_info->ndim = __pyx_v_ndim; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":226 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if copy_shape: # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + __pyx_t_1 = (__pyx_v_copy_shape != 0); + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":229 + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< + * info.shape = info.strides + ndim + * for i in range(ndim): + */ + __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":230 + * # This is allocated as one block, strides first. + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim # <<<<<<<<<<<<<< + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + */ + __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":231 + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim + * for i in range(ndim): # <<<<<<<<<<<<<< + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] + */ + __pyx_t_4 = __pyx_v_ndim; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":232 + * info.shape = info.strides + ndim + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + */ + (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":233 + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< + * else: + * info.strides = PyArray_STRIDES(self) + */ + (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); + } + goto __pyx_L11; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":235 + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + */ + __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":236 + * else: + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + */ + __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); + } + __pyx_L11:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":237 + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) + */ + __pyx_v_info->suboffsets = NULL; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":238 + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< + * info.readonly = not PyArray_ISWRITEABLE(self) + * + */ + __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":239 + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< + * + * cdef int t + */ + __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":242 + * + * cdef int t + * cdef char* f = NULL # <<<<<<<<<<<<<< + * cdef dtype descr = self.descr + * cdef list stack + */ + __pyx_v_f = NULL; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":243 + * cdef int t + * cdef char* f = NULL + * cdef dtype descr = self.descr # <<<<<<<<<<<<<< + * cdef list stack + * cdef int offset + */ + __pyx_t_3 = ((PyObject *)__pyx_v_self->descr); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":247 + * cdef int offset + * + * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< + * + * if not hasfields and not copy_shape: + */ + __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":249 + * cdef bint hasfields = PyDataType_HASFIELDS(descr) + * + * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< + * # do not call releasebuffer + * info.obj = None + */ + __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_2 = ((!(__pyx_v_copy_shape != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L15_bool_binop_done:; + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":251 + * if not hasfields and not copy_shape: + * # do not call releasebuffer + * info.obj = None # <<<<<<<<<<<<<< + * else: + * # need to call releasebuffer + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = Py_None; + goto __pyx_L14; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":254 + * else: + * # need to call releasebuffer + * info.obj = self # <<<<<<<<<<<<<< + * + * if not hasfields: + */ + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + } + __pyx_L14:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":256 + * info.obj = self + * + * if not hasfields: # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + */ + __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":257 + * + * if not hasfields: + * t = descr.type_num # <<<<<<<<<<<<<< + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + */ + __pyx_t_4 = __pyx_v_descr->type_num; + __pyx_v_t = __pyx_t_4; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":258 + * if not hasfields: + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0); + if (!__pyx_t_2) { + goto __pyx_L20_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_little_endian != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L19_bool_binop_done; + } + __pyx_L20_next_or:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":259 + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L19_bool_binop_done:; + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":260 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":277 + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + switch (__pyx_v_t) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":261 + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + */ + case NPY_BYTE: + __pyx_v_f = __pyx_k_b; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":262 + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + */ + case NPY_UBYTE: + __pyx_v_f = __pyx_k_B; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":263 + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + */ + case NPY_SHORT: + __pyx_v_f = __pyx_k_h; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":264 + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + */ + case NPY_USHORT: + __pyx_v_f = __pyx_k_H; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":265 + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + */ + case NPY_INT: + __pyx_v_f = __pyx_k_i; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":266 + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + */ + case NPY_UINT: + __pyx_v_f = __pyx_k_I; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":267 + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + */ + case NPY_LONG: + __pyx_v_f = __pyx_k_l; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":268 + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + */ + case NPY_ULONG: + __pyx_v_f = __pyx_k_L; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":269 + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + */ + case NPY_LONGLONG: + __pyx_v_f = __pyx_k_q; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":270 + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + */ + case NPY_ULONGLONG: + __pyx_v_f = __pyx_k_Q; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":271 + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + */ + case NPY_FLOAT: + __pyx_v_f = __pyx_k_f; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":272 + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + */ + case NPY_DOUBLE: + __pyx_v_f = __pyx_k_d; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":273 + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + */ + case NPY_LONGDOUBLE: + __pyx_v_f = __pyx_k_g; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":274 + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + */ + case NPY_CFLOAT: + __pyx_v_f = __pyx_k_Zf; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":275 + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" + */ + case NPY_CDOUBLE: + __pyx_v_f = __pyx_k_Zd; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":276 + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f = "O" + * else: + */ + case NPY_CLONGDOUBLE: + __pyx_v_f = __pyx_k_Zg; + break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":277 + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + case NPY_OBJECT: + __pyx_v_f = __pyx_k_O; + break; + default: + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":279 + * elif t == NPY_OBJECT: f = "O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * info.format = f + * return + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + break; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":280 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f # <<<<<<<<<<<<<< + * return + * else: + */ + __pyx_v_info->format = __pyx_v_f; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":281 + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f + * return # <<<<<<<<<<<<<< + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) + */ + __pyx_r = 0; + goto __pyx_L0; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":283 + * return + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + */ + __pyx_v_info->format = ((char *)malloc(255)); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":284 + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, + */ + (__pyx_v_info->format[0]) = '^'; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":285 + * info.format = stdlib.malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 # <<<<<<<<<<<<<< + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + */ + __pyx_v_offset = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":286 + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< + * info.format + _buffer_format_string_len, + * &offset) + */ + __pyx_t_7 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_7; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":289 + * info.format + _buffer_format_string_len, + * &offset) + * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + */ + (__pyx_v_f[0]) = '\x00'; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":197 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fullfill the PEP. + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(Py_None); + __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; + } + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_descr); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":291 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + */ + +/* Python wrapper */ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); + __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__releasebuffer__", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":292 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":293 + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) + */ + free(__pyx_v_info->format); + goto __pyx_L3; + } + __pyx_L3:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":294 + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * stdlib.free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":295 + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) # <<<<<<<<<<<<<< + * # info.shape was stored after info.strides in the same block + * + */ + free(__pyx_v_info->strides); + goto __pyx_L4; + } + __pyx_L4:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":291 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":771 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":772 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":771 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":774 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":775 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":774 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":777 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":778 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":777 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":780 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":781 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":780 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":783 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":784 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":783 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":786 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { + PyArray_Descr *__pyx_v_child = 0; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + PyObject *__pyx_v_fields = 0; + PyObject *__pyx_v_childname = NULL; + PyObject *__pyx_v_new_offset = NULL; + PyObject *__pyx_v_t = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + long __pyx_t_8; + char *__pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_util_dtypestring", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":793 + * cdef int delta_offset + * cdef tuple i + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * cdef tuple fields + */ + __pyx_v_endian_detector = 1; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":794 + * cdef tuple i + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * cdef tuple fields + * + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":797 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + if (unlikely(__pyx_v_descr->names == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + for (;;) { + if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); + __pyx_t_3 = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":798 + * + * for childname in descr.names: + * fields = descr.fields[childname] # <<<<<<<<<<<<<< + * child, new_offset = fields + * + */ + if (unlikely(__pyx_v_descr->fields == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":799 + * for childname in descr.names: + * fields = descr.fields[childname] + * child, new_offset = fields # <<<<<<<<<<<<<< + * + * if (end - f) - (new_offset - offset[0]) < 15: + */ + if (likely(__pyx_v_fields != Py_None)) { + PyObject* sequence = __pyx_v_fields; + #if CYTHON_COMPILING_IN_CPYTHON + Py_ssize_t size = Py_SIZE(sequence); + #else + Py_ssize_t size = PySequence_Size(sequence); + #endif + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); + __pyx_t_4 = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":801 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0); + if (__pyx_t_6) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":802 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":804 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); + if (!__pyx_t_7) { + goto __pyx_L8_next_or; + } else { + } + __pyx_t_7 = (__pyx_v_little_endian != 0); + if (!__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_L8_next_or:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":805 + * + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * # One could encode it in the format string and have Cython + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); + if (__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_6 = __pyx_t_7; + __pyx_L7_bool_binop_done:; + if (__pyx_t_6) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":806 + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":816 + * + * # Output padding bytes + * while offset[0] < new_offset: # <<<<<<<<<<<<<< + * f[0] = 120 # "x"; pad byte + * f += 1 + */ + while (1) { + __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_6) break; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":817 + * # Output padding bytes + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< + * f += 1 + * offset[0] += 1 + */ + (__pyx_v_f[0]) = 120; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":818 + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte + * f += 1 # <<<<<<<<<<<<<< + * offset[0] += 1 + * + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":819 + * f[0] = 120 # "x"; pad byte + * f += 1 + * offset[0] += 1 # <<<<<<<<<<<<<< + * + * offset[0] += child.itemsize + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1); + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":821 + * offset[0] += 1 + * + * offset[0] += child.itemsize # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(child): + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":823 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); + if (__pyx_t_6) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":824 + * + * if not PyDataType_HASFIELDS(child): + * t = child.type_num # <<<<<<<<<<<<<< + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") + */ + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4); + __pyx_t_4 = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":825 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); + if (__pyx_t_6) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":826 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":829 + * + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + */ + __pyx_t_4 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 98; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":830 + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + */ + __pyx_t_3 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 66; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":831 + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + */ + __pyx_t_4 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 104; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":832 + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + */ + __pyx_t_3 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 72; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":833 + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + */ + __pyx_t_4 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 105; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":834 + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + */ + __pyx_t_3 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 73; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":835 + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + */ + __pyx_t_4 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 108; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":836 + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + */ + __pyx_t_3 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 76; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":837 + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + */ + __pyx_t_4 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 113; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":838 + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + */ + __pyx_t_3 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 81; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":839 + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + */ + __pyx_t_4 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 102; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":840 + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + */ + __pyx_t_3 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 100; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":841 + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + */ + __pyx_t_4 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 103; + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":842 + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + */ + __pyx_t_3 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 102; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":843 + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" + */ + __pyx_t_4 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 100; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":844 + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + */ + __pyx_t_3 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 103; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":845 + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_4 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 79; + goto __pyx_L15; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":847 + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * f += 1 + * else: + */ + __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_L15:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":848 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * f += 1 # <<<<<<<<<<<<<< + * else: + * # Cython ignores struct boundary information ("T{...}"), + */ + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L13; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":852 + * # Cython ignores struct boundary information ("T{...}"), + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< + * return f + * + */ + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_9; + } + __pyx_L13:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":797 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":853 + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) + * return f # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_f; + goto __pyx_L0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":786 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_child); + __Pyx_XDECREF(__pyx_v_fields); + __Pyx_XDECREF(__pyx_v_childname); + __Pyx_XDECREF(__pyx_v_new_offset); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":969 + * + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef PyObject* baseptr + * if base is None: + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + PyObject *__pyx_v_baseptr; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + __Pyx_RefNannySetupContext("set_array_base", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":971 + * cdef inline void set_array_base(ndarray arr, object base): + * cdef PyObject* baseptr + * if base is None: # <<<<<<<<<<<<<< + * baseptr = NULL + * else: + */ + __pyx_t_1 = (__pyx_v_base == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":972 + * cdef PyObject* baseptr + * if base is None: + * baseptr = NULL # <<<<<<<<<<<<<< + * else: + * Py_INCREF(base) # important to do this before decref below! + */ + __pyx_v_baseptr = NULL; + goto __pyx_L3; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":974 + * baseptr = NULL + * else: + * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< + * baseptr = base + * Py_XDECREF(arr.base) + */ + Py_INCREF(__pyx_v_base); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":975 + * else: + * Py_INCREF(base) # important to do this before decref below! + * baseptr = base # <<<<<<<<<<<<<< + * Py_XDECREF(arr.base) + * arr.base = baseptr + */ + __pyx_v_baseptr = ((PyObject *)__pyx_v_base); + } + __pyx_L3:; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":976 + * Py_INCREF(base) # important to do this before decref below! + * baseptr = base + * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< + * arr.base = baseptr + * + */ + Py_XDECREF(__pyx_v_arr->base); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":977 + * baseptr = base + * Py_XDECREF(arr.base) + * arr.base = baseptr # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + __pyx_v_arr->base = __pyx_v_baseptr; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":969 + * + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef PyObject* baseptr + * if base is None: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":979 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":980 + * + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: # <<<<<<<<<<<<<< + * return None + * else: + */ + __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); + if (__pyx_t_1) { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":981 + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: + * return None # <<<<<<<<<<<<<< + * else: + * return arr.base + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_None); + __pyx_r = Py_None; + goto __pyx_L0; + } + /*else*/ { + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":983 + * return None + * else: + * return arr.base # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); + __pyx_r = ((PyObject *)__pyx_v_arr->base); + goto __pyx_L0; + } + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":979 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef __pyx_moduledef = { + #if PY_VERSION_HEX < 0x03020000 + { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, + #else + PyModuleDef_HEAD_INIT, + #endif + "vbgmm", + __pyx_k_vbgmm_pyx_simple_cython_wrapper, /* m_doc */ + -1, /* m_size */ + __pyx_methods /* m_methods */, + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, + {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, + {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, + {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, + {&__pyx_kp_s_Users_u1375038_Projects_CONCOCT, __pyx_k_Users_u1375038_Projects_CONCOCT, sizeof(__pyx_k_Users_u1375038_Projects_CONCOCT), 0, 0, 1, 0}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_s_assign, __pyx_k_assign, sizeof(__pyx_k_assign), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_nClusters, __pyx_k_nClusters, sizeof(__pyx_k_nClusters), 0, 0, 1, 1}, + {&__pyx_n_s_nD, __pyx_k_nD, sizeof(__pyx_k_nD), 0, 0, 1, 1}, + {&__pyx_n_s_nK, __pyx_k_nK, sizeof(__pyx_k_nK), 0, 0, 1, 1}, + {&__pyx_n_s_nN, __pyx_k_nN, sizeof(__pyx_k_nN), 0, 0, 1, 1}, + {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, + {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, + {&__pyx_n_s_vbgmm, __pyx_k_vbgmm, sizeof(__pyx_k_vbgmm), 0, 0, 1, 1}, + {&__pyx_n_s_xarray, __pyx_k_xarray, sizeof(__pyx_k_xarray), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +static int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":218 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":222 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":260 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":802 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":806 + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":826 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "vbgmm.pyx":19 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK) + */ + __pyx_tuple__7 = PyTuple_Pack(7, __pyx_n_s_xarray, __pyx_n_s_assign, __pyx_n_s_nClusters, __pyx_n_s_debug, __pyx_n_s_nN, __pyx_n_s_nD, __pyx_n_s_nK); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_u1375038_Projects_CONCOCT, __pyx_n_s_fit, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + return 0; + __pyx_L1_error:; + return -1; +} + +#if PY_MAJOR_VERSION < 3 +PyMODINIT_FUNC initvbgmm(void); /*proto*/ +PyMODINIT_FUNC initvbgmm(void) +#else +PyMODINIT_FUNC PyInit_vbgmm(void); /*proto*/ +PyMODINIT_FUNC PyInit_vbgmm(void) +#endif +{ + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_REFNANNY + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); + if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); + } + #endif + __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_vbgmm(void)", 0); + if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #ifdef __Pyx_CyFunction_USED + if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("vbgmm", __pyx_methods, __pyx_k_vbgmm_pyx_simple_cython_wrapper, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #if CYTHON_COMPILING_IN_PYPY + Py_INCREF(__pyx_b); + #endif + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + /*--- Initialize various global constants etc. ---*/ + if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + if (__pyx_module_is_main_vbgmm) { + if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (!PyDict_GetItemString(modules, "vbgmm")) { + if (unlikely(PyDict_SetItemString(modules, "vbgmm", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + } + #endif + /*--- Builtin init code ---*/ + if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Constants init code ---*/ + if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Global init code ---*/ + /*--- Variable export code ---*/ + /*--- Function export code ---*/ + /*--- Type init code ---*/ + /*--- Type import code ---*/ + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", + #if CYTHON_COMPILING_IN_PYPY + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Variable import code ---*/ + /*--- Function import code ---*/ + /*--- Execution code ---*/ + + /* "vbgmm.pyx":11 + * + * # import both numpy and the Cython declarations for numpy + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "vbgmm.pyx":19 + * @cython.boundscheck(False) + * @cython.wraparound(False) + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK) + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5vbgmm_1fit, NULL, __pyx_n_s_vbgmm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_fit, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "vbgmm.pyx":1 + * """ # <<<<<<<<<<<<<< + * vbgmm.pyx + * + */ + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":979 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init vbgmm", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_DECREF(__pyx_m); __pyx_m = 0; + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init vbgmm"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if PY_MAJOR_VERSION < 3 + return; + #else + return __pyx_m; + #endif +} + +/* --- Runtime support code --- */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule((char *)modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) { + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); +} +static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (none_allowed && obj == Py_None) return 1; + else if (exact) { + if (likely(Py_TYPE(obj) == type)) return 1; + #if PY_MAJOR_VERSION == 2 + else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(PyObject_TypeCheck(obj, type))) return 1; + } + __Pyx_RaiseArgumentTypeInvalid(name, obj, type); + return 0; +} + +static CYTHON_INLINE int __Pyx_IsLittleEndian(void) { + unsigned int n = 1; + return *(unsigned char*)(&n) != 0; +} +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t < '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparseable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static CYTHON_INLINE PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number; + int ndim = ctx->head->field->type->ndim; +; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if (ctx->enc_type == *ts && got_Z == ctx->is_complex && + ctx->enc_packmode == ctx->new_packmode) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} +static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static CYTHON_INLINE int __Pyx_GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + if (obj == Py_None || obj == NULL) { + __Pyx_ZeroBuffer(buf); + return 0; + } + buf->buf = NULL; + if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; + if (buf->ndim != nd) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if ((unsigned)buf->itemsize != dtype->size) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_ZeroBuffer(buf); + return -1; +} +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (info->buf == NULL) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} + +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyThreadState *tstate = PyThreadState_GET(); + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_Restore(type, value, tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { +#if CYTHON_COMPILING_IN_CPYTHON + PyThreadState *tstate = PyThreadState_GET(); + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(type, value, tb); +#endif +} + +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + if (PyObject_IsSubclass(instance_class, type)) { + type = instance_class; + } else { + instance_class = NULL; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } +#if PY_VERSION_HEX >= 0x03030000 + if (cause) { +#else + if (cause && cause != Py_None) { +#endif + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(tmp_type, tmp_value, tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = PyThreadState_GET(); + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(PyObject_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = (start + end) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + py_code = __pyx_find_code_object(c_line ? c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? c_line : py_line, py_code); + } + py_frame = PyFrame_New( + PyThreadState_GET(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = py_line; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); + return -1; +} +static void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject *obj = view->obj; + if (!obj) return; + if (PyObject_CheckBuffer(obj)) { + PyBuffer_Release(view); + return; + } + if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; } + Py_DECREF(obj); + view->obj = NULL; +} +#endif + + + static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_VERSION_HEX < 0x03030000 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.')) { + #if PY_VERSION_HEX < 0x03030000 + PyObject *py_level = PyInt_FromLong(1); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + #endif + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_VERSION_HEX < 0x03030000 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_VERSION_HEX < 0x03030000 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value) \ + { \ + func_type value = func_value; \ + if (sizeof(target_type) < sizeof(func_type)) { \ + if (unlikely(value != (func_type) (target_type) value)) { \ + func_type zero = 0; \ + if (is_unsigned && unlikely(value < zero)) \ + goto raise_neg_overflow; \ + else \ + goto raise_overflow; \ + } \ + } \ + return (target_type) value; \ + } + +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #endif +#endif + +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) -1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, ((PyLongObject*)x)->ob_digit[0]); + } + #endif +#endif + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(int) <= sizeof(unsigned long long)) { + __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong(x)) + } + } else { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +(((PyLongObject*)x)->ob_digit[0])); + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]); + } + #endif +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong(x)) + } else if (sizeof(int) <= sizeof(long long)) { + __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(a, a); + case 3: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(z, a); + case 4: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } + r = a.real; + theta = 0; + } else { + r = __Pyx_c_absf(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrt(z.real*z.real + z.imag*z.imag); + #else + return hypot(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(a, a); + case 3: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(z, a); + case 4: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } + r = a.real; + theta = 0; + } else { + r = __Pyx_c_abs(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif +#endif + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) -1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(int) <= sizeof(unsigned long long)) { + return PyLong_FromUnsignedLongLong((unsigned long long) value); + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(long long)) { + return PyLong_FromLongLong((long long) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) -1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(long) <= sizeof(unsigned long long)) { + return PyLong_FromUnsignedLongLong((unsigned long long) value); + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(long long)) { + return PyLong_FromLongLong((long long) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) -1, const_zero = 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, ((PyLongObject*)x)->ob_digit[0]); + } + #endif +#endif + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(long) <= sizeof(unsigned long long)) { + __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong(x)) + } + } else { +#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + switch (Py_SIZE(x)) { + case 0: return 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +(((PyLongObject*)x)->ob_digit[0])); + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]); + } + #endif +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong(x)) + } else if (sizeof(long) <= sizeof(long long)) { + __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +#ifndef __PYX_HAVE_RT_ImportModule +#define __PYX_HAVE_RT_ImportModule +static PyObject *__Pyx_ImportModule(const char *name) { + PyObject *py_name = 0; + PyObject *py_module = 0; + py_name = __Pyx_PyIdentifier_FromString(name); + if (!py_name) + goto bad; + py_module = PyImport_Import(py_name); + Py_DECREF(py_name); + return py_module; +bad: + Py_XDECREF(py_name); + return 0; +} +#endif + +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, + size_t size, int strict) +{ + PyObject *py_module = 0; + PyObject *result = 0; + PyObject *py_name = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + py_module = __Pyx_ImportModule(module_name); + if (!py_module) + goto bad; + py_name = __Pyx_PyIdentifier_FromString(class_name); + if (!py_name) + goto bad; + result = PyObject_GetAttr(py_module, py_name); + Py_DECREF(py_name); + py_name = 0; + Py_DECREF(py_module); + py_module = 0; + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (!strict && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility", + module_name, class_name); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + else if ((size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s has the wrong size, try recompiling", + module_name, class_name); + goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(py_module); + Py_XDECREF(result); + return NULL; +} +#endif + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { +#if PY_VERSION_HEX < 0x03030000 + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +#else + if (__Pyx_PyUnicode_READY(o) == -1) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (PyUnicode_IS_ASCII(o)) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +#endif + } else +#endif +#if !CYTHON_COMPILING_IN_PYPY + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { + PyNumberMethods *m; + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (PyInt_Check(x) || PyLong_Check(x)) +#else + if (PyLong_Check(x)) +#endif + return Py_INCREF(x), x; + m = Py_TYPE(x)->tp_as_number; +#if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = PyNumber_Long(x); + } +#else + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Long(x); + } +#endif + if (res) { +#if PY_MAJOR_VERSION < 3 + if (!PyInt_Check(res) && !PyLong_Check(res)) { +#else + if (!PyLong_Check(res)) { +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + name, name, Py_TYPE(res)->tp_name); + Py_DECREF(res); + return NULL; + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) + return PyInt_AS_LONG(b); +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 + #if CYTHON_USE_PYLONG_INTERNALS + switch (Py_SIZE(b)) { + case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; + case 0: return 0; + case 1: return ((PyLongObject*)b)->ob_digit[0]; + } + #endif + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/c-concoct2/vbgmm.pyx b/c-concoct2/vbgmm.pyx new file mode 100644 index 0000000..92da1cf --- /dev/null +++ b/c-concoct2/vbgmm.pyx @@ -0,0 +1,39 @@ +""" +vbgmm.pyx + +simple cython wrapper for variational Gaussian mixture model in C + +""" + +import cython + +# import both numpy and the Cython declarations for numpy +import numpy as np +cimport numpy as np + +# declare the interface to the C code +cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug) + +@cython.boundscheck(False) +@cython.wraparound(False) +def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): + """ + fit (xarray, assign, nK) + + Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters + + and returns cluster assignments in assign + + param: xarray -- a 2-d numpy array of np.float64 + param: assigns -- cluster assignments must have same number of rows as xarray + + """ + cdef int nN, nD, nK + + nN, nD = xarray.shape[0], xarray.shape[1] + + nK = nClusters + + c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) + + return None diff --git a/c-concoct2/vbgmm.so b/c-concoct2/vbgmm.so new file mode 100755 index 0000000000000000000000000000000000000000..4ac6c9fc6432e80078a3168eca96a25c06fea88d GIT binary patch literal 68068 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 B){_7L literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index 0ce6abc..2ebd5f2 100644 --- a/setup.py +++ b/setup.py @@ -2,13 +2,17 @@ from setuptools import setup, find_packages import sys, os from distutils.core import Extension +import numpy as np + +try: + from Cython.Distutils import build_ext +except ImportError: + print "You need to have Cython installed on your system to run setup.py. Sorry!" + sys.exit() version = '0.4.1' -module1 = Extension('vbgmm', - libraries =['gsl', 'gslcblas'], - include_dirs = ['c-concoct'], - sources = ['c-concoct/vbgmmmodule.c']) +include_dirs_for_concoct = [np.get_include(), '/opt/local/include/'] setup(name='concoct', version=version, @@ -29,7 +33,11 @@ scripts=["bin/concoct"], include_package_data=True, zip_safe=False, - ext_modules=[module1], + cmdclass = {'build_ext': build_ext}, + ext_modules = [ + Extension("vbgmm", sources=["./c-concoct2/vbgmm.pyx", "./c-concoct2/c_vbgmm_fit.c"], + libraries =['gsl', 'gslcblas'], include_dirs=include_dirs_for_concoct), + ], install_requires=['cython>=0.19.1', 'numpy>=1.7.1', 'scipy>=0.12.0', From 765637c01e3bfa66c6fab2bc90005d69507da5f6 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Sun, 22 May 2016 18:39:22 +0100 Subject: [PATCH 06/78] Kmeans splitting --- bin/concoct | 37 +- c-concoct2/c_vbgmm_fit.h | 2 +- c-concoct2/vbgmm.c | 5691 -------------------------------------- c-concoct2/vbgmm.so | Bin 68068 -> 0 bytes concoct/output.py | 15 +- 5 files changed, 51 insertions(+), 5694 deletions(-) delete mode 100644 c-concoct2/vbgmm.c delete mode 100755 c-concoct2/vbgmm.so diff --git a/bin/concoct b/bin/concoct index 62a3e95..65fec1b 100755 --- a/bin/concoct +++ b/bin/concoct @@ -6,6 +6,8 @@ import logging import vbgmm import numpy as np +from sklearn.cluster import KMeans + from concoct.output import Output from concoct.parser import arguments from concoct.cluster import cluster @@ -65,7 +67,40 @@ def main(args): NC = transform_filter.shape[0] assign = np.zeros(NC,dtype=np.int32) debug=False - vbgmm.fit(transform_filter, assign, args.clusters, debug) + + nSplit=4 + kmeans = KMeans(init='k-means++', n_clusters=nSplit, n_init=10) + kmeans.fit(transform_filter) + labels = kmeans.labels_ + + l = 0 + for s in range(nSplit): + transform_S = np.copy(transform_filter[labels==s,],order='C') + + NS=transform_S.shape[0] + + assign_S = np.zeros(NS,dtype=np.int32) + + vbgmm.fit(transform_S, assign_S, args.clusters, debug) + + map_S = np.where(labels==s) + + setS = sorted(list(set(assign_S))) + mapS = {} + for a in setS: + mapS[a] = l + l = l + 1 + + n = 0 + for m in np.nditer(map_S): + assign[m] = mapS[assign_S[n]] + n=n+1 + + Output.write_assign( + assign, + args.length_threshold, + joined.index, + ) # vbgmm.fit(Output.CONCOCT_PATH, args.clusters, args.length_threshold,args.seed,args.iterations,args.epsilon,args.converge_out) diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index c6c2472..876b2b2 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -109,7 +109,7 @@ typedef struct s_Cluster #define MIN_PI 0.1 /*Unormalised*/ #define MIN_COVAR 0.001 -#define N_RTHREADS 2 +#define N_RTHREADS 10 #define R_PRIME 1009 diff --git a/c-concoct2/vbgmm.c b/c-concoct2/vbgmm.c deleted file mode 100644 index a571651..0000000 --- a/c-concoct2/vbgmm.c +++ /dev/null @@ -1,5691 +0,0 @@ -/* Generated by Cython 0.22 */ - -#define PY_SSIZE_T_CLEAN -#ifndef CYTHON_USE_PYLONG_INTERNALS -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 0 -#else -#include "pyconfig.h" -#ifdef PYLONG_BITS_IN_DIGIT -#define CYTHON_USE_PYLONG_INTERNALS 1 -#else -#define CYTHON_USE_PYLONG_INTERNALS 0 -#endif -#endif -#endif -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000) - #error Cython requires Python 2.6+ or Python 3.2+. -#else -#define CYTHON_ABI "0_22" -#include -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) -#define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#if PY_MAJOR_VERSION >= 3 - #define Py_TPFLAGS_CHECKTYPES 0 - #define Py_TPFLAGS_HAVE_INDEX 0 - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE) - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ? \ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) - #define __Pyx_PyFrozenSet_Size(s) PyObject_Size(s) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) - #define __Pyx_PyFrozenSet_Size(s) PySet_Size(s) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and - a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is - a quiet NaN. */ - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#define __Pyx_void_to_None(void_result) (void_result, Py_INCREF(Py_None), Py_None) -#ifdef __cplusplus -template -void __Pyx_call_destructor(T* x) { - x->~T(); -} -template -class __Pyx_FakeReference { - public: - __Pyx_FakeReference() : ptr(NULL) { } - __Pyx_FakeReference(T& ref) : ptr(&ref) { } - T *operator->() { return ptr; } - operator T&() { return *ptr; } - private: - T *ptr; -}; -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) -#define _USE_MATH_DEFINES -#endif -#include -#define __PYX_HAVE__vbgmm -#define __PYX_HAVE_API__vbgmm -#include "string.h" -#include "stdio.h" -#include "stdlib.h" -#include "numpy/arrayobject.h" -#include "numpy/ufuncobject.h" -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) ( \ - (sizeof(type) < sizeof(Py_ssize_t)) || \ - (sizeof(type) > sizeof(Py_ssize_t) && \ - likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX) && \ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN || \ - v == (type)PY_SSIZE_T_MIN))) || \ - (sizeof(type) == sizeof(Py_ssize_t) && \ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX || \ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - -#if !defined(CYTHON_CCOMPLEX) - #if defined(__cplusplus) - #define CYTHON_CCOMPLEX 1 - #elif defined(_Complex_I) - #define CYTHON_CCOMPLEX 1 - #else - #define CYTHON_CCOMPLEX 0 - #endif -#endif -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - #include - #else - #include - #endif -#endif -#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) - #undef _Complex_I - #define _Complex_I 1.0fj -#endif - - -static const char *__pyx_f[] = { - "vbgmm.pyx", - "__init__.pxd", - "type.pxd", -}; -#define IS_UNSIGNED(type) (((type) -1) > 0) -struct __Pyx_StructField_; -#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) -typedef struct { - const char* name; - struct __Pyx_StructField_* fields; - size_t size; - size_t arraysize[8]; - int ndim; - char typegroup; - char is_unsigned; - int flags; -} __Pyx_TypeInfo; -typedef struct __Pyx_StructField_ { - __Pyx_TypeInfo* type; - const char* name; - size_t offset; -} __Pyx_StructField; -typedef struct { - __Pyx_StructField* field; - size_t parent_offset; -} __Pyx_BufFmt_StackElem; -typedef struct { - __Pyx_StructField root; - __Pyx_BufFmt_StackElem* head; - size_t fmt_offset; - size_t new_count, enc_count; - size_t struct_alignment; - int is_complex; - char enc_type; - char new_packmode; - char enc_packmode; - char is_valid_array; -} __Pyx_BufFmt_Context; - - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":726 - * # in Cython to enable them only on the right systems. - * - * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t - */ -typedef npy_int8 __pyx_t_5numpy_int8_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":727 - * - * ctypedef npy_int8 int8_t - * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< - * ctypedef npy_int32 int32_t - * ctypedef npy_int64 int64_t - */ -typedef npy_int16 __pyx_t_5numpy_int16_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":728 - * ctypedef npy_int8 int8_t - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< - * ctypedef npy_int64 int64_t - * #ctypedef npy_int96 int96_t - */ -typedef npy_int32 __pyx_t_5numpy_int32_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":729 - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t - * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< - * #ctypedef npy_int96 int96_t - * #ctypedef npy_int128 int128_t - */ -typedef npy_int64 __pyx_t_5numpy_int64_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":733 - * #ctypedef npy_int128 int128_t - * - * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t - */ -typedef npy_uint8 __pyx_t_5numpy_uint8_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":734 - * - * ctypedef npy_uint8 uint8_t - * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< - * ctypedef npy_uint32 uint32_t - * ctypedef npy_uint64 uint64_t - */ -typedef npy_uint16 __pyx_t_5numpy_uint16_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":735 - * ctypedef npy_uint8 uint8_t - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< - * ctypedef npy_uint64 uint64_t - * #ctypedef npy_uint96 uint96_t - */ -typedef npy_uint32 __pyx_t_5numpy_uint32_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":736 - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t - * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< - * #ctypedef npy_uint96 uint96_t - * #ctypedef npy_uint128 uint128_t - */ -typedef npy_uint64 __pyx_t_5numpy_uint64_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":740 - * #ctypedef npy_uint128 uint128_t - * - * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< - * ctypedef npy_float64 float64_t - * #ctypedef npy_float80 float80_t - */ -typedef npy_float32 __pyx_t_5numpy_float32_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":741 - * - * ctypedef npy_float32 float32_t - * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< - * #ctypedef npy_float80 float80_t - * #ctypedef npy_float128 float128_t - */ -typedef npy_float64 __pyx_t_5numpy_float64_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":750 - * # The int types are mapped a bit surprising -- - * # numpy.int corresponds to 'l' and numpy.long to 'q' - * ctypedef npy_long int_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong long_t - * ctypedef npy_longlong longlong_t - */ -typedef npy_long __pyx_t_5numpy_int_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":751 - * # numpy.int corresponds to 'l' and numpy.long to 'q' - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong longlong_t - * - */ -typedef npy_longlong __pyx_t_5numpy_long_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":752 - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t - * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< - * - * ctypedef npy_ulong uint_t - */ -typedef npy_longlong __pyx_t_5numpy_longlong_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":754 - * ctypedef npy_longlong longlong_t - * - * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulong_t - * ctypedef npy_ulonglong ulonglong_t - */ -typedef npy_ulong __pyx_t_5numpy_uint_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":755 - * - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulonglong_t - * - */ -typedef npy_ulonglong __pyx_t_5numpy_ulong_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":756 - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t - * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< - * - * ctypedef npy_intp intp_t - */ -typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":758 - * ctypedef npy_ulonglong ulonglong_t - * - * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< - * ctypedef npy_uintp uintp_t - * - */ -typedef npy_intp __pyx_t_5numpy_intp_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":759 - * - * ctypedef npy_intp intp_t - * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< - * - * ctypedef npy_double float_t - */ -typedef npy_uintp __pyx_t_5numpy_uintp_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":761 - * ctypedef npy_uintp uintp_t - * - * ctypedef npy_double float_t # <<<<<<<<<<<<<< - * ctypedef npy_double double_t - * ctypedef npy_longdouble longdouble_t - */ -typedef npy_double __pyx_t_5numpy_float_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":762 - * - * ctypedef npy_double float_t - * ctypedef npy_double double_t # <<<<<<<<<<<<<< - * ctypedef npy_longdouble longdouble_t - * - */ -typedef npy_double __pyx_t_5numpy_double_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":763 - * ctypedef npy_double float_t - * ctypedef npy_double double_t - * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< - * - * ctypedef npy_cfloat cfloat_t - */ -typedef npy_longdouble __pyx_t_5numpy_longdouble_t; -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - typedef ::std::complex< float > __pyx_t_float_complex; - #else - typedef float _Complex __pyx_t_float_complex; - #endif -#else - typedef struct { float real, imag; } __pyx_t_float_complex; -#endif - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - typedef ::std::complex< double > __pyx_t_double_complex; - #else - typedef double _Complex __pyx_t_double_complex; - #endif -#else - typedef struct { double real, imag; } __pyx_t_double_complex; -#endif - - -/*--- Type declarations ---*/ - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":765 - * ctypedef npy_longdouble longdouble_t - * - * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< - * ctypedef npy_cdouble cdouble_t - * ctypedef npy_clongdouble clongdouble_t - */ -typedef npy_cfloat __pyx_t_5numpy_cfloat_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":766 - * - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< - * ctypedef npy_clongdouble clongdouble_t - * - */ -typedef npy_cdouble __pyx_t_5numpy_cdouble_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":767 - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t - * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< - * - * ctypedef npy_cdouble complex_t - */ -typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":769 - * ctypedef npy_clongdouble clongdouble_t - * - * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew1(a): - */ -typedef npy_cdouble __pyx_t_5numpy_complex_t; - -/* --- Runtime support code (head) --- */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - if (acquire_gil) { \ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - PyGILState_Release(__pyx_gilstate_save); \ - } else { \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil) \ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext() \ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_XDECREF(tmp); \ - } while (0) -#define __Pyx_DECREF_SET(r, v) do { \ - PyObject *tmp = (PyObject *) r; \ - r = v; __Pyx_DECREF(tmp); \ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \ - const char* function_name); - -static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, - const char *name, int exact); - -static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, - __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); -static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); - -#define __Pyx_BufPtrCContig2d(type, buf, i0, s0, i1, s1) ((type)((char*)buf + i0 * s0) + i1) -#define __Pyx_BufPtrCContig1d(type, buf, i0, s0) ((type)buf + i0) -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -#if PY_MAJOR_VERSION >= 3 -static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { - PyObject *value; - value = PyDict_GetItemWithError(d, key); - if (unlikely(!value)) { - if (!PyErr_Occurred()) { - PyObject* args = PyTuple_Pack(1, key); - if (likely(args)) - PyErr_SetObject(PyExc_KeyError, args); - Py_XDECREF(args); - } - return NULL; - } - Py_INCREF(value); - return value; -} -#else - #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) -#endif - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); - -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -typedef struct { - Py_ssize_t shape, strides, suboffsets; -} __Pyx_Buf_DimInfo; -typedef struct { - size_t refcount; - Py_buffer pybuffer; -} __Pyx_Buffer; -typedef struct { - __Pyx_Buffer *rcbuffer; - char *data; - __Pyx_Buf_DimInfo diminfo[8]; -} __Pyx_LocalBuf_ND; - -#if PY_MAJOR_VERSION < 3 - static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); - static void __Pyx_ReleaseBuffer(Py_buffer *view); -#else - #define __Pyx_GetBuffer PyObject_GetBuffer - #define __Pyx_ReleaseBuffer PyBuffer_Release -#endif - - -static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0}; -static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1}; - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - #define __Pyx_CREAL(z) ((z).real()) - #define __Pyx_CIMAG(z) ((z).imag()) - #else - #define __Pyx_CREAL(z) (__real__(z)) - #define __Pyx_CIMAG(z) (__imag__(z)) - #endif -#else - #define __Pyx_CREAL(z) ((z).real) - #define __Pyx_CIMAG(z) ((z).imag) -#endif -#if (defined(_WIN32) || defined(__clang__)) && defined(__cplusplus) && CYTHON_CCOMPLEX - #define __Pyx_SET_CREAL(z,x) ((z).real(x)) - #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) -#else - #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) - #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) -#endif - -static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); - -#if CYTHON_CCOMPLEX - #define __Pyx_c_eqf(a, b) ((a)==(b)) - #define __Pyx_c_sumf(a, b) ((a)+(b)) - #define __Pyx_c_difff(a, b) ((a)-(b)) - #define __Pyx_c_prodf(a, b) ((a)*(b)) - #define __Pyx_c_quotf(a, b) ((a)/(b)) - #define __Pyx_c_negf(a) (-(a)) - #ifdef __cplusplus - #define __Pyx_c_is_zerof(z) ((z)==(float)0) - #define __Pyx_c_conjf(z) (::std::conj(z)) - #if 1 - #define __Pyx_c_absf(z) (::std::abs(z)) - #define __Pyx_c_powf(a, b) (::std::pow(a, b)) - #endif - #else - #define __Pyx_c_is_zerof(z) ((z)==0) - #define __Pyx_c_conjf(z) (conjf(z)) - #if 1 - #define __Pyx_c_absf(z) (cabsf(z)) - #define __Pyx_c_powf(a, b) (cpowf(a, b)) - #endif - #endif -#else - static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); - static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); - #if 1 - static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); - #endif -#endif - -static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); - -#if CYTHON_CCOMPLEX - #define __Pyx_c_eq(a, b) ((a)==(b)) - #define __Pyx_c_sum(a, b) ((a)+(b)) - #define __Pyx_c_diff(a, b) ((a)-(b)) - #define __Pyx_c_prod(a, b) ((a)*(b)) - #define __Pyx_c_quot(a, b) ((a)/(b)) - #define __Pyx_c_neg(a) (-(a)) - #ifdef __cplusplus - #define __Pyx_c_is_zero(z) ((z)==(double)0) - #define __Pyx_c_conj(z) (::std::conj(z)) - #if 1 - #define __Pyx_c_abs(z) (::std::abs(z)) - #define __Pyx_c_pow(a, b) (::std::pow(a, b)) - #endif - #else - #define __Pyx_c_is_zero(z) ((z)==0) - #define __Pyx_c_conj(z) (conj(z)) - #if 1 - #define __Pyx_c_abs(z) (cabs(z)) - #define __Pyx_c_pow(a, b) (cpow(a, b)) - #endif - #endif -#else - static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); - static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); - #if 1 - static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); - #endif -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static int __Pyx_check_binary_version(void); - -#if !defined(__Pyx_PyIdentifier_FromString) -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) -#else - #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) -#endif -#endif - -static PyObject *__Pyx_ImportModule(const char *name); - -static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - - -/* Module declarations from 'cython' */ - -/* Module declarations from 'cpython.buffer' */ - -/* Module declarations from 'cpython.ref' */ - -/* Module declarations from 'libc.string' */ - -/* Module declarations from 'libc.stdio' */ - -/* Module declarations from 'cpython.object' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; - -/* Module declarations from 'libc.stdlib' */ - -/* Module declarations from 'numpy' */ - -/* Module declarations from 'numpy' */ -static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; -static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; -static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; -static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; -static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; -static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ - -/* Module declarations from 'vbgmm' */ -__PYX_EXTERN_C DL_IMPORT(void) c_vbgmm_fit(double *, int, int, int, int *, int); /*proto*/ -static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; -#define __Pyx_MODULE_NAME "vbgmm" -int __pyx_module_is_main_vbgmm = 0; - -/* Implementation of 'vbgmm' */ -static PyObject *__pyx_builtin_ValueError; -static PyObject *__pyx_builtin_range; -static PyObject *__pyx_builtin_RuntimeError; -static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyArrayObject *__pyx_v_assign, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug); /* proto */ -static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ -static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ -static char __pyx_k_B[] = "B"; -static char __pyx_k_H[] = "H"; -static char __pyx_k_I[] = "I"; -static char __pyx_k_L[] = "L"; -static char __pyx_k_O[] = "O"; -static char __pyx_k_Q[] = "Q"; -static char __pyx_k_b[] = "b"; -static char __pyx_k_d[] = "d"; -static char __pyx_k_f[] = "f"; -static char __pyx_k_g[] = "g"; -static char __pyx_k_h[] = "h"; -static char __pyx_k_i[] = "i"; -static char __pyx_k_l[] = "l"; -static char __pyx_k_q[] = "q"; -static char __pyx_k_Zd[] = "Zd"; -static char __pyx_k_Zf[] = "Zf"; -static char __pyx_k_Zg[] = "Zg"; -static char __pyx_k_nD[] = "nD"; -static char __pyx_k_nK[] = "nK"; -static char __pyx_k_nN[] = "nN"; -static char __pyx_k_np[] = "np"; -static char __pyx_k_fit[] = "fit"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_numpy[] = "numpy"; -static char __pyx_k_range[] = "range"; -static char __pyx_k_vbgmm[] = "vbgmm"; -static char __pyx_k_assign[] = "assign"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_xarray[] = "xarray"; -static char __pyx_k_nClusters[] = "nClusters"; -static char __pyx_k_ValueError[] = "ValueError"; -static char __pyx_k_RuntimeError[] = "RuntimeError"; -static char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; -static char __pyx_k_Users_u1375038_Projects_CONCOCT[] = "/Users/u1375038/Projects/CONCOCT3/CONCOCT/c-concoct2/vbgmm.pyx"; -static char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; -static char __pyx_k_vbgmm_pyx_simple_cython_wrapper[] = "\nvbgmm.pyx\n\nsimple cython wrapper for variational Gaussian mixture model in C \n\n"; -static char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; -static char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; -static char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; -static char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; -static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; -static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; -static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; -static PyObject *__pyx_n_s_RuntimeError; -static PyObject *__pyx_kp_s_Users_u1375038_Projects_CONCOCT; -static PyObject *__pyx_n_s_ValueError; -static PyObject *__pyx_n_s_assign; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_fit; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_nClusters; -static PyObject *__pyx_n_s_nD; -static PyObject *__pyx_n_s_nK; -static PyObject *__pyx_n_s_nN; -static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; -static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; -static PyObject *__pyx_n_s_np; -static PyObject *__pyx_n_s_numpy; -static PyObject *__pyx_n_s_range; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; -static PyObject *__pyx_n_s_vbgmm; -static PyObject *__pyx_n_s_xarray; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_codeobj__8; - -/* "vbgmm.pyx":19 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_5vbgmm_fit[] = "\n fit (xarray, assign, nK)\n\n Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters\n\n and returns cluster assignments in assign\n\n param: xarray -- a 2-d numpy array of np.float64\n param: assigns -- cluster assignments must have same number of rows as xarray\n\n "; -static PyMethodDef __pyx_mdef_5vbgmm_1fit = {"fit", (PyCFunction)__pyx_pw_5vbgmm_1fit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5vbgmm_fit}; -static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyArrayObject *__pyx_v_xarray = 0; - PyArrayObject *__pyx_v_assign = 0; - PyObject *__pyx_v_nClusters = 0; - PyObject *__pyx_v_debug = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("fit (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xarray,&__pyx_n_s_assign,&__pyx_n_s_nClusters,&__pyx_n_s_debug,0}; - PyObject* values[4] = {0,0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xarray)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_assign)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nClusters)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 3: - if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_debug)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 4) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - } - __pyx_v_xarray = ((PyArrayObject *)values[0]); - __pyx_v_assign = ((PyArrayObject *)values[1]); - __pyx_v_nClusters = values[2]; - __pyx_v_debug = values[3]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("fit", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xarray), __pyx_ptype_5numpy_ndarray, 0, "xarray", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_assign), __pyx_ptype_5numpy_ndarray, 0, "assign", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_r = __pyx_pf_5vbgmm_fit(__pyx_self, __pyx_v_xarray, __pyx_v_assign, __pyx_v_nClusters, __pyx_v_debug); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyArrayObject *__pyx_v_assign, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug) { - int __pyx_v_nN; - int __pyx_v_nD; - int __pyx_v_nK; - __Pyx_LocalBuf_ND __pyx_pybuffernd_assign; - __Pyx_Buffer __pyx_pybuffer_assign; - __Pyx_LocalBuf_ND __pyx_pybuffernd_xarray; - __Pyx_Buffer __pyx_pybuffer_xarray; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - npy_intp __pyx_t_1; - npy_intp __pyx_t_2; - int __pyx_t_3; - long __pyx_t_4; - long __pyx_t_5; - long __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("fit", 0); - __pyx_pybuffer_xarray.pybuffer.buf = NULL; - __pyx_pybuffer_xarray.refcount = 0; - __pyx_pybuffernd_xarray.data = NULL; - __pyx_pybuffernd_xarray.rcbuffer = &__pyx_pybuffer_xarray; - __pyx_pybuffer_assign.pybuffer.buf = NULL; - __pyx_pybuffer_assign.refcount = 0; - __pyx_pybuffernd_assign.data = NULL; - __pyx_pybuffernd_assign.rcbuffer = &__pyx_pybuffer_assign; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer, (PyObject*)__pyx_v_xarray, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_pybuffernd_xarray.diminfo[0].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_xarray.diminfo[0].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_xarray.diminfo[1].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_xarray.diminfo[1].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[1]; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_assign.rcbuffer->pybuffer, (PyObject*)__pyx_v_assign, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_pybuffernd_assign.diminfo[0].strides = __pyx_pybuffernd_assign.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_assign.diminfo[0].shape = __pyx_pybuffernd_assign.rcbuffer->pybuffer.shape[0]; - - /* "vbgmm.pyx":33 - * cdef int nN, nD, nK - * - * nN, nD = xarray.shape[0], xarray.shape[1] # <<<<<<<<<<<<<< - * - * nK = nClusters - */ - __pyx_t_1 = (__pyx_v_xarray->dimensions[0]); - __pyx_t_2 = (__pyx_v_xarray->dimensions[1]); - __pyx_v_nN = __pyx_t_1; - __pyx_v_nD = __pyx_t_2; - - /* "vbgmm.pyx":35 - * nN, nD = xarray.shape[0], xarray.shape[1] - * - * nK = nClusters # <<<<<<<<<<<<<< - * - * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) - */ - __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_nClusters); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_nK = __pyx_t_3; - - /* "vbgmm.pyx":37 - * nK = nClusters - * - * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) # <<<<<<<<<<<<<< - * - * return None - */ - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_6 = 0; - __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_debug); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - c_vbgmm_fit((&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_xarray.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_xarray.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_xarray.diminfo[1].strides))), __pyx_v_nN, __pyx_v_nD, __pyx_v_nK, (&(*__Pyx_BufPtrCContig1d(int *, __pyx_pybuffernd_assign.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_assign.diminfo[0].strides))), __pyx_t_3); - - /* "vbgmm.pyx":39 - * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) - * - * return None # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - - /* "vbgmm.pyx":19 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK) - */ - - /* function exit code */ - __pyx_L1_error:; - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":197 - * # experimental exception made for __getbuffer__ and __releasebuffer__ - * # -- the details of this may change. - * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< - * # This implementation of getbuffer is geared towards Cython - * # requirements, and does not yet fullfill the PEP. - */ - -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_v_copy_shape; - int __pyx_v_i; - int __pyx_v_ndim; - int __pyx_v_endian_detector; - int __pyx_v_little_endian; - int __pyx_v_t; - char *__pyx_v_f; - PyArray_Descr *__pyx_v_descr = 0; - int __pyx_v_offset; - int __pyx_v_hasfields; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - char *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getbuffer__", 0); - if (__pyx_v_info != NULL) { - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":203 - * # of flags - * - * if info == NULL: return # <<<<<<<<<<<<<< - * - * cdef int copy_shape, i, ndim - */ - __pyx_t_1 = ((__pyx_v_info == NULL) != 0); - if (__pyx_t_1) { - __pyx_r = 0; - goto __pyx_L0; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":206 - * - * cdef int copy_shape, i, ndim - * cdef int endian_detector = 1 # <<<<<<<<<<<<<< - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * - */ - __pyx_v_endian_detector = 1; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":207 - * cdef int copy_shape, i, ndim - * cdef int endian_detector = 1 - * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< - * - * ndim = PyArray_NDIM(self) - */ - __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":209 - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * - * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - */ - __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":211 - * ndim = PyArray_NDIM(self) - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * copy_shape = 1 - * else: - */ - __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":212 - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * copy_shape = 1 # <<<<<<<<<<<<<< - * else: - * copy_shape = 0 - */ - __pyx_v_copy_shape = 1; - goto __pyx_L4; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":214 - * copy_shape = 1 - * else: - * copy_shape = 0 # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - */ - __pyx_v_copy_shape = 0; - } - __pyx_L4:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":216 - * copy_shape = 0 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") - */ - __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L6_bool_binop_done; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":217 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< - * raise ValueError(u"ndarray is not C contiguous") - * - */ - __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L6_bool_binop_done:; - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":218 - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":220 - * raise ValueError(u"ndarray is not C contiguous") - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") - */ - __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L9_bool_binop_done; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":221 - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< - * raise ValueError(u"ndarray is not Fortran contiguous") - * - */ - __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L9_bool_binop_done:; - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":222 - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< - * - * info.buf = PyArray_DATA(self) - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":224 - * raise ValueError(u"ndarray is not Fortran contiguous") - * - * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< - * info.ndim = ndim - * if copy_shape: - */ - __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":225 - * - * info.buf = PyArray_DATA(self) - * info.ndim = ndim # <<<<<<<<<<<<<< - * if copy_shape: - * # Allocate new buffer for strides and shape info. - */ - __pyx_v_info->ndim = __pyx_v_ndim; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":226 - * info.buf = PyArray_DATA(self) - * info.ndim = ndim - * if copy_shape: # <<<<<<<<<<<<<< - * # Allocate new buffer for strides and shape info. - * # This is allocated as one block, strides first. - */ - __pyx_t_1 = (__pyx_v_copy_shape != 0); - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":229 - * # Allocate new buffer for strides and shape info. - * # This is allocated as one block, strides first. - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< - * info.shape = info.strides + ndim - * for i in range(ndim): - */ - __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":230 - * # This is allocated as one block, strides first. - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) - * info.shape = info.strides + ndim # <<<<<<<<<<<<<< - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] - */ - __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":231 - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) - * info.shape = info.strides + ndim - * for i in range(ndim): # <<<<<<<<<<<<<< - * info.strides[i] = PyArray_STRIDES(self)[i] - * info.shape[i] = PyArray_DIMS(self)[i] - */ - __pyx_t_4 = __pyx_v_ndim; - for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { - __pyx_v_i = __pyx_t_5; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":232 - * info.shape = info.strides + ndim - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< - * info.shape[i] = PyArray_DIMS(self)[i] - * else: - */ - (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":233 - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] - * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< - * else: - * info.strides = PyArray_STRIDES(self) - */ - (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); - } - goto __pyx_L11; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":235 - * info.shape[i] = PyArray_DIMS(self)[i] - * else: - * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL - */ - __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":236 - * else: - * info.strides = PyArray_STRIDES(self) - * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) - */ - __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); - } - __pyx_L11:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":237 - * info.strides = PyArray_STRIDES(self) - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * info.itemsize = PyArray_ITEMSIZE(self) - * info.readonly = not PyArray_ISWRITEABLE(self) - */ - __pyx_v_info->suboffsets = NULL; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":238 - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< - * info.readonly = not PyArray_ISWRITEABLE(self) - * - */ - __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":239 - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) - * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< - * - * cdef int t - */ - __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":242 - * - * cdef int t - * cdef char* f = NULL # <<<<<<<<<<<<<< - * cdef dtype descr = self.descr - * cdef list stack - */ - __pyx_v_f = NULL; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":243 - * cdef int t - * cdef char* f = NULL - * cdef dtype descr = self.descr # <<<<<<<<<<<<<< - * cdef list stack - * cdef int offset - */ - __pyx_t_3 = ((PyObject *)__pyx_v_self->descr); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3); - __pyx_t_3 = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":247 - * cdef int offset - * - * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< - * - * if not hasfields and not copy_shape: - */ - __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":249 - * cdef bint hasfields = PyDataType_HASFIELDS(descr) - * - * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< - * # do not call releasebuffer - * info.obj = None - */ - __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L15_bool_binop_done; - } - __pyx_t_2 = ((!(__pyx_v_copy_shape != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L15_bool_binop_done:; - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":251 - * if not hasfields and not copy_shape: - * # do not call releasebuffer - * info.obj = None # <<<<<<<<<<<<<< - * else: - * # need to call releasebuffer - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = Py_None; - goto __pyx_L14; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":254 - * else: - * # need to call releasebuffer - * info.obj = self # <<<<<<<<<<<<<< - * - * if not hasfields: - */ - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); - } - __pyx_L14:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":256 - * info.obj = self - * - * if not hasfields: # <<<<<<<<<<<<<< - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or - */ - __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":257 - * - * if not hasfields: - * t = descr.type_num # <<<<<<<<<<<<<< - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - */ - __pyx_t_4 = __pyx_v_descr->type_num; - __pyx_v_t = __pyx_t_4; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":258 - * if not hasfields: - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0); - if (!__pyx_t_2) { - goto __pyx_L20_next_or; - } else { - } - __pyx_t_2 = (__pyx_v_little_endian != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L19_bool_binop_done; - } - __pyx_L20_next_or:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":259 - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" - */ - __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L19_bool_binop_done; - } - __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L19_bool_binop_done:; - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":260 - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":277 - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - switch (__pyx_v_t) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":261 - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" - */ - case NPY_BYTE: - __pyx_v_f = __pyx_k_b; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":262 - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" - */ - case NPY_UBYTE: - __pyx_v_f = __pyx_k_B; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":263 - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" - */ - case NPY_SHORT: - __pyx_v_f = __pyx_k_h; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":264 - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" - */ - case NPY_USHORT: - __pyx_v_f = __pyx_k_H; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":265 - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" - */ - case NPY_INT: - __pyx_v_f = __pyx_k_i; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":266 - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" - */ - case NPY_UINT: - __pyx_v_f = __pyx_k_I; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":267 - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" - */ - case NPY_LONG: - __pyx_v_f = __pyx_k_l; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":268 - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" - */ - case NPY_ULONG: - __pyx_v_f = __pyx_k_L; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":269 - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" - */ - case NPY_LONGLONG: - __pyx_v_f = __pyx_k_q; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":270 - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" - */ - case NPY_ULONGLONG: - __pyx_v_f = __pyx_k_Q; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":271 - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" - */ - case NPY_FLOAT: - __pyx_v_f = __pyx_k_f; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":272 - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" - */ - case NPY_DOUBLE: - __pyx_v_f = __pyx_k_d; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":273 - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" - */ - case NPY_LONGDOUBLE: - __pyx_v_f = __pyx_k_g; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":274 - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - */ - case NPY_CFLOAT: - __pyx_v_f = __pyx_k_Zf; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":275 - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" - */ - case NPY_CDOUBLE: - __pyx_v_f = __pyx_k_Zd; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":276 - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< - * elif t == NPY_OBJECT: f = "O" - * else: - */ - case NPY_CLONGDOUBLE: - __pyx_v_f = __pyx_k_Zg; - break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":277 - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - case NPY_OBJECT: - __pyx_v_f = __pyx_k_O; - break; - default: - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":279 - * elif t == NPY_OBJECT: f = "O" - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< - * info.format = f - * return - */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - break; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":280 - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * info.format = f # <<<<<<<<<<<<<< - * return - * else: - */ - __pyx_v_info->format = __pyx_v_f; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":281 - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * info.format = f - * return # <<<<<<<<<<<<<< - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) - */ - __pyx_r = 0; - goto __pyx_L0; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":283 - * return - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 - */ - __pyx_v_info->format = ((char *)malloc(255)); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":284 - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) - * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< - * offset = 0 - * f = _util_dtypestring(descr, info.format + 1, - */ - (__pyx_v_info->format[0]) = '^'; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":285 - * info.format = stdlib.malloc(_buffer_format_string_len) - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 # <<<<<<<<<<<<<< - * f = _util_dtypestring(descr, info.format + 1, - * info.format + _buffer_format_string_len, - */ - __pyx_v_offset = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":286 - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 - * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< - * info.format + _buffer_format_string_len, - * &offset) - */ - __pyx_t_7 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 255), (&__pyx_v_offset)); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_f = __pyx_t_7; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":289 - * info.format + _buffer_format_string_len, - * &offset) - * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< - * - * def __releasebuffer__(ndarray self, Py_buffer* info): - */ - (__pyx_v_f[0]) = '\x00'; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":197 - * # experimental exception made for __getbuffer__ and __releasebuffer__ - * # -- the details of this may change. - * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< - * # This implementation of getbuffer is geared towards Cython - * # requirements, and does not yet fullfill the PEP. - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; - } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(Py_None); - __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; - } - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_descr); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":291 - * f[0] = c'\0' # Terminate format string - * - * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - */ - -/* Python wrapper */ -static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ -static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); - __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__releasebuffer__", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":292 - * - * def __releasebuffer__(ndarray self, Py_buffer* info): - * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - */ - __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":293 - * def __releasebuffer__(ndarray self, Py_buffer* info): - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) # <<<<<<<<<<<<<< - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * stdlib.free(info.strides) - */ - free(__pyx_v_info->format); - goto __pyx_L3; - } - __pyx_L3:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":294 - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * stdlib.free(info.strides) - * # info.shape was stored after info.strides in the same block - */ - __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":295 - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * stdlib.free(info.strides) # <<<<<<<<<<<<<< - * # info.shape was stored after info.strides in the same block - * - */ - free(__pyx_v_info->strides); - goto __pyx_L4; - } - __pyx_L4:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":291 - * f[0] = c'\0' # Terminate format string - * - * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":771 - * ctypedef npy_cdouble complex_t - * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":772 - * - * cdef inline object PyArray_MultiIterNew1(a): - * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew2(a, b): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":771 - * ctypedef npy_cdouble complex_t - * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":774 - * return PyArray_MultiIterNew(1, a) - * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":775 - * - * cdef inline object PyArray_MultiIterNew2(a, b): - * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":774 - * return PyArray_MultiIterNew(1, a) - * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":777 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":778 - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): - * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":777 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":780 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":781 - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): - * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":780 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":783 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":784 - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): - * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":783 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":786 - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< - * # Recursive utility function used in __getbuffer__ to get format - * # string. The new location in the format string is returned. - */ - -static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { - PyArray_Descr *__pyx_v_child = 0; - int __pyx_v_endian_detector; - int __pyx_v_little_endian; - PyObject *__pyx_v_fields = 0; - PyObject *__pyx_v_childname = NULL; - PyObject *__pyx_v_new_offset = NULL; - PyObject *__pyx_v_t = NULL; - char *__pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - long __pyx_t_8; - char *__pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_util_dtypestring", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":793 - * cdef int delta_offset - * cdef tuple i - * cdef int endian_detector = 1 # <<<<<<<<<<<<<< - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * cdef tuple fields - */ - __pyx_v_endian_detector = 1; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":794 - * cdef tuple i - * cdef int endian_detector = 1 - * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< - * cdef tuple fields - * - */ - __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":797 - * cdef tuple fields - * - * for childname in descr.names: # <<<<<<<<<<<<<< - * fields = descr.fields[childname] - * child, new_offset = fields - */ - if (unlikely(__pyx_v_descr->names == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); - __pyx_t_3 = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":798 - * - * for childname in descr.names: - * fields = descr.fields[childname] # <<<<<<<<<<<<<< - * child, new_offset = fields - * - */ - if (unlikely(__pyx_v_descr->fields == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":799 - * for childname in descr.names: - * fields = descr.fields[childname] - * child, new_offset = fields # <<<<<<<<<<<<<< - * - * if (end - f) - (new_offset - offset[0]) < 15: - */ - if (likely(__pyx_v_fields != Py_None)) { - PyObject* sequence = __pyx_v_fields; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - #endif - } else { - __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); - __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); - __pyx_t_4 = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":801 - * child, new_offset = fields - * - * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - */ - __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0); - if (__pyx_t_6) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":802 - * - * if (end - f) - (new_offset - offset[0]) < 15: - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< - * - * if ((child.byteorder == c'>' and little_endian) or - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":804 - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); - if (!__pyx_t_7) { - goto __pyx_L8_next_or; - } else { - } - __pyx_t_7 = (__pyx_v_little_endian != 0); - if (!__pyx_t_7) { - } else { - __pyx_t_6 = __pyx_t_7; - goto __pyx_L7_bool_binop_done; - } - __pyx_L8_next_or:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":805 - * - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< - * raise ValueError(u"Non-native byte order not supported") - * # One could encode it in the format string and have Cython - */ - __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); - if (__pyx_t_7) { - } else { - __pyx_t_6 = __pyx_t_7; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0); - __pyx_t_6 = __pyx_t_7; - __pyx_L7_bool_binop_done:; - if (__pyx_t_6) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":806 - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * # One could encode it in the format string and have Cython - * # complain instead, BUT: < and > in format strings also imply - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":816 - * - * # Output padding bytes - * while offset[0] < new_offset: # <<<<<<<<<<<<<< - * f[0] = 120 # "x"; pad byte - * f += 1 - */ - while (1) { - __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_6) break; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":817 - * # Output padding bytes - * while offset[0] < new_offset: - * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< - * f += 1 - * offset[0] += 1 - */ - (__pyx_v_f[0]) = 120; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":818 - * while offset[0] < new_offset: - * f[0] = 120 # "x"; pad byte - * f += 1 # <<<<<<<<<<<<<< - * offset[0] += 1 - * - */ - __pyx_v_f = (__pyx_v_f + 1); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":819 - * f[0] = 120 # "x"; pad byte - * f += 1 - * offset[0] += 1 # <<<<<<<<<<<<<< - * - * offset[0] += child.itemsize - */ - __pyx_t_8 = 0; - (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1); - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":821 - * offset[0] += 1 - * - * offset[0] += child.itemsize # <<<<<<<<<<<<<< - * - * if not PyDataType_HASFIELDS(child): - */ - __pyx_t_8 = 0; - (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":823 - * offset[0] += child.itemsize - * - * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< - * t = child.type_num - * if end - f < 5: - */ - __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); - if (__pyx_t_6) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":824 - * - * if not PyDataType_HASFIELDS(child): - * t = child.type_num # <<<<<<<<<<<<<< - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") - */ - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4); - __pyx_t_4 = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":825 - * if not PyDataType_HASFIELDS(child): - * t = child.type_num - * if end - f < 5: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short.") - * - */ - __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); - if (__pyx_t_6) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":826 - * t = child.type_num - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< - * - * # Until ticket #99 is fixed, use integers to avoid warnings - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":829 - * - * # Until ticket #99 is fixed, use integers to avoid warnings - * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" - */ - __pyx_t_4 = PyInt_FromLong(NPY_BYTE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 98; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":830 - * # Until ticket #99 is fixed, use integers to avoid warnings - * if t == NPY_BYTE: f[0] = 98 #"b" - * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" - */ - __pyx_t_3 = PyInt_FromLong(NPY_UBYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 66; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":831 - * if t == NPY_BYTE: f[0] = 98 #"b" - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" - */ - __pyx_t_4 = PyInt_FromLong(NPY_SHORT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 104; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":832 - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" - */ - __pyx_t_3 = PyInt_FromLong(NPY_USHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 72; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":833 - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" - */ - __pyx_t_4 = PyInt_FromLong(NPY_INT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 105; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":834 - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" - */ - __pyx_t_3 = PyInt_FromLong(NPY_UINT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 73; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":835 - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - */ - __pyx_t_4 = PyInt_FromLong(NPY_LONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 108; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":836 - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - */ - __pyx_t_3 = PyInt_FromLong(NPY_ULONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 76; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":837 - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" - */ - __pyx_t_4 = PyInt_FromLong(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 113; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":838 - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - */ - __pyx_t_3 = PyInt_FromLong(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 81; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":839 - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - */ - __pyx_t_4 = PyInt_FromLong(NPY_FLOAT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 102; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":840 - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - */ - __pyx_t_3 = PyInt_FromLong(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 100; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":841 - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - */ - __pyx_t_4 = PyInt_FromLong(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 103; - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":842 - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - */ - __pyx_t_3 = PyInt_FromLong(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 102; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":843 - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - * elif t == NPY_OBJECT: f[0] = 79 #"O" - */ - __pyx_t_4 = PyInt_FromLong(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 100; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":844 - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< - * elif t == NPY_OBJECT: f[0] = 79 #"O" - * else: - */ - __pyx_t_3 = PyInt_FromLong(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 103; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L15; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":845 - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - __pyx_t_4 = PyInt_FromLong(NPY_OBJECT); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 79; - goto __pyx_L15; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":847 - * elif t == NPY_OBJECT: f[0] = 79 #"O" - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< - * f += 1 - * else: - */ - __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L15:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":848 - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * f += 1 # <<<<<<<<<<<<<< - * else: - * # Cython ignores struct boundary information ("T{...}"), - */ - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L13; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":852 - * # Cython ignores struct boundary information ("T{...}"), - * # so don't output it - * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< - * return f - * - */ - __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_f = __pyx_t_9; - } - __pyx_L13:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":797 - * cdef tuple fields - * - * for childname in descr.names: # <<<<<<<<<<<<<< - * fields = descr.fields[childname] - * child, new_offset = fields - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":853 - * # so don't output it - * f = _util_dtypestring(child, f, end, offset) - * return f # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_v_f; - goto __pyx_L0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":786 - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< - * # Recursive utility function used in __getbuffer__ to get format - * # string. The new location in the format string is returned. - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_child); - __Pyx_XDECREF(__pyx_v_fields); - __Pyx_XDECREF(__pyx_v_childname); - __Pyx_XDECREF(__pyx_v_new_offset); - __Pyx_XDECREF(__pyx_v_t); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":969 - * - * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * cdef PyObject* baseptr - * if base is None: - */ - -static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { - PyObject *__pyx_v_baseptr; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - __Pyx_RefNannySetupContext("set_array_base", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":971 - * cdef inline void set_array_base(ndarray arr, object base): - * cdef PyObject* baseptr - * if base is None: # <<<<<<<<<<<<<< - * baseptr = NULL - * else: - */ - __pyx_t_1 = (__pyx_v_base == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":972 - * cdef PyObject* baseptr - * if base is None: - * baseptr = NULL # <<<<<<<<<<<<<< - * else: - * Py_INCREF(base) # important to do this before decref below! - */ - __pyx_v_baseptr = NULL; - goto __pyx_L3; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":974 - * baseptr = NULL - * else: - * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< - * baseptr = base - * Py_XDECREF(arr.base) - */ - Py_INCREF(__pyx_v_base); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":975 - * else: - * Py_INCREF(base) # important to do this before decref below! - * baseptr = base # <<<<<<<<<<<<<< - * Py_XDECREF(arr.base) - * arr.base = baseptr - */ - __pyx_v_baseptr = ((PyObject *)__pyx_v_base); - } - __pyx_L3:; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":976 - * Py_INCREF(base) # important to do this before decref below! - * baseptr = base - * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< - * arr.base = baseptr - * - */ - Py_XDECREF(__pyx_v_arr->base); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":977 - * baseptr = base - * Py_XDECREF(arr.base) - * arr.base = baseptr # <<<<<<<<<<<<<< - * - * cdef inline object get_array_base(ndarray arr): - */ - __pyx_v_arr->base = __pyx_v_baseptr; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":969 - * - * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * cdef PyObject* baseptr - * if base is None: - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":979 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("get_array_base", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":980 - * - * cdef inline object get_array_base(ndarray arr): - * if arr.base is NULL: # <<<<<<<<<<<<<< - * return None - * else: - */ - __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); - if (__pyx_t_1) { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":981 - * cdef inline object get_array_base(ndarray arr): - * if arr.base is NULL: - * return None # <<<<<<<<<<<<<< - * else: - * return arr.base - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - } - /*else*/ { - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":983 - * return None - * else: - * return arr.base # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); - __pyx_r = ((PyObject *)__pyx_v_arr->base); - goto __pyx_L0; - } - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":979 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - "vbgmm", - __pyx_k_vbgmm_pyx_simple_cython_wrapper, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, - {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, - {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, - {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, - {&__pyx_kp_s_Users_u1375038_Projects_CONCOCT, __pyx_k_Users_u1375038_Projects_CONCOCT, sizeof(__pyx_k_Users_u1375038_Projects_CONCOCT), 0, 0, 1, 0}, - {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, - {&__pyx_n_s_assign, __pyx_k_assign, sizeof(__pyx_k_assign), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_nClusters, __pyx_k_nClusters, sizeof(__pyx_k_nClusters), 0, 0, 1, 1}, - {&__pyx_n_s_nD, __pyx_k_nD, sizeof(__pyx_k_nD), 0, 0, 1, 1}, - {&__pyx_n_s_nK, __pyx_k_nK, sizeof(__pyx_k_nK), 0, 0, 1, 1}, - {&__pyx_n_s_nN, __pyx_k_nN, sizeof(__pyx_k_nN), 0, 0, 1, 1}, - {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, - {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, - {&__pyx_n_s_vbgmm, __pyx_k_vbgmm, sizeof(__pyx_k_vbgmm), 0, 0, 1, 1}, - {&__pyx_n_s_xarray, __pyx_k_xarray, sizeof(__pyx_k_xarray), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":218 - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":222 - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< - * - * info.buf = PyArray_DATA(self) - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":260 - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":802 - * - * if (end - f) - (new_offset - offset[0]) < 15: - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< - * - * if ((child.byteorder == c'>' and little_endian) or - */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":806 - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * # One could encode it in the format string and have Cython - * # complain instead, BUT: < and > in format strings also imply - */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":826 - * t = child.type_num - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< - * - * # Until ticket #99 is fixed, use integers to avoid warnings - */ - __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - - /* "vbgmm.pyx":19 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK) - */ - __pyx_tuple__7 = PyTuple_Pack(7, __pyx_n_s_xarray, __pyx_n_s_assign, __pyx_n_s_nClusters, __pyx_n_s_debug, __pyx_n_s_nN, __pyx_n_s_nD, __pyx_n_s_nK); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(4, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_u1375038_Projects_CONCOCT, __pyx_n_s_fit, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initvbgmm(void); /*proto*/ -PyMODINIT_FUNC initvbgmm(void) -#else -PyMODINIT_FUNC PyInit_vbgmm(void); /*proto*/ -PyMODINIT_FUNC PyInit_vbgmm(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_vbgmm(void)", 0); - if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("vbgmm", __pyx_methods, __pyx_k_vbgmm_pyx_simple_cython_wrapper, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_vbgmm) { - if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "vbgmm")) { - if (unlikely(PyDict_SetItemString(modules, "vbgmm", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", - #if CYTHON_COMPILING_IN_PYPY - sizeof(PyTypeObject), - #else - sizeof(PyHeapTypeObject), - #endif - 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - - /* "vbgmm.pyx":11 - * - * # import both numpy and the Cython declarations for numpy - * import numpy as np # <<<<<<<<<<<<<< - * cimport numpy as np - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "vbgmm.pyx":19 - * @cython.boundscheck(False) - * @cython.wraparound(False) - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5vbgmm_1fit, NULL, __pyx_n_s_vbgmm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_fit, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "vbgmm.pyx":1 - * """ # <<<<<<<<<<<<<< - * vbgmm.pyx - * - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "../../../../../../usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Cython-0.22-py2.7-macosx-10.9-x86_64.egg/Cython/Includes/numpy/__init__.pxd":979 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init vbgmm", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init vbgmm"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* --- Runtime support code --- */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) { - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); -} -static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, - const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (none_allowed && obj == Py_None) return 1; - else if (exact) { - if (likely(Py_TYPE(obj) == type)) return 1; - #if PY_MAJOR_VERSION == 2 - else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; - #endif - } - else { - if (likely(PyObject_TypeCheck(obj, type))) return 1; - } - __Pyx_RaiseArgumentTypeInvalid(name, obj, type); - return 0; -} - -static CYTHON_INLINE int __Pyx_IsLittleEndian(void) { - unsigned int n = 1; - return *(unsigned char*)(&n) != 0; -} -static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, - __Pyx_BufFmt_StackElem* stack, - __Pyx_TypeInfo* type) { - stack[0].field = &ctx->root; - stack[0].parent_offset = 0; - ctx->root.type = type; - ctx->root.name = "buffer dtype"; - ctx->root.offset = 0; - ctx->head = stack; - ctx->head->field = &ctx->root; - ctx->fmt_offset = 0; - ctx->head->parent_offset = 0; - ctx->new_packmode = '@'; - ctx->enc_packmode = '@'; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->is_complex = 0; - ctx->is_valid_array = 0; - ctx->struct_alignment = 0; - while (type->typegroup == 'S') { - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = 0; - type = type->fields->type; - } -} -static int __Pyx_BufFmt_ParseNumber(const char** ts) { - int count; - const char* t = *ts; - if (*t < '0' || *t > '9') { - return -1; - } else { - count = *t++ - '0'; - while (*t >= '0' && *t < '9') { - count *= 10; - count += *t++ - '0'; - } - } - *ts = t; - return count; -} -static int __Pyx_BufFmt_ExpectNumber(const char **ts) { - int number = __Pyx_BufFmt_ParseNumber(ts); - if (number == -1) - PyErr_Format(PyExc_ValueError,\ - "Does not understand character buffer dtype format string ('%c')", **ts); - return number; -} -static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { - PyErr_Format(PyExc_ValueError, - "Unexpected format string character: '%c'", ch); -} -static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { - switch (ch) { - case 'c': return "'char'"; - case 'b': return "'signed char'"; - case 'B': return "'unsigned char'"; - case 'h': return "'short'"; - case 'H': return "'unsigned short'"; - case 'i': return "'int'"; - case 'I': return "'unsigned int'"; - case 'l': return "'long'"; - case 'L': return "'unsigned long'"; - case 'q': return "'long long'"; - case 'Q': return "'unsigned long long'"; - case 'f': return (is_complex ? "'complex float'" : "'float'"); - case 'd': return (is_complex ? "'complex double'" : "'double'"); - case 'g': return (is_complex ? "'complex long double'" : "'long double'"); - case 'T': return "a struct"; - case 'O': return "Python object"; - case 'P': return "a pointer"; - case 's': case 'p': return "a string"; - case 0: return "end"; - default: return "unparseable format string"; - } -} -static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return 2; - case 'i': case 'I': case 'l': case 'L': return 4; - case 'q': case 'Q': return 8; - case 'f': return (is_complex ? 8 : 4); - case 'd': return (is_complex ? 16 : 8); - case 'g': { - PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); - return 0; - } - case 'O': case 'P': return sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { - switch (ch) { - case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(short); - case 'i': case 'I': return sizeof(int); - case 'l': case 'L': return sizeof(long); - #ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(PY_LONG_LONG); - #endif - case 'f': return sizeof(float) * (is_complex ? 2 : 1); - case 'd': return sizeof(double) * (is_complex ? 2 : 1); - case 'g': return sizeof(long double) * (is_complex ? 2 : 1); - case 'O': case 'P': return sizeof(void*); - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } - } -} -typedef struct { char c; short x; } __Pyx_st_short; -typedef struct { char c; int x; } __Pyx_st_int; -typedef struct { char c; long x; } __Pyx_st_long; -typedef struct { char c; float x; } __Pyx_st_float; -typedef struct { char c; double x; } __Pyx_st_double; -typedef struct { char c; long double x; } __Pyx_st_longdouble; -typedef struct { char c; void *x; } __Pyx_st_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; -#endif -static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); -#endif - case 'f': return sizeof(__Pyx_st_float) - sizeof(float); - case 'd': return sizeof(__Pyx_st_double) - sizeof(double); - case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -/* These are for computing the padding at the end of the struct to align - on the first member of the struct. This will probably the same as above, - but we don't have any guarantees. - */ -typedef struct { short x; char c; } __Pyx_pad_short; -typedef struct { int x; char c; } __Pyx_pad_int; -typedef struct { long x; char c; } __Pyx_pad_long; -typedef struct { float x; char c; } __Pyx_pad_float; -typedef struct { double x; char c; } __Pyx_pad_double; -typedef struct { long double x; char c; } __Pyx_pad_longdouble; -typedef struct { void *x; char c; } __Pyx_pad_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; -#endif -static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); -#endif - case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); - case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); - case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { - switch (ch) { - case 'c': - return 'H'; - case 'b': case 'h': case 'i': - case 'l': case 'q': case 's': case 'p': - return 'I'; - case 'B': case 'H': case 'I': case 'L': case 'Q': - return 'U'; - case 'f': case 'd': case 'g': - return (is_complex ? 'C' : 'R'); - case 'O': - return 'O'; - case 'P': - return 'P'; - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } - } -} -static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { - if (ctx->head == NULL || ctx->head->field == &ctx->root) { - const char* expected; - const char* quote; - if (ctx->head == NULL) { - expected = "end"; - quote = ""; - } else { - expected = ctx->head->field->type->name; - quote = "'"; - } - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected %s%s%s but got %s", - quote, expected, quote, - __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); - } else { - __Pyx_StructField* field = ctx->head->field; - __Pyx_StructField* parent = (ctx->head - 1)->field; - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", - field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), - parent->type->name, field->name); - } -} -static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { - char group; - size_t size, offset, arraysize = 1; - if (ctx->enc_type == 0) return 0; - if (ctx->head->field->type->arraysize[0]) { - int i, ndim = 0; - if (ctx->enc_type == 's' || ctx->enc_type == 'p') { - ctx->is_valid_array = ctx->head->field->type->ndim == 1; - ndim = 1; - if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { - PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %zu", - ctx->head->field->type->arraysize[0], ctx->enc_count); - return -1; - } - } - if (!ctx->is_valid_array) { - PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", - ctx->head->field->type->ndim, ndim); - return -1; - } - for (i = 0; i < ctx->head->field->type->ndim; i++) { - arraysize *= ctx->head->field->type->arraysize[i]; - } - ctx->is_valid_array = 0; - ctx->enc_count = 1; - } - group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); - do { - __Pyx_StructField* field = ctx->head->field; - __Pyx_TypeInfo* type = field->type; - if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { - size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); - } else { - size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); - } - if (ctx->enc_packmode == '@') { - size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); - size_t align_mod_offset; - if (align_at == 0) return -1; - align_mod_offset = ctx->fmt_offset % align_at; - if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; - if (ctx->struct_alignment == 0) - ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, - ctx->is_complex); - } - if (type->size != size || type->typegroup != group) { - if (type->typegroup == 'C' && type->fields != NULL) { - size_t parent_offset = ctx->head->parent_offset + field->offset; - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = parent_offset; - continue; - } - if ((type->typegroup == 'H' || group == 'H') && type->size == size) { - } else { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } - } - offset = ctx->head->parent_offset + field->offset; - if (ctx->fmt_offset != offset) { - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", - (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); - return -1; - } - ctx->fmt_offset += size; - if (arraysize) - ctx->fmt_offset += (arraysize - 1) * size; - --ctx->enc_count; - while (1) { - if (field == &ctx->root) { - ctx->head = NULL; - if (ctx->enc_count != 0) { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } - break; - } - ctx->head->field = ++field; - if (field->type == NULL) { - --ctx->head; - field = ctx->head->field; - continue; - } else if (field->type->typegroup == 'S') { - size_t parent_offset = ctx->head->parent_offset + field->offset; - if (field->type->fields->type == NULL) continue; - field = field->type->fields; - ++ctx->head; - ctx->head->field = field; - ctx->head->parent_offset = parent_offset; - break; - } else { - break; - } - } - } while (ctx->enc_count); - ctx->enc_type = 0; - ctx->is_complex = 0; - return 0; -} -static CYTHON_INLINE PyObject * -__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) -{ - const char *ts = *tsp; - int i = 0, number; - int ndim = ctx->head->field->type->ndim; -; - ++ts; - if (ctx->new_count != 1) { - PyErr_SetString(PyExc_ValueError, - "Cannot handle repeated arrays in format string"); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - while (*ts && *ts != ')') { - switch (*ts) { - case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; - default: break; - } - number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) - return PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %d", - ctx->head->field->type->arraysize[i], number); - if (*ts != ',' && *ts != ')') - return PyErr_Format(PyExc_ValueError, - "Expected a comma in format string, got '%c'", *ts); - if (*ts == ',') ts++; - i++; - } - if (i != ndim) - return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", - ctx->head->field->type->ndim, i); - if (!*ts) { - PyErr_SetString(PyExc_ValueError, - "Unexpected end of format string, expected ')'"); - return NULL; - } - ctx->is_valid_array = 1; - ctx->new_count = 1; - *tsp = ++ts; - return Py_None; -} -static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { - int got_Z = 0; - while (1) { - switch(*ts) { - case 0: - if (ctx->enc_type != 0 && ctx->head == NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - if (ctx->head != NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - return ts; - case ' ': - case '\r': - case '\n': - ++ts; - break; - case '<': - if (!__Pyx_IsLittleEndian()) { - PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '>': - case '!': - if (__Pyx_IsLittleEndian()) { - PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '=': - case '@': - case '^': - ctx->new_packmode = *ts++; - break; - case 'T': - { - const char* ts_after_sub; - size_t i, struct_count = ctx->new_count; - size_t struct_alignment = ctx->struct_alignment; - ctx->new_count = 1; - ++ts; - if (*ts != '{') { - PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; - ctx->enc_count = 0; - ctx->struct_alignment = 0; - ++ts; - ts_after_sub = ts; - for (i = 0; i != struct_count; ++i) { - ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); - if (!ts_after_sub) return NULL; - } - ts = ts_after_sub; - if (struct_alignment) ctx->struct_alignment = struct_alignment; - } - break; - case '}': - { - size_t alignment = ctx->struct_alignment; - ++ts; - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; - if (alignment && ctx->fmt_offset % alignment) { - ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); - } - } - return ts; - case 'x': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->fmt_offset += ctx->new_count; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->enc_packmode = ctx->new_packmode; - ++ts; - break; - case 'Z': - got_Z = 1; - ++ts; - if (*ts != 'f' && *ts != 'd' && *ts != 'g') { - __Pyx_BufFmt_RaiseUnexpectedChar('Z'); - return NULL; - } - case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': - case 'l': case 'L': case 'q': case 'Q': - case 'f': case 'd': case 'g': - case 'O': case 'p': - if (ctx->enc_type == *ts && got_Z == ctx->is_complex && - ctx->enc_packmode == ctx->new_packmode) { - ctx->enc_count += ctx->new_count; - ctx->new_count = 1; - got_Z = 0; - ++ts; - break; - } - case 's': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_count = ctx->new_count; - ctx->enc_packmode = ctx->new_packmode; - ctx->enc_type = *ts; - ctx->is_complex = got_Z; - ++ts; - ctx->new_count = 1; - got_Z = 0; - break; - case ':': - ++ts; - while(*ts != ':') ++ts; - ++ts; - break; - case '(': - if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; - break; - default: - { - int number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - ctx->new_count = (size_t)number; - } - } - } -} -static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { - buf->buf = NULL; - buf->obj = NULL; - buf->strides = __Pyx_zeros; - buf->shape = __Pyx_zeros; - buf->suboffsets = __Pyx_minusones; -} -static CYTHON_INLINE int __Pyx_GetBufferAndValidate( - Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, - int nd, int cast, __Pyx_BufFmt_StackElem* stack) -{ - if (obj == Py_None || obj == NULL) { - __Pyx_ZeroBuffer(buf); - return 0; - } - buf->buf = NULL; - if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; - if (buf->ndim != nd) { - PyErr_Format(PyExc_ValueError, - "Buffer has wrong number of dimensions (expected %d, got %d)", - nd, buf->ndim); - goto fail; - } - if (!cast) { - __Pyx_BufFmt_Context ctx; - __Pyx_BufFmt_Init(&ctx, stack, dtype); - if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; - } - if ((unsigned)buf->itemsize != dtype->size) { - PyErr_Format(PyExc_ValueError, - "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", - buf->itemsize, (buf->itemsize > 1) ? "s" : "", - dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); - goto fail; - } - if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; - return 0; -fail:; - __Pyx_ZeroBuffer(buf); - return -1; -} -static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { - if (info->buf == NULL) return; - if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; - __Pyx_ReleaseBuffer(info); -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - if (PyObject_IsSubclass(instance_class, type)) { - type = instance_class; - } else { - instance_class = NULL; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(tmp_type, tmp_value, tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); -} - -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (likely(PyObject_TypeCheck(obj, type))) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); - return 0; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = (start + end) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -#if PY_MAJOR_VERSION < 3 -static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { - if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); - if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); - PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); - return -1; -} -static void __Pyx_ReleaseBuffer(Py_buffer *view) { - PyObject *obj = view->obj; - if (!obj) return; - if (PyObject_CheckBuffer(obj)) { - PyBuffer_Release(view); - return; - } - if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; } - Py_DECREF(obj); - view->obj = NULL; -} -#endif - - - static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value) \ - { \ - func_type value = func_value; \ - if (sizeof(target_type) < sizeof(func_type)) { \ - if (unlikely(value != (func_type) (target_type) value)) { \ - func_type zero = 0; \ - if (is_unsigned && unlikely(value < zero)) \ - goto raise_neg_overflow; \ - else \ - goto raise_overflow; \ - } \ - } \ - return (target_type) value; \ - } - -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #endif -#endif - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, ((PyLongObject*)x)->ob_digit[0]); - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong(x)) - } else if (sizeof(int) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong(x)) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +(((PyLongObject*)x)->ob_digit[0])); - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]); - } - #endif -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong(x)) - } else if (sizeof(int) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong(x)) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return ::std::complex< float >(x, y); - } - #else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return x + y*(__pyx_t_float_complex)_Complex_I; - } - #endif -#else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - __pyx_t_float_complex z; - z.real = x; - z.imag = y; - return z; - } -#endif - -#if CYTHON_CCOMPLEX -#else - static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - return (a.real == b.real) && (a.imag == b.imag); - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - float denom = b.real * b.real + b.imag * b.imag; - z.real = (a.real * b.real + a.imag * b.imag) / denom; - z.imag = (a.imag * b.real - a.real * b.imag) / denom; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { - __pyx_t_float_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { - return (a.real == 0) && (a.imag == 0); - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { - __pyx_t_float_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; - } - #if 1 - static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrtf(z.real*z.real + z.imag*z.imag); - #else - return hypotf(z.real, z.imag); - #endif - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - float r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - float denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(a, a); - case 3: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(z, a); - case 4: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } - r = a.real; - theta = 0; - } else { - r = __Pyx_c_absf(a); - theta = atan2f(a.imag, a.real); - } - lnr = logf(r); - z_r = expf(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cosf(z_theta); - z.imag = z_r * sinf(z_theta); - return z; - } - #endif -#endif - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return ::std::complex< double >(x, y); - } - #else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return x + y*(__pyx_t_double_complex)_Complex_I; - } - #endif -#else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - __pyx_t_double_complex z; - z.real = x; - z.imag = y; - return z; - } -#endif - -#if CYTHON_CCOMPLEX -#else - static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { - return (a.real == b.real) && (a.imag == b.imag); - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double denom = b.real * b.real + b.imag * b.imag; - z.real = (a.real * b.real + a.imag * b.imag) / denom; - z.imag = (a.imag * b.real - a.real * b.imag) / denom; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { - return (a.real == 0) && (a.imag == 0); - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; - } - #if 1 - static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrt(z.real*z.real + z.imag*z.imag); - #else - return hypot(z.real, z.imag); - #endif - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - double denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(a, a); - case 3: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(z, a); - case 4: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } - r = a.real; - theta = 0; - } else { - r = __Pyx_c_abs(a); - theta = atan2(a.imag, a.real); - } - lnr = log(r); - z_r = exp(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cos(z_theta); - z.imag = z_r * sin(z_theta); - return z; - } - #endif -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { - const int neg_one = (int) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(int) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(int) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(int), - little, !is_unsigned); - } -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned long long)) { - return PyLong_FromUnsignedLongLong((unsigned long long) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(long long)) { - return PyLong_FromLongLong((long long) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, ((PyLongObject*)x)->ob_digit[0]); - } - #endif -#endif - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong(x)) - } else if (sizeof(long) <= sizeof(unsigned long long)) { - __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong(x)) - } - } else { -#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(x)) { - case 0: return 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +(((PyLongObject*)x)->ob_digit[0])); - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]); - } - #endif -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong(x)) - } else if (sizeof(long) <= sizeof(long long)) { - __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong(x)) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - return PyErr_WarnEx(NULL, message, 1); - } - return 0; -} - -#ifndef __PYX_HAVE_RT_ImportModule -#define __PYX_HAVE_RT_ImportModule -static PyObject *__Pyx_ImportModule(const char *name) { - PyObject *py_name = 0; - PyObject *py_module = 0; - py_name = __Pyx_PyIdentifier_FromString(name); - if (!py_name) - goto bad; - py_module = PyImport_Import(py_name); - Py_DECREF(py_name); - return py_module; -bad: - Py_XDECREF(py_name); - return 0; -} -#endif - -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, - size_t size, int strict) -{ - PyObject *py_module = 0; - PyObject *result = 0; - PyObject *py_name = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; -#endif - py_module = __Pyx_ImportModule(module_name); - if (!py_module) - goto bad; - py_name = __Pyx_PyIdentifier_FromString(class_name); - if (!py_name) - goto bad; - result = PyObject_GetAttr(py_module, py_name); - Py_DECREF(py_name); - py_name = 0; - Py_DECREF(py_module); - py_module = 0; - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; - } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; -#else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; -#endif - if (!strict && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility", - module_name, class_name); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; - } - else if ((size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s has the wrong size, try recompiling", - module_name, class_name); - goto bad; - } - return (PyTypeObject *)result; -bad: - Py_XDECREF(py_module); - Py_XDECREF(result); - return NULL; -} -#endif - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else - if (__Pyx_PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -#endif - } else -#endif -#if !CYTHON_COMPILING_IN_PYPY - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return Py_INCREF(x), x; - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) - return PyInt_AS_LONG(b); -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 - #if CYTHON_USE_PYLONG_INTERNALS - switch (Py_SIZE(b)) { - case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0]; - case 0: return 0; - case 1: return ((PyLongObject*)b)->ob_digit[0]; - } - #endif - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/c-concoct2/vbgmm.so b/c-concoct2/vbgmm.so deleted file mode 100755 index 4ac6c9fc6432e80078a3168eca96a25c06fea88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68068 zcmeFaeSB2K6*s<-4FpWQ34)@6L>m+ok+h(!fM#JA?!qphf&}G7h+t>|5q1G9gy?34 z%XKlW)uOF7eY4cQnAS=W10;Y+co71kq9`IN-fesVRNhqf`F_vbn`{F0>GR+3j~^fQ z-g9TpoH=vm%$YN1=HBc&{n?pzE>~I`m&=ubpN5~+*5!)f&VQHSx9B{VYs!?d{=%`6 z)bdi<^3i2KgQhDTKi>Io%9QZ*MPUW2=a%#;SULX9d_vv%>{g(=d2zvL;ncpnH*7VB%u1c2M1o+%S zehy*#K4nT|&cc~J((H+A-OmC~AC zy-lyLU4YNFC>;_l?#+7V^N#hVWI6hlZKt(*roNGGv)N*YYU&xsr1;+ zAGe^_T2ETGcg%|l*=aAIzh6)8nHrwjTtRF39kl6L848Eb-%qdTzS*PY?QO8>St$imX{RI$73!TXbb^6VBmKUBWAmyd+vOT# z-|gp*0_vIlkV@-Hm#efdv#J$69rw}{g!&rfL1y(^aYF;y#xD2`*x_;=1m2*}T&~q! zU9R(y=2STa>HHCIA?`DA|8M^W{Kw_0IY;JYNMrd#@7_H>)${$ocs99k``>!C$wOK; z@!P{7;dhPm%ryMV#BTt8EUWsXBcP71>m&2$T|eu-qN%g4pEYwDfA`Lx)u(TtdmaD? z43;avuelr;hosI~u4vk#^XY=UMkg%_pJg@ z%}=hQ!t2HX>%(8bt*X|RpMqbMpR^VuS2xl}!eDwg5+@k%PcOh*^H(HWx^#1J z@}EpfYGvDzWIX`>z|b)ydaI5*^e5Zc@xjwjg>{WWdP9&-I!GQOnS);-y?B2=c`-Iw zbAjuv`W8rRc4y*52mhFkN_c@D?=}^Xx9SYCXUyoMbuU9YY~+KvuJEP0`Cx`_&d=79 zJM;HgKL(w~t7d53eaycSH9eRSZf9N3WX(piF2j@79eL;LMw)K6(W3)gT3H3OL61Jz z6KvhpGxEFW;Mf1b>U)CO^T@2(`9j6>v#Zd!jgOO~HWw&{?_pW9+dRt69Q+{)>gH&$ z^-wuTh$IgZ!#I#^kf;C1Q~I4kx7$!v?62o2cDzL~y2%jxWrE+Wt11>bN3l#nbZWau z73(Cm^^f2tN(5!@^|%mx2PC{z*=US#_asz7H~WuGL3Am^msuATW4=Q1q@cX_bD{OD zgEB^;T%LlmPN6*Rpj@X=zQnV`(JvLsA_t{|LOGa%5>_aa9F$Kmg2C=*mArNSTy9xk z;1)E~kH{_S&%`y;pO@RB394j*N_;k(pQL%jPhzFgRiI2iT59Y+qz;j+Imm*+HukR9cOk`9MrIc&n~+ z)N=(apl&>~4~AAZVis=s)c}qVNLsazAvae23hH#d%!^ibD2>Zr(nsay6D+Npaltm%lPBGL zi5vz^VJv8Dw~EP`@xE?s){|PKvu+O0NRH{ND}*Ngght|7w9#AjE(~6i!GG!*6gSfs z{7u>y9tHz>KVVn5E40E7ljbuH`;5~;;pyYh8DywZX%{DV*CF}Ik7W@ zvj;&ee{17;`CE0no1L!I4e2@QQAZD`l9)6xN&R;$sFJ29+ebP;dN4@4NFcUfD=Vj# zn}Z+w3vd1R@dkN4_o$k1eg~HH zsQHm2^&doHvosRBiBr{G%Kg@e-ZG zfbm_>?0*va7%sobTesze>TBdaSdeXDHtKw4l zm#8Xe{E_+@G=%ltLS{=VG6CpqhXBk5u%Kf3)j{J!5P+p)QLT)ErOc0){smBJ_%_`$ zGIzlgxRr-s8iMilbb2=^H#cY`Kn3{g2ox^YlBLy8~YxZ(l{c&nw8#R zSK6qIN4xR|AxpxSs5FvIEmi-g`RQDQhc#RYOSkiBN?$`W)j%#I@#_1s33*E%Dpq2d=&ptDK zG@kwWdwj;`yrBTL`$#qS`vcoXDMbX+%%IE1xdS8Hpk(`tR5+9lofqBr%L zL#!|-(lKP-lamohy7NM@kF?k&G=au9K4UgiZI_h+Nd=5oL$S}avfGh`=0TNVvf_i^ zTM5i~=MQkpul5vdi zT_pNR;vzuX zp0#*3yY0cFKffC8_RdB5deKh3<^#9S(=S8(0k84C_9%vxtFa5K(_)iQ#;!7PFW~&G z#xbpXfy;Q)>p8Nd*N}Lpw#M$7MEA7ayHDvwyD3+5P`1x=!q~QSzc21Zcbr(fgWa)J zH?}bwb!BV6-lVPBleXLQ_LA%EQcU(5yCPTW=HhI$@Sf}pObl8KZHIn~H;{M`FmMKT z>xec)u8D3g(2Ks*YYw}0qt5#F5ou<40{qA0e{{KwZlB_6b~}Wt&+|>m)q2r(wpEV@ z(~gwuW{z&&kM6p^i*DSSo!qWRYmNYI>ES@pE)j{*k6dJAB-1NEff|BQH3`cbjy9}! zkmyGjZ4DZStvgt^%qC&YXZ&O_ZO;Lu1&sI6E#aI%GBYo7e!vvx_Y?FT3{W^7V;R$1 zbc>!c((Iw#GBtU3-;FMKdR9l(My>3AIsr!d1z@5s-GyrbL{pc3><=n><}>;Rjk`sy z6T^Ty<1Bl+i2Z83sT*Gg%^oknSKwD3iX9J{Kgrf&j8p}p-?_Dz z)&V|a_RucO*0M+T)Ov*~W(2g7I(VxdR4xYe8_*7#vsVSp=@mgUvN~Wc&CosXhjTd% zyd9HCy6g}~n%T|m6si?PTOx>9CLFLTZN&G17&N{_SYjd>Mhz!|#^=@>Xy429 z#szT$+iecd^_e|=<|3%WC)QV>;x)E-qu(YY7g)hEHo01hh1nW(`WwhLHb=i<=Jify zu{2e&Z^p>J&-fhPsL%MoYrJiJprd-Te@CoB0?D>|bUiWPnSTkk^mzI-8gfsp7>SYd z^*RBN1K~Z>mksB9S1-?8>o2Py7^@CnaeUeH0CU4#^ynhQ0&*Zg61FBrF~@R_gXi?f z?@0SZxV<$5%%W5=CImR5iw3yD3*p3#VSyZUMB_~9|7BVR3dGY(;Fydk%3Q6d)g(WF z=&XDYg^5a>l%}R%zy*#>N?S4cSl1%gpATi~;YUW|3KD5)ywEN-23#S`Ad+&0i%`*Y zhKD>dE24BelolCq8WUXenQDL{gY8&Es(43}46buzkf&tO%~m3-@L{m=Gzx&|Ke0MU ztdzq27yOphQ64`8%aBKIlRUJt9}CWUE@Q0kD8va&IIA6Gh`c3kLNQfG#a(Ci>3Ml#&%m{oucezyC^ZgOngr5j1TS7 z*i){U#sO#Y3h84q4z1Qr9mXeAfjj1g5KP#Bps}Q!Dn1I#au$w$*G5~0exYzypbMJD z0ml=#CvFG9tz%JfHD7b1Y;p%MX4x3lQV=lwt7KxH-jqGg&fcoBDzbcokUoe40ps0B zcH%~I7u^E2P{lcU4$syH4$F?Tw~k1Kk*j59M3KlFiFUxpvR_#0bxMzZa1t@2tn$PG zO59F2J_x2{1)_uU;Hj(!LSid>*fdrHK2d{9h8CL#EfqK$VImS|3%`+CplL@CEaBu3 zzLP%05aDN0TX537QMYE7AU0Kp&XMM)FGp|+8lc7eibs~y%>uL@6#vY$s7y4?ZDj?K z=WMnS36T=U?o{se=uIxI>?bIV9?;L#Ggkc)>6TcS-DEB)PdtXTQXqLjBnKk_v(gDT z6tSanTe zX&MsEbjEgQrV+$KzW}ZO!4`Y(pAY{o<4Efz7; zJ2n%6Qj*B86p=NGNK6r_0v}C8j=;m+z@3)_0B&ShejzhHg~bkU+NFimmR7ttTaPlIAJEoa2!^cR9Ze=N*@-{O*jncxmT?blp~ITuCtJ6ok&yCV8I3VBP~TrL zNg~Eu2zm^8?$YVqzGFS}Q`9A6*i5ejG6rzta!3|s*Q&?x?WuwVwYbC))6#xxO@G%a>L42>i17ePKpSi{t^p7g9r;LFBY{~v(U z##}och!%8EH@jFXn=o#Wwsd~9RJG-O>#YauRwTB97WQY%j=~h&yezp3~bJO@FHgD+MH_bqH3>}GrTX-3^Av}3-YTI z8!(T;a-4u$O3RTY)M!;JKt^Uz`s6|5Z;L2nv-4r7Y`_?g72+)2Mo+-^)AU8L#M;Y=+D565(XS@j2PpC@o?=se~SnROZttjAqbyX)Zdv7SzmzsBG}(7#IHh zkD#v~0n*BLqj1m^jxl=?H&KUjUTuy4(&)*XwHR$N)P_0Ws~sE~^gtJ`v^d+O^uTXu zjm-2VAltGB<|D=K0h(&|K*2&1l^&=@ zLwmHchj4Yc-$8v!YW8E(yygrjn_l7&&;mtEy4p>P4^Ku<=FGoHUj>7^Np#U&Lun`K zX?eCq$ak%`>S7cVy*MNKHuz$A0zu=rHGTmRwrt4AVE#u>*%T|UIs1;go zfmXEREMnhg+3l&^JT|u~icE=D6B$oI_5jB!&~()~ggu!&!*Z(Kuvn{ttXN z3>$A1bP_AqYAn#P4Ta!P({OTno7T9s=fc2)R(2P7@|vUb%yDI&-CFFZX!-2rFscv3 zgVhaxxnAdAg;cmZ*&yL`fISU@LO1wht>>?;uyPn=1#6`vqgxiGx+gyb8PNr0Zm9~K&+dVsok4t% zdqVNS?coBWZ6B1{1=dlGtY2H=1v$9efUDHbL;ghV>^v>@d+xr7F-hD6`qrBJLFz}) zVwETrpDz_F6L~L)ZD@;bX*^$H2(nGiu|z|FB*W)?AhsMnOmP@{37SvFI8Lo+P%-TY z2XTrWiA@GlqsO|Od@&CkMXo_FeS%>RYm3&GQV7b^Iy2YCYHVj$qQ)qOcsSGH?hl}7 z4_U8q9P1ySf$)-Q-g4xD_zEFT<@f=JTYn;14$j0yaE*}vLy6b}Rl^ZXUZBN> zl8d{n2kx^uqT0mzAQ4;-YvOt)xxNcHi3=qw>srb3NPsKe{|aQ&``&H!01oI%Q?%G& z%tOs4Ht`l7TiTD-`$>q(e@S7-hxOGFl@6Mnx0RxunsdHMFTw;jtmle0+J^e*srE~! zaC_+(Y{~LXrJEYCxez_wURzd=glJ8}ilJ$Ga&vP|#=>sehU%Ye?GO)UoR!&r-iOgs z$;h(_6NPbDs*FN+MNf5KdRg>Thj3o>R958a#%{uXvwlQRUA;6XdMa0o{SnxxEio1H ziJtN-9Tz>-Q;SWGYxyepbJ^Ry`%E`%;G}yM96r{s_(#=^fW@x-YV9qm5l`| z&I+WhXq&&ata=?2BhwS{H1e}}Y2Wy*wb9czYs)g&74iPL&~EHM=|%m1si&RE--GRm zozQi>-;zV3yWCOV>|wx%I^I#(;30G#OQURv2;g`B&vhrZ5rv)YjeYQNt! zzjGN(;A?Cdi}Z@Tlc+tfRgYaHWvd%j3`3XIrgmBH7V{0+`$0-gOS^0wN>Q*c!6ZoeU`yT$L|;7*Yc1Wx zQP8>qprY9*6mvHVkQ4%wYwWHVi8_ zN1B@x9ZV_!`HhkSNX#LYsK&HukGxSr zCUxX-61J<)bxPpgm*NnCIkeda3qWc4ro`9i7X+mB=#qMfY$_5V%X*lp0g17ANYS2W zFp2w&8jG(SB-~K0{5^?(qcn(As@tD&OZBfBG4I?26@=;?#WadV5Zs-bnb5xAiLbj8VCu-uO4L2i~3lZ;d~J!z3qkiZaV( zhY0%Hc&4Sj|9^j06+DKStr4+8R`wbyvvw6rixRzPU?uq@C7*S7qN@^bLbxd<8~zFP z`2Y?;J?=*l=3a+ld?w6$9CGKq^^fVPdFO&t)84S_X-%iN6@8~(2hXX;p_TgVq!Bk2 zcAlNI`c`!?UxOSLk%VJ-X;Pb%pu7eZW%__6AMw5uEJ| z!8z7VPrz)CjdN|oTwnBzcWDXsequQoZ*bt|LFkE01|VUF4cy66IiCR$ImdZpPDxWvx+>GjDRYmadXz@c;e=oNp6pOg1R3j7V= zcA!D8+sW?^I1TBApp}LDt+-!}yBEK^@VnPeWBU9Qn9n+XOYJnm&%<8vG-2!C9HcEw zNiR)-4Zu&}_uG`TzX9g?pw|9;Ax>3k8*caISI6Kd-GNz#8{WE!R}8RB#UR2?#iA~l zHa`QXtvMDwGdG+bJu^QtB)X_Dtw8%lt@ewd*mfA&SCt9EP|3lK5aRSane!L8QEFk8 z1-rxZZrg%JO@gm}6s(v(Jb!CJ8Fs3-fV$7r3ssf=*w&J;Kkmgsw>m$mQ{j?iC3ppb zWdx*#@U`k8KPit`68JcNUbyFE7hQWHcrsUy)}5z&&O{pFd?WpXfahem_4>fZPuBT7 zyA~g-9XcGo)zH4IBYJx3(o5q*HbhTq+OmgPX-yeK@cWwi6Dr3wPLB_H7O}mBvtF** za-O92stjSZnf|oIzZ_MLVVfY6{9BxJys;k9Jd!MCT-18&zs@N z;t>yx^g(DV!xg?72TWwsLT`f;2k|iopxut=@fit=ZEQMk89k+IPt+(v(bIr8fik35 zhBeH)kS*6Nd)XTxr<=FuavwxUdbVk?ZO90wB^Zv+fFjPW$AfN+%#~9Q+|n4?H{dxC z9-p%Q3&clZ37!!!?|?tBC!DLT86v^Isj7n8uAm6;9N9#K59b4$+-a`L?7(yiY!f>K!0IH zw4QyvHWwF6Sytjcq}s~FSekde=*B3V>ht6p{e*xDQ^AS zDU4-JVal?moKY?Qo? zob>xraBcw1AJbm3f1QC_0r(o+7l4l-ek<_IH2zXyKC|3-;5abnak?!0rNT}c?{44^ zNx@5nyCa=H4LCcn=Hc%z_$@-(KXHEBEaRjRF2k=c()mk;oiyG% z1E*^W-UTUeN96Ozv<>!eCUoa_fal}B1izc`^Vw-k{}q0`J3p3l(g-iW?@s%d3Oi}M zA44B}i=UHrdrFypfcaxulRtCE?RxanT-{h=VbA0s)f4x9a>o)G0h)GarDLbZIsbnl z_B$*+9yzGT$L+Ju$MUrCO3*r}8-7dYd!)!U(_dsH$n0zV1NjL1&O`_S$)SU~Ic^`8 zPwz_h4Z2yP>*i#fhFJj5YM8DYqsHjQ9sm1@n0vWnHVqLD`}|Pj9jJSX5a*=-B*%Yv z0$K4NWcV4ckYbYxJc1GX)hzIpngK4IjD5^VM~QHIjK^FFh@&X@AD+?pbFpWw{ljA2 z7+0WO1o00n3w$reCRf&^Tn5_`|O4h>H z2U11Qh&12?2u|@Ki1W2RaCEj7{}59|&|JI=$K%@}_!Yi_r;Xqf$g4fN@p{PkG+?}j z4GFx_5#o~i9o_tCUo_)KU{NdkrG`3<&~l!bSOzY=RhNQ2hzm#enPrZ_5xUM_z^4dj z=>yZx0MKHbmKekD%s#_L<|y_Vf^W%N`{Hd6puGh&9JX%I$`&gk*?RQ!d0OmG@`M$= z5n79LQ@LnVsh&*ZDdT}zzhfoW;eaSZ`f`Hy64V0;KnjbRk74%$mt@b=k(o>C&pLBO zuj1?j?hqOzI(=23Xi%ON7>}~XW^~CF=n|=GG+2{X9I)Y7Si>s~7u$!i>DUgE! zW&fm1jW2|~=Rpg+^%dU0M|l?WKGu`|<$+|KntvJk!g)@dmf2#x!@BKv#|+?dn+!W( zP4(l1kUp^62)G;CFRB6Q0@Y;H0PZdDri^XjET6XKNaJOW|AaYiG3a`YTE026{0`7< zb&w6|Sc=pRPcHIe_cB@SHSpek(MhXu99gJ?2%)T6>^96+iPthw+#I*o9Fhw~OiK$H z-vx}f0`UkoA(jq6>kfy55E)P~=t8Tk*)Xl@MHebP1X#%in*LI0a&6E!1+;qf|7x6K zR0A}$T#H#KmUuXa;`owu0!2%^T6cjT>CZn>WiZ%KtO9DIj*a59UKZ_uZfwUWK^l8Y z^^;p$StUh6_3D^G4k?M=a7#h-CJcmi@F1y+4SY=?#MT?tAu7-`mR1TR;}K_^P)ESn z7aW-W3M?AB1JKI?p*sLSBQU$8i?#;#X~}9RZD~py8?Ozr-#1(Dk7YgkjLm$*>nt>F zIXMr&M)nTiM5ujmg%%9ODS2b3*o31&m^djedzCo5AA0~Z5M;O9wtPVY^`o4upDYcv zLN#x8RP(`>&Bx}#W^1Hywgux*E2DTI0SuldZM1m_4(zdZx-EhpYXlMz^mtleir@lj zq+<#jak%6YD{;G{l1{p|e6X~%)e9|D&Q8jj4sqm@=mpybg9ux&7UvKuH=-3TYY<4P zPQAtH)NUAi9j;II&TLIfos2Di_+1l zjUA!rRxT*A@3iH$P*=W1mqn#+daV?u952IhGAK?=Yj3}oZk69A;xAC*hYixoevaZz z3P>})12`Nkd=I1aoU}3Q2RpoW8`#Wix9$Ry(Y9g?I?>Zz0D6uU7|5a3@;EC6ZF8z8 zxQN+^HLA-xe5)f>uOrp=sho1CTuDxCsh*%gY)M&3_3F zNi`Sr9I0M?cH2{=8c0mTZjgNWz$zc(NL9|mv5UXPB-O+zrMiPSwp2f~XRwqvkCjvh zJDheN*vx6??tsrB)i5Y3sXhyO-zU{si8YX@1V^loMvGK^DN_A$DzDVlT-6?tYT-F) zL#jWU>PYo5fs|C|3*1Vo+fb(?)eAwdl}4pVHJHdGrx;o2f0R-dKn~JVsvlg?N~#Np zV@q`xGFwqrQvKv^M^`@4oi{h z9jUxhs@s6$SODKSX+x?59bUV6ntAQkP2g5i4TGK|)#SPT0NVoGnpooor{|N?k3x=A zhYPci>T4+6LRWLisV&u4&ZexS`m-sHR38&aNp(Kpb4axwwJNDD0KM;%>WoAO@(Rbq zWeq?nSO7gmszXq`iC0QB3>-(Q*PW9#r1~+!Im*fUP#~qNbpp4N>gAy4NY$cy)YAH; z=;}QQzU#gbb)x@+j#LAVR9{5lCQfMqwh_mc>a%B4R#F}4aN60^%xULtfX^Y-d7!AI zdI#uzpH%Nn{OdgM3axWlhenE2N2EygN)&J6l~TPNlpU#Nos%}C`WON~N~&>zlvM8* zxRq4vQKuu-SD}aJkm?24ZJtqAki2t7Vq6+{g`L2cQBY3V0KUE?25BXVH}Oij&LfU3 z*9Xp~t>pS4B0tIt_&^|~t*-(;hg>fOMJ3mK&^xDGo4CCv@h31Up=N9O2$5_sMY1Ph z9-6qNWVZmvk?e=aJexWs+uz}~+mD*L?RK%itt2}K^c>0l3iQq)*&Ii*_v%J%;xA-3 zhr)e3Ago}7$y;?auv0;yiCqe}Gsru_9d|Z)CEQ2ua)etZkP>b&;ByFfJ!)0L?G1Wo zH=k_uWliE{VGCnYrQ<1b?QNgC!*T!%hNd+JR^y4eN3g}m9i2!6UMGfkjwLE~A6OXS zNpIEfKs0d>ee+*1LdHRF)gOrT3Xr^OAtLbq9z1P)Ip;a1e~T2ZSamb~F2r3_DBp_L5~O)Kih~hUnwSmHPGLc$CRQ~Qxu}WAa1yyzh}@!xbZ;UOH2Zf0VnPV02S#y?7-|8E=+i<@|)=;x}k)(Y7|mb^Ztt@5+vfS z8qp1y!bZQTlHyj9+2PJ-y1knuJ9DG>mn z6d7@Fm|5Q-o`91Cx;X;-1^w@*qaW`a!wphJ>pmYwf?Yuni>*XEVK=3rkTbR;@ZAD4 zeVq`(i=cAEw=L~jJZlaoIL%iN(oxU^!Dm2F^%*~2vIcU(@*H2j`@sx0u74hG>h;@I zrRYB~L~o(ipgH({R1h%RrM!)CFH&$~9XmsVE7|%RRaao?8G8t_;yKtauwYKUj;5j{ z&Z!H%qZBAS`?Zat#~8?v%9SXwiUx&HC3^23U)gSjalx#Q$%s%O`=r`gb_BPT33VSN%V*{!6fq*TvM> zN-}U_4p92Bmcd7PTSm5y`o9Pd9sTv0ua!oHj3Y`Sh&>?6+L7=3Nd%#3b&s__kIiQA z9YU_X>#)?uYc*8e@J0NL1x*bDXU>;18r@=i;)5^bDkGjX9i52}M498ZSb49op(r~Y zR_L73uCveNqm$3^*5SFLVmwI&PFs982B+x}BrQ(awD4Bl4ypZ@AsjMJCcZ+j+>W-& z_#B0h4^(O_`o&u{4YN9yw(Kn!Or8-&Q3*$3a!mXxo&#B~6-KF5sIzB{7 zlC)FuqVFpyb@DX*e``cHgjkSwPF~Yg-T=0v>X69&WJ?>Gcm;a^-m13n7!XM#8b2)2 zG>yoFW%w%+F9J;s(7LG{h5h&8)_Q&v@>HiEo{sANKpeceXOjH>a2Z`0|)4b zXuQ*Lt!zuo2YS}4UJ=+$XoJXkArc{Hhclk`lQYz<=gw+x72TKwPt!LeOVHa})d7uk zrdq1cQXpX_Y-+kwAW@FvWr$-dbj0NR75_zbY0*8P5;SZHBghI{F9ky=$k*=Ud{qme zvVuHg&_?RL23U#TiS&CDMg0lp?hag|8@K((u$k&0qRbhg80xlp}AYd86?=XP8RgVz7MpBm( zJSnM95`0&{RRj+S_%y*Y0l;#;S@PxV$Ektr`XqBre5RLVI`80?3Oo_bLYX3i8K;9Z$v{(20L5 z=~Ogfdz!KTeHQj+U^`~SI)-dVP*E^S|D?-@s9a`vS`w}7F{J;GX5?F%kx3_o`J5(p zo*zNN>iy{^cARehFILGmNjae9t-6KUvmQN$kHvu*c$!FnL*URzRirGO5OBK2x)9Z& zb3{ANWAj=r_Ic9znnT#~z>6(EcXf)-n+UvB?mXeYRH)&h?i>=UFGmNhWvtzd4WpP!}|Hc&bF;R{(&D+CB zNzsJw5s|k_v@f8i%VE| zMA?%zr<_k|y@Z%(=jZUokac7r24NfY0s7}~khcNWn@H2~ zwUuBTXP=A{KI4q>4)(==7+btik(`jXrp!EO0Tt&MM2~ zLHn%vY#I*gd)~+SL+puJ(~!W5P9rA7`)x!pm#nhhyGekx*7E@1k+nQ2Bh@#b2Wl;E z?jbjL@zpouD|~!0Q1q={^GO>kL*%OVK7Ips{jrby#?g`oLPbY?MrcQ%=5QPAwDbG~ zIe7>5jxgNcz&eJ**s=6`K3V(;iulaXjuJl)V;1-fxT@9pd&+%AZ9ZOrXg;4*bo`iC z%l3VZwq(8zLAy`s$+~2%=Vas~J-NxBR`2s1ir~Ye{sy0+yM0EkZWQ7yS&Nq(u-UzX zCJA2?iD#8#@wVX_FspUyu5vdMv2Q~eEAxU*< z2o}w7`;Ef^T*4x9DYj@Z&Dt%(okiMTF_4)goTGB$tB z_7DiAo)>Ga9|JJ-Kx4X11F{I1m#g5}hbW3o9;|(|vhz3+jL2FVljuNK_*(T{yJ|ss zH7Ff38cWms%qIkOOUSs|oIk+4y}%slMqEw6%!E@l4&k&87?TtjRdFpYp-SszOdS+q4r|b|LzT2~Ye`{YHiz?5 zl7GTFdIRy2RswgZz%-02M~!mC%nV3Xq^AU{n@_Mf4u9-}blEGZSt)Pw*s!8;nhlB(>=Sx-BDFFrjG1P z(Ct&N{jvrpguQ96!K(Q@rxza{5g+s_c!k?jYpv=Jrs-Qgg>giK1D?^b*VMAxs-QX9d;o?RbJSXGOjmYM7ck@q@VZ8rgHBrI{m3Pzi!%|6EF$Jn z-`Eb{)(k|yD7EXfegY)r4MoWVzQS4Hk9`I(>9QDZ#t$Gx+!dTEmX9k`X|`v|7{@d_eJF7`y#G~z;e7?l zqz>;bKUCS6W`7G%4euBr9JVS0ZtMB>p--i9V|^i`1Ne^O5SEt_V74{P9y#*jut}r z*S63H;#~?n%p>n9o(y1^;=tfbivWi3O=o-+LtFU-W-`c@{nlhEx6iwdk`~D8dqN3Vxu@{Vo$jWo{&MwD> zV8kTQ>^4-TzWH12@fR>VF)!PVuTlfjCb+l3kQKUj;F{y!A){-1(`Nq@NEIly9@DG10;MDh-dE5J=-N`!2niSfbr3>4NPu!<_=!R?tt~4 z3|l<80gpM7n1e)o%Mb>;KC&Bsc18D$TNUmdh`aatjHA7Fw~{~F2bz=Hpk;6zsxy*X zBk=Gh!N%;-Rz8J6X|It`ehWIf7$TyDX|^xMbQ~%@7`&E?m@U%0+ocpvXqtmy`q0dE z&CP7^N^7*TKTzbxaeVxh5tKl@)4pK5>-z!EUa$7#rrTfo@V*co5)wrQr&3sQPFK#AWP86UKFWV{pH@-Kb8UQf{v$Zujh$nQML5ARUn zw<#mJJ@OHxL4~B2m3V2Q;33d`aaTiYYM>JN$?|~NbrMt0QQ9$QQbq zz6wDU$CJB=r$t+=2@f=(HV^Md zJ|PKaSpPvHAC~jsJ^O)kj@2L!i}MPtS{qtqRRLlfug%{t{m;)+!IFdc?*zw}cegzK z0#9~x-wmJ@W2}d58h2ZZY#LYR@5gxX<;|56JFuqZQ?Wd8g_~M_t~JCiFFQ^mx4uY8 zk(bZB*Nq8KTlpOfQV_4A`OF&wYaLtUj|cOTq4b)WMLPihK|-c7;6Ognu+5o_QLx%^9EZ ziLY0S^?x0hK~w6mn!=6WoQ0<1a}$S!RlYps_`>;HAz0YwtPCuaVH4_09-M)A0wO%G zr;cBk?(9x*mkR0H<#fVa=cG*7!_=Kj-D%f?QJzh_$sF$D3wFiQ;l6_~K8MtA;=9Ow z8@XNKd%@a#5P4K0@_~3DEfB3fFFzT$qCR{#8n=^@dYzK$3Q2uAKR831+u+0HZ69ML z%Kw2W&O43y>Cg-CxsAx}eTMI!;+@mTc5Hn@nqggs6!mzg zGu~d`I`qJQj?F&q*_Zwo<}X!}-2@x3BeI=7o%}JI*58khe%ce?;6P*j_54iFw{UGX z^9ccvM%e@Z+`0uzI=ETzH5ktriYI{h(yG<*eD(@fnciqJEy5Lh`hE5a6TLBk4z$0r z@k*wTJ}aH6UP+x$qxFQiv&W%FCcrPBke;uwv($Y8daJN=y29O!{LWVhT-c!X+!Whi za+@}OtFR0c!}$eE-fCPX)oVS`l!;(tLi$@+a9SI#W^VQ*Fqa)dWrYB82w-J_r>s3d z!mPESFVR#q%O890azHR9>77p+l;|uT`6fpLBjnO_J>l`b=qT?8oFA=l~ z!3m=N0pmB~PxC|$PY8vIJ_X9(1f@Sv0>-imJcv(x9r8KV#H!JcCD##*7x2&gT+9ix z*`G-wm>^W^+$JWNB;%E^Z(WTebiiPdeo2yb{MalAs(2aG<-dW4cYyG?Hdb9y;)@q2o4*eQW=JPcv?XZt!(oia_{3!s zj*rMXDsowZt6yh)fFrPIBW=Q>a2xPlUe9ZhkG)BJdl1!M)?7VSJ&T`d^rW zeT77*kjLSRWIy9qAS^prKNsLLt;}FmT)>n{osqQ={79@Y&`UYadN)}UGNn?i1a`7* zXs*;|Hx=(30F#2&b-|nCUE>UcZk-9obT}W-?aDVUJ!qzt=ZoJ0@=9FMj zM3!0k`x|pw=u61F_im1j+B_n=F}DrBTaOOf2f=ai!mPhA%N#uhe~9jFWRJ14Wfj16 zSL5P!!c|mA44*4pm7p+dzJ@jXjZb9?$M^<8xXsp|e;_pHlBP_H??$jbMk8)kM2bNq zJeUM}H4zZ|V3(h%$``jN-*Q018@g9w5%h-cz%pwC+=&+6P%VgXag5dP?*S@rXc?ds zeG+?s_YLWprFR#411ycTa{$bj09;3*b9-O##uI&Xx{%eE3NxvVl40UX20r8kJc_@0 zytcMCi*TSXXsnl|oN+8rq~R+tM!mMO5n}|)>GELFj|=?fLL8hKfer~RN5>#mZR6wB zJadIu6xqXHQ9({{>I7%JjQA`V1MF8A{?)1VBdCpe1C?60fknI(gGi%I#Be{wXhf(! ziMObed<$u{XCM4sm;elzdfj+SH=f|?CumCjJbXDAn?^t^hm|s?FUNaCP|oOjR_#Lc z2M;_A<1cM)Kim~bsz;Cu@BA=cFm6@AfHPJG=Iu9;sRy%0nwh89f)F+rVcXLi`%1h8 zvj^R`eu!`JF9l(7(^9@by%^^HBFqHzCa^%Ll{F66H^;PF5dvh47PHOpO%mw)4?;DO z=ZBh|UiRQMzQ0p|MaR6!%op{ddT-KgiaZ$Ds2^&$U-m`^z38(4HV(oD#<(h+u&Sma zBQ}Nw<(Z(d-#V2`ZQ0MpHFl9arf=s`;sCO^l)&3pMfHKAPKMWXKh94-?8D-r0qbW2 zE6c}~XvVFAnQlnd8|Oj5mEJlxw~G7`FS5Y$0XIS}L18Y$~{vEj` zMW4}C5~453Rr9&7?7wby-409kCGimw!o1g8@?&3B{q-W6V@dN0YELKdsH{AboEX_n^ttCXmBE~8P00z-v z)z*Pa1h$@oU_pNy1s27Y&)o@ecAx#V+x-vHFYf#49 zJ&;1>d9s4+KLRP}O!!YZp?d3u%f(!)Z^)JOPN`o7?PZC5urdv0X}(K=j(ODY`8aZb z0d5si1uyOz!GWYs!rEGez(WzshdXll=Ayqrw5(yEziP?(5Jsp{TgLAn@kkylS<>nV zTt0sD|pd>Ei5t4r=+^nrcoiYD#wYd&HS)u7oNdzE~ow2r@e5EaLuZWVvUeEK3Z zN>7QGHoaetzt4R882Rp{^;K8Yi2?Z&tZLw`4(A`{!u~{)eWK_OD#OoxzW0D`g}bq} zh2$=D&~a1&WaAZXwL>f(FN;}Eqkzh3T0g_mcKe(34ri{*u_)Yt*{j9Om5CbcnJWPT zYUX+k&{=<9Y9C7K_WWR`j}o#R2@Mz^v3`)d&s)@*fG$a_LN}LD zsCX)1HqVI~vAYFaCVrD4e?A{o3&f+QQ4Yc13h@|P z&Tl8I|6InJ-0w>D>Wsa(Eg#|l92&%?bG{nf7b>f*+|?dEg1wwqx$>BP4Z9~t{{#&=UF4DB;+O;%5i(Pr_6tQ1qM`jsb2;%?0E*u~5L2=nPk z(|r*5+3q9Kek`B0N9LnIz&NBEAL!Sr=)bXpTYiN|$Anuy(j0`2c!uhL&_1q6#~$Zq zCw9CVk0GNbg#9-238hZ%-3TAQrF;C#89&CKf2`)sQ^(+O(DSzTWVN@fHZsANyGIcT z8Jj}}e5S~1#E+|C$Cumok?~`^DxV#!L&!M06Jo~M6E`(Sj}bh^7HO|w4MINE2>EP| zV4S|wcnM<1%_LilAI}qP2O~m*u*c?Kj%Y~(!pXahW4>N{W|Twbh#gNv$cFKE#*P_) ztqUmzGFkR$v8D5 z5kc&x9>HLQnSCe3PYxfj{&5ji;>!@c9L^B?BRCGwGOP^Kf#Dl@413C}gNBS?hUdkl z(^m2`{V1^t;^iH7IJBCB4-;-o*_whvgq_@MC3dD5>{k9Y^c#y7e{~>^5B(y9Eo~^p zz*t46at7j=OR>f|&bciOJc2$>DM*_NrA^tHU!flE8BNGUq^TJ^cP9p~Nxq}ayc4OsEh%l8&#?{5-qd6^kvmuK zvSC!Vef%4>ssX{y_&ZuoG6NcPqmEhqk<2Gq;*j0HfK{;TulFGAQ!7Ry7Up0!Wx7Kr zuO1ceXMwuR3t~E=7pW|j{ z^XS__nPWWA=`)cn&9rVHE#c>T=>7J8r*{}lXh~20w1~3TUSSYSY@g`g#M;6cAcz` ze1#I)%2J?u5vk;M;Z}WP^K@7j9*kIfy^nvTd|ahtk2q;<lh$OM;F+!kQ4E*yjHZJayA z-;;&s+#U01lf8s9c?M(sb>Kp~H(_)5Gt9I;Orvk0J4%M}FlTCiA?+Fj9$t3hbMW`h zaQxtNFqvx)r^k1^=f{UNWJ`3eq@4glTp`FrpM-sC1G zaZgCQrUpbwopZc&QRZ$hINaaZ8=a@-BWX{HKZ#H=+p|rzho^6y_B6mwl?1OhX44 zIEswpQ+CA79O}cISsE-lf}YlZ86%b<6Uxvr zAb=4(6yarAHU!NF?{1D)U`;S|5pw9LBh_AWaj4?SUURJuK(XWQH=M;rpcgiKzT#O+ zNSZUTc(#BGkdPzG3rOpd_zPSmC3}3r?u6tN0o=wyo`%ff z+1qS)9{uYZu&!Nj1=tL&wfcY^a2>*K4IRU5Zsecn z^a?xA=1MkM?b#GL%mXGlQerEP385;bf0*UFCQ#sQ?Ge5k1%4;3#$_B_GbKNKnyy~7 z*^Da{^A_{u& z{mpt-Wz>Te<*Lyls0A;QxZ)M}3C!Y1hS&3k78``c1s>VCJ_OsGP6M_aSVJHQrYrps zp_}7J&t{8eX+8IW0ouxEve8ze&y_nSSTNXD;Y*q}9$(CZzF;@bhYIKwQeQS}kI-oY zg%CRxyw&-uAxN~=(Gytyz+Akkn|)3_*@I{x_2h;QE%c;haSM9~(%cMn^yNArpQSG& z1gW*YsPU`RL>wtmlL8R1bq&W>Q*{I~_`mB%HwH{w=*JR-Uz+rz+Tu5$NNKfoxv)Ax z#GRrsq5)j`KS9B#s75EK#>7p{N|eon>}SSEw@i2k-8HEi7}#XaoUhJ5D9OF;45caQv3;U+J=_(-HTyaua=Ir z_GU<rf47Nhg6YWSA3YzW`3ZMDlXfc)_*}4q4DEQ1g@19xRiy-QR-a8tsvr zKs2SN-6x6Mw?!{!GjVeIaV$-(@7l3$HN&BpW0FRhy-%iSfl$HUVKdir!q%~8)eYsi z&QtFmU4bXA2F*#Ou!5f@$a|sP9t<7YhW#Z&o8*rQLltPTf4MR|6Vk6CFBc0h%92qC zoW-(LlAeyY>Sb|b)N>tghtA_Lj;KNm#hp`!+vA z1kmY=Gu9J$!gPdB0$BH0VpT)?D6U^{^-Swmdec#p?kX+I5Q zYZ)VpXbFm|b0YxMDUvMavp>|i5lnw4tQ>{y$9Z^uHPt?RBlfzfJ#s$ep-;sn!`}x* z2ijhu3X}V*b$jQ_5R>CG?<+un8ouIEA70VHn`Vr*_{^((#vdm__T2ff;7uSE;hm)Q zu7Z~%$cSj$XO45H_u}4Tg>LMS<5nMVih_qzhh~dsXCHaS3xjvVZR8LLna|Nt3>tr= z6DEUhe~Nv;(g@$<&{md#5?6U@b9JSxTxDwa*SDNM=&S8j^VKC7pZt5|+!cI@b;0K< zFByrYMCy9PUyTFNM<8wl2~0QE6!0;yQyY-Ya=b8zD7SSQaUa<&{SRIOQeFoGF?e4C z%U%^vV+;k8U%!S__u@cDstdj@j}x%F7{11LEUkegX3nk{86W#KsLC{TnN)z7Gy^ek z=^7xl3Bflgyd2yDW|^E91ap$5(tLS^z!kZ|$he_a%3<}P9JEJX!9hi(u)he!ihMD- zFOc&`aKP}|$bYohc8)uAwS=2r8Y5C-)cHaP&$i~3Dd!u(5aL;s?}D+QTS2{ECBg%5 zw9^yPYp`Op4x_(N8Tml=1ccq(SXm+JrT{fk5uroz%EpVD`-9n7PjQ)}=I!?)IEDL} zwlazYW`d{Gcs?q~#5m)EZCoWDdR)u(s@CVwf*g<$N7k+}6C)1Z6+`^5Mc7>J*=lJ= zZ~W!5o_Kdb#t(M!Wd%q#iiR;0B@m^5HF8+x2eIvj_3FU&928n?622yZRrqpikIV&2 zR$E&INH0UrJ2vX9m*n_S`0`|r<-keySRvO(<+@U?<#PSGTz?_gC*`_Iu20ML*K&PU zt`&0qom~GQ*XQKATCUH_^{;aMyId>f`cJw3ORj6=x>m01Z7bIdxpt6ird%(OYqne&9ZUA; zB-e}N+C{FH%C)OpFPCesT(6XCo?NezYfrgeBiG(??IYK|a{ZxP`{7zlWl!+?{KarL z@rf!zKO*!dp<#sh2Y-tv5!ys(E+PJesF=`TLX!z`yC^Z1&|E?z2rVO2K#1fMjGGp7e=5nMO(pa&p(TVC5vm|GhtMWM_Ym4o=uSdk5E?_s zjR`Not|;zCXb_=+gnme9BB7py9w3Ax0>3wB2-D}IYQ47dWjJKc3E)^p`R0KAhev&CxrMXpIi&3-8*}>Ys!>qk(sl? zGv`d1(hSd+hdEPcPX`cwVD5C+oXG6C54i3Tc*d-$;hEv-^IX&B-8c1~qN(%4t~vKi zoi}gl1Fp!7$ebeA%sDf|xr%&`K0oZ+cYYsr%bhttcg}s`-2c?^ zfk$xL6ixsk`#oEBg5#K^C5mM`G4YSEm7ltA_2}x}bEO+y-Ftn1Y{{jdh7eq!iAaH( zv?L0I#-s!UA;s_th@bLYAg!Pj+?Ik$XmDZCC=^PXv`N1`^X>C9k`uR&uJu-zk3DzJ zw`cE}IWu!+X3xyo$^{ZnP#wBH$~R3Hf*V1jbSMh)Be}|OR9F*?42$~~NaIjvj4BOb&1WicQBawncW!Q8Tdb$co&p1-l zER99MfvDanRVxAVP%Q>y)k3Qr1>Ide7a-r=L7^JCJdfp?`H`UBs(3<(E?CvoxTLGF z+LdTe-V{qs-pk#%E1F!RQ5vq81G#c53YyhwP|nqdU<%dNP&qQ2Tg4(m zq<~!Epe~0%z|$5`02O(9#2Ag&P#Z|33*|qIT9PN)-i*dv)qs1*MYO8xP$3waXhvO) z)qeTdS_Er%7s@WpXc}g7X?SgfIz?_7leC3Kt5&PlC0*13>a|&pl#8`g*C)v3@nDTo z6ZyR)*s9s>{`Kx4S449Rx(B+=7Ok&VrGScU<|+kgRrMSmt*+_XW*ii&byRB5Xx7m- zf>qsJ`R>)GFISOVp&b^`4C+xWLJKSewh9|4<*by6bCFBRQVQ0VL)W2}mSma{k2RKC z6qVzYOeDNrg(TKhjn#2vS6AZ7LV-$pnP*uO#KGOGyG@Ea!@&L($MXg9>Of4IJ}Py%dv#BbK`EJTZARH_r3$O7A^&VvZ2L!(buIps z61JI3)*Zi8DoE(gx=pvVI(YKZqX7}M@V2FKV+3s->NTvlE_5-$j4fMs&#o_^pNsS*r5VxV_>TWQi%CcBLl}+t}@{Q zQz7XN{1AHXdal%nE_E@hXqB76!4lq5wEw7H$E%0t-#@Y2j_P3_q|N2^;TA@iCf*9x zt&Bo4kk>ITW5knbKx*W%OzcMN{c4W#t5yf2(Zs=Oy^uVDE9^$XAul0{u9ftTltK6H z;B?4!Z3RvlY7^ra`DF?fhCQ|Mf}MZan?f|y8V*t1W?K#wgi)zn zu40BHl{6Ni?Z_MnHIplBuhd%2Ex9JF89x;(<)gkbT18Y}j#8;(j+Ad4cuFx$g7yrI zNIH$Dj(;pys>B?9Bh_-$7@Y_Tc1Fg+k{l}`+L^;xJRVCd`FORcE`7+(z0Ih$+#J-5 z;ti?RA`H*ca?yz+TFh<-@D^0A*^CD(tm!Jsf8(4eBli03AKX9vlh4n*5>s+q4?pRs z3-(}~G4twQ_V6nndt!6XLzlVmxywFr=XbB1>;EC~!ev(c$%kKe+dJj@*kvF2Wa0QD z!~b^K%C%bt9zXx*dYzp68}D)tHPBv8?#b7wFLdl-8t5lxz2$H|G(7X=>&|LB-?R%$ zTdu96?VM+JwoNa?ItvKmmfwyaTyoz5_bl^#GYDU<-Y(NN{W4>M9@Acf%GP_SX`6x) zH@VNW&qCFkzTR{!TyHvip$g74OxubkXcMMm@DOBfGHv~DH0@Jw#K#0vrgQeK#)w`g zSKFaIrfqyh+lptMy-f7%Q_&sw|G&TgW7_5Ih4fd^zmWbf(cebDpZ-4j1^N~G3@a(H|Re^e}VpE^gHh~_Ift`mGoase+~VO^n2;Qiv9ro zU!y-lzfS)(^lzd+MgKPXchUa<{bTe$L;p+kzeaza{`ctri2f7wSH9al&x`4=p}&!S zFa1~1AE5th^hfB|>A!~lP4uVe-$wr~`X8WwjQ(fne~JFr=+D#t9{nHDe}ew9_qhB& zm;QP5Uq*jD{Y&U?p}&j%b@Yemm+2p%KS_V?k6b!mq5oC-U!#A5{$JDo2K{f+pQrzA z`ro1d5dD+%zeoQE^cU#=6MdHp^g&kb@4+Cpe0ifJ)6O98X7UH?xf(ienE_&~t(P!v zRVx@PugJA9Tf(?KRvL$z8;J@Ym8Apk3zoT$G|^IwifKAxu|hKXx>7*>LQb4(G-$(L~p-4RXPSYoXoC8VfUoNm-@VV<+kx zH`r`b$i>qLAjLdnQnK?qJ8y2tR3lOK>(ztMxf)E=ynZ zf4pAu-fWCm>-(u)+fy->y>u{4{?x8LshEb$W~^UdX-a0hDVrT;zj?JOnt~ZN`-)~? z!R#A0yHo6DTV~NgCtwB4@T-B<{niAH2=5Hm2xQ)jx4^avJO7h-o>smmotiPwh1OQ^ zszH&GC7S>ym~~e-u#B>ZSvK8^TKs;A7HML)h-vYYq-WvVvVeeVUjy0OFwq4QKpKxsc^Xa-?CVS>Odte^4k2<=nlc%pXf$ z`;)d~E*NX$*^7K5?03#4-=hA3eBc$A-f zHI~b2^65CFY#QG<`PMuQ-w65EJq=$k`FhDGIzsx=_Hrfp2Fds0G!yQX?>d&t4NsG9 zKl$E3zEjoPG}C?a)9}?8-&@Ids`{8C-!%EUPVpRr%J*nGo8`=CeOJApN^F^?$A${r~-#j&aEwfjk-aJsw<$XaoXk!`nj zwzr9$rLeDsl~8Q>K@=fj-$;}n-4o?oc29CgX$6;+7S6QU>ZRkFqbSSC!|S z-f*~44(pZS5DSbsEOVO46;sbcIw7`D@}psXWHcOZVJF2*p43@=n?#LpOcLugq*ItE z7XVvBAvR$_G?UAwYz6E;(q^l`?U00fqH=^aWHV*Lsk+TKKZE=|U^vap_TG}K+_rqDv1 zPl&r@US0-svJ4J}lL^D_JSs(YRY6`z$Vk>zxX>R>=-1}z75CJW?Y5w{LFJ1d`>>&gB!MHmyrGOUj=D1% z3wK(zL!^%-#63|=oh8-gNvcJvN7#?MfL(U~INUDH*6g3l5H-0I8S38F5T@ZSl6e=h zdvDmN)Ufs1EJ`dVNlk4YfV!}Vs;vsU4A@*~i0GpkCS>>WX0t8b8y&>}s2x{B%*Ng#=2&T(LkJRfbA4&lnkJZekzudJrE)+bIO7} zbnK0U@k@Hb3nM5oiVR;5%#uZ*oQo1vo`2Hp_EQ?(wtQyTRU=LjTQ zGciXoELVneIA$T_V<~d2Q4-Ruk`7=k0};i~aNG;f%+7gq=J&)|c03)@f|+-?;rcZh zVI{Sbq{gFe5!-hXupj}^xQy{Aa0hIGO+Etw#eBKyhSb9r7O~_wBAine%66BaBNin+ z>9oac4M#0FSjX14@XiPWGol&mRFn`+-hFDJy-O;SD)IhGWSY#KO%;O!V-QB&b?JCFrCmkJT z8mFK;97`x`O~>2t%3;sC5vPp2Xa7Nd=YL@D7vy*DQTd(u7x`U)1r+e$ z8-q?Wd6WFkzDs@=?vUS^Y5ASHPk!g|SCl)=@qcM|jR1Ru=gd5Rx?|?-$(6Iuoo}Cf z&fK!ObLQF?F6~`tpTfV%v*yoUcxL}h`*i1g`_!_**=Njk&bH0IV5Yry{<(8_q{qJb ztg{f8ENi8gQV?RVI32kukSN|J5BCBWJKD^~%X+WHtzGBnK`gRAD%Txw@^|PIO9GPU z3>SI?@4`V`V0yjke7~vwXSom%Fd}_fq{S+2? z-S3#AykeEdCa=9zK8>xsB!cT9IQ#s>D&NZm7?n?Bk)MY}D!F9WS>zQ9zeF`CH@L); z{HL+V_pYV`Ve4mpa#l3xgV&RwP@0S}~;@R|5Smfnzq{uandy!WxY$E^Q zFG^@4uUL+kzYKLdf1eBgEb%7pcgX>B3D^CvM~J8Hcl;~y!btcm@oHkj{kmT!9w8ne z*8RkgSoamLC)WMN7P0O#P7>>W?ZxbA0)^+Lh%IzF+k*N+hEy8Nxgy8eEY zSl8LnN89*xJ^k;Ab=~~O#JWD-iFPgN>pHl6$u3yeyU!=qb?tS;x_-TxSl6j{5$k&N zK4M*WE)whd@|%fu9r=D@T`&GLv91fx5$pQzw}^F}_Xotfo-2Q-R-Q-KZM%qdefA>a zd9K%90UWrdZGZC;{%pLj(y`(?KzxGuw}|J7<--8sH(W2ilXw~NJ;W=B?<3azgU=EN z4F3-CD&i-I*AxE&7Rn{PO~mrKrQlv-`LICnmBdxze&R`DU8ld9Sl7GnAlCho4-nTV z|4HI;;yL0;;_ndONc<@AVd7_@UzYq$5xk>D(UHd&U1)$zvvfS7QsTqJ!^Bg>6U4eNcMI_}!>5Ul65mfe zLyY0U6y%2&y1&eP>H+W!{xKIWf6H5*U$M$BpdXS;<yt#v(sO`THoZSmoEt4KDF^;U|qnezs|Y&1WgESoo#<1F!tj zSmfsqIQg$oUa`s#$_*~@B>glN`QC9GZ07a(iG|i_#y$8W05zncMRuKUU4kXjd;OUK7~bo_GTx)j`E6CKHXkKK8;0w;T9(^f5zNCKe5X9 zy5P9{(^%x!PdSEdlvk|sgXs6<5-jPbvB*!o(*~Q}lvk|sqNmBF@@XvcgSWZxi1Lb6 z{(WBkr*T1;c$FdlY+%(#UrVg|<*mf3FUlWG7yfB!Mw5~R{iB&#HzpCN38nGUlXhT@_k~}U!EjZ{pDO7c#-r} ze>tC6^_Mlos=r)JtoqAlV%1-E6081l9kJ>!d1BRHD#WV4Oc1O7awDM!plR{iBe#Hzo1f>`yJKP6WE<*UT1zdS*#`pf^sTt&)D^_Kx+)nBeBR{iC7h*f{N zn^^Uij}oi?@_Ay_U;ctv^_K^UReyPeSoN3A=eYc-{vtNoB)_V^oJXws%PL~kUv?6! z{&J95^_SNZtNwB;vFa~(60835L1NWkP7tg9@?B!pUw%TY`peI(K>qQJs;`_!toq72 zV%1k(No+WOy@GfdaX;}2;$IN<2e+?sMJq9V31z@htHM;^V|yi06oF#3zW~LOf3__A8|PP7=SLc!5~#Pe{1o z{QXafdx;+*R((Y*G1&TG_*KNJuZ$B9GW>30)mQE(R(<8O#Hz1+nRt@&e@CqP%Fkk* zQ_@#`ay;RikZLl3W5nSK5jdw8RVuk`S* zc)04}H+uLs4}Z|ZpY!m%hadOwa#)^8xA*fryxPMTdw8pduk~=n!-qY5yNB=f@T`ab z%)<|P_(>1H;ODc?*X`kpJ$!}3)J8DQdpPv)eh=U1;afcXb`Rg?;dguZ9uI%W!yotX ztcT?1LfV&$`>= z-URnvxc9+*2=2phAAu7)xPJuqak&2jHwX7EI9$DF>gm6(o`V0}*I2PxqW{#lTw)!n zuny;PYdvGRe6=yY_JZ|2uUI?2X(P_pt-Y}4Vt(yaHP&Wfy5)yC!1kN+!Af-JTMjFm` zZX0X5^L#wxm<`z@1~Js6hsH!HeAR|iI1R~Z-v~Yd(_ky3`7DMP*$>CU#Rfn4B%?fW zBv0i&ehuBnuOUBv)u_gBBHMpx5h_&kN@h_kE+AMtvBU`&wGeX>4bALWsnTlTka$dx z$Jt&fR@224)0|Nk&CqB#l-zDkZby>aE0fz&a=SgbEho1-lH2{s?W>d9VscwZZpGx4 zeYnvOUr#3YDHeQB8Pj(sx9)f-PO6J7CwH6=?WGXnv&v9Dt2}+q@WO-_NA5%S@nk3; zPlop6$q*k;hR$kL!kPJmGR~m=b~4m&Cqw;qGUT_DiFoQ8f>@Z}OUBrJI2prK`xxbi zlu3MYKrTVaN0qTOzOGE}uS(tTO5Hn~ZgSvG9=R_}eMFfEXPHnB^1Wrknu@NLy0_Nk z;z;yMOxC@8keTrEi%e%=2NC1r0i6DGZ=#q-iDQYo9(g@RLz-P4Q@#|g=e z-mWCn^aojUfeu{n(4r_ zRx?E5%2abcIh_oPk^eOsDxrnC0Mpe1tnppWsIKn>|Jy!bn&? zdz2Zkl|80xPb4eQbIF!JIqDo1(r2yXaXaQlKZ4WYc4EoH-C<(Y36DTaQhE?N%$y<* z(}&1y!uDLXy_2KWVPUDG-8OiizEx*tuxDnlXJ)WxX0Ucf3Ckgz1dL{9M5EaOU^Fw~ z89m+E0JX;?jqJo`@eKCNEETq<)05J)R$(UsafJywGfNH6%u+qY{d6Xt+QjUn`st>$ z|IKEpe7ly`mHn^zvh&L&W`;sa=3uF5paj?{ncQIVwP>1|ohL3maa%MS)DNEtsMTEgl9Lt=9W#E5gRU0jn?BqAC(5VXh&2Z?U-3}#t> zb9{;U4HB}(H%LsI-XKZVEi*Bt6|w$_#JU3bUAif=3JJ{xNp55XIX0vK99vM3`;_Sf zz?97dA~lvEFl!|Nl$3dd1X;TX35*RQfRwg`ATVVDAq#!m2T3Rv%dOFa429MXGBj)E zAfeE{K|)9yHb|(b{FFrl&|OnVOc^AklnsL{F=;&%PK*(#)q+G|k-35-NE(9FpJ%o} zD6zeQ7+6CEF^WZH@h!1efbg`Xfj+3XV%NbVrz{kBA#O+z{hp{+i8^+?4Wf=77?t^vQq`y=bnEgaOLvf~JEXi4iabK?E z7qcvWs~#5JN9tkGew`i``B{2szoQR}?n88ImnN~Skb>5vLJC`33KpNjh{BR#w4PwY zGG-If6qh5hkV6(Rl#phig@iN-eR_rk*x5v|Ok!!reNG=kHM|oO60-;~DanXL5GNrZ zZ2`gZOM=lN(+4gnv3a0aj2+nfjFp2lB}tnsHhD1+pq2rAlK?Tcwg48H2eO;M{|-5| B){_7L diff --git a/concoct/output.py b/concoct/output.py index 2132a08..041bc84 100644 --- a/concoct/output.py +++ b/concoct/output.py @@ -21,7 +21,8 @@ class Output(object): PCA_FILE_BASE = None PCA_COMPONENTS_FILE_BASE = None FLOAT_FORMAT = '%1.8e' - + INT_FORMAT = '%d' + @classmethod def __init__(self,basename,args): """ @@ -44,6 +45,8 @@ def __init__(self,basename,args): self.ORIGINAL_FILE_BASE = self.CONCOCT_PATH + "original_data_gt{0}.csv" self.PCA_FILE_BASE = self.CONCOCT_PATH + \ "PCA_transformed_data_gt{0}.csv" + self.ASSIGN_FILE_BASE = self.CONCOCT_PATH + \ + "clustering_gt{0}.csv" self.PCA_COMPONENTS_FILE_BASE = self.CONCOCT_PATH + \ "PCA_components_data_gt{0}.csv" self.LOG_FILE_BASE = self.CONCOCT_PATH + 'log.txt' @@ -74,6 +77,16 @@ def write_pca(self, transform, threshold, index): ) logging.info('Wrote PCA transformed file.') + @classmethod + def write_assign(self, assign, threshold, index): + transform_df = p.DataFrame(assign, index=index) + transform_df.to_csv( + self.ASSIGN_FILE_BASE.format(threshold), + int_format=self.INT_FORMAT, + index_label="contig_id" + ) + logging.info('Wrote PCA transformed file.') + @classmethod def write_pca_components(self, components, threshold): From 914d728200b5e8c64f5ecff45a1e7640a9583410 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Sat, 4 Jun 2016 16:53:58 +0100 Subject: [PATCH 07/78] Plumbing --- bin/concoct | 18 ++++++++++--- concoct/processes.py | 60 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 concoct/processes.py diff --git a/bin/concoct b/bin/concoct index 65fec1b..2293c80 100755 --- a/bin/concoct +++ b/bin/concoct @@ -13,7 +13,10 @@ from concoct.parser import arguments from concoct.cluster import cluster from concoct.input import load_data from concoct.transform import perform_pca +from concoct.processes import prll_map +def vbgmm_fit_wrapper(args): + return vbgmm.fit(*args) def main(args): # Initialize output handling @@ -68,11 +71,13 @@ def main(args): assign = np.zeros(NC,dtype=np.int32) debug=False - nSplit=4 + nSplit=1 kmeans = KMeans(init='k-means++', n_clusters=nSplit, n_init=10) kmeans.fit(transform_filter) labels = kmeans.labels_ + fit_arguments = [] + l = 0 for s in range(nSplit): transform_S = np.copy(transform_filter[labels==s,],order='C') @@ -80,9 +85,14 @@ def main(args): NS=transform_S.shape[0] assign_S = np.zeros(NS,dtype=np.int32) + + fit_arguments.append([transform_S, assign_S, args.clusters, debug]) - vbgmm.fit(transform_S, assign_S, args.clusters, debug) - + prll_map(vbgmm_fit_wrapper, fit_arguments) + + for s in range(nSplit): + [transform_S, assign_S, args.clusters, debug] = fit_arguments[s] + map_S = np.where(labels==s) setS = sorted(list(set(assign_S))) @@ -95,7 +105,7 @@ def main(args): for m in np.nditer(map_S): assign[m] = mapS[assign_S[n]] n=n+1 - + Output.write_assign( assign, args.length_threshold, diff --git a/concoct/processes.py b/concoct/processes.py new file mode 100644 index 0000000..d822e01 --- /dev/null +++ b/concoct/processes.py @@ -0,0 +1,60 @@ +""" +Processes and parallelism +========================= + +The ``processes`` module provides some convenience functions +for using processes in python. + +Adapted from http://stackoverflow.com/a/16071616/287297 + +Example usage: + + print prll_map(lambda i: i * 2, [1, 2, 3, 4, 6, 7, 8], 32, verbose=True) + +Comments: + +"It spawns a predefined amount of workers and only iterates through the input list + if there exists an idle worker. I also enabled the "daemon" mode for the workers so + that KeyboardInterupt works as expected." + +Pitfalls: all the stdouts are sent back to the parent stdout, intertwined. + +Alternatively, use this fork of multiprocessing: https://github.com/uqfoundation/multiprocess +""" + +# Modules # +import multiprocessing +from tqdm import tqdm + +################################################################################ +def target_func(f, q_in, q_out): + while True: + i, x = q_in.get() + if i is None: break + q_out.put((i, f(x))) + +################################################################################ +def prll_map(func_to_apply, items, cpus=None, verbose=False): + # Number of cores # + if cpus is None: cpus = min(multiprocessing.cpu_count(), 32) + # Create queues # + q_in = multiprocessing.Queue(1) + q_out = multiprocessing.Queue() + # Process list # + new_proc = lambda t,a: multiprocessing.Process(target=t, args=a) + processes = [new_proc(target_func, (func_to_apply, q_in, q_out)) for x in range(cpus)] + # Start them all # + for proc in processes: + proc.daemon = True + proc.start() + # Put and get # + sent = [q_in.put((i, x)) for i, x in enumerate(items)] + for x in range(cpus): q_in.put((None, None)) + res = [q_out.get() for x in range(len(sent))] + # Wait for them to finish # + if verbose: + for proc in tqdm(processes): proc.join() + else: + for proc in processes: proc.join() + # Return results # + return [x for i, x in sorted(res)] \ No newline at end of file From 1fc0636591734ba455f367673d261373efe6f270 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Sat, 4 Jun 2016 17:27:58 +0100 Subject: [PATCH 08/78] Fixed return vals --- bin/concoct | 12 ++++++------ c-concoct2/vbgmm.pyx | 14 ++++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/bin/concoct b/bin/concoct index 2293c80..23e9e6b 100755 --- a/bin/concoct +++ b/bin/concoct @@ -71,7 +71,7 @@ def main(args): assign = np.zeros(NC,dtype=np.int32) debug=False - nSplit=1 + nSplit=4 kmeans = KMeans(init='k-means++', n_clusters=nSplit, n_init=10) kmeans.fit(transform_filter) labels = kmeans.labels_ @@ -84,15 +84,15 @@ def main(args): NS=transform_S.shape[0] - assign_S = np.zeros(NS,dtype=np.int32) + #assign_S = np.zeros(NS,dtype=np.int32) - fit_arguments.append([transform_S, assign_S, args.clusters, debug]) + fit_arguments.append([transform_S, args.clusters, debug]) - prll_map(vbgmm_fit_wrapper, fit_arguments) + assigns = prll_map(vbgmm_fit_wrapper, fit_arguments) for s in range(nSplit): - [transform_S, assign_S, args.clusters, debug] = fit_arguments[s] - + #[transform_S, assign_S, args.clusters, debug] = fit_arguments[s] + assign_S = assigns[s] map_S = np.where(labels==s) setS = sorted(list(set(assign_S))) diff --git a/c-concoct2/vbgmm.pyx b/c-concoct2/vbgmm.pyx index 92da1cf..4ca85d1 100644 --- a/c-concoct2/vbgmm.pyx +++ b/c-concoct2/vbgmm.pyx @@ -16,9 +16,9 @@ cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign @cython.boundscheck(False) @cython.wraparound(False) -def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, ndim=1, mode="c"] assign not None, nClusters, debug): +def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): """ - fit (xarray, assign, nK) + fit (xarray, assign, nK, debug) Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters @@ -28,12 +28,14 @@ def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, np.ndarray[int, nd param: assigns -- cluster assignments must have same number of rows as xarray """ - cdef int nN, nD, nK - + cdef int nN, nD, nK, nS + nN, nD = xarray.shape[0], xarray.shape[1] nK = nClusters - + + cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) + c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) - return None + return assign From 7de24b1c4945d6b06937e302ecaff6491d5b1715 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Thu, 27 Oct 2016 20:09:01 +0100 Subject: [PATCH 09/78] Added testing code --- c-concoct2/test_vbgmm_fit.c | 180 ++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 c-concoct2/test_vbgmm_fit.c diff --git a/c-concoct2/test_vbgmm_fit.c b/c-concoct2/test_vbgmm_fit.c new file mode 100644 index 0000000..7929c18 --- /dev/null +++ b/c-concoct2/test_vbgmm_fit.c @@ -0,0 +1,180 @@ +/*System includes*/ +#include +#include +#include +#include +#include +#include + +/*GSL includes*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*User includes*/ +#include "c_vbgmm_fit.h" + +void readInputData(const char *szFile, t_Data *ptData); + +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign); + +int main() +{ + t_Data tData; + int *anAssign = NULL; + int i = 0, j = 0, nN = -1, nD = -1; + double* adX = NULL; + const gsl_rng_type * T; + gsl_rng * r; + + gsl_rng_env_setup(); + + T = gsl_rng_default; + r = gsl_rng_alloc (T); + + + readInputData("PCA_transformed_data_gt1000.csv", &tData); + + nN = tData.nN; + nD = tData.nD; + + adX = (double *) malloc(sizeof(nN*nD*sizeof(double))); + anAssign = (int *) malloc(nN*sizeof(int)); + for(i = 0; i < nN; i++){ + anAssign[i] = gsl_rng_uniform_int (r, 20); + for(j = 0; j < nD; j++){ + adX[i*nD + j] = tData.aadX[i][j]; + } + } + + c_vbgmm_fit (adX, nN, nD, 20, anAssign, FALSE, TRUE); + for(i = 0; i < nN; i++){ + printf("%d,%d\n",i,anAssign[i]); + } + free(adX); + free(anAssign); + return 0; +} + +void readInputData(const char *szFile, t_Data *ptData) +{ + double **aadX = NULL; + int i = 0, j = 0, nD = 0, nN = 0; + char *szLine = (char *) malloc(sizeof(char)*MAX_LINE_LENGTH); + FILE* ifp = NULL; + + if(!szLine) + goto memoryError; + + ifp = fopen(szFile, "r"); + + if(ifp){ + char* szTok = NULL; + char* pcError = NULL; + + if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) + goto formatError; + + szTok = strtok(szLine, DELIM); + /*count dimensions*/ + while(strtok(NULL, DELIM) != NULL){ + + nD++; + } + /*count data points*/ + while(fgets(szLine, MAX_LINE_LENGTH, ifp) != NULL){ + nN++; + } + fclose(ifp); + + /*reopen input file*/ + ifp = fopen(szFile, "r"); + + if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) + goto formatError; + + + /*allocate memory for dimension names*/ + //ptData->aszDimNames = (char **) malloc(nD*sizeof(char*)); + //if(!ptData->aszDimNames) + //goto memoryError; + + szTok = strtok(szLine, DELIM); + /*read in dim names*/ + for(i = 0; i < nD; i++){ + szTok = strtok(NULL, DELIM); + // ptData->aszDimNames[i] = strdup(szTok); + } + + /*allocate memory for data matrix*/ + aadX = (double **) malloc(nN*sizeof(double*)); + if(!aadX) + goto memoryError; + for(i = 0; i < nN; i++){ + aadX[i] = (double *) malloc(nD*sizeof(double)); + if(!aadX[i]) + goto memoryError; + } + + /*read in input data*/ + //ptData->aszSampleNames = (char **) malloc(nN*sizeof(char*)); + //if(!ptData->aszSampleNames) + //goto memoryError; + + for(i = 0; i < nN; i++){ + + if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) + goto formatError; + + szTok = strtok(szLine, DELIM); + // ptData->aszSampleNames[i] = strdup(szTok); + for(j = 0; j < nD; j++){ + szTok = strtok(NULL, DELIM); + + aadX[i][j] = strtod(szTok,&pcError); + + if(*pcError != '\0'){ + goto formatError; + } + } + } + } + else{ + fprintf(stderr, "Failed to open abundance data file %s aborting\n", szFile); + fflush(stderr); + exit(EXIT_FAILURE); + } + + free(szLine); + ptData->nD = nD; + ptData->nN = nN; + ptData->aadX = aadX; + return; + + memoryError: + fprintf(stderr, "Failed allocating memory in readInputData\n"); + fflush(stderr); + exit(EXIT_FAILURE); + + formatError: + fprintf(stderr, "Incorrectly formatted abundance data file\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} \ No newline at end of file From 2b4d959bbe12b710901d78d472b4a3f54f5de283 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Fri, 28 Oct 2016 21:05:38 +0100 Subject: [PATCH 10/78] Allow initi --- c-concoct2/c_vbgmm_fit.c | 56 ++++++++++++++++++++++++++++++++++------ c-concoct2/c_vbgmm_fit.h | 4 ++- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index fc64114..1fe6771 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -35,14 +35,15 @@ /*User includes*/ #include "c_vbgmm_fit.h" -void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug) +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign) { - driver(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug); + driver(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign); return; } -int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug) +int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, + int nMaxIter, double dEpsilon, int debug, int bAssign) { t_Params tParams; t_Data tData; @@ -65,7 +66,7 @@ int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned lon tParams.nMaxIter = nMaxIter; tParams.dEpsilon = dEpsilon; tParams.lSeed = lSeed; - + printf("Generate input data\n"); generateInputData(adX, nN, nD, &tData); setVBParams(&tVBParams, &tData); @@ -90,6 +91,18 @@ int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned lon ptBestCluster->szCOutFile = NULL; } + if(bAssign > 0){ + ptBestCluster->anMaxZ = (int *) malloc(nN*sizeof(int)); + if(!ptBestCluster->anMaxZ){ + goto memoryError; + } + + for(i = 0; i < nN; i++){ + ptBestCluster->anMaxZ[i] = anAssign[i]; + } + } + + printf("Run threads\n"); runRThreads((void *) &ptBestCluster); compressCluster(ptBestCluster); @@ -112,6 +125,11 @@ int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned lon gsl_matrix_free(tVBParams.ptInvW0); return EXIT_SUCCESS; + + memoryError: + fprintf(stderr, "Failed allocating memory in driver\n"); + fflush(stderr); + exit(EXIT_FAILURE); } @@ -360,15 +378,26 @@ void* fitEM(void *pvCluster) t_Cluster *ptCluster = (t_Cluster *) pvCluster; gsl_rng *ptGSLRNG = NULL; const gsl_rng_type *ptGSLRNGType = NULL; - + int i = 0, k = 0; /*initialise GSL RNG*/ ptGSLRNGType = gsl_rng_default; ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); gsl_rng_set (ptGSLRNG, ptCluster->lSeed); - initKMeans(ptGSLRNG, ptCluster, ptCluster->ptData); - + if(ptCluster->bAssign == FALSE){ + initKMeans(ptGSLRNG, ptCluster, ptCluster->ptData); + } + else{ + for(i = 0; i < ptCluster->nN; i++){ + for(k = 0; k < ptCluster->nK; k++){ + ptCluster->aadZ[i][k] = 0.0; + } + ptCluster->aadZ[i][ptCluster->anMaxZ[i]] = 1.0; + } + performMStep(ptCluster, ptCluster->ptData); + } + gmmTrainVB(ptCluster, ptCluster->ptData); gsl_rng_free(ptGSLRNG); @@ -386,6 +415,7 @@ void* runRThreads(void *pvpDCluster) int iret[N_RTHREADS]; int r = 0, nBestR = -1; char *szCOutFile = NULL; + int i = 0; aptCluster = (t_Cluster **) malloc(N_RTHREADS*sizeof(t_Cluster*)); if(!aptCluster) goto memoryError; @@ -399,8 +429,16 @@ void* runRThreads(void *pvpDCluster) aptCluster[r] = (t_Cluster *) malloc(sizeof(t_Cluster)); - allocateCluster(aptCluster[r],ptDCluster->nN,ptDCluster->nK,ptDCluster->nD,ptDCluster->ptData,ptDCluster->lSeed + r*R_PRIME,ptDCluster->nMaxIter,ptDCluster->dEpsilon,szCOutFile); + allocateCluster(aptCluster[r],ptDCluster->nN,ptDCluster->nK,ptDCluster->nD,ptDCluster->ptData, + ptDCluster->lSeed + r*R_PRIME,ptDCluster->nMaxIter,ptDCluster->dEpsilon,szCOutFile); aptCluster[r]->ptVBParams = ptDCluster->ptVBParams; + aptCluster[r]->bAssign = ptDCluster->bAssign; + if(ptDCluster->bAssign > 0){ + for(i = 0; i < ptDCluster->nN; i++){ + aptCluster[r]->anMaxZ[i] = ptDCluster->anMaxZ[i]; + } + } + aptCluster[r]->nThread = r; iret[r] = pthread_create(&atRestarts[r], NULL, fitEM, (void*) aptCluster[r]); } @@ -409,6 +447,8 @@ void* runRThreads(void *pvpDCluster) pthread_join(atRestarts[r], NULL); } + printf("Free up memory associated with input\n"); + fflush(stdout); /*free up memory associated with input cluster*/ free(ptDCluster); diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index 876b2b2..cea1fee 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -88,6 +88,8 @@ typedef struct s_Cluster int *anMaxZ; /*frequencies for each cluster*/ int *anW; + /*whether initial assignments provided*/ + int bAssign; } t_Cluster; @@ -118,7 +120,7 @@ typedef struct s_Cluster #define DEF_SEED 1l /*user defines*/ -int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug); +int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug, int bAssign); void generateInputData(double *adX, int nN, int nD, t_Data *ptData); From 018b846ab9ac998c01ac8a47e2db2516ad926c79 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Fri, 28 Oct 2016 21:08:36 +0100 Subject: [PATCH 11/78] Allow initi --- c-concoct2/Makefile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 c-concoct2/Makefile diff --git a/c-concoct2/Makefile b/c-concoct2/Makefile new file mode 100644 index 0000000..134825f --- /dev/null +++ b/c-concoct2/Makefile @@ -0,0 +1,16 @@ +CC = gcc +CFLAGS = -g -I/usr/local/include/ +EFLAGS = +EFILE = test_vbgmmfit +LIBS = -lm -lgsl -lgslcblas -L/usr/local/lib +OBJS = c_vbgmm_fit.o test_vbgmm_fit.o + +$(EFILE) : $(OBJS) + @echo "linking..." + $(CC) $(EFLAGS) -o $(EFILE) $(OBJS) $(LIBS) + +$(OBJS) : c_vbgmm_fit.c c_vbgmm_fit.h + $(CC) $(CFLAGS) -c $*.c + +clean: + rm -rf *.o test_vbgmmfit From b49ec43eb7f7dd99ace2160c50724a64b4657648 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Mon, 31 Oct 2016 10:42:10 +0000 Subject: [PATCH 12/78] Add OMP --- c-concoct2/Makefile | 4 +- c-concoct2/c_vbgmm_fit.c | 351 +++++++++++++++++++++++++++++++++++- c-concoct2/c_vbgmm_fit.h | 9 + c-concoct2/test_vbgmm_fit.c | 6 +- 4 files changed, 363 insertions(+), 7 deletions(-) diff --git a/c-concoct2/Makefile b/c-concoct2/Makefile index 134825f..7546d39 100644 --- a/c-concoct2/Makefile +++ b/c-concoct2/Makefile @@ -1,8 +1,8 @@ CC = gcc -CFLAGS = -g -I/usr/local/include/ +CFLAGS = -std=c99 -g -I/usr/local/include/ EFLAGS = EFILE = test_vbgmmfit -LIBS = -lm -lgsl -lgslcblas -L/usr/local/lib +LIBS = -lgomp -lpthread -lm -lgsl -lgslcblas -L/usr/local/lib OBJS = c_vbgmm_fit.o test_vbgmm_fit.o $(EFILE) : $(OBJS) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index 1fe6771..f9a7edf 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -1,5 +1,3 @@ - - /* C functions for running vbgmm from Cython*/ /*System includes*/ @@ -31,6 +29,7 @@ #include #include #include +#include /*User includes*/ #include "c_vbgmm_fit.h" @@ -42,6 +41,99 @@ void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, return; } +int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, + int nMaxIter, double dEpsilon, int debug, int bAssign) +{ + t_Params tParams; + t_Data tData; + gsl_rng *ptGSLRNG = NULL; + const gsl_rng_type *ptGSLRNGType = NULL; + t_VBParams tVBParams; + t_Cluster *ptCluster = NULL; + int i = 0, nK = nKStart; + char *szCOutFile = NULL; + + /*initialise GSL RNG*/ + gsl_rng_env_setup(); + + gsl_set_error_handler_off(); + + ptGSLRNGType = gsl_rng_default; + ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); + + /*set clusters params*/ + tParams.nKStart = nKStart; + tParams.nMaxIter = nMaxIter; + tParams.dEpsilon = dEpsilon; + tParams.lSeed = lSeed; + + printf("Generate input data\n"); + generateInputData(adX, nN, nD, &tData); + + setVBParams(&tVBParams, &tData); + + if(debug>0){ + szCOutFile = (char *) malloc(sizeof(char)*MAX_FILE_NAME_LENGTH); + + sprintf(szCOutFile,"%sr%d.csv",DEF_FILE_STUB,0); + } + + if(bAssign > 0){ + nK = 0; + + for(i = 0; i < nN; i++){ + if(anAssign[i] > nK){ + nK = anAssign[i]; + } + } + } + ptCluster = malloc(sizeof(t_Cluster)); + allocateCluster(ptCluster,nN,nK,nD,&tData,lSeed,nMaxIter,dEpsilon,szCOutFile); + + ptCluster->bAssign = bAssign; + if(bAssign > 0){ + for(i = 0; i < nN; i++){ + ptCluster->anMaxZ[i] = anAssign[i]; + } + } + + ptCluster->ptVBParams = &tVBParams; + + ptCluster->nThread = 0; + + fitEM_MP((void *) ptCluster); + + compressCluster(ptCluster); + + calcCovarMatrices(ptCluster,&tData); + + for(i = 0; i < nN; i++){ + anAssign[i] = ptCluster->anMaxZ[i]; + } + + if(debug>0){ + free(szCOutFile); + } + + /*free up memory in data object*/ + destroyData(&tData); + + /*free up best BIC clusters*/ + + destroyCluster(ptCluster); + free(ptCluster); + + gsl_rng_free(ptGSLRNG); + gsl_matrix_free(tVBParams.ptInvW0); + + return EXIT_SUCCESS; + + memoryError: + fprintf(stderr, "Failed allocating memory in driver\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug, int bAssign) { @@ -405,6 +497,38 @@ void* fitEM(void *pvCluster) return NULL; } +void* fitEM_MP(void *pvCluster) +{ + t_Cluster *ptCluster = (t_Cluster *) pvCluster; + gsl_rng *ptGSLRNG = NULL; + const gsl_rng_type *ptGSLRNGType = NULL; + int i = 0, k = 0; + /*initialise GSL RNG*/ + ptGSLRNGType = gsl_rng_default; + ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); + + gsl_rng_set (ptGSLRNG, ptCluster->lSeed); + + if(ptCluster->bAssign == FALSE){ + initKMeans(ptGSLRNG, ptCluster, ptCluster->ptData); + } + else{ + for(i = 0; i < ptCluster->nN; i++){ + for(k = 0; k < ptCluster->nK; k++){ + ptCluster->aadZ[i][k] = 0.0; + } + ptCluster->aadZ[i][ptCluster->anMaxZ[i]] = 1.0; + } + performMStepMP(ptCluster, ptCluster->ptData); + } + + gmmTrainVB(ptCluster, ptCluster->ptData); + + gsl_rng_free(ptGSLRNG); + + return NULL; +} + void* runRThreads(void *pvpDCluster) { t_Cluster **pptDCluster = (t_Cluster **) pvpDCluster; @@ -777,6 +901,229 @@ void performMStep(t_Cluster *ptCluster, t_Data *ptData){ exit(EXIT_FAILURE); } +double mstep(int k, double *adMu, double* adM, int nN, int nD, double** aadZ, double** aadX, double *pdBeta, double *pdNu, double *pdLDet, t_VBParams *ptVBParams, gsl_matrix *ptCovarK, gsl_matrix *ptSigmaMatrix) +{ + double dPi = 0.0, dBeta = 0.0, dLDet = 0.0, dNu = 0.0; + int i = 0, j = 0, l = 0, m = 0; + double dF = 0.0; + double **aadCovar = NULL; + double **aadInvWK = NULL; + + aadCovar = (double **) malloc(nD*sizeof(double*)); + if(!aadCovar) + goto memoryError; + + for(i = 0; i < nD; i++){ + aadCovar[i] = (double *) malloc(nD*sizeof(double)); + if(!aadCovar[i]) + goto memoryError; + } + + aadInvWK = (double **) malloc(nD*sizeof(double*)); + if(!aadInvWK) + goto memoryError; + + for(i = 0; i < nD; i++){ + aadInvWK[i] = (double *) malloc(nD*sizeof(double)); + if(!aadInvWK[i]) + goto memoryError; + } + + /*recompute mixture weights and means*/ + for(j = 0; j < nD; j++){ + adMu[j] = 0.0; + for(l = 0; l < nD; l++){ + aadCovar[j][l] = 0.0; + aadInvWK[j][l] = 0.0; + } + } + + for(i = 0; i < nN; i++){ + if(aadZ[i][k] > MIN_Z){ + dPi += aadZ[i][k]; + for(j = 0; j < nD; j++){ + adMu[j] += aadZ[i][k]*aadX[i][j]; + } + } + } + + /*normalise means*/ + if(dPi > MIN_PI){ + /*Equation 10.60*/ + dBeta = ptVBParams->dBeta0 + dPi; + + for(j = 0; j < nD; j++){ + /*Equation 10.61*/ + adM[j] = adMu[j]/dBeta; + adMu[j] /= dPi; + } + + dNu = ptVBParams->dNu0 + dPi; + + /*calculate covariance matrices*/ + for(i = 0; i < nN; i++){ + if(aadZ[i][k] > MIN_Z){ + double adDiff[nD]; + + for(j = 0; j < nD; j++){ + adDiff[j] = aadX[i][j] - adMu[j]; + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <=l ; m++){ + aadCovar[l][m] += aadZ[i][k]*adDiff[l]*adDiff[m]; + } + } + } + } + + for(l = 0; l < nD; l++){ + for(m = l + 1; m < nD; m++){ + aadCovar[l][m] = aadCovar[m][l]; + } + } + + /*save sample covariances for later use*/ + for(l = 0; l < nD; l++){ + for(m = 0; m < nD; m++){ + double dC = aadCovar[l][m] / dPi; + gsl_matrix_set(ptCovarK,l,m,dC); + } + } + + /*Now perform equation 10.62*/ + dF = (ptVBParams->dBeta0*dPi)/dBeta; + for(l = 0; l < nD; l++){ + for(m = 0; m <= l; m++){ + aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m) + aadCovar[l][m] + dF*adMu[l]*adMu[m]; + } + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l ; m++){ + aadCovar[l][m] /= dPi; + gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); + gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); + } + } + + + /*Implement Equation 10.65*/ + dLDet = ((double) nD)*log(2.0); + + for(l = 0; l < nD; l++){ + double dX = 0.5*(dNu - (double) l); + dLDet += gsl_sf_psi (dX); + } + + dLDet -= decomposeMatrix(ptSigmaMatrix,nD); + } + else{ + /*Equation 10.60*/ + dPi = 0.0; + + dBeta = ptVBParams->dBeta0; + + for(j = 0; j < nD; j++){ + /*Equation 10.61*/ + adM[j] = 0.0; + adMu[j] = 0.0; + } + + dNu = ptVBParams->dNu0; + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l; m++){ + aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); + } + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l ; m++){ + aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); + } + } + + for(l = 0; l < nD; l++){ + for(m = 0; m <= l ; m++){ + gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); + gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); + } + } + + /*Implement Equation 10.65*/ + dLDet = ((double) nD)*log(2.0); + + for(l = 0; l < nD; l++){ + double dX = 0.5*(dNu - (double) l); + dLDet += gsl_sf_psi (dX); + } + + dLDet -= decomposeMatrix(ptSigmaMatrix,nD); + } + + /*free up memory*/ + for(i = 0; i < nD; i++){ + free(aadCovar[i]); + free(aadInvWK[i]); + } + + free(aadCovar); + free(aadInvWK); + + (*pdBeta) = dBeta; + (*pdNu) = dNu; + (*pdLDet) = dLDet; + return dPi; + + memoryError: + fprintf(stderr, "Failed allocating memory in mstep\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + +void performMStepMP(t_Cluster *ptCluster, t_Data *ptData){ + int k = 0; + int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; + double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; + double **aadCovar = NULL, **aadInvWK = NULL; + t_VBParams *ptVBParams = ptCluster->ptVBParams; + omp_set_num_threads(64); + /*perform M step*/ +#pragma omp parallel for + for(int k = 0; k < nK; k++){ /*loop components*/ + double dPi = 0.0, dBeta = 0.0, dNu = 0.0, dLDet = 0.0; + + dPi = mstep(k, ptCluster->aadMu[k],ptCluster->aadM[k], nN, nD, aadZ, aadX, &dBeta, &dNu, &dLDet, ptVBParams, ptCluster->aptCovar[k], ptCluster->aptSigma[k]); + + ptCluster->adPi[k] = dPi; + ptCluster->adBeta[k] = dBeta; + ptCluster->adNu[k] = dNu; + ptCluster->adLDet[k] = dLDet; + } + + /*Normalise pi*/ + + if(1){ + double dNP = 0.0; + + for(k = 0; k < nK; k++){ + dNP += ptCluster->adPi[k]; + } + + for(k = 0; k < nK; k++){ + ptCluster->adPi[k] /= dNP; + } + } + + return; + + memoryError: + fprintf(stderr, "Failed allocating memory in performMStep\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} + void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData) { /*very simple initialisation assign each data point to random cluster*/ diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index cea1fee..3cfe63e 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -120,6 +120,9 @@ typedef struct s_Cluster #define DEF_SEED 1l /*user defines*/ +int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, + int nMaxIter, double dEpsilon, int debug, int bAssign); + int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug, int bAssign); void generateInputData(double *adX, int nN, int nD, t_Data *ptData); @@ -132,6 +135,8 @@ void setVBParams(t_VBParams *ptVBParams, t_Data *ptData); void* fitEM(void *pvCluster); +void* fitEM_MP(void *pvCluster); + void* runRThreads(void *pvpDCluster); void allocateCluster(t_Cluster *ptCluster, int nN, int nK, int nD, t_Data *ptData, long lSeed, int nMaxIter, double dEpsilon, char *szCOutFile); @@ -144,6 +149,8 @@ double decomposeMatrix(gsl_matrix *ptSigmaMatrix, int nD); void performMStep(t_Cluster *ptCluster, t_Data *ptData); +void performMStepMP(t_Cluster *ptCluster, t_Data *ptData); + void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData); double calcVBL(t_Cluster* ptCluster); @@ -162,4 +169,6 @@ void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData); double calcDist(double* adX, double *adMu, int nD); +void readInputData(const char *szFile, t_Data *ptData); + #endif diff --git a/c-concoct2/test_vbgmm_fit.c b/c-concoct2/test_vbgmm_fit.c index 7929c18..0c040f4 100644 --- a/c-concoct2/test_vbgmm_fit.c +++ b/c-concoct2/test_vbgmm_fit.c @@ -55,7 +55,7 @@ int main() nN = tData.nN; nD = tData.nD; - adX = (double *) malloc(sizeof(nN*nD*sizeof(double))); + adX = (double *) malloc(nN*nD*sizeof(double)); anAssign = (int *) malloc(nN*sizeof(int)); for(i = 0; i < nN; i++){ anAssign[i] = gsl_rng_uniform_int (r, 20); @@ -64,7 +64,7 @@ int main() } } - c_vbgmm_fit (adX, nN, nD, 20, anAssign, FALSE, TRUE); + c_vbgmm_fit (adX, nN, nD, 400, anAssign, FALSE, FALSE); for(i = 0; i < nN; i++){ printf("%d,%d\n",i,anAssign[i]); } @@ -177,4 +177,4 @@ void readInputData(const char *szFile, t_Data *ptData) fprintf(stderr, "Incorrectly formatted abundance data file\n"); fflush(stderr); exit(EXIT_FAILURE); -} \ No newline at end of file +} From 1cbead67f027ddf0940efa41e9dec52f9f59662d Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Mon, 31 Oct 2016 10:52:26 +0000 Subject: [PATCH 13/78] Calc threads --- c-concoct2/c_vbgmm_fit.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index f9a7edf..f191c2c 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -36,7 +36,7 @@ void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign) { - driver(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign); + driverMP(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign); return; } @@ -50,7 +50,7 @@ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned l const gsl_rng_type *ptGSLRNGType = NULL; t_VBParams tVBParams; t_Cluster *ptCluster = NULL; - int i = 0, nK = nKStart; + int i = 0, nK = nKStart, nNthreads = 0; char *szCOutFile = NULL; /*initialise GSL RNG*/ @@ -61,6 +61,11 @@ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned l ptGSLRNGType = gsl_rng_default; ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); + /*set OMP thread number*/ + nNthreads = omp_get_max_threads(); + omp_set_num_threads(nNthreads); + printf("Setting %d OMP threads\n",nNthreads); + /*set clusters params*/ tParams.nKStart = nKStart; tParams.nMaxIter = nMaxIter; @@ -1088,7 +1093,7 @@ void performMStepMP(t_Cluster *ptCluster, t_Data *ptData){ double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; double **aadCovar = NULL, **aadInvWK = NULL; t_VBParams *ptVBParams = ptCluster->ptVBParams; - omp_set_num_threads(64); + /*perform M step*/ #pragma omp parallel for for(int k = 0; k < nK; k++){ /*loop components*/ From fecd0f9d5a674bb86ba23faafa95debbdfa49b06 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Mon, 31 Oct 2016 10:59:00 +0000 Subject: [PATCH 14/78] MP --- c-concoct2/c_vbgmm_fit.c | 66 ++++++++++++++++++++++++++++++++++++++++ c-concoct2/c_vbgmm_fit.h | 2 ++ 2 files changed, 68 insertions(+) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index f191c2c..84e1537 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -1444,6 +1444,72 @@ void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData) return; } +void gmmTrainVB_MP(t_Cluster *ptCluster, t_Data *ptData) +{ + int i = 0, k = 0,nIter = 0; + int nN = ptData->nN, nK = ptCluster->nK; + /*change in log-likelihood*/ + double dLastVBL = 0.0, dDelta = DBL_MAX; + double **aadZ = ptCluster->aadZ; + int nMaxIter = ptCluster->nMaxIter; + double dEpsilon = ptCluster->dEpsilon; + FILE *ofp = NULL; + + if(ptCluster->szCOutFile){ + ofp = fopen(ptCluster->szCOutFile,"w"); + if(!ofp){ + fprintf(stderr, "Failed to open file %s in gmmTrainVB\n",ptCluster->szCOutFile); + fflush(stderr); + } + } + + /*calculate data likelihood*/ + calcZ(ptCluster,ptData); + ptCluster->dVBL = calcVBL(ptCluster); + + while(nIter < nMaxIter && dDelta > dEpsilon){ + + /*update parameter estimates*/ + performMStepMP(ptCluster, ptData); + + /*calculate responsibilities*/ + calcZ(ptCluster,ptData); + + dLastVBL = ptCluster->dVBL; + ptCluster->dVBL = calcVBL(ptCluster); + dDelta = fabs(ptCluster->dVBL - dLastVBL); + + if(ofp){ + fprintf(ofp,"%d,%f,%f,",nIter, ptCluster->dVBL, dDelta); + for(k = 0; k < nK-1; k++){ + fprintf(ofp,"%f,",ptCluster->adPi[k]); + } + fprintf(ofp,"%f\n",ptCluster->adPi[nK - 1]); + fflush(ofp); + } + nIter++; + } + + if(ofp){ + fclose(ofp); + } + + /*assign to best clusters*/ + for(i = 0; i < nN; i++){ + double dMaxZ = aadZ[i][0]; + int nMaxK = 0; + for(k = 1; k < nK; k++){ + if(aadZ[i][k] > dMaxZ){ + nMaxK = k; + dMaxZ = aadZ[i][k]; + } + } + ptCluster->anMaxZ[i] = nMaxK; + } + + return; +} + void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData) { int i = 0, j = 0, k = 0, l = 0, m = 0; diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index 3cfe63e..a4d17ce 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -157,6 +157,8 @@ double calcVBL(t_Cluster* ptCluster); void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData); +void gmmTrainVB_MP(t_Cluster *ptCluster, t_Data *ptData); + double dLogWishartB(gsl_matrix *ptInvW, int nD, double dNu, int bInv); void updateMeans(t_Cluster *ptCluster, t_Data *ptData); From b7a6a8d294533901e2fba084084c4a71a78f5adf Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Mon, 31 Oct 2016 11:51:38 +0000 Subject: [PATCH 15/78] MP --- c-concoct2/c_vbgmm_fit.c | 73 ++++++++++++++++++++++++++++++++++++++-- c-concoct2/c_vbgmm_fit.h | 2 ++ 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index 84e1537..652602c 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -527,7 +527,7 @@ void* fitEM_MP(void *pvCluster) performMStepMP(ptCluster, ptCluster->ptData); } - gmmTrainVB(ptCluster, ptCluster->ptData); + gmmTrainVB_MP(ptCluster, ptCluster->ptData); gsl_rng_free(ptGSLRNG); @@ -1378,6 +1378,75 @@ void calcZ(t_Cluster* ptCluster, t_Data *ptData){ return; } +void calcZ_MP(t_Cluster* ptCluster, t_Data *ptData){ + double **aadX = ptData->aadX, **aadZ = ptCluster->aadZ; + int nK = ptCluster->nK, nD = ptCluster->nD, nN = ptData->nN; + double dD = (double) nD; + double** aadM = ptCluster->aadM, *adPi = ptCluster->adPi; + +#pragma omp parallel for + for(int i = 0; i < nN; i++){ + double dMinDist = DBL_MAX; + double dTotalZ = 0.0; + double dNTotalZ = 0.0; + double adDist[nK]; + int k = 0, l = 0; + gsl_vector *ptDiff = gsl_vector_alloc(nD); + gsl_vector *ptRes = gsl_vector_alloc(nD); + + + for(k = 0; k < nK; k++){ + if(adPi[k] > 0.){ + /*set vector to data point*/ + for(l = 0; l < nD; l++){ + gsl_vector_set(ptDiff,l,aadX[i][l] - aadM[k][l]); + } + + gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptRes); + + gsl_blas_ddot (ptDiff, ptRes, &adDist[k]); + + adDist[k] *= ptCluster->adNu[k]; + + adDist[k] -= ptCluster->adLDet[k]; + + adDist[k] += dD/ptCluster->adBeta[k]; + + if(adDist[k] < dMinDist){ + dMinDist = adDist[k]; + } + } + } + + for(k = 0; k < nK; k++){ + if(adPi[k] > 0.){ + aadZ[i][k] = adPi[k]*exp(-0.5*(adDist[k]-dMinDist)); + dTotalZ += aadZ[i][k]; + } + else{ + aadZ[i][k] = 0.0; + } + } + + for(k = 0; k < nK; k++){ + double dF = aadZ[i][k] / dTotalZ; + if(dF < MIN_Z){ + aadZ[i][k] = 0.0; + } + dNTotalZ += aadZ[i][k]; + } + if(dNTotalZ > 0.){ + for(k = 0; k < nK; k++){ + aadZ[i][k] /= dNTotalZ; + } + } + gsl_vector_free(ptRes); + gsl_vector_free(ptDiff); + } + + return; +} + void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData) { int i = 0, k = 0,nIter = 0; @@ -1473,7 +1542,7 @@ void gmmTrainVB_MP(t_Cluster *ptCluster, t_Data *ptData) performMStepMP(ptCluster, ptData); /*calculate responsibilities*/ - calcZ(ptCluster,ptData); + calcZ_MP(ptCluster,ptData); dLastVBL = ptCluster->dVBL; ptCluster->dVBL = calcVBL(ptCluster); diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index a4d17ce..d732857 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -167,6 +167,8 @@ double dWishartExpectLogDet(gsl_matrix *ptW, double dNu, int nD); void calcZ(t_Cluster* ptCluster, t_Data *ptData); +void calcZ_MP(t_Cluster* ptCluster, t_Data *ptData); + void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData); double calcDist(double* adX, double *adMu, int nD); From fd82d40b7fabae7d4e3d2f31a7ab4452fecd71c3 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Mon, 31 Oct 2016 12:54:17 +0000 Subject: [PATCH 16/78] MP --- c-concoct2/c_vbgmm_fit.h | 1 - c-concoct2/test_vbgmm_fit.c | 64 +++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index d732857..87bbb1e 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -173,6 +173,5 @@ void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData); double calcDist(double* adX, double *adMu, int nD); -void readInputData(const char *szFile, t_Data *ptData); #endif diff --git a/c-concoct2/test_vbgmm_fit.c b/c-concoct2/test_vbgmm_fit.c index 0c040f4..80aecd9 100644 --- a/c-concoct2/test_vbgmm_fit.c +++ b/c-concoct2/test_vbgmm_fit.c @@ -35,11 +35,13 @@ void readInputData(const char *szFile, t_Data *ptData); void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign); +void readAssigns(const char *szFile, int *anAssign, int nN); + int main() { t_Data tData; int *anAssign = NULL; - int i = 0, j = 0, nN = -1, nD = -1; + int i = 0, j = 0, nN = -1, nD = -1, nK = 0; double* adX = NULL; const gsl_rng_type * T; gsl_rng * r; @@ -57,14 +59,21 @@ int main() adX = (double *) malloc(nN*nD*sizeof(double)); anAssign = (int *) malloc(nN*sizeof(int)); + + readAssigns("clustering_gt1000.csv", anAssign, nN); + for(i = 0; i < nN; i++){ - anAssign[i] = gsl_rng_uniform_int (r, 20); + if(anAssigns[i] > nK){ + nK = anAssigns[i]; + } for(j = 0; j < nD; j++){ adX[i*nD + j] = tData.aadX[i][j]; } } - c_vbgmm_fit (adX, nN, nD, 400, anAssign, FALSE, FALSE); + printf("Run c_vbgmm_fit with %d clusters\n",nK); + nK = nK + 1; + c_vbgmm_fit (adX, nN, nD, nK, anAssign, FALSE, TRUE); for(i = 0; i < nN; i++){ printf("%d,%d\n",i,anAssign[i]); } @@ -178,3 +187,52 @@ void readInputData(const char *szFile, t_Data *ptData) fflush(stderr); exit(EXIT_FAILURE); } + +void readAssigns(const char *szFile, int *anAssign, int nN) +{ + int i = 0; + char *szLine = (char *) malloc(sizeof(char)*MAX_LINE_LENGTH); + FILE* ifp = NULL; + + if(!szLine) + goto memoryError; + + ifp = fopen(szFile, "r"); + + if(ifp){ + char* szTok = NULL; + char* pcError = NULL; + + for(i = 0; i < nN; i++){ + if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) + goto formatError; + + szTok = strtok(szLine, DELIM); + + anAssign[i] = strtod(szTok,&pcError); + + if(*pcError != '\0'){ + goto formatError; + } + } + } + else{ + fprintf(stderr, "Failed to open abundance data file %s aborting\n", szFile); + fflush(stderr); + exit(EXIT_FAILURE); + } + + free(szLine); + + return; + + memoryError: + fprintf(stderr, "Failed allocating memory in readInputData\n"); + fflush(stderr); + exit(EXIT_FAILURE); + + formatError: + fprintf(stderr, "Incorrectly formatted abundance data file\n"); + fflush(stderr); + exit(EXIT_FAILURE); +} From a1b394899cafd3788ecbf85827254e4ead50569d Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Mon, 31 Oct 2016 12:57:24 +0000 Subject: [PATCH 17/78] MP --- c-concoct2/test_vbgmm_fit.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/c-concoct2/test_vbgmm_fit.c b/c-concoct2/test_vbgmm_fit.c index 80aecd9..8c4e4ad 100644 --- a/c-concoct2/test_vbgmm_fit.c +++ b/c-concoct2/test_vbgmm_fit.c @@ -203,12 +203,15 @@ void readAssigns(const char *szFile, int *anAssign, int nN) char* szTok = NULL; char* pcError = NULL; + if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) + goto formatError; + for(i = 0; i < nN; i++){ if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) goto formatError; szTok = strtok(szLine, DELIM); - + szTok = strtok(NULL, DELIM); anAssign[i] = strtod(szTok,&pcError); if(*pcError != '\0'){ From 97dba9d8ad9933559466d97143721e0b50828360 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Mon, 31 Oct 2016 20:26:50 +0000 Subject: [PATCH 18/78] MP --- c-concoct2/c_vbgmm_fit.c | 171 +++++++++++++++++++++++++++++++++++++-- c-concoct2/c_vbgmm_fit.h | 2 + 2 files changed, 167 insertions(+), 6 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index 652602c..f9072e5 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -64,15 +64,16 @@ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned l /*set OMP thread number*/ nNthreads = omp_get_max_threads(); omp_set_num_threads(nNthreads); - printf("Setting %d OMP threads\n",nNthreads); - + fprintf(stderr,"Setting %d OMP threads\n",nNthreads); + /*set clusters params*/ tParams.nKStart = nKStart; tParams.nMaxIter = nMaxIter; tParams.dEpsilon = dEpsilon; tParams.lSeed = lSeed; - printf("Generate input data\n"); + fprintf(stderr,"Generate input data\n"); + fflush(stderr); generateInputData(adX, nN, nD, &tData); setVBParams(&tVBParams, &tData); @@ -1312,6 +1313,162 @@ double calcVBL(t_Cluster* ptCluster) return dRet; } +double eqnA(int nD, gsl_matrix *ptCovarK, gsl_matrix *ptSigmaK, double *adMuK, double *adMK, double dLDetK, double dNuK, double logd2Pi, double dBetaK,double dNK) +{ + int l = 0; + gsl_matrix *ptRes = gsl_matrix_alloc(nD,nD); + gsl_vector *ptDiff = gsl_vector_alloc(nD); + double dT1 = 0.0, dT2 = 0.0, dF = 0.0; + gsl_vector *ptR = gsl_vector_alloc(nD); + double dD = (double) nD; + double dRet = 0.0; + + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptCovarK,ptSigmaK,0.0,ptRes); + + for(l = 0; l < nD; l++){ + dT1 += gsl_matrix_get(ptRes,l,l); + } + + for(l = 0; l < nD; l++){ + gsl_vector_set(ptDiff,l,adMuK[l] - adMK[l]); + } + + gsl_blas_dsymv (CblasLower, 1.0, ptSigmaK, ptDiff, 0.0, ptR); + + gsl_blas_ddot (ptDiff, ptR, &dT2); + + dF = dLDetK - dNuK*(dT1 + dT2) - dD*(logd2Pi + (1.0/dBetaK)); + + dRet = 0.5*dNK*dF; + + gsl_matrix_free(ptRes); + gsl_vector_free(ptDiff); + gsl_vector_free(ptR); + + return dRet; +} + +double eqnB(int nD, gsl_matrix *ptInvW0, t_matrix *ptSigmaK, double* adMK, double dBeta0, double d2Pi, double dLDetK, double dBetaK, double dNuK) +{ + int l = 0; + double dD = (double) nD; + gsl_matrix *ptRes = gsl_matrix_alloc(nD,nD); + gsl_vector *ptDiff = gsl_vector_alloc(nD); + gsl_vector *ptR = gsl_vector_alloc(nD); + double dT1 = 0.0, dT2 = 0.0, dF = 0.0; + double dRet = 0.0; + + gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptInvW0,ptSigmaK,0.0,ptRes); + + for(l = 0; l < nD; l++){ + dT1 += gsl_matrix_get(ptRes,l,l); + } + + for(l = 0; l < nD; l++){ + gsl_vector_set(ptDiff,l,adMK[l]); + } + + gsl_blas_dsymv (CblasLower, 1.0, ptSigmaK, ptDiff, 0.0, ptR); + + gsl_blas_ddot (ptDiff, ptR, &dT2); + + dF = dD*log(dBeta0/d2Pi) + dLDetK - ((dD*dBeta0)/dBetaK) - dBeta0*dNuK*dT2 - dNuK*dT1; + + dRet = 0.5*(dF + (dNu0 - dD - 1.0)*dLDetK); + + gsl_matrix_free(ptRes); + gsl_vector_free(ptDiff); + gsl_vector_free(ptR); + + return dRet; +} + + +double calcVBL_MP(t_Cluster* ptCluster) +{ + int nN = ptCluster->nN; + int nK = ptCluster->nK, nD = ptCluster->nD; + double dBishop1 = 0.0, dBishop2 = 0.0, dBishop3 = 0.0, dBishop4 = 0.0, dBishop5 = 0.0; /*Bishop equations 10.71...*/ + double dD = (double) nD; + double** aadMu = ptCluster->aadMu, **aadM = ptCluster->aadM, **aadZ = ptCluster->aadZ; + double* adBeta = ptCluster->adBeta, *adNu = ptCluster->adNu, *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; + double adNK[nK], adRet[nK]; + double d2Pi = 2.0*M_PI, logd2Pi = log(d2Pi), dBeta0 = ptCluster->ptVBParams->dBeta0, dNu0 = ptCluster->ptVBParams->dNu0, dRet = 0.0; + double dK = 0.0; + + for(k = 0; k < nK; k++){ + adNK[k] = 0.0; + } + + /*Equation 10.72*/ + for(i = 0; i < nN; i++){ + for(k = 0; k < nK; k++){ + adNK[k] += aadZ[i][k]; + if(adPi[k] > 0.0){ + dBishop2 += aadZ[i][k]*log(adPi[k]); + } + } + } + + + for(k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + dK++; + } + } + + /*Equation 10.71*/ +#pragma omp parallel for + for(int k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + adRet[k] = eqnA(nD, ptCluster->aptCovar[k], ptCluster->aptSigma[k], aadMu[k], aadM[k], adLDet[k], adNu[k], logd2Pi, adBeta[k],adNK[k]); + } + else{ + adRet[k] = 0.0; + } + } + + for(int k = 0; k < nK; k++){ + dBishop1 += adRet[k]; + } + + + /*Equation 10.74*/ +#pragma omp parallel for + for(int k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + adRet[k] = eqnB(nD, ptCluster->ptVBParams->ptInvW0, ptCluster->aptSigma[k], aadM[k], ptCluster->ptVBParams->dBeta0, d2Pi, adLDet[k], adBeta[k], adNu[k]) + } + } + + for(int k = 0; k < nK; k++){ + dBishop3 += adRet[k]; + } + + dBishop3 += dK*ptCluster->ptVBParams->dLogWishartB; + + /*Equation 10.75*/ + for(int i = 0; i < nN; i++){ + for(int k = 0; k < nK; k++){ + if(aadZ[i][k] > 0.0){ + dBishop4 += aadZ[i][k]*log(aadZ[i][k]); + } + } + } + + /*Equation 10.77*/ + for(int k = 0; k < nK; k++){ + if(adNK[k] > 0.0){ + dBishop5 += 0.5*adLDet[k] + 0.5*dD*log(adBeta[k]/d2Pi) - 0.5*dD - dWishartExpectLogDet(ptCluster->aptSigma[k], adNu[k], nD); + } + } + + dRet = dBishop1 + dBishop2 + dBishop3 - dBishop4 - dBishop5; + + return dRet; +} + + void calcZ(t_Cluster* ptCluster, t_Data *ptData){ double **aadX = ptData->aadX, **aadZ = ptCluster->aadZ; int i = 0, k = 0, l = 0; @@ -1533,8 +1690,8 @@ void gmmTrainVB_MP(t_Cluster *ptCluster, t_Data *ptData) } /*calculate data likelihood*/ - calcZ(ptCluster,ptData); - ptCluster->dVBL = calcVBL(ptCluster); + calcZ_MP(ptCluster,ptData); + ptCluster->dVBL = calcVBL_MP(ptCluster); while(nIter < nMaxIter && dDelta > dEpsilon){ @@ -1545,9 +1702,11 @@ void gmmTrainVB_MP(t_Cluster *ptCluster, t_Data *ptData) calcZ_MP(ptCluster,ptData); dLastVBL = ptCluster->dVBL; - ptCluster->dVBL = calcVBL(ptCluster); + ptCluster->dVBL = calcVBL_MP(ptCluster); dDelta = fabs(ptCluster->dVBL - dLastVBL); + fprintf(stderr,"%d,%f,%f\n",nIter, ptCluster->dVBL, dDelta); + fflush(stderr); if(ofp){ fprintf(ofp,"%d,%f,%f,",nIter, ptCluster->dVBL, dDelta); for(k = 0; k < nK-1; k++){ diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index 87bbb1e..ce946fc 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -155,6 +155,8 @@ void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData); double calcVBL(t_Cluster* ptCluster); +double calcVBL_MP(t_Cluster* ptCluster); + void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData); void gmmTrainVB_MP(t_Cluster *ptCluster, t_Data *ptData); From 6bf041e353e8b0949d8bacc646bf48257633d7e2 Mon Sep 17 00:00:00 2001 From: chrisquince Date: Mon, 31 Oct 2016 20:37:44 +0000 Subject: [PATCH 19/78] Fixed bugs --- c-concoct2/c_vbgmm_fit.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index f9072e5..63792a7 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -1348,7 +1348,7 @@ double eqnA(int nD, gsl_matrix *ptCovarK, gsl_matrix *ptSigmaK, double *adMuK, d return dRet; } -double eqnB(int nD, gsl_matrix *ptInvW0, t_matrix *ptSigmaK, double* adMK, double dBeta0, double d2Pi, double dLDetK, double dBetaK, double dNuK) +double eqnB(int nD, gsl_matrix *ptInvW0, gsl_matrix *ptSigmaK, double* adMK, double dBeta0, double d2Pi, double dLDetK, double dBetaK, double dNuK, double dNu0) { int l = 0; double dD = (double) nD; @@ -1396,13 +1396,13 @@ double calcVBL_MP(t_Cluster* ptCluster) double d2Pi = 2.0*M_PI, logd2Pi = log(d2Pi), dBeta0 = ptCluster->ptVBParams->dBeta0, dNu0 = ptCluster->ptVBParams->dNu0, dRet = 0.0; double dK = 0.0; - for(k = 0; k < nK; k++){ + for(int k = 0; k < nK; k++){ adNK[k] = 0.0; } /*Equation 10.72*/ - for(i = 0; i < nN; i++){ - for(k = 0; k < nK; k++){ + for(int i = 0; i < nN; i++){ + for(int k = 0; k < nK; k++){ adNK[k] += aadZ[i][k]; if(adPi[k] > 0.0){ dBishop2 += aadZ[i][k]*log(adPi[k]); @@ -1411,7 +1411,7 @@ double calcVBL_MP(t_Cluster* ptCluster) } - for(k = 0; k < nK; k++){ + for(int k = 0; k < nK; k++){ if(adNK[k] > 0.0){ dK++; } @@ -1437,7 +1437,7 @@ double calcVBL_MP(t_Cluster* ptCluster) #pragma omp parallel for for(int k = 0; k < nK; k++){ if(adNK[k] > 0.0){ - adRet[k] = eqnB(nD, ptCluster->ptVBParams->ptInvW0, ptCluster->aptSigma[k], aadM[k], ptCluster->ptVBParams->dBeta0, d2Pi, adLDet[k], adBeta[k], adNu[k]) + adRet[k] = eqnB(nD, ptCluster->ptVBParams->ptInvW0, ptCluster->aptSigma[k], aadM[k], ptCluster->ptVBParams->dBeta0, d2Pi, adLDet[k], adBeta[k], adNu[k],ptCluster->ptVBParams->dNu0); } } From 74004c1161f6f0929e4b2f9b764a6b9508f3f2c0 Mon Sep 17 00:00:00 2001 From: Christopher Quince Date: Thu, 3 Nov 2016 12:46:12 +0000 Subject: [PATCH 20/78] Create concoct refine --- bin/concoct_refine | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 bin/concoct_refine diff --git a/bin/concoct_refine b/bin/concoct_refine new file mode 100755 index 0000000..88d61be --- /dev/null +++ b/bin/concoct_refine @@ -0,0 +1,80 @@ +#!/usr/bin/env python +from __future__ import division + +import sys +import logging +import vbgmm +import numpy as np +import argparse +import pandas as p + +from sklearn.decomposition import PCA + +from sklearn.cluster import KMeans + +from concoct.transform import perform_pca + +def vbgmm_fit_wrapper(args): + return vbgmm.fit(*args) + +def main(argv): + parser = argparse.ArgumentParser() + + parser.add_argument("cluster_file", help="string specifying cluster file") + + parser.add_argument("original_data", help="string original but transformed data file") + + parser.add_argument("scg_file", help="string specifying scg frequency file") + + args = parser.parse_args() + + import ipdb; ipdb.set_trace() + + clusters = p.read_csv(args.cluster_file, header=None, index_col=0) + + original_data = p.read_csv(args.original_data, header=0, index_col=0) + + original_data_matrix = original_data.as_matrix() + + scg_freq = p.read_csv(args.scg_file, header=0, index_col=0) + + scg_freq_matrix = scg_freq.as_matrix() + + med_scgs = np.median(scg_freq_matrix, axis=1) + + clusters_matrix = clusters.as_matrix() + + cluster_freq = np.bincount(clusters_matrix[:,0]) + + K = cluster_freq.shape[0] + new_clusters_matrix = np.copy(clusters_matrix,order='C') + nNewK = K + for k in range(K): + if med_scgs[k] > 1: + + select = clusters_matrix == k + + slice_k = original_data_matrix[select[:,0],:] + + index_k = np.where(select[:,0])[0] + + pca_object = PCA(n_components=0.90).fit(slice_k) + transform_k = pca_object.transform(slice_k) + + NK = med_scgs[k]*2 + print "Run CONCOCT for " + str(k) + "with " + str(NK) + "clusters" + assigns = vbgmm.fit(np.copy(transform_k,order='C'),int(NK),False) + kK = np.max(assigns) + 1 + + + for a in range(1,kK): + index_a = index_k[assigns == a] + new_clusters_matrix[index_a] = nNewK + a + + nNewK = nNewK + kK - 1 + + new_assign_df = p.DataFrame(new_clusters_matrix,index=original_data.index) + new_assign_df.to_csv("clustering_refine.csv") +if __name__ == "__main__": + main(sys.argv[1:]) + \ No newline at end of file From 0636395cbf13fdc434936ca82fe5eb6cb4d03a3c Mon Sep 17 00:00:00 2001 From: chrisquince Date: Thu, 1 Dec 2016 09:46:04 +0000 Subject: [PATCH 21/78] Initial speed up commit --- bin/concoctV | 95 + bin/concoct_refine | 8 +- c-concoct2/c_vbgmm_fit.c | 9 +- c-concoct2/c_vbgmm_fit.h | 4 +- c-concoct2/test_vbgmm_fit.c | 12 +- c-concoct2/vbgmm.c | 6214 +++++++++++++++++++++++++++++++++++ c-concoct2/vbgmm.pyx | 10 +- setup.py | 2 +- 8 files changed, 6337 insertions(+), 17 deletions(-) create mode 100755 bin/concoctV create mode 100644 c-concoct2/vbgmm.c diff --git a/bin/concoctV b/bin/concoctV new file mode 100755 index 0000000..b5fe454 --- /dev/null +++ b/bin/concoctV @@ -0,0 +1,95 @@ +#!/usr/bin/env python +from __future__ import division + +import sys +import logging +import vbgmm +import numpy as np + +from sklearn.cluster import KMeans + +from concoct.output import Output +from concoct.parser import arguments +from concoct.cluster import cluster +from concoct.input import load_data +from concoct.transform import perform_pca +from concoct.processes import prll_map + +def vbgmm_fit_wrapper(args): + return vbgmm.fit(*args) + +def main(args): + # Initialize output handling + Output(args.basename,args) + + composition, cov, cov_range = load_data(args) + + # If there are zero or one contig that exceed the filter, do not continue + if len(composition) < 2: + logging.error('Not enough contigs pass the threshold filter. Exiting!') + sys.exit(-1) + + if cov is not None: + joined = composition.join(cov.ix[:,cov_range[0]:cov_range[1]],how="inner") + else: + joined = composition + + # Fix special case in pca_components + if args.pca_components == "All": + args.pca_components = joined[args.length_threshold_filter].shape[1] + + #PCA on the contigs that have kmer count greater than length_threshold + transform_filter, pca = perform_pca( + joined, + args.pca_components + ) + + logging.info('Performed PCA, resulted in %s dimensions' % transform_filter.shape[1]) + + if not args.no_original_data: + Output.write_original_data( + joined, + args.length_threshold + ) + + Output.write_pca( + transform_filter, + args.length_threshold, + joined.index, + ) + + Output.write_pca_components( + pca.components_, + args.length_threshold + ) + + logging.info('PCA transformed data.') + + logging.info('Will call vbgmm with parameters: %s, %s, %s' % (Output.CONCOCT_PATH, args.clusters, args.length_threshold)) + #import ipdb; ipdb.set_trace() + NC = transform_filter.shape[0] + assign = np.zeros(NC,dtype=np.int32) + debug=False + + assign = vbgmm.fit(np.copy(transform_filter,order='C'),int(args.clusters),False) + + + Output.write_assign( + assign, + args.length_threshold, + joined.index, + ) + + logging.info("CONCOCT Finished") + + +if __name__=="__main__": + args = arguments() + if args.total_percentage_pca == 100: + args.pca_components = "All" + else: + args.pca_components = args.total_percentage_pca/100.0 + + results = main(args) + + print >> sys.stderr, "CONCOCT Finished, the log shows how it went." diff --git a/bin/concoct_refine b/bin/concoct_refine index 88d61be..607cd81 100755 --- a/bin/concoct_refine +++ b/bin/concoct_refine @@ -28,7 +28,7 @@ def main(argv): args = parser.parse_args() - import ipdb; ipdb.set_trace() +# import ipdb; ipdb.set_trace() clusters = p.read_csv(args.cluster_file, header=None, index_col=0) @@ -48,7 +48,7 @@ def main(argv): K = cluster_freq.shape[0] new_clusters_matrix = np.copy(clusters_matrix,order='C') - nNewK = K + nNewK = K - 1 for k in range(K): if med_scgs[k] > 1: @@ -61,7 +61,7 @@ def main(argv): pca_object = PCA(n_components=0.90).fit(slice_k) transform_k = pca_object.transform(slice_k) - NK = med_scgs[k]*2 + NK = med_scgs[k]*8 print "Run CONCOCT for " + str(k) + "with " + str(NK) + "clusters" assigns = vbgmm.fit(np.copy(transform_k,order='C'),int(NK),False) kK = np.max(assigns) + 1 @@ -77,4 +77,4 @@ def main(argv): new_assign_df.to_csv("clustering_refine.csv") if __name__ == "__main__": main(sys.argv[1:]) - \ No newline at end of file + diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index 63792a7..c0cf339 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -51,6 +51,7 @@ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned l t_VBParams tVBParams; t_Cluster *ptCluster = NULL; int i = 0, nK = nKStart, nNthreads = 0; + int nT = 0; char *szCOutFile = NULL; /*initialise GSL RNG*/ @@ -62,7 +63,13 @@ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned l ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); /*set OMP thread number*/ - nNthreads = omp_get_max_threads(); + nNthreads = 192;//omp_get_max_threads(); + nT = nN / 32 + 1; + printf("%d %d %d\n",nN,nT,nNthreads); + if (nT < nNthreads){ + nNthreads = nT; + } + omp_set_num_threads(nNthreads); fprintf(stderr,"Setting %d OMP threads\n",nNthreads); diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index ce946fc..ecbca46 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -115,8 +115,8 @@ typedef struct s_Cluster #define R_PRIME 1009 -#define DEF_EPSILON 1.0e-6 -#define DEF_MAX_ITER 500 +#define DEF_EPSILON 1.0e-4 +#define DEF_MAX_ITER 1000 #define DEF_SEED 1l /*user defines*/ diff --git a/c-concoct2/test_vbgmm_fit.c b/c-concoct2/test_vbgmm_fit.c index 8c4e4ad..3cc3769 100644 --- a/c-concoct2/test_vbgmm_fit.c +++ b/c-concoct2/test_vbgmm_fit.c @@ -52,7 +52,7 @@ int main() r = gsl_rng_alloc (T); - readInputData("PCA_transformed_data_gt1000.csv", &tData); + readInputData("PCA_transformed_data_gt2000.csv", &tData); nN = tData.nN; nD = tData.nD; @@ -60,19 +60,21 @@ int main() adX = (double *) malloc(nN*nD*sizeof(double)); anAssign = (int *) malloc(nN*sizeof(int)); - readAssigns("clustering_gt1000.csv", anAssign, nN); + readAssigns("clustering_gt2000.csv", anAssign, nN); for(i = 0; i < nN; i++){ - if(anAssigns[i] > nK){ - nK = anAssigns[i]; + if(anAssign[i] > nK){ + nK = anAssign[i]; } for(j = 0; j < nD; j++){ adX[i*nD + j] = tData.aadX[i][j]; } } - printf("Run c_vbgmm_fit with %d clusters\n",nK); nK = nK + 1; + fprintf(stderr,"Run c_vbgmm_fit with %d clusters\n",nK); + fflush(stderr); + c_vbgmm_fit (adX, nN, nD, nK, anAssign, FALSE, TRUE); for(i = 0; i < nN; i++){ printf("%d,%d\n",i,anAssign[i]); diff --git a/c-concoct2/vbgmm.c b/c-concoct2/vbgmm.c new file mode 100644 index 0000000..c482391 --- /dev/null +++ b/c-concoct2/vbgmm.c @@ -0,0 +1,6214 @@ +/* Generated by Cython 0.23.4 */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000) + #error Cython requires Python 2.6+ or Python 3.2+. +#else +#define CYTHON_ABI "0_23_4" +#include +#ifndef offsetof +#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION +#define CYTHON_COMPILING_IN_PYPY 1 +#define CYTHON_COMPILING_IN_CPYTHON 0 +#else +#define CYTHON_COMPILING_IN_PYPY 0 +#define CYTHON_COMPILING_IN_CPYTHON 1 +#endif +#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000 +#define CYTHON_USE_PYLONG_INTERNALS 1 +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) +#define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) +#else + #define CYTHON_PEP393_ENABLED 0 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if PY_VERSION_HEX >= 0x030500B1 +#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods +#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) +#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 +typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; +} __Pyx_PyAsyncMethodsStruct; +#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) +#else +#define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) + +#ifndef CYTHON_INLINE + #if defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif + + +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__vbgmm +#define __PYX_HAVE_API__vbgmm +#include "string.h" +#include "stdio.h" +#include "stdlib.h" +#include "numpy/arrayobject.h" +#include "numpy/ufuncobject.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#ifdef PYREX_WITHOUT_ASSERTIONS +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) && defined (_M_X64) + #define __Pyx_sst_abs(value) _abs64(value) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +#if PY_MAJOR_VERSION < 3 +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) +{ + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#else +#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen +#endif +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False)) +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_COMPILING_IN_CPYTHON +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ + +static PyObject *__pyx_m; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + +#if !defined(CYTHON_CCOMPLEX) + #if defined(__cplusplus) + #define CYTHON_CCOMPLEX 1 + #elif defined(_Complex_I) + #define CYTHON_CCOMPLEX 1 + #else + #define CYTHON_CCOMPLEX 0 + #endif +#endif +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #include + #else + #include + #endif +#endif +#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) + #undef _Complex_I + #define _Complex_I 1.0fj +#endif + + +static const char *__pyx_f[] = { + "c-concoct2/vbgmm.pyx", + "numpy.pxd", + "type.pxd", +}; +#define IS_UNSIGNED(type) (((type) -1) > 0) +struct __Pyx_StructField_; +#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) +typedef struct { + const char* name; + struct __Pyx_StructField_* fields; + size_t size; + size_t arraysize[8]; + int ndim; + char typegroup; + char is_unsigned; + int flags; +} __Pyx_TypeInfo; +typedef struct __Pyx_StructField_ { + __Pyx_TypeInfo* type; + const char* name; + size_t offset; +} __Pyx_StructField; +typedef struct { + __Pyx_StructField* field; + size_t parent_offset; +} __Pyx_BufFmt_StackElem; +typedef struct { + __Pyx_StructField root; + __Pyx_BufFmt_StackElem* head; + size_t fmt_offset; + size_t new_count, enc_count; + size_t struct_alignment; + int is_complex; + char enc_type; + char new_packmode; + char enc_packmode; + char is_valid_array; +} __Pyx_BufFmt_Context; + + +/* "numpy.pxd":723 + * # in Cython to enable them only on the right systems. + * + * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + */ +typedef npy_int8 __pyx_t_5numpy_int8_t; + +/* "numpy.pxd":724 + * + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t + */ +typedef npy_int16 __pyx_t_5numpy_int16_t; + +/* "numpy.pxd":725 + * ctypedef npy_int8 int8_t + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< + * ctypedef npy_int64 int64_t + * #ctypedef npy_int96 int96_t + */ +typedef npy_int32 __pyx_t_5numpy_int32_t; + +/* "numpy.pxd":726 + * ctypedef npy_int16 int16_t + * ctypedef npy_int32 int32_t + * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< + * #ctypedef npy_int96 int96_t + * #ctypedef npy_int128 int128_t + */ +typedef npy_int64 __pyx_t_5numpy_int64_t; + +/* "numpy.pxd":730 + * #ctypedef npy_int128 int128_t + * + * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + */ +typedef npy_uint8 __pyx_t_5numpy_uint8_t; + +/* "numpy.pxd":731 + * + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t + */ +typedef npy_uint16 __pyx_t_5numpy_uint16_t; + +/* "numpy.pxd":732 + * ctypedef npy_uint8 uint8_t + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< + * ctypedef npy_uint64 uint64_t + * #ctypedef npy_uint96 uint96_t + */ +typedef npy_uint32 __pyx_t_5numpy_uint32_t; + +/* "numpy.pxd":733 + * ctypedef npy_uint16 uint16_t + * ctypedef npy_uint32 uint32_t + * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< + * #ctypedef npy_uint96 uint96_t + * #ctypedef npy_uint128 uint128_t + */ +typedef npy_uint64 __pyx_t_5numpy_uint64_t; + +/* "numpy.pxd":737 + * #ctypedef npy_uint128 uint128_t + * + * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< + * ctypedef npy_float64 float64_t + * #ctypedef npy_float80 float80_t + */ +typedef npy_float32 __pyx_t_5numpy_float32_t; + +/* "numpy.pxd":738 + * + * ctypedef npy_float32 float32_t + * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< + * #ctypedef npy_float80 float80_t + * #ctypedef npy_float128 float128_t + */ +typedef npy_float64 __pyx_t_5numpy_float64_t; + +/* "numpy.pxd":747 + * # The int types are mapped a bit surprising -- + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t + */ +typedef npy_long __pyx_t_5numpy_int_t; + +/* "numpy.pxd":748 + * # numpy.int corresponds to 'l' and numpy.long to 'q' + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< + * ctypedef npy_longlong longlong_t + * + */ +typedef npy_longlong __pyx_t_5numpy_long_t; + +/* "numpy.pxd":749 + * ctypedef npy_long int_t + * ctypedef npy_longlong long_t + * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_ulong uint_t + */ +typedef npy_longlong __pyx_t_5numpy_longlong_t; + +/* "numpy.pxd":751 + * ctypedef npy_longlong longlong_t + * + * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t + */ +typedef npy_ulong __pyx_t_5numpy_uint_t; + +/* "numpy.pxd":752 + * + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< + * ctypedef npy_ulonglong ulonglong_t + * + */ +typedef npy_ulonglong __pyx_t_5numpy_ulong_t; + +/* "numpy.pxd":753 + * ctypedef npy_ulong uint_t + * ctypedef npy_ulonglong ulong_t + * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< + * + * ctypedef npy_intp intp_t + */ +typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; + +/* "numpy.pxd":755 + * ctypedef npy_ulonglong ulonglong_t + * + * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< + * ctypedef npy_uintp uintp_t + * + */ +typedef npy_intp __pyx_t_5numpy_intp_t; + +/* "numpy.pxd":756 + * + * ctypedef npy_intp intp_t + * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< + * + * ctypedef npy_double float_t + */ +typedef npy_uintp __pyx_t_5numpy_uintp_t; + +/* "numpy.pxd":758 + * ctypedef npy_uintp uintp_t + * + * ctypedef npy_double float_t # <<<<<<<<<<<<<< + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t + */ +typedef npy_double __pyx_t_5numpy_float_t; + +/* "numpy.pxd":759 + * + * ctypedef npy_double float_t + * ctypedef npy_double double_t # <<<<<<<<<<<<<< + * ctypedef npy_longdouble longdouble_t + * + */ +typedef npy_double __pyx_t_5numpy_double_t; + +/* "numpy.pxd":760 + * ctypedef npy_double float_t + * ctypedef npy_double double_t + * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cfloat cfloat_t + */ +typedef npy_longdouble __pyx_t_5numpy_longdouble_t; +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< float > __pyx_t_float_complex; + #else + typedef float _Complex __pyx_t_float_complex; + #endif +#else + typedef struct { float real, imag; } __pyx_t_float_complex; +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + typedef ::std::complex< double > __pyx_t_double_complex; + #else + typedef double _Complex __pyx_t_double_complex; + #endif +#else + typedef struct { double real, imag; } __pyx_t_double_complex; +#endif + + +/*--- Type declarations ---*/ + +/* "numpy.pxd":762 + * ctypedef npy_longdouble longdouble_t + * + * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t + */ +typedef npy_cfloat __pyx_t_5numpy_cfloat_t; + +/* "numpy.pxd":763 + * + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< + * ctypedef npy_clongdouble clongdouble_t + * + */ +typedef npy_cdouble __pyx_t_5numpy_cdouble_t; + +/* "numpy.pxd":764 + * ctypedef npy_cfloat cfloat_t + * ctypedef npy_cdouble cdouble_t + * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< + * + * ctypedef npy_cdouble complex_t + */ +typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; + +/* "numpy.pxd":766 + * ctypedef npy_clongdouble clongdouble_t + * + * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew1(a): + */ +typedef npy_cdouble __pyx_t_5numpy_complex_t; + +/* --- Runtime support code (head) --- */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact); + +static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, + __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); + +#define __Pyx_BufPtrCContig2d(type, buf, i0, s0, i1, s1) ((type)((char*)buf + i0 * s0) + i1) +#define __Pyx_BufPtrCContig1d(type, buf, i0, s0) ((type)buf + i0) +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); + +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +typedef struct { + int code_line; + PyCodeObject* code_object; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +typedef struct { + Py_ssize_t shape, strides, suboffsets; +} __Pyx_Buf_DimInfo; +typedef struct { + size_t refcount; + Py_buffer pybuffer; +} __Pyx_Buffer; +typedef struct { + __Pyx_Buffer *rcbuffer; + char *data; + __Pyx_Buf_DimInfo diminfo[8]; +} __Pyx_LocalBuf_ND; + +#if PY_MAJOR_VERSION < 3 + static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); + static void __Pyx_ReleaseBuffer(Py_buffer *view); +#else + #define __Pyx_GetBuffer PyObject_GetBuffer + #define __Pyx_ReleaseBuffer PyBuffer_Release +#endif + + +static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0}; +static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1}; + +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + #define __Pyx_CREAL(z) ((z).real()) + #define __Pyx_CIMAG(z) ((z).imag()) + #else + #define __Pyx_CREAL(z) (__real__(z)) + #define __Pyx_CIMAG(z) (__imag__(z)) + #endif +#else + #define __Pyx_CREAL(z) ((z).real) + #define __Pyx_CIMAG(z) ((z).imag) +#endif +#if (defined(_WIN32) || defined(__clang__)) && defined(__cplusplus) && CYTHON_CCOMPLEX + #define __Pyx_SET_CREAL(z,x) ((z).real(x)) + #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) +#else + #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) + #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) +#endif + +static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eqf(a, b) ((a)==(b)) + #define __Pyx_c_sumf(a, b) ((a)+(b)) + #define __Pyx_c_difff(a, b) ((a)-(b)) + #define __Pyx_c_prodf(a, b) ((a)*(b)) + #define __Pyx_c_quotf(a, b) ((a)/(b)) + #define __Pyx_c_negf(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zerof(z) ((z)==(float)0) + #define __Pyx_c_conjf(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_absf(z) (::std::abs(z)) + #define __Pyx_c_powf(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zerof(z) ((z)==0) + #define __Pyx_c_conjf(z) (conjf(z)) + #if 1 + #define __Pyx_c_absf(z) (cabsf(z)) + #define __Pyx_c_powf(a, b) (cpowf(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); + static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); + #if 1 + static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); + #endif +#endif + +static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); + +#if CYTHON_CCOMPLEX + #define __Pyx_c_eq(a, b) ((a)==(b)) + #define __Pyx_c_sum(a, b) ((a)+(b)) + #define __Pyx_c_diff(a, b) ((a)-(b)) + #define __Pyx_c_prod(a, b) ((a)*(b)) + #define __Pyx_c_quot(a, b) ((a)/(b)) + #define __Pyx_c_neg(a) (-(a)) + #ifdef __cplusplus + #define __Pyx_c_is_zero(z) ((z)==(double)0) + #define __Pyx_c_conj(z) (::std::conj(z)) + #if 1 + #define __Pyx_c_abs(z) (::std::abs(z)) + #define __Pyx_c_pow(a, b) (::std::pow(a, b)) + #endif + #else + #define __Pyx_c_is_zero(z) ((z)==0) + #define __Pyx_c_conj(z) (conj(z)) + #if 1 + #define __Pyx_c_abs(z) (cabs(z)) + #define __Pyx_c_pow(a, b) (cpow(a, b)) + #endif + #endif +#else + static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); + static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); + #if 1 + static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); + #endif +#endif + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ptrdiff_t(ptrdiff_t value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value); + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +static int __Pyx_check_binary_version(void); + +#if !defined(__Pyx_PyIdentifier_FromString) +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) +#else + #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) +#endif +#endif + +static PyObject *__Pyx_ImportModule(const char *name); + +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'cython' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.ref' */ + +/* Module declarations from 'libc.stdlib' */ + +/* Module declarations from 'numpy' */ + +/* Module declarations from 'numpy' */ +static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; +static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; +static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; +static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; +static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ + +/* Module declarations from 'vbgmm' */ +__PYX_EXTERN_C DL_IMPORT(void) c_vbgmm_fit(double *, int, int, int, int *, int, int); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; +static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; +#define __Pyx_MODULE_NAME "vbgmm" +int __pyx_module_is_main_vbgmm = 0; + +/* Implementation of 'vbgmm' */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_range; +static PyObject *__pyx_builtin_RuntimeError; +static char __pyx_k_B[] = "B"; +static char __pyx_k_H[] = "H"; +static char __pyx_k_I[] = "I"; +static char __pyx_k_L[] = "L"; +static char __pyx_k_O[] = "O"; +static char __pyx_k_Q[] = "Q"; +static char __pyx_k_b[] = "b"; +static char __pyx_k_d[] = "d"; +static char __pyx_k_f[] = "f"; +static char __pyx_k_g[] = "g"; +static char __pyx_k_h[] = "h"; +static char __pyx_k_i[] = "i"; +static char __pyx_k_l[] = "l"; +static char __pyx_k_q[] = "q"; +static char __pyx_k_Zd[] = "Zd"; +static char __pyx_k_Zf[] = "Zf"; +static char __pyx_k_Zg[] = "Zg"; +static char __pyx_k_nD[] = "nD"; +static char __pyx_k_nK[] = "nK"; +static char __pyx_k_nN[] = "nN"; +static char __pyx_k_nS[] = "nS"; +static char __pyx_k_np[] = "np"; +static char __pyx_k_fit[] = "fit"; +static char __pyx_k_intc[] = "intc"; +static char __pyx_k_main[] = "__main__"; +static char __pyx_k_test[] = "__test__"; +static char __pyx_k_debug[] = "debug"; +static char __pyx_k_dtype[] = "dtype"; +static char __pyx_k_numpy[] = "numpy"; +static char __pyx_k_range[] = "range"; +static char __pyx_k_vbgmm[] = "vbgmm"; +static char __pyx_k_zeros[] = "zeros"; +static char __pyx_k_assign[] = "assign"; +static char __pyx_k_import[] = "__import__"; +static char __pyx_k_xarray[] = "xarray"; +static char __pyx_k_bAssign[] = "bAssign"; +static char __pyx_k_nClusters[] = "nClusters"; +static char __pyx_k_ValueError[] = "ValueError"; +static char __pyx_k_RuntimeError[] = "RuntimeError"; +static char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; +static char __pyx_k_mnt_data_chris_chris_repos_CONC[] = "/mnt/data-chris/chris/repos/CONCOCT/c-concoct2/vbgmm.pyx"; +static char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; +static char __pyx_k_vbgmm_pyx_simple_cython_wrapper[] = "\nvbgmm.pyx\n\nsimple cython wrapper for variational Gaussian mixture model in C \n\n"; +static char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; +static char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; +static char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; +static char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; +static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; +static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; +static PyObject *__pyx_n_s_RuntimeError; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_assign; +static PyObject *__pyx_n_s_bAssign; +static PyObject *__pyx_n_s_debug; +static PyObject *__pyx_n_s_dtype; +static PyObject *__pyx_n_s_fit; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_intc; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_kp_s_mnt_data_chris_chris_repos_CONC; +static PyObject *__pyx_n_s_nClusters; +static PyObject *__pyx_n_s_nD; +static PyObject *__pyx_n_s_nK; +static PyObject *__pyx_n_s_nN; +static PyObject *__pyx_n_s_nS; +static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; +static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_n_s_range; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; +static PyObject *__pyx_n_s_vbgmm; +static PyObject *__pyx_n_s_xarray; +static PyObject *__pyx_n_s_zeros; +static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug); /* proto */ +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ +static PyObject *__pyx_int_15; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_codeobj__8; + +/* "vbgmm.pyx":19 + * @cython.wraparound(False) + * + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK, debug) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_5vbgmm_fit[] = "\n fit (xarray, assign, nK, debug)\n\n Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters\n\n and returns cluster assignments in assign\n\n param: xarray -- a 2-d numpy array of np.float64\n param: assigns -- cluster assignments must have same number of rows as xarray\n\n "; +static PyMethodDef __pyx_mdef_5vbgmm_1fit = {"fit", (PyCFunction)__pyx_pw_5vbgmm_1fit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5vbgmm_fit}; +static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_xarray = 0; + PyObject *__pyx_v_nClusters = 0; + PyObject *__pyx_v_debug = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("fit (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xarray,&__pyx_n_s_nClusters,&__pyx_n_s_debug,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xarray)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nClusters)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("fit", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_debug)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("fit", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_xarray = ((PyArrayObject *)values[0]); + __pyx_v_nClusters = values[1]; + __pyx_v_debug = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("fit", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xarray), __pyx_ptype_5numpy_ndarray, 0, "xarray", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_r = __pyx_pf_5vbgmm_fit(__pyx_self, __pyx_v_xarray, __pyx_v_nClusters, __pyx_v_debug); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug) { + int __pyx_v_nN; + int __pyx_v_nD; + int __pyx_v_nK; + int __pyx_v_bAssign; + PyArrayObject *__pyx_v_assign = 0; + __Pyx_LocalBuf_ND __pyx_pybuffernd_assign; + __Pyx_Buffer __pyx_pybuffer_assign; + __Pyx_LocalBuf_ND __pyx_pybuffernd_xarray; + __Pyx_Buffer __pyx_pybuffer_xarray; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + npy_intp __pyx_t_1; + npy_intp __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + Py_ssize_t __pyx_t_10; + Py_ssize_t __pyx_t_11; + Py_ssize_t __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("fit", 0); + __pyx_pybuffer_assign.pybuffer.buf = NULL; + __pyx_pybuffer_assign.refcount = 0; + __pyx_pybuffernd_assign.data = NULL; + __pyx_pybuffernd_assign.rcbuffer = &__pyx_pybuffer_assign; + __pyx_pybuffer_xarray.pybuffer.buf = NULL; + __pyx_pybuffer_xarray.refcount = 0; + __pyx_pybuffernd_xarray.data = NULL; + __pyx_pybuffernd_xarray.rcbuffer = &__pyx_pybuffer_xarray; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer, (PyObject*)__pyx_v_xarray, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_pybuffernd_xarray.diminfo[0].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_xarray.diminfo[0].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_xarray.diminfo[1].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_xarray.diminfo[1].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[1]; + + /* "vbgmm.pyx":33 + * cdef int nN, nD, nK, nS, bAssign + * + * nN, nD = xarray.shape[0], xarray.shape[1] # <<<<<<<<<<<<<< + * + * nK = nClusters + */ + __pyx_t_1 = (__pyx_v_xarray->dimensions[0]); + __pyx_t_2 = (__pyx_v_xarray->dimensions[1]); + __pyx_v_nN = __pyx_t_1; + __pyx_v_nD = __pyx_t_2; + + /* "vbgmm.pyx":35 + * nN, nD = xarray.shape[0], xarray.shape[1] + * + * nK = nClusters # <<<<<<<<<<<<<< + * + * bAssign = 0 + */ + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_nClusters); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_nK = __pyx_t_3; + + /* "vbgmm.pyx":37 + * nK = nClusters + * + * bAssign = 0 # <<<<<<<<<<<<<< + * + * cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) + */ + __pyx_v_bAssign = 0; + + /* "vbgmm.pyx":39 + * bAssign = 0 + * + * cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) # <<<<<<<<<<<<<< + * + * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nN); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); + __pyx_t_4 = 0; + __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_intc); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_assign.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { + __pyx_v_assign = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_assign.rcbuffer->pybuffer.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_pybuffernd_assign.diminfo[0].strides = __pyx_pybuffernd_assign.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_assign.diminfo[0].shape = __pyx_pybuffernd_assign.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_9 = 0; + __pyx_v_assign = ((PyArrayObject *)__pyx_t_8); + __pyx_t_8 = 0; + + /* "vbgmm.pyx":41 + * cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) + * + * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) # <<<<<<<<<<<<<< + * + * return assign + */ + __pyx_t_10 = 0; + __pyx_t_11 = 0; + __pyx_t_12 = 0; + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_debug); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + c_vbgmm_fit((&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_xarray.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_xarray.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_xarray.diminfo[1].strides))), __pyx_v_nN, __pyx_v_nD, __pyx_v_nK, (&(*__Pyx_BufPtrCContig1d(int *, __pyx_pybuffernd_assign.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_assign.diminfo[0].strides))), __pyx_t_3, __pyx_v_bAssign); + + /* "vbgmm.pyx":43 + * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) + * + * return assign # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_assign)); + __pyx_r = ((PyObject *)__pyx_v_assign); + goto __pyx_L0; + + /* "vbgmm.pyx":19 + * @cython.wraparound(False) + * + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK, debug) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_assign); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":194 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fullfill the PEP. + */ + +/* Python wrapper */ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ +static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); + __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { + int __pyx_v_copy_shape; + int __pyx_v_i; + int __pyx_v_ndim; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + int __pyx_v_t; + char *__pyx_v_f; + PyArray_Descr *__pyx_v_descr = 0; + int __pyx_v_offset; + int __pyx_v_hasfields; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + char *__pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__getbuffer__", 0); + if (__pyx_v_info != NULL) { + __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(__pyx_v_info->obj); + } + + /* "numpy.pxd":200 + * # of flags + * + * if info == NULL: return # <<<<<<<<<<<<<< + * + * cdef int copy_shape, i, ndim + */ + __pyx_t_1 = ((__pyx_v_info == NULL) != 0); + if (__pyx_t_1) { + __pyx_r = 0; + goto __pyx_L0; + } + + /* "numpy.pxd":203 + * + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + */ + __pyx_v_endian_detector = 1; + + /* "numpy.pxd":204 + * cdef int copy_shape, i, ndim + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * + * ndim = PyArray_NDIM(self) + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "numpy.pxd":206 + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * + * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); + + /* "numpy.pxd":208 + * ndim = PyArray_NDIM(self) + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * copy_shape = 1 + * else: + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "numpy.pxd":209 + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * copy_shape = 1 # <<<<<<<<<<<<<< + * else: + * copy_shape = 0 + */ + __pyx_v_copy_shape = 1; + + /* "numpy.pxd":208 + * ndim = PyArray_NDIM(self) + * + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * copy_shape = 1 + * else: + */ + goto __pyx_L4; + } + + /* "numpy.pxd":211 + * copy_shape = 1 + * else: + * copy_shape = 0 # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + */ + /*else*/ { + __pyx_v_copy_shape = 0; + } + __pyx_L4:; + + /* "numpy.pxd":213 + * copy_shape = 0 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L6_bool_binop_done; + } + + /* "numpy.pxd":214 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not C contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L6_bool_binop_done:; + + /* "numpy.pxd":213 + * copy_shape = 0 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + if (__pyx_t_1) { + + /* "numpy.pxd":215 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "numpy.pxd":213 + * copy_shape = 0 + * + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") + */ + } + + /* "numpy.pxd":217 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L9_bool_binop_done; + } + + /* "numpy.pxd":218 + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< + * raise ValueError(u"ndarray is not Fortran contiguous") + * + */ + __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L9_bool_binop_done:; + + /* "numpy.pxd":217 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + if (__pyx_t_1) { + + /* "numpy.pxd":219 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "numpy.pxd":217 + * raise ValueError(u"ndarray is not C contiguous") + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") + */ + } + + /* "numpy.pxd":221 + * raise ValueError(u"ndarray is not Fortran contiguous") + * + * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< + * info.ndim = ndim + * if copy_shape: + */ + __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); + + /* "numpy.pxd":222 + * + * info.buf = PyArray_DATA(self) + * info.ndim = ndim # <<<<<<<<<<<<<< + * if copy_shape: + * # Allocate new buffer for strides and shape info. + */ + __pyx_v_info->ndim = __pyx_v_ndim; + + /* "numpy.pxd":223 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if copy_shape: # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + __pyx_t_1 = (__pyx_v_copy_shape != 0); + if (__pyx_t_1) { + + /* "numpy.pxd":226 + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< + * info.shape = info.strides + ndim + * for i in range(ndim): + */ + __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); + + /* "numpy.pxd":227 + * # This is allocated as one block, strides first. + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim # <<<<<<<<<<<<<< + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + */ + __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); + + /* "numpy.pxd":228 + * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) + * info.shape = info.strides + ndim + * for i in range(ndim): # <<<<<<<<<<<<<< + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] + */ + __pyx_t_4 = __pyx_v_ndim; + for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { + __pyx_v_i = __pyx_t_5; + + /* "numpy.pxd":229 + * info.shape = info.strides + ndim + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + */ + (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); + + /* "numpy.pxd":230 + * for i in range(ndim): + * info.strides[i] = PyArray_STRIDES(self)[i] + * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< + * else: + * info.strides = PyArray_STRIDES(self) + */ + (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); + } + + /* "numpy.pxd":223 + * info.buf = PyArray_DATA(self) + * info.ndim = ndim + * if copy_shape: # <<<<<<<<<<<<<< + * # Allocate new buffer for strides and shape info. + * # This is allocated as one block, strides first. + */ + goto __pyx_L11; + } + + /* "numpy.pxd":232 + * info.shape[i] = PyArray_DIMS(self)[i] + * else: + * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + */ + /*else*/ { + __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); + + /* "numpy.pxd":233 + * else: + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + */ + __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); + } + __pyx_L11:; + + /* "numpy.pxd":234 + * info.strides = PyArray_STRIDES(self) + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL # <<<<<<<<<<<<<< + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) + */ + __pyx_v_info->suboffsets = NULL; + + /* "numpy.pxd":235 + * info.shape = PyArray_DIMS(self) + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< + * info.readonly = not PyArray_ISWRITEABLE(self) + * + */ + __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); + + /* "numpy.pxd":236 + * info.suboffsets = NULL + * info.itemsize = PyArray_ITEMSIZE(self) + * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< + * + * cdef int t + */ + __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); + + /* "numpy.pxd":239 + * + * cdef int t + * cdef char* f = NULL # <<<<<<<<<<<<<< + * cdef dtype descr = self.descr + * cdef list stack + */ + __pyx_v_f = NULL; + + /* "numpy.pxd":240 + * cdef int t + * cdef char* f = NULL + * cdef dtype descr = self.descr # <<<<<<<<<<<<<< + * cdef list stack + * cdef int offset + */ + __pyx_t_3 = ((PyObject *)__pyx_v_self->descr); + __Pyx_INCREF(__pyx_t_3); + __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "numpy.pxd":244 + * cdef int offset + * + * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< + * + * if not hasfields and not copy_shape: + */ + __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); + + /* "numpy.pxd":246 + * cdef bint hasfields = PyDataType_HASFIELDS(descr) + * + * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< + * # do not call releasebuffer + * info.obj = None + */ + __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_2 = ((!(__pyx_v_copy_shape != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L15_bool_binop_done:; + if (__pyx_t_1) { + + /* "numpy.pxd":248 + * if not hasfields and not copy_shape: + * # do not call releasebuffer + * info.obj = None # <<<<<<<<<<<<<< + * else: + * # need to call releasebuffer + */ + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = Py_None; + + /* "numpy.pxd":246 + * cdef bint hasfields = PyDataType_HASFIELDS(descr) + * + * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< + * # do not call releasebuffer + * info.obj = None + */ + goto __pyx_L14; + } + + /* "numpy.pxd":251 + * else: + * # need to call releasebuffer + * info.obj = self # <<<<<<<<<<<<<< + * + * if not hasfields: + */ + /*else*/ { + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); + __pyx_v_info->obj = ((PyObject *)__pyx_v_self); + } + __pyx_L14:; + + /* "numpy.pxd":253 + * info.obj = self + * + * if not hasfields: # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + */ + __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); + if (__pyx_t_1) { + + /* "numpy.pxd":254 + * + * if not hasfields: + * t = descr.type_num # <<<<<<<<<<<<<< + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + */ + __pyx_t_4 = __pyx_v_descr->type_num; + __pyx_v_t = __pyx_t_4; + + /* "numpy.pxd":255 + * if not hasfields: + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0); + if (!__pyx_t_2) { + goto __pyx_L20_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_little_endian != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L19_bool_binop_done; + } + __pyx_L20_next_or:; + + /* "numpy.pxd":256 + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + */ + __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L19_bool_binop_done:; + + /* "numpy.pxd":255 + * if not hasfields: + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + if (__pyx_t_1) { + + /* "numpy.pxd":257 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "numpy.pxd":255 + * if not hasfields: + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + } + + /* "numpy.pxd":258 + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + */ + switch (__pyx_v_t) { + case NPY_BYTE: + __pyx_v_f = __pyx_k_b; + break; + + /* "numpy.pxd":259 + * raise ValueError(u"Non-native byte order not supported") + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + */ + case NPY_UBYTE: + __pyx_v_f = __pyx_k_B; + break; + + /* "numpy.pxd":260 + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + */ + case NPY_SHORT: + __pyx_v_f = __pyx_k_h; + break; + + /* "numpy.pxd":261 + * elif t == NPY_UBYTE: f = "B" + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + */ + case NPY_USHORT: + __pyx_v_f = __pyx_k_H; + break; + + /* "numpy.pxd":262 + * elif t == NPY_SHORT: f = "h" + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + */ + case NPY_INT: + __pyx_v_f = __pyx_k_i; + break; + + /* "numpy.pxd":263 + * elif t == NPY_USHORT: f = "H" + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + */ + case NPY_UINT: + __pyx_v_f = __pyx_k_I; + break; + + /* "numpy.pxd":264 + * elif t == NPY_INT: f = "i" + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + */ + case NPY_LONG: + __pyx_v_f = __pyx_k_l; + break; + + /* "numpy.pxd":265 + * elif t == NPY_UINT: f = "I" + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + */ + case NPY_ULONG: + __pyx_v_f = __pyx_k_L; + break; + + /* "numpy.pxd":266 + * elif t == NPY_LONG: f = "l" + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + */ + case NPY_LONGLONG: + __pyx_v_f = __pyx_k_q; + break; + + /* "numpy.pxd":267 + * elif t == NPY_ULONG: f = "L" + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + */ + case NPY_ULONGLONG: + __pyx_v_f = __pyx_k_Q; + break; + + /* "numpy.pxd":268 + * elif t == NPY_LONGLONG: f = "q" + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + */ + case NPY_FLOAT: + __pyx_v_f = __pyx_k_f; + break; + + /* "numpy.pxd":269 + * elif t == NPY_ULONGLONG: f = "Q" + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + */ + case NPY_DOUBLE: + __pyx_v_f = __pyx_k_d; + break; + + /* "numpy.pxd":270 + * elif t == NPY_FLOAT: f = "f" + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + */ + case NPY_LONGDOUBLE: + __pyx_v_f = __pyx_k_g; + break; + + /* "numpy.pxd":271 + * elif t == NPY_DOUBLE: f = "d" + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + */ + case NPY_CFLOAT: + __pyx_v_f = __pyx_k_Zf; + break; + + /* "numpy.pxd":272 + * elif t == NPY_LONGDOUBLE: f = "g" + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" + */ + case NPY_CDOUBLE: + __pyx_v_f = __pyx_k_Zd; + break; + + /* "numpy.pxd":273 + * elif t == NPY_CFLOAT: f = "Zf" + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f = "O" + * else: + */ + case NPY_CLONGDOUBLE: + __pyx_v_f = __pyx_k_Zg; + break; + + /* "numpy.pxd":274 + * elif t == NPY_CDOUBLE: f = "Zd" + * elif t == NPY_CLONGDOUBLE: f = "Zg" + * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + case NPY_OBJECT: + __pyx_v_f = __pyx_k_O; + break; + default: + + /* "numpy.pxd":276 + * elif t == NPY_OBJECT: f = "O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * info.format = f + * return + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); + __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_6, 0, 0, 0); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + break; + } + + /* "numpy.pxd":277 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f # <<<<<<<<<<<<<< + * return + * else: + */ + __pyx_v_info->format = __pyx_v_f; + + /* "numpy.pxd":278 + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * info.format = f + * return # <<<<<<<<<<<<<< + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "numpy.pxd":253 + * info.obj = self + * + * if not hasfields: # <<<<<<<<<<<<<< + * t = descr.type_num + * if ((descr.byteorder == c'>' and little_endian) or + */ + } + + /* "numpy.pxd":280 + * return + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + */ + /*else*/ { + __pyx_v_info->format = ((char *)malloc(0xFF)); + + /* "numpy.pxd":281 + * else: + * info.format = stdlib.malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, + */ + (__pyx_v_info->format[0]) = '^'; + + /* "numpy.pxd":282 + * info.format = stdlib.malloc(_buffer_format_string_len) + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 # <<<<<<<<<<<<<< + * f = _util_dtypestring(descr, info.format + 1, + * info.format + _buffer_format_string_len, + */ + __pyx_v_offset = 0; + + /* "numpy.pxd":283 + * info.format[0] = c'^' # Native data types, manual alignment + * offset = 0 + * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< + * info.format + _buffer_format_string_len, + * &offset) + */ + __pyx_t_7 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 0xFF), (&__pyx_v_offset)); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_7; + + /* "numpy.pxd":286 + * info.format + _buffer_format_string_len, + * &offset) + * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + */ + (__pyx_v_f[0]) = '\x00'; + } + + /* "numpy.pxd":194 + * # experimental exception made for __getbuffer__ and __releasebuffer__ + * # -- the details of this may change. + * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< + * # This implementation of getbuffer is geared towards Cython + * # requirements, and does not yet fullfill the PEP. + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { + __Pyx_GOTREF(__pyx_v_info->obj); + __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; + } + goto __pyx_L2; + __pyx_L0:; + if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { + __Pyx_GOTREF(Py_None); + __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; + } + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_descr); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":288 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + */ + +/* Python wrapper */ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ +static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); + __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__releasebuffer__", 0); + + /* "numpy.pxd":289 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); + if (__pyx_t_1) { + + /* "numpy.pxd":290 + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) # <<<<<<<<<<<<<< + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) + */ + free(__pyx_v_info->format); + + /* "numpy.pxd":289 + * + * def __releasebuffer__(ndarray self, Py_buffer* info): + * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + */ + } + + /* "numpy.pxd":291 + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * stdlib.free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); + if (__pyx_t_1) { + + /* "numpy.pxd":292 + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): + * stdlib.free(info.strides) # <<<<<<<<<<<<<< + * # info.shape was stored after info.strides in the same block + * + */ + free(__pyx_v_info->strides); + + /* "numpy.pxd":291 + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< + * stdlib.free(info.strides) + * # info.shape was stored after info.strides in the same block + */ + } + + /* "numpy.pxd":288 + * f[0] = c'\0' # Terminate format string + * + * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< + * if PyArray_HASFIELDS(self): + * stdlib.free(info.format) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "numpy.pxd":768 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); + + /* "numpy.pxd":769 + * + * cdef inline object PyArray_MultiIterNew1(a): + * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew2(a, b): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "numpy.pxd":768 + * ctypedef npy_cdouble complex_t + * + * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(1, a) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":771 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); + + /* "numpy.pxd":772 + * + * cdef inline object PyArray_MultiIterNew2(a, b): + * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "numpy.pxd":771 + * return PyArray_MultiIterNew(1, a) + * + * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(2, a, b) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":774 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); + + /* "numpy.pxd":775 + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): + * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "numpy.pxd":774 + * return PyArray_MultiIterNew(2, a, b) + * + * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(3, a, b, c) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":777 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); + + /* "numpy.pxd":778 + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): + * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "numpy.pxd":777 + * return PyArray_MultiIterNew(3, a, b, c) + * + * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(4, a, b, c, d) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":780 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); + + /* "numpy.pxd":781 + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): + * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "numpy.pxd":780 + * return PyArray_MultiIterNew(4, a, b, c, d) + * + * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":783 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + +static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { + PyArray_Descr *__pyx_v_child = 0; + int __pyx_v_endian_detector; + int __pyx_v_little_endian; + PyObject *__pyx_v_fields = 0; + PyObject *__pyx_v_childname = NULL; + PyObject *__pyx_v_new_offset = NULL; + PyObject *__pyx_v_t = NULL; + char *__pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + long __pyx_t_8; + char *__pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_util_dtypestring", 0); + + /* "numpy.pxd":790 + * cdef int delta_offset + * cdef tuple i + * cdef int endian_detector = 1 # <<<<<<<<<<<<<< + * cdef bint little_endian = ((&endian_detector)[0] != 0) + * cdef tuple fields + */ + __pyx_v_endian_detector = 1; + + /* "numpy.pxd":791 + * cdef tuple i + * cdef int endian_detector = 1 + * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< + * cdef tuple fields + * + */ + __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); + + /* "numpy.pxd":794 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + if (unlikely(__pyx_v_descr->names == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; + for (;;) { + if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #else + __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); + __pyx_t_3 = 0; + + /* "numpy.pxd":795 + * + * for childname in descr.names: + * fields = descr.fields[childname] # <<<<<<<<<<<<<< + * child, new_offset = fields + * + */ + __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_3); + if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "numpy.pxd":796 + * for childname in descr.names: + * fields = descr.fields[childname] + * child, new_offset = fields # <<<<<<<<<<<<<< + * + * if (end - f) - (new_offset - offset[0]) < 15: + */ + if (likely(__pyx_v_fields != Py_None)) { + PyObject* sequence = __pyx_v_fields; + #if CYTHON_COMPILING_IN_CPYTHON + Py_ssize_t size = Py_SIZE(sequence); + #else + Py_ssize_t size = PySequence_Size(sequence); + #endif + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + #if CYTHON_COMPILING_IN_CPYTHON + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + #else + __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + #endif + } else { + __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); + __pyx_t_3 = 0; + __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); + __pyx_t_4 = 0; + + /* "numpy.pxd":798 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + __pyx_t_4 = __Pyx_PyInt_From_ptrdiff_t((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + + /* "numpy.pxd":799 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "numpy.pxd":798 + * child, new_offset = fields + * + * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + */ + } + + /* "numpy.pxd":801 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); + if (!__pyx_t_7) { + goto __pyx_L8_next_or; + } else { + } + __pyx_t_7 = (__pyx_v_little_endian != 0); + if (!__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_L8_next_or:; + + /* "numpy.pxd":802 + * + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< + * raise ValueError(u"Non-native byte order not supported") + * # One could encode it in the format string and have Cython + */ + __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); + if (__pyx_t_7) { + } else { + __pyx_t_6 = __pyx_t_7; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0); + __pyx_t_6 = __pyx_t_7; + __pyx_L7_bool_binop_done:; + + /* "numpy.pxd":801 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + if (__pyx_t_6) { + + /* "numpy.pxd":803 + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "numpy.pxd":801 + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") + * + * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") + */ + } + + /* "numpy.pxd":813 + * + * # Output padding bytes + * while offset[0] < new_offset: # <<<<<<<<<<<<<< + * f[0] = 120 # "x"; pad byte + * f += 1 + */ + while (1) { + __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!__pyx_t_6) break; + + /* "numpy.pxd":814 + * # Output padding bytes + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< + * f += 1 + * offset[0] += 1 + */ + (__pyx_v_f[0]) = 0x78; + + /* "numpy.pxd":815 + * while offset[0] < new_offset: + * f[0] = 120 # "x"; pad byte + * f += 1 # <<<<<<<<<<<<<< + * offset[0] += 1 + * + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "numpy.pxd":816 + * f[0] = 120 # "x"; pad byte + * f += 1 + * offset[0] += 1 # <<<<<<<<<<<<<< + * + * offset[0] += child.itemsize + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1); + } + + /* "numpy.pxd":818 + * offset[0] += 1 + * + * offset[0] += child.itemsize # <<<<<<<<<<<<<< + * + * if not PyDataType_HASFIELDS(child): + */ + __pyx_t_8 = 0; + (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize); + + /* "numpy.pxd":820 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); + if (__pyx_t_6) { + + /* "numpy.pxd":821 + * + * if not PyDataType_HASFIELDS(child): + * t = child.type_num # <<<<<<<<<<<<<< + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") + */ + __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); + __pyx_t_3 = 0; + + /* "numpy.pxd":822 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); + if (__pyx_t_6) { + + /* "numpy.pxd":823 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + + /* "numpy.pxd":822 + * if not PyDataType_HASFIELDS(child): + * t = child.type_num + * if end - f < 5: # <<<<<<<<<<<<<< + * raise RuntimeError(u"Format string allocated too short.") + * + */ + } + + /* "numpy.pxd":826 + * + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 98; + goto __pyx_L15; + } + + /* "numpy.pxd":827 + * # Until ticket #99 is fixed, use integers to avoid warnings + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 66; + goto __pyx_L15; + } + + /* "numpy.pxd":828 + * if t == NPY_BYTE: f[0] = 98 #"b" + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x68; + goto __pyx_L15; + } + + /* "numpy.pxd":829 + * elif t == NPY_UBYTE: f[0] = 66 #"B" + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 72; + goto __pyx_L15; + } + + /* "numpy.pxd":830 + * elif t == NPY_SHORT: f[0] = 104 #"h" + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x69; + goto __pyx_L15; + } + + /* "numpy.pxd":831 + * elif t == NPY_USHORT: f[0] = 72 #"H" + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 73; + goto __pyx_L15; + } + + /* "numpy.pxd":832 + * elif t == NPY_INT: f[0] = 105 #"i" + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x6C; + goto __pyx_L15; + } + + /* "numpy.pxd":833 + * elif t == NPY_UINT: f[0] = 73 #"I" + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 76; + goto __pyx_L15; + } + + /* "numpy.pxd":834 + * elif t == NPY_LONG: f[0] = 108 #"l" + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x71; + goto __pyx_L15; + } + + /* "numpy.pxd":835 + * elif t == NPY_ULONG: f[0] = 76 #"L" + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 81; + goto __pyx_L15; + } + + /* "numpy.pxd":836 + * elif t == NPY_LONGLONG: f[0] = 113 #"q" + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x66; + goto __pyx_L15; + } + + /* "numpy.pxd":837 + * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x64; + goto __pyx_L15; + } + + /* "numpy.pxd":838 + * elif t == NPY_FLOAT: f[0] = 102 #"f" + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 0x67; + goto __pyx_L15; + } + + /* "numpy.pxd":839 + * elif t == NPY_DOUBLE: f[0] = 100 #"d" + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x66; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "numpy.pxd":840 + * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x64; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "numpy.pxd":841 + * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + */ + __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 90; + (__pyx_v_f[1]) = 0x67; + __pyx_v_f = (__pyx_v_f + 1); + goto __pyx_L15; + } + + /* "numpy.pxd":842 + * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd + * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg + * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + */ + __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_6) { + (__pyx_v_f[0]) = 79; + goto __pyx_L15; + } + + /* "numpy.pxd":844 + * elif t == NPY_OBJECT: f[0] = 79 #"O" + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< + * f += 1 + * else: + */ + /*else*/ { + __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_5, 0, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_L15:; + + /* "numpy.pxd":845 + * else: + * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) + * f += 1 # <<<<<<<<<<<<<< + * else: + * # Cython ignores struct boundary information ("T{...}"), + */ + __pyx_v_f = (__pyx_v_f + 1); + + /* "numpy.pxd":820 + * offset[0] += child.itemsize + * + * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< + * t = child.type_num + * if end - f < 5: + */ + goto __pyx_L13; + } + + /* "numpy.pxd":849 + * # Cython ignores struct boundary information ("T{...}"), + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< + * return f + * + */ + /*else*/ { + __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_v_f = __pyx_t_9; + } + __pyx_L13:; + + /* "numpy.pxd":794 + * cdef tuple fields + * + * for childname in descr.names: # <<<<<<<<<<<<<< + * fields = descr.fields[childname] + * child, new_offset = fields + */ + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numpy.pxd":850 + * # so don't output it + * f = _util_dtypestring(child, f, end, offset) + * return f # <<<<<<<<<<<<<< + * + * + */ + __pyx_r = __pyx_v_f; + goto __pyx_L0; + + /* "numpy.pxd":783 + * return PyArray_MultiIterNew(5, a, b, c, d, e) + * + * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< + * # Recursive utility function used in __getbuffer__ to get format + * # string. The new location in the format string is returned. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_child); + __Pyx_XDECREF(__pyx_v_fields); + __Pyx_XDECREF(__pyx_v_childname); + __Pyx_XDECREF(__pyx_v_new_offset); + __Pyx_XDECREF(__pyx_v_t); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numpy.pxd":965 + * + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef PyObject* baseptr + * if base is None: + */ + +static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { + PyObject *__pyx_v_baseptr; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + __Pyx_RefNannySetupContext("set_array_base", 0); + + /* "numpy.pxd":967 + * cdef inline void set_array_base(ndarray arr, object base): + * cdef PyObject* baseptr + * if base is None: # <<<<<<<<<<<<<< + * baseptr = NULL + * else: + */ + __pyx_t_1 = (__pyx_v_base == Py_None); + __pyx_t_2 = (__pyx_t_1 != 0); + if (__pyx_t_2) { + + /* "numpy.pxd":968 + * cdef PyObject* baseptr + * if base is None: + * baseptr = NULL # <<<<<<<<<<<<<< + * else: + * Py_INCREF(base) # important to do this before decref below! + */ + __pyx_v_baseptr = NULL; + + /* "numpy.pxd":967 + * cdef inline void set_array_base(ndarray arr, object base): + * cdef PyObject* baseptr + * if base is None: # <<<<<<<<<<<<<< + * baseptr = NULL + * else: + */ + goto __pyx_L3; + } + + /* "numpy.pxd":970 + * baseptr = NULL + * else: + * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< + * baseptr = base + * Py_XDECREF(arr.base) + */ + /*else*/ { + Py_INCREF(__pyx_v_base); + + /* "numpy.pxd":971 + * else: + * Py_INCREF(base) # important to do this before decref below! + * baseptr = base # <<<<<<<<<<<<<< + * Py_XDECREF(arr.base) + * arr.base = baseptr + */ + __pyx_v_baseptr = ((PyObject *)__pyx_v_base); + } + __pyx_L3:; + + /* "numpy.pxd":972 + * Py_INCREF(base) # important to do this before decref below! + * baseptr = base + * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< + * arr.base = baseptr + * + */ + Py_XDECREF(__pyx_v_arr->base); + + /* "numpy.pxd":973 + * baseptr = base + * Py_XDECREF(arr.base) + * arr.base = baseptr # <<<<<<<<<<<<<< + * + * cdef inline object get_array_base(ndarray arr): + */ + __pyx_v_arr->base = __pyx_v_baseptr; + + /* "numpy.pxd":965 + * + * + * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< + * cdef PyObject* baseptr + * if base is None: + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "numpy.pxd":975 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + +static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("get_array_base", 0); + + /* "numpy.pxd":976 + * + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: # <<<<<<<<<<<<<< + * return None + * else: + */ + __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); + if (__pyx_t_1) { + + /* "numpy.pxd":977 + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: + * return None # <<<<<<<<<<<<<< + * else: + * return arr.base + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(Py_None); + __pyx_r = Py_None; + goto __pyx_L0; + + /* "numpy.pxd":976 + * + * cdef inline object get_array_base(ndarray arr): + * if arr.base is NULL: # <<<<<<<<<<<<<< + * return None + * else: + */ + } + + /* "numpy.pxd":979 + * return None + * else: + * return arr.base # <<<<<<<<<<<<<< + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); + __pyx_r = ((PyObject *)__pyx_v_arr->base); + goto __pyx_L0; + } + + /* "numpy.pxd":975 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +static struct PyModuleDef __pyx_moduledef = { + #if PY_VERSION_HEX < 0x03020000 + { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, + #else + PyModuleDef_HEAD_INIT, + #endif + "vbgmm", + __pyx_k_vbgmm_pyx_simple_cython_wrapper, /* m_doc */ + -1, /* m_size */ + __pyx_methods /* m_methods */, + NULL, /* m_reload */ + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, + {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, + {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, + {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_s_assign, __pyx_k_assign, sizeof(__pyx_k_assign), 0, 0, 1, 1}, + {&__pyx_n_s_bAssign, __pyx_k_bAssign, sizeof(__pyx_k_bAssign), 0, 0, 1, 1}, + {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_intc, __pyx_k_intc, sizeof(__pyx_k_intc), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_kp_s_mnt_data_chris_chris_repos_CONC, __pyx_k_mnt_data_chris_chris_repos_CONC, sizeof(__pyx_k_mnt_data_chris_chris_repos_CONC), 0, 0, 1, 0}, + {&__pyx_n_s_nClusters, __pyx_k_nClusters, sizeof(__pyx_k_nClusters), 0, 0, 1, 1}, + {&__pyx_n_s_nD, __pyx_k_nD, sizeof(__pyx_k_nD), 0, 0, 1, 1}, + {&__pyx_n_s_nK, __pyx_k_nK, sizeof(__pyx_k_nK), 0, 0, 1, 1}, + {&__pyx_n_s_nN, __pyx_k_nN, sizeof(__pyx_k_nN), 0, 0, 1, 1}, + {&__pyx_n_s_nS, __pyx_k_nS, sizeof(__pyx_k_nS), 0, 0, 1, 1}, + {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, + {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, + {&__pyx_n_s_vbgmm, __pyx_k_vbgmm, sizeof(__pyx_k_vbgmm), 0, 0, 1, 1}, + {&__pyx_n_s_xarray, __pyx_k_xarray, sizeof(__pyx_k_xarray), 0, 0, 1, 1}, + {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +static int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "numpy.pxd":215 + * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): + * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< + * + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "numpy.pxd":219 + * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) + * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): + * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< + * + * info.buf = PyArray_DATA(self) + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "numpy.pxd":257 + * if ((descr.byteorder == c'>' and little_endian) or + * (descr.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * if t == NPY_BYTE: f = "b" + * elif t == NPY_UBYTE: f = "B" + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "numpy.pxd":799 + * + * if (end - f) - (new_offset - offset[0]) < 15: + * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< + * + * if ((child.byteorder == c'>' and little_endian) or + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "numpy.pxd":803 + * if ((child.byteorder == c'>' and little_endian) or + * (child.byteorder == c'<' and not little_endian)): + * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< + * # One could encode it in the format string and have Cython + * # complain instead, BUT: < and > in format strings also imply + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "numpy.pxd":823 + * t = child.type_num + * if end - f < 5: + * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< + * + * # Until ticket #99 is fixed, use integers to avoid warnings + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "vbgmm.pyx":19 + * @cython.wraparound(False) + * + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK, debug) + */ + __pyx_tuple__7 = PyTuple_Pack(9, __pyx_n_s_xarray, __pyx_n_s_nClusters, __pyx_n_s_debug, __pyx_n_s_nN, __pyx_n_s_nD, __pyx_n_s_nK, __pyx_n_s_nS, __pyx_n_s_bAssign, __pyx_n_s_assign); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mnt_data_chris_chris_repos_CONC, __pyx_n_s_fit, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + return 0; + __pyx_L1_error:; + return -1; +} + +#if PY_MAJOR_VERSION < 3 +PyMODINIT_FUNC initvbgmm(void); /*proto*/ +PyMODINIT_FUNC initvbgmm(void) +#else +PyMODINIT_FUNC PyInit_vbgmm(void); /*proto*/ +PyMODINIT_FUNC PyInit_vbgmm(void) +#endif +{ + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_REFNANNY + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); + if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); + } + #endif + __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_vbgmm(void)", 0); + if (__Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("vbgmm", __pyx_methods, __pyx_k_vbgmm_pyx_simple_cython_wrapper, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #if CYTHON_COMPILING_IN_PYPY + Py_INCREF(__pyx_b); + #endif + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + if (__pyx_module_is_main_vbgmm) { + if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (!PyDict_GetItemString(modules, "vbgmm")) { + if (unlikely(PyDict_SetItemString(modules, "vbgmm", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Global init code ---*/ + /*--- Variable export code ---*/ + /*--- Function export code ---*/ + /*--- Type init code ---*/ + /*--- Type import code ---*/ + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", + #if CYTHON_COMPILING_IN_PYPY + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /*--- Variable import code ---*/ + /*--- Function import code ---*/ + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + #endif + + /* "vbgmm.pyx":11 + * + * # import both numpy and the Cython declarations for numpy + * import numpy as np # <<<<<<<<<<<<<< + * cimport numpy as np + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "vbgmm.pyx":19 + * @cython.wraparound(False) + * + * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< + * """ + * fit (xarray, assign, nK, debug) + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5vbgmm_1fit, NULL, __pyx_n_s_vbgmm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_fit, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "vbgmm.pyx":1 + * """ # <<<<<<<<<<<<<< + * vbgmm.pyx + * + */ + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numpy.pxd":975 + * arr.base = baseptr + * + * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< + * if arr.base is NULL: + * return None + */ + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init vbgmm", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_DECREF(__pyx_m); __pyx_m = 0; + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init vbgmm"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if PY_MAJOR_VERSION < 3 + return; + #else + return __pyx_m; + #endif +} + +/* --- Runtime support code --- */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule((char *)modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) { + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); +} +static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, + const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (none_allowed && obj == Py_None) return 1; + else if (exact) { + if (likely(Py_TYPE(obj) == type)) return 1; + #if PY_MAJOR_VERSION == 2 + else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(PyObject_TypeCheck(obj, type))) return 1; + } + __Pyx_RaiseArgumentTypeInvalid(name, obj, type); + return 0; +} + +static CYTHON_INLINE int __Pyx_IsLittleEndian(void) { + unsigned int n = 1; + return *(unsigned char*)(&n) != 0; +} +static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, + __Pyx_BufFmt_StackElem* stack, + __Pyx_TypeInfo* type) { + stack[0].field = &ctx->root; + stack[0].parent_offset = 0; + ctx->root.type = type; + ctx->root.name = "buffer dtype"; + ctx->root.offset = 0; + ctx->head = stack; + ctx->head->field = &ctx->root; + ctx->fmt_offset = 0; + ctx->head->parent_offset = 0; + ctx->new_packmode = '@'; + ctx->enc_packmode = '@'; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->is_complex = 0; + ctx->is_valid_array = 0; + ctx->struct_alignment = 0; + while (type->typegroup == 'S') { + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = 0; + type = type->fields->type; + } +} +static int __Pyx_BufFmt_ParseNumber(const char** ts) { + int count; + const char* t = *ts; + if (*t < '0' || *t > '9') { + return -1; + } else { + count = *t++ - '0'; + while (*t >= '0' && *t < '9') { + count *= 10; + count += *t++ - '0'; + } + } + *ts = t; + return count; +} +static int __Pyx_BufFmt_ExpectNumber(const char **ts) { + int number = __Pyx_BufFmt_ParseNumber(ts); + if (number == -1) + PyErr_Format(PyExc_ValueError,\ + "Does not understand character buffer dtype format string ('%c')", **ts); + return number; +} +static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { + PyErr_Format(PyExc_ValueError, + "Unexpected format string character: '%c'", ch); +} +static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { + switch (ch) { + case 'c': return "'char'"; + case 'b': return "'signed char'"; + case 'B': return "'unsigned char'"; + case 'h': return "'short'"; + case 'H': return "'unsigned short'"; + case 'i': return "'int'"; + case 'I': return "'unsigned int'"; + case 'l': return "'long'"; + case 'L': return "'unsigned long'"; + case 'q': return "'long long'"; + case 'Q': return "'unsigned long long'"; + case 'f': return (is_complex ? "'complex float'" : "'float'"); + case 'd': return (is_complex ? "'complex double'" : "'double'"); + case 'g': return (is_complex ? "'complex long double'" : "'long double'"); + case 'T': return "a struct"; + case 'O': return "Python object"; + case 'P': return "a pointer"; + case 's': case 'p': return "a string"; + case 0: return "end"; + default: return "unparseable format string"; + } +} +static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return 2; + case 'i': case 'I': case 'l': case 'L': return 4; + case 'q': case 'Q': return 8; + case 'f': return (is_complex ? 8 : 4); + case 'd': return (is_complex ? 16 : 8); + case 'g': { + PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); + return 0; + } + case 'O': case 'P': return sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { + switch (ch) { + case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(short); + case 'i': case 'I': return sizeof(int); + case 'l': case 'L': return sizeof(long); + #ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(PY_LONG_LONG); + #endif + case 'f': return sizeof(float) * (is_complex ? 2 : 1); + case 'd': return sizeof(double) * (is_complex ? 2 : 1); + case 'g': return sizeof(long double) * (is_complex ? 2 : 1); + case 'O': case 'P': return sizeof(void*); + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +typedef struct { char c; short x; } __Pyx_st_short; +typedef struct { char c; int x; } __Pyx_st_int; +typedef struct { char c; long x; } __Pyx_st_long; +typedef struct { char c; float x; } __Pyx_st_float; +typedef struct { char c; double x; } __Pyx_st_double; +typedef struct { char c; long double x; } __Pyx_st_longdouble; +typedef struct { char c; void *x; } __Pyx_st_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_st_float) - sizeof(float); + case 'd': return sizeof(__Pyx_st_double) - sizeof(double); + case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +/* These are for computing the padding at the end of the struct to align + on the first member of the struct. This will probably the same as above, + but we don't have any guarantees. + */ +typedef struct { short x; char c; } __Pyx_pad_short; +typedef struct { int x; char c; } __Pyx_pad_int; +typedef struct { long x; char c; } __Pyx_pad_long; +typedef struct { float x; char c; } __Pyx_pad_float; +typedef struct { double x; char c; } __Pyx_pad_double; +typedef struct { long double x; char c; } __Pyx_pad_longdouble; +typedef struct { void *x; char c; } __Pyx_pad_void_p; +#ifdef HAVE_LONG_LONG +typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; +#endif +static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { + switch (ch) { + case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; + case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); + case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); + case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); +#ifdef HAVE_LONG_LONG + case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); +#endif + case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); + case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); + case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); + case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); + default: + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } +} +static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { + switch (ch) { + case 'c': + return 'H'; + case 'b': case 'h': case 'i': + case 'l': case 'q': case 's': case 'p': + return 'I'; + case 'B': case 'H': case 'I': case 'L': case 'Q': + return 'U'; + case 'f': case 'd': case 'g': + return (is_complex ? 'C' : 'R'); + case 'O': + return 'O'; + case 'P': + return 'P'; + default: { + __Pyx_BufFmt_RaiseUnexpectedChar(ch); + return 0; + } + } +} +static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { + if (ctx->head == NULL || ctx->head->field == &ctx->root) { + const char* expected; + const char* quote; + if (ctx->head == NULL) { + expected = "end"; + quote = ""; + } else { + expected = ctx->head->field->type->name; + quote = "'"; + } + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected %s%s%s but got %s", + quote, expected, quote, + __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); + } else { + __Pyx_StructField* field = ctx->head->field; + __Pyx_StructField* parent = (ctx->head - 1)->field; + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", + field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), + parent->type->name, field->name); + } +} +static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { + char group; + size_t size, offset, arraysize = 1; + if (ctx->enc_type == 0) return 0; + if (ctx->head->field->type->arraysize[0]) { + int i, ndim = 0; + if (ctx->enc_type == 's' || ctx->enc_type == 'p') { + ctx->is_valid_array = ctx->head->field->type->ndim == 1; + ndim = 1; + if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { + PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %zu", + ctx->head->field->type->arraysize[0], ctx->enc_count); + return -1; + } + } + if (!ctx->is_valid_array) { + PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", + ctx->head->field->type->ndim, ndim); + return -1; + } + for (i = 0; i < ctx->head->field->type->ndim; i++) { + arraysize *= ctx->head->field->type->arraysize[i]; + } + ctx->is_valid_array = 0; + ctx->enc_count = 1; + } + group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); + do { + __Pyx_StructField* field = ctx->head->field; + __Pyx_TypeInfo* type = field->type; + if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { + size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); + } else { + size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); + } + if (ctx->enc_packmode == '@') { + size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); + size_t align_mod_offset; + if (align_at == 0) return -1; + align_mod_offset = ctx->fmt_offset % align_at; + if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; + if (ctx->struct_alignment == 0) + ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, + ctx->is_complex); + } + if (type->size != size || type->typegroup != group) { + if (type->typegroup == 'C' && type->fields != NULL) { + size_t parent_offset = ctx->head->parent_offset + field->offset; + ++ctx->head; + ctx->head->field = type->fields; + ctx->head->parent_offset = parent_offset; + continue; + } + if ((type->typegroup == 'H' || group == 'H') && type->size == size) { + } else { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + } + offset = ctx->head->parent_offset + field->offset; + if (ctx->fmt_offset != offset) { + PyErr_Format(PyExc_ValueError, + "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", + (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); + return -1; + } + ctx->fmt_offset += size; + if (arraysize) + ctx->fmt_offset += (arraysize - 1) * size; + --ctx->enc_count; + while (1) { + if (field == &ctx->root) { + ctx->head = NULL; + if (ctx->enc_count != 0) { + __Pyx_BufFmt_RaiseExpected(ctx); + return -1; + } + break; + } + ctx->head->field = ++field; + if (field->type == NULL) { + --ctx->head; + field = ctx->head->field; + continue; + } else if (field->type->typegroup == 'S') { + size_t parent_offset = ctx->head->parent_offset + field->offset; + if (field->type->fields->type == NULL) continue; + field = field->type->fields; + ++ctx->head; + ctx->head->field = field; + ctx->head->parent_offset = parent_offset; + break; + } else { + break; + } + } + } while (ctx->enc_count); + ctx->enc_type = 0; + ctx->is_complex = 0; + return 0; +} +static CYTHON_INLINE PyObject * +__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) +{ + const char *ts = *tsp; + int i = 0, number; + int ndim = ctx->head->field->type->ndim; +; + ++ts; + if (ctx->new_count != 1) { + PyErr_SetString(PyExc_ValueError, + "Cannot handle repeated arrays in format string"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + while (*ts && *ts != ')') { + switch (*ts) { + case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; + default: break; + } + number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) + return PyErr_Format(PyExc_ValueError, + "Expected a dimension of size %zu, got %d", + ctx->head->field->type->arraysize[i], number); + if (*ts != ',' && *ts != ')') + return PyErr_Format(PyExc_ValueError, + "Expected a comma in format string, got '%c'", *ts); + if (*ts == ',') ts++; + i++; + } + if (i != ndim) + return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", + ctx->head->field->type->ndim, i); + if (!*ts) { + PyErr_SetString(PyExc_ValueError, + "Unexpected end of format string, expected ')'"); + return NULL; + } + ctx->is_valid_array = 1; + ctx->new_count = 1; + *tsp = ++ts; + return Py_None; +} +static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { + int got_Z = 0; + while (1) { + switch(*ts) { + case 0: + if (ctx->enc_type != 0 && ctx->head == NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + if (ctx->head != NULL) { + __Pyx_BufFmt_RaiseExpected(ctx); + return NULL; + } + return ts; + case ' ': + case '\r': + case '\n': + ++ts; + break; + case '<': + if (!__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '>': + case '!': + if (__Pyx_IsLittleEndian()) { + PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); + return NULL; + } + ctx->new_packmode = '='; + ++ts; + break; + case '=': + case '@': + case '^': + ctx->new_packmode = *ts++; + break; + case 'T': + { + const char* ts_after_sub; + size_t i, struct_count = ctx->new_count; + size_t struct_alignment = ctx->struct_alignment; + ctx->new_count = 1; + ++ts; + if (*ts != '{') { + PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); + return NULL; + } + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + ctx->enc_count = 0; + ctx->struct_alignment = 0; + ++ts; + ts_after_sub = ts; + for (i = 0; i != struct_count; ++i) { + ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); + if (!ts_after_sub) return NULL; + } + ts = ts_after_sub; + if (struct_alignment) ctx->struct_alignment = struct_alignment; + } + break; + case '}': + { + size_t alignment = ctx->struct_alignment; + ++ts; + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_type = 0; + if (alignment && ctx->fmt_offset % alignment) { + ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); + } + } + return ts; + case 'x': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->fmt_offset += ctx->new_count; + ctx->new_count = 1; + ctx->enc_count = 0; + ctx->enc_type = 0; + ctx->enc_packmode = ctx->new_packmode; + ++ts; + break; + case 'Z': + got_Z = 1; + ++ts; + if (*ts != 'f' && *ts != 'd' && *ts != 'g') { + __Pyx_BufFmt_RaiseUnexpectedChar('Z'); + return NULL; + } + case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': + case 'l': case 'L': case 'q': case 'Q': + case 'f': case 'd': case 'g': + case 'O': case 'p': + if (ctx->enc_type == *ts && got_Z == ctx->is_complex && + ctx->enc_packmode == ctx->new_packmode) { + ctx->enc_count += ctx->new_count; + ctx->new_count = 1; + got_Z = 0; + ++ts; + break; + } + case 's': + if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; + ctx->enc_count = ctx->new_count; + ctx->enc_packmode = ctx->new_packmode; + ctx->enc_type = *ts; + ctx->is_complex = got_Z; + ++ts; + ctx->new_count = 1; + got_Z = 0; + break; + case ':': + ++ts; + while(*ts != ':') ++ts; + ++ts; + break; + case '(': + if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; + break; + default: + { + int number = __Pyx_BufFmt_ExpectNumber(&ts); + if (number == -1) return NULL; + ctx->new_count = (size_t)number; + } + } + } +} +static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { + buf->buf = NULL; + buf->obj = NULL; + buf->strides = __Pyx_zeros; + buf->shape = __Pyx_zeros; + buf->suboffsets = __Pyx_minusones; +} +static CYTHON_INLINE int __Pyx_GetBufferAndValidate( + Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, + int nd, int cast, __Pyx_BufFmt_StackElem* stack) +{ + if (obj == Py_None || obj == NULL) { + __Pyx_ZeroBuffer(buf); + return 0; + } + buf->buf = NULL; + if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; + if (buf->ndim != nd) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + nd, buf->ndim); + goto fail; + } + if (!cast) { + __Pyx_BufFmt_Context ctx; + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; + } + if ((unsigned)buf->itemsize != dtype->size) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", + buf->itemsize, (buf->itemsize > 1) ? "s" : "", + dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); + goto fail; + } + if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; + return 0; +fail:; + __Pyx_ZeroBuffer(buf); + return -1; +} +static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { + if (info->buf == NULL) return; + if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; + __Pyx_ReleaseBuffer(info); +} + +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON + result = PyDict_GetItem(__pyx_d, name); + if (likely(result)) { + Py_INCREF(result); + } else { +#else + result = PyObject_GetItem(__pyx_d, name); + if (!result) { + PyErr_Clear(); +#endif + result = __Pyx_GetBuiltinName(name); + } + return result; +} + +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + if (likely(PyObject_TypeCheck(obj, type))) + return 1; + PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", + Py_TYPE(obj)->tp_name, type->tp_name); + return 0; +} + +static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { +#if CYTHON_COMPILING_IN_CPYTHON + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyThreadState *tstate = PyThreadState_GET(); + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +#else + PyErr_Restore(type, value, tb); +#endif +} +static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { +#if CYTHON_COMPILING_IN_CPYTHON + PyThreadState *tstate = PyThreadState_GET(); + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +#else + PyErr_Fetch(type, value, tb); +#endif +} + +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } +#if PY_VERSION_HEX >= 0x03030000 + if (cause) { +#else + if (cause && cause != Py_None) { +#endif + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = PyThreadState_GET(); + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); +} + +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_VERSION_HEX < 0x03030000 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.')) { + #if PY_VERSION_HEX < 0x03030000 + PyObject *py_level = PyInt_FromLong(1); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + #endif + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_VERSION_HEX < 0x03030000 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_VERSION_HEX < 0x03030000 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + py_code = __pyx_find_code_object(c_line ? c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? c_line : py_line, py_code); + } + py_frame = PyFrame_New( + PyThreadState_GET(), /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + py_frame->f_lineno = py_line; + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); + PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); + return -1; +} +static void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject *obj = view->obj; + if (!obj) return; + if (PyObject_CheckBuffer(obj)) { + PyBuffer_Release(view); + return; + } + if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; } + Py_DECREF(obj); + view->obj = NULL; +} +#endif + + + #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" +#endif + +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) -1, const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) digits[0]) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) -1, const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(a, a); + case 3: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(z, a); + case 4: + z = __Pyx_c_prodf(a, a); + return __Pyx_c_prodf(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } + r = a.real; + theta = 0; + } else { + r = __Pyx_c_absf(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif +#endif + +#if CYTHON_CCOMPLEX + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); + } + #else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; + } + #endif +#else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; + } +#endif + +#if CYTHON_CCOMPLEX +#else + static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double denom = b.real * b.real + b.imag * b.imag; + z.real = (a.real * b.real + a.imag * b.imag) / denom; + z.imag = (a.imag * b.real - a.real * b.imag) / denom; + return z; + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrt(z.real*z.real + z.imag*z.imag); + #else + return hypot(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(a, a); + case 3: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(z, a); + case 4: + z = __Pyx_c_prod(a, a); + return __Pyx_c_prod(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } + r = a.real; + theta = 0; + } else { + r = __Pyx_c_abs(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif +#endif + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ptrdiff_t(ptrdiff_t value) { + const ptrdiff_t neg_one = (ptrdiff_t) -1, const_zero = (ptrdiff_t) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(ptrdiff_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(ptrdiff_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(ptrdiff_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(ptrdiff_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(ptrdiff_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(ptrdiff_t), + little, !is_unsigned); + } +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) { + const enum NPY_TYPES neg_one = (enum NPY_TYPES) -1, const_zero = (enum NPY_TYPES) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(enum NPY_TYPES) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(enum NPY_TYPES) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(enum NPY_TYPES) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(enum NPY_TYPES), + little, !is_unsigned); + } +} + +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) -1, const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) -1, const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) digits[0]) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_Int(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_Int(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); + } + return 0; +} + +#ifndef __PYX_HAVE_RT_ImportModule +#define __PYX_HAVE_RT_ImportModule +static PyObject *__Pyx_ImportModule(const char *name) { + PyObject *py_name = 0; + PyObject *py_module = 0; + py_name = __Pyx_PyIdentifier_FromString(name); + if (!py_name) + goto bad; + py_module = PyImport_Import(py_name); + Py_DECREF(py_name); + return py_module; +bad: + Py_XDECREF(py_name); + return 0; +} +#endif + +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, + size_t size, int strict) +{ + PyObject *py_module = 0; + PyObject *result = 0; + PyObject *py_name = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + py_module = __Pyx_ImportModule(module_name); + if (!py_module) + goto bad; + py_name = __Pyx_PyIdentifier_FromString(class_name); + if (!py_name) + goto bad; + result = PyObject_GetAttr(py_module, py_name); + Py_DECREF(py_name); + py_name = 0; + Py_DECREF(py_module); + py_module = 0; + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if (!strict && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility", + module_name, class_name); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + else if ((size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s has the wrong size, try recompiling", + module_name, class_name); + goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(py_module); + Py_XDECREF(result); + return NULL; +} +#endif + +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { + while (t->p) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if CYTHON_COMPILING_IN_CPYTHON && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { +#if PY_VERSION_HEX < 0x03030000 + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +#else + if (__Pyx_PyUnicode_READY(o) == -1) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (PyUnicode_IS_ASCII(o)) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +#endif + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { + PyNumberMethods *m; + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (PyInt_Check(x) || PyLong_Check(x)) +#else + if (PyLong_Check(x)) +#endif + return __Pyx_NewRef(x); + m = Py_TYPE(x)->tp_as_number; +#if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = PyNumber_Long(x); + } +#else + if (m && m->nb_int) { + name = "int"; + res = PyNumber_Long(x); + } +#endif + if (res) { +#if PY_MAJOR_VERSION < 3 + if (!PyInt_Check(res) && !PyLong_Check(res)) { +#else + if (!PyLong_Check(res)) { +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + name, name, Py_TYPE(res)->tp_name); + Py_DECREF(res); + return NULL; + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(x); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/c-concoct2/vbgmm.pyx b/c-concoct2/vbgmm.pyx index 4ca85d1..270906d 100644 --- a/c-concoct2/vbgmm.pyx +++ b/c-concoct2/vbgmm.pyx @@ -12,10 +12,10 @@ import numpy as np cimport numpy as np # declare the interface to the C code -cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug) - +cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign) @cython.boundscheck(False) @cython.wraparound(False) + def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): """ fit (xarray, assign, nK, debug) @@ -28,14 +28,16 @@ def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): param: assigns -- cluster assignments must have same number of rows as xarray """ - cdef int nN, nD, nK, nS + cdef int nN, nD, nK, nS, bAssign nN, nD = xarray.shape[0], xarray.shape[1] nK = nClusters + + bAssign = 0 cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) - c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug) + c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) return assign diff --git a/setup.py b/setup.py index 2ebd5f2..8363946 100644 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ cmdclass = {'build_ext': build_ext}, ext_modules = [ Extension("vbgmm", sources=["./c-concoct2/vbgmm.pyx", "./c-concoct2/c_vbgmm_fit.c"], - libraries =['gsl', 'gslcblas'], include_dirs=include_dirs_for_concoct), + libraries =['gsl', 'gslcblas','gomp'], include_dirs=include_dirs_for_concoct, extra_compile_args = ['-fopenmp','-O3','-std=c99']) ], install_requires=['cython>=0.19.1', 'numpy>=1.7.1', From 62c0d129f456f1f4c2cb2facbdfec6bb1b96cfc7 Mon Sep 17 00:00:00 2001 From: chrisquince Date: Thu, 2 Mar 2017 16:43:28 +0000 Subject: [PATCH 22/78] Control multithreading --- c-concoct2/c_vbgmm_fit.c | 8 ++++---- c-concoct2/c_vbgmm_fit.h | 2 +- c-concoct2/vbgmm.pyx | 12 +++++++----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index c0cf339..128b71c 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -34,15 +34,15 @@ /*User includes*/ #include "c_vbgmm_fit.h" -void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign) +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign, int nThreads) { - driverMP(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign); + driverMP(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign, nThreads); return; } int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, - int nMaxIter, double dEpsilon, int debug, int bAssign) + int nMaxIter, double dEpsilon, int debug, int bAssign, int nThreads) { t_Params tParams; t_Data tData; @@ -63,7 +63,7 @@ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned l ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); /*set OMP thread number*/ - nNthreads = 192;//omp_get_max_threads(); + nNthreads = nThreads; nT = nN / 32 + 1; printf("%d %d %d\n",nN,nT,nNthreads); if (nT < nNthreads){ diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index ecbca46..0d16b82 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -121,7 +121,7 @@ typedef struct s_Cluster /*user defines*/ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, - int nMaxIter, double dEpsilon, int debug, int bAssign); + int nMaxIter, double dEpsilon, int debug, int bAssign, int nThreads); int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug, int bAssign); diff --git a/c-concoct2/vbgmm.pyx b/c-concoct2/vbgmm.pyx index 270906d..d95a4d9 100644 --- a/c-concoct2/vbgmm.pyx +++ b/c-concoct2/vbgmm.pyx @@ -12,13 +12,13 @@ import numpy as np cimport numpy as np # declare the interface to the C code -cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign) +cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign, int nThreads) @cython.boundscheck(False) @cython.wraparound(False) -def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): +def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug, threads): """ - fit (xarray, assign, nK, debug) + fit (xarray, assign, nK, debug, nThreads) Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters @@ -28,16 +28,18 @@ def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): param: assigns -- cluster assignments must have same number of rows as xarray """ - cdef int nN, nD, nK, nS, bAssign + cdef int nN, nD, nK, nS, bAssign, nThreads nN, nD = xarray.shape[0], xarray.shape[1] nK = nClusters + nThreads = threads + bAssign = 0 cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) - c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) + c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign, nThreads) return assign From 31557e163b253c87400ecaa9d1394bded9bd3172 Mon Sep 17 00:00:00 2001 From: chrisquince Date: Thu, 2 Mar 2017 16:44:52 +0000 Subject: [PATCH 23/78] Mulithreaded version --- bin/concoct | 44 +++--------------------- bin/concoctV | 95 ---------------------------------------------------- 2 files changed, 5 insertions(+), 134 deletions(-) delete mode 100755 bin/concoctV diff --git a/bin/concoct b/bin/concoct index 23e9e6b..a4da680 100755 --- a/bin/concoct +++ b/bin/concoct @@ -65,46 +65,14 @@ def main(args): logging.info('PCA transformed data.') - logging.info('Will call vbgmm with parameters: %s, %s, %s' % (Output.CONCOCT_PATH, args.clusters, args.length_threshold)) - import ipdb; ipdb.set_trace() + logging.info('Will call vbgmm with parameters: %s, %s, %s, %s' % (Output.CONCOCT_PATH, args.clusters, args.length_threshold, args.threads)) + #import ipdb; ipdb.set_trace() NC = transform_filter.shape[0] assign = np.zeros(NC,dtype=np.int32) debug=False - - nSplit=4 - kmeans = KMeans(init='k-means++', n_clusters=nSplit, n_init=10) - kmeans.fit(transform_filter) - labels = kmeans.labels_ - - fit_arguments = [] - - l = 0 - for s in range(nSplit): - transform_S = np.copy(transform_filter[labels==s,],order='C') - - NS=transform_S.shape[0] - - #assign_S = np.zeros(NS,dtype=np.int32) - - fit_arguments.append([transform_S, args.clusters, debug]) - - assigns = prll_map(vbgmm_fit_wrapper, fit_arguments) - - for s in range(nSplit): - #[transform_S, assign_S, args.clusters, debug] = fit_arguments[s] - assign_S = assigns[s] - map_S = np.where(labels==s) - - setS = sorted(list(set(assign_S))) - mapS = {} - for a in setS: - mapS[a] = l - l = l + 1 - - n = 0 - for m in np.nditer(map_S): - assign[m] = mapS[assign_S[n]] - n=n+1 + + assign = vbgmm.fit(np.copy(transform_filter,order='C'),int(args.clusters),False,int(args.threads)) + Output.write_assign( assign, @@ -112,8 +80,6 @@ def main(args): joined.index, ) -# vbgmm.fit(Output.CONCOCT_PATH, args.clusters, args.length_threshold,args.seed,args.iterations,args.epsilon,args.converge_out) - logging.info("CONCOCT Finished") diff --git a/bin/concoctV b/bin/concoctV deleted file mode 100755 index b5fe454..0000000 --- a/bin/concoctV +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env python -from __future__ import division - -import sys -import logging -import vbgmm -import numpy as np - -from sklearn.cluster import KMeans - -from concoct.output import Output -from concoct.parser import arguments -from concoct.cluster import cluster -from concoct.input import load_data -from concoct.transform import perform_pca -from concoct.processes import prll_map - -def vbgmm_fit_wrapper(args): - return vbgmm.fit(*args) - -def main(args): - # Initialize output handling - Output(args.basename,args) - - composition, cov, cov_range = load_data(args) - - # If there are zero or one contig that exceed the filter, do not continue - if len(composition) < 2: - logging.error('Not enough contigs pass the threshold filter. Exiting!') - sys.exit(-1) - - if cov is not None: - joined = composition.join(cov.ix[:,cov_range[0]:cov_range[1]],how="inner") - else: - joined = composition - - # Fix special case in pca_components - if args.pca_components == "All": - args.pca_components = joined[args.length_threshold_filter].shape[1] - - #PCA on the contigs that have kmer count greater than length_threshold - transform_filter, pca = perform_pca( - joined, - args.pca_components - ) - - logging.info('Performed PCA, resulted in %s dimensions' % transform_filter.shape[1]) - - if not args.no_original_data: - Output.write_original_data( - joined, - args.length_threshold - ) - - Output.write_pca( - transform_filter, - args.length_threshold, - joined.index, - ) - - Output.write_pca_components( - pca.components_, - args.length_threshold - ) - - logging.info('PCA transformed data.') - - logging.info('Will call vbgmm with parameters: %s, %s, %s' % (Output.CONCOCT_PATH, args.clusters, args.length_threshold)) - #import ipdb; ipdb.set_trace() - NC = transform_filter.shape[0] - assign = np.zeros(NC,dtype=np.int32) - debug=False - - assign = vbgmm.fit(np.copy(transform_filter,order='C'),int(args.clusters),False) - - - Output.write_assign( - assign, - args.length_threshold, - joined.index, - ) - - logging.info("CONCOCT Finished") - - -if __name__=="__main__": - args = arguments() - if args.total_percentage_pca == 100: - args.pca_components = "All" - else: - args.pca_components = args.total_percentage_pca/100.0 - - results = main(args) - - print >> sys.stderr, "CONCOCT Finished, the log shows how it went." From 517d64863fd247521b7513aad247d5946ac70559 Mon Sep 17 00:00:00 2001 From: chrisquince Date: Thu, 2 Mar 2017 16:48:08 +0000 Subject: [PATCH 24/78] Updated parser --- concoct/parser.py | 4 ++++ setup.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/concoct/parser.py b/concoct/parser.py index 1ab78d8..5d4ef55 100644 --- a/concoct/parser.py +++ b/concoct/parser.py @@ -39,6 +39,10 @@ def arguments(): #Kmer length, kmer count threshold and read length parser.add_argument('-k','--kmer_length', type=int, default=4, help='specify kmer length, default 4.') + + parser.add_argument('-t','--threads', type=int, default=1, + help='Number of threads to use') + parser.add_argument('-l','--length_threshold', type=int, default=1000, help=("specify the sequence length threshold, contigs shorter than this " "value will not be included. Defaults to 1000.")) diff --git a/setup.py b/setup.py index 8363946..e73bd3f 100644 --- a/setup.py +++ b/setup.py @@ -30,7 +30,7 @@ url='https://github.com/BinPro/CONCOCT', license='FreeBSD', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), - scripts=["bin/concoct"], + scripts=["bin/concoct","bin/concoct_refine"], include_package_data=True, zip_safe=False, cmdclass = {'build_ext': build_ext}, From 878e18749675f1992e0b873fcce7827f37343ace Mon Sep 17 00:00:00 2001 From: chrisquince Date: Thu, 2 Mar 2017 17:02:53 +0000 Subject: [PATCH 25/78] Simple script for sorting scg table --- scripts/Sort.pl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100755 scripts/Sort.pl diff --git a/scripts/Sort.pl b/scripts/Sort.pl new file mode 100755 index 0000000..0e628e9 --- /dev/null +++ b/scripts/Sort.pl @@ -0,0 +1,18 @@ +#!/usr/bin/perl + +my $line = ; + +print "$line"; + +my %hashLines = (); +while($line = ){ + chomp($line); + + my @tokens = split(/,/,$line); + + $hashLines{$tokens[0]} = $line; +} + +foreach $key (sort {$a <=> $b} keys %hashLines){ + print "$hashLines{$key}\n"; +} From a2e25f85a710ae33f18b3a653f7a2eded4a02e03 Mon Sep 17 00:00:00 2001 From: chrisquince Date: Thu, 2 Mar 2017 17:42:11 +0000 Subject: [PATCH 26/78] Added thread option --- bin/concoct_refine | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bin/concoct_refine b/bin/concoct_refine index 607cd81..f3737b0 100755 --- a/bin/concoct_refine +++ b/bin/concoct_refine @@ -26,6 +26,9 @@ def main(argv): parser.add_argument("scg_file", help="string specifying scg frequency file") + parser.add_argument('-t','--threads',default=1, type=int, + help=("number of threads to use defaults to one")) + args = parser.parse_args() # import ipdb; ipdb.set_trace() @@ -61,9 +64,9 @@ def main(argv): pca_object = PCA(n_components=0.90).fit(slice_k) transform_k = pca_object.transform(slice_k) - NK = med_scgs[k]*8 - print "Run CONCOCT for " + str(k) + "with " + str(NK) + "clusters" - assigns = vbgmm.fit(np.copy(transform_k,order='C'),int(NK),False) + NK = med_scgs[k]*2 + print "Run CONCOCT for " + str(k) + "with " + str(NK) + "clusters" + " using " + str(args.threads) + "threads" + assigns = vbgmm.fit(np.copy(transform_k,order='C'),int(NK),False,int(args.threads)) kK = np.max(assigns) + 1 From 82ad2792a1557cd1ce179074dbcccb665e477bbe Mon Sep 17 00:00:00 2001 From: chrisquince Date: Thu, 2 Mar 2017 20:03:38 +0000 Subject: [PATCH 27/78] Added e argument --- bin/concoct_refine | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/concoct_refine b/bin/concoct_refine index f3737b0..1603530 100755 --- a/bin/concoct_refine +++ b/bin/concoct_refine @@ -26,6 +26,9 @@ def main(argv): parser.add_argument("scg_file", help="string specifying scg frequency file") + parser.add_argument('-e','--expansion_factor',default=2, type=int, + help=("number of clusters to expand by")) + parser.add_argument('-t','--threads',default=1, type=int, help=("number of threads to use defaults to one")) @@ -64,7 +67,7 @@ def main(argv): pca_object = PCA(n_components=0.90).fit(slice_k) transform_k = pca_object.transform(slice_k) - NK = med_scgs[k]*2 + NK = med_scgs[k]*args.expansion_factor print "Run CONCOCT for " + str(k) + "with " + str(NK) + "clusters" + " using " + str(args.threads) + "threads" assigns = vbgmm.fit(np.copy(transform_k,order='C'),int(NK),False,int(args.threads)) kK = np.max(assigns) + 1 From d907def14379ae38ec50894f3cd57fcbb6e94252 Mon Sep 17 00:00:00 2001 From: chrisquince Date: Wed, 10 May 2017 20:00:49 +0100 Subject: [PATCH 28/78] Fixed bugs --- bin/concoct | 3 +-- bin/concoct_refine | 2 +- c-concoct2/vbgmm.pyx | 6 +++--- concoct/output.py | 3 +-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/bin/concoct b/bin/concoct index a4da680..92fc68d 100755 --- a/bin/concoct +++ b/bin/concoct @@ -69,9 +69,8 @@ def main(args): #import ipdb; ipdb.set_trace() NC = transform_filter.shape[0] assign = np.zeros(NC,dtype=np.int32) - debug=False - assign = vbgmm.fit(np.copy(transform_filter,order='C'),int(args.clusters),False,int(args.threads)) + assign = vbgmm.fit(np.copy(transform_filter,order='C'),int(args.clusters),int(args.threads)) Output.write_assign( diff --git a/bin/concoct_refine b/bin/concoct_refine index 1603530..1699fbe 100755 --- a/bin/concoct_refine +++ b/bin/concoct_refine @@ -69,7 +69,7 @@ def main(argv): NK = med_scgs[k]*args.expansion_factor print "Run CONCOCT for " + str(k) + "with " + str(NK) + "clusters" + " using " + str(args.threads) + "threads" - assigns = vbgmm.fit(np.copy(transform_k,order='C'),int(NK),False,int(args.threads)) + assigns = vbgmm.fit(np.copy(transform_k,order='C'),int(NK),int(args.threads)) kK = np.max(assigns) + 1 diff --git a/c-concoct2/vbgmm.pyx b/c-concoct2/vbgmm.pyx index d95a4d9..5961769 100644 --- a/c-concoct2/vbgmm.pyx +++ b/c-concoct2/vbgmm.pyx @@ -16,7 +16,7 @@ cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign @cython.boundscheck(False) @cython.wraparound(False) -def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug, threads): +def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, threads): """ fit (xarray, assign, nK, debug, nThreads) @@ -28,7 +28,7 @@ def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug, param: assigns -- cluster assignments must have same number of rows as xarray """ - cdef int nN, nD, nK, nS, bAssign, nThreads + cdef int nN, nD, nK, nS, bAssign, nThreads, debug nN, nD = xarray.shape[0], xarray.shape[1] @@ -37,7 +37,7 @@ def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug, nThreads = threads bAssign = 0 - + debug = 0 cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign, nThreads) diff --git a/concoct/output.py b/concoct/output.py index 041bc84..974c2fa 100644 --- a/concoct/output.py +++ b/concoct/output.py @@ -82,10 +82,9 @@ def write_assign(self, assign, threshold, index): transform_df = p.DataFrame(assign, index=index) transform_df.to_csv( self.ASSIGN_FILE_BASE.format(threshold), - int_format=self.INT_FORMAT, index_label="contig_id" ) - logging.info('Wrote PCA transformed file.') + logging.info('Wrote assign file.') @classmethod From 2c0ab869e30997e9e1667132f5370c63403c824d Mon Sep 17 00:00:00 2001 From: chrisquince Date: Sat, 29 Jul 2017 14:55:01 +0000 Subject: [PATCH 29/78] Better behaved C calling --- c-concoct2/c_vbgmm_fit.c | 4 +++- c-concoct2/c_vbgmm_fit.h | 3 +++ c-concoct2/vbgmm.pyx | 6 ++---- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct2/c_vbgmm_fit.c index 128b71c..7980871 100644 --- a/c-concoct2/c_vbgmm_fit.c +++ b/c-concoct2/c_vbgmm_fit.c @@ -34,8 +34,10 @@ /*User includes*/ #include "c_vbgmm_fit.h" -void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign, int nThreads) +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int nThreads) { + int debug = 0; + int bAssign = 0; driverMP(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign, nThreads); return; diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct2/c_vbgmm_fit.h index 0d16b82..48a8d17 100644 --- a/c-concoct2/c_vbgmm_fit.h +++ b/c-concoct2/c_vbgmm_fit.h @@ -120,6 +120,9 @@ typedef struct s_Cluster #define DEF_SEED 1l /*user defines*/ + +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int nThreads); + int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug, int bAssign, int nThreads); diff --git a/c-concoct2/vbgmm.pyx b/c-concoct2/vbgmm.pyx index 5961769..2d40018 100644 --- a/c-concoct2/vbgmm.pyx +++ b/c-concoct2/vbgmm.pyx @@ -12,7 +12,7 @@ import numpy as np cimport numpy as np # declare the interface to the C code -cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int debug, int bAssign, int nThreads) +cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int nThreads) @cython.boundscheck(False) @cython.wraparound(False) @@ -36,10 +36,8 @@ def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, threads nThreads = threads - bAssign = 0 - debug = 0 cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) - c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign, nThreads) + c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], nThreads) return assign From 1c3df6d5ad4dccddf1bd0d6a774378419d7735a1 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Tue, 29 Aug 2017 12:53:37 +0200 Subject: [PATCH 30/78] Added new requirements for concoct --- .gitignore | 4 + c-concoct2/vbgmm.c | 6214 -------------------------------------------- requirements.txt | 1 + 3 files changed, 5 insertions(+), 6214 deletions(-) delete mode 100644 c-concoct2/vbgmm.c diff --git a/.gitignore b/.gitignore index b276be3..a6f10ad 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,10 @@ c-concoct/build/* *.egg* c-concoct/build/* c-concoct/dist/* +c-concoct2/build/* +c-concoct2/build/* +c-concoct2/dist/* +c-concoct2/*.c #ignore screen file .screenrc #ignore test folder diff --git a/c-concoct2/vbgmm.c b/c-concoct2/vbgmm.c deleted file mode 100644 index c482391..0000000 --- a/c-concoct2/vbgmm.c +++ /dev/null @@ -1,6214 +0,0 @@ -/* Generated by Cython 0.23.4 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000) - #error Cython requires Python 2.6+ or Python 3.2+. -#else -#define CYTHON_ABI "0_23_4" -#include -#ifndef offsetof -#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION -#define CYTHON_COMPILING_IN_PYPY 1 -#define CYTHON_COMPILING_IN_CPYTHON 0 -#else -#define CYTHON_COMPILING_IN_PYPY 0 -#define CYTHON_COMPILING_IN_CPYTHON 1 -#endif -#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000 -#define CYTHON_USE_PYLONG_INTERNALS 1 -#endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) -#define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyType_Type -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) -#else - #define CYTHON_PEP393_ENABLED 0 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#if PY_VERSION_HEX >= 0x030500B1 -#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods -#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) -#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3 -typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; -} __Pyx_PyAsyncMethodsStruct; -#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) -#else -#define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) - -#ifndef CYTHON_INLINE - #if defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif - - -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__vbgmm -#define __PYX_HAVE_API__vbgmm -#include "string.h" -#include "stdio.h" -#include "stdlib.h" -#include "numpy/arrayobject.h" -#include "numpy/ufuncobject.h" -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#ifdef PYREX_WITHOUT_ASSERTIONS -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT 0 -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) && defined (_M_X64) - #define __Pyx_sst_abs(value) _abs64(value) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyObject_AsSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -#if PY_MAJOR_VERSION < 3 -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) -{ - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#else -#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen -#endif -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False)) -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_COMPILING_IN_CPYTHON -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c)); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ - -static PyObject *__pyx_m; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - -#if !defined(CYTHON_CCOMPLEX) - #if defined(__cplusplus) - #define CYTHON_CCOMPLEX 1 - #elif defined(_Complex_I) - #define CYTHON_CCOMPLEX 1 - #else - #define CYTHON_CCOMPLEX 0 - #endif -#endif -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - #include - #else - #include - #endif -#endif -#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__) - #undef _Complex_I - #define _Complex_I 1.0fj -#endif - - -static const char *__pyx_f[] = { - "c-concoct2/vbgmm.pyx", - "numpy.pxd", - "type.pxd", -}; -#define IS_UNSIGNED(type) (((type) -1) > 0) -struct __Pyx_StructField_; -#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0) -typedef struct { - const char* name; - struct __Pyx_StructField_* fields; - size_t size; - size_t arraysize[8]; - int ndim; - char typegroup; - char is_unsigned; - int flags; -} __Pyx_TypeInfo; -typedef struct __Pyx_StructField_ { - __Pyx_TypeInfo* type; - const char* name; - size_t offset; -} __Pyx_StructField; -typedef struct { - __Pyx_StructField* field; - size_t parent_offset; -} __Pyx_BufFmt_StackElem; -typedef struct { - __Pyx_StructField root; - __Pyx_BufFmt_StackElem* head; - size_t fmt_offset; - size_t new_count, enc_count; - size_t struct_alignment; - int is_complex; - char enc_type; - char new_packmode; - char enc_packmode; - char is_valid_array; -} __Pyx_BufFmt_Context; - - -/* "numpy.pxd":723 - * # in Cython to enable them only on the right systems. - * - * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<< - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t - */ -typedef npy_int8 __pyx_t_5numpy_int8_t; - -/* "numpy.pxd":724 - * - * ctypedef npy_int8 int8_t - * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<< - * ctypedef npy_int32 int32_t - * ctypedef npy_int64 int64_t - */ -typedef npy_int16 __pyx_t_5numpy_int16_t; - -/* "numpy.pxd":725 - * ctypedef npy_int8 int8_t - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<< - * ctypedef npy_int64 int64_t - * #ctypedef npy_int96 int96_t - */ -typedef npy_int32 __pyx_t_5numpy_int32_t; - -/* "numpy.pxd":726 - * ctypedef npy_int16 int16_t - * ctypedef npy_int32 int32_t - * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<< - * #ctypedef npy_int96 int96_t - * #ctypedef npy_int128 int128_t - */ -typedef npy_int64 __pyx_t_5numpy_int64_t; - -/* "numpy.pxd":730 - * #ctypedef npy_int128 int128_t - * - * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<< - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t - */ -typedef npy_uint8 __pyx_t_5numpy_uint8_t; - -/* "numpy.pxd":731 - * - * ctypedef npy_uint8 uint8_t - * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<< - * ctypedef npy_uint32 uint32_t - * ctypedef npy_uint64 uint64_t - */ -typedef npy_uint16 __pyx_t_5numpy_uint16_t; - -/* "numpy.pxd":732 - * ctypedef npy_uint8 uint8_t - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<< - * ctypedef npy_uint64 uint64_t - * #ctypedef npy_uint96 uint96_t - */ -typedef npy_uint32 __pyx_t_5numpy_uint32_t; - -/* "numpy.pxd":733 - * ctypedef npy_uint16 uint16_t - * ctypedef npy_uint32 uint32_t - * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<< - * #ctypedef npy_uint96 uint96_t - * #ctypedef npy_uint128 uint128_t - */ -typedef npy_uint64 __pyx_t_5numpy_uint64_t; - -/* "numpy.pxd":737 - * #ctypedef npy_uint128 uint128_t - * - * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<< - * ctypedef npy_float64 float64_t - * #ctypedef npy_float80 float80_t - */ -typedef npy_float32 __pyx_t_5numpy_float32_t; - -/* "numpy.pxd":738 - * - * ctypedef npy_float32 float32_t - * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<< - * #ctypedef npy_float80 float80_t - * #ctypedef npy_float128 float128_t - */ -typedef npy_float64 __pyx_t_5numpy_float64_t; - -/* "numpy.pxd":747 - * # The int types are mapped a bit surprising -- - * # numpy.int corresponds to 'l' and numpy.long to 'q' - * ctypedef npy_long int_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong long_t - * ctypedef npy_longlong longlong_t - */ -typedef npy_long __pyx_t_5numpy_int_t; - -/* "numpy.pxd":748 - * # numpy.int corresponds to 'l' and numpy.long to 'q' - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t # <<<<<<<<<<<<<< - * ctypedef npy_longlong longlong_t - * - */ -typedef npy_longlong __pyx_t_5numpy_long_t; - -/* "numpy.pxd":749 - * ctypedef npy_long int_t - * ctypedef npy_longlong long_t - * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<< - * - * ctypedef npy_ulong uint_t - */ -typedef npy_longlong __pyx_t_5numpy_longlong_t; - -/* "numpy.pxd":751 - * ctypedef npy_longlong longlong_t - * - * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulong_t - * ctypedef npy_ulonglong ulonglong_t - */ -typedef npy_ulong __pyx_t_5numpy_uint_t; - -/* "numpy.pxd":752 - * - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<< - * ctypedef npy_ulonglong ulonglong_t - * - */ -typedef npy_ulonglong __pyx_t_5numpy_ulong_t; - -/* "numpy.pxd":753 - * ctypedef npy_ulong uint_t - * ctypedef npy_ulonglong ulong_t - * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<< - * - * ctypedef npy_intp intp_t - */ -typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t; - -/* "numpy.pxd":755 - * ctypedef npy_ulonglong ulonglong_t - * - * ctypedef npy_intp intp_t # <<<<<<<<<<<<<< - * ctypedef npy_uintp uintp_t - * - */ -typedef npy_intp __pyx_t_5numpy_intp_t; - -/* "numpy.pxd":756 - * - * ctypedef npy_intp intp_t - * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<< - * - * ctypedef npy_double float_t - */ -typedef npy_uintp __pyx_t_5numpy_uintp_t; - -/* "numpy.pxd":758 - * ctypedef npy_uintp uintp_t - * - * ctypedef npy_double float_t # <<<<<<<<<<<<<< - * ctypedef npy_double double_t - * ctypedef npy_longdouble longdouble_t - */ -typedef npy_double __pyx_t_5numpy_float_t; - -/* "numpy.pxd":759 - * - * ctypedef npy_double float_t - * ctypedef npy_double double_t # <<<<<<<<<<<<<< - * ctypedef npy_longdouble longdouble_t - * - */ -typedef npy_double __pyx_t_5numpy_double_t; - -/* "numpy.pxd":760 - * ctypedef npy_double float_t - * ctypedef npy_double double_t - * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<< - * - * ctypedef npy_cfloat cfloat_t - */ -typedef npy_longdouble __pyx_t_5numpy_longdouble_t; -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - typedef ::std::complex< float > __pyx_t_float_complex; - #else - typedef float _Complex __pyx_t_float_complex; - #endif -#else - typedef struct { float real, imag; } __pyx_t_float_complex; -#endif - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - typedef ::std::complex< double > __pyx_t_double_complex; - #else - typedef double _Complex __pyx_t_double_complex; - #endif -#else - typedef struct { double real, imag; } __pyx_t_double_complex; -#endif - - -/*--- Type declarations ---*/ - -/* "numpy.pxd":762 - * ctypedef npy_longdouble longdouble_t - * - * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<< - * ctypedef npy_cdouble cdouble_t - * ctypedef npy_clongdouble clongdouble_t - */ -typedef npy_cfloat __pyx_t_5numpy_cfloat_t; - -/* "numpy.pxd":763 - * - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<< - * ctypedef npy_clongdouble clongdouble_t - * - */ -typedef npy_cdouble __pyx_t_5numpy_cdouble_t; - -/* "numpy.pxd":764 - * ctypedef npy_cfloat cfloat_t - * ctypedef npy_cdouble cdouble_t - * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<< - * - * ctypedef npy_cdouble complex_t - */ -typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; - -/* "numpy.pxd":766 - * ctypedef npy_clongdouble clongdouble_t - * - * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew1(a): - */ -typedef npy_cdouble __pyx_t_5numpy_complex_t; - -/* --- Runtime support code (head) --- */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); - -static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, - const char *name, int exact); - -static CYTHON_INLINE int __Pyx_GetBufferAndValidate(Py_buffer* buf, PyObject* obj, - __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack); -static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); - -#define __Pyx_BufPtrCContig2d(type, buf, i0, s0, i1, s1) ((type)((char*)buf + i0 * s0) + i1) -#define __Pyx_BufPtrCContig1d(type, buf, i0, s0) ((type)buf + i0) -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); - -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -typedef struct { - int code_line; - PyCodeObject* code_object; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -typedef struct { - Py_ssize_t shape, strides, suboffsets; -} __Pyx_Buf_DimInfo; -typedef struct { - size_t refcount; - Py_buffer pybuffer; -} __Pyx_Buffer; -typedef struct { - __Pyx_Buffer *rcbuffer; - char *data; - __Pyx_Buf_DimInfo diminfo[8]; -} __Pyx_LocalBuf_ND; - -#if PY_MAJOR_VERSION < 3 - static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags); - static void __Pyx_ReleaseBuffer(Py_buffer *view); -#else - #define __Pyx_GetBuffer PyObject_GetBuffer - #define __Pyx_ReleaseBuffer PyBuffer_Release -#endif - - -static Py_ssize_t __Pyx_zeros[] = {0, 0, 0, 0, 0, 0, 0, 0}; -static Py_ssize_t __Pyx_minusones[] = {-1, -1, -1, -1, -1, -1, -1, -1}; - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - #define __Pyx_CREAL(z) ((z).real()) - #define __Pyx_CIMAG(z) ((z).imag()) - #else - #define __Pyx_CREAL(z) (__real__(z)) - #define __Pyx_CIMAG(z) (__imag__(z)) - #endif -#else - #define __Pyx_CREAL(z) ((z).real) - #define __Pyx_CIMAG(z) ((z).imag) -#endif -#if (defined(_WIN32) || defined(__clang__)) && defined(__cplusplus) && CYTHON_CCOMPLEX - #define __Pyx_SET_CREAL(z,x) ((z).real(x)) - #define __Pyx_SET_CIMAG(z,y) ((z).imag(y)) -#else - #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x) - #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y) -#endif - -static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float); - -#if CYTHON_CCOMPLEX - #define __Pyx_c_eqf(a, b) ((a)==(b)) - #define __Pyx_c_sumf(a, b) ((a)+(b)) - #define __Pyx_c_difff(a, b) ((a)-(b)) - #define __Pyx_c_prodf(a, b) ((a)*(b)) - #define __Pyx_c_quotf(a, b) ((a)/(b)) - #define __Pyx_c_negf(a) (-(a)) - #ifdef __cplusplus - #define __Pyx_c_is_zerof(z) ((z)==(float)0) - #define __Pyx_c_conjf(z) (::std::conj(z)) - #if 1 - #define __Pyx_c_absf(z) (::std::abs(z)) - #define __Pyx_c_powf(a, b) (::std::pow(a, b)) - #endif - #else - #define __Pyx_c_is_zerof(z) ((z)==0) - #define __Pyx_c_conjf(z) (conjf(z)) - #if 1 - #define __Pyx_c_absf(z) (cabsf(z)) - #define __Pyx_c_powf(a, b) (cpowf(a, b)) - #endif - #endif -#else - static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex, __pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex); - static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex); - #if 1 - static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex); - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex, __pyx_t_float_complex); - #endif -#endif - -static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double); - -#if CYTHON_CCOMPLEX - #define __Pyx_c_eq(a, b) ((a)==(b)) - #define __Pyx_c_sum(a, b) ((a)+(b)) - #define __Pyx_c_diff(a, b) ((a)-(b)) - #define __Pyx_c_prod(a, b) ((a)*(b)) - #define __Pyx_c_quot(a, b) ((a)/(b)) - #define __Pyx_c_neg(a) (-(a)) - #ifdef __cplusplus - #define __Pyx_c_is_zero(z) ((z)==(double)0) - #define __Pyx_c_conj(z) (::std::conj(z)) - #if 1 - #define __Pyx_c_abs(z) (::std::abs(z)) - #define __Pyx_c_pow(a, b) (::std::pow(a, b)) - #endif - #else - #define __Pyx_c_is_zero(z) ((z)==0) - #define __Pyx_c_conj(z) (conj(z)) - #if 1 - #define __Pyx_c_abs(z) (cabs(z)) - #define __Pyx_c_pow(a, b) (cpow(a, b)) - #endif - #endif -#else - static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex, __pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex); - static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex); - #if 1 - static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex); - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex, __pyx_t_double_complex); - #endif -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ptrdiff_t(ptrdiff_t value); - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value); - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -static int __Pyx_check_binary_version(void); - -#if !defined(__Pyx_PyIdentifier_FromString) -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s) -#else - #define __Pyx_PyIdentifier_FromString(s) PyUnicode_FromString(s) -#endif -#endif - -static PyObject *__Pyx_ImportModule(const char *name); - -static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict); - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - - -/* Module declarations from 'cython' */ - -/* Module declarations from 'cpython.buffer' */ - -/* Module declarations from 'libc.string' */ - -/* Module declarations from 'libc.stdio' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; - -/* Module declarations from 'cpython' */ - -/* Module declarations from 'cpython.object' */ - -/* Module declarations from 'cpython.ref' */ - -/* Module declarations from 'libc.stdlib' */ - -/* Module declarations from 'numpy' */ - -/* Module declarations from 'numpy' */ -static PyTypeObject *__pyx_ptype_5numpy_dtype = 0; -static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0; -static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0; -static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; -static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0; -static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ - -/* Module declarations from 'vbgmm' */ -__PYX_EXTERN_C DL_IMPORT(void) c_vbgmm_fit(double *, int, int, int, int *, int, int); /*proto*/ -static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 }; -static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 }; -#define __Pyx_MODULE_NAME "vbgmm" -int __pyx_module_is_main_vbgmm = 0; - -/* Implementation of 'vbgmm' */ -static PyObject *__pyx_builtin_ValueError; -static PyObject *__pyx_builtin_range; -static PyObject *__pyx_builtin_RuntimeError; -static char __pyx_k_B[] = "B"; -static char __pyx_k_H[] = "H"; -static char __pyx_k_I[] = "I"; -static char __pyx_k_L[] = "L"; -static char __pyx_k_O[] = "O"; -static char __pyx_k_Q[] = "Q"; -static char __pyx_k_b[] = "b"; -static char __pyx_k_d[] = "d"; -static char __pyx_k_f[] = "f"; -static char __pyx_k_g[] = "g"; -static char __pyx_k_h[] = "h"; -static char __pyx_k_i[] = "i"; -static char __pyx_k_l[] = "l"; -static char __pyx_k_q[] = "q"; -static char __pyx_k_Zd[] = "Zd"; -static char __pyx_k_Zf[] = "Zf"; -static char __pyx_k_Zg[] = "Zg"; -static char __pyx_k_nD[] = "nD"; -static char __pyx_k_nK[] = "nK"; -static char __pyx_k_nN[] = "nN"; -static char __pyx_k_nS[] = "nS"; -static char __pyx_k_np[] = "np"; -static char __pyx_k_fit[] = "fit"; -static char __pyx_k_intc[] = "intc"; -static char __pyx_k_main[] = "__main__"; -static char __pyx_k_test[] = "__test__"; -static char __pyx_k_debug[] = "debug"; -static char __pyx_k_dtype[] = "dtype"; -static char __pyx_k_numpy[] = "numpy"; -static char __pyx_k_range[] = "range"; -static char __pyx_k_vbgmm[] = "vbgmm"; -static char __pyx_k_zeros[] = "zeros"; -static char __pyx_k_assign[] = "assign"; -static char __pyx_k_import[] = "__import__"; -static char __pyx_k_xarray[] = "xarray"; -static char __pyx_k_bAssign[] = "bAssign"; -static char __pyx_k_nClusters[] = "nClusters"; -static char __pyx_k_ValueError[] = "ValueError"; -static char __pyx_k_RuntimeError[] = "RuntimeError"; -static char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous"; -static char __pyx_k_mnt_data_chris_chris_repos_CONC[] = "/mnt/data-chris/chris/repos/CONCOCT/c-concoct2/vbgmm.pyx"; -static char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)"; -static char __pyx_k_vbgmm_pyx_simple_cython_wrapper[] = "\nvbgmm.pyx\n\nsimple cython wrapper for variational Gaussian mixture model in C \n\n"; -static char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd"; -static char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported"; -static char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous"; -static char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short."; -static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; -static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; -static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor; -static PyObject *__pyx_n_s_RuntimeError; -static PyObject *__pyx_n_s_ValueError; -static PyObject *__pyx_n_s_assign; -static PyObject *__pyx_n_s_bAssign; -static PyObject *__pyx_n_s_debug; -static PyObject *__pyx_n_s_dtype; -static PyObject *__pyx_n_s_fit; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_intc; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_kp_s_mnt_data_chris_chris_repos_CONC; -static PyObject *__pyx_n_s_nClusters; -static PyObject *__pyx_n_s_nD; -static PyObject *__pyx_n_s_nK; -static PyObject *__pyx_n_s_nN; -static PyObject *__pyx_n_s_nS; -static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous; -static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou; -static PyObject *__pyx_n_s_np; -static PyObject *__pyx_n_s_numpy; -static PyObject *__pyx_n_s_range; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd; -static PyObject *__pyx_n_s_vbgmm; -static PyObject *__pyx_n_s_xarray; -static PyObject *__pyx_n_s_zeros; -static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug); /* proto */ -static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ -static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ -static PyObject *__pyx_int_15; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_codeobj__8; - -/* "vbgmm.pyx":19 - * @cython.wraparound(False) - * - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK, debug) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_5vbgmm_fit[] = "\n fit (xarray, assign, nK, debug)\n\n Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters\n\n and returns cluster assignments in assign\n\n param: xarray -- a 2-d numpy array of np.float64\n param: assigns -- cluster assignments must have same number of rows as xarray\n\n "; -static PyMethodDef __pyx_mdef_5vbgmm_1fit = {"fit", (PyCFunction)__pyx_pw_5vbgmm_1fit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5vbgmm_fit}; -static PyObject *__pyx_pw_5vbgmm_1fit(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyArrayObject *__pyx_v_xarray = 0; - PyObject *__pyx_v_nClusters = 0; - PyObject *__pyx_v_debug = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("fit (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_xarray,&__pyx_n_s_nClusters,&__pyx_n_s_debug,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xarray)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - case 1: - if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nClusters)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("fit", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - case 2: - if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_debug)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("fit", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fit") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v_xarray = ((PyArrayObject *)values[0]); - __pyx_v_nClusters = values[1]; - __pyx_v_debug = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("fit", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L3_error;} - __pyx_L3_error:; - __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xarray), __pyx_ptype_5numpy_ndarray, 0, "xarray", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_r = __pyx_pf_5vbgmm_fit(__pyx_self, __pyx_v_xarray, __pyx_v_nClusters, __pyx_v_debug); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_5vbgmm_fit(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_xarray, PyObject *__pyx_v_nClusters, PyObject *__pyx_v_debug) { - int __pyx_v_nN; - int __pyx_v_nD; - int __pyx_v_nK; - int __pyx_v_bAssign; - PyArrayObject *__pyx_v_assign = 0; - __Pyx_LocalBuf_ND __pyx_pybuffernd_assign; - __Pyx_Buffer __pyx_pybuffer_assign; - __Pyx_LocalBuf_ND __pyx_pybuffernd_xarray; - __Pyx_Buffer __pyx_pybuffer_xarray; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - npy_intp __pyx_t_1; - npy_intp __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyArrayObject *__pyx_t_9 = NULL; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - Py_ssize_t __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("fit", 0); - __pyx_pybuffer_assign.pybuffer.buf = NULL; - __pyx_pybuffer_assign.refcount = 0; - __pyx_pybuffernd_assign.data = NULL; - __pyx_pybuffernd_assign.rcbuffer = &__pyx_pybuffer_assign; - __pyx_pybuffer_xarray.pybuffer.buf = NULL; - __pyx_pybuffer_xarray.refcount = 0; - __pyx_pybuffernd_xarray.data = NULL; - __pyx_pybuffernd_xarray.rcbuffer = &__pyx_pybuffer_xarray; - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer, (PyObject*)__pyx_v_xarray, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_pybuffernd_xarray.diminfo[0].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_xarray.diminfo[0].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_xarray.diminfo[1].strides = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_xarray.diminfo[1].shape = __pyx_pybuffernd_xarray.rcbuffer->pybuffer.shape[1]; - - /* "vbgmm.pyx":33 - * cdef int nN, nD, nK, nS, bAssign - * - * nN, nD = xarray.shape[0], xarray.shape[1] # <<<<<<<<<<<<<< - * - * nK = nClusters - */ - __pyx_t_1 = (__pyx_v_xarray->dimensions[0]); - __pyx_t_2 = (__pyx_v_xarray->dimensions[1]); - __pyx_v_nN = __pyx_t_1; - __pyx_v_nD = __pyx_t_2; - - /* "vbgmm.pyx":35 - * nN, nD = xarray.shape[0], xarray.shape[1] - * - * nK = nClusters # <<<<<<<<<<<<<< - * - * bAssign = 0 - */ - __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_nClusters); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_nK = __pyx_t_3; - - /* "vbgmm.pyx":37 - * nK = nClusters - * - * bAssign = 0 # <<<<<<<<<<<<<< - * - * cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) - */ - __pyx_v_bAssign = 0; - - /* "vbgmm.pyx":39 - * bAssign = 0 - * - * cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) # <<<<<<<<<<<<<< - * - * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) - */ - __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nN); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_intc); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_9 = ((PyArrayObject *)__pyx_t_8); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_assign.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_int, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) { - __pyx_v_assign = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_assign.rcbuffer->pybuffer.buf = NULL; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } else {__pyx_pybuffernd_assign.diminfo[0].strides = __pyx_pybuffernd_assign.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_assign.diminfo[0].shape = __pyx_pybuffernd_assign.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_9 = 0; - __pyx_v_assign = ((PyArrayObject *)__pyx_t_8); - __pyx_t_8 = 0; - - /* "vbgmm.pyx":41 - * cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) - * - * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) # <<<<<<<<<<<<<< - * - * return assign - */ - __pyx_t_10 = 0; - __pyx_t_11 = 0; - __pyx_t_12 = 0; - __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_debug); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - c_vbgmm_fit((&(*__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_xarray.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_xarray.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_xarray.diminfo[1].strides))), __pyx_v_nN, __pyx_v_nD, __pyx_v_nK, (&(*__Pyx_BufPtrCContig1d(int *, __pyx_pybuffernd_assign.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_assign.diminfo[0].strides))), __pyx_t_3, __pyx_v_bAssign); - - /* "vbgmm.pyx":43 - * c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], debug, bAssign) - * - * return assign # <<<<<<<<<<<<<< - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_assign)); - __pyx_r = ((PyObject *)__pyx_v_assign); - goto __pyx_L0; - - /* "vbgmm.pyx":19 - * @cython.wraparound(False) - * - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK, debug) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("vbgmm.fit", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_assign.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_xarray.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_assign); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":194 - * # experimental exception made for __getbuffer__ and __releasebuffer__ - * # -- the details of this may change. - * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< - * # This implementation of getbuffer is geared towards Cython - * # requirements, and does not yet fullfill the PEP. - */ - -/* Python wrapper */ -static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ -static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0); - __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) { - int __pyx_v_copy_shape; - int __pyx_v_i; - int __pyx_v_ndim; - int __pyx_v_endian_detector; - int __pyx_v_little_endian; - int __pyx_v_t; - char *__pyx_v_f; - PyArray_Descr *__pyx_v_descr = 0; - int __pyx_v_offset; - int __pyx_v_hasfields; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - char *__pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getbuffer__", 0); - if (__pyx_v_info != NULL) { - __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(__pyx_v_info->obj); - } - - /* "numpy.pxd":200 - * # of flags - * - * if info == NULL: return # <<<<<<<<<<<<<< - * - * cdef int copy_shape, i, ndim - */ - __pyx_t_1 = ((__pyx_v_info == NULL) != 0); - if (__pyx_t_1) { - __pyx_r = 0; - goto __pyx_L0; - } - - /* "numpy.pxd":203 - * - * cdef int copy_shape, i, ndim - * cdef int endian_detector = 1 # <<<<<<<<<<<<<< - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * - */ - __pyx_v_endian_detector = 1; - - /* "numpy.pxd":204 - * cdef int copy_shape, i, ndim - * cdef int endian_detector = 1 - * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< - * - * ndim = PyArray_NDIM(self) - */ - __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); - - /* "numpy.pxd":206 - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * - * ndim = PyArray_NDIM(self) # <<<<<<<<<<<<<< - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - */ - __pyx_v_ndim = PyArray_NDIM(__pyx_v_self); - - /* "numpy.pxd":208 - * ndim = PyArray_NDIM(self) - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * copy_shape = 1 - * else: - */ - __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); - if (__pyx_t_1) { - - /* "numpy.pxd":209 - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * copy_shape = 1 # <<<<<<<<<<<<<< - * else: - * copy_shape = 0 - */ - __pyx_v_copy_shape = 1; - - /* "numpy.pxd":208 - * ndim = PyArray_NDIM(self) - * - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * copy_shape = 1 - * else: - */ - goto __pyx_L4; - } - - /* "numpy.pxd":211 - * copy_shape = 1 - * else: - * copy_shape = 0 # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - */ - /*else*/ { - __pyx_v_copy_shape = 0; - } - __pyx_L4:; - - /* "numpy.pxd":213 - * copy_shape = 0 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") - */ - __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L6_bool_binop_done; - } - - /* "numpy.pxd":214 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): # <<<<<<<<<<<<<< - * raise ValueError(u"ndarray is not C contiguous") - * - */ - __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_C_CONTIGUOUS) != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L6_bool_binop_done:; - - /* "numpy.pxd":213 - * copy_shape = 0 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") - */ - if (__pyx_t_1) { - - /* "numpy.pxd":215 - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "numpy.pxd":213 - * copy_shape = 0 - * - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") - */ - } - - /* "numpy.pxd":217 - * raise ValueError(u"ndarray is not C contiguous") - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") - */ - __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L9_bool_binop_done; - } - - /* "numpy.pxd":218 - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): # <<<<<<<<<<<<<< - * raise ValueError(u"ndarray is not Fortran contiguous") - * - */ - __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_F_CONTIGUOUS) != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L9_bool_binop_done:; - - /* "numpy.pxd":217 - * raise ValueError(u"ndarray is not C contiguous") - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") - */ - if (__pyx_t_1) { - - /* "numpy.pxd":219 - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< - * - * info.buf = PyArray_DATA(self) - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "numpy.pxd":217 - * raise ValueError(u"ndarray is not C contiguous") - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) # <<<<<<<<<<<<<< - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") - */ - } - - /* "numpy.pxd":221 - * raise ValueError(u"ndarray is not Fortran contiguous") - * - * info.buf = PyArray_DATA(self) # <<<<<<<<<<<<<< - * info.ndim = ndim - * if copy_shape: - */ - __pyx_v_info->buf = PyArray_DATA(__pyx_v_self); - - /* "numpy.pxd":222 - * - * info.buf = PyArray_DATA(self) - * info.ndim = ndim # <<<<<<<<<<<<<< - * if copy_shape: - * # Allocate new buffer for strides and shape info. - */ - __pyx_v_info->ndim = __pyx_v_ndim; - - /* "numpy.pxd":223 - * info.buf = PyArray_DATA(self) - * info.ndim = ndim - * if copy_shape: # <<<<<<<<<<<<<< - * # Allocate new buffer for strides and shape info. - * # This is allocated as one block, strides first. - */ - __pyx_t_1 = (__pyx_v_copy_shape != 0); - if (__pyx_t_1) { - - /* "numpy.pxd":226 - * # Allocate new buffer for strides and shape info. - * # This is allocated as one block, strides first. - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) # <<<<<<<<<<<<<< - * info.shape = info.strides + ndim - * for i in range(ndim): - */ - __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * ((size_t)__pyx_v_ndim)) * 2))); - - /* "numpy.pxd":227 - * # This is allocated as one block, strides first. - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) - * info.shape = info.strides + ndim # <<<<<<<<<<<<<< - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] - */ - __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim); - - /* "numpy.pxd":228 - * info.strides = stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2) - * info.shape = info.strides + ndim - * for i in range(ndim): # <<<<<<<<<<<<<< - * info.strides[i] = PyArray_STRIDES(self)[i] - * info.shape[i] = PyArray_DIMS(self)[i] - */ - __pyx_t_4 = __pyx_v_ndim; - for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) { - __pyx_v_i = __pyx_t_5; - - /* "numpy.pxd":229 - * info.shape = info.strides + ndim - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] # <<<<<<<<<<<<<< - * info.shape[i] = PyArray_DIMS(self)[i] - * else: - */ - (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]); - - /* "numpy.pxd":230 - * for i in range(ndim): - * info.strides[i] = PyArray_STRIDES(self)[i] - * info.shape[i] = PyArray_DIMS(self)[i] # <<<<<<<<<<<<<< - * else: - * info.strides = PyArray_STRIDES(self) - */ - (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]); - } - - /* "numpy.pxd":223 - * info.buf = PyArray_DATA(self) - * info.ndim = ndim - * if copy_shape: # <<<<<<<<<<<<<< - * # Allocate new buffer for strides and shape info. - * # This is allocated as one block, strides first. - */ - goto __pyx_L11; - } - - /* "numpy.pxd":232 - * info.shape[i] = PyArray_DIMS(self)[i] - * else: - * info.strides = PyArray_STRIDES(self) # <<<<<<<<<<<<<< - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL - */ - /*else*/ { - __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self)); - - /* "numpy.pxd":233 - * else: - * info.strides = PyArray_STRIDES(self) - * info.shape = PyArray_DIMS(self) # <<<<<<<<<<<<<< - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) - */ - __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self)); - } - __pyx_L11:; - - /* "numpy.pxd":234 - * info.strides = PyArray_STRIDES(self) - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL # <<<<<<<<<<<<<< - * info.itemsize = PyArray_ITEMSIZE(self) - * info.readonly = not PyArray_ISWRITEABLE(self) - */ - __pyx_v_info->suboffsets = NULL; - - /* "numpy.pxd":235 - * info.shape = PyArray_DIMS(self) - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) # <<<<<<<<<<<<<< - * info.readonly = not PyArray_ISWRITEABLE(self) - * - */ - __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self); - - /* "numpy.pxd":236 - * info.suboffsets = NULL - * info.itemsize = PyArray_ITEMSIZE(self) - * info.readonly = not PyArray_ISWRITEABLE(self) # <<<<<<<<<<<<<< - * - * cdef int t - */ - __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0)); - - /* "numpy.pxd":239 - * - * cdef int t - * cdef char* f = NULL # <<<<<<<<<<<<<< - * cdef dtype descr = self.descr - * cdef list stack - */ - __pyx_v_f = NULL; - - /* "numpy.pxd":240 - * cdef int t - * cdef char* f = NULL - * cdef dtype descr = self.descr # <<<<<<<<<<<<<< - * cdef list stack - * cdef int offset - */ - __pyx_t_3 = ((PyObject *)__pyx_v_self->descr); - __Pyx_INCREF(__pyx_t_3); - __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3); - __pyx_t_3 = 0; - - /* "numpy.pxd":244 - * cdef int offset - * - * cdef bint hasfields = PyDataType_HASFIELDS(descr) # <<<<<<<<<<<<<< - * - * if not hasfields and not copy_shape: - */ - __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr); - - /* "numpy.pxd":246 - * cdef bint hasfields = PyDataType_HASFIELDS(descr) - * - * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< - * # do not call releasebuffer - * info.obj = None - */ - __pyx_t_2 = ((!(__pyx_v_hasfields != 0)) != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L15_bool_binop_done; - } - __pyx_t_2 = ((!(__pyx_v_copy_shape != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L15_bool_binop_done:; - if (__pyx_t_1) { - - /* "numpy.pxd":248 - * if not hasfields and not copy_shape: - * # do not call releasebuffer - * info.obj = None # <<<<<<<<<<<<<< - * else: - * # need to call releasebuffer - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = Py_None; - - /* "numpy.pxd":246 - * cdef bint hasfields = PyDataType_HASFIELDS(descr) - * - * if not hasfields and not copy_shape: # <<<<<<<<<<<<<< - * # do not call releasebuffer - * info.obj = None - */ - goto __pyx_L14; - } - - /* "numpy.pxd":251 - * else: - * # need to call releasebuffer - * info.obj = self # <<<<<<<<<<<<<< - * - * if not hasfields: - */ - /*else*/ { - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); - __pyx_v_info->obj = ((PyObject *)__pyx_v_self); - } - __pyx_L14:; - - /* "numpy.pxd":253 - * info.obj = self - * - * if not hasfields: # <<<<<<<<<<<<<< - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or - */ - __pyx_t_1 = ((!(__pyx_v_hasfields != 0)) != 0); - if (__pyx_t_1) { - - /* "numpy.pxd":254 - * - * if not hasfields: - * t = descr.type_num # <<<<<<<<<<<<<< - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - */ - __pyx_t_4 = __pyx_v_descr->type_num; - __pyx_v_t = __pyx_t_4; - - /* "numpy.pxd":255 - * if not hasfields: - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0); - if (!__pyx_t_2) { - goto __pyx_L20_next_or; - } else { - } - __pyx_t_2 = (__pyx_v_little_endian != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L19_bool_binop_done; - } - __pyx_L20_next_or:; - - /* "numpy.pxd":256 - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" - */ - __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0); - if (__pyx_t_2) { - } else { - __pyx_t_1 = __pyx_t_2; - goto __pyx_L19_bool_binop_done; - } - __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0); - __pyx_t_1 = __pyx_t_2; - __pyx_L19_bool_binop_done:; - - /* "numpy.pxd":255 - * if not hasfields: - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - if (__pyx_t_1) { - - /* "numpy.pxd":257 - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "numpy.pxd":255 - * if not hasfields: - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - } - - /* "numpy.pxd":258 - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" # <<<<<<<<<<<<<< - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" - */ - switch (__pyx_v_t) { - case NPY_BYTE: - __pyx_v_f = __pyx_k_b; - break; - - /* "numpy.pxd":259 - * raise ValueError(u"Non-native byte order not supported") - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" # <<<<<<<<<<<<<< - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" - */ - case NPY_UBYTE: - __pyx_v_f = __pyx_k_B; - break; - - /* "numpy.pxd":260 - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" # <<<<<<<<<<<<<< - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" - */ - case NPY_SHORT: - __pyx_v_f = __pyx_k_h; - break; - - /* "numpy.pxd":261 - * elif t == NPY_UBYTE: f = "B" - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" # <<<<<<<<<<<<<< - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" - */ - case NPY_USHORT: - __pyx_v_f = __pyx_k_H; - break; - - /* "numpy.pxd":262 - * elif t == NPY_SHORT: f = "h" - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" # <<<<<<<<<<<<<< - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" - */ - case NPY_INT: - __pyx_v_f = __pyx_k_i; - break; - - /* "numpy.pxd":263 - * elif t == NPY_USHORT: f = "H" - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" # <<<<<<<<<<<<<< - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" - */ - case NPY_UINT: - __pyx_v_f = __pyx_k_I; - break; - - /* "numpy.pxd":264 - * elif t == NPY_INT: f = "i" - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" # <<<<<<<<<<<<<< - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" - */ - case NPY_LONG: - __pyx_v_f = __pyx_k_l; - break; - - /* "numpy.pxd":265 - * elif t == NPY_UINT: f = "I" - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" # <<<<<<<<<<<<<< - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" - */ - case NPY_ULONG: - __pyx_v_f = __pyx_k_L; - break; - - /* "numpy.pxd":266 - * elif t == NPY_LONG: f = "l" - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" # <<<<<<<<<<<<<< - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" - */ - case NPY_LONGLONG: - __pyx_v_f = __pyx_k_q; - break; - - /* "numpy.pxd":267 - * elif t == NPY_ULONG: f = "L" - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" # <<<<<<<<<<<<<< - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" - */ - case NPY_ULONGLONG: - __pyx_v_f = __pyx_k_Q; - break; - - /* "numpy.pxd":268 - * elif t == NPY_LONGLONG: f = "q" - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" # <<<<<<<<<<<<<< - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" - */ - case NPY_FLOAT: - __pyx_v_f = __pyx_k_f; - break; - - /* "numpy.pxd":269 - * elif t == NPY_ULONGLONG: f = "Q" - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" # <<<<<<<<<<<<<< - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" - */ - case NPY_DOUBLE: - __pyx_v_f = __pyx_k_d; - break; - - /* "numpy.pxd":270 - * elif t == NPY_FLOAT: f = "f" - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" # <<<<<<<<<<<<<< - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" - */ - case NPY_LONGDOUBLE: - __pyx_v_f = __pyx_k_g; - break; - - /* "numpy.pxd":271 - * elif t == NPY_DOUBLE: f = "d" - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" # <<<<<<<<<<<<<< - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - */ - case NPY_CFLOAT: - __pyx_v_f = __pyx_k_Zf; - break; - - /* "numpy.pxd":272 - * elif t == NPY_LONGDOUBLE: f = "g" - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" # <<<<<<<<<<<<<< - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" - */ - case NPY_CDOUBLE: - __pyx_v_f = __pyx_k_Zd; - break; - - /* "numpy.pxd":273 - * elif t == NPY_CFLOAT: f = "Zf" - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" # <<<<<<<<<<<<<< - * elif t == NPY_OBJECT: f = "O" - * else: - */ - case NPY_CLONGDOUBLE: - __pyx_v_f = __pyx_k_Zg; - break; - - /* "numpy.pxd":274 - * elif t == NPY_CDOUBLE: f = "Zd" - * elif t == NPY_CLONGDOUBLE: f = "Zg" - * elif t == NPY_OBJECT: f = "O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - case NPY_OBJECT: - __pyx_v_f = __pyx_k_O; - break; - default: - - /* "numpy.pxd":276 - * elif t == NPY_OBJECT: f = "O" - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< - * info.format = f - * return - */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - break; - } - - /* "numpy.pxd":277 - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * info.format = f # <<<<<<<<<<<<<< - * return - * else: - */ - __pyx_v_info->format = __pyx_v_f; - - /* "numpy.pxd":278 - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * info.format = f - * return # <<<<<<<<<<<<<< - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "numpy.pxd":253 - * info.obj = self - * - * if not hasfields: # <<<<<<<<<<<<<< - * t = descr.type_num - * if ((descr.byteorder == c'>' and little_endian) or - */ - } - - /* "numpy.pxd":280 - * return - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) # <<<<<<<<<<<<<< - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 - */ - /*else*/ { - __pyx_v_info->format = ((char *)malloc(0xFF)); - - /* "numpy.pxd":281 - * else: - * info.format = stdlib.malloc(_buffer_format_string_len) - * info.format[0] = c'^' # Native data types, manual alignment # <<<<<<<<<<<<<< - * offset = 0 - * f = _util_dtypestring(descr, info.format + 1, - */ - (__pyx_v_info->format[0]) = '^'; - - /* "numpy.pxd":282 - * info.format = stdlib.malloc(_buffer_format_string_len) - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 # <<<<<<<<<<<<<< - * f = _util_dtypestring(descr, info.format + 1, - * info.format + _buffer_format_string_len, - */ - __pyx_v_offset = 0; - - /* "numpy.pxd":283 - * info.format[0] = c'^' # Native data types, manual alignment - * offset = 0 - * f = _util_dtypestring(descr, info.format + 1, # <<<<<<<<<<<<<< - * info.format + _buffer_format_string_len, - * &offset) - */ - __pyx_t_7 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 0xFF), (&__pyx_v_offset)); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_f = __pyx_t_7; - - /* "numpy.pxd":286 - * info.format + _buffer_format_string_len, - * &offset) - * f[0] = c'\0' # Terminate format string # <<<<<<<<<<<<<< - * - * def __releasebuffer__(ndarray self, Py_buffer* info): - */ - (__pyx_v_f[0]) = '\x00'; - } - - /* "numpy.pxd":194 - * # experimental exception made for __getbuffer__ and __releasebuffer__ - * # -- the details of this may change. - * def __getbuffer__(ndarray self, Py_buffer* info, int flags): # <<<<<<<<<<<<<< - * # This implementation of getbuffer is geared towards Cython - * # requirements, and does not yet fullfill the PEP. - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - if (__pyx_v_info != NULL && __pyx_v_info->obj != NULL) { - __Pyx_GOTREF(__pyx_v_info->obj); - __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL; - } - goto __pyx_L2; - __pyx_L0:; - if (__pyx_v_info != NULL && __pyx_v_info->obj == Py_None) { - __Pyx_GOTREF(Py_None); - __Pyx_DECREF(Py_None); __pyx_v_info->obj = NULL; - } - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_descr); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":288 - * f[0] = c'\0' # Terminate format string - * - * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - */ - -/* Python wrapper */ -static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/ -static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0); - __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("__releasebuffer__", 0); - - /* "numpy.pxd":289 - * - * def __releasebuffer__(ndarray self, Py_buffer* info): - * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - */ - __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0); - if (__pyx_t_1) { - - /* "numpy.pxd":290 - * def __releasebuffer__(ndarray self, Py_buffer* info): - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) # <<<<<<<<<<<<<< - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * stdlib.free(info.strides) - */ - free(__pyx_v_info->format); - - /* "numpy.pxd":289 - * - * def __releasebuffer__(ndarray self, Py_buffer* info): - * if PyArray_HASFIELDS(self): # <<<<<<<<<<<<<< - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - */ - } - - /* "numpy.pxd":291 - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * stdlib.free(info.strides) - * # info.shape was stored after info.strides in the same block - */ - __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0); - if (__pyx_t_1) { - - /* "numpy.pxd":292 - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): - * stdlib.free(info.strides) # <<<<<<<<<<<<<< - * # info.shape was stored after info.strides in the same block - * - */ - free(__pyx_v_info->strides); - - /* "numpy.pxd":291 - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - * if sizeof(npy_intp) != sizeof(Py_ssize_t): # <<<<<<<<<<<<<< - * stdlib.free(info.strides) - * # info.shape was stored after info.strides in the same block - */ - } - - /* "numpy.pxd":288 - * f[0] = c'\0' # Terminate format string - * - * def __releasebuffer__(ndarray self, Py_buffer* info): # <<<<<<<<<<<<<< - * if PyArray_HASFIELDS(self): - * stdlib.free(info.format) - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "numpy.pxd":768 - * ctypedef npy_cdouble complex_t - * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0); - - /* "numpy.pxd":769 - * - * cdef inline object PyArray_MultiIterNew1(a): - * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew2(a, b): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "numpy.pxd":768 - * ctypedef npy_cdouble complex_t - * - * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(1, a) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":771 - * return PyArray_MultiIterNew(1, a) - * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0); - - /* "numpy.pxd":772 - * - * cdef inline object PyArray_MultiIterNew2(a, b): - * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "numpy.pxd":771 - * return PyArray_MultiIterNew(1, a) - * - * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(2, a, b) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":774 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0); - - /* "numpy.pxd":775 - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): - * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "numpy.pxd":774 - * return PyArray_MultiIterNew(2, a, b) - * - * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(3, a, b, c) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":777 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0); - - /* "numpy.pxd":778 - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): - * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<< - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 778; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "numpy.pxd":777 - * return PyArray_MultiIterNew(3, a, b, c) - * - * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(4, a, b, c, d) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":780 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0); - - /* "numpy.pxd":781 - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): - * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<< - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "numpy.pxd":780 - * return PyArray_MultiIterNew(4, a, b, c, d) - * - * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<< - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":783 - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< - * # Recursive utility function used in __getbuffer__ to get format - * # string. The new location in the format string is returned. - */ - -static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) { - PyArray_Descr *__pyx_v_child = 0; - int __pyx_v_endian_detector; - int __pyx_v_little_endian; - PyObject *__pyx_v_fields = 0; - PyObject *__pyx_v_childname = NULL; - PyObject *__pyx_v_new_offset = NULL; - PyObject *__pyx_v_t = NULL; - char *__pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - long __pyx_t_8; - char *__pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_util_dtypestring", 0); - - /* "numpy.pxd":790 - * cdef int delta_offset - * cdef tuple i - * cdef int endian_detector = 1 # <<<<<<<<<<<<<< - * cdef bint little_endian = ((&endian_detector)[0] != 0) - * cdef tuple fields - */ - __pyx_v_endian_detector = 1; - - /* "numpy.pxd":791 - * cdef tuple i - * cdef int endian_detector = 1 - * cdef bint little_endian = ((&endian_detector)[0] != 0) # <<<<<<<<<<<<<< - * cdef tuple fields - * - */ - __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0); - - /* "numpy.pxd":794 - * cdef tuple fields - * - * for childname in descr.names: # <<<<<<<<<<<<<< - * fields = descr.fields[childname] - * child, new_offset = fields - */ - if (unlikely(__pyx_v_descr->names == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - #endif - __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3); - __pyx_t_3 = 0; - - /* "numpy.pxd":795 - * - * for childname in descr.names: - * fields = descr.fields[childname] # <<<<<<<<<<<<<< - * child, new_offset = fields - * - */ - __pyx_t_3 = PyObject_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "numpy.pxd":796 - * for childname in descr.names: - * fields = descr.fields[childname] - * child, new_offset = fields # <<<<<<<<<<<<<< - * - * if (end - f) - (new_offset - offset[0]) < 15: - */ - if (likely(__pyx_v_fields != Py_None)) { - PyObject* sequence = __pyx_v_fields; - #if CYTHON_COMPILING_IN_CPYTHON - Py_ssize_t size = Py_SIZE(sequence); - #else - Py_ssize_t size = PySequence_Size(sequence); - #endif - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if CYTHON_COMPILING_IN_CPYTHON - __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - #else - __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - #endif - } else { - __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3)); - __pyx_t_3 = 0; - __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4); - __pyx_t_4 = 0; - - /* "numpy.pxd":798 - * child, new_offset = fields - * - * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - */ - __pyx_t_4 = __Pyx_PyInt_From_ptrdiff_t((__pyx_v_end - __pyx_v_f)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyNumber_Subtract(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_int_15, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 798; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - - /* "numpy.pxd":799 - * - * if (end - f) - (new_offset - offset[0]) < 15: - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< - * - * if ((child.byteorder == c'>' and little_endian) or - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "numpy.pxd":798 - * child, new_offset = fields - * - * if (end - f) - (new_offset - offset[0]) < 15: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - */ - } - - /* "numpy.pxd":801 - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0); - if (!__pyx_t_7) { - goto __pyx_L8_next_or; - } else { - } - __pyx_t_7 = (__pyx_v_little_endian != 0); - if (!__pyx_t_7) { - } else { - __pyx_t_6 = __pyx_t_7; - goto __pyx_L7_bool_binop_done; - } - __pyx_L8_next_or:; - - /* "numpy.pxd":802 - * - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): # <<<<<<<<<<<<<< - * raise ValueError(u"Non-native byte order not supported") - * # One could encode it in the format string and have Cython - */ - __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0); - if (__pyx_t_7) { - } else { - __pyx_t_6 = __pyx_t_7; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0); - __pyx_t_6 = __pyx_t_7; - __pyx_L7_bool_binop_done:; - - /* "numpy.pxd":801 - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - if (__pyx_t_6) { - - /* "numpy.pxd":803 - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * # One could encode it in the format string and have Cython - * # complain instead, BUT: < and > in format strings also imply - */ - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "numpy.pxd":801 - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") - * - * if ((child.byteorder == c'>' and little_endian) or # <<<<<<<<<<<<<< - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") - */ - } - - /* "numpy.pxd":813 - * - * # Output padding bytes - * while offset[0] < new_offset: # <<<<<<<<<<<<<< - * f[0] = 120 # "x"; pad byte - * f += 1 - */ - while (1) { - __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!__pyx_t_6) break; - - /* "numpy.pxd":814 - * # Output padding bytes - * while offset[0] < new_offset: - * f[0] = 120 # "x"; pad byte # <<<<<<<<<<<<<< - * f += 1 - * offset[0] += 1 - */ - (__pyx_v_f[0]) = 0x78; - - /* "numpy.pxd":815 - * while offset[0] < new_offset: - * f[0] = 120 # "x"; pad byte - * f += 1 # <<<<<<<<<<<<<< - * offset[0] += 1 - * - */ - __pyx_v_f = (__pyx_v_f + 1); - - /* "numpy.pxd":816 - * f[0] = 120 # "x"; pad byte - * f += 1 - * offset[0] += 1 # <<<<<<<<<<<<<< - * - * offset[0] += child.itemsize - */ - __pyx_t_8 = 0; - (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1); - } - - /* "numpy.pxd":818 - * offset[0] += 1 - * - * offset[0] += child.itemsize # <<<<<<<<<<<<<< - * - * if not PyDataType_HASFIELDS(child): - */ - __pyx_t_8 = 0; - (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize); - - /* "numpy.pxd":820 - * offset[0] += child.itemsize - * - * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< - * t = child.type_num - * if end - f < 5: - */ - __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0); - if (__pyx_t_6) { - - /* "numpy.pxd":821 - * - * if not PyDataType_HASFIELDS(child): - * t = child.type_num # <<<<<<<<<<<<<< - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") - */ - __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_3); - __pyx_t_3 = 0; - - /* "numpy.pxd":822 - * if not PyDataType_HASFIELDS(child): - * t = child.type_num - * if end - f < 5: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short.") - * - */ - __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0); - if (__pyx_t_6) { - - /* "numpy.pxd":823 - * t = child.type_num - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< - * - * # Until ticket #99 is fixed, use integers to avoid warnings - */ - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - - /* "numpy.pxd":822 - * if not PyDataType_HASFIELDS(child): - * t = child.type_num - * if end - f < 5: # <<<<<<<<<<<<<< - * raise RuntimeError(u"Format string allocated too short.") - * - */ - } - - /* "numpy.pxd":826 - * - * # Until ticket #99 is fixed, use integers to avoid warnings - * if t == NPY_BYTE: f[0] = 98 #"b" # <<<<<<<<<<<<<< - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_BYTE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 98; - goto __pyx_L15; - } - - /* "numpy.pxd":827 - * # Until ticket #99 is fixed, use integers to avoid warnings - * if t == NPY_BYTE: f[0] = 98 #"b" - * elif t == NPY_UBYTE: f[0] = 66 #"B" # <<<<<<<<<<<<<< - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UBYTE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 66; - goto __pyx_L15; - } - - /* "numpy.pxd":828 - * if t == NPY_BYTE: f[0] = 98 #"b" - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" # <<<<<<<<<<<<<< - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_SHORT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 0x68; - goto __pyx_L15; - } - - /* "numpy.pxd":829 - * elif t == NPY_UBYTE: f[0] = 66 #"B" - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" # <<<<<<<<<<<<<< - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_USHORT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 72; - goto __pyx_L15; - } - - /* "numpy.pxd":830 - * elif t == NPY_SHORT: f[0] = 104 #"h" - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" # <<<<<<<<<<<<<< - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_INT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 0x69; - goto __pyx_L15; - } - - /* "numpy.pxd":831 - * elif t == NPY_USHORT: f[0] = 72 #"H" - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" # <<<<<<<<<<<<<< - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UINT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 73; - goto __pyx_L15; - } - - /* "numpy.pxd":832 - * elif t == NPY_INT: f[0] = 105 #"i" - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" # <<<<<<<<<<<<<< - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 0x6C; - goto __pyx_L15; - } - - /* "numpy.pxd":833 - * elif t == NPY_UINT: f[0] = 73 #"I" - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" # <<<<<<<<<<<<<< - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 76; - goto __pyx_L15; - } - - /* "numpy.pxd":834 - * elif t == NPY_LONG: f[0] = 108 #"l" - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" # <<<<<<<<<<<<<< - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGLONG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 0x71; - goto __pyx_L15; - } - - /* "numpy.pxd":835 - * elif t == NPY_ULONG: f[0] = 76 #"L" - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" # <<<<<<<<<<<<<< - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONGLONG); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 81; - goto __pyx_L15; - } - - /* "numpy.pxd":836 - * elif t == NPY_LONGLONG: f[0] = 113 #"q" - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" # <<<<<<<<<<<<<< - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_FLOAT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 0x66; - goto __pyx_L15; - } - - /* "numpy.pxd":837 - * elif t == NPY_ULONGLONG: f[0] = 81 #"Q" - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" # <<<<<<<<<<<<<< - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_DOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 0x64; - goto __pyx_L15; - } - - /* "numpy.pxd":838 - * elif t == NPY_FLOAT: f[0] = 102 #"f" - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" # <<<<<<<<<<<<<< - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 0x67; - goto __pyx_L15; - } - - /* "numpy.pxd":839 - * elif t == NPY_DOUBLE: f[0] = 100 #"d" - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf # <<<<<<<<<<<<<< - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CFLOAT); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 0x66; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L15; - } - - /* "numpy.pxd":840 - * elif t == NPY_LONGDOUBLE: f[0] = 103 #"g" - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd # <<<<<<<<<<<<<< - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - * elif t == NPY_OBJECT: f[0] = 79 #"O" - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CDOUBLE); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 0x64; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L15; - } - - /* "numpy.pxd":841 - * elif t == NPY_CFLOAT: f[0] = 90; f[1] = 102; f += 1 # Zf - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg # <<<<<<<<<<<<<< - * elif t == NPY_OBJECT: f[0] = 79 #"O" - * else: - */ - __pyx_t_5 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 90; - (__pyx_v_f[1]) = 0x67; - __pyx_v_f = (__pyx_v_f + 1); - goto __pyx_L15; - } - - /* "numpy.pxd":842 - * elif t == NPY_CDOUBLE: f[0] = 90; f[1] = 100; f += 1 # Zd - * elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg - * elif t == NPY_OBJECT: f[0] = 79 #"O" # <<<<<<<<<<<<<< - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - */ - __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_OBJECT); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_6) { - (__pyx_v_f[0]) = 79; - goto __pyx_L15; - } - - /* "numpy.pxd":844 - * elif t == NPY_OBJECT: f[0] = 79 #"O" - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) # <<<<<<<<<<<<<< - * f += 1 - * else: - */ - /*else*/ { - __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_5, 0, 0, 0); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - {__pyx_filename = __pyx_f[1]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_L15:; - - /* "numpy.pxd":845 - * else: - * raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t) - * f += 1 # <<<<<<<<<<<<<< - * else: - * # Cython ignores struct boundary information ("T{...}"), - */ - __pyx_v_f = (__pyx_v_f + 1); - - /* "numpy.pxd":820 - * offset[0] += child.itemsize - * - * if not PyDataType_HASFIELDS(child): # <<<<<<<<<<<<<< - * t = child.type_num - * if end - f < 5: - */ - goto __pyx_L13; - } - - /* "numpy.pxd":849 - * # Cython ignores struct boundary information ("T{...}"), - * # so don't output it - * f = _util_dtypestring(child, f, end, offset) # <<<<<<<<<<<<<< - * return f - * - */ - /*else*/ { - __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_v_f = __pyx_t_9; - } - __pyx_L13:; - - /* "numpy.pxd":794 - * cdef tuple fields - * - * for childname in descr.names: # <<<<<<<<<<<<<< - * fields = descr.fields[childname] - * child, new_offset = fields - */ - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numpy.pxd":850 - * # so don't output it - * f = _util_dtypestring(child, f, end, offset) - * return f # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_v_f; - goto __pyx_L0; - - /* "numpy.pxd":783 - * return PyArray_MultiIterNew(5, a, b, c, d, e) - * - * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL: # <<<<<<<<<<<<<< - * # Recursive utility function used in __getbuffer__ to get format - * # string. The new location in the format string is returned. - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_child); - __Pyx_XDECREF(__pyx_v_fields); - __Pyx_XDECREF(__pyx_v_childname); - __Pyx_XDECREF(__pyx_v_new_offset); - __Pyx_XDECREF(__pyx_v_t); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numpy.pxd":965 - * - * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * cdef PyObject* baseptr - * if base is None: - */ - -static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) { - PyObject *__pyx_v_baseptr; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - __Pyx_RefNannySetupContext("set_array_base", 0); - - /* "numpy.pxd":967 - * cdef inline void set_array_base(ndarray arr, object base): - * cdef PyObject* baseptr - * if base is None: # <<<<<<<<<<<<<< - * baseptr = NULL - * else: - */ - __pyx_t_1 = (__pyx_v_base == Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "numpy.pxd":968 - * cdef PyObject* baseptr - * if base is None: - * baseptr = NULL # <<<<<<<<<<<<<< - * else: - * Py_INCREF(base) # important to do this before decref below! - */ - __pyx_v_baseptr = NULL; - - /* "numpy.pxd":967 - * cdef inline void set_array_base(ndarray arr, object base): - * cdef PyObject* baseptr - * if base is None: # <<<<<<<<<<<<<< - * baseptr = NULL - * else: - */ - goto __pyx_L3; - } - - /* "numpy.pxd":970 - * baseptr = NULL - * else: - * Py_INCREF(base) # important to do this before decref below! # <<<<<<<<<<<<<< - * baseptr = base - * Py_XDECREF(arr.base) - */ - /*else*/ { - Py_INCREF(__pyx_v_base); - - /* "numpy.pxd":971 - * else: - * Py_INCREF(base) # important to do this before decref below! - * baseptr = base # <<<<<<<<<<<<<< - * Py_XDECREF(arr.base) - * arr.base = baseptr - */ - __pyx_v_baseptr = ((PyObject *)__pyx_v_base); - } - __pyx_L3:; - - /* "numpy.pxd":972 - * Py_INCREF(base) # important to do this before decref below! - * baseptr = base - * Py_XDECREF(arr.base) # <<<<<<<<<<<<<< - * arr.base = baseptr - * - */ - Py_XDECREF(__pyx_v_arr->base); - - /* "numpy.pxd":973 - * baseptr = base - * Py_XDECREF(arr.base) - * arr.base = baseptr # <<<<<<<<<<<<<< - * - * cdef inline object get_array_base(ndarray arr): - */ - __pyx_v_arr->base = __pyx_v_baseptr; - - /* "numpy.pxd":965 - * - * - * cdef inline void set_array_base(ndarray arr, object base): # <<<<<<<<<<<<<< - * cdef PyObject* baseptr - * if base is None: - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "numpy.pxd":975 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - -static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("get_array_base", 0); - - /* "numpy.pxd":976 - * - * cdef inline object get_array_base(ndarray arr): - * if arr.base is NULL: # <<<<<<<<<<<<<< - * return None - * else: - */ - __pyx_t_1 = ((__pyx_v_arr->base == NULL) != 0); - if (__pyx_t_1) { - - /* "numpy.pxd":977 - * cdef inline object get_array_base(ndarray arr): - * if arr.base is NULL: - * return None # <<<<<<<<<<<<<< - * else: - * return arr.base - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; - - /* "numpy.pxd":976 - * - * cdef inline object get_array_base(ndarray arr): - * if arr.base is NULL: # <<<<<<<<<<<<<< - * return None - * else: - */ - } - - /* "numpy.pxd":979 - * return None - * else: - * return arr.base # <<<<<<<<<<<<<< - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_arr->base)); - __pyx_r = ((PyObject *)__pyx_v_arr->base); - goto __pyx_L0; - } - - /* "numpy.pxd":975 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -static struct PyModuleDef __pyx_moduledef = { - #if PY_VERSION_HEX < 0x03020000 - { PyObject_HEAD_INIT(NULL) NULL, 0, NULL }, - #else - PyModuleDef_HEAD_INIT, - #endif - "vbgmm", - __pyx_k_vbgmm_pyx_simple_cython_wrapper, /* m_doc */ - -1, /* m_size */ - __pyx_methods /* m_methods */, - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, - {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, - {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0}, - {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, - {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, - {&__pyx_n_s_assign, __pyx_k_assign, sizeof(__pyx_k_assign), 0, 0, 1, 1}, - {&__pyx_n_s_bAssign, __pyx_k_bAssign, sizeof(__pyx_k_bAssign), 0, 0, 1, 1}, - {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1}, - {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, - {&__pyx_n_s_fit, __pyx_k_fit, sizeof(__pyx_k_fit), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_intc, __pyx_k_intc, sizeof(__pyx_k_intc), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_kp_s_mnt_data_chris_chris_repos_CONC, __pyx_k_mnt_data_chris_chris_repos_CONC, sizeof(__pyx_k_mnt_data_chris_chris_repos_CONC), 0, 0, 1, 0}, - {&__pyx_n_s_nClusters, __pyx_k_nClusters, sizeof(__pyx_k_nClusters), 0, 0, 1, 1}, - {&__pyx_n_s_nD, __pyx_k_nD, sizeof(__pyx_k_nD), 0, 0, 1, 1}, - {&__pyx_n_s_nK, __pyx_k_nK, sizeof(__pyx_k_nK), 0, 0, 1, 1}, - {&__pyx_n_s_nN, __pyx_k_nN, sizeof(__pyx_k_nN), 0, 0, 1, 1}, - {&__pyx_n_s_nS, __pyx_k_nS, sizeof(__pyx_k_nS), 0, 0, 1, 1}, - {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0}, - {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0}, - {&__pyx_n_s_vbgmm, __pyx_k_vbgmm, sizeof(__pyx_k_vbgmm), 0, 0, 1, 1}, - {&__pyx_n_s_xarray, __pyx_k_xarray, sizeof(__pyx_k_xarray), 0, 0, 1, 1}, - {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -static int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "numpy.pxd":215 - * if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)): - * raise ValueError(u"ndarray is not C contiguous") # <<<<<<<<<<<<<< - * - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "numpy.pxd":219 - * if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS) - * and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)): - * raise ValueError(u"ndarray is not Fortran contiguous") # <<<<<<<<<<<<<< - * - * info.buf = PyArray_DATA(self) - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "numpy.pxd":257 - * if ((descr.byteorder == c'>' and little_endian) or - * (descr.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * if t == NPY_BYTE: f = "b" - * elif t == NPY_UBYTE: f = "B" - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "numpy.pxd":799 - * - * if (end - f) - (new_offset - offset[0]) < 15: - * raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd") # <<<<<<<<<<<<<< - * - * if ((child.byteorder == c'>' and little_endian) or - */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - - /* "numpy.pxd":803 - * if ((child.byteorder == c'>' and little_endian) or - * (child.byteorder == c'<' and not little_endian)): - * raise ValueError(u"Non-native byte order not supported") # <<<<<<<<<<<<<< - * # One could encode it in the format string and have Cython - * # complain instead, BUT: < and > in format strings also imply - */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "numpy.pxd":823 - * t = child.type_num - * if end - f < 5: - * raise RuntimeError(u"Format string allocated too short.") # <<<<<<<<<<<<<< - * - * # Until ticket #99 is fixed, use integers to avoid warnings - */ - __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - - /* "vbgmm.pyx":19 - * @cython.wraparound(False) - * - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK, debug) - */ - __pyx_tuple__7 = PyTuple_Pack(9, __pyx_n_s_xarray, __pyx_n_s_nClusters, __pyx_n_s_debug, __pyx_n_s_nN, __pyx_n_s_nD, __pyx_n_s_nK, __pyx_n_s_nS, __pyx_n_s_bAssign, __pyx_n_s_assign); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - __pyx_codeobj__8 = (PyObject*)__Pyx_PyCode_New(3, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mnt_data_chris_chris_repos_CONC, __pyx_n_s_fit, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - return 0; - __pyx_L1_error:; - return -1; -} - -#if PY_MAJOR_VERSION < 3 -PyMODINIT_FUNC initvbgmm(void); /*proto*/ -PyMODINIT_FUNC initvbgmm(void) -#else -PyMODINIT_FUNC PyInit_vbgmm(void); /*proto*/ -PyMODINIT_FUNC PyInit_vbgmm(void) -#endif -{ - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_REFNANNY - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); - if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); - } - #endif - __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_vbgmm(void)", 0); - if (__Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("vbgmm", __pyx_methods, __pyx_k_vbgmm_pyx_simple_cython_wrapper, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if CYTHON_COMPILING_IN_PYPY - Py_INCREF(__pyx_b); - #endif - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - if (__pyx_module_is_main_vbgmm) { - if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (!PyDict_GetItemString(modules, "vbgmm")) { - if (unlikely(PyDict_SetItemString(modules, "vbgmm", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Global init code ---*/ - /*--- Variable export code ---*/ - /*--- Function export code ---*/ - /*--- Type init code ---*/ - /*--- Type import code ---*/ - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", - #if CYTHON_COMPILING_IN_PYPY - sizeof(PyTypeObject), - #else - sizeof(PyHeapTypeObject), - #endif - 0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr), 0); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_flatiter = __Pyx_ImportType("numpy", "flatiter", sizeof(PyArrayIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_flatiter)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_broadcast = __Pyx_ImportType("numpy", "broadcast", sizeof(PyArrayMultiIterObject), 0); if (unlikely(!__pyx_ptype_5numpy_broadcast)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject), 0); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_ptype_5numpy_ufunc = __Pyx_ImportType("numpy", "ufunc", sizeof(PyUFuncObject), 0); if (unlikely(!__pyx_ptype_5numpy_ufunc)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - /*--- Variable import code ---*/ - /*--- Function import code ---*/ - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - #endif - - /* "vbgmm.pyx":11 - * - * # import both numpy and the Cython declarations for numpy - * import numpy as np # <<<<<<<<<<<<<< - * cimport numpy as np - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "vbgmm.pyx":19 - * @cython.wraparound(False) - * - * def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, debug): # <<<<<<<<<<<<<< - * """ - * fit (xarray, assign, nK, debug) - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5vbgmm_1fit, NULL, __pyx_n_s_vbgmm); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_fit, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "vbgmm.pyx":1 - * """ # <<<<<<<<<<<<<< - * vbgmm.pyx - * - */ - __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numpy.pxd":975 - * arr.base = baseptr - * - * cdef inline object get_array_base(ndarray arr): # <<<<<<<<<<<<<< - * if arr.base is NULL: - * return None - */ - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init vbgmm", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_DECREF(__pyx_m); __pyx_m = 0; - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init vbgmm"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if PY_MAJOR_VERSION < 3 - return; - #else - return __pyx_m; - #endif -} - -/* --- Runtime support code --- */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule((char *)modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, (char *)"RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) { - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); -} -static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, - const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (none_allowed && obj == Py_None) return 1; - else if (exact) { - if (likely(Py_TYPE(obj) == type)) return 1; - #if PY_MAJOR_VERSION == 2 - else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; - #endif - } - else { - if (likely(PyObject_TypeCheck(obj, type))) return 1; - } - __Pyx_RaiseArgumentTypeInvalid(name, obj, type); - return 0; -} - -static CYTHON_INLINE int __Pyx_IsLittleEndian(void) { - unsigned int n = 1; - return *(unsigned char*)(&n) != 0; -} -static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx, - __Pyx_BufFmt_StackElem* stack, - __Pyx_TypeInfo* type) { - stack[0].field = &ctx->root; - stack[0].parent_offset = 0; - ctx->root.type = type; - ctx->root.name = "buffer dtype"; - ctx->root.offset = 0; - ctx->head = stack; - ctx->head->field = &ctx->root; - ctx->fmt_offset = 0; - ctx->head->parent_offset = 0; - ctx->new_packmode = '@'; - ctx->enc_packmode = '@'; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->is_complex = 0; - ctx->is_valid_array = 0; - ctx->struct_alignment = 0; - while (type->typegroup == 'S') { - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = 0; - type = type->fields->type; - } -} -static int __Pyx_BufFmt_ParseNumber(const char** ts) { - int count; - const char* t = *ts; - if (*t < '0' || *t > '9') { - return -1; - } else { - count = *t++ - '0'; - while (*t >= '0' && *t < '9') { - count *= 10; - count += *t++ - '0'; - } - } - *ts = t; - return count; -} -static int __Pyx_BufFmt_ExpectNumber(const char **ts) { - int number = __Pyx_BufFmt_ParseNumber(ts); - if (number == -1) - PyErr_Format(PyExc_ValueError,\ - "Does not understand character buffer dtype format string ('%c')", **ts); - return number; -} -static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) { - PyErr_Format(PyExc_ValueError, - "Unexpected format string character: '%c'", ch); -} -static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) { - switch (ch) { - case 'c': return "'char'"; - case 'b': return "'signed char'"; - case 'B': return "'unsigned char'"; - case 'h': return "'short'"; - case 'H': return "'unsigned short'"; - case 'i': return "'int'"; - case 'I': return "'unsigned int'"; - case 'l': return "'long'"; - case 'L': return "'unsigned long'"; - case 'q': return "'long long'"; - case 'Q': return "'unsigned long long'"; - case 'f': return (is_complex ? "'complex float'" : "'float'"); - case 'd': return (is_complex ? "'complex double'" : "'double'"); - case 'g': return (is_complex ? "'complex long double'" : "'long double'"); - case 'T': return "a struct"; - case 'O': return "Python object"; - case 'P': return "a pointer"; - case 's': case 'p': return "a string"; - case 0: return "end"; - default: return "unparseable format string"; - } -} -static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return 2; - case 'i': case 'I': case 'l': case 'L': return 4; - case 'q': case 'Q': return 8; - case 'f': return (is_complex ? 8 : 4); - case 'd': return (is_complex ? 16 : 8); - case 'g': { - PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g').."); - return 0; - } - case 'O': case 'P': return sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) { - switch (ch) { - case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(short); - case 'i': case 'I': return sizeof(int); - case 'l': case 'L': return sizeof(long); - #ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(PY_LONG_LONG); - #endif - case 'f': return sizeof(float) * (is_complex ? 2 : 1); - case 'd': return sizeof(double) * (is_complex ? 2 : 1); - case 'g': return sizeof(long double) * (is_complex ? 2 : 1); - case 'O': case 'P': return sizeof(void*); - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } - } -} -typedef struct { char c; short x; } __Pyx_st_short; -typedef struct { char c; int x; } __Pyx_st_int; -typedef struct { char c; long x; } __Pyx_st_long; -typedef struct { char c; float x; } __Pyx_st_float; -typedef struct { char c; double x; } __Pyx_st_double; -typedef struct { char c; long double x; } __Pyx_st_longdouble; -typedef struct { char c; void *x; } __Pyx_st_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong; -#endif -static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG); -#endif - case 'f': return sizeof(__Pyx_st_float) - sizeof(float); - case 'd': return sizeof(__Pyx_st_double) - sizeof(double); - case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -/* These are for computing the padding at the end of the struct to align - on the first member of the struct. This will probably the same as above, - but we don't have any guarantees. - */ -typedef struct { short x; char c; } __Pyx_pad_short; -typedef struct { int x; char c; } __Pyx_pad_int; -typedef struct { long x; char c; } __Pyx_pad_long; -typedef struct { float x; char c; } __Pyx_pad_float; -typedef struct { double x; char c; } __Pyx_pad_double; -typedef struct { long double x; char c; } __Pyx_pad_longdouble; -typedef struct { void *x; char c; } __Pyx_pad_void_p; -#ifdef HAVE_LONG_LONG -typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong; -#endif -static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) { - switch (ch) { - case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1; - case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short); - case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int); - case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long); -#ifdef HAVE_LONG_LONG - case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG); -#endif - case 'f': return sizeof(__Pyx_pad_float) - sizeof(float); - case 'd': return sizeof(__Pyx_pad_double) - sizeof(double); - case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double); - case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*); - default: - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } -} -static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) { - switch (ch) { - case 'c': - return 'H'; - case 'b': case 'h': case 'i': - case 'l': case 'q': case 's': case 'p': - return 'I'; - case 'B': case 'H': case 'I': case 'L': case 'Q': - return 'U'; - case 'f': case 'd': case 'g': - return (is_complex ? 'C' : 'R'); - case 'O': - return 'O'; - case 'P': - return 'P'; - default: { - __Pyx_BufFmt_RaiseUnexpectedChar(ch); - return 0; - } - } -} -static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) { - if (ctx->head == NULL || ctx->head->field == &ctx->root) { - const char* expected; - const char* quote; - if (ctx->head == NULL) { - expected = "end"; - quote = ""; - } else { - expected = ctx->head->field->type->name; - quote = "'"; - } - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected %s%s%s but got %s", - quote, expected, quote, - __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex)); - } else { - __Pyx_StructField* field = ctx->head->field; - __Pyx_StructField* parent = (ctx->head - 1)->field; - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'", - field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex), - parent->type->name, field->name); - } -} -static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) { - char group; - size_t size, offset, arraysize = 1; - if (ctx->enc_type == 0) return 0; - if (ctx->head->field->type->arraysize[0]) { - int i, ndim = 0; - if (ctx->enc_type == 's' || ctx->enc_type == 'p') { - ctx->is_valid_array = ctx->head->field->type->ndim == 1; - ndim = 1; - if (ctx->enc_count != ctx->head->field->type->arraysize[0]) { - PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %zu", - ctx->head->field->type->arraysize[0], ctx->enc_count); - return -1; - } - } - if (!ctx->is_valid_array) { - PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d", - ctx->head->field->type->ndim, ndim); - return -1; - } - for (i = 0; i < ctx->head->field->type->ndim; i++) { - arraysize *= ctx->head->field->type->arraysize[i]; - } - ctx->is_valid_array = 0; - ctx->enc_count = 1; - } - group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex); - do { - __Pyx_StructField* field = ctx->head->field; - __Pyx_TypeInfo* type = field->type; - if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') { - size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex); - } else { - size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex); - } - if (ctx->enc_packmode == '@') { - size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex); - size_t align_mod_offset; - if (align_at == 0) return -1; - align_mod_offset = ctx->fmt_offset % align_at; - if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset; - if (ctx->struct_alignment == 0) - ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type, - ctx->is_complex); - } - if (type->size != size || type->typegroup != group) { - if (type->typegroup == 'C' && type->fields != NULL) { - size_t parent_offset = ctx->head->parent_offset + field->offset; - ++ctx->head; - ctx->head->field = type->fields; - ctx->head->parent_offset = parent_offset; - continue; - } - if ((type->typegroup == 'H' || group == 'H') && type->size == size) { - } else { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } - } - offset = ctx->head->parent_offset + field->offset; - if (ctx->fmt_offset != offset) { - PyErr_Format(PyExc_ValueError, - "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected", - (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset); - return -1; - } - ctx->fmt_offset += size; - if (arraysize) - ctx->fmt_offset += (arraysize - 1) * size; - --ctx->enc_count; - while (1) { - if (field == &ctx->root) { - ctx->head = NULL; - if (ctx->enc_count != 0) { - __Pyx_BufFmt_RaiseExpected(ctx); - return -1; - } - break; - } - ctx->head->field = ++field; - if (field->type == NULL) { - --ctx->head; - field = ctx->head->field; - continue; - } else if (field->type->typegroup == 'S') { - size_t parent_offset = ctx->head->parent_offset + field->offset; - if (field->type->fields->type == NULL) continue; - field = field->type->fields; - ++ctx->head; - ctx->head->field = field; - ctx->head->parent_offset = parent_offset; - break; - } else { - break; - } - } - } while (ctx->enc_count); - ctx->enc_type = 0; - ctx->is_complex = 0; - return 0; -} -static CYTHON_INLINE PyObject * -__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp) -{ - const char *ts = *tsp; - int i = 0, number; - int ndim = ctx->head->field->type->ndim; -; - ++ts; - if (ctx->new_count != 1) { - PyErr_SetString(PyExc_ValueError, - "Cannot handle repeated arrays in format string"); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - while (*ts && *ts != ')') { - switch (*ts) { - case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue; - default: break; - } - number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i]) - return PyErr_Format(PyExc_ValueError, - "Expected a dimension of size %zu, got %d", - ctx->head->field->type->arraysize[i], number); - if (*ts != ',' && *ts != ')') - return PyErr_Format(PyExc_ValueError, - "Expected a comma in format string, got '%c'", *ts); - if (*ts == ',') ts++; - i++; - } - if (i != ndim) - return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d", - ctx->head->field->type->ndim, i); - if (!*ts) { - PyErr_SetString(PyExc_ValueError, - "Unexpected end of format string, expected ')'"); - return NULL; - } - ctx->is_valid_array = 1; - ctx->new_count = 1; - *tsp = ++ts; - return Py_None; -} -static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) { - int got_Z = 0; - while (1) { - switch(*ts) { - case 0: - if (ctx->enc_type != 0 && ctx->head == NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - if (ctx->head != NULL) { - __Pyx_BufFmt_RaiseExpected(ctx); - return NULL; - } - return ts; - case ' ': - case '\r': - case '\n': - ++ts; - break; - case '<': - if (!__Pyx_IsLittleEndian()) { - PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '>': - case '!': - if (__Pyx_IsLittleEndian()) { - PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler"); - return NULL; - } - ctx->new_packmode = '='; - ++ts; - break; - case '=': - case '@': - case '^': - ctx->new_packmode = *ts++; - break; - case 'T': - { - const char* ts_after_sub; - size_t i, struct_count = ctx->new_count; - size_t struct_alignment = ctx->struct_alignment; - ctx->new_count = 1; - ++ts; - if (*ts != '{') { - PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'"); - return NULL; - } - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; - ctx->enc_count = 0; - ctx->struct_alignment = 0; - ++ts; - ts_after_sub = ts; - for (i = 0; i != struct_count; ++i) { - ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts); - if (!ts_after_sub) return NULL; - } - ts = ts_after_sub; - if (struct_alignment) ctx->struct_alignment = struct_alignment; - } - break; - case '}': - { - size_t alignment = ctx->struct_alignment; - ++ts; - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_type = 0; - if (alignment && ctx->fmt_offset % alignment) { - ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment); - } - } - return ts; - case 'x': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->fmt_offset += ctx->new_count; - ctx->new_count = 1; - ctx->enc_count = 0; - ctx->enc_type = 0; - ctx->enc_packmode = ctx->new_packmode; - ++ts; - break; - case 'Z': - got_Z = 1; - ++ts; - if (*ts != 'f' && *ts != 'd' && *ts != 'g') { - __Pyx_BufFmt_RaiseUnexpectedChar('Z'); - return NULL; - } - case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I': - case 'l': case 'L': case 'q': case 'Q': - case 'f': case 'd': case 'g': - case 'O': case 'p': - if (ctx->enc_type == *ts && got_Z == ctx->is_complex && - ctx->enc_packmode == ctx->new_packmode) { - ctx->enc_count += ctx->new_count; - ctx->new_count = 1; - got_Z = 0; - ++ts; - break; - } - case 's': - if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL; - ctx->enc_count = ctx->new_count; - ctx->enc_packmode = ctx->new_packmode; - ctx->enc_type = *ts; - ctx->is_complex = got_Z; - ++ts; - ctx->new_count = 1; - got_Z = 0; - break; - case ':': - ++ts; - while(*ts != ':') ++ts; - ++ts; - break; - case '(': - if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL; - break; - default: - { - int number = __Pyx_BufFmt_ExpectNumber(&ts); - if (number == -1) return NULL; - ctx->new_count = (size_t)number; - } - } - } -} -static CYTHON_INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) { - buf->buf = NULL; - buf->obj = NULL; - buf->strides = __Pyx_zeros; - buf->shape = __Pyx_zeros; - buf->suboffsets = __Pyx_minusones; -} -static CYTHON_INLINE int __Pyx_GetBufferAndValidate( - Py_buffer* buf, PyObject* obj, __Pyx_TypeInfo* dtype, int flags, - int nd, int cast, __Pyx_BufFmt_StackElem* stack) -{ - if (obj == Py_None || obj == NULL) { - __Pyx_ZeroBuffer(buf); - return 0; - } - buf->buf = NULL; - if (__Pyx_GetBuffer(obj, buf, flags) == -1) goto fail; - if (buf->ndim != nd) { - PyErr_Format(PyExc_ValueError, - "Buffer has wrong number of dimensions (expected %d, got %d)", - nd, buf->ndim); - goto fail; - } - if (!cast) { - __Pyx_BufFmt_Context ctx; - __Pyx_BufFmt_Init(&ctx, stack, dtype); - if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail; - } - if ((unsigned)buf->itemsize != dtype->size) { - PyErr_Format(PyExc_ValueError, - "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)", - buf->itemsize, (buf->itemsize > 1) ? "s" : "", - dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : ""); - goto fail; - } - if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones; - return 0; -fail:; - __Pyx_ZeroBuffer(buf); - return -1; -} -static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) { - if (info->buf == NULL) return; - if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL; - __Pyx_ReleaseBuffer(info); -} - -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON - result = PyDict_GetItem(__pyx_d, name); - if (likely(result)) { - Py_INCREF(result); - } else { -#else - result = PyObject_GetItem(__pyx_d, name); - if (!result) { - PyErr_Clear(); -#endif - result = __Pyx_GetBuiltinName(name); - } - return result; -} - -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (likely(PyObject_TypeCheck(obj, type))) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); - return 0; -} - -static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyThreadState *tstate = PyThreadState_GET(); - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_Restore(type, value, tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) { -#if CYTHON_COMPILING_IN_CPYTHON - PyThreadState *tstate = PyThreadState_GET(); - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(type, value, tb); -#endif -} - -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; - } else { - type = instance_class; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } -#if PY_VERSION_HEX >= 0x03030000 - if (cause) { -#else - if (cause && cause != Py_None) { -#endif - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else - PyThreadState *tstate = PyThreadState_GET(); - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(1); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - #endif - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_VERSION_HEX < 0x03030000 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_VERSION_HEX < 0x03030000 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - py_code = __pyx_find_code_object(c_line ? c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? c_line : py_line, py_code); - } - py_frame = PyFrame_New( - PyThreadState_GET(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = py_line; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -#if PY_MAJOR_VERSION < 3 -static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { - if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); - if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags); - PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name); - return -1; -} -static void __Pyx_ReleaseBuffer(Py_buffer *view) { - PyObject *obj = view->obj; - if (!obj) return; - if (PyObject_CheckBuffer(obj)) { - PyBuffer_Release(view); - return; - } - if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) { __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view); return; } - Py_DECREF(obj); - view->obj = NULL; -} -#endif - - - #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -#if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" -#endif - -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) -1, const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) digits[0]) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { - const int neg_one = (int) -1, const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); - } - } else { - if (sizeof(int) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(int), - little, !is_unsigned); - } -} - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return ::std::complex< float >(x, y); - } - #else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return x + y*(__pyx_t_float_complex)_Complex_I; - } - #endif -#else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - __pyx_t_float_complex z; - z.real = x; - z.imag = y; - return z; - } -#endif - -#if CYTHON_CCOMPLEX -#else - static CYTHON_INLINE int __Pyx_c_eqf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - return (a.real == b.real) && (a.imag == b.imag); - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sumf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_difff(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prodf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quotf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - float denom = b.real * b.real + b.imag * b.imag; - z.real = (a.real * b.real + a.imag * b.imag) / denom; - z.imag = (a.imag * b.real - a.real * b.imag) / denom; - return z; - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_negf(__pyx_t_float_complex a) { - __pyx_t_float_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zerof(__pyx_t_float_complex a) { - return (a.real == 0) && (a.imag == 0); - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conjf(__pyx_t_float_complex a) { - __pyx_t_float_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; - } - #if 1 - static CYTHON_INLINE float __Pyx_c_absf(__pyx_t_float_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrtf(z.real*z.real + z.imag*z.imag); - #else - return hypotf(z.real, z.imag); - #endif - } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_powf(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - float r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - float denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(a, a); - case 3: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(z, a); - case 4: - z = __Pyx_c_prodf(a, a); - return __Pyx_c_prodf(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } - r = a.real; - theta = 0; - } else { - r = __Pyx_c_absf(a); - theta = atan2f(a.imag, a.real); - } - lnr = logf(r); - z_r = expf(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cosf(z_theta); - z.imag = z_r * sinf(z_theta); - return z; - } - #endif -#endif - -#if CYTHON_CCOMPLEX - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return ::std::complex< double >(x, y); - } - #else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return x + y*(__pyx_t_double_complex)_Complex_I; - } - #endif -#else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - __pyx_t_double_complex z; - z.real = x; - z.imag = y; - return z; - } -#endif - -#if CYTHON_CCOMPLEX -#else - static CYTHON_INLINE int __Pyx_c_eq(__pyx_t_double_complex a, __pyx_t_double_complex b) { - return (a.real == b.real) && (a.imag == b.imag); - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double denom = b.real * b.real + b.imag * b.imag; - z.real = (a.real * b.real + a.imag * b.imag) / denom; - z.imag = (a.imag * b.real - a.real * b.imag) / denom; - return z; - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zero(__pyx_t_double_complex a) { - return (a.real == 0) && (a.imag == 0); - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; - } - #if 1 - static CYTHON_INLINE double __Pyx_c_abs(__pyx_t_double_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrt(z.real*z.real + z.imag*z.imag); - #else - return hypot(z.real, z.imag); - #endif - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - double denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(a, a); - case 3: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(z, a); - case 4: - z = __Pyx_c_prod(a, a); - return __Pyx_c_prod(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } - r = a.real; - theta = 0; - } else { - r = __Pyx_c_abs(a); - theta = atan2(a.imag, a.real); - } - lnr = log(r); - z_r = exp(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cos(z_theta); - z.imag = z_r * sin(z_theta); - return z; - } - #endif -#endif - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ptrdiff_t(ptrdiff_t value) { - const ptrdiff_t neg_one = (ptrdiff_t) -1, const_zero = (ptrdiff_t) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(ptrdiff_t) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(ptrdiff_t) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(ptrdiff_t) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); - } - } else { - if (sizeof(ptrdiff_t) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(ptrdiff_t) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(ptrdiff_t), - little, !is_unsigned); - } -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) { - const enum NPY_TYPES neg_one = (enum NPY_TYPES) -1, const_zero = (enum NPY_TYPES) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(enum NPY_TYPES) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); - } - } else { - if (sizeof(enum NPY_TYPES) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(enum NPY_TYPES) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(enum NPY_TYPES), - little, !is_unsigned); - } -} - -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) -1, const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) -1, const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) digits[0]) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - } -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_Int(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_Int(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - return PyErr_WarnEx(NULL, message, 1); - } - return 0; -} - -#ifndef __PYX_HAVE_RT_ImportModule -#define __PYX_HAVE_RT_ImportModule -static PyObject *__Pyx_ImportModule(const char *name) { - PyObject *py_name = 0; - PyObject *py_module = 0; - py_name = __Pyx_PyIdentifier_FromString(name); - if (!py_name) - goto bad; - py_module = PyImport_Import(py_name); - Py_DECREF(py_name); - return py_module; -bad: - Py_XDECREF(py_name); - return 0; -} -#endif - -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, - size_t size, int strict) -{ - PyObject *py_module = 0; - PyObject *result = 0; - PyObject *py_name = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; -#endif - py_module = __Pyx_ImportModule(module_name); - if (!py_module) - goto bad; - py_name = __Pyx_PyIdentifier_FromString(class_name); - if (!py_name) - goto bad; - result = PyObject_GetAttr(py_module, py_name); - Py_DECREF(py_name); - py_name = 0; - Py_DECREF(py_module); - py_module = 0; - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; - } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; -#else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; -#endif - if (!strict && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility", - module_name, class_name); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; - } - else if ((size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s has the wrong size, try recompiling", - module_name, class_name); - goto bad; - } - return (PyTypeObject *)result; -bad: - Py_XDECREF(py_module); - Py_XDECREF(result); - return NULL; -} -#endif - -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if CYTHON_COMPILING_IN_CPYTHON && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { -#if PY_VERSION_HEX < 0x03030000 - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -#else - if (__Pyx_PyUnicode_READY(o) == -1) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (PyUnicode_IS_ASCII(o)) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -#endif - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) { - PyNumberMethods *m; - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (PyInt_Check(x) || PyLong_Check(x)) -#else - if (PyLong_Check(x)) -#endif - return __Pyx_NewRef(x); - m = Py_TYPE(x)->tp_as_number; -#if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = PyNumber_Long(x); - } -#else - if (m && m->nb_int) { - name = "int"; - res = PyNumber_Long(x); - } -#endif - if (res) { -#if PY_MAJOR_VERSION < 3 - if (!PyInt_Check(res) && !PyLong_Check(res)) { -#else - if (!PyLong_Check(res)) { -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - name, name, Py_TYPE(res)->tp_name); - Py_DECREF(res); - return NULL; - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(x); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; - } else { - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/requirements.txt b/requirements.txt index d5f1e1c..7366a55 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ python-dateutil>=2.2 pytz>=2013.9 scikit-learn>=0.14.1 scipy>=0.13.3 +tqdm>=4.11.2 From f68a902c2ce325816b808fa5ee6f3866bfe65c94 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 10:08:30 +0200 Subject: [PATCH 31/78] Possible to run with 100 percent pca --- bin/concoct | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/concoct b/bin/concoct index 92fc68d..5171043 100755 --- a/bin/concoct +++ b/bin/concoct @@ -36,7 +36,7 @@ def main(args): # Fix special case in pca_components if args.pca_components == "All": - args.pca_components = joined[args.length_threshold_filter].shape[1] + args.pca_components = joined.shape[1] #PCA on the contigs that have kmer count greater than length_threshold transform_filter, pca = perform_pca( From 3432720ccba7d61ef8fd93e20796bd72badda331 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 10:08:55 +0200 Subject: [PATCH 32/78] Possible to have gzipped fasta file for gen input table script --- scripts/gen_input_table.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/scripts/gen_input_table.py b/scripts/gen_input_table.py index 0462d7b..1cd9580 100755 --- a/scripts/gen_input_table.py +++ b/scripts/gen_input_table.py @@ -8,7 +8,7 @@ import subprocess import errno from signal import signal, SIGPIPE, SIG_DFL - +import gzip from Bio import SeqIO def get_gc_and_len_dict(fastafile): @@ -16,10 +16,16 @@ def get_gc_and_len_dict(fastafile): for the inner dictionary.""" out_dict = {} - for rec in SeqIO.parse(fastafile, "fasta"): - out_dict[rec.id] = {} - out_dict[rec.id]["length"] = len(rec.seq) - + if fastafile.endswith('.gz'): + with gzip.open(fastafile) as fhandle: + for rec in SeqIO.parse(fhandle, "fasta"): + out_dict[rec.id] = {} + out_dict[rec.id]["length"] = len(rec.seq) + else: + with open(fastafile) as fhandle: + for rec in SeqIO.parse(fhandle, "fasta"): + out_dict[rec.id] = {} + out_dict[rec.id]["length"] = len(rec.seq) return out_dict From 180ebb784bd8aba26082d1ba699282ce8d0a8f32 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 10:53:48 +0200 Subject: [PATCH 33/78] Removed old c-concoct code --- c-concoct/test/PCA_components_data_gt1000.csv | 25 - .../test/PCA_transformed_data_gt1000.csv | 444 ---- c-concoct/vbgmmmodule.c | 1845 ----------------- c-concoct/vbgmmmodule.h | 189 -- c-concoct/vbgmmmodule.o | Bin 52176 -> 0 bytes 5 files changed, 2503 deletions(-) delete mode 100644 c-concoct/test/PCA_components_data_gt1000.csv delete mode 100644 c-concoct/test/PCA_transformed_data_gt1000.csv delete mode 100644 c-concoct/vbgmmmodule.c delete mode 100644 c-concoct/vbgmmmodule.h delete mode 100644 c-concoct/vbgmmmodule.o diff --git a/c-concoct/test/PCA_components_data_gt1000.csv b/c-concoct/test/PCA_components_data_gt1000.csv deleted file mode 100644 index c20ab28..0000000 --- a/c-concoct/test/PCA_components_data_gt1000.csv +++ /dev/null @@ -1,25 +0,0 @@ -2.52801360e-02,6.35446750e-03,3.13917466e-02,2.45080790e-03,-4.10225609e-03,-3.26596508e-03,2.54404039e-02,-2.94336807e-03,6.71810523e-03,1.24634913e-02,1.02380632e-02,2.06566188e-02,1.39890000e-02,1.58931251e-03,-1.71962583e-02,-9.63427336e-03,2.04093805e-02,5.04569386e-03,8.04076310e-03,8.82027865e-04,2.20072148e-03,2.25337464e-02,-1.15116680e-02,1.39212920e-02,4.77093222e-03,2.46338484e-02,-1.19619079e-03,1.41873546e-02,1.13921984e-02,-3.14615688e-02,-8.69022557e-04,1.81262486e-02,1.06166096e-02,1.77021783e-03,1.49708813e-02,2.85358964e-02,-8.63461813e-03,9.14515275e-03,-3.42959371e-03,7.72534850e-03,-4.88825796e-03,2.37699530e-02,3.12427571e-02,-1.25330678e-02,9.99043215e-03,7.86341203e-03,3.39075082e-02,1.49152035e-02,1.03039323e-02,1.78976720e-02,-1.55847168e-02,-3.62688139e-02,-5.13625915e-02,-2.86377133e-02,-2.70196463e-02,2.01502131e-02,-5.42537819e-03,7.76470149e-03,1.70175881e-02,2.72141156e-02,3.41510350e-04,1.11101472e-02,1.46693709e-02,1.29302793e-02,3.94590153e-03,-5.97747570e-03,1.40762122e-02,1.61645193e-02,-3.08054338e-02,9.82607740e-03,1.17713849e-02,2.39147245e-02,-2.11114766e-03,2.97241695e-02,2.78242565e-03,2.20731735e-02,1.53297252e-02,2.21981891e-02,1.08459690e-02,-5.72347221e-02,1.03129098e-02,1.54651678e-02,1.38311704e-02,4.44794477e-02,-5.12696594e-03,3.06966420e-02,1.53188090e-02,9.70648510e-03,2.45809344e-02,-1.26469554e-02,1.66282978e-02,1.46028946e-02,-6.64287955e-04,2.88087455e-02,-4.91853609e-03,-7.37187503e-02,-4.37083939e-02,-4.85665187e-02,-2.45982053e-02,-7.68133603e-03,-1.09276911e-02,-9.61902962e-03,6.71476504e-03,-3.90197568e-02,-8.04652640e-03,-9.98981813e-03,-4.93944749e-02,-1.08954252e-02,-4.75999376e-03,7.68755902e-03,-8.97019809e-04,1.61707642e-02,1.17401597e-02,-7.37496195e-02,-7.19688660e-03,-5.08422640e-03,1.91056846e-02,-2.44458311e-03,-9.13026305e-03,-3.16045254e-02,-6.25392662e-02,1.37704240e-02,1.83167823e-02,-2.20882360e-02,-3.05811538e-02,-3.51928432e-02,1.96691723e-02,2.33937197e-03,6.29008414e-03,-2.86593871e-02,4.58348495e-02,1.89155078e-02,-4.28342059e-02,-2.30458592e-02,-7.95780199e-02,-6.94901890e-03,-1.78239331e-02,-2.35982053e-01,-9.12571957e-02,1.51073371e-01,3.75346611e-01,3.70484301e-01,-1.41802316e-01,3.30524321e-01,-3.66349411e-01,3.14361507e-02,1.31365013e-01,4.85095771e-03,-3.77805975e-01,-1.53403945e-01,-1.56879442e-01,-2.93076945e-01,-1.93336568e-02 --9.24452531e-02,-8.83770959e-02,-8.40385854e-02,-4.69873011e-02,-1.03646156e-01,-8.66107004e-02,-8.99428659e-02,-6.13827071e-02,-6.46582461e-02,-7.17842399e-02,-1.68462087e-02,-4.01580286e-02,-5.06532889e-02,-3.23681029e-02,1.77588144e-02,2.00655661e-03,-1.44751834e-01,-1.21786870e-01,-7.64976678e-02,-8.14575319e-02,-1.38677202e-01,-1.06187136e-01,-5.36962717e-02,-5.35104475e-02,-3.63834619e-02,-3.94435305e-02,-1.08711964e-02,-3.92902410e-02,-4.98782015e-02,2.10577933e-02,-1.55275087e-02,-6.14632677e-02,-3.45450530e-02,-1.11653039e-02,-6.31405244e-02,-5.79425455e-02,-7.52519724e-03,-1.36614312e-02,1.96363172e-02,2.08313600e-02,4.14464304e-02,-2.07662069e-02,-2.53178280e-02,4.48116831e-02,1.48733658e-02,-6.68054217e-02,-4.41499378e-02,-5.35457621e-03,-4.59730205e-02,-1.83512694e-02,-1.62384212e-02,4.24877076e-02,5.72435419e-02,5.03181072e-02,6.19887273e-02,-8.14026388e-03,3.06741927e-02,3.06052301e-02,-1.29971219e-01,-1.12737361e-01,-8.04332067e-02,-1.13982184e-01,-9.64261915e-02,-1.10724380e-01,-3.90880641e-02,-5.81772143e-03,-4.42922854e-02,-6.07824231e-02,-1.45072005e-03,-3.71188768e-02,-9.52261062e-02,-9.00620886e-02,-8.14776584e-02,-9.67610293e-02,-3.56934153e-02,-6.45745686e-02,-6.50960421e-02,-4.82847705e-02,-4.22360504e-02,4.34812549e-02,-1.70359689e-02,-4.85736495e-02,-1.46101622e-02,-4.51903856e-02,-1.16864506e-02,-2.50924091e-02,1.53771237e-02,1.89181247e-02,-3.67373560e-02,4.24237866e-02,4.03290136e-03,-3.08956222e-02,1.42522609e-02,-4.56408201e-02,-1.20384258e-02,6.71525366e-02,5.56396097e-02,7.26330322e-02,2.52099822e-02,1.89456525e-02,4.05126939e-03,2.39826774e-02,6.79846909e-03,5.93076079e-02,4.55519652e-02,3.18085993e-02,8.12094360e-02,6.13321153e-02,2.49689433e-02,-1.21812327e-02,-4.22871388e-03,4.04741027e-02,3.02532303e-02,9.78479135e-02,3.41259820e-02,2.13085011e-02,2.83812339e-02,5.79216733e-02,8.14775398e-02,1.05433459e-01,1.20306707e-01,2.14425705e-02,3.00986969e-02,8.24353775e-02,1.11291700e-01,9.18037523e-02,-5.17366668e-02,1.90719823e-03,3.22299658e-02,8.52381224e-02,1.31426789e-01,4.82689851e-02,7.52849155e-02,8.38339480e-02,1.42721925e-01,6.00143309e-02,7.72851839e-02,7.60688324e-02,5.00700209e-02,2.84948369e-01,2.18302163e-01,2.05146373e-01,-1.16993092e-02,2.17726684e-01,5.80107680e-02,1.78838134e-01,1.12582163e-01,2.21613934e-02,1.69721649e-01,-2.27235445e-01,3.03558212e-02,3.15828876e-01,-1.17850967e-01 -5.91413319e-02,8.38431955e-02,4.46065458e-02,4.75660004e-02,1.03346121e-01,1.05839501e-01,6.21192947e-02,6.86138921e-02,4.20000322e-02,4.86431972e-02,-3.84292826e-03,-9.62074049e-03,4.69042839e-02,4.64357736e-02,-3.19461851e-03,1.84087976e-02,1.15975874e-01,1.00662865e-01,7.29407846e-02,5.33857977e-02,1.34311229e-01,9.07430315e-02,5.44343799e-02,3.05514611e-02,3.72567209e-02,-2.47232618e-03,-1.68419377e-02,1.67401396e-02,2.67761483e-02,-1.82655124e-02,8.96708222e-03,3.61839350e-02,1.63797270e-02,-9.73743399e-03,5.06869964e-02,1.54512747e-02,2.64376320e-03,-3.81485121e-04,-1.17628280e-02,-3.75446148e-02,-3.84842853e-02,-2.78307391e-02,-3.88687213e-02,-7.29583013e-02,-4.23828193e-02,5.54382399e-02,1.35202945e-02,5.52282044e-03,6.39132959e-02,-6.60517959e-03,3.10647729e-02,-2.33950966e-02,-5.74252857e-03,-4.52204309e-02,-6.74200796e-02,-2.16553728e-02,-5.69908541e-02,-4.66119729e-02,1.07296612e-01,9.59728288e-02,9.82368991e-02,1.13309054e-01,7.40411868e-02,6.39118823e-02,5.64727994e-02,3.60231339e-02,2.96313116e-02,5.50281713e-02,-3.04930654e-03,1.05527344e-02,1.55911262e-01,1.30689736e-01,7.30161236e-02,5.59982712e-02,3.66988706e-02,5.48763102e-02,2.90387671e-02,1.72007043e-02,3.88728539e-02,-1.47226186e-02,1.56815574e-02,2.09875934e-02,-1.79268835e-02,9.69873350e-03,1.16315828e-02,-2.45508485e-03,-3.88491558e-02,-4.97961252e-02,3.39007783e-03,-7.58204094e-02,-5.36433340e-02,-2.20378011e-02,-1.19654900e-02,-8.65772313e-03,7.97404446e-03,-1.66399208e-02,-4.34686060e-02,-5.29449206e-02,-2.53676139e-02,-9.82635060e-03,-1.99277595e-02,-1.31049225e-02,-2.58005881e-02,-6.54618620e-02,-3.46695501e-02,-5.06636637e-02,-6.99130951e-02,-7.65292807e-02,-2.52558347e-02,-8.12409423e-03,1.12155804e-02,-6.73152857e-02,-8.47795951e-02,-5.62977055e-02,-5.46237990e-02,-3.01275261e-02,-7.52534223e-02,-5.67883114e-02,-1.01929397e-01,-1.29479326e-01,-1.00776682e-01,-7.60898383e-02,-9.44031507e-02,-1.23682895e-01,-1.44292613e-01,-1.28322752e-01,3.16460784e-04,-3.95840417e-02,-5.20910007e-02,-7.85457930e-02,1.87369293e-01,-7.73911312e-02,-6.09135725e-02,-8.67943988e-02,-1.25543204e-01,-8.80652827e-02,5.41068671e-02,8.40931149e-02,4.51015064e-02,3.22770085e-01,1.04155237e-01,1.18487656e-01,1.44020288e-02,1.84323049e-01,1.94922335e-01,9.91881712e-02,1.18775709e-03,3.16807155e-02,2.58540857e-01,-1.48965151e-01,7.28622049e-02,3.71301899e-01,-8.92696785e-02 --1.07122488e-01,-8.40611215e-02,-4.14528090e-02,-7.14557470e-02,-8.08021613e-02,-8.66126022e-02,-3.42865919e-02,-6.02018621e-02,6.06322982e-03,1.12009967e-02,3.33608817e-02,1.37476778e-02,-3.07525798e-02,-2.51065257e-02,-9.61181979e-02,-5.22392658e-02,-8.26771827e-02,-3.53320712e-02,-4.58864029e-02,-4.93177240e-02,-8.00460194e-02,-7.63389785e-02,-5.76931970e-02,3.82240077e-02,4.52036948e-04,3.32475039e-02,2.08143495e-02,5.29137402e-02,3.23661482e-02,-5.16194441e-02,6.65002579e-05,7.08063674e-03,8.94086516e-02,6.32248227e-02,-1.51895488e-02,5.33034816e-02,4.67732038e-02,8.40261684e-02,1.72716955e-02,2.94135273e-03,2.62587827e-02,4.97471559e-02,8.66507891e-02,-1.63138108e-02,-1.90414601e-02,-4.71551292e-02,3.75637872e-02,-1.19215584e-02,-3.19976553e-02,2.47558608e-02,2.31726798e-02,-4.82158863e-02,-3.50667346e-02,-4.45548153e-02,-4.08256395e-03,1.44021076e-02,-4.08045802e-02,-5.20273078e-02,-5.33438501e-02,-6.00013796e-03,-7.70795108e-02,-5.24292338e-02,-2.89004643e-02,-2.17045650e-02,-7.43878640e-03,-5.56468346e-02,-1.19673087e-02,-1.25070574e-02,-3.27488412e-02,-3.74035851e-02,-1.08746417e-02,-4.94260400e-02,-5.71222286e-02,-1.05935735e-01,-5.45871337e-02,-7.65817836e-03,-6.19367239e-02,-5.10940180e-02,-2.06259179e-02,-7.88933408e-02,-2.74171229e-02,1.16778856e-01,2.16800564e-02,4.95794331e-03,2.33512064e-02,2.94584596e-02,-3.65556218e-02,2.06088462e-02,1.42223159e-02,-2.67967528e-02,5.34594901e-03,6.20056120e-02,5.81168696e-02,3.97774514e-02,1.05562473e-01,-1.95851350e-02,-6.30575739e-02,-2.49247649e-02,-4.43949543e-02,-6.47713315e-02,4.94719886e-02,-4.42534645e-02,6.31435069e-02,6.86099261e-03,7.59942798e-02,7.21580261e-02,-3.82874315e-02,-2.49114437e-02,-2.94882250e-02,3.36107434e-02,-3.37398684e-02,3.94177400e-02,5.29367543e-02,-3.56186935e-02,-1.05074667e-02,4.92426158e-02,2.04058661e-02,-1.00713555e-01,-4.27610685e-02,-4.51532490e-02,-5.10817559e-02,3.53683674e-02,5.60449165e-02,-6.13331255e-02,-4.46774179e-02,-4.03780990e-02,3.39034904e-02,2.71740288e-02,5.59739404e-02,1.75506411e-02,1.03366563e-01,3.70841876e-02,2.87769229e-03,-1.04810941e-01,-5.19645082e-02,-2.04013555e-02,-1.39702329e-01,-1.56259011e-01,-1.18668358e-01,3.15272529e-01,-9.35249209e-02,-9.73786984e-02,-1.31952865e-01,2.47642213e-01,2.90252494e-01,-3.08964482e-01,-3.74817551e-01,1.17772180e-01,-4.33992657e-02,1.55845736e-01,1.81427558e-01,-9.11163164e-02,-1.80249345e-03 -1.16252221e-01,5.08311378e-02,5.20842285e-02,2.76399402e-02,2.88038080e-02,3.33741905e-02,5.51074874e-02,7.51685825e-02,-2.24305839e-02,-3.69750760e-02,-1.93668807e-02,1.84106661e-02,-5.85885686e-02,-8.00244431e-02,-3.98862605e-02,-5.25727883e-02,1.06900290e-01,9.21590664e-02,-3.63465965e-02,4.23959926e-02,4.16492626e-02,5.98033608e-02,5.70126036e-02,2.26288554e-02,-3.82898659e-02,-1.19282546e-03,8.04078946e-02,-3.23744747e-03,1.79001446e-02,5.68440323e-02,4.84515055e-02,-3.73440612e-02,-5.24093513e-02,-3.04123857e-02,-1.02022391e-01,-2.02467341e-02,-3.89332425e-02,-6.55710500e-03,-9.21416586e-02,-8.20806287e-03,3.40844331e-03,3.65518594e-02,-8.56060044e-03,6.46701176e-03,-4.54386862e-03,-4.38042985e-02,2.28345139e-02,-4.26176826e-02,-1.99812406e-01,-1.61884925e-02,-6.41447186e-02,-2.16456790e-02,-1.41557358e-01,-9.80712687e-04,-2.82577109e-02,-1.04113708e-01,7.45791181e-03,-1.25421123e-02,6.66830096e-02,5.00881864e-02,1.49336345e-03,1.26297683e-02,9.79500633e-02,7.96458153e-02,-1.42476831e-01,-1.17560714e-01,-7.39798169e-02,-1.11556480e-01,-1.79181131e-02,-4.12719109e-02,4.65566526e-02,-8.81461907e-02,1.81161112e-02,3.10303898e-02,5.32356851e-02,-9.09520260e-02,-6.95550333e-02,5.84510100e-02,-3.96887542e-02,7.29574059e-04,6.99599410e-02,-5.46760627e-02,-4.37528532e-02,5.47758192e-02,1.41489087e-02,-2.55195334e-02,-5.54754918e-02,-2.58426528e-02,9.41376353e-02,4.60083656e-02,7.83175367e-02,-9.59076208e-03,-5.13958339e-02,2.80815586e-02,-1.83186566e-02,-6.55307589e-03,2.54791989e-02,2.81647237e-03,1.19176353e-01,4.42579933e-02,-2.82494139e-02,-7.57671257e-02,3.54460870e-03,4.87659488e-02,-3.12137196e-02,2.34595085e-02,-2.53057213e-02,-4.72195569e-02,-2.04528116e-01,-5.86031393e-02,-1.05443718e-01,-6.60768688e-02,3.43391484e-02,-1.50857245e-02,1.30105302e-02,5.30287826e-02,-3.74638564e-02,2.90294440e-02,3.47037210e-02,3.96355459e-02,2.53141583e-02,7.79065635e-02,2.46011514e-02,1.07579082e-01,1.69951911e-02,1.05686813e-01,-6.14098570e-02,-6.92715985e-04,2.38089776e-02,-5.33719672e-02,5.49657155e-03,-4.78931968e-02,-3.92656029e-02,9.00434635e-02,3.07985331e-02,1.75870939e-01,5.76709699e-02,4.05644640e-02,9.87222175e-02,-2.50582091e-01,2.06262683e-01,1.23103732e-01,6.16763683e-02,2.73762055e-01,2.18709469e-01,5.86873407e-02,1.88900000e-02,2.33302363e-01,-2.32262501e-02,2.96802986e-01,2.42790886e-01,-1.82647904e-02,3.66862882e-02 --5.09099223e-02,9.75635281e-03,-7.56986060e-02,-3.53798493e-02,-2.17701330e-02,4.87806427e-03,-4.96868323e-02,-2.80511840e-02,4.20237037e-02,1.78716562e-02,-4.72354751e-02,-4.34464198e-02,6.63215356e-02,3.65791182e-02,-6.84709353e-03,-2.60707604e-02,-1.43825260e-01,-2.01024347e-02,-2.49134454e-02,-8.51467514e-02,-6.20744729e-02,-3.82922499e-02,-4.05183054e-02,4.77661143e-02,6.17639125e-02,3.53510494e-02,-3.91023612e-02,8.68359974e-02,4.75203138e-02,-5.24870913e-03,-6.27219148e-02,9.01849439e-02,7.49859041e-02,3.03846515e-02,1.04471192e-02,-2.02337256e-02,-2.83211819e-02,2.98445663e-02,3.64552152e-02,-1.04121198e-01,-5.43922798e-02,5.46224524e-02,4.55777471e-02,-3.16551891e-02,-6.73795580e-02,4.40413818e-02,-4.21182471e-02,1.67411229e-02,7.31678827e-02,-1.93211871e-02,-1.21100857e-04,3.38658328e-02,3.68882158e-02,-8.04730771e-02,-2.33655009e-02,9.19601341e-02,-7.40561485e-02,-1.07702344e-01,-8.90453027e-02,-1.34737261e-01,-1.20599619e-01,-4.52935304e-02,-7.92107299e-02,-1.02063400e-01,1.16554683e-01,-2.27366700e-02,1.10681780e-02,5.05375722e-02,-7.94890205e-02,-8.67503709e-02,9.94886489e-03,-1.68462639e-02,-1.43290787e-01,-1.84712681e-02,-2.55577042e-02,8.57713808e-02,3.87785170e-02,-9.39937742e-03,3.21605727e-02,-2.11994065e-04,-9.61096372e-02,8.14345114e-02,1.47662486e-02,-3.68048393e-02,-3.25964070e-04,2.95262444e-02,-1.13568202e-02,5.31935913e-02,1.88134945e-02,-5.71280912e-02,-7.58125881e-02,4.05941426e-02,1.30841605e-02,4.40026553e-02,7.71305260e-02,6.21491314e-02,-4.92658989e-02,-2.95364820e-03,-1.57572577e-01,-1.58352127e-01,5.83934078e-03,3.29624075e-02,8.37351095e-02,-2.09473472e-02,4.22705921e-02,1.89119279e-02,-1.84197450e-02,-1.52376610e-02,8.84635273e-02,-4.21942946e-02,7.54418989e-02,5.07280804e-02,-5.09175560e-03,-8.49802648e-03,-9.84206070e-02,-5.36576275e-02,3.92938065e-02,-1.45143015e-01,-8.22208437e-02,-5.54562662e-02,-3.17460420e-02,-1.68831203e-02,1.27924863e-02,-1.20714282e-01,7.86687680e-03,-1.04122802e-01,5.32967839e-02,7.57598917e-03,-3.25627316e-02,2.95490187e-04,2.33451319e-02,3.23003852e-02,5.60007115e-02,-1.79097627e-01,-3.55809203e-02,-2.31249096e-01,1.56404264e-01,5.63878202e-02,1.08946030e-01,-4.23667909e-01,1.46733068e-01,8.77154858e-02,1.07923694e-01,1.10319202e-01,7.20694389e-02,1.56131253e-01,1.98339907e-01,1.73858147e-01,6.88170721e-02,1.27584792e-01,1.31717958e-01,-5.53261078e-02,-1.41679626e-02 -1.15153607e-02,-1.01556201e-04,2.51896518e-02,5.51283898e-03,-4.20915894e-02,-8.02099914e-02,5.15729511e-02,7.68124922e-02,2.54091503e-02,-2.10525494e-02,7.30214661e-03,2.50189263e-02,3.16170239e-02,-2.32340014e-02,1.94595589e-03,2.30826792e-02,-6.00082320e-02,-2.46589089e-02,-3.45541972e-02,1.06131834e-02,-1.26993363e-01,2.08235710e-02,4.53852885e-02,6.21798292e-02,3.40464123e-02,6.93714944e-02,-9.15875020e-03,2.40803326e-02,1.61124624e-02,-2.31568444e-02,7.18697411e-02,2.15859555e-02,3.38843190e-02,4.79995279e-02,-6.63239997e-02,-4.89603189e-02,-2.27839758e-03,6.14890597e-02,-6.12833523e-04,3.52764429e-02,-2.07919487e-02,3.61224834e-02,-4.02807718e-02,-4.76612400e-02,2.86844548e-02,-1.59126802e-02,8.02133378e-02,-1.27211755e-02,-1.60431612e-01,3.98690811e-02,-5.18750613e-02,-1.54572422e-02,-2.06661010e-01,3.70418749e-02,-4.25757415e-02,2.00591934e-02,1.14405755e-02,-1.33125284e-02,-9.88505767e-02,-6.08562893e-02,-9.38763461e-02,-1.26281071e-01,8.75203321e-03,5.21476270e-02,-4.48211363e-02,-5.13296708e-02,-1.08050183e-01,-3.41582148e-02,-7.48552343e-02,-4.87478133e-02,-1.91188771e-01,-1.58098844e-01,-6.28879018e-02,-1.46533160e-02,7.22434998e-02,3.17812804e-02,2.17620710e-03,7.07489604e-03,3.67329611e-02,-3.16633930e-03,1.07899220e-01,4.25796738e-02,5.46900699e-02,2.58376551e-02,5.98166475e-02,7.19878067e-02,3.96226162e-03,2.22807419e-02,-1.00713339e-02,-3.84040608e-02,2.52844695e-02,3.44416925e-02,1.27096127e-02,6.99205825e-02,1.97060504e-02,-8.64207827e-02,-1.39792407e-02,-6.23113833e-02,5.67493363e-02,1.22808957e-01,2.08796725e-02,4.70625468e-02,3.51614186e-02,-1.11475887e-01,1.90809144e-02,-1.34663898e-02,3.24542714e-03,3.38093153e-02,-1.09883067e-01,-6.27006221e-02,2.61558477e-02,5.79953265e-03,-2.30012547e-02,-6.20357921e-02,9.41710009e-02,2.56607810e-02,2.59726956e-03,-1.32069083e-02,-3.51909013e-02,-6.37208963e-02,-2.09654134e-01,3.01276911e-02,1.72592955e-02,-4.67603500e-02,-1.77460102e-01,-5.50257732e-02,1.41101458e-02,6.05050999e-02,7.84399172e-02,-4.31358869e-02,-3.06189889e-01,7.35894526e-02,-1.04308299e-01,1.83165823e-02,-2.74869121e-01,2.83162965e-02,-6.43311950e-03,-1.74613661e-01,-1.50555446e-02,-1.37067508e-01,-1.02449579e-01,-8.81124424e-02,-1.65044962e-01,-4.07608058e-02,5.51560456e-02,8.71306889e-02,1.06576580e-01,5.52107306e-02,-2.60652528e-03,-2.57653203e-01,-9.47522274e-02,3.00309406e-01,-7.24488855e-02 -2.22154885e-04,-1.07467248e-02,-7.52743539e-03,-6.39706175e-02,2.71343677e-02,-3.15520248e-02,1.16422368e-02,-8.01163905e-02,-4.66183109e-02,-1.08282013e-02,-4.22513051e-03,-3.83344912e-03,-4.12546343e-03,-5.03371715e-02,-3.02293153e-02,-4.81928227e-02,-1.62533612e-02,-2.56271598e-02,3.60255122e-02,-1.41795947e-02,5.38056243e-02,-1.50944047e-02,-7.22666513e-02,-7.36952610e-02,-3.22673386e-02,-6.77853899e-02,-1.27207355e-02,-5.27468887e-02,-6.50954283e-02,-5.41977697e-02,-9.76188941e-02,-4.46205280e-02,-2.34211056e-02,-6.65195526e-02,9.69144340e-02,-2.65415134e-02,-1.15621073e-01,-5.92104243e-02,4.46075817e-04,-1.25729514e-02,3.22847778e-02,-4.21619594e-03,3.93884954e-02,-1.57497397e-03,-2.56066142e-02,7.60310567e-03,-2.51802290e-02,5.65352204e-02,6.56130201e-02,-6.80138092e-02,-8.21229743e-02,-5.12589640e-02,-3.16002626e-02,-5.09461488e-02,2.72287133e-02,5.70293477e-03,-1.27731595e-03,-9.27839240e-03,5.40705799e-02,9.98050457e-03,8.45641971e-02,1.84231507e-02,-1.75696178e-03,-5.98938721e-02,-1.78450905e-02,2.03731118e-02,7.17763703e-02,8.62102974e-02,-8.20658909e-03,5.57663011e-02,1.10780205e-01,-1.69265377e-02,9.29962667e-02,-3.43150173e-02,-5.75641719e-02,-6.55679299e-02,-7.35767237e-02,1.78083225e-02,-6.14549454e-02,-8.32906765e-02,-4.79849993e-02,-4.92687608e-02,-1.13216790e-01,2.71042004e-02,-8.05011388e-02,-7.56270006e-02,4.56148477e-03,-1.58452436e-02,3.51371958e-02,-5.91169383e-03,-8.63873284e-03,-1.01124999e-01,-4.14074111e-02,-8.87840465e-02,-4.86549874e-02,-1.08106138e-01,-4.25841026e-02,-4.83883215e-02,-9.14167292e-02,-7.66162828e-02,-3.42625252e-02,-7.50485019e-02,-6.10929766e-02,-1.19149191e-01,-4.09524521e-02,-3.48544158e-02,-1.02830380e-01,-7.64584094e-02,1.99381165e-02,8.63272809e-02,-1.63434345e-02,4.70791845e-02,6.48234856e-02,-6.88800383e-02,-1.16896088e-01,-5.19271594e-02,5.16014410e-02,2.17368751e-02,4.50791031e-02,1.77402769e-02,8.81558138e-02,-6.11414706e-03,1.35776424e-03,1.78771280e-02,8.07798071e-02,2.80345654e-02,-4.84919249e-02,-1.51802350e-01,-4.01983925e-02,2.63531223e-02,-2.38204725e-01,-4.55372913e-02,-8.41051142e-02,-2.97607401e-02,1.17328934e-01,-4.71376116e-02,7.12466744e-02,-5.74493665e-02,-1.56256985e-03,-3.09770189e-02,-1.65698662e-01,-2.75255352e-01,-1.58129745e-01,1.14113624e-01,-5.85927781e-02,1.38555550e-01,2.71892755e-02,2.75745462e-01,-2.53870971e-01,-2.21204371e-01,2.89223385e-01,1.10004918e-01,-2.05533386e-01 --3.89372131e-02,-4.64383672e-02,2.13044650e-02,-5.13557135e-03,-1.31438415e-02,-3.82251020e-02,-8.89448154e-02,-3.38204374e-02,-4.44257136e-03,9.40238439e-02,4.11558513e-02,9.21341283e-02,1.18837238e-02,7.01899336e-02,3.84440652e-02,1.07554864e-01,-7.40770313e-02,-1.36493711e-01,4.99702051e-02,5.69034199e-02,-3.84615721e-02,-2.33460439e-02,-4.88986197e-02,-5.49989799e-02,-6.77633948e-02,-7.62372137e-02,-9.82264442e-02,-1.26971363e-01,-1.08072192e-01,-9.68573562e-02,-4.50739816e-02,1.48750732e-02,9.88537901e-03,3.14596172e-02,1.91851480e-01,1.02416455e-01,1.10800556e-01,1.40795666e-02,3.87491361e-02,3.19272212e-02,6.58435114e-04,-3.63670252e-02,7.02101769e-02,4.67769717e-02,8.36357824e-02,9.33955024e-02,5.52642827e-02,1.20893576e-01,1.82312630e-01,1.20490123e-01,7.02367024e-02,5.10249138e-03,-5.51254265e-02,1.04807289e-01,-9.31999538e-03,7.67805999e-03,9.60825870e-02,1.30806590e-01,-5.32394591e-02,5.72405739e-02,1.93434142e-02,-6.40273778e-02,-2.87862378e-02,-2.99093249e-02,2.56984347e-02,7.89420287e-02,1.71841693e-01,1.23561290e-01,1.39322536e-01,2.01800932e-01,-3.28509642e-02,-3.10428713e-02,7.93397769e-02,-1.71502344e-03,2.71980142e-03,1.59870813e-02,5.48304041e-02,2.21397222e-02,3.58028890e-03,2.19173789e-02,6.38827274e-02,-1.40216061e-02,2.75147328e-02,-6.50814124e-03,5.65028207e-02,-3.88464686e-03,1.25241628e-02,-6.23773719e-02,-1.15279314e-01,-2.22639759e-02,3.57452241e-02,-6.95042325e-03,-3.29452655e-02,-4.19217824e-02,-1.35791446e-02,-3.56251177e-02,3.86276618e-02,-4.20724577e-02,9.18070444e-02,4.45796978e-02,6.67590882e-02,5.21064870e-02,-1.23917572e-01,-1.79469070e-01,-1.36988797e-02,1.96668973e-02,2.23618572e-02,1.05625716e-02,2.36898505e-01,2.26517945e-01,9.62056709e-02,-1.90960997e-02,-3.16178422e-02,3.34477852e-02,7.10089990e-02,7.39351863e-02,2.61244864e-02,7.71250700e-02,3.16056563e-02,-1.28706148e-02,-8.36845197e-02,-6.39498584e-03,-4.48520528e-03,4.64708410e-02,-1.22859720e-01,8.83580101e-02,7.34401620e-02,-3.28744086e-02,1.39795965e-02,-3.72649598e-02,-5.00897401e-03,7.57315328e-03,-9.06067627e-03,1.20306990e-01,-1.93338258e-01,1.60173675e-01,2.15640105e-02,-8.05420647e-03,-4.49379748e-02,-1.49639304e-01,1.05850160e-01,8.66857344e-02,6.19931389e-03,1.24896409e-01,1.87795435e-01,-1.50948260e-02,6.48458546e-02,4.97682025e-02,8.32777038e-03,1.57394942e-01,1.41477374e-01,3.22584995e-02,1.09623211e-01 -6.59875535e-02,1.22539073e-02,6.44323488e-02,3.82014902e-02,-4.75785625e-02,-1.52469885e-02,-1.76301077e-02,-1.78018012e-02,6.14200592e-02,1.01914772e-02,3.61007295e-02,9.25699765e-02,-2.81330062e-02,-6.09733380e-03,-2.61457855e-02,-1.03111860e-02,-4.23776428e-03,-1.20730679e-01,2.62336441e-02,-1.73824497e-01,-2.74445839e-03,-1.06855478e-01,-3.28173971e-02,-3.59983866e-02,-1.22188857e-01,-4.11539066e-02,-3.87489737e-02,-5.53976509e-02,-5.33987780e-02,-1.14717133e-01,-1.43152300e-01,8.76153730e-02,-3.76806691e-03,-2.25248755e-02,-1.22188515e-01,1.82613250e-02,-5.87531178e-02,-2.05020413e-02,-2.96506140e-02,8.24853830e-02,4.83490583e-02,2.53262802e-02,1.25046251e-01,7.83458615e-02,1.16493311e-01,-1.03610205e-01,-6.03868318e-02,-1.36422511e-02,1.99598104e-02,-1.20339521e-01,-7.13833707e-02,-8.61621011e-02,-1.40883782e-01,-7.00691509e-02,5.91283916e-02,-8.00383689e-02,-5.81824039e-02,4.22991121e-03,2.49606161e-02,3.93198841e-02,-4.90570688e-02,-8.96818942e-02,-6.67817072e-02,-1.22106117e-01,6.93833919e-02,1.17812205e-02,1.22832154e-01,-1.58532004e-01,-1.74255739e-01,-1.07548539e-01,1.40607665e-01,2.76726177e-01,-1.65819290e-01,8.23277112e-03,6.62641764e-02,-2.53626828e-02,-1.09667473e-02,3.86445268e-02,4.79179454e-03,-1.32780812e-02,2.68554236e-02,-2.91771228e-02,-5.84293023e-02,-2.45231583e-02,-1.12147722e-01,-8.31871455e-02,3.20502385e-02,5.70661256e-02,1.33338144e-02,3.22335131e-02,-8.71010866e-03,-5.21913339e-02,-4.76844574e-02,-2.86272740e-02,-6.60942683e-02,-1.38597037e-01,-4.09446834e-02,1.24610593e-02,-5.81820292e-02,1.73766957e-02,4.81395636e-02,-1.19932345e-02,-6.40166369e-02,-3.10560675e-01,3.70072002e-03,3.93904698e-02,-3.70350813e-02,-6.49990344e-02,-2.54698634e-02,-1.96144091e-01,-6.29644279e-02,-2.12321933e-02,2.40658210e-02,-1.04682752e-01,-6.35066592e-02,-1.48727726e-02,-2.91024491e-02,1.07737385e-01,1.00068895e-01,8.43920807e-02,-1.11793904e-01,2.05808595e-02,2.62477341e-02,8.97163753e-02,8.14694147e-02,-8.11709305e-03,4.20228336e-02,-1.21176393e-01,-5.84602182e-02,-1.13059844e-02,3.64453804e-02,-6.24860163e-02,-5.34866023e-02,2.44418841e-02,-5.23874883e-02,-7.24169242e-02,-9.79836330e-03,-7.53922056e-02,1.66943402e-02,-3.61566735e-02,1.26920807e-02,6.78011042e-02,9.89620989e-03,-6.53983769e-02,7.91711971e-02,-1.27878940e-01,1.20544331e-02,-6.03076156e-02,8.89779388e-02,1.04320221e-01,-2.07153388e-01,1.01243975e-01,8.13076600e-02 --5.82530910e-02,1.14640044e-01,-1.06146945e-01,-4.42963497e-03,1.26050651e-01,1.55111655e-01,7.44881452e-02,8.44134726e-02,-1.18428241e-01,-8.21719524e-02,-1.62079459e-01,-8.51367571e-02,-4.87240971e-02,-4.43405025e-02,2.98074868e-02,-4.87075974e-02,-7.94547823e-02,8.04354479e-02,1.00423307e-01,3.47292041e-02,4.03427593e-02,8.37705273e-02,1.29388326e-01,-1.48615720e-02,2.09874052e-03,-6.10539297e-02,1.26615393e-02,-2.41594273e-02,-4.65949425e-02,3.49006073e-02,1.62617372e-02,-5.79304707e-02,-1.20211177e-01,-4.93736428e-02,5.49175293e-02,-1.03421049e-01,5.84302187e-02,-6.90662852e-02,-8.10775675e-02,-6.91944736e-02,-1.18891137e-01,-4.47157732e-02,-1.16197578e-01,-3.11267070e-02,-6.12353719e-02,-6.31927407e-02,-2.32019095e-02,-2.66505220e-02,1.87737736e-01,5.23155833e-02,-9.25688696e-02,4.46893802e-02,1.50092608e-02,-9.92960033e-04,3.51373475e-04,-1.28100136e-02,-1.23824336e-02,-9.23983322e-02,-1.33510840e-01,-2.06759887e-01,-1.96218773e-01,1.14726242e-01,-1.38058128e-02,-2.91717778e-02,1.65702202e-01,9.76948335e-02,-5.94091078e-02,2.46377590e-03,-2.32566679e-02,-4.70782417e-02,-1.61816665e-01,1.83553389e-02,-1.63814605e-01,-4.25646038e-02,5.54950642e-02,-6.40516788e-02,-3.25834261e-02,-1.17296618e-02,-2.44311738e-02,9.18975780e-02,2.52146041e-02,-1.86033398e-01,-3.44284201e-02,-6.22555323e-02,-6.20071463e-03,-5.65733880e-02,3.29431905e-02,-3.56791128e-02,-5.26931297e-02,4.50748260e-03,-4.94797574e-02,-1.02255904e-01,-9.01477677e-02,-6.13089251e-02,-1.06755606e-01,4.47986071e-02,5.89902527e-02,4.17990956e-02,3.77258547e-02,3.96116780e-02,-5.74814082e-02,-1.61216621e-02,-4.72678697e-02,-3.57296048e-02,-8.66323107e-02,-6.51778517e-02,1.03653403e-02,-2.30388818e-02,6.80163087e-02,-3.34670205e-02,7.88238856e-03,-3.10741683e-03,-3.81692645e-02,6.36964128e-02,-1.06033062e-02,-6.85768235e-02,-6.92263097e-02,3.57283749e-02,2.12158388e-02,3.38870154e-02,-9.13867422e-02,-6.46425156e-02,-5.80884958e-02,-3.60768983e-03,2.82099862e-02,8.23810900e-04,-2.00424912e-01,-4.61518475e-02,-9.96957497e-02,-2.02915153e-02,9.88454377e-02,-1.52130045e-02,-4.66136155e-02,7.04065147e-03,-5.04110076e-02,-1.51381136e-02,-1.67500979e-01,-1.89589498e-01,-1.64336597e-01,-8.49195996e-02,5.04223529e-02,-4.08039099e-02,-1.80166083e-01,5.67618116e-02,1.60796735e-01,-1.33988722e-01,-1.20068516e-02,-8.12583008e-02,-5.64135666e-02,1.41385678e-02,4.57586299e-02,-4.66092289e-02,-2.97838916e-02 -2.70064272e-04,-9.69797941e-03,6.22851599e-02,-8.80984083e-03,8.26611607e-02,-1.29510888e-01,-1.41543126e-02,-6.79054829e-02,9.65511936e-02,-1.60846262e-02,-1.56144782e-02,-6.14706296e-02,-6.46101501e-02,-1.43388772e-02,-4.34616130e-02,-3.86860293e-02,-7.29988081e-02,8.76706749e-02,1.31063233e-01,1.47492750e-01,-1.17198790e-01,-1.16646333e-01,2.88028854e-02,-3.14886546e-02,-4.82436544e-02,-4.80350255e-02,-1.86416895e-02,-1.45175172e-01,9.79204437e-02,-5.89300645e-02,1.02385840e-02,1.06155683e-01,1.34316078e-01,9.38530709e-02,1.20612574e-01,-5.88428699e-02,-2.06542947e-02,8.56752569e-02,-7.83087515e-02,8.24692141e-02,4.72131831e-02,-4.99622286e-02,6.06069897e-02,2.44116980e-02,2.90706864e-02,-8.84508097e-03,5.97671240e-02,-1.08596572e-01,-8.05843351e-02,6.71427814e-03,3.50358377e-02,-8.40770461e-02,-1.05375628e-01,-5.58987826e-02,-3.62191522e-03,-1.05200874e-01,-2.31094800e-02,-7.54365398e-02,-2.97651563e-02,-1.93878109e-01,-1.08068526e-01,9.65412330e-02,4.72919212e-03,8.23620733e-02,1.62685915e-01,1.03519157e-01,8.29097291e-02,9.32985011e-02,2.70739628e-02,4.27969289e-02,-2.57294283e-01,-3.66141653e-02,-4.91320270e-02,3.19779867e-02,9.27922351e-03,-1.19860589e-01,-4.58397176e-02,1.09441181e-02,-6.01565971e-02,-7.00864184e-02,6.80067579e-02,2.98862315e-03,-9.21557334e-02,-7.14638784e-02,-2.61569839e-02,-1.96184904e-02,-3.67783064e-02,1.22182696e-02,-3.17609134e-03,1.00586549e-02,1.18092645e-02,-6.98281754e-03,-2.22679151e-01,1.31417478e-01,6.62980071e-02,-1.00189548e-01,-3.55961703e-02,2.26343271e-02,3.45243543e-02,2.79004011e-02,1.57280112e-02,-8.56269728e-03,-7.25863210e-02,2.81400221e-03,-1.20728516e-02,2.79560942e-02,-3.25968427e-02,-3.18895205e-02,4.90514695e-02,7.24904908e-02,-1.09647956e-01,-1.52810026e-01,-1.29409472e-01,-8.06293903e-02,1.26907385e-02,2.60104790e-02,-1.98833026e-01,1.00162543e-02,-1.95297294e-02,-2.52348623e-02,2.17944250e-02,5.28545493e-02,8.19607879e-03,1.12927719e-02,6.19982090e-02,-6.00527048e-02,1.84198246e-02,-8.72710731e-03,2.69885766e-02,-1.95069455e-01,-1.32168576e-02,4.84608348e-02,-3.16224412e-02,-7.13953090e-02,1.43560754e-01,-2.72289670e-02,8.33996280e-02,5.33787520e-02,8.97828043e-02,2.24115973e-02,-1.58577384e-02,7.11131913e-02,1.47891858e-01,-1.67678010e-02,-2.41474675e-01,4.00082228e-02,-1.94350944e-01,1.03632230e-02,8.21928122e-02,-4.15908721e-03,7.50106733e-02,2.06868076e-02,2.25965030e-02 --2.46790941e-01,-1.68153201e-01,-7.87047376e-02,-1.46738366e-01,3.85447437e-02,-1.67937045e-01,5.43413997e-02,-1.36624988e-01,-4.50684020e-02,-2.91252724e-02,-1.14808598e-03,-4.00859857e-02,-5.09017830e-02,-5.75386419e-02,-8.46203264e-02,-4.97005047e-02,9.75086191e-02,1.80150471e-01,1.66741442e-01,9.84920832e-02,7.23813883e-02,2.75488489e-02,-9.32896797e-02,9.62132903e-02,4.47762407e-02,1.66307525e-01,4.57780441e-02,6.48571091e-02,2.24566342e-02,9.51872129e-03,6.41946968e-02,-4.10162825e-02,7.02322157e-03,5.80239644e-03,3.22194434e-02,7.34840649e-02,-5.45856671e-02,-6.19546902e-03,-1.47110243e-03,7.03826051e-02,1.26175295e-02,1.13687916e-02,2.18206319e-02,1.00689967e-01,-7.90964705e-03,-1.31007069e-01,1.66865878e-03,2.78488214e-02,1.01656519e-01,-2.67096184e-03,-6.53652146e-02,3.25348444e-03,-1.06994800e-01,1.79415387e-02,2.35214945e-02,7.99817784e-02,1.47075640e-02,8.58697007e-02,1.05746918e-02,7.30368127e-02,2.99707217e-02,2.53038898e-01,1.35952203e-01,1.63885682e-01,8.76907155e-02,1.34161823e-01,7.43622707e-02,-8.92348952e-02,1.44508213e-02,9.92373553e-02,1.32643444e-02,1.63284663e-01,-1.77037675e-02,-1.88381609e-01,-1.45746872e-01,-4.05370937e-02,-1.27901292e-02,-7.75916164e-02,-2.67847399e-02,-1.39447121e-01,-3.83669514e-02,-4.59559209e-02,9.61471859e-02,7.46489751e-02,1.51384732e-03,6.90784911e-02,1.77390093e-01,1.16521893e-01,-2.85666215e-02,-4.26838179e-02,5.64268528e-02,3.60547179e-02,4.25739445e-02,2.20400967e-02,-2.37403650e-02,-9.42022807e-02,-4.12866843e-02,-6.95763007e-03,-6.74975201e-02,1.07503299e-01,2.32253564e-03,-4.04359317e-02,4.77326647e-02,6.27677467e-02,2.11213431e-02,1.15166668e-02,2.34184680e-02,6.69434296e-02,1.63878619e-03,-1.24950149e-02,-3.74835295e-02,1.12876257e-01,1.37417985e-02,-2.45003269e-02,2.65904092e-02,-2.59011322e-02,4.07849027e-02,1.18489540e-01,6.67588909e-02,-1.13305101e-04,6.08878467e-02,-2.44773396e-02,7.55499678e-02,-1.13975359e-03,2.46144309e-02,-4.23338416e-02,-5.33038083e-02,1.37712721e-01,-3.60045693e-02,2.27837984e-02,7.53513442e-03,1.20550593e-01,1.66091511e-02,3.48712209e-02,1.24320160e-03,-5.29289277e-02,8.49667215e-03,-3.62719971e-02,5.37352219e-02,-1.11332329e-01,3.25352113e-02,9.77556811e-02,-8.42921130e-02,-5.66816487e-02,1.08650654e-01,4.14358744e-02,7.74022207e-02,8.45799275e-02,4.50830653e-02,5.95117955e-02,-9.85881043e-02,1.16236381e-01,4.22011568e-02 -2.83431406e-02,7.43217190e-02,4.02072932e-02,1.40418880e-02,-7.82761356e-03,1.49296275e-01,3.56211980e-02,1.25944285e-01,7.80549735e-02,2.95520835e-02,-8.58570250e-02,1.26759874e-01,-8.08400876e-03,-2.52482933e-02,-6.72251198e-03,-1.83247347e-02,8.82432728e-02,-7.87133295e-02,7.73931670e-02,2.41758329e-02,6.41509655e-02,1.28157441e-01,1.05656718e-01,-1.13772116e-02,3.86758322e-02,-1.87460099e-02,2.82276172e-02,5.93138357e-02,1.06104015e-01,1.14790523e-01,-7.12026202e-03,9.99015948e-02,1.73045400e-01,-1.64335262e-02,7.62279952e-02,2.07034031e-02,4.74957042e-02,-1.01049810e-02,2.82134369e-02,-9.03568620e-02,9.77822204e-02,1.02153054e-01,1.36531547e-01,1.52627068e-01,9.44054575e-02,1.69139741e-02,2.77514913e-02,2.34903507e-02,1.30822218e-04,2.20073099e-02,5.17033857e-02,2.92223695e-02,-1.53427989e-01,-2.58717251e-03,6.78141847e-02,-6.44450006e-02,-4.41629380e-02,-1.99330690e-02,6.85786854e-02,5.19511187e-02,-1.84732634e-02,4.06522250e-04,3.71620995e-02,3.70895114e-02,9.59931744e-02,1.66817183e-02,1.35633016e-01,-6.98585950e-03,6.54431118e-02,1.13017507e-01,5.81234485e-03,1.61294013e-02,4.26030307e-03,3.02730463e-02,3.99318672e-02,1.87924094e-02,-1.59556661e-02,6.36495124e-02,2.32214300e-02,6.28939205e-02,-3.11471283e-02,-1.97163905e-02,-5.03932667e-02,5.84384263e-02,3.80889226e-02,-3.19563713e-02,-3.96382208e-02,6.85522155e-02,-7.76751055e-03,1.39420774e-01,3.19839133e-02,1.19813973e-01,-2.19605962e-02,1.13210356e-01,9.30372622e-02,1.36211567e-01,2.27446066e-02,1.19636745e-01,5.29824606e-02,-1.55556384e-01,3.84762779e-02,-1.91697771e-02,4.11574760e-02,1.70929442e-01,6.82210434e-02,1.42204180e-01,-4.71934219e-02,-2.39406361e-02,1.70995729e-01,5.40810859e-02,-1.93102068e-02,-6.21445389e-02,6.66712634e-02,2.84871766e-02,-3.19558823e-02,1.35874092e-03,-8.47896679e-02,-1.58946866e-01,-5.94733632e-04,6.87193328e-02,-8.16573843e-03,1.15603781e-01,1.42992275e-01,1.06727171e-01,1.66233371e-01,6.54182580e-02,-1.66376734e-02,-1.08969366e-02,9.76596282e-02,6.74643881e-02,-8.88022412e-02,7.70460555e-02,1.70634157e-01,-5.00518672e-02,1.45571215e-01,-7.74979853e-02,-6.81332963e-02,-1.77826417e-01,-1.15733365e-01,-2.07449906e-02,2.96203182e-02,-4.67161675e-02,-4.97678548e-02,2.45376937e-02,1.44529595e-01,-2.26137560e-02,1.30376529e-01,-4.55972663e-02,-7.40045890e-02,-1.00168969e-01,-1.09887879e-01,1.96700172e-01,-2.57427806e-02 --1.47901526e-01,-1.48207734e-02,-1.09531933e-01,-4.15921637e-02,-9.27165642e-02,7.35379605e-02,8.89445294e-02,6.54919269e-02,-6.58476276e-02,-1.00390148e-01,-4.61475140e-02,-3.43862822e-02,-9.73640077e-02,3.41712835e-02,1.61092903e-02,-7.73520050e-02,-4.12251582e-02,-2.49506643e-01,-7.20604981e-04,-1.13915012e-01,1.40254951e-01,-5.45876244e-02,8.11474145e-02,1.40979722e-01,1.04271784e-01,3.76107398e-03,3.59814225e-02,7.89960801e-02,3.23264693e-02,5.52335362e-02,9.75448601e-02,-7.46365445e-02,4.85376911e-03,-9.54797416e-02,3.82601923e-03,-9.02982051e-02,-4.77337794e-02,-2.56742649e-02,-6.22811383e-02,-2.45460707e-02,1.78750443e-02,-3.10525385e-02,-7.64504504e-02,-6.63176225e-03,6.14046823e-02,-8.10147079e-02,-3.11330128e-02,-9.56915698e-02,-4.09273810e-03,-4.38984384e-02,2.49009759e-02,5.26228074e-02,-5.21955253e-02,-1.39613087e-02,3.16847423e-02,-9.07967596e-02,-6.34031916e-02,-3.73899502e-02,-2.62752980e-02,1.33343441e-01,4.53172916e-02,-3.10021825e-01,1.69577765e-02,-8.58298526e-02,-7.06227242e-02,2.70789936e-02,2.15565184e-01,4.96621056e-02,8.92050637e-02,-4.48548351e-02,1.88915078e-01,6.77139508e-02,1.04723424e-01,-1.62187148e-01,-2.61811895e-02,-7.56474013e-02,-9.94968663e-02,-1.36584461e-01,-2.79753428e-02,3.99812336e-02,3.49021503e-02,-7.44765533e-03,-3.08787534e-03,-7.17395997e-02,-1.06113611e-02,3.31432347e-02,2.04990711e-03,-5.90218125e-02,-1.24244543e-01,-2.09516145e-02,-7.47454146e-03,-3.96767864e-02,-3.95861682e-02,-2.36801395e-02,1.43664480e-02,-2.86160203e-02,1.65144574e-02,3.65886577e-02,6.61733695e-02,6.92926868e-02,5.04969357e-03,1.10270034e-02,9.37786556e-02,1.21769474e-01,8.80574539e-04,-2.10865569e-02,2.42990709e-02,-1.96335683e-02,4.86171747e-02,1.65281117e-01,-5.58298503e-02,-4.63233518e-02,-9.30713344e-02,-1.34299876e-02,6.65235807e-02,-2.93692687e-02,-9.68384607e-02,-3.91413509e-02,-2.07974059e-02,-5.15088334e-02,-1.02728151e-01,-2.94745089e-02,-2.55993488e-02,-1.43863685e-02,-1.25868828e-01,-7.03652121e-02,-1.39483382e-01,3.94105062e-02,-3.67628655e-02,-8.31677426e-02,7.04740595e-02,-1.34444968e-02,-1.10864402e-02,-1.48132876e-02,-3.29811303e-02,-2.09366575e-02,7.00016261e-02,-1.22581062e-01,1.59160725e-02,-1.11478655e-01,-3.20388758e-02,1.13151852e-03,6.78140019e-02,2.02126660e-02,-2.42853482e-01,5.24919839e-02,-1.60470119e-01,8.97709717e-02,-7.94769262e-03,9.91430706e-02,-5.81401550e-02,1.05762846e-01,4.20961258e-02 -1.52088709e-01,-8.02988947e-03,3.22634927e-02,8.26053185e-02,-5.01978067e-02,-7.37257821e-02,-3.63558751e-02,-1.05266911e-01,-2.56343061e-02,8.94990318e-02,-5.59993165e-02,-1.36607427e-01,1.28256226e-01,1.02459215e-01,-1.81978612e-02,1.87083505e-02,-6.10397462e-02,7.23399049e-02,-1.62495960e-01,-6.10089733e-02,4.52636786e-03,-2.01475319e-01,-9.57359749e-02,1.26343223e-01,8.76716474e-02,4.94474772e-02,2.43164784e-02,4.09880552e-02,-4.01296979e-02,-8.14673344e-03,-6.41487775e-02,2.22493419e-02,-4.82351142e-02,-2.70494337e-02,2.24290162e-01,-3.60824034e-02,1.21035231e-01,-2.88921387e-02,-3.59280473e-02,-3.67194594e-02,-5.65964409e-02,3.44226028e-02,-1.11681971e-01,-7.63602965e-02,-1.00104801e-01,2.67038737e-02,6.69889145e-02,-8.13901038e-02,1.19554245e-01,1.58830075e-01,4.79140176e-02,-9.14503978e-03,-2.82735308e-01,-1.96633846e-02,5.10719446e-02,6.64206219e-02,2.24066582e-02,-5.78654849e-02,1.53105396e-01,-8.59506088e-02,7.83411131e-02,4.37076592e-02,-2.33495359e-02,-1.54250700e-01,-8.52682487e-02,-5.02194889e-02,-1.25277687e-01,3.96108861e-02,-5.62605274e-02,-3.44844174e-04,1.73548589e-01,-3.96666301e-02,1.00742371e-01,1.04483599e-01,-2.22903590e-02,-3.38306729e-02,-1.63642135e-01,-1.49754628e-02,-1.95764434e-02,-2.97010731e-02,-1.61638650e-02,5.53289367e-03,-2.74237905e-03,-3.42861748e-02,2.10676387e-02,1.27771264e-03,7.27510179e-03,-9.64196471e-04,-1.46328907e-02,3.03848923e-02,-4.69307787e-02,-1.92802433e-02,-8.24704339e-02,1.05178402e-01,-1.05467196e-01,-6.59880581e-02,2.32418476e-02,-3.14724882e-03,-5.63610034e-02,-1.21717487e-02,-5.18288014e-02,4.24123857e-02,2.28009174e-02,2.52795498e-02,-1.68993391e-02,-6.92499309e-02,-3.74432221e-02,2.20023511e-02,5.36230006e-02,-4.61339639e-03,4.65176900e-04,5.30454465e-02,-6.87779019e-02,1.66665589e-02,6.49283608e-02,-9.34095094e-02,-5.60383680e-02,2.48402519e-02,1.25499944e-02,9.81317120e-02,-2.43620249e-02,3.77493087e-02,-8.82835678e-04,5.33960781e-02,8.42890267e-02,3.59450032e-02,-9.68176354e-02,2.29268342e-01,-1.71658471e-02,-2.91829654e-02,-1.60702954e-01,8.50450313e-02,-1.70079839e-02,-6.61970570e-03,9.30147369e-02,-4.22833391e-02,-3.11558646e-02,-1.40378129e-01,5.08234369e-02,1.12111911e-01,-8.45361708e-03,3.60982427e-02,5.48867207e-02,1.46770080e-02,4.36024771e-02,-3.63733813e-02,1.01635123e-01,-1.58851031e-01,-1.25665912e-02,1.83706185e-01,-8.69464426e-03,1.12476845e-01,4.11402871e-02 --9.78052751e-02,-8.09249776e-02,2.95575787e-03,4.09945583e-02,-4.70989364e-02,-9.92078384e-02,1.25126662e-02,-5.00134842e-02,-6.06662685e-02,3.65835518e-02,-8.19368131e-03,7.57257175e-02,1.93458343e-02,-1.41531161e-02,7.87790592e-02,2.29453066e-02,3.11752500e-02,-2.56345681e-02,-1.20752210e-02,5.39107048e-02,-9.10372167e-02,-2.57868069e-02,-5.22408432e-02,-8.38904895e-02,-3.31429531e-03,-8.42442368e-03,6.62425166e-02,-5.04720263e-02,-4.74725507e-02,1.08777121e-02,-9.90302098e-02,-9.13116381e-03,-7.11747565e-02,2.68209234e-02,9.60377124e-02,-7.29549430e-02,-7.39523486e-02,-8.14510844e-02,-4.15225229e-02,-4.82464775e-02,-4.18531341e-02,9.39868173e-02,9.90839140e-03,2.48222285e-02,4.65616583e-04,-1.64337947e-02,9.18234977e-03,-5.03731975e-02,-1.34000895e-01,6.03928556e-03,-7.61430058e-02,5.08958174e-02,1.92882567e-01,5.02792851e-02,6.42615007e-02,4.43558939e-02,4.82647921e-02,2.75226448e-04,3.89705533e-02,6.17371254e-02,2.46504095e-01,-2.74501278e-02,6.40533085e-02,5.97414533e-02,5.47195287e-02,-7.40895239e-02,-9.71175214e-02,-6.04767341e-02,1.75569346e-01,4.41501894e-03,-7.59450889e-02,-2.61548427e-01,2.24199641e-01,-8.73338203e-03,-3.45050172e-02,-8.20500140e-02,-3.41348353e-02,4.31021160e-02,-6.10981946e-02,1.32319281e-02,-2.23769132e-02,-1.31198440e-01,1.54369365e-02,5.53641160e-03,-5.23044288e-02,-4.04281716e-02,-3.38652186e-02,1.82086044e-04,8.26834656e-02,5.78720083e-02,6.40354158e-02,-3.10609578e-04,-6.72932298e-02,5.03862038e-02,-1.22751003e-01,-5.72335518e-02,-3.54720469e-02,-6.74809860e-03,-4.96765895e-02,-1.61131767e-01,-1.40688661e-02,2.22438790e-02,-3.56865917e-02,-1.63123404e-01,-1.71241816e-01,-4.80030731e-02,4.36287001e-03,5.07049020e-02,-1.32045957e-02,6.57151197e-02,-3.58881269e-02,-1.48931641e-02,7.11902831e-02,-3.74175394e-02,-1.38403710e-02,-1.36885437e-01,-4.54117951e-02,-1.46506695e-01,-4.58285504e-02,-8.78416483e-03,-1.52258754e-01,9.47788318e-02,6.24049516e-02,1.96251651e-02,4.69523081e-02,-2.98436636e-02,-8.52465718e-03,-3.12456255e-02,-1.01846921e-02,4.23218654e-02,1.47407764e-01,-3.63933071e-03,-8.69739058e-02,-1.16434665e-01,1.26502564e-02,-1.64291360e-01,-1.13842532e-02,-1.40553412e-01,-4.91176601e-02,-1.30390275e-01,5.10375064e-02,2.26343613e-02,-5.74766502e-02,2.82231860e-02,5.07867231e-02,-1.67546206e-02,-8.98711473e-02,4.28381814e-02,2.60017838e-01,-1.59919053e-02,-2.45730126e-01,-4.46930113e-02,1.68126607e-02 -9.91667917e-02,-1.72275641e-03,2.73554737e-02,6.29375534e-02,-5.17138898e-02,4.91330832e-02,7.81911462e-02,-9.79754836e-03,-1.83254964e-01,-1.15610121e-01,-6.47230549e-02,-3.10352902e-02,3.25362018e-02,-3.64156300e-02,-2.94025738e-02,2.82118572e-02,-7.56209890e-02,2.88206864e-02,-5.74713884e-02,-5.00185060e-02,-1.13967805e-01,1.07369705e-01,2.59518751e-02,1.51585205e-02,4.93664869e-02,2.20153336e-03,1.59013185e-01,-1.07778394e-02,-1.03656868e-01,-1.57214330e-02,6.57938849e-02,-1.51707485e-01,1.80908048e-02,-5.27266912e-02,-5.30789644e-02,6.29043459e-02,7.47449920e-02,-4.06130662e-02,-7.00551314e-02,2.27210397e-03,1.11935287e-01,8.40276165e-02,8.24051755e-02,-2.70182078e-02,8.55982979e-03,2.87128175e-02,9.76893065e-02,1.39260157e-01,1.00830332e-01,1.26124220e-01,-5.74262901e-02,-6.84197512e-02,3.23837563e-02,-1.46197922e-02,3.14275176e-02,-1.25153416e-02,-5.04038317e-03,3.47528106e-02,5.81499450e-02,-4.83603958e-02,-6.52950355e-02,-4.14890078e-02,1.34413147e-02,-7.11890170e-02,-1.24855997e-02,1.01799698e-01,4.39809905e-02,1.08454790e-01,3.66123057e-02,-4.50242955e-02,-2.74016275e-02,9.77622039e-02,-7.81201913e-02,1.54647017e-01,-3.81166249e-02,-3.59081745e-03,7.34442603e-02,8.81198590e-02,-2.41747257e-02,-8.98774739e-02,-4.16317366e-02,2.31161699e-01,-2.94783892e-02,1.92392040e-01,8.62331266e-03,-4.35237943e-02,1.28457083e-02,7.89999192e-02,1.46596935e-01,4.97070708e-02,7.26555372e-02,7.43776078e-04,5.33452822e-02,4.78959066e-02,-1.34754026e-01,-2.20567040e-02,-6.25173089e-02,-1.68254343e-02,4.37553362e-02,-1.78702832e-02,-1.31958047e-01,-1.15110136e-01,8.20565805e-02,-3.47742889e-02,-2.09701397e-02,1.08648924e-01,-1.77889605e-02,-6.48609313e-02,9.51605105e-02,2.84101630e-02,1.23990429e-01,-5.35532396e-02,1.14749940e-02,-8.63347767e-03,5.73945146e-02,-7.39159832e-02,1.00108990e-02,8.30935969e-02,-2.26135928e-02,-1.31468617e-02,1.85808357e-01,8.15840244e-02,3.78380426e-02,-9.40994780e-03,-4.70697129e-02,5.23409769e-03,-1.64551532e-01,4.48862682e-02,5.90903847e-02,-4.47332634e-02,1.64447612e-01,3.92058357e-02,-6.92410276e-02,-4.60030100e-02,-4.37340797e-02,1.35632288e-01,1.65117671e-01,-1.99053240e-01,9.01682589e-02,-5.31272590e-02,-1.12737751e-01,6.12311367e-03,1.45177834e-01,-1.64769894e-02,-7.66387289e-03,-6.34081609e-02,-5.05529694e-02,1.03752083e-01,1.74752339e-01,-1.60401506e-01,-6.51204306e-02,-5.52766907e-02,1.57479354e-03 --6.88136264e-02,1.16935538e-02,5.86736530e-04,3.57023201e-02,3.15679287e-02,5.06313386e-02,6.72415469e-02,2.99345093e-02,-8.57978385e-02,-6.10021317e-02,-9.55928050e-02,1.41521230e-02,-4.47745382e-02,-3.42645911e-02,3.55599689e-02,-5.34568143e-03,-9.83454641e-02,-2.07195479e-02,1.35543299e-01,1.27872764e-02,4.05434620e-02,1.30405701e-01,2.22600054e-02,6.00486539e-03,1.96629296e-02,2.54633207e-02,2.29255595e-02,-4.34016958e-02,-2.37470816e-02,2.55327449e-02,2.94354704e-03,-2.08055269e-02,-5.77125553e-02,-1.37898622e-02,-8.52041514e-02,-2.73249959e-02,-8.67809510e-02,-7.76779653e-02,3.75894363e-03,-2.31585733e-02,-1.51747034e-02,1.11496403e-01,-1.10151711e-01,8.43744191e-02,5.61794512e-02,1.02601630e-02,4.40845767e-02,9.13095622e-02,-4.92936202e-02,3.76051522e-03,-1.39456659e-01,2.47199126e-02,-2.63796655e-02,6.31670520e-02,7.58352078e-02,4.19429960e-02,1.13338463e-02,-6.20661522e-02,-1.35593639e-01,-1.01054426e-01,-7.85106306e-02,-5.84750791e-02,-9.97260947e-03,3.34539409e-02,3.20576801e-02,5.03418737e-03,1.77749031e-01,2.60796520e-03,4.82706673e-02,8.13695829e-02,-6.69337931e-02,-1.53300546e-01,3.15724053e-02,3.48473834e-02,4.75185525e-02,-4.16801563e-02,5.23612536e-02,2.45697701e-02,3.80629036e-02,-3.33989842e-02,-1.72510793e-02,4.06100434e-02,5.26199674e-03,2.00700987e-01,8.98231970e-03,5.15006814e-02,1.99840473e-03,3.08133268e-02,6.48486909e-02,5.24711113e-02,2.96422788e-02,-3.74626714e-02,8.83186802e-02,-1.11283087e-02,-1.98726250e-02,-4.28214589e-02,-4.78038843e-02,-8.13900262e-03,-9.52259985e-02,-6.85148340e-02,-9.16665315e-02,4.08680883e-03,-1.70936215e-02,-1.07942468e-01,-4.41361643e-02,-1.21752690e-02,2.42918419e-02,-1.26223274e-01,6.08232824e-02,-1.80128059e-02,-3.29699380e-02,5.39898151e-02,1.09526937e-01,-3.24954250e-02,-7.10932560e-02,-8.00059644e-02,5.06298509e-02,-7.78373964e-02,4.38936269e-02,1.29051696e-02,-8.52560698e-02,5.50471294e-02,2.78332948e-02,8.78852350e-03,-2.19176037e-02,-7.06358999e-03,-9.98166380e-02,7.02585313e-02,3.62973662e-02,1.11434175e-01,-2.53742464e-01,-4.78450774e-02,-4.19805905e-02,-1.46725443e-02,-1.39637539e-01,-1.37237784e-01,-3.57264162e-02,1.84336982e-01,4.00377950e-02,3.63969328e-01,1.05796602e-02,8.36837861e-02,2.04931229e-01,-8.40448710e-02,-8.67287895e-02,6.32539943e-02,3.55471195e-02,-2.46673856e-02,-7.09541838e-02,3.19127117e-01,6.49687052e-02,5.67574166e-02,1.09452381e-01 -2.38278143e-02,2.32086663e-02,3.68575087e-02,-5.04500951e-02,2.25713786e-02,-4.89991070e-02,1.35055887e-01,4.08936028e-02,2.64535466e-02,1.88260897e-01,1.40325005e-01,8.11533564e-02,-1.04380511e-02,-5.51127528e-02,-6.02289920e-02,-4.28052014e-03,-2.20547963e-02,-1.59373144e-01,-5.59613987e-02,1.27419537e-01,-5.06636365e-03,8.88498402e-02,1.35045453e-02,4.43182647e-05,2.94822557e-02,1.30412799e-01,2.02189963e-02,1.06870310e-01,-3.23826521e-03,8.34349139e-02,-2.31128150e-02,9.35402051e-02,-2.28031489e-01,-1.14784628e-01,1.79161042e-02,-7.46002729e-02,7.33724719e-02,-1.09125966e-01,-3.54136939e-03,-1.09271374e-02,5.47812156e-02,2.98747164e-02,3.75303634e-02,2.54738452e-02,7.32817281e-02,1.41470969e-02,-8.25549332e-02,-9.08513643e-02,-3.66627501e-02,-2.53470867e-02,-1.32828339e-01,-2.09495103e-02,-2.93688123e-02,-1.04283815e-01,-3.47552374e-02,1.01071365e-01,-3.37555846e-02,-3.67052802e-02,3.80076029e-02,3.31477314e-02,-1.53541669e-01,-3.53486585e-02,-1.07450432e-01,-1.92188814e-02,-1.54079932e-01,1.64488663e-02,7.09918909e-02,3.15456152e-02,-1.48768683e-02,5.88502112e-02,-7.34013184e-02,-5.25430448e-02,1.16976281e-02,8.46325763e-02,-5.30957539e-02,1.11104707e-01,2.77635051e-01,4.14488778e-02,-6.99840990e-03,2.12486033e-02,-8.19275145e-02,-1.21935784e-02,-2.01145115e-02,-5.55889304e-02,-4.18312074e-02,-6.16949881e-02,2.03416883e-01,1.81107684e-01,-1.83305171e-01,-2.62267638e-02,5.37045536e-02,-1.23736204e-02,-5.59839397e-02,-2.69270546e-02,-9.91486305e-02,1.58943050e-02,4.97366294e-02,3.28810273e-02,-4.08399180e-02,-3.72172391e-02,1.12953768e-01,-6.21898218e-02,2.24986781e-02,1.22377696e-01,-1.59217730e-01,-4.46125201e-02,-3.28617083e-02,-6.19052916e-02,-2.88432925e-02,-8.48873376e-03,3.74815573e-02,-4.34740600e-02,-8.51724263e-02,-1.30639620e-02,5.55266505e-03,-1.55931219e-01,-1.15138392e-02,-3.17128059e-02,1.10635776e-01,5.74599175e-02,1.21382521e-01,-7.74688563e-02,2.40458504e-02,-3.49016635e-02,3.93651099e-02,3.05851784e-03,2.03709106e-01,7.05882984e-02,-1.40468877e-01,-1.12152113e-01,-1.07509101e-01,6.09016433e-02,-5.72931092e-02,-2.24671729e-02,-6.34803729e-03,5.71103480e-02,-3.79771715e-02,-5.73207964e-02,-3.10709566e-02,3.90402898e-02,4.55736248e-02,5.63477338e-02,-5.00945332e-02,1.76671976e-02,-2.61652591e-02,-4.55939907e-03,-1.24639136e-01,1.24053568e-02,1.61396262e-01,5.58639176e-03,1.08725914e-01,-7.39928115e-03,-8.15435574e-03 -7.26803702e-02,1.99702860e-02,-8.64527895e-04,2.24616851e-02,-5.85347371e-02,1.45135547e-01,-1.66984541e-01,-5.43854367e-02,6.10160587e-02,-1.72957488e-01,3.90817029e-02,7.91963703e-02,-3.31518547e-02,-1.54588534e-01,2.27820428e-02,1.11065235e-02,-3.08716339e-02,6.32642391e-02,5.29167387e-02,-5.27086380e-02,-2.52980048e-02,-2.82125050e-03,-8.78260503e-02,5.45008878e-02,8.24656115e-02,-5.40300595e-02,-1.66609184e-02,7.99736135e-02,6.55628303e-02,3.56624726e-02,-7.90879771e-02,-4.85869366e-02,-9.26904656e-04,6.55707205e-02,-6.66466586e-02,-3.69190835e-01,-6.98434105e-02,-1.89160606e-02,6.65692056e-02,6.79026318e-02,-1.48599869e-02,4.12935981e-04,2.47895863e-01,-6.03620795e-02,-4.96168147e-02,1.27940215e-01,-6.96671446e-02,-7.25737280e-02,2.24724802e-02,-1.55222715e-01,-2.47094316e-01,6.43347371e-02,4.19778625e-02,4.60109621e-02,-6.77406011e-02,1.02499907e-02,4.12065049e-02,3.48153290e-02,1.81337878e-02,-6.66833906e-02,1.04843038e-01,1.42167009e-01,-1.06590209e-02,-3.30757700e-02,1.83980886e-02,7.93264705e-02,2.32995385e-02,4.22816617e-02,6.37531650e-02,2.43948967e-02,2.84317049e-02,6.33926571e-02,-1.69028965e-02,2.82619891e-02,-5.50590543e-04,-2.13818867e-02,-1.17798374e-01,1.94568933e-02,-1.39266413e-02,-1.40972743e-02,-7.51093825e-02,4.95911657e-03,-3.25455770e-03,-1.70508337e-02,8.19906629e-02,-5.32107584e-02,-9.68727852e-02,-9.84991590e-02,3.23259426e-02,-1.27951138e-01,4.23721438e-03,2.65590201e-02,2.16655852e-02,-1.15788601e-03,-1.17070243e-03,6.70573778e-02,-4.38122356e-03,-4.52723068e-02,-4.45290934e-02,-5.30066210e-02,2.67916759e-02,-8.58397680e-02,2.03473670e-02,6.80633846e-02,3.70524190e-02,-1.71269565e-03,5.04067737e-02,9.49403781e-02,5.34599553e-02,1.00769215e-01,-4.15774979e-02,-1.04728950e-02,-9.45412803e-02,7.14921839e-02,4.48053967e-04,-5.69568530e-02,5.22576882e-02,8.89481058e-02,2.47605545e-02,1.69912198e-02,2.41005506e-02,-2.33175525e-02,-1.25828528e-02,-3.69486551e-02,-8.25778880e-02,3.00264905e-02,5.50411681e-02,8.03146002e-02,-2.29444063e-02,-1.93091015e-02,-2.97188811e-01,-5.99644327e-02,-1.82648786e-03,4.20609166e-02,-9.21072743e-02,7.74091623e-02,8.19237923e-02,-3.72125348e-02,-1.04115935e-01,-2.47194912e-02,5.87689788e-02,1.23383136e-01,1.09506635e-01,5.56416183e-02,1.01572111e-01,-6.09493679e-02,-1.89010085e-01,-5.45509693e-02,6.09480009e-03,-5.73929575e-03,-1.41550844e-01,2.89534906e-02,-4.51323879e-02 -1.16417712e-02,8.25895623e-02,-5.69421076e-02,9.41042883e-03,6.83769337e-03,6.37989270e-02,-2.65899878e-02,4.74673200e-02,-5.76402172e-02,3.26759387e-03,-1.10157479e-02,-4.19946639e-02,8.31535000e-02,7.05189668e-02,-4.38219855e-02,6.96226192e-02,9.07924959e-02,-1.20717478e-01,1.00971389e-01,6.44352907e-02,-3.70949423e-02,6.34040193e-02,-2.65871462e-02,-7.50768647e-02,-1.30100625e-02,-7.26647124e-02,-8.63021241e-02,1.63933743e-02,5.02791089e-02,-1.80837941e-02,7.45572700e-03,-3.46744682e-02,3.66331046e-02,-9.00913556e-02,-8.16101033e-02,7.53676683e-02,-2.78638383e-02,8.93574425e-02,8.41974321e-02,-4.92784338e-03,5.26886071e-02,-1.27887642e-01,-1.91611090e-01,-5.22375159e-02,-5.17349950e-02,5.96801026e-02,6.82096546e-03,1.12543580e-01,7.57415211e-02,-1.40806288e-02,4.93374676e-02,1.61380033e-02,-4.43857171e-02,-4.93276554e-02,1.70207661e-02,4.96691660e-02,-2.50182349e-03,-1.52921544e-02,9.61588616e-02,8.92481333e-02,-9.84673323e-02,7.39327080e-03,4.19620519e-02,4.15291721e-02,-3.69841602e-02,2.44613195e-01,-2.44005056e-01,1.19849124e-01,-4.63425749e-02,9.52366694e-03,-5.10178567e-02,-1.18186474e-01,2.23731381e-02,-2.12045181e-02,-1.39434843e-05,7.16112249e-02,5.18325270e-03,2.80493886e-02,-2.88300623e-02,2.66228148e-02,-3.11449945e-02,-5.90050321e-02,2.65813861e-02,-8.94071676e-03,-4.95834351e-02,-4.92804152e-02,-2.59619281e-02,-1.38547426e-02,-9.46221127e-02,6.99274543e-02,-3.63015172e-02,-7.37007005e-03,-1.16451187e-02,-4.26560909e-03,5.56191374e-02,-6.22312074e-03,1.94770482e-02,2.38300866e-02,-5.79743318e-02,5.31511345e-02,-1.09165161e-01,8.59057539e-02,9.53781806e-03,8.08383902e-03,1.07572648e-01,-8.59706085e-02,2.33576253e-02,4.87319886e-02,1.10624183e-02,-1.05682104e-01,8.11222285e-02,7.36507664e-02,-4.61030908e-02,2.42308937e-02,-1.23885063e-02,2.06479009e-02,5.78573870e-03,5.32387607e-02,-2.38024702e-02,6.74565276e-02,3.26195439e-02,-9.39947968e-03,-4.70485649e-02,5.26116936e-02,8.94049117e-02,5.07996358e-03,5.01958352e-02,-2.07544281e-01,5.73742633e-02,2.41430831e-02,-1.99367532e-01,1.28560408e-02,3.64663424e-02,-1.44414630e-02,7.53543322e-02,-5.03608092e-02,1.39212825e-01,-1.05751200e-01,1.62091797e-02,5.00850279e-02,-3.55006273e-04,1.17004756e-01,8.14305162e-03,4.38290933e-02,-3.06555006e-02,-1.01575810e-01,-1.93159345e-01,3.58165976e-01,7.76262096e-02,1.83172359e-01,-2.71274007e-01,5.50220311e-02,2.59902284e-02 --1.22527221e-01,-2.24342804e-02,-9.73409684e-02,-6.40204400e-02,-1.05770252e-02,1.70875051e-02,9.17181203e-03,2.65083949e-02,-4.13767394e-02,2.54247217e-02,2.87382705e-02,-9.64260205e-03,-3.76371315e-02,6.91192516e-02,-4.05581286e-03,-1.01301161e-01,1.03068993e-01,1.44325420e-01,-8.98924905e-02,-4.05303082e-02,9.85524002e-02,-2.25514316e-02,2.89100142e-02,-1.63428311e-02,-1.66035940e-02,-4.08784537e-02,-4.19726404e-02,-4.89533091e-02,-8.59822232e-02,-3.77349205e-02,3.26433338e-02,-7.12504211e-02,-1.84674806e-02,-1.09618755e-01,2.87497621e-02,9.45038793e-03,7.20553677e-02,1.21245236e-02,-4.54687398e-02,3.50627594e-02,-2.73903922e-02,-2.68076310e-02,3.18040067e-01,-7.50339436e-02,1.28917457e-02,-1.80774002e-02,1.35651450e-02,-6.73856469e-02,1.06685302e-01,8.54736227e-02,2.83624819e-02,-5.80438377e-04,1.65201434e-01,-4.36194696e-02,1.84850714e-02,-6.43684692e-02,-7.22517027e-02,-1.45137877e-01,-8.09430148e-02,5.53098832e-02,-1.40912819e-01,2.45416278e-01,1.30673515e-03,-2.05070361e-02,-2.99406270e-01,-1.50240762e-01,6.41778942e-02,-9.15867222e-03,5.17534360e-02,-9.69986339e-02,6.96591741e-03,-1.05966426e-01,-9.94425235e-02,-5.99145225e-02,-5.48961950e-02,-1.23515463e-02,7.21371730e-02,-5.02075060e-03,7.81388165e-03,-8.31181414e-03,2.46993482e-02,-1.05969422e-01,-4.74348252e-02,-8.31730040e-03,-2.75546072e-02,9.24970563e-02,-5.38850590e-02,2.28234258e-02,-4.00233087e-02,1.41025590e-02,4.19559356e-03,-8.01497386e-02,-6.42066341e-02,-9.29475925e-02,8.70352087e-03,1.03895379e-02,-3.64826005e-02,1.43181791e-02,8.00517712e-02,1.86563369e-02,4.15760497e-02,1.56127566e-02,6.98226262e-03,-1.20952702e-01,3.64065876e-02,5.68419060e-02,5.90938396e-02,-7.01081386e-02,-9.05213479e-02,1.62088304e-01,6.05813483e-02,3.07339564e-02,-1.80307069e-02,-1.24114551e-02,1.16378134e-01,1.08487859e-01,-6.35040488e-02,-1.62041301e-01,-4.52244602e-02,-1.15987336e-02,-5.65909932e-02,3.82428331e-02,3.09476025e-02,1.51627674e-02,-2.51821933e-02,-2.74740611e-02,2.67508083e-02,-1.31882228e-01,-1.55821948e-02,-3.12519944e-02,-2.03332983e-01,-2.94612687e-03,1.49388284e-02,-8.45048015e-02,9.10838194e-02,6.90489956e-03,1.24377534e-01,-1.35865678e-01,7.62428773e-02,1.19564385e-01,-8.16157937e-02,1.11593413e-01,1.17746889e-01,-7.57179436e-02,7.44683580e-02,3.71268934e-03,1.66444508e-01,-6.85545015e-03,1.65213755e-02,3.76779719e-02,-1.18182410e-01,-2.88837965e-02,-1.20703541e-02 -9.18860499e-02,8.48336524e-02,2.13239773e-02,-1.66972782e-02,-1.60170771e-02,6.73053896e-03,7.96404605e-02,-1.90448893e-02,1.20076112e-01,1.53993346e-01,-1.80796121e-02,1.67644067e-02,-2.16231657e-02,-5.69506389e-03,-7.81056872e-03,-5.86162812e-02,4.29917998e-02,1.67354145e-02,7.44729116e-02,-1.07034969e-01,7.16670016e-03,1.16560132e-02,-7.99550168e-02,5.45244865e-02,1.89510861e-01,6.86741987e-02,8.45367751e-02,-3.06910375e-02,-1.49311227e-02,3.45314164e-02,1.86658957e-03,1.12320959e-01,4.43973870e-02,1.79409678e-01,1.23986163e-01,6.64722314e-02,2.36304265e-02,1.72145712e-02,-6.98024323e-02,-3.33502884e-02,-6.04837000e-02,3.91732358e-02,2.86437502e-03,-8.98472178e-02,-4.09802025e-02,-4.71374488e-02,-1.44803095e-01,2.64323728e-02,-7.81659313e-02,2.82240246e-02,5.67475572e-02,1.80990328e-02,1.67614170e-01,2.57590467e-02,-1.05096084e-02,3.68594740e-02,-6.18454527e-02,1.02937970e-01,1.92743313e-01,-4.43852856e-02,-1.70726414e-01,-1.14382570e-01,8.26974964e-02,5.62610826e-02,1.84695613e-01,-1.54412055e-02,3.55394250e-02,3.96608229e-02,1.21250233e-02,-1.58016675e-01,2.95540802e-02,5.20490710e-02,-8.40244076e-02,-5.36873776e-02,3.40729579e-02,-6.47848152e-02,-5.76244135e-02,3.64681415e-03,-2.12206727e-02,2.82935178e-02,5.45596412e-02,-1.09535072e-01,-1.34974810e-01,-9.37979810e-03,6.10629228e-02,6.06858768e-03,3.45369436e-02,8.73226685e-03,9.12227849e-02,-1.26329653e-02,3.73346834e-02,-1.12541374e-01,-9.91047168e-02,-3.14815507e-02,3.71660161e-02,1.21554492e-01,1.37253250e-02,-7.10004687e-03,3.83038809e-02,3.65549750e-02,1.42303908e-01,1.87335010e-02,2.28759982e-02,-8.74533517e-02,-6.07754497e-02,-1.39327506e-02,3.39454209e-03,4.52854201e-02,5.88651261e-02,1.07006491e-01,-7.48372490e-02,7.76894698e-02,1.49092504e-01,6.49554161e-02,-3.89739731e-03,9.95299468e-03,2.59495249e-02,7.28463007e-03,1.45554769e-02,3.92499279e-02,-8.23297462e-03,-2.68248101e-02,-8.32351468e-02,4.79023203e-02,-7.56576142e-02,7.83268626e-02,6.17485689e-04,2.00488249e-01,-6.85224664e-02,1.16581222e-01,-1.29371699e-01,-3.94234911e-02,4.27915029e-02,1.07430144e-01,-2.98317334e-02,1.03572134e-01,-3.11729664e-02,-2.43121696e-02,4.07344563e-03,1.29103070e-01,-6.02189610e-02,5.22711302e-02,-1.27172643e-02,-4.81894802e-02,-1.00203787e-01,-9.52551306e-02,1.13210440e-01,3.22039328e-01,1.79745846e-01,-1.30325845e-02,-1.94277325e-02,-8.82091790e-02,-4.90187941e-02 --1.48835148e-01,-1.86757826e-02,-6.30636999e-02,-2.35545880e-02,-3.12762788e-02,1.60968744e-02,7.16533415e-02,4.71188215e-02,2.73079258e-02,8.92758302e-02,-6.25000233e-02,-1.20401794e-01,-2.85230658e-02,-1.68338757e-02,-7.76512001e-02,1.06783751e-01,6.19503140e-04,-2.56149153e-02,-5.24196893e-02,-6.97270337e-02,-1.39166589e-01,1.04532125e-01,1.08339272e-01,-3.10283968e-02,3.27757966e-02,2.85252071e-02,-2.82673246e-02,2.88951372e-02,-5.74557294e-03,6.00466353e-03,2.52341955e-02,-1.68636897e-02,1.67721242e-02,4.53494433e-02,-7.85092731e-04,8.75383933e-02,-4.27257174e-02,4.99281818e-03,-3.87075457e-02,-5.12261110e-02,-1.03299205e-01,-1.55188705e-01,-3.48497784e-02,4.55416257e-03,-3.74696404e-02,8.10418736e-02,-1.29230038e-01,1.02085908e-01,-1.99340436e-01,-4.76872821e-02,4.54707340e-02,-6.67574041e-02,-1.35641666e-01,-6.56739893e-02,4.12645100e-03,1.27734860e-01,3.14971883e-03,8.93109489e-02,8.53007180e-02,-1.28645499e-01,7.64211550e-02,-3.35991764e-02,-1.71894177e-02,-1.02068487e-01,9.62940540e-02,-1.43250129e-01,6.66158068e-02,1.02505817e-01,-3.31720392e-02,5.11917286e-02,-1.55619620e-01,1.12275214e-01,4.13604624e-02,-1.04420375e-02,-8.96287482e-02,-3.19106802e-02,7.17393838e-02,5.31312923e-02,-1.30864273e-01,-1.53414280e-04,-3.07380344e-02,7.99998425e-02,-1.39224131e-01,-1.47889789e-02,2.71729876e-02,4.58388590e-02,8.51406085e-02,-6.77638767e-02,9.60325809e-02,-9.29023606e-03,-1.60252005e-02,-1.77864137e-01,-2.74767064e-02,-2.75914362e-02,-1.65304327e-02,-7.21290200e-04,5.78165849e-02,-5.66289689e-02,-9.16717984e-03,9.64091981e-03,-4.09909734e-02,-6.23780960e-02,4.77403746e-03,7.15489002e-02,1.35428916e-02,5.94533255e-03,-6.86555545e-02,-3.56978847e-02,-2.06806070e-01,2.97683180e-01,2.89830364e-02,1.22250169e-02,-6.43316314e-03,2.12953615e-03,-8.41225455e-02,7.31883364e-02,6.98187707e-02,1.63289888e-03,-9.88807946e-03,3.37602863e-02,-2.71370561e-02,-5.22574750e-02,-9.47924614e-02,1.59334944e-02,8.43554458e-02,2.34286478e-02,6.95435360e-02,-7.66227566e-02,-1.27606420e-01,-8.17288415e-03,2.22070366e-02,1.74160828e-02,-7.08704427e-02,-4.16638752e-03,2.45549992e-02,-7.46399435e-03,-8.71600180e-03,-4.69222883e-02,6.59483224e-02,1.65332879e-02,4.00395939e-02,-1.62376615e-02,1.63097208e-01,-1.24360717e-02,2.32182701e-01,9.19211081e-02,-4.57052460e-02,-9.19885860e-02,-1.72765795e-01,2.03454162e-02,-2.50372756e-01,2.81683692e-02,4.73717303e-02 diff --git a/c-concoct/test/PCA_transformed_data_gt1000.csv b/c-concoct/test/PCA_transformed_data_gt1000.csv deleted file mode 100644 index 167fa98..0000000 --- a/c-concoct/test/PCA_transformed_data_gt1000.csv +++ /dev/null @@ -1,444 +0,0 @@ -contig,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 -contig-309000000,3.44240380e-01,6.25698181e+00,-9.69791467e-01,1.09745763e+00,-9.62334521e-01,9.59070870e-01,-5.37774726e-01,6.43004685e-01,1.13450853e+00,1.05743711e+00,2.81188719e-01,3.88739670e-01,6.41421918e-01,2.09899487e-01,9.61344594e-01,2.01769110e+00,-4.73311432e-01,9.15084857e-01,-8.00987214e-01,7.45311248e-01,3.32595870e-01,-4.74924250e-01,-3.86607057e-01,4.31872005e-01,1.17951580e+00 -contig-4559000000,-5.90970185e+00,-5.94939337e+00,-1.77014553e-01,-6.94379558e-01,-1.69369383e-01,5.30759583e-02,2.87987399e-01,1.64532994e-03,-1.57609667e-01,1.86455620e-02,5.75262354e-02,-1.55380296e-01,2.43746677e-01,-5.22860126e-02,6.67607096e-02,-5.74294349e-02,-4.46737877e-01,4.77527369e-01,-4.43540681e-01,-2.54258765e-01,-3.86221209e-01,-2.29220675e-01,-4.48194648e-01,4.72585251e-02,-4.51862520e-02 -contig-3573000000,1.35921335e+01,-1.44940358e+00,-6.18529778e+00,-6.76195646e-01,-2.35570923e-01,-2.00766373e-01,-4.95655540e-01,7.82804907e-01,-5.38319225e-01,-3.16028920e-01,-5.03687898e-01,3.63242113e-01,7.91144442e-03,-3.19357735e-01,1.39299689e-01,1.12347073e-01,-5.06410232e-01,-2.89603060e-01,2.81345189e-01,-3.13197414e-02,8.60643013e-02,8.00960836e-02,-1.17146121e-01,1.93749770e-02,-6.67367315e-02 -contig-167000000,-7.40407946e+00,-2.90687832e+00,-4.23666808e+00,-4.02181057e-01,-1.91867576e-01,-9.39203950e-02,7.70322630e-01,5.14136833e-01,-6.96611069e-02,1.72913555e-01,2.11542734e-01,-4.13797742e-02,-1.84437778e-01,-7.02689351e-02,2.27162431e-01,2.90769420e-02,-5.39664640e-02,2.36282346e-01,-4.07928088e-01,-1.83877418e-01,-1.70687917e-01,-1.01859018e-01,4.28172766e-02,-6.58994216e-03,-1.85417605e-01 -contig-315000000,1.01510135e+01,-1.59489001e+00,-8.43535597e-01,2.94841428e-01,2.21030411e-01,1.60418248e+00,6.77563777e-01,-1.60668012e+00,3.97672203e-01,7.36840260e-01,8.09439060e-01,-4.26643981e-01,-3.13841206e-01,7.53172662e-01,8.29015925e-02,-6.51125428e-01,8.33424314e-01,4.17602888e-01,-1.11587411e+00,2.34731134e-01,-3.23179767e-01,-7.26306471e-02,5.70930801e-01,3.30105167e-01,-1.96841422e-01 -contig-305000000,4.86698170e-02,6.36554636e+00,-5.84174518e-01,1.11643757e+00,-9.71671118e-01,1.73467833e+00,-6.44071182e-01,-1.92022588e-01,-3.26198817e-01,-1.44526306e-01,-3.23599451e-01,-3.96922451e-02,1.00922131e-01,-6.76642807e-01,-3.99179872e-01,2.46480916e-01,3.43281525e-01,-2.03312481e+00,4.85669791e-02,-3.87819490e-01,-1.16606574e-01,-7.38410311e-02,-1.92105731e-01,2.22767014e-01,-3.91424820e-01 -contig-242000000,2.06331303e+00,-4.27003358e+00,1.02386883e+01,-1.26398683e+00,-9.60313584e-01,1.75310556e+00,-7.18282834e-01,5.34123858e-01,-1.92544296e+00,1.08145494e+00,1.17223393e+00,1.65325134e+00,-5.39638931e-01,4.40886393e-01,5.79292968e-01,3.53581284e-01,1.59228809e+00,-4.74179054e-01,-7.63245877e-02,-1.31800202e+00,-4.83251736e-02,8.70992894e-01,8.50488708e-01,-6.69129280e-01,1.32701012e-01 -contig-9000000,1.41510600e+01,-3.13975592e+00,-4.68564789e+00,-8.45481581e-01,-2.49854913e-01,-9.44257863e-02,-1.15050216e+00,5.95173514e-01,-5.56171338e-01,-5.69338971e-01,-2.78117437e-01,4.34204868e-01,-3.44627117e-01,-5.08493422e-02,2.84339858e-01,-2.41996861e-01,-5.88743191e-01,-1.03618533e-01,1.63781707e-01,-2.47188638e-01,-2.89232425e-01,-1.26553075e-01,-1.73504914e-01,1.14398350e-01,-9.91672273e-02 -contig-286000000,-4.22635250e-01,3.96262222e+00,1.42892905e+00,8.09941732e-02,-3.44052924e-01,1.74368137e-01,-1.32176283e-01,-3.16898688e-01,1.45501915e+00,5.45905885e-01,1.24436679e+00,3.12665175e-01,-9.83748594e-01,8.69742281e-01,-8.95422923e-02,-2.20646959e-01,-8.41302791e-01,1.15201504e-01,-5.90054861e-01,3.79021661e-01,-4.49843857e-01,1.10132193e+00,5.66765360e-03,1.03779048e+00,4.22831058e-01 -contig-17000000,1.27266571e+01,-5.32624976e+00,6.24133261e-01,-9.00854897e-01,-1.12572014e-01,8.58259611e-01,-1.27223867e+00,-2.96415096e-01,-7.84675544e-01,-6.09683672e-01,9.55939603e-01,-1.89654428e-01,-3.93002328e-01,-4.48773436e-02,5.42182773e-01,-4.49563865e-01,-1.11408189e-01,-1.48424231e-01,-4.33477376e-01,-3.36578249e-01,-4.72007183e-01,-1.79489539e-01,-1.40605533e-01,3.92905540e-01,2.19059037e-02 -contig-236000000,-4.73233900e-02,4.96375800e+00,2.28434211e-01,2.62056833e-01,-1.18192182e-01,6.10001803e-01,-3.44573490e-01,-2.83776542e-01,-7.08498904e-01,-2.92959020e-02,5.54566026e-01,6.81658597e-01,9.63064359e-01,4.51872129e-01,9.64518553e-01,-3.46842954e-01,-5.37426385e-01,-7.32590599e-01,2.83124837e-01,-3.04852331e-02,-1.18651245e+00,-4.36045839e-02,7.30743341e-01,1.20453818e+00,-4.26037497e-01 -contig-0,1.33260466e+01,-1.05779942e+00,-7.28500865e+00,4.67898681e-02,-1.77629747e-01,2.57809591e-02,-6.56324349e-01,9.54519782e-01,-2.87306331e-01,-4.15142338e-01,-8.99509394e-01,4.08285224e-01,3.41603493e-01,-6.27390195e-01,-1.20992172e-01,3.97805050e-02,-2.49813385e-01,1.52442428e-01,5.87662082e-01,1.56574134e-01,3.57146383e-01,8.02518386e-02,1.45037396e-01,1.64831715e-02,3.75618423e-02 -contig-258000000,-2.96869300e-01,5.63544865e+00,-2.30765891e-01,1.31511726e+00,-2.40616899e-01,8.88909354e-01,-1.55958107e-02,1.04044200e-01,2.38483023e-01,2.54565754e-01,3.44633151e-01,-5.95918219e-01,7.45246766e-01,7.70236749e-01,-1.15928504e-01,3.28410472e-01,4.41099142e-02,-5.92078587e-01,-1.59143275e-01,-7.92781733e-01,-1.61620417e-02,-9.74503814e-01,7.22774615e-01,9.04404202e-02,1.19274259e+00 -contig-41000000,-6.54714163e+00,-5.70504735e-01,-4.19411027e+00,-2.44661818e-01,-9.67356525e-01,6.40006749e-01,8.98525663e-01,5.27032868e-01,5.78631039e-01,-3.06393569e-01,2.26866072e-01,-1.90059477e-01,4.15411715e-01,-4.61539439e-01,6.28031975e-02,1.07029333e-01,2.21899603e-02,2.22065673e-01,3.78893691e-01,-2.02943499e-01,8.67802642e-03,3.41258750e-02,-1.41918615e-01,-2.30079525e-01,1.77370222e-01 -contig-254000000,7.04787581e-01,3.10895270e-01,4.62111044e+00,-9.77679810e-01,2.33750098e-01,-6.73076364e-01,-2.24526538e-01,-4.50429153e-01,9.94776388e-01,7.18480765e-01,-5.01740683e-01,7.85871038e-01,-4.38718523e-02,-3.33612613e-01,-7.26332503e-01,-7.76283878e-01,-8.01547065e-01,-1.18508927e-01,-4.33839507e-01,-2.76083477e-01,5.20419108e-01,-8.25302871e-01,-1.60233966e-01,4.86586229e-01,-4.93347571e-01 -contig-252000000,-3.59926145e-01,6.42083845e+00,-7.66981754e-01,9.83297008e-01,-2.43678752e-01,1.10392472e+00,-1.05958356e-01,-1.22790973e-01,-8.11441397e-01,1.05635194e+00,-6.95436661e-02,-7.36942944e-01,-1.91212290e-01,-2.85211715e-01,3.36239941e-01,5.33469903e-02,9.85697844e-02,-1.21928712e+00,-1.79712425e-02,-1.31765204e-01,-1.71088339e-01,-4.78428198e-01,1.07210916e+00,2.98006453e-01,1.86754744e-01 -contig-272000000,-3.23813722e-01,5.01012841e+00,1.72288612e-01,2.65234631e-01,4.12414298e-02,-1.15241291e-01,2.72391108e-01,-4.77299208e-01,5.15866698e-01,-8.47689392e-02,3.55557674e-01,4.35059121e-01,-8.31871060e-01,6.13180302e-01,6.40004008e-01,3.54610138e-02,1.75072035e-01,8.28424012e-01,7.20959549e-01,3.42190876e-01,-7.79103751e-01,-1.61112889e-01,-5.98736609e-01,3.90840757e-01,5.11932413e-01 -contig-387000000,-2.61985540e+00,-1.34345310e+00,6.03455479e-01,8.57371632e-01,5.67249589e-01,-2.78805083e-01,-1.33847107e+00,-1.42392784e+00,3.99948314e-01,-3.59590487e-02,7.26114807e-01,5.02311412e-01,1.51136740e+00,-4.76229218e-01,-3.77570287e-01,-3.40505796e-01,-9.45240231e-01,-7.22281364e-01,-1.03360499e-01,3.76370890e-01,4.40046110e-01,1.30643733e-01,7.21037667e-01,8.76596415e-01,2.72843872e-01 -contig-190000000,-6.59217100e-01,3.97246070e+00,7.12972226e-01,9.95233579e-02,9.67655033e-01,-3.92948831e-02,6.74680421e-01,-9.07020326e-01,-4.39452116e-01,6.16199106e-01,1.03207070e+00,-6.14034586e-01,-1.10680632e+00,1.27673070e-01,-5.37647045e-01,-7.40256189e-01,-9.21853423e-01,1.32209483e+00,2.26866790e-01,-3.24744567e-02,-4.28032877e-01,3.89606590e-02,1.05990840e+00,4.61366645e-01,-8.38611975e-01 -contig-135000000,-3.03541655e+00,-4.48848756e+00,2.47974938e+00,-5.65503820e-01,7.62882958e-01,3.49770251e-02,-1.65039525e+00,1.34649636e-01,-5.86003270e-01,6.98843743e-01,1.30854604e-01,6.63566322e-01,1.50526692e-01,1.73898627e-01,-1.16169513e+00,2.60752726e-01,-4.96969933e-01,3.80011124e-02,2.18751200e-01,3.15528973e-02,-2.53974541e-01,3.30076051e-01,-2.09229436e-01,-5.04101552e-01,-3.40533006e-01 -contig-111000000,-1.36284350e-01,1.51754171e+00,2.70022575e+00,-1.33629708e+00,2.37761204e-01,-1.44965102e-01,5.33688581e-01,-3.44284206e-01,-6.10589299e-01,-2.53231331e-01,-2.70441179e-01,1.96109668e-01,2.16655072e-01,4.57056749e-01,1.01463584e-01,-3.34753057e-02,-3.74042356e-01,-1.67996123e-01,-5.37913801e-01,-1.31034990e-01,-3.47036898e-01,-2.53186837e-01,2.10967995e-01,7.54078705e-01,-2.89691037e-02 -contig-63000000,1.15659501e+01,-2.27251044e+00,-1.93306613e+00,-4.27257431e-01,-6.04660394e-02,6.22438146e-01,1.57299273e-01,-1.19404607e+00,2.14679529e-01,-3.81056050e-01,9.59290494e-01,-1.60361058e-01,-6.87326611e-01,3.42839199e-01,2.24652621e-01,-1.59382739e-01,2.66160438e-01,1.32534924e-01,-1.25045416e-01,2.12638722e-01,-3.42853839e-01,1.06371596e-04,2.66026377e-01,2.04414670e-01,2.54769290e-03 -contig-8000000,-6.94185388e+00,-2.67275427e+00,-3.85770416e+00,-1.97878482e-01,1.31286264e-01,-4.65073440e-01,6.76745574e-01,3.78898554e-01,-4.23840297e-02,1.28302581e-01,2.43567199e-01,2.02110320e-01,-1.05844768e-01,-1.37249188e-01,1.08657622e-01,-1.82947928e-01,3.69222681e-02,3.55222381e-01,-2.07688978e-01,-2.71533761e-01,-2.47811131e-02,-6.45717778e-02,-1.54050929e-02,3.47618400e-02,2.47238492e-02 -contig-259000000,2.31701483e+00,-4.74567273e+00,1.02280238e+01,-5.05547026e-01,-1.16662711e+00,2.01547299e+00,3.91407326e-01,-5.95315058e-02,-1.68307864e+00,-2.67327758e-01,3.62970251e-01,1.03559675e+00,4.37729814e-01,-2.07112500e+00,6.31772195e-01,6.97106961e-01,-2.91450428e-01,-5.58512983e-01,-6.72076256e-01,7.80209511e-01,-3.61701898e-01,9.01108067e-01,7.27933118e-01,-1.51563782e+00,-2.70532095e-01 -contig-4920000000,-7.22364036e+00,-2.65994669e+00,-3.95638854e+00,-2.69735849e-01,-6.58276150e-02,1.08784026e-01,4.95994725e-01,2.20309143e-01,-5.75315566e-01,7.80165329e-03,3.68114040e-01,-1.09301130e-01,-1.84496487e-01,-9.33531452e-02,1.62813097e-02,-1.39956234e-01,3.62602773e-01,2.45016447e-01,-2.95656112e-01,-6.82382972e-02,-2.57137033e-01,-2.94142663e-01,-1.95412394e-01,-7.89913201e-02,-3.32138675e-03 -contig-139000000,-6.70566627e-01,3.71504616e+00,7.56672357e-01,-9.89263860e-02,-2.49437803e-01,2.43780281e-01,-3.43372432e-01,5.62479537e-01,1.86066587e-02,-4.99143670e-01,4.49788265e-01,2.95620972e-01,4.92608906e-01,1.34921116e+00,-1.00896015e+00,-6.64339813e-02,-7.92877129e-02,-2.71818341e-01,2.40614916e-01,-5.16355299e-01,5.91978758e-01,-1.83460330e-01,-1.05832840e-03,-6.38783430e-01,-1.35076892e-01 -contig-179000000,-6.78678682e+00,-1.45929648e+00,-4.49272059e+00,4.02453588e-01,1.67073810e-01,3.20039800e-01,4.76080146e-01,2.45626329e-01,-9.33046396e-01,1.07208311e-01,-8.46999342e-02,-3.99594904e-01,-1.97618439e-01,-3.08827115e-01,-1.32056627e-01,-8.68989689e-02,2.56150629e-01,-3.86420941e-01,-1.78697331e-01,1.33267630e-01,-2.30601831e-01,-4.84956829e-02,2.30257431e-01,-1.21866368e-01,1.34230894e-01 -contig-157000000,-4.11878514e+00,8.62557598e-01,-2.85895849e+00,1.51276592e+00,3.53277316e-01,2.17037258e-01,-3.85528364e-01,-8.62283890e-01,2.63621703e-01,5.22233403e-01,6.28588217e-01,1.09596357e+00,-6.88048518e-01,-5.84651218e-01,-7.53956283e-01,-1.32178428e-01,5.33871401e-01,-2.90166189e-01,5.44700929e-01,8.19715572e-01,4.66264310e-01,2.74295157e-01,-9.26688118e-03,-1.39367612e-02,9.43967452e-03 -contig-402000000,-3.67995886e+00,-2.77344789e+00,1.25817477e-01,-1.98133028e-01,4.69961490e-01,2.16729341e-02,-3.58365933e-01,-5.13063574e-01,4.76711933e-01,-2.80302894e-01,-2.08715564e-01,-2.97058757e-01,5.41550229e-03,1.37219505e-01,-2.92821477e-01,4.11933975e-01,-1.14579323e-01,3.91205067e-01,5.30715785e-01,-6.43806025e-01,7.77759488e-02,1.18917539e-01,-1.01284880e-01,4.39180036e-01,3.20041609e-02 -contig-505000000,4.50812881e-01,2.89244474e+00,1.56909118e+00,-5.51148887e-01,6.76445800e-02,-7.01088217e-01,1.97482028e-01,1.75718256e-01,2.95173939e-01,-2.25517202e-01,-5.09559191e-01,-1.45049689e+00,7.66840514e-01,-4.94048634e-01,4.08707870e-01,-1.14005416e+00,-3.83212582e-01,5.74914395e-01,-1.42945529e-01,-2.59412639e-01,-1.86977054e-01,-1.56355218e-01,-2.20103418e-01,-5.45949531e-01,1.19562459e+00 -contig-300000000,1.51311343e-01,5.49128065e+00,-1.65696168e-01,2.42067307e-01,1.14509548e+00,-2.44729942e-01,-3.58394722e-01,6.91089598e-01,-1.42324559e+00,6.45046611e-01,6.49539143e-02,2.78610812e-01,1.08593440e-01,-8.35635980e-01,-7.00409442e-01,-9.40394732e-01,-3.72843796e-01,-1.04469376e+00,-5.12395617e-02,-1.11621603e-01,-1.82743676e+00,6.98077823e-01,-7.57740017e-02,3.03713182e-01,3.72249153e-01 -contig-33000000,-4.11002409e+00,-5.62466044e+00,1.62169384e+00,-5.24605495e-01,-1.66042683e-01,-1.89916653e-01,-4.73390481e-01,1.75139961e-01,7.04810677e-01,-2.27360407e-01,-3.53965874e-01,-5.22739365e-01,4.67827599e-01,-3.02636530e-01,-8.31133634e-02,3.54620811e-01,-1.96476370e-01,3.93427252e-01,2.21262747e-01,8.60008050e-02,4.87108235e-01,1.68321341e-01,-2.12225136e-01,5.21741668e-02,-2.96922308e-01 -contig-62000000,1.19716640e+01,-4.35902731e+00,-4.71614594e-01,-6.89961015e-01,-1.35569002e-01,1.12717894e+00,-1.16231758e+00,-7.60201159e-01,4.05442208e-01,-2.75782699e-01,2.78894528e-01,-2.45675090e-01,1.91369010e-01,3.86561307e-01,6.44232343e-01,-5.41369055e-01,3.29278274e-01,3.30876308e-01,-1.05050001e+00,-7.16725015e-01,-3.38857154e-01,-3.93241857e-01,-1.88340760e-01,1.28824914e-02,-5.00011292e-02 -contig-27000000,1.22841999e+01,-4.10367480e-01,-6.50324908e+00,-9.39926439e-02,1.11257904e-01,3.42751048e-01,-2.71402382e-01,6.22033248e-01,-1.90368863e-01,-9.91126235e-02,-4.84457869e-01,1.16769764e-01,8.31301799e-02,-5.53826019e-01,-2.66358483e-01,4.76641156e-02,2.13988202e-01,3.19919878e-01,9.93597909e-02,2.98717200e-01,4.36721042e-01,9.35432199e-02,-1.01420801e-01,-3.39013811e-02,1.36979034e-01 -contig-42000000,-4.81984424e+00,-3.39178817e+00,-7.71383068e-01,-1.24464573e-01,1.02718584e+00,-4.29592987e-01,-2.70466628e-01,-2.47061659e-01,-5.07957406e-01,1.27422277e-01,1.70937043e-01,-4.32087928e-01,-3.74678776e-01,2.14109897e-01,-1.96690538e-01,-1.48106991e-02,-3.22563731e-01,-1.07723220e-01,2.12091925e-01,2.85404066e-01,3.08625910e-01,2.61834252e-01,4.68079082e-01,-2.27759293e-01,7.99728143e-02 -contig-134000000,2.82997070e-02,3.46071742e+00,6.41101707e-01,-6.30188085e-01,-6.47204670e-01,2.05279782e-01,7.15789350e-01,3.02061632e-01,5.33657409e-01,-5.01465860e-01,-9.31390986e-01,1.43087106e-01,-6.13547435e-01,-6.66530061e-02,-6.01623547e-01,1.62801929e-01,3.15653169e-01,-3.02524067e-01,-4.71711197e-01,1.19928519e-01,-7.12888230e-01,-1.83262815e-01,1.05380344e-01,-1.02517541e-01,-1.86245504e-01 -contig-107000000,-7.93969750e-01,5.38390861e+00,-7.85668194e-01,5.23582643e-01,-1.22978575e+00,6.71927217e-01,1.39646398e+00,2.27278585e-01,1.37368584e+00,-2.20095617e-01,4.22317134e-01,3.36235862e-01,2.93679137e-01,-2.88827991e-01,-4.32505720e-01,6.29582414e-02,-4.01276663e-01,1.32508458e-01,-3.08790081e-01,-2.72242353e-01,7.51203500e-02,-1.55893239e-01,6.29458670e-01,7.80586370e-02,-3.71799965e-01 -contig-1039000000,-3.04315038e+00,-1.16808644e-01,-1.91958401e-01,6.83249545e-01,6.12003293e-01,9.92820045e-02,-1.29099967e+00,-8.24687460e-01,4.25514224e-01,-3.67238825e-01,5.28833245e-01,-5.80136530e-01,1.04713257e+00,-1.33460639e-02,3.63882323e-01,3.41812831e-01,9.12009695e-02,-7.22763768e-01,1.99765789e-01,1.43303096e-01,-1.71081097e-01,-4.07297051e-01,5.41792661e-01,4.66331618e-01,7.55717595e-01 -contig-116000000,-6.08085942e-01,6.41334106e+00,-1.88585301e+00,7.85480295e-01,3.63321264e-01,2.24243656e-01,8.39440764e-01,7.76774806e-01,-1.21873908e+00,1.46702964e+00,1.35628198e-01,1.78104259e+00,-5.88622402e-01,-4.30760450e-01,-8.58582709e-01,-4.93325179e-01,-1.96756255e-01,4.94182102e-01,-3.60230090e-01,3.76340599e-01,-5.12496949e-01,8.65348057e-02,4.99634202e-01,-9.39294238e-01,-1.70822905e+00 -contig-294000000,1.49406701e+00,1.10923799e+00,3.48474210e+00,2.62910669e-01,1.22065410e+00,-1.05291357e-01,1.61128381e+00,-5.25097356e-01,-4.62876695e-01,-1.16558859e+00,-1.22643704e+00,7.84300334e-01,3.67828424e-01,2.44922898e-01,2.39389857e-01,-8.34123581e-01,-2.99253041e-01,2.27023764e-01,3.63211366e-01,3.85159122e-01,-1.14860898e+00,-9.17201738e-01,1.92787843e-01,-8.40068692e-01,6.97893612e-01 -contig-273000000,-2.16948731e-01,3.64887902e+00,1.39910626e+00,3.95902099e-02,4.20489343e-01,1.80519081e-01,-7.96848362e-03,-6.26170959e-01,5.20507434e-01,2.77849460e-01,-9.56668135e-02,5.52210181e-01,-1.99261968e+00,1.03619382e+00,1.44010984e-01,-9.81346922e-01,-1.14676608e+00,1.06310209e-01,1.90942756e-01,1.63309098e+00,4.13777833e-02,-4.69131487e-01,8.09982541e-01,-4.49820805e-01,-3.57756328e-01 -contig-143000000,-4.46625171e-01,3.65204051e+00,8.69484209e-01,-4.00953191e-01,-2.17594579e-01,2.36195997e-01,7.85702035e-02,2.91591415e-01,-2.02068819e-01,-3.87744998e-01,-8.18645210e-01,-1.32004576e+00,-1.66422589e+00,8.88857935e-01,7.74186890e-01,5.41625618e-01,-1.55358547e-01,-7.25353623e-02,4.52916533e-01,-1.95084844e-01,-7.99599329e-02,-7.62029870e-01,-2.19703327e-01,-2.98470587e-01,8.06394614e-01 -contig-178000000,4.27022719e-01,1.23127009e+00,3.04597061e+00,-9.58669894e-01,2.18749603e-01,-5.98942207e-01,2.84503411e-01,7.00006480e-01,1.18356439e+00,-9.03268074e-01,-8.92434943e-01,-1.69458160e-01,-2.58415084e-01,5.57742122e-01,-4.72585470e-01,4.81408126e-01,2.34888119e+00,7.70843976e-01,2.95845668e-01,3.59897695e-01,-4.46978511e-01,1.87568127e-01,-5.52531467e-02,3.29787448e-01,8.04020364e-01 -contig-4930000000,-7.26724455e+00,-4.06943518e+00,-3.37286687e+00,-3.52438615e-01,-9.18664516e-01,3.51619220e-01,6.11265168e-01,4.64987377e-01,1.93453247e-01,1.10975977e-01,-1.53591099e-01,-1.22802989e-01,1.60249024e-01,1.10515329e-01,-6.40285522e-02,-1.53966916e-01,-3.58130971e-01,2.87023032e-01,-5.59433441e-01,-1.10025458e-01,-1.86055778e-01,-1.20139309e-02,-5.88719523e-02,-8.47329897e-03,1.12921780e-02 -contig-2179000000,-6.84311045e+00,-1.95267826e+00,-4.25957250e+00,8.53718455e-02,-2.13991935e-02,-5.78049613e-02,2.80569661e-01,3.18990327e-01,-1.26678636e-01,2.28895883e-01,4.31895811e-01,2.71527069e-01,2.26642214e-02,-4.58737821e-03,-6.03989405e-02,-4.44305624e-01,1.79948573e-01,1.22369506e-01,-9.46037244e-02,3.02538658e-02,-7.45127984e-02,-4.03657681e-02,9.36165557e-02,-7.48824662e-04,1.10399994e-01 -contig-79000000,-1.13153115e+00,3.67491352e+00,6.56902466e-01,-4.94926260e-01,-1.77973384e+00,8.71005854e-01,7.64677539e-01,3.86403571e-01,1.33444059e+00,-1.07576400e+00,3.10628161e-01,5.77067395e-02,-3.32759106e-01,5.28640094e-01,6.15591513e-01,4.56544387e-01,-2.84914711e-02,5.75418035e-01,-1.42984226e-02,4.19689903e-01,-5.14041654e-01,2.68833552e-03,-3.09020214e-01,-8.82419691e-02,-1.60905749e-01 -contig-2699000000,-2.59653262e+00,2.41865918e+00,-1.27597095e+00,1.32926145e+00,7.44367687e-01,-3.30517623e-01,-1.22445976e+00,-1.28735719e+00,5.34249017e-01,3.83288654e-01,1.15144853e+00,-3.03413352e-01,8.23848078e-02,-1.57057962e+00,-3.54251812e-01,-1.31609403e-02,-2.19236002e-01,6.50579063e-01,1.08042186e+00,-7.53010825e-01,-5.10022877e-01,6.02128676e-01,-3.98537830e-01,-3.41884644e-01,1.37427598e-01 -contig-184000000,-3.40697463e-01,4.73280367e+00,-4.31188022e-02,2.69456358e-01,-5.74848110e-01,6.78447476e-01,-3.13071975e-01,6.56215566e-01,4.11220754e-01,5.21090679e-01,-2.31016850e-01,1.18686420e+00,-4.25173551e-01,-7.63407945e-02,1.04871172e+00,1.06352768e+00,-2.10906833e-01,-1.76986069e-01,-4.62493169e-01,9.91504992e-01,4.13664213e-01,5.53645953e-01,-1.12466261e+00,-1.00413924e-01,-4.87635859e-02 -contig-92000000,-1.09019842e+00,4.81620816e+00,-7.36897069e-02,-3.80379208e-01,-1.52598023e+00,6.47414974e-01,-3.70817334e-02,3.82465603e-01,6.74950561e-01,3.17970908e-01,3.87277249e-01,9.08007215e-01,-9.47263603e-01,8.05670253e-01,5.77381403e-01,1.18164596e+00,-8.33585713e-01,6.19300585e-01,-9.08150203e-01,-1.72206959e-02,7.66631433e-01,-3.44028358e-01,5.97814391e-01,-2.79332301e-01,3.68849064e-01 -contig-156000000,-6.14370816e-01,4.58600323e+00,1.94827950e-01,3.34501155e-01,-2.09867429e+00,2.18856270e+00,3.08286730e-02,-3.42404187e-01,1.19793354e-02,-1.38237075e+00,-4.76183810e-02,-5.42156965e-01,-3.23776125e-01,4.84720184e-02,-1.80102003e-01,-2.28538963e-01,-6.65838471e-01,-7.60489238e-01,1.35104751e-01,5.00429386e-01,-1.93293208e-01,1.65803927e-01,-3.14187684e-01,-8.91541208e-01,4.25182614e-01 -contig-1949000000,-3.26639480e+00,-1.37817138e+00,1.33490999e+00,9.99526006e-01,-5.85175622e-01,-1.74175615e+00,-1.64695649e+00,-4.81363732e-01,8.78077224e-01,4.09172124e-01,-3.29272447e-01,9.07745780e-02,1.15441372e-01,-2.53080203e-01,1.47317222e-02,7.84902302e-01,-5.55770584e-01,5.64627718e-01,7.17467867e-01,-2.24236014e-01,-8.79163683e-01,2.21811807e-01,-4.24044235e-01,3.45851531e-01,1.72956433e-01 -contig-4934000000,-4.57177474e+00,-5.42967029e+00,1.81214613e+00,-1.19403695e+00,3.68434970e-01,9.40037148e-02,1.38188702e-01,3.00644483e-01,6.05962216e-02,5.24498729e-02,2.11285003e-01,-3.84279641e-01,-1.20458214e-01,2.72040538e-01,3.64817954e-01,1.27324993e-01,-5.47383981e-01,-1.46984606e-01,2.31456842e-01,-5.90537412e-02,3.96324268e-01,2.27496726e-01,-1.88485798e-01,2.28959785e-01,-1.04658414e-02 -contig-3463000000,9.65686861e+00,-5.04985924e-01,-2.29298952e+00,3.54164788e-01,6.19601612e-01,6.22242752e-01,1.24897311e+00,-1.86599919e+00,6.27138840e-01,1.04636018e+00,-1.97230114e-01,-3.33193008e-01,7.47609358e-01,6.25798790e-01,-1.81708208e-01,-4.91152367e-02,1.21916458e+00,-2.20744612e-01,-3.73269312e-01,2.19465289e-01,8.83409020e-01,1.85923911e-01,-5.80515571e-01,-4.21457554e-01,5.43103387e-01 -contig-1916000000,1.09023573e+01,-9.48851412e-01,-1.22555218e+00,6.58655687e-01,-2.01990670e-01,4.71714150e-01,1.64748591e+00,-1.48960704e+00,-3.27047056e-01,-4.24176112e-01,-2.23283031e-01,-1.03473437e+00,-3.69151287e-01,-4.49609476e-02,-2.56059552e-01,1.03347227e+00,2.84951804e-01,-8.32795700e-02,5.02099596e-01,6.23055951e-01,5.47959976e-02,-3.02834944e-01,-2.17051641e-01,-4.11588330e-01,1.71241876e-01 -contig-4940000000,-7.82833300e+00,-5.05866119e+00,-3.23991084e+00,-1.00996977e+00,-5.24451898e-01,-3.61388147e-02,4.93532469e-01,1.00462745e+00,-3.40634910e-01,-1.32759450e-01,1.19648004e-01,-1.21410120e-01,1.96383763e-01,4.74902181e-01,1.37479624e-01,-2.02837048e-01,3.69586729e-02,-6.61467743e-02,-3.52103398e-01,-3.80000306e-02,1.63459531e-01,2.87972261e-02,1.38866003e-01,-9.32330611e-03,-1.16647243e-01 -contig-105000000,1.12827118e+01,-3.55387747e+00,2.28022331e+00,1.00786763e-01,-2.67088766e-01,-4.75495160e-01,2.11799495e+00,-9.47702696e-02,1.78029492e+00,1.11178586e+00,5.55147930e-01,-3.04669832e-01,-2.60834104e-02,3.79262869e-01,2.85569974e-01,5.64800548e-01,-3.58315030e-02,-1.06426636e+00,8.91738924e-01,-6.12336057e-01,4.93776865e-01,-1.48964736e-01,2.01284554e-01,4.09024364e-01,2.74350375e-02 -contig-220000000,-2.55121674e-01,5.01305568e+00,7.17704323e-02,9.79852141e-02,-6.33918107e-02,-6.48331950e-02,1.46121442e-01,4.31192791e-01,5.16174981e-01,-9.40729129e-02,9.65230686e-01,8.45133103e-02,-1.70109162e-01,5.74928830e-01,-3.88479408e-01,5.63274793e-01,-2.22130895e-01,-1.10530868e+00,6.69475494e-01,7.98834657e-01,-4.41526059e-01,-2.11901063e-01,-9.06965598e-01,6.71127158e-02,-8.01650360e-01 -contig-327000000,5.34095115e-01,4.34474420e+00,6.22668111e-01,-1.10859685e+00,7.83175232e-01,-1.73802649e+00,-3.83119343e-01,-1.42029086e-02,2.21823671e-01,-6.36681358e-01,2.07700167e-01,-5.89650841e-01,3.41319412e-01,-2.42941753e-01,8.59802342e-01,5.07354543e-01,7.91596624e-01,1.70187863e-01,5.79132042e-02,1.98124831e-01,3.23726136e-01,7.53137742e-01,-5.00437317e-01,-4.18746435e-01,-2.91202694e-01 -contig-4918000000,-7.34807282e+00,-2.79712023e+00,-4.07783993e+00,-2.51553152e-01,-6.31691238e-01,3.93169047e-01,3.77824291e-01,6.27515019e-01,-5.47528643e-02,1.22212284e-01,2.22306820e-02,-1.43585381e-01,-1.29561126e-01,2.34504618e-01,1.25866314e-01,-1.50506444e-01,1.39621023e-01,-1.10343608e-01,-3.54582422e-01,9.75950597e-02,1.56130285e-01,-1.41561848e-01,8.78492130e-02,-1.26548483e-01,7.13258221e-02 -contig-208000000,9.66664191e-02,4.76101953e+00,2.15629866e-01,-7.36352256e-01,1.22116596e+00,-9.05962444e-01,1.42924769e-01,1.23192478e-01,-5.40216243e-01,-1.36878540e+00,2.87578596e-01,6.42984080e-01,-5.51288821e-01,-4.41207675e-01,1.50806512e-01,1.15682752e+00,1.49716861e-01,-6.19752018e-01,-1.39179942e-01,-1.42671480e+00,-6.13417315e-01,-1.92762684e-01,1.50432443e-01,7.22259304e-01,1.06980167e+00 -contig-1207000000,1.09237898e+01,-1.55108906e+00,-4.11600615e-01,6.77010411e-01,2.93723634e-02,1.71548120e-01,6.63934014e-01,-1.90235138e+00,-1.26153693e+00,7.72399155e-01,4.22577292e-02,-1.70923664e+00,3.36093232e-01,7.07711842e-01,2.16253682e-01,3.20107844e-01,6.75095308e-01,7.26036787e-01,-8.39620602e-02,6.90697861e-01,1.69556287e-01,5.78763523e-01,1.32110403e-01,2.01123062e-01,3.32578046e-01 -contig-73000000,-3.52493824e+00,-8.83639138e+00,5.07674106e+00,-1.80134120e-01,-1.13486762e+00,2.21136439e+00,-2.23255991e-01,4.99361535e-01,-9.08901811e-01,1.54328436e+00,5.12512050e-01,-2.78002932e-01,2.73833454e-01,-5.28929556e-01,4.17438683e-01,-3.61604596e-01,5.85480883e-01,3.72184686e-03,4.44361217e-01,-8.46418267e-01,-4.43150883e-01,-5.30374401e-02,-4.54772648e-01,-7.51813237e-01,2.17414725e-01 -contig-4911000000,-6.46623513e+00,-2.99824059e+00,-2.38390103e+00,-8.65066133e-01,-3.53749209e-01,2.68671154e-01,5.71883535e-01,3.31876318e-01,1.20468884e-01,-2.28314779e-01,2.85432984e-01,-2.15440281e-01,1.51691022e-01,3.04135891e-02,-1.93429604e-02,-1.73409443e-01,-1.27879858e-01,4.94950927e-01,-4.79814863e-02,-8.88224738e-02,-3.24535768e-01,-5.59184400e-02,-2.96372204e-01,-7.49818644e-02,2.39920685e-01 -contig-1819000000,-3.19640249e+00,-1.33193574e+00,-1.02247108e-01,1.51153424e+00,-3.66998979e-02,2.88272834e-03,-1.04879814e+00,-1.84814438e+00,1.79369863e+00,-7.28745967e-01,3.17717564e-01,2.33370344e-01,7.85615132e-01,-3.45752826e-01,-4.04379829e-01,-6.24426906e-01,-5.15847701e-01,1.22495387e+00,1.80978254e-01,-7.32273417e-01,1.91048409e-01,-2.39007399e-01,1.28976080e-01,-5.54163337e-01,1.09055393e-01 -contig-4901000000,-3.10346394e+00,-5.54054125e+00,3.38100785e+00,-2.63417185e-01,1.73219062e-01,6.23351342e-01,-5.58499662e-01,2.86014046e-02,-9.90859622e-03,3.97392105e-01,9.32153030e-02,2.88764657e-01,7.60497238e-01,3.25410265e-01,-4.38591323e-01,-2.27574317e-01,-8.94722684e-01,6.08228341e-01,2.28714779e-01,-1.89451870e-01,-3.00095753e-01,3.70737392e-01,-1.81519443e-01,-5.15495782e-01,-9.26569870e-03 -contig-161000000,-5.94409834e-01,3.79933111e+00,1.36485012e+00,-5.51680982e-01,-5.15551485e-01,-3.10665105e-01,-5.50886280e-02,2.54867149e-03,1.46560455e+00,1.40623675e-01,5.68014078e-01,4.38084678e-02,-2.55946378e-01,4.42107611e-01,-4.58883775e-01,-3.18912461e-01,-1.23795842e+00,4.71237176e-01,-1.19386605e+00,6.92135954e-01,2.53301679e-02,1.30325588e+00,-6.76389752e-01,5.19642901e-01,1.12118062e+00 -contig-244000000,2.30720585e+00,-5.03264041e+00,9.94172895e+00,-6.45942585e-01,1.66787710e-01,1.60487487e+00,2.42992662e-01,1.82776813e+00,-1.56747477e+00,1.03117378e+00,-1.97524737e-01,8.62538020e-01,1.26787550e-02,-2.07999736e+00,5.73039377e-01,-1.10579759e+00,-6.91960517e-01,-1.73918445e+00,2.24471056e-02,5.52322686e-01,5.16232465e-02,-8.64542274e-02,7.70278472e-01,-3.04611825e-01,1.71839736e+00 -contig-4927000000,-7.74004245e+00,-2.60573750e+00,-4.74858964e+00,-2.73404592e-01,-6.84028020e-01,3.24592141e-01,7.20637312e-01,6.29674648e-01,-1.77557478e-01,1.38881625e-01,1.12938913e-01,-1.51566774e-01,5.84081873e-03,-2.03020437e-01,1.11021440e-01,-1.06409764e-01,-3.34916854e-02,8.64023166e-02,-4.35656744e-01,-9.47698548e-02,-7.90521720e-02,-9.39057548e-02,-1.09189366e-01,-1.22017601e-01,-4.56844467e-02 -contig-303000000,-5.06731870e-01,3.60793991e+00,1.40899131e+00,3.39991557e-01,1.50979567e+00,-1.55158897e+00,1.53717332e-01,-5.88718406e-01,-8.73806301e-01,-5.87567291e-01,1.93714997e-01,-3.20521640e-02,7.97248848e-01,-1.05291434e+00,6.46343378e-01,-9.80058980e-01,1.22569482e+00,9.47931556e-01,5.83982395e-01,-3.80988088e-01,1.11503461e+00,6.09481264e-02,4.08107839e-01,-5.83115581e-02,8.01999039e-01 -contig-444000000,2.58395905e+00,-2.31194983e+00,8.31523526e+00,2.17944025e-01,-3.11758557e+00,-5.93037163e-01,-3.52694606e-02,-7.65976859e-01,-5.81369143e-01,1.25135717e+00,-5.34178316e-01,-1.29926310e-01,2.12358555e-02,-5.05478245e-01,1.42504886e-01,-2.82738488e-02,2.96399134e-01,-9.48398625e-02,1.06776992e+00,-4.09566489e-01,4.48849941e-02,2.29003602e-01,1.05261112e-01,8.95942252e-01,-2.59759136e-01 -contig-31000000,-3.91172171e+00,-6.04307497e+00,1.89319168e+00,6.10900438e-02,2.97123013e-01,6.73648403e-02,8.33171004e-02,-2.01123929e-01,3.71515573e-01,-1.77802068e-02,-4.94245929e-01,-8.40699795e-02,-3.54162417e-01,5.47544735e-02,1.49204606e-01,4.18638739e-01,-3.33931410e-01,2.16598497e-01,7.20580290e-02,3.15902275e-01,2.01613211e-01,-1.13351100e-01,-1.23995917e-01,1.36311322e-01,7.69641098e-03 -contig-4905000000,-5.93853885e+00,-1.89519931e+00,-2.71425990e+00,-1.51734211e-01,9.70719510e-02,9.57880011e-02,-1.50942118e-01,1.27012035e-01,-2.95570933e-01,2.38160333e-01,1.89061255e-01,-7.37755061e-02,-1.11688397e-01,9.82372428e-02,-1.29843737e-01,4.27913172e-01,-1.02417092e-01,-2.77497904e-01,-2.60944528e-01,1.22946707e-01,3.32405864e-02,-1.38668469e-01,4.00205420e-02,9.78831005e-02,1.57788080e-02 -contig-129000000,-5.64317289e-01,3.98628102e+00,5.53436949e-01,-2.37555352e-01,3.57895098e-01,-1.29778508e-01,9.58787846e-01,2.82703263e-02,5.72226566e-01,-9.28173356e-01,-5.16491153e-02,-7.98147885e-01,-8.53332941e-01,-6.76069946e-01,1.31313527e-01,-5.93552154e-01,-2.95575641e-01,4.81765922e-01,7.26300798e-01,3.11422658e-01,-5.58022360e-01,3.31475093e-01,-2.47692621e-01,-4.05790404e-01,-2.52441192e-01 -contig-4923000000,-7.64668222e+00,-4.62343635e+00,-2.95681489e+00,-1.09495514e+00,-5.59560128e-01,2.68151628e-02,1.97491269e-01,9.07733602e-01,-3.79093797e-01,2.64964256e-01,1.70009184e-01,-4.69764068e-01,3.87838508e-01,2.63978183e-01,1.63826516e-01,3.41215280e-02,8.23724476e-03,2.99807212e-01,-5.87953292e-01,-3.54308325e-01,-3.06010416e-01,-2.26983804e-01,-1.54236816e-01,1.56740352e-01,-1.17939847e-01 -contig-304000000,6.83348463e-01,4.68871315e+00,1.58786607e-01,-7.27909618e-01,4.16729987e-02,-4.17441819e-01,-1.21575086e+00,1.00515990e+00,-1.14255845e-01,3.01949008e-01,8.41257983e-01,3.36894738e-01,3.76407666e-01,5.56290768e-01,7.33648116e-02,7.32232982e-01,-5.99846263e-01,2.30726905e-01,6.49493408e-01,2.45926436e-03,-1.35524233e+00,-2.16974761e-01,-7.59053913e-02,-2.07120974e-01,-1.02587818e+00 -contig-103000000,1.33954393e-01,2.91882883e-02,4.34577965e+00,-1.10944469e+00,3.38486812e-01,-9.14650201e-01,6.70116604e-01,-2.57538867e-01,-2.95350499e-01,-1.74980590e+00,-3.85220158e-02,8.28081337e-01,4.90471611e-03,6.35185453e-01,7.39293702e-01,-5.13952288e-01,2.91160113e-01,1.32835302e-01,-5.07341071e-01,5.34313216e-03,-2.13290298e-01,5.33538839e-01,-7.27614377e-02,-2.43213264e-01,5.76450701e-02 -contig-205000000,1.17076070e+00,-2.53202657e+00,8.33372953e+00,-1.99364646e+00,-3.06652469e-01,8.81429617e-01,2.86097822e-01,2.90159460e-01,1.95707622e-01,-3.31961578e+00,1.67081923e+00,-1.59515405e+00,-1.45985197e+00,-3.10158135e+00,-6.85267530e-01,8.51359211e-01,-5.96268699e-01,-1.06168819e+00,-8.04764290e-01,-9.22057087e-01,1.55944487e+00,1.19758518e+00,-3.43143171e-01,4.60235155e-01,3.58830222e-01 -contig-39000000,-4.90566040e+00,-2.27893882e+00,-1.34207601e+00,1.43034554e-01,1.29762276e-01,2.86498663e-02,-7.04788913e-01,-4.31101609e-01,2.88309533e-01,2.04410328e-01,5.13980076e-03,-2.93817702e-01,-2.34118646e-01,-1.54429731e-01,-1.33537367e-01,2.71413115e-01,1.75996081e-01,3.60286568e-01,-1.01849321e-01,-1.71816503e-01,-1.02532812e-01,-1.15579172e-01,-4.83492880e-01,-2.29836997e-01,-2.80004315e-01 -contig-271000000,7.41520223e-02,4.74115103e+00,5.10176015e-01,-2.32512025e-01,1.12756444e+00,-8.12397826e-01,-4.06655491e-01,4.99398567e-01,-1.76982785e-01,7.33653076e-02,1.04476208e+00,7.85256391e-02,7.91958145e-01,-1.73730185e-01,-6.57191130e-01,-2.85162583e-01,7.86397290e-02,1.26678872e-01,1.03003982e+00,8.33859612e-01,1.49080271e-02,9.05255397e-02,5.09098621e-01,-1.09100879e+00,-7.43666079e-01 -contig-1421000000,-3.28537322e+00,-2.77861873e+00,1.13723620e+00,-1.18530164e+00,1.68595860e+00,-1.05679130e+00,-4.20246865e-01,-3.65208712e-01,-2.01414193e-01,4.70871344e-01,5.47346758e-01,3.10726378e-01,7.43885795e-04,-1.87630315e-02,-2.94185532e-01,4.93754364e-01,8.34289478e-01,-2.34395934e-01,4.43553549e-01,-6.49378385e-02,-2.43304686e-01,-2.15853202e-02,-1.73408746e-01,1.80783497e-01,-2.35794846e-01 -contig-168000000,4.36986099e+00,-3.88733735e+00,3.26834914e+00,4.96775770e+00,3.25395495e+00,-8.56745195e-01,-9.46643081e-01,2.21640411e+00,3.39745042e-01,-2.14215893e-01,1.00380326e+00,-3.81295722e-01,6.90059103e-01,2.15908135e-01,-9.13744001e-01,-3.33140659e-01,-6.21393214e-01,2.02987663e+00,-5.55939253e-01,2.45054532e-01,1.00802228e+00,6.13316920e-02,4.65146940e-01,8.58067856e-01,-1.53919039e-01 -contig-289000000,4.37514033e-01,3.46999375e+00,1.53476720e+00,-5.08032880e-01,1.73078022e+00,-1.61375151e+00,5.97605524e-01,-5.06026966e-01,-7.67680775e-01,-2.80232764e-01,-4.89410967e-01,-3.66951101e-01,3.50489698e-01,-1.18593536e+00,1.20006987e-01,6.39375857e-01,-7.27209556e-02,-2.71936689e-02,-1.07740913e+00,-8.23229966e-01,-6.67478810e-01,-5.99203873e-02,1.78952900e+00,-5.19836507e-02,1.22852995e+00 -contig-154000000,-4.59631508e+00,-1.86719249e+00,-1.36641101e+00,4.89439651e-01,3.43334556e-01,1.27313624e-02,-9.92024326e-01,-4.08288886e-01,9.92495860e-02,2.96553469e-01,-4.45828178e-01,-7.84171040e-01,-2.75517696e-01,3.53781073e-01,1.59524308e-01,5.43279094e-01,2.27761136e-01,-7.50305918e-01,-3.31350597e-01,1.21701154e-01,-3.47537505e-01,-1.15908427e-01,9.22094297e-02,3.08033953e-01,-1.72423570e-02 -contig-298000000,-4.96884994e-01,5.84105269e+00,-2.85220638e-01,4.39226431e-01,-1.21612238e+00,8.42664311e-01,-1.40816893e+00,7.00822967e-01,1.01916642e+00,3.03752655e-03,1.04525208e+00,-8.12731813e-01,5.10770447e-01,4.49366494e-01,4.58546868e-01,-1.82665441e-01,-1.29120066e-02,-4.22081180e-01,6.75927115e-01,-5.54603234e-01,6.67192976e-02,-6.05817053e-01,2.19846474e-01,-7.20857330e-01,1.20798502e+00 -contig-189000000,3.62697048e-01,3.93684221e+00,6.42417689e-01,-9.12222166e-01,9.21475381e-01,-9.35832310e-01,1.07340343e+00,-6.70162907e-01,-1.12868220e+00,2.46865395e-01,-4.32614218e-01,-4.56135641e-01,3.80788775e-01,-7.75432264e-01,3.34532132e-01,-1.52576100e+00,-1.14066738e+00,1.84074449e-02,4.41596816e-01,6.64335608e-01,-7.06858122e-01,1.27004205e-01,-7.58881599e-01,-2.30238140e-01,-4.25668228e-01 -contig-221000000,-3.24639605e+00,-2.39382111e+00,1.16219010e-01,7.86938835e-01,4.75045067e-01,-5.00816566e-01,-1.84682392e+00,-3.78083763e-01,3.57254888e-01,1.02688770e+00,-1.28341623e+00,-2.86164899e-01,1.92962232e-01,1.01972558e-01,3.46467944e-01,-6.37076122e-01,-1.32954243e-01,-6.55986567e-01,-2.08392243e-01,4.00663396e-01,7.17140811e-01,1.59231612e-02,-1.83188485e-02,-3.89836755e-01,5.34230925e-01 -contig-32000000,-3.60061758e+00,-4.40328395e+00,2.43169666e+00,6.59068936e-01,-5.96794186e-01,-9.89366064e-01,2.25102751e-02,-9.97552707e-01,-4.77808597e-01,-1.99657278e-01,-5.61213920e-01,5.74929760e-01,-1.52801767e-01,-2.10126338e-01,-4.18105757e-01,3.27555368e-01,-7.18058051e-01,-7.50097056e-02,1.39496474e+00,1.71737752e-01,-1.68120080e-02,4.49559829e-01,5.45944069e-01,6.84974341e-01,1.77073191e-01 -contig-266000000,5.94698313e-01,2.77237951e+00,2.32441127e+00,-6.37105891e-01,-4.12215882e-01,6.97816844e-01,-2.26070395e-01,3.27013061e-01,3.98485731e-01,-7.68490364e-01,-1.06516228e-01,-5.12118728e-01,3.11881347e-01,-2.45636802e-02,-1.49210454e+00,7.15745611e-01,-5.74592161e-01,-5.41399850e-01,-2.67139994e-01,2.39453506e-01,-2.24050459e-01,2.86474899e-01,2.13776858e-01,3.71233723e-01,-6.03104111e-01 -contig-267000000,2.15452623e+00,-4.34852918e+00,1.02877054e+01,-4.81928700e-01,-1.14289588e+00,1.93389769e+00,-4.57523082e-01,9.73323108e-01,-2.65374964e+00,5.66493345e-01,7.33397694e-01,1.72020115e+00,9.41756487e-01,-1.22045920e+00,1.07267570e+00,7.96255702e-02,-1.21186881e-01,2.10451988e-01,-5.62264304e-01,1.54926198e+00,1.02642907e+00,7.06742266e-01,-9.60390368e-01,-1.77405337e+00,1.55576160e+00 -contig-473000000,-5.52423338e+00,-5.33818677e+00,3.49715479e-01,-8.21902119e-01,-2.86083799e-01,9.93606286e-02,-7.26121016e-01,3.24793628e-01,2.74250077e-01,5.16010989e-01,9.30835949e-02,-1.16650016e-01,4.33486099e-02,2.93854138e-01,5.94521855e-02,-9.21311935e-02,-8.46223623e-02,4.61371978e-01,-5.86613761e-01,6.42157823e-02,-3.89539576e-01,-6.90442937e-02,-4.72257827e-01,-1.76294251e-01,-3.72616401e-02 -contig-94000000,-5.25556765e+00,-9.47329423e-02,-3.01520231e+00,4.43049958e-01,2.36244714e-01,-7.30978600e-02,-6.34244003e-01,7.29153092e-03,4.01353644e-01,7.69449100e-01,3.05022003e-01,4.88418495e-01,-4.34550464e-01,-8.72006952e-02,1.00430991e-01,1.17375508e-01,9.28828057e-02,-3.12072078e-01,-3.17299849e-01,2.41392519e-01,-1.61055644e-01,1.65534281e-01,3.43219408e-02,-1.41526656e-01,7.71204008e-02 -contig-64000000,8.66341163e-01,-3.39008197e+00,7.34442276e+00,-9.21596368e-01,-1.69293141e+00,1.56374165e+00,1.09564997e+00,1.00334557e+00,4.80948153e-01,6.58038024e-01,-5.30739773e-01,-1.10052446e-01,6.71136792e-01,-3.63843776e-01,-7.74305076e-01,-5.87670487e-01,1.81393080e-01,5.16645648e-01,1.89817929e-01,-8.03569293e-01,-5.32759352e-01,-8.31711535e-01,-1.55270492e-01,3.30398125e-01,-3.33342329e-01 -contig-57000000,-3.09980414e+00,-4.90946961e+00,1.99922253e+00,2.35595934e-01,-1.68244026e-01,4.29995220e-01,-3.44776341e-01,-2.33778782e-01,7.90849701e-01,7.00988385e-01,-2.79387114e-01,-3.46684695e-01,1.78144374e-01,-4.29983731e-01,-8.07104327e-01,-2.18107781e-02,1.55805483e-01,-6.55429574e-01,7.16647142e-01,-3.96099759e-01,-1.37095029e-01,4.43185244e-01,4.05086052e-02,4.42463400e-01,-3.70349490e-01 -contig-98000000,-8.05062265e-01,3.39919589e+00,7.42996325e-01,-5.14667271e-01,1.42967464e+00,-1.47242512e+00,1.07021152e+00,4.85494332e-01,-4.75830818e-01,-6.13780795e-01,2.04914586e-01,5.34096072e-01,7.21787681e-01,-6.21098303e-01,-1.80771121e+00,4.07954284e-01,6.04909501e-01,-2.88397774e-01,-8.89399322e-01,2.16758811e-01,3.60464007e-01,-4.43507016e-01,-1.43165764e-02,-4.21710412e-01,3.54015922e-01 -contig-249000000,1.15199799e+01,-5.36798839e+00,2.37479101e+00,-2.37892952e-01,3.26417356e-01,1.14855574e+00,1.17260750e+00,-7.94217309e-01,2.66026373e-01,1.38448582e+00,1.00411817e+00,-5.42238614e-01,4.41001832e-01,-3.08746757e-01,1.81472255e-01,-5.75652254e-03,-2.03311808e-01,-1.04347676e-01,3.22834545e-03,-5.43760683e-01,-2.05305983e-01,-9.54359132e-02,-1.99999721e-03,-2.72341618e-01,-1.34881709e-01 -contig-467000000,-4.78677531e+00,-2.62715520e+00,-5.79758126e-01,-5.01521861e-01,3.21474317e-01,-2.81246183e-01,-9.59314968e-01,-1.23558846e-01,3.54105825e-02,1.01323107e-01,-3.52493932e-03,-2.83301664e-01,2.82104280e-01,6.87237590e-02,-1.59831628e-01,-1.80687834e-01,1.37446512e-01,-2.17735417e-01,-1.95666001e-01,-5.11319770e-01,-9.23422099e-03,-6.62489584e-02,-1.91039982e-02,-3.45916442e-01,1.55060411e-01 -contig-162000000,-4.69913707e-01,3.16115223e+00,2.00842151e+00,1.54910219e-01,-8.31000803e-01,6.80472230e-01,1.26432200e+00,-4.09578897e-01,8.96749683e-01,-1.69236373e+00,1.38665757e+00,-5.86828332e-01,-1.24620795e+00,-4.85671936e-01,4.40686722e-01,-1.11275908e+00,-8.98215713e-01,-9.55436248e-01,7.76822001e-02,-9.80611133e-02,-2.18512044e-01,6.55808158e-01,-1.19172474e+00,1.48598637e-01,-1.93843383e-01 -contig-4902000000,-4.41297269e+00,4.16266184e-01,-2.72496431e+00,7.75250057e-01,8.82636606e-01,-2.57547703e-01,3.56935234e-01,-4.21514806e-01,-1.49503564e-01,-1.96809259e-01,3.00229911e-02,6.97224507e-01,7.49890356e-01,-5.59313507e-01,-5.25420343e-02,1.04887828e+00,7.17984709e-01,-5.20736509e-01,4.66715367e-01,5.03805871e-01,-3.44569536e-01,-5.79766853e-02,-3.57086219e-01,-6.03457117e-02,6.66252634e-02 -contig-76000000,-1.37761983e+00,4.21569412e+00,-1.41783864e-01,-4.54521886e-01,-1.67976120e+00,5.27158552e-01,8.07025745e-01,3.14971244e-01,4.86743383e-01,-1.05334348e+00,5.28677553e-01,1.11402310e+00,9.22932830e-01,3.31336359e-01,-1.16071593e+00,-2.35217076e-01,5.57428976e-01,-9.47466876e-01,-5.29244174e-01,3.52222100e-01,-4.81880765e-01,-2.27642658e-01,-9.84611292e-02,3.19039779e-01,-3.28966981e-02 -contig-95000000,-3.31938976e+00,-4.74339950e+00,2.26767255e+00,1.10884533e-02,8.58959614e-01,2.87369694e-03,-9.53610465e-01,-2.52758934e-01,-1.38676239e-02,-2.33511069e-01,8.90171942e-01,-8.59875371e-03,-1.33827224e-01,2.31021193e-01,6.94888750e-02,-1.57299256e-01,-1.35524410e-01,-1.88161516e-01,3.96243716e-01,-1.75654016e-01,1.69975119e-01,5.51471787e-01,3.26380988e-01,5.39021588e-01,-1.85492926e-01 -contig-125000000,-3.53147427e+00,-5.08820707e+00,2.14624344e+00,-6.25201479e-01,1.02222324e-01,-2.73604943e-01,4.02133652e-01,-5.14816793e-01,5.36450522e-01,-1.21986716e-01,-6.49677990e-01,1.33538722e-02,5.74813116e-01,-6.80175920e-01,-4.27560069e-02,4.32213196e-01,-6.36452889e-01,1.64492473e-01,5.35365674e-01,-7.48558465e-02,2.62994771e-01,8.81748332e-02,2.94650658e-01,3.12387089e-01,-2.26651704e-01 -contig-124000000,-3.91458033e+00,-1.40641661e+00,-3.69125982e-01,-1.15809546e-01,7.14988452e-01,-1.49170000e-01,4.29450621e-02,-3.49702809e-01,5.94436101e-01,-1.50878544e-01,-6.89778699e-01,-2.68015121e-01,-4.81807951e-01,-5.06774276e-03,-1.18168042e-01,-2.34211075e-01,3.96989299e-01,1.21109691e-01,4.16573749e-01,-1.22355344e-01,-1.04915212e-01,3.56402697e-01,-1.04907387e-01,-4.43111039e-01,1.50176922e-01 -contig-980000000,1.00525175e+01,-2.54317310e+00,1.44184042e+00,-3.66648689e-01,2.79601627e-01,1.12118327e+00,5.90248835e-01,-1.46434911e+00,-6.68026187e-01,1.84624127e-01,1.16421183e+00,-5.49587168e-01,-5.12129598e-01,1.39726502e-01,-1.39702886e+00,-2.71108531e-01,5.43641193e-01,1.97395718e-01,-6.18171385e-01,-5.94081586e-01,2.92119807e-01,2.02111117e-01,3.29938588e-01,2.88269743e-01,2.74078485e-01 -contig-148000000,-4.09143235e+00,2.15538916e+00,-3.99695452e+00,1.96692316e+00,7.49896658e-01,7.06356561e-01,6.53422987e-03,-1.06412309e+00,-4.27978785e-01,2.30157349e-01,-6.26893553e-01,8.04964542e-01,-1.26594444e+00,-4.22797709e-01,-1.06364504e-02,1.40735898e-01,6.89221960e-01,-7.32310886e-01,1.62013042e-01,5.47450670e-01,3.17496907e-01,-2.72474740e-01,5.08566965e-01,-3.89855961e-01,1.63359698e-01 -contig-169000000,-8.54200448e-01,4.75721715e+00,3.63683571e-01,7.52717795e-01,-6.27947664e-02,2.37222137e-02,-3.64587942e-01,7.96684465e-02,-5.50851124e-01,1.08076659e-01,2.86905775e-01,3.87107782e-01,8.88573230e-01,1.00439662e+00,-9.46386467e-01,-1.86126827e-01,1.32118520e+00,2.88830101e-02,5.95564399e-02,-7.31309268e-01,-2.89277628e-01,4.28743960e-01,-4.41575363e-02,-9.25585978e-01,-4.95636145e-01 -contig-13000000,1.28920168e+01,-1.74483640e+00,-4.51269535e+00,1.12753499e-01,-3.57941658e-01,1.86300386e-01,1.26746875e-01,-1.28325410e-01,7.17497232e-01,1.45592727e-01,-1.05575213e-01,-4.59753638e-01,-7.68412009e-02,-6.65430908e-01,1.57856861e-01,-2.39990056e-01,3.44018028e-01,7.09577939e-01,-3.31455593e-02,2.00344831e-02,-5.95299354e-02,-2.19864832e-01,-5.11134411e-01,3.23367322e-01,2.41691683e-01 -contig-2461000000,1.13668432e+01,-3.40469531e+00,1.07583866e-01,-7.75978875e-01,4.17243980e-01,-3.55071288e-01,3.17889528e+00,-4.77062642e-01,2.14047419e+00,1.90145437e+00,4.10398117e-01,-1.63150728e-01,3.25067906e-01,-7.85444966e-01,7.51365474e-01,1.15050697e-01,4.06747080e-01,-7.70646308e-01,7.22170328e-01,-1.83443939e-01,4.35332037e-01,4.10865119e-02,2.00945566e-01,1.17517869e-01,-2.78952434e-01 -contig-118000000,1.32231759e+01,-2.28996503e+00,-5.00196661e+00,-5.17993920e-01,-1.31063757e-01,-3.51011011e-02,-1.16162470e+00,2.77035016e-01,-4.01274478e-01,-4.11545673e-01,-4.65734552e-01,1.16623674e-01,-4.08127482e-02,-2.43193479e-01,-8.34079590e-02,-4.52434975e-02,-1.03174265e-01,3.85773139e-02,9.70138068e-02,-5.20937252e-02,-1.48120574e-01,-4.88140945e-02,-9.92492036e-02,9.84310786e-02,-3.45774308e-02 -contig-280000000,1.25303490e-01,2.73123170e+00,2.16349332e+00,-1.08949066e-01,4.37332865e-01,-1.57318404e-01,1.85495228e-01,-9.42646504e-01,3.42976451e-01,-1.60194023e+00,5.85369483e-01,4.08186694e-01,1.10052575e-01,6.65837958e-02,-2.66365814e-01,1.17819864e-01,-1.09642190e+00,-5.57464743e-01,6.27563905e-01,4.42339158e-01,-8.43543599e-01,-3.36730200e-01,-2.93266142e-01,1.96681535e-01,6.17327634e-01 -contig-54000000,-5.61190647e+00,-1.77295398e+00,-3.30747368e+00,8.52099188e-03,2.80783214e-01,2.34264976e-01,-2.68564843e-01,-1.85837480e-01,-3.76634923e-01,4.54322865e-01,-7.90810368e-02,-1.72511017e-02,5.70299696e-01,4.83954947e-02,-1.80377478e-01,9.93089029e-02,1.17968899e-01,-2.81458678e-01,9.51003168e-03,1.58868970e-01,3.28965317e-01,4.67446322e-01,5.24332915e-01,7.19938795e-04,-1.21920532e-01 -contig-16000000,-4.77736648e+00,-6.10736069e+00,1.16593773e+00,-1.70362994e-02,2.75361993e-01,1.00267860e-01,-2.51017328e-02,-1.19186370e-01,-1.88422010e-01,-5.02867903e-01,-1.84659153e-01,3.02537803e-01,3.13327766e-01,2.51273065e-01,-1.01373402e-01,2.87824763e-01,-5.36280005e-01,4.03837527e-01,-4.22999733e-01,2.48571359e-02,-1.18791371e-01,8.00201771e-02,-1.48959165e-01,-2.57461851e-01,5.38920136e-02 -contig-10000000,-5.85346325e+00,-6.50368078e+00,-3.19607910e-01,-8.63548043e-01,-2.62060441e-01,-1.19724215e-01,8.27025162e-01,6.10093378e-01,2.74681438e-01,-3.92538366e-02,-2.31659219e-01,-1.92312389e-01,1.94574613e-01,5.54024588e-02,7.17140735e-02,1.82963638e-01,-7.43688542e-01,1.85443017e-01,-8.32909728e-02,-8.91755444e-02,2.43611745e-01,2.22136211e-01,-1.68807277e-01,3.31280495e-01,-1.04574277e-03 -contig-288000000,5.05490185e+00,-3.87595967e+00,5.48770978e+00,4.61923618e+00,1.46733218e+00,1.65666687e+00,-2.52003982e-01,1.69691112e+00,-4.38568656e-01,-5.57545250e-01,-2.13292491e-01,-3.03980329e-01,7.80735071e-01,-1.41940085e-01,-1.06652581e+00,-1.21258846e+00,6.66417209e-02,5.08221004e-01,3.12012770e-01,-4.60820581e-01,1.13929626e+00,-1.10375537e-02,7.78616757e-02,8.43280682e-01,-1.01835402e+00 -contig-813000000,-3.25536244e+00,2.08794911e-01,-1.54679199e+00,1.84158572e+00,7.51661607e-01,-5.35640275e-01,-1.56606027e+00,-1.03062333e+00,1.13390853e+00,4.54320607e-01,-1.03057374e+00,1.03519013e+00,6.42119427e-02,-5.23195278e-01,-5.30002221e-01,1.43476322e-01,5.45989512e-01,-7.03107643e-02,-4.22957561e-01,-4.88446415e-02,-1.27127843e+00,4.53926904e-02,-2.83258892e-01,-2.68028534e-01,3.87095317e-01 -contig-4511000000,1.09238868e+01,-2.45900676e+00,-2.10059013e+00,-6.02209834e-01,9.51201504e-01,8.81544239e-01,1.68715483e+00,-1.32400312e+00,-1.18239786e-01,6.01743929e-01,3.92959669e-01,-1.01612206e+00,4.53551524e-01,1.98241690e-01,3.38325443e-01,4.02725191e-01,3.05025517e-01,6.55242297e-02,-4.93558267e-01,8.17670881e-01,5.13192369e-01,3.19312075e-01,-3.85305914e-01,1.12337188e-01,5.24383663e-01 -contig-4000000,1.35892599e+01,-1.53198175e+00,-6.83035243e+00,-1.68630559e-01,-9.18608770e-02,-1.13869532e-01,-8.72800840e-01,9.47618661e-01,-2.61166485e-01,-6.18017398e-01,-8.30785184e-01,4.63402409e-01,2.05216841e-01,-4.93209339e-01,-1.10281570e-01,5.29114560e-03,1.33388387e-01,1.99928655e-01,3.35832884e-01,7.85500681e-02,-1.88690265e-02,3.19482590e-02,1.29425480e-01,-1.62967188e-01,6.05444339e-02 -contig-4939000000,-8.09974653e+00,-2.14435587e+00,-5.83982843e+00,-3.73946369e-02,-8.31457152e-01,5.77038323e-01,1.36039228e+00,7.84969910e-01,-2.61630789e-01,8.58659982e-02,2.78259221e-01,2.22612920e-01,-1.94521805e-01,-1.23728001e-01,3.38827530e-02,-1.14214119e-01,-1.45717717e-01,-1.36608263e-01,-6.64818473e-02,6.02828527e-02,3.02568195e-01,2.82619775e-02,1.97175475e-01,3.65582504e-02,-9.52574769e-03 -contig-4936000000,-6.78501844e+00,-1.52540477e+00,-4.54691527e+00,3.42681223e-01,-2.94162112e-01,7.16354875e-01,9.94861603e-01,2.13980201e-01,-6.81597519e-01,-1.73436682e-01,1.80830890e-01,-1.98410312e-02,-3.46602619e-01,-4.29294390e-02,1.45082795e-02,2.22293767e-01,2.32612740e-02,-5.98127196e-01,2.05613887e-01,5.09437791e-01,2.95242339e-01,2.12048635e-01,3.09718084e-01,4.23853188e-02,-5.47329427e-02 -contig-4926000000,1.28455458e+01,-1.82254024e+00,-5.01323157e+00,-4.34203732e-01,-1.11669865e-01,-3.10184111e-01,-4.34194378e-01,7.71867731e-01,-6.68910308e-02,-4.36922376e-01,-3.43266161e-01,-5.80717303e-03,3.08421335e-01,1.43136085e-01,-9.10166416e-02,2.81656573e-01,-4.66704399e-01,-1.61313906e-01,3.13487046e-01,-6.34866688e-02,4.18535219e-01,2.07364418e-01,2.67559121e-01,-1.14666662e-01,1.59224026e-01 -contig-44000000,-5.90769830e+00,-7.97232686e-01,-4.20609096e+00,6.74314494e-01,1.72941753e-01,1.66540687e-01,4.02050334e-01,2.33170301e-02,-1.32572250e-01,2.50950381e-01,1.26265328e-01,1.77074080e-01,-3.30293010e-01,-1.17808343e-01,-1.28797712e-01,1.61995350e-01,2.48008297e-01,2.46928075e-02,3.92068807e-01,-9.33682288e-02,2.37538019e-01,1.81737039e-01,9.12168022e-02,2.47436519e-03,-2.72483850e-02 -contig-211000000,8.68433107e-01,6.54287549e-01,4.01266627e+00,-9.49325845e-01,-9.80605765e-02,-4.97519278e-02,-5.45666421e-02,-6.00843201e-01,-7.54583410e-01,-2.03005176e-01,-1.03157406e+00,6.76311059e-01,-3.84066078e-01,7.57014286e-01,-1.56369452e-04,-3.80587247e-01,1.18248287e+00,1.91706843e-01,-1.59154179e-01,-3.54200033e-01,-4.65267981e-01,9.54085262e-01,1.88649290e-01,7.80644073e-01,-6.08763324e-02 -contig-30000000,-5.66499128e+00,-6.84562144e+00,2.23042560e-01,-9.57129648e-01,-3.15905791e-02,-1.47126715e-01,8.60444262e-01,5.22115948e-01,1.35878765e-01,-2.58953362e-01,-8.18867884e-02,-9.02461027e-02,2.54892634e-01,1.68477716e-01,2.18849031e-01,2.45964914e-01,-6.41263291e-01,2.47830297e-01,1.29845657e-01,9.50584356e-02,2.49879561e-01,-4.19835257e-02,-7.65978858e-03,1.79597962e-01,-4.39541486e-02 -contig-203000000,-2.13029756e-01,5.60763523e+00,-5.17096280e-01,-5.57050690e-01,8.49148708e-01,-8.90071082e-01,-6.32597909e-01,1.06430372e+00,-5.69338362e-01,1.07746818e+00,1.28592833e+00,-5.45036471e-01,1.33297568e-01,-1.82352971e-01,1.00912561e-01,-3.02840526e-01,8.84452199e-02,-6.52779506e-01,-4.60522023e-01,-3.95115017e-02,-2.01031096e+00,1.10564746e+00,7.35745443e-01,-3.05572814e-01,6.81449296e-02 -contig-78000000,3.51776024e-01,-3.46392759e+00,7.52650010e+00,-1.02985623e+00,-4.92464363e-01,1.22125684e+00,1.29230028e-01,7.56891936e-01,-1.46856103e+00,3.20200032e-01,-2.86598687e-01,1.58066773e-01,6.81126078e-01,5.59818748e-01,-8.64667707e-02,-5.80671417e-01,-5.22695921e-01,6.27152845e-01,-7.25469631e-01,2.76588180e-01,-2.12529303e-01,-1.12975292e+00,-2.62893662e-01,4.88245977e-02,5.63546356e-01 -contig-219000000,-2.56804930e-01,3.65532255e+00,1.14062212e+00,1.09650240e-02,6.67396833e-01,-4.32306118e-01,3.43405983e-01,8.54951972e-02,3.62112719e-01,2.07765771e+00,-1.28908044e+00,3.51628926e-01,-1.41588919e+00,-2.70536867e-01,-1.30740378e+00,4.67246637e-01,-7.05430388e-01,2.32380171e-01,-4.74296164e-01,-2.37964781e-01,1.49050198e-01,8.94951064e-02,-1.35169644e+00,-1.45025692e+00,-5.47152815e-01 -contig-209000000,3.37313520e+00,-4.04108724e+00,9.30055958e+00,1.46738747e+00,-3.69652142e+00,5.05939954e-01,5.03791418e-02,9.10851591e-01,-1.21532155e+00,-1.49171719e-01,-8.05430950e-03,-3.02177182e-02,-6.74187063e-01,-8.29240720e-02,-4.75727719e-02,3.90794798e-02,4.16282886e-01,1.89756664e-01,2.39256429e+00,6.12951168e-01,-9.93236900e-01,-6.03351924e-01,7.77765368e-01,-4.49761518e-01,3.65052024e-01 -contig-292000000,1.08874300e+01,-3.24741284e+00,-7.99530383e-02,-4.00316570e-01,-1.74546659e-01,1.05328317e+00,-5.59927814e-02,-4.80350257e-01,1.40476350e-01,2.06538324e-01,5.63346213e-01,-5.40067906e-01,-2.62457292e-01,8.26575780e-01,-1.42507675e-01,6.39966730e-01,1.20535868e+00,-4.85833462e-01,4.19676677e-02,6.90003960e-02,-5.07081637e-01,1.49163942e-01,3.94290184e-01,-6.67254750e-02,-1.29918719e-01 -contig-174000000,-3.62826289e-01,4.38569109e+00,4.96293420e-01,-1.83288681e-01,3.45872885e-01,-2.18479876e-01,5.01799344e-01,1.47270870e-01,4.45987325e-02,-9.33821898e-01,8.10588919e-01,6.71169792e-01,9.39288144e-02,8.30504115e-01,-4.78365243e-01,-3.88791070e-01,9.57721756e-01,-2.08242061e-01,-7.84767849e-02,2.49482850e-01,1.23773374e+00,-5.59621567e-01,1.69367209e-01,9.23681702e-03,-2.39472095e-01 -contig-316000000,8.83627569e-01,7.90661972e-01,4.67427009e+00,-8.24330596e-02,1.14677291e+00,-1.17950487e+00,3.47659942e-01,-3.91163641e-01,-1.26869337e-01,-1.53143836e+00,-3.34755039e-02,-3.64101850e-01,1.67748147e+00,-6.46804591e-01,1.24948667e-01,7.35894844e-01,-7.20256864e-01,-2.90077880e-02,-7.86438995e-01,-7.79377320e-02,5.32986842e-01,4.91463394e-01,-4.57959321e-01,1.23796548e-01,1.24276547e+00 -contig-202000000,-6.28662484e-02,3.14748852e+00,1.39899662e+00,-1.18363865e+00,6.46055741e-01,-4.38362390e-01,-1.01767320e+00,5.54797077e-01,-5.12712867e-01,-1.25276405e+00,-1.56040304e-01,6.83040682e-01,-1.64922932e-01,5.76344056e-01,-5.90262139e-02,3.42503152e-01,9.87305573e-02,5.26998439e-01,-5.70599660e-01,-1.81316087e-01,7.36813319e-01,4.73100162e-01,3.48773634e-01,6.83627438e-01,8.90158425e-02 -contig-293000000,3.19012826e-01,6.06378558e-01,4.95053878e+00,-7.82072884e-01,1.75290644e+00,-6.63089248e-01,1.50736598e-01,-5.67129189e-01,-5.20745446e-01,-1.03808103e+00,5.04628258e-01,-6.14689937e-01,-2.14093639e+00,2.19184440e-01,2.93384879e-01,8.24180382e-01,5.35761767e-01,-5.19180618e-01,3.55305495e-02,1.79338319e-01,1.33186418e-01,-4.67804765e-01,1.24746128e+00,9.13492622e-01,1.78793709e-01 -contig-180000000,-6.77988923e+00,-2.84892521e+00,-3.46199784e+00,-1.08737437e-01,-2.09959362e-01,7.79297060e-02,2.62066564e-01,3.06550512e-01,-7.68764876e-02,6.48468149e-02,2.26749853e-02,3.20606060e-02,-1.75304172e-01,1.00232688e-01,1.56930120e-01,2.51625408e-02,1.21998716e-01,-2.26795284e-01,-4.05973211e-01,1.82005355e-02,1.29290043e-01,-3.10953148e-02,-2.51471609e-02,1.29127370e-01,-1.50715909e-01 -contig-694000000,-2.73040296e+00,-4.33044133e+00,2.63415036e+00,-1.08068145e+00,4.16153235e-01,-1.47078130e-01,-1.24028750e-01,-3.94556774e-01,9.49721935e-01,-1.18485621e-01,-7.92585787e-01,-6.54230174e-01,8.17261445e-01,-1.13183409e+00,3.16501010e-01,1.88465028e-01,-6.72268146e-01,-2.64317790e-02,3.70093938e-01,-1.08787627e-01,4.05065736e-01,2.26357644e-01,1.09046029e-01,1.63298025e-01,-3.88737106e-01 -contig-225000000,-9.12560623e-02,4.99169332e+00,7.42153916e-01,-8.24511923e-01,-3.75275444e-01,-1.16555189e+00,-1.57962888e+00,1.89081920e+00,1.93743609e+00,-1.86976049e-01,6.44119061e-01,-7.93798172e-01,1.07877903e+00,4.04478548e-01,2.08258668e+00,-1.48692498e-01,7.41342868e-01,-2.34227157e-01,-6.15884712e-01,2.66833042e-01,6.05715178e-01,8.29799630e-01,1.55527713e+00,-1.40266635e-01,-1.59807185e-02 -contig-235000000,-1.94643906e-01,2.66403823e+00,2.18619733e+00,3.19366443e-01,1.40685960e+00,-5.72586076e-01,2.32972274e-01,-3.95420885e-01,-1.18079638e+00,-1.67510142e-01,4.89676280e-01,1.26067159e+00,9.83821528e-01,1.08117034e+00,-5.39014098e-01,-1.47165663e+00,4.35520265e-01,6.76494422e-02,1.72088423e-01,6.87213154e-01,2.10705041e-01,-7.23896372e-01,-3.21542507e-02,6.94210586e-01,-3.65295261e-01 -contig-4909000000,1.29675822e+01,-3.03861337e+00,-3.37049293e+00,-5.18967829e-01,-1.75556327e-01,5.26795610e-01,-4.78678206e-01,-1.19789993e-01,2.31042129e-02,-4.29719123e-01,2.36947309e-02,-1.43882018e-01,-1.79018051e-01,2.83568043e-01,2.20647358e-01,-2.08308751e-01,1.27802219e-01,3.23936923e-01,-4.88403976e-01,1.37940410e-01,-2.29698207e-01,-2.56900521e-01,-1.59249147e-01,3.06335833e-02,7.24091616e-02 -contig-307000000,6.62529597e-02,4.39461957e+00,6.23847055e-01,5.44195792e-02,-7.49520685e-01,9.19620430e-01,2.51442452e-01,-8.91385274e-01,-2.78616347e-01,1.08956084e+00,2.65661214e-01,-7.25710480e-01,7.80889283e-02,1.06908895e-01,-3.90176279e-01,-5.51904553e-02,-1.02963117e+00,9.81721358e-01,2.84797464e-01,6.11955838e-01,-6.58345051e-01,8.95055805e-02,2.69970029e-01,1.59250648e-02,-2.81851173e-01 -contig-261000000,7.32029974e-01,4.96219675e+00,-1.54745286e-01,-2.00825339e-01,5.71342182e-02,-2.63442909e-01,1.54854377e-01,2.74798892e-01,-1.00471937e+00,6.82287297e-01,-7.76582633e-01,-4.46280409e-01,-9.14456379e-02,-1.08976947e+00,3.59088583e-01,1.90100408e+00,8.54277934e-01,5.65297625e-01,-1.08637707e+00,2.88918956e-01,-1.33708388e+00,4.59299524e-01,2.32785958e-01,5.71008840e-01,-1.39286005e+00 -contig-145000000,-4.63870874e+00,1.18392961e-01,-3.13232071e+00,1.27669374e+00,2.25253380e-01,1.07548161e+00,-3.76108896e-02,-5.24267170e-01,-5.19627410e-01,8.59194122e-02,-3.23311862e-01,-3.65035264e-02,-6.32707543e-01,7.40961081e-02,1.71922414e-01,4.61544946e-01,1.80375771e-01,-3.01179691e-01,4.15048714e-01,5.52716438e-01,4.02602597e-01,-6.45581285e-02,-1.77762895e-01,3.77799431e-01,1.72961343e-01 -contig-166000000,-4.90609531e-01,4.50323373e+00,5.42050316e-01,-1.06914198e-01,-4.18639514e-01,6.61100327e-02,-4.99218546e-01,1.93452921e-01,-3.90077768e-02,7.64259732e-01,-1.04311481e+00,-9.03831730e-01,-2.31489712e-01,4.33372146e-01,6.49379966e-01,7.71271117e-02,-3.43516521e-01,9.27429815e-02,-4.37893167e-01,-6.62258706e-01,1.16085315e+00,7.57459328e-02,-1.04503599e+00,-3.00822842e-01,-2.17146644e-01 -contig-80000000,-1.16574509e+00,4.55758456e+00,-6.14221134e-01,-3.84608996e-01,1.66107825e-01,4.88382511e-02,8.50779849e-01,4.09868624e-01,-8.86795432e-01,1.59838507e-01,-5.42423553e-01,-2.84424261e-01,-1.94521391e-01,2.92242783e-01,-4.72753902e-01,7.37425430e-01,3.71777311e-01,9.39071812e-01,-4.58561330e-01,-6.27836781e-01,8.05221384e-01,1.05846044e-01,-3.97545777e-01,2.13952450e-01,-4.73652856e-01 -contig-83000000,-1.36660725e+00,4.58918342e+00,-5.30996285e-01,-1.44616422e-02,3.28791143e-01,-1.02229137e-01,1.14103305e+00,8.46587177e-01,-7.66980374e-01,-7.34419177e-03,-4.83324721e-02,-3.82093303e-02,-2.88895320e-01,4.08678894e-01,-4.59644181e-01,-3.73284105e-01,5.39374942e-01,2.09169410e-01,-1.15855021e-01,-3.48600141e-02,-3.82893112e-01,7.02028292e-01,-6.30952872e-01,2.12401123e-01,1.70209835e-01 -contig-72000000,4.95890963e+00,-6.48834795e+00,6.70303824e+00,4.57594371e+00,8.71131411e-01,5.93698814e-01,2.78124259e+00,2.88626014e+00,1.04436527e+00,1.54545600e-01,1.07296128e+00,-5.34174167e-02,2.76651097e-01,2.17479778e-01,1.09341273e+00,4.93728287e-01,8.57714673e-02,1.58154885e-01,-3.36812889e-01,-2.78436354e-01,3.96863517e-01,-1.61790145e-01,-2.43100414e-01,-1.93250033e-01,-2.45345278e-01 -contig-144000000,-6.43570636e-03,3.48924928e+00,8.54451218e-01,-8.81887108e-01,8.66338363e-01,-9.57515167e-01,5.00571184e-01,2.37728980e-01,3.43034154e-02,6.83402838e-01,-9.29917741e-01,-5.14953655e-02,2.84549631e-01,3.89527110e-01,-2.29654259e-01,8.06912088e-01,6.27420317e-02,7.52602925e-02,-5.29946597e-01,2.28953791e-01,-8.39473114e-01,-5.60310418e-01,9.96686416e-02,-2.88699210e-02,4.11455181e-01 -contig-108000000,5.26662235e+00,-4.56896852e+00,6.23568295e+00,6.52849823e+00,2.03788114e+00,-1.43003587e+00,2.74412519e+00,2.10855908e+00,5.60450791e-01,-3.01208093e-01,-9.36348522e-01,8.73524181e-01,-8.06433773e-01,-4.54813187e-01,3.36883151e-01,3.20096589e-01,-1.01081793e-01,-5.85297494e-01,-6.07746483e-01,-8.41900959e-02,-9.05577015e-01,5.65317405e-01,7.40503994e-01,-4.33146640e-01,-8.18308430e-01 -contig-198000000,-4.13455115e-02,3.37888823e+00,1.47073131e+00,-8.29338098e-02,1.16226303e+00,-6.42633749e-01,-8.82848580e-01,9.64026347e-01,-8.03449520e-01,-3.02098312e-01,2.81527821e-01,4.26719100e-02,4.20535126e-01,5.51279855e-01,9.54963322e-01,3.34649705e-01,2.54858000e-02,3.85877540e-01,1.44451078e-01,5.47616959e-01,9.97728122e-01,1.68740209e-01,8.87504400e-01,-4.20846020e-01,-1.10329109e+00 -contig-181000000,3.33999634e-01,5.74272318e+00,-1.22679035e+00,-1.60677309e-01,-3.10970739e-01,4.61806517e-02,-1.67900571e-01,8.78201419e-01,7.04477563e-03,-3.18265692e-01,-1.16538252e+00,-2.11141384e-01,-1.52849770e-01,-4.29975825e-01,6.97115504e-01,-2.57408581e-02,-1.64074344e-01,5.07129076e-01,2.38276263e-01,3.94300923e-01,-4.15801069e-01,-5.16036701e-01,-2.83304590e-01,2.44107214e-01,-3.12282824e-01 -contig-104000000,-6.37429258e+00,-3.13485780e+00,-2.40003209e+00,-7.31779438e-01,-9.36008037e-03,-1.99098362e-01,5.32660730e-01,3.09843676e-01,2.00467649e-01,-2.65793187e-01,-4.44287966e-02,-4.46692618e-02,-1.41423097e-01,1.78343363e-01,1.83076564e-01,8.95363486e-02,2.93862342e-01,1.26913234e-01,-1.05883957e-01,-4.17738190e-01,-2.38458892e-01,-1.43334671e-01,2.09388775e-02,-3.65900309e-02,9.81317289e-03 -contig-250000000,4.67113072e-01,4.98497524e+00,5.07534072e-02,-9.08638617e-01,-9.51390148e-01,-1.51706656e-01,-2.44342232e-01,-4.12069742e-01,-6.32131004e-01,-3.59735672e-03,1.89513156e-01,1.85252659e-01,-1.29419353e+00,-6.78069439e-01,1.90384855e+00,5.58317525e-01,3.99585262e-01,6.49493313e-01,2.33193684e-01,3.32370827e-02,-3.16568258e-01,1.09358404e+00,5.56674408e-01,2.86645447e-01,4.97943741e-01 -contig-102000000,-1.06338905e+00,5.29577715e+00,-6.21272362e-01,1.94331186e-01,-1.31863846e+00,1.23970944e+00,7.53018545e-01,-1.12321874e-01,6.21133897e-02,2.09945646e-02,5.01906689e-01,-5.88970343e-02,-9.99955621e-02,-5.04935566e-01,-8.84040122e-01,5.58154538e-01,-8.97272601e-01,6.52504264e-01,4.87311238e-02,-3.46500774e-01,-2.04993426e-01,1.12050629e-01,-6.39674062e-01,-1.91873576e-01,1.10415520e-02 -contig-122000000,-6.37403986e-01,3.95931274e+00,6.17679875e-01,5.47509075e-02,5.14645222e-02,-5.76008084e-02,1.59391125e-01,2.63680751e-01,2.80325062e-01,-3.04056693e-01,4.98290720e-01,8.54892493e-01,-5.16822391e-01,5.83681818e-02,-5.25835184e-01,-7.43234800e-01,-3.31207459e-01,3.65943852e-01,-1.92818415e-01,4.31996262e-01,-2.56499254e-01,8.72719264e-01,1.25275040e-01,4.40664782e-01,-1.61902342e-01 -contig-268000000,5.31592068e-02,5.68917488e+00,-4.78428210e-01,3.19126934e-01,-3.94901516e-01,2.47768709e-01,-1.89668177e-01,4.69405096e-01,-8.64262068e-01,4.44765665e-01,-5.76688997e-01,8.74969396e-01,1.90336446e-01,-5.87051972e-01,3.37908421e-01,6.72862822e-02,7.12317963e-01,-5.56640404e-01,8.01037637e-01,-9.93689372e-01,4.64143649e-02,4.94443937e-02,-1.18362828e+00,1.12040766e+00,5.75156156e-02 -contig-313000000,9.78773293e-01,-4.91240818e-01,5.34523881e+00,-1.44871379e+00,5.09350380e-01,-2.76861504e-01,-8.38073484e-01,-3.72902103e-01,-1.00540082e-01,-1.31310011e+00,1.08546048e-01,3.94815524e-01,-5.16260250e-01,3.29951750e-01,5.64258788e-01,3.02153022e-01,-5.28368087e-01,1.22934173e-01,-1.14008057e+00,9.69316574e-01,2.62933270e-01,-5.02472109e-01,1.07484770e+00,5.40131975e-01,-1.58402788e+00 -contig-20000000,-5.50689070e+00,-4.21635517e+00,-9.53457745e-01,-2.18084789e-01,-6.95008432e-01,-1.31189896e-01,-2.41919920e-02,1.78274049e-01,-4.59416192e-02,2.71290929e-01,-3.91672216e-01,5.81227446e-02,4.92285738e-02,2.68278648e-01,-5.79155879e-01,1.39632020e-01,-3.24744735e-01,-3.25994313e-01,3.52469812e-01,1.60472509e-01,2.83472952e-02,2.45237710e-01,2.52655148e-01,2.63301941e-01,1.39761198e-01 -contig-12000000,-5.92184271e+00,-1.72954319e+00,-3.11881885e+00,2.35062549e-01,4.09252316e-01,-3.25327237e-01,2.70562482e-01,-4.25898121e-01,-3.75810233e-01,-1.73789304e-01,3.96710393e-01,-1.93700252e-01,1.90364320e-01,-5.62356618e-01,1.40986561e-01,1.32193920e-01,4.04022731e-01,7.84555288e-02,-5.79705363e-02,-7.23599816e-02,-3.06166651e-01,-1.77806663e-01,-6.02378259e-01,-1.08044647e-01,-2.17415886e-01 -contig-50000000,-5.21784841e+00,-4.53171316e+00,2.42961401e-02,-3.08497435e-01,3.16702141e-01,-2.90742395e-01,-6.28126026e-01,-4.56501368e-01,-1.17759012e-01,-1.00047244e-01,4.97800648e-01,-1.50352875e-02,3.55218089e-02,9.09294648e-02,2.25310613e-02,-1.89976320e-01,6.95252312e-02,2.34596417e-01,-5.13219624e-01,-3.26490883e-01,-2.10755849e-01,-1.09896445e-01,-2.66768342e-01,-3.08982634e-02,-2.57763164e-01 -contig-109000000,-1.10958334e+00,4.76884639e+00,-1.08190689e-01,2.60270282e-01,-2.36668951e-01,2.19852046e-01,1.98792773e-02,3.83788177e-01,-7.07944413e-01,7.33449396e-01,-7.32900431e-01,5.81024716e-02,-7.71080537e-02,8.16161558e-02,-1.52056344e-01,-1.03906016e+00,2.81807963e-01,1.95206351e-01,-4.62554649e-01,-7.22914115e-01,1.01559292e+00,1.13483685e+00,-7.44473706e-01,3.87476425e-01,-1.70037683e-01 -contig-4924000000,-7.22113139e+00,-3.32230279e+00,-3.81559551e+00,-4.83167254e-01,-2.60202980e-01,-5.77277848e-02,8.11576674e-01,4.98618806e-01,-9.82909371e-02,-3.05015698e-01,1.79867226e-01,-1.11173486e-01,-7.14894819e-02,-1.96708834e-02,1.35409320e-03,3.90935972e-02,6.40304050e-03,1.40174592e-01,-1.05108161e-01,-1.62732591e-02,7.14600629e-02,6.18043121e-02,2.88567116e-01,5.78518396e-02,-7.11862989e-02 -contig-859000000,1.08611754e+01,-6.80189934e-01,-3.12369937e+00,3.63691646e-01,-7.06929486e-03,4.35815647e-01,-5.86923753e-01,-8.59413161e-01,1.60043758e-01,-3.37153024e-01,2.34757221e-01,-5.34098674e-02,-6.63174667e-02,1.44376464e-01,1.78621787e-01,-1.90650849e-01,1.01859281e-01,-4.33541188e-01,-6.54505662e-01,-2.71040168e-01,-7.22246378e-01,-3.56142946e-01,2.42602316e-01,2.93891043e-01,-4.66444539e-01 -contig-475000000,1.04359304e+01,-2.17087262e+00,1.55450221e-01,3.56386966e-01,4.07293114e-01,2.67320327e-01,8.88123927e-01,-2.30120322e+00,-2.36715013e-01,5.82424844e-01,1.10661095e+00,-3.76454651e-01,-3.29245144e-02,4.87014685e-01,-1.76666488e-01,1.39892654e-01,4.50058022e-01,-3.14055414e-01,7.58230460e-02,-3.13584197e-01,7.23795177e-01,4.61735815e-01,-1.07073611e-01,7.60565195e-01,-2.97006286e-01 -contig-230000000,-4.74752888e-01,5.40679366e+00,-6.05093592e-01,2.38572198e-01,3.01821899e-02,4.09510821e-01,1.27911657e-01,7.45634340e-01,-5.81769766e-01,9.40318065e-01,-6.97985980e-01,-1.53227503e+00,-4.97885424e-03,-1.32744124e-01,-1.75058250e-01,-1.99495462e+00,6.13165647e-01,-8.10506044e-01,1.17618834e-01,5.41070018e-01,-9.56593239e-01,1.12614143e+00,3.17313920e-01,-2.61514420e-01,1.73053625e-01 -contig-2920000000,-2.43507522e+00,-2.56805834e+00,2.21380516e+00,1.14018755e+00,1.45273807e-01,1.96585359e-01,-2.33570812e+00,-1.61119359e+00,2.67469568e-01,2.35802490e-01,-3.26457689e-01,5.21101399e-01,-1.24991395e-02,2.76794435e-01,-1.78606302e-01,4.13399724e-01,7.89941700e-01,-6.97290124e-01,-7.53419809e-01,-4.97152119e-01,1.22305970e-01,3.79476834e-01,-4.02661859e-01,-6.40759999e-01,-1.38171384e+00 -contig-260000000,-2.85826599e-01,3.84213921e+00,1.52164657e+00,4.16278683e-02,-2.62274056e+00,1.08516350e+00,-8.27822462e-01,-1.92982747e-01,2.28644358e+00,-7.51974876e-01,1.86887783e-01,5.34017287e-01,2.57867561e-01,-3.09460957e-01,-6.13962775e-02,-1.99109416e-01,1.65541378e-01,-1.46132914e+00,3.34290643e-01,-3.27859233e-01,-5.03942858e-01,3.50953444e-01,3.19611156e-01,-1.11595431e+00,-3.86482957e-01 -contig-314000000,1.86071990e-01,4.96211359e+00,7.74105893e-01,-1.28817457e-01,-2.30130641e-01,-1.60548875e-01,-1.26613352e-03,-1.17929040e+00,-9.01294531e-01,2.30977779e-01,6.41663084e-01,9.62026615e-01,-1.66102373e-01,3.17504463e-02,1.25681894e+00,-1.30554439e-01,-1.68390703e-01,4.11469520e-01,4.82107581e-01,-2.15596009e-01,1.65097386e+00,-3.69940725e-01,-8.30356294e-01,8.47286097e-01,-3.02388823e-01 -contig-123000000,-2.62790714e-01,3.51837185e+00,9.60612036e-01,-5.80086694e-01,7.54381404e-01,-9.60826113e-01,7.70466531e-01,4.65049423e-01,5.33203489e-01,-5.19158176e-01,-1.40814589e+00,-1.96806601e-01,-1.06402050e+00,-4.09011792e-01,-5.91951991e-04,3.75237210e-01,-4.00274464e-01,-1.05013676e+00,-6.97663961e-01,1.09317421e+00,-2.22553070e-01,4.42157565e-03,-3.72628651e-01,-5.64569216e-01,-3.63288467e-02 -contig-253000000,-2.88962942e-01,4.44505718e+00,5.57694249e-01,-5.99205462e-02,-2.35787628e-01,2.22018071e-01,1.36343478e-01,-5.35982129e-01,6.05882911e-01,7.27496228e-01,2.64317652e-01,1.85908479e-01,-9.08598765e-01,-1.04529445e-01,-1.23999388e+00,-1.44323913e-01,-7.83254870e-01,1.29977850e+00,4.09901356e-01,6.47358489e-01,-2.57931947e-01,-4.48438410e-01,6.57226377e-02,-5.63304728e-01,7.06248043e-01 -contig-4914000000,-6.33937884e+00,-2.34288718e+00,-3.27606766e+00,-2.12492455e-01,2.71230421e-01,-1.44091814e-01,1.16956682e-01,1.34959002e-01,-1.10340013e-01,1.52203545e-01,2.86195847e-01,3.71331064e-02,-4.24971383e-01,1.35101198e-01,7.95651903e-02,2.28267768e-02,1.05938494e-01,8.28640294e-02,-2.38176851e-01,-5.67083673e-02,-1.18873206e-01,-6.51467316e-02,2.06584325e-02,9.80958916e-03,-8.63524863e-02 -contig-1820000000,-2.51499489e+00,4.08229987e-01,4.82800994e-01,4.13719688e-01,1.40590218e+00,-8.80265064e-01,-8.65949665e-01,-1.32615921e+00,9.07963520e-01,-7.00091779e-02,1.86084918e-01,1.86348171e+00,8.00593129e-02,1.35780415e-03,9.16988099e-01,-2.69801621e-01,6.62687699e-02,-1.13023472e+00,-2.15837653e-01,-3.90470815e-01,-5.38070263e-01,7.96945159e-01,-1.70597892e-01,-4.32921225e-01,-1.88620963e-01 -contig-1529000000,-6.05893240e+00,-2.82514626e+00,-2.74721694e+00,-1.88639788e-01,7.85348196e-02,-3.41128547e-02,2.98439074e-01,4.71704730e-01,-4.27944291e-02,-3.02308812e-02,-1.56959840e-01,-5.55670350e-02,6.82385362e-02,4.22300910e-01,-1.80724789e-01,-9.12561463e-02,1.17536366e-01,-8.52817244e-02,3.42197861e-01,7.14825674e-02,2.72507564e-01,2.04951911e-01,2.90176831e-01,8.05488185e-02,-1.14279695e-01 -contig-142000000,-6.88380095e-01,3.88824353e+00,9.36657137e-01,-8.71060799e-01,-1.25830048e+00,2.72949342e-01,-6.95300668e-01,5.20652359e-01,6.19162798e-01,-1.17720045e+00,-1.83448023e-01,-7.98977682e-01,7.34544879e-02,1.61685377e-01,6.08913828e-01,-2.15103464e-01,8.60521697e-01,-2.39234268e-01,9.73859977e-03,6.58031885e-01,-1.38905698e-01,3.41959188e-01,9.25021926e-02,6.09207960e-01,4.49713672e-01 -contig-18000000,1.33487027e+01,-2.64410884e+00,-4.31595405e+00,-5.67111089e-01,-2.70422954e-01,1.81051364e-01,-9.59529019e-01,9.70423887e-02,-1.56079977e-01,-3.60928621e-01,1.83911372e-01,-1.77974591e-02,-2.08339561e-01,-6.07132940e-02,5.55360378e-02,-2.38347911e-01,-2.70825403e-01,3.15787840e-01,-5.22317967e-01,-3.11415688e-02,-1.91403580e-01,-7.84120779e-02,-2.41352655e-01,2.95267110e-01,8.27068315e-02 -contig-19000000,-5.30642047e+00,-5.07834379e+00,-6.79272101e-01,-2.49948727e-01,-6.34956078e-02,9.02279340e-02,6.58469232e-01,-4.33292434e-02,2.18636230e-01,-5.95722354e-01,-5.14945338e-01,-9.01426524e-02,2.81272242e-01,3.75054386e-01,-1.15102850e-01,-1.36495868e-01,-4.60032389e-01,1.15907730e-01,1.49557256e-01,1.35110879e-01,6.55422318e-02,2.71055062e-02,1.01631370e-01,-8.38739344e-03,-1.59283387e-01 -contig-2000000,1.39430686e+01,-2.51056687e+00,-5.84681451e+00,-4.90375084e-01,-1.19390533e-02,-3.66805083e-02,-1.13799816e+00,4.71915316e-01,-6.01502607e-01,-5.47410522e-01,-2.89726631e-01,2.26154455e-01,-7.49589644e-02,-2.44245441e-01,1.90727816e-01,-1.57075191e-01,-3.74046296e-01,1.52452651e-01,-7.02708588e-02,-6.05756186e-02,-1.62427704e-01,-9.37933466e-02,-4.72082396e-02,1.10917831e-01,-1.72407926e-01 -contig-2983000000,1.10389691e+01,-1.81897285e+00,-1.34793575e+00,-9.49728298e-02,3.55716696e-01,5.84545440e-01,-2.55451762e-01,-6.44245915e-01,4.45054799e-02,7.22069921e-01,1.44485030e-01,8.98706447e-02,-7.52808926e-01,1.06691917e+00,1.27831755e-01,-1.40519953e-01,7.71214211e-01,3.18928705e-01,-3.88721266e-01,3.75435135e-01,-7.24921103e-01,1.44293764e-01,-1.40468422e-01,-1.59029443e-01,6.82238179e-02 -contig-217000000,3.42919523e-02,6.00455914e+00,-5.69877381e-01,8.99922159e-01,-5.52272377e-01,8.85335672e-01,1.02836871e+00,-2.76026053e-01,-1.15853524e+00,-2.97509471e-01,-1.24092697e-01,-2.02068679e+00,4.33467906e-01,-4.12545233e-01,9.74515512e-01,-2.86769169e-01,2.27606551e-01,-4.70807028e-01,-6.31662570e-03,6.36659665e-01,2.63874619e-01,-2.82524579e-01,2.45936421e-02,-1.38356054e-01,-1.02289610e+00 -contig-158000000,4.83949666e+00,-4.62819816e+00,4.97724466e+00,4.37861529e+00,2.15232014e+00,6.32797793e-01,6.69636410e-01,2.51863135e+00,4.34810045e-01,-1.73542458e+00,-5.21577344e-02,1.68015056e-01,-1.44615000e-01,1.02555622e-01,1.21193906e-01,7.46613198e-01,6.20275725e-01,8.75585847e-01,-6.29149616e-01,2.66490100e-01,-4.60280384e-01,2.18338964e-01,6.87743835e-02,-4.13216576e-01,9.59258090e-02 -contig-552000000,1.13632298e+01,-2.69285616e+00,3.99652745e-01,-7.09198164e-01,2.03722053e-02,-5.21087840e-01,1.82213385e+00,8.47858762e-02,1.22246188e+00,1.77710917e+00,-8.00987838e-02,3.98782901e-01,2.83780902e-01,9.05982895e-01,3.23678780e-01,8.24720225e-01,-6.67144882e-01,-6.66523543e-01,1.00668931e+00,-1.22778224e-01,7.43305974e-01,4.46925218e-01,-2.68808025e-01,-2.81370385e-01,1.50169631e-02 -contig-241000000,-4.05226090e+00,-4.67185027e-01,-1.77055084e+00,1.10154374e+00,3.18163583e-01,8.03481306e-01,-1.00641610e+00,-9.10574423e-01,-1.06652729e+00,-3.01949557e-01,3.22698326e-01,-3.02482466e-01,1.08560977e+00,-2.00937600e-01,2.54751552e-01,2.78796184e-01,5.59939560e-02,-1.03762169e+00,3.77350152e-01,9.60861454e-02,3.10240694e-01,-3.27944980e-01,2.18579039e-01,1.44063440e-01,-3.55923441e-01 -contig-257000000,1.94995119e-01,1.87727342e+00,2.72355990e+00,-2.03240624e-01,6.92485205e-01,-1.02957156e+00,6.50419701e-01,2.93214244e-01,4.53723114e-01,-8.61374491e-01,-1.33176464e+00,9.66602175e-01,6.80264283e-01,-4.80081734e-01,8.50657939e-01,-6.66847575e-01,6.56583597e-01,-9.95406481e-01,3.71166108e-01,5.16839522e-01,3.21394113e-01,-6.80434839e-01,-1.00607604e+00,8.36222136e-01,-7.40423423e-01 -contig-172000000,1.46945232e+00,6.99325259e-01,3.88943467e+00,1.22076613e+00,-2.38553588e+00,-3.13476412e+00,8.99047636e-01,2.09395147e-01,3.75322287e-02,-9.45775573e-01,-1.85727803e+00,-8.51540500e-02,4.65075138e-01,-7.35140151e-01,-8.48586053e-01,-5.02547481e-02,-9.63208429e-01,6.54738584e-01,5.00726323e-01,-7.75752689e-01,4.05874642e-01,-4.77223472e-01,8.04306449e-01,7.30401005e-01,-2.14544457e-01 -contig-196000000,-9.03920235e-01,3.67154154e+00,1.19927765e+00,-3.24758774e-01,5.42581839e-01,-2.96325612e-01,-5.45202581e-01,-3.29802428e-01,-6.26743621e-01,6.02929562e-01,-2.40528936e-01,-5.10798668e-01,-4.93281111e-01,2.19904758e-01,-1.33475737e+00,1.49813463e-01,-1.76061933e-01,4.97942046e-01,-3.65401745e-01,-1.19365743e-02,4.05166162e-01,3.46324501e-01,1.20167762e-02,-8.09878772e-01,-8.00552122e-01 -contig-52000000,-5.51235798e+00,-1.54918781e+00,-2.66650803e+00,4.13472914e-01,2.20096836e-01,3.73904913e-01,3.35136596e-02,-3.11448262e-01,-2.82478938e-01,-2.49395279e-01,1.35812820e-01,3.69284708e-02,-3.82749181e-01,3.77068166e-01,1.95914367e-01,5.01820621e-02,3.20632107e-01,-5.11069725e-01,1.99289868e-01,9.89230377e-02,-1.75628791e-01,9.88216458e-02,2.65450674e-01,-2.36703224e-01,-2.76776078e-01 -contig-22000000,1.28547547e+01,-4.97483557e-01,-6.36767382e+00,-8.76677113e-02,1.29661751e-01,-4.48862093e-01,-5.00433909e-01,7.09782360e-01,-4.48801145e-01,3.23311286e-01,-5.34028140e-01,4.38961438e-01,4.04005641e-05,-5.38439930e-01,-5.09063357e-01,4.12504625e-02,1.52295917e-01,-5.64402336e-02,2.06978409e-01,7.00828110e-02,1.38820614e-01,5.25343257e-02,1.99988626e-01,-6.97833148e-02,7.97432253e-02 -contig-284000000,4.73650755e+00,-6.20350985e+00,8.45721904e+00,3.03051463e+00,1.79915866e+00,2.04610416e+00,-1.62454928e+00,2.23126846e+00,-1.31561267e+00,-1.53487611e-01,1.11775225e+00,5.64451966e-01,-6.62090400e-01,-1.61838028e+00,5.25620103e-01,1.17703757e-01,-4.53496554e-01,1.20930323e-01,-8.38675127e-01,-1.29049154e-01,5.02576015e-02,-7.07495434e-01,3.11384664e-01,6.91985336e-01,8.69103588e-01 -contig-295000000,-6.64833843e+00,-3.54041548e+00,-2.20972225e+00,-1.34085845e+00,3.13217973e-01,-5.34291068e-01,1.81191500e+00,1.22015296e-01,1.28831237e-01,-9.78587293e-01,3.49167510e-01,-1.10383317e-01,1.06045525e-01,-2.40730269e-01,1.74266545e-01,-3.06373020e-01,-1.84583176e-01,1.94085526e-01,2.64301813e-01,-3.12640434e-01,-4.75176546e-01,1.73295519e-01,-1.11104347e-01,-2.44321457e-01,2.47113619e-01 -contig-270000000,4.47199755e+00,-3.50056625e+00,5.94826447e+00,-1.08004458e+00,-1.73874273e+00,5.44951841e-01,9.96170936e-01,-2.19815675e+00,-1.90189797e-01,1.60286530e+00,-5.49115906e-01,5.15613696e-01,8.58655648e-01,-7.67248532e-01,8.62568615e-01,3.26843624e-01,1.22617406e+00,1.56725968e+00,-7.07721833e-01,-4.68768467e-01,8.89781214e-01,2.03897471e-01,1.56875777e+00,8.45801023e-01,-9.36054639e-01 -contig-1058000000,6.67568754e+00,-4.64914576e+00,9.77359224e-01,4.54810450e+00,-8.11997009e+00,-7.48980139e+00,-1.33742696e+00,-4.72779468e-01,-1.15212107e+00,8.20741403e-01,1.52165885e+00,-9.36634391e-01,-5.97958267e-01,1.06745103e+00,4.58720812e-01,-3.17808539e-01,-7.24270433e-01,-1.21732914e-01,-1.58576645e+00,-4.64122277e-01,-2.59066349e-01,-9.76118051e-01,-1.11969040e+00,-8.16811150e-01,2.37484832e-01 -contig-262000000,-3.61311258e-01,3.88548945e+00,1.39267904e+00,4.51182424e-01,5.52809742e-01,8.52125968e-02,-9.76322815e-01,3.53335877e-01,2.40184647e-01,9.27162707e-01,-9.39169111e-02,5.98192962e-01,-1.24111341e+00,6.31465410e-01,1.51896136e-02,2.48454111e-01,2.90910375e-01,5.78328092e-01,-7.90076255e-01,-9.49734247e-01,4.50602646e-01,1.66731923e-01,-6.65442605e-01,6.27178118e-01,-5.08648015e-02 -contig-233000000,3.23584613e-01,-9.95971291e-01,5.56203572e+00,-6.80886279e-01,1.11498605e+00,2.48102945e-01,6.99196825e-01,-8.65657915e-01,-6.54151241e-01,-1.11585374e+00,-1.18677043e-01,-1.06717027e-01,-1.40838220e+00,9.13794860e-01,-4.52172459e-01,1.93331074e-01,-5.30943074e-01,2.02130006e-01,2.63280779e-01,-2.87207814e-01,5.68558632e-02,-5.04973666e-01,6.34289323e-02,-8.32262841e-02,-2.60074206e-01 -contig-4925000000,1.34807499e+01,-2.26995168e+00,-5.71158125e+00,-4.76361463e-01,3.09096116e-01,-6.82500102e-02,-9.41658373e-01,4.87624068e-01,-4.27595318e-01,-3.67412181e-01,-4.66758992e-01,4.77114131e-01,-1.83289507e-01,-3.63867147e-01,-2.14942104e-01,-2.63444556e-01,-2.61080892e-01,2.44137697e-01,6.09074377e-02,-3.08676257e-02,-3.00022336e-01,-4.30397984e-02,4.10984514e-02,-4.71886461e-02,1.20541604e-01 -contig-4907000000,-6.06351651e+00,-2.08464665e+00,-2.88666548e+00,1.65841693e-01,-5.09435311e-01,5.10288420e-01,-2.00590501e-03,5.44535829e-02,4.54740958e-02,-1.16439698e-01,-8.25172650e-01,-3.34884914e-01,-2.08994515e-01,2.82671678e-01,1.39483989e-01,-4.67724958e-01,9.32474560e-02,-6.47500430e-01,-4.07454159e-01,4.17784080e-01,2.00957482e-01,1.21115727e-01,1.80280906e-01,-2.66226451e-01,1.40455373e-01 -contig-4917000000,-7.09724158e+00,-3.58094482e+00,-3.26131511e+00,-4.61490186e-01,-7.43486231e-02,2.53846498e-02,4.00408612e-01,2.06796609e-01,-5.86557946e-01,-4.40877936e-03,5.24560165e-01,2.26556775e-01,6.75820490e-02,1.87521035e-01,-1.16073140e-01,-3.23347539e-02,1.68053594e-01,2.83525221e-01,-3.82368306e-01,1.35466171e-01,-1.02636645e-01,-4.24363255e-01,-2.00997849e-01,5.80769475e-02,-1.30846683e-01 -contig-234000000,-5.12359356e-01,4.55617383e+00,6.86102866e-01,-4.45973061e-01,7.07608954e-01,-9.86908018e-02,-3.01439005e-01,-1.92596564e-01,-9.57119784e-01,6.69371864e-01,5.32002490e-01,-8.05934718e-01,-1.12725037e+00,5.81478137e-03,-2.67984611e-01,8.38803900e-01,-1.13272895e-01,-9.63458082e-02,1.09770647e-01,2.18838282e-01,-7.96409081e-01,-8.95326355e-01,-4.47068063e-01,-5.54856610e-02,-6.98278411e-02 -contig-115000000,-5.43188002e+00,-2.35018903e+00,-2.41340062e+00,2.31612207e-02,1.56948521e-01,2.05150869e-01,2.50682385e-02,3.78886623e-03,-2.96476425e-01,3.97409555e-03,-3.64640731e-02,1.12308426e-01,-2.64614978e-01,-2.93943077e-02,-3.95315549e-01,2.17262157e-01,-3.24393874e-01,-4.07323247e-01,9.93070644e-03,1.02914923e-01,4.45455703e-01,2.40710580e-01,3.29897794e-01,1.46739745e-02,-8.77254607e-02 -contig-155000000,-5.33520967e-01,4.40483099e+00,5.28361693e-01,-8.33907993e-02,-5.83487369e-01,6.98299173e-01,-5.38561634e-02,6.24146272e-02,-1.90445298e-01,-1.77887384e-01,-1.72827829e-01,-2.29029203e-01,2.05561320e-01,4.53278845e-01,-8.01079606e-01,3.42320263e-01,9.25653998e-02,-4.78756656e-02,1.68167354e-02,-5.69627889e-02,9.49206489e-01,-2.52787874e-01,-2.21488959e-01,-5.94149915e-01,-3.03639222e-01 -contig-1117000000,9.70817102e+00,-6.07761881e-01,-4.01374835e-01,-1.87708020e-01,1.84306198e-01,3.84504144e-01,5.25469740e-01,-1.00303108e+00,-1.03440774e-01,-2.67710768e-01,1.53931749e-01,-3.83529269e-01,1.15784320e+00,3.76802470e-01,-9.78079775e-01,-4.32094105e-01,7.25219592e-01,5.59004814e-01,-1.81265697e+00,8.92242771e-02,-2.97152177e-01,-1.06278168e+00,-4.20387955e-02,8.79271494e-02,-3.79574136e-01 -contig-121000000,-5.88309400e-02,3.09592670e+00,7.89618342e-01,-4.17149145e-01,1.50300496e-01,-9.86328228e-02,8.85483971e-01,6.34544024e-01,-1.33276836e-02,-5.06945527e-01,-3.29304357e-01,5.62851561e-01,1.00314939e+00,-5.33368436e-01,-6.33999114e-01,-1.04289510e+00,-5.92779687e-01,-4.58845122e-01,3.44654133e-01,-2.16819320e+00,-2.13587769e-01,-4.40153347e-01,2.24663991e-01,7.72608354e-01,-1.78548921e-02 -contig-287000000,-4.38006597e+00,-7.30411445e-01,-2.48949248e+00,9.83451954e-01,-9.66225190e-03,6.69195442e-01,-8.66473318e-02,-8.30794266e-01,2.46056339e-01,-3.90128950e-01,8.44448844e-02,4.78560878e-01,-4.98267955e-01,1.97870840e-01,-1.23696774e+00,-3.29421798e-01,1.20127897e-01,3.38101661e-01,4.61844094e-01,2.30838438e-01,-8.57583481e-02,2.55514173e-01,3.75140243e-01,1.30264781e-01,5.74776269e-01 -contig-214000000,3.56834572e-01,5.19586953e+00,-4.71669488e-01,-2.29073371e-01,1.06215581e-01,-2.69991013e-02,8.21739162e-01,7.67255003e-02,-5.33048885e-01,4.35645862e-01,-1.22417929e-02,2.53609491e-01,8.91493710e-01,-7.36238772e-01,7.00183164e-01,1.31983902e+00,8.15391210e-01,-2.68451389e-01,-2.49229589e-02,1.93258354e-01,-2.95887675e-01,5.28653440e-02,-3.26380239e-01,-4.28903147e-01,-1.81751148e+00 -contig-21000000,1.12744718e+01,-3.49748277e+00,8.09518943e-01,-3.84124641e-01,8.47313272e-01,-3.24252625e-01,1.31072068e+00,1.20085284e-01,-3.09669800e-01,6.77268916e-01,3.91957152e-01,1.32528350e-01,4.12434200e-01,1.33132107e+00,3.22507395e-01,9.14814044e-01,-7.19946729e-01,-4.35413423e-01,2.96645180e-01,-2.90599989e-01,3.91424511e-01,6.04510821e-01,-1.22652666e-03,-3.91296545e-01,1.57223951e-01 -contig-237000000,-8.15762799e-01,4.00714915e+00,9.51105958e-01,2.13630243e-01,1.27613173e+00,-1.03938384e+00,-7.48871212e-01,1.15124730e-01,-1.09221565e+00,-1.37832902e-02,-3.81703021e-01,1.16763736e-01,-4.01547678e-01,5.85789869e-02,-1.10379162e-01,-1.05788573e-01,1.64227785e-01,2.12318709e-01,-1.08365861e-01,-5.10425121e-01,3.29694668e-01,-8.98061092e-01,2.97679714e-02,-4.79737408e-02,-1.34475867e-01 -contig-2451000000,-3.54102136e+00,-6.02660698e+00,3.03361877e+00,-1.33343687e+00,3.68624957e-01,-2.66593661e-01,-2.18303957e-01,1.95980071e-01,3.11158891e-01,-3.07484215e-02,4.52757563e-01,-5.98184988e-01,7.01544249e-01,-9.76427936e-01,2.02317039e-01,7.37991874e-01,-9.07360304e-02,1.24368403e-01,4.45769862e-01,-2.49817502e-02,1.04883546e-01,-3.94552862e-02,-5.27403586e-02,-2.38885315e-01,-1.20382403e-01 -contig-74000000,-2.20664666e+00,-5.68879322e+00,4.07008092e+00,1.12011841e-01,1.37976614e-01,3.77889641e-01,-1.28658107e+00,-1.03571117e+00,2.64059692e-01,-9.12138309e-02,3.36472779e-01,1.93533740e-02,3.86808719e-02,-9.40293204e-02,2.42681881e-01,4.72761135e-01,-2.70398267e-01,3.01085141e-01,4.29645327e-01,-1.81376327e-01,2.84046369e-01,1.57831306e-01,-1.59902856e-01,1.23533713e-01,-3.53883326e-01 -contig-59000000,-3.27726725e+00,-4.99753463e+00,1.69859697e+00,1.45962454e-01,2.61406211e-01,2.08158568e-01,-1.01076251e+00,-3.79455422e-01,5.67829493e-01,-5.04251629e-01,-3.26139590e-01,-7.77276154e-02,3.15650892e-01,1.00750016e-01,-1.54240408e-01,2.81252071e-01,-1.86664654e-01,3.96505066e-01,1.17686616e-01,4.44963090e-01,7.07906510e-02,-3.24555607e-02,-3.46943415e-02,9.11526287e-02,-8.23899122e-02 -contig-81000000,1.04692888e+01,-1.51779454e+00,-1.76880525e+00,-3.53383563e-01,9.38570133e-01,7.92913751e-01,1.12929436e+00,-1.48877368e+00,8.06779754e-01,1.47679811e-01,9.39600107e-01,5.80446522e-01,-3.05806217e-01,4.58152927e-01,-4.28035461e-01,-1.20768422e+00,1.06939745e+00,5.32927300e-02,-1.12565841e+00,8.27540869e-02,-2.67962814e-01,-7.35395386e-01,-2.99196613e-01,6.14447664e-02,-1.93391441e-01 -contig-40000000,1.05839084e+01,-1.79726166e+00,-1.25242243e+00,-5.40517960e-01,8.01783877e-01,-7.73210718e-01,1.34896585e+00,5.25626170e-01,8.52595158e-01,9.57999103e-01,-2.92719704e-02,4.76431924e-02,4.23677505e-01,1.07238704e+00,-3.04229376e-01,9.32300725e-01,-4.26678770e-01,-5.93814103e-01,6.47391671e-01,-9.85711611e-02,7.69916611e-01,5.71276324e-01,1.83809985e-01,-4.62076691e-01,4.69379058e-01 -contig-199000000,7.78493322e-01,1.03796263e+00,3.33380089e+00,-1.61544617e+00,4.64064597e-02,-4.03325698e-01,5.90659555e-01,-1.16384185e+00,-6.73001380e-01,-7.70112438e-01,-4.11847377e-01,6.62812323e-01,-1.17202634e+00,3.57228270e-01,9.81122027e-01,-4.05262202e-01,-2.73238934e-01,2.33190927e-01,3.03500831e-01,9.12883439e-01,-5.00241886e-01,-5.72805384e-01,-6.49731018e-02,-5.16618916e-01,-1.00565740e+00 -contig-87000000,-2.15148950e-01,5.46800948e-01,3.33205140e+00,-8.36794681e-01,-2.73186107e-02,-4.60103490e-01,1.17991817e+00,-3.52253745e-01,8.14765248e-03,-1.25049163e+00,-6.26030934e-01,6.11624328e-01,6.71154047e-01,2.57839278e-01,-9.02956443e-01,-1.21588512e-01,-6.64752353e-01,-2.31354999e-01,-3.73601855e-01,1.33753083e-01,3.49851175e-01,-4.17730968e-01,1.64930213e-01,-9.09994496e-01,2.32380883e-01 -contig-1486000000,9.32895819e+00,9.09258816e-01,-3.44932134e+00,8.86257962e-01,3.19470565e-01,-2.55410183e-02,-7.69160602e-01,-5.27192365e-01,1.25599059e+00,8.96514578e-01,-7.21089310e-01,1.02388573e-01,1.74666522e+00,-3.78968438e-01,-3.36761412e-01,6.18871187e-01,5.48101508e-01,-2.28962452e-01,-2.55219495e-01,3.57025129e-01,-4.16932579e-01,-4.21219732e-01,1.44825609e+00,-5.25279224e-02,1.89073143e-01 -contig-412000000,-3.55875460e+00,-1.13242719e+00,-2.14087168e-01,1.49428539e+00,-6.72831551e-01,6.99790261e-01,-1.92557863e+00,-7.90764748e-01,5.90669568e-01,5.12034880e-01,-1.31621956e+00,5.60841260e-02,6.12442403e-01,5.59882311e-01,7.08777910e-01,-2.53089396e-01,9.85825884e-01,-2.61850594e-01,-1.75045482e-01,5.69053447e-01,-1.86194673e-01,-6.09337204e-01,-6.20387351e-01,-8.59061971e-01,3.12335488e-01 -contig-171000000,2.86186266e-01,5.47902288e-01,4.29505932e+00,-6.01917534e-01,5.92400233e-01,-2.44421539e-01,7.50664326e-01,-3.01433236e-01,-2.76999262e-02,-4.04228840e-01,-6.38458236e-01,-8.66293449e-01,3.40580170e-01,5.53577849e-01,-2.10402486e-01,3.10220859e-01,4.01602096e-02,6.38703594e-01,-2.40835945e-01,4.54458715e-02,-5.37567491e-02,2.98382121e-01,-3.30090675e-01,-3.80140545e-01,-3.00538929e-01 -contig-4937000000,-7.44894906e+00,-2.60605850e+00,-4.35285388e+00,1.11711598e-02,-7.37468448e-01,5.13656039e-01,3.90222270e-01,3.59028388e-01,-6.77004894e-02,8.40333131e-03,-1.70921858e-01,-1.08836697e-01,-1.46738596e-01,3.99483096e-02,3.16949798e-01,-1.62244234e-01,3.19062638e-01,4.77350182e-02,-5.20595646e-01,-7.57111389e-02,-1.67206804e-01,-4.45340435e-01,-8.43983275e-02,-1.44210472e-01,2.29582047e-02 -contig-65000000,-5.16748836e+00,-1.14045383e+00,-3.09939093e+00,8.11674240e-01,7.26127367e-01,-2.86007186e-01,3.51404595e-01,-5.97853078e-01,5.33585474e-02,-1.82469383e-01,-6.48660512e-01,6.10883669e-01,1.33014090e-01,8.67655351e-02,3.62366567e-01,-3.58474743e-01,7.20498000e-01,2.66837301e-01,3.74415760e-01,-4.90779633e-01,1.32222736e-01,-5.64119853e-01,2.47911917e-01,9.07612208e-02,3.08874417e-01 -contig-136000000,-4.58607548e-01,3.95491904e+00,9.01064087e-01,1.81515087e-01,-2.36840726e-01,6.49782655e-01,6.00843778e-01,-2.83011601e-01,-6.55504341e-01,-3.45436300e-01,-1.40939327e-01,-1.38631628e-01,6.33903288e-01,8.79194198e-01,-6.16523567e-01,4.98696665e-03,1.33863354e-01,-2.47189368e-01,2.46594350e-01,-4.91764479e-02,5.00438203e-01,6.83321102e-01,-1.79647943e-01,2.05757497e-01,2.46417255e-01 -contig-137000000,3.48341468e-01,-1.88481170e+00,6.74783313e+00,-3.23850661e-01,-1.96649542e-01,-4.56112227e-01,7.47976599e-01,-6.40857048e-01,6.18564385e-01,-1.22889284e+00,-2.64104015e-01,-4.34251063e-01,-2.70258541e-01,-8.38994180e-01,1.63492425e-01,-5.06156350e-01,-1.69172182e-01,-1.12780197e+00,-1.00050618e+00,7.98515722e-01,6.31813532e-01,-4.25501626e-02,-4.72968496e-01,-2.03620536e-01,-1.86708589e-01 -contig-1042000000,1.03482391e+01,-4.71368943e-01,-2.21834739e+00,-2.13535791e-02,1.82247798e-01,3.24085135e-01,5.98045288e-01,-1.13102892e+00,9.25737880e-01,-8.54554380e-01,7.13350681e-01,-8.91860451e-01,-9.11815992e-02,-3.77784708e-01,-5.90612442e-02,-1.73947010e-01,9.20361333e-01,-6.03614048e-02,-9.54696977e-02,4.00836530e-01,-9.44678280e-01,-1.47861544e-01,7.18512448e-02,-3.10626187e-01,1.34543464e-01 -contig-119000000,-5.75253181e-01,3.38243847e+00,7.47281721e-01,2.75229427e-01,1.00891985e+00,-4.00091545e-01,7.45510561e-01,1.18431436e-01,-2.27123102e-01,-3.85956905e-01,-7.35673403e-01,1.21545141e+00,8.07732013e-01,1.00095792e+00,-1.37464275e-01,2.10887820e-01,4.94206375e-01,8.58014003e-02,-2.54843704e-01,-1.33590055e-01,4.94515791e-01,-9.65382942e-01,4.59202031e-01,4.21014096e-01,-2.98114003e-02 -contig-527000000,-2.71094074e+00,-3.72786816e+00,2.35716740e+00,1.31835617e-01,4.20029817e-01,-4.88630508e-01,-2.74879371e-01,-1.24410797e+00,1.61744659e+00,6.59159427e-02,-4.10981741e-01,7.25101327e-01,1.78436909e-01,-2.78182521e-01,5.33651378e-01,-2.33846107e-01,-2.90928056e-02,1.22436133e-01,3.07722419e-01,-3.80292861e-01,-1.47918632e-02,-9.68406278e-01,-4.40858465e-01,4.41719397e-02,-1.87997270e-02 -contig-310000000,-8.04961028e-02,4.35654103e+00,7.62551511e-01,-5.99544066e-01,4.72011568e-01,-9.65635826e-01,-1.19913334e+00,3.56140901e-01,-4.66582407e-01,3.46336851e-01,-1.50765148e+00,2.53692335e-01,-3.68090145e-01,2.60632379e-03,6.00335988e-01,-9.36307258e-01,4.56456381e-01,-9.16389541e-02,9.96541059e-03,-4.03845991e-01,1.86719466e-01,3.24430248e-01,-7.61267239e-01,-1.70316621e-01,-4.29144513e-01 -contig-6000000,-7.66815022e+00,-2.20356531e+00,-5.02258366e+00,7.24341799e-02,-5.95038060e-01,2.84821211e-01,7.14807484e-01,3.97714571e-01,-2.03799846e-01,-2.77738248e-03,3.36438669e-01,2.44039966e-01,-5.28280222e-02,-1.54676217e-01,1.71219726e-01,-9.65812713e-02,3.33613739e-01,1.73170494e-01,-3.89209062e-01,-8.95083268e-02,-2.59764003e-01,-1.87859959e-01,-5.21336239e-02,-1.84657876e-01,4.22149710e-02 -contig-4941000000,-6.73240516e+00,-4.10844390e+00,-9.71594781e-01,7.64764774e-01,-2.10609912e+00,-2.08644437e+00,4.66714719e-01,7.92078051e-01,-1.10756460e+00,-1.84243534e-01,-6.92089155e-01,4.57707448e-02,-3.76682250e-01,3.16840479e-01,-8.08555863e-01,5.16505161e-01,-8.79828162e-01,-2.39956270e-01,1.90524459e+00,9.04055760e-02,-2.30846172e-01,2.70931438e-01,6.55670512e-01,7.90924713e-01,4.83614111e-02 -contig-43000000,-7.33603074e+00,-3.12649766e+00,-3.86882790e+00,-3.47637500e-01,-3.02151903e-01,-7.12224455e-02,5.25414292e-01,4.89995677e-01,-2.45232052e-01,-1.19329899e-01,1.63463353e-01,-1.69726545e-01,-7.33701304e-02,-1.06169952e-01,1.32184458e-01,-5.31858468e-02,3.10506530e-01,-8.26086537e-02,-3.18356615e-01,-7.58027525e-03,2.70859436e-01,4.73681391e-02,1.03559980e-01,-5.20991161e-02,-8.67306035e-02 -contig-384000000,-4.53014356e+00,-3.93537999e-01,-2.28087429e+00,7.77232767e-01,2.54381261e-01,4.51590212e-01,-2.98422600e-01,-3.84294667e-01,-4.86941031e-02,3.98685112e-01,-2.43414003e-01,-3.66683931e-01,2.11569793e-01,-1.51401559e-01,1.10730649e-02,-1.81676209e-01,6.21295121e-02,-4.97476342e-01,2.71605814e-01,3.50599866e-01,8.20550618e-01,-3.67250845e-02,-6.55168543e-01,3.38255590e-01,3.39687243e-01 -contig-483000000,-2.74369167e+00,-1.43137009e+00,3.88538895e-01,1.39626016e+00,2.79442162e-01,2.49443221e-02,-1.57175726e+00,-1.55248123e+00,7.03810131e-01,-8.62515833e-01,-4.21853462e-01,1.19422288e+00,5.08635204e-02,5.27987430e-01,-2.01473135e-01,1.09503639e-01,7.38893225e-01,-3.86480082e-01,5.36505107e-01,1.20590674e-01,2.71820934e-01,3.70184998e-01,-3.57144545e-01,-2.19571039e-01,-3.82138202e-01 -contig-4932000000,1.54769852e+01,-5.21432962e+00,-3.99828962e+00,-9.40418927e-01,-7.50220123e-01,2.93524940e-01,-2.12017765e+00,2.69893764e-01,-7.84961114e-01,-1.13398085e+00,-1.99940783e-01,-2.69825273e-02,-6.58233323e-01,-3.43755998e-01,5.96425951e-01,-5.91515404e-01,-5.25099802e-01,-2.62738505e-01,-3.08192295e-01,-5.69564942e-01,-7.17519397e-01,-3.62664713e-01,-3.03658798e-01,9.20774089e-02,-3.38381697e-01 -contig-75000000,-8.19973429e+00,-3.49885764e+00,-4.84835982e+00,-4.81648409e-01,-8.89493601e-01,5.50440832e-01,9.24188884e-01,8.17247833e-01,-4.18621791e-01,-3.04356363e-02,4.21143455e-02,-1.48935514e-01,-6.21687790e-02,1.73824540e-01,1.15490066e-01,-1.16806003e-01,1.11952124e-01,5.46174990e-02,-3.55889821e-01,5.28111598e-02,4.37384412e-03,-1.51061799e-01,9.84187159e-02,-2.68708755e-02,-1.62863390e-01 -contig-666000000,-3.70940385e+00,-4.77564320e+00,1.50903116e+00,1.44592041e-01,6.51449278e-01,1.63578425e-01,-9.20086027e-02,-1.28403487e+00,1.62266788e-01,3.06383758e-01,-2.63620614e-01,4.34849265e-03,-1.18555511e-01,4.37021111e-01,5.58303413e-01,2.28783473e-01,-4.74616862e-01,7.89337892e-01,3.76678912e-01,6.15533719e-02,-3.78304573e-01,-4.52819403e-01,-8.20969389e-02,-2.23018914e-01,-4.41324174e-03 -contig-106000000,1.97958015e-01,1.62869528e+00,2.66965099e+00,-1.07396637e+00,-5.27466797e-01,1.53701886e-02,8.41417659e-02,4.75735272e-01,-2.05680080e-01,5.18184498e-01,-4.05741997e-01,-9.57880717e-01,1.56553196e+00,1.06583384e+00,9.32340257e-02,9.32191971e-01,-1.31965795e-01,-2.70022751e-02,-4.69342989e-01,4.22976959e-01,2.51290738e-01,-2.14106014e-01,-4.36596892e-01,7.80115698e-01,1.03804400e+00 -contig-4105000000,1.40516143e+01,-2.37451412e+00,-6.23312047e+00,-4.82836996e-01,-3.52596635e-02,-1.39988485e-01,-1.03246760e+00,7.23880157e-01,-3.17781965e-01,-4.23067271e-01,-2.96628387e-01,4.35749158e-01,-3.79217016e-02,-4.02676112e-01,8.13646100e-03,-1.82655253e-01,-9.29418893e-02,3.01401600e-01,1.29901780e-01,-1.73155800e-01,5.17043396e-02,-9.86231298e-02,-1.53844332e-02,-7.31619539e-02,-2.20396195e-01 -contig-359000000,-3.84839722e-01,4.45187834e+00,8.43155348e-01,8.72583105e-01,-9.07224093e-01,3.37206149e-01,6.48477696e-02,3.24566510e-01,8.06988770e-01,-1.04708185e+00,4.00725762e-01,1.75016562e-01,2.47053991e-03,2.27176591e-01,-2.43157177e-01,2.21723690e-01,1.00163217e+00,-1.17006884e+00,-5.39913788e-01,-2.89229449e-01,-5.48509980e-01,5.93233689e-01,-1.24484846e+00,4.51432649e-01,-9.75306198e-01 -contig-185000000,-6.43948051e-01,3.64484762e+00,1.35835266e+00,-9.06517902e-01,3.62956772e-01,-1.49373931e+00,-1.68741656e-01,3.38284697e-01,7.32691445e-01,-9.21426405e-01,1.61076492e+00,7.25864351e-02,1.75684216e+00,2.45384201e-01,-2.92689023e-01,-1.73650227e+00,1.97385138e-01,-1.04614950e-01,2.36464860e-01,-4.33946265e-01,-5.75320419e-02,-2.97188540e-01,4.74614000e-01,-1.03173596e-01,-7.29669719e-01 -contig-319000000,-3.27908337e-01,4.35885394e+00,1.00468099e+00,5.94486952e-01,-2.47204708e+00,1.14553558e+00,-7.36155105e-01,-6.22106532e-02,1.67759725e+00,-2.58782430e-01,-5.76538392e-01,5.87175516e-01,1.64056160e-02,-5.19176545e-01,-2.16480380e-01,5.60190984e-01,-8.19195182e-02,-2.51687774e-01,-1.65869624e-01,3.65062827e-01,7.13091376e-01,3.77321052e-01,8.75991187e-02,-9.86582671e-01,-5.30923390e-01 -contig-356000000,-2.54432004e+00,-3.94262642e+00,2.55450713e+00,6.93876798e-01,7.58228445e-01,-1.26532359e-01,-1.30739817e+00,-4.78796773e-01,-6.09738728e-02,9.92840064e-01,-3.42192432e-01,-4.24693734e-01,-1.84161719e-01,-5.49624977e-01,-3.44209402e-01,-8.98060622e-01,-3.35134919e-01,-1.30290823e-01,2.68802312e-01,3.55574082e-01,2.57534649e-01,1.13082608e+00,-1.35040396e+00,4.02657826e-01,1.70619789e-01 -contig-460000000,-2.05741985e-01,3.33657236e+00,1.45496415e+00,-8.77567087e-01,-2.72970633e-02,-8.26430645e-01,-8.60854214e-01,2.38728835e-01,5.20109545e-01,-2.05886390e+00,5.43767806e-01,3.68549776e-01,4.90394699e-02,-4.38353543e-01,2.88600923e-02,3.42596228e-01,1.35460398e+00,7.95533163e-01,3.54337622e-01,1.94894850e+00,4.34758802e-01,-4.08241101e-01,-3.89677145e-01,-1.43475814e+00,5.70952674e-01 -contig-276000000,-1.41236877e-01,6.40609212e+00,-1.23107699e+00,-8.80949005e-02,-8.00906200e-01,2.99276032e-01,-1.14330028e+00,1.33457171e+00,7.04961841e-01,1.98020188e-01,1.16330155e+00,3.01242902e-01,-8.21018937e-02,-9.54200274e-01,5.69455970e-01,1.93968227e-01,-1.77233062e-01,1.19915454e+00,5.24131548e-01,-1.24269847e+00,-4.96371640e-02,-2.86772306e-01,5.61670907e-01,7.39818991e-01,-1.62277331e-01 -contig-4040000000,-4.46906109e+00,-3.80516178e+00,-1.06826296e-01,4.46108871e-01,-4.40900331e-01,4.72419509e-01,-2.96343522e-01,-7.40451045e-01,1.25086891e+00,-6.72273403e-01,-2.53413206e-01,-3.86711505e-01,-9.43570280e-02,-1.38232917e-01,1.06867122e-01,-2.21409430e-01,-3.04551368e-01,5.04011825e-01,9.52692926e-02,-1.40288682e-01,-2.78497057e-01,2.17617030e-01,-2.31551716e-01,3.78379141e-01,7.62325198e-02 -contig-680000000,-2.83063321e+00,-1.68675419e+00,4.54566891e-01,7.61661196e-01,2.03127347e+00,-1.05520754e+00,-2.15731642e+00,-9.77341461e-01,-1.06735831e+00,1.30014495e+00,-2.15322812e-02,3.19320246e-01,2.96837462e-01,-3.07611553e-01,-5.00675024e-01,2.54702385e-01,-1.02115461e+00,1.99455245e-01,-5.97964965e-02,4.82609131e-01,2.64819715e-02,4.52711514e-01,-5.78235298e-01,3.24069554e-01,7.71468460e-01 -contig-584000000,-7.54514984e+00,-2.13234266e+00,-5.17923359e+00,1.02727469e-01,-6.39045458e-01,6.12111812e-01,1.10496870e+00,5.26564202e-01,-3.27043365e-01,-6.20656066e-02,2.92816146e-01,1.60291770e-01,-1.10585634e-01,-9.00902573e-02,5.65747682e-02,-3.71280217e-03,-1.11480158e-02,1.71716639e-01,-2.91327751e-03,3.54643315e-02,9.74446350e-02,-3.45355128e-03,-3.65738433e-02,-6.93625701e-03,-4.34299171e-02 -contig-5000000,1.33348063e+01,-1.52162556e+00,-5.75451540e+00,-4.03688801e-01,-9.80488770e-02,-4.02093182e-01,-3.95233538e-01,1.03697919e+00,-6.84946754e-02,-3.22522702e-01,-5.26753155e-01,2.48738673e-01,1.53992428e-01,-2.15842308e-01,-1.16189175e-01,5.82381795e-02,-2.70014362e-01,-2.10141499e-02,5.24662239e-01,8.85743754e-02,4.90046268e-02,9.13216845e-02,3.64950712e-02,-1.51405367e-01,5.18760195e-02 -contig-141000000,-9.80530326e-02,2.76800066e+00,1.75964767e+00,-5.10353229e-01,8.57044084e-01,1.28791309e-01,2.76641282e-01,-1.25374396e-01,-1.03878886e+00,-9.37606282e-02,5.45586967e-01,-6.29744449e-01,3.00867913e-01,8.33048173e-01,-6.03070497e-01,-8.13936100e-01,-1.12346408e+00,5.34647144e-01,-3.18405110e-01,3.67122512e-01,-3.99851741e-02,-3.49180060e-01,-2.09341103e-01,7.31809328e-01,-6.54526879e-01 -contig-153000000,-1.89315166e-02,5.40874849e+00,-5.47983497e-01,-7.49434803e-02,-1.61432643e+00,1.00653321e+00,9.10103414e-01,2.96193824e-01,1.37271582e+00,1.33134796e+00,4.49193966e-02,8.84121813e-01,-1.06892430e+00,-8.05125271e-01,-6.63653752e-01,2.16261816e-01,1.15948433e-01,4.47390960e-01,-1.36577805e-02,-4.57037006e-01,-9.19782003e-01,-5.18055519e-01,7.63185114e-01,3.98514794e-01,2.46767918e-01 -contig-318000000,4.76731160e-01,4.55975366e+00,1.00195371e+00,-4.19083300e-01,5.02885732e-03,-2.33351932e-01,-1.45567804e+00,3.07888252e-01,4.66608976e-02,3.81178772e-01,2.81025517e-02,7.99961469e-01,2.54441310e-01,5.39990589e-01,8.66396956e-01,7.14201557e-01,-4.42074697e-01,-1.81027271e+00,-1.93022776e-01,-4.37446767e-01,3.32022503e-02,-5.87230272e-01,6.35308052e-02,1.06829471e+00,-5.44920683e-01 -contig-277000000,-7.93670307e+00,-2.94457395e+00,-4.96309611e+00,-3.78303403e-01,-8.01184329e-01,4.41964737e-01,8.29940152e-01,8.85976269e-01,-3.33479810e-01,-6.51963093e-02,3.01347959e-01,-1.05125329e-01,1.98984134e-01,3.50106369e-02,1.16823415e-01,-5.53452174e-02,-2.19558310e-03,2.57402090e-03,-9.41106411e-02,2.12968999e-02,2.84063651e-01,-6.66804201e-02,1.50182025e-01,3.53427224e-02,-1.09983864e-01 -contig-117000000,1.23168752e+00,-1.22193759e-02,3.90141095e+00,-2.16384876e+00,-5.23750014e-01,-4.28506122e-01,-2.86076337e-01,1.00081669e+00,-1.12200720e+00,-1.22103745e+00,-1.21060680e+00,-3.86984673e-01,1.28989545e-01,3.16393802e-01,5.86651128e-01,7.41586670e-01,3.23578121e-01,3.03402604e-01,-1.07851936e-01,-2.90691186e-01,1.24536928e-01,5.55288313e-01,1.38655438e-01,-4.17818564e-01,-9.00716889e-01 -contig-317000000,9.63688376e-02,4.12363073e+00,9.92992807e-01,6.23216961e-01,-3.07617218e-01,1.10087635e+00,-1.10621807e+00,4.31724487e-02,8.23337116e-03,6.51012778e-01,-1.06793727e+00,-1.33860609e+00,2.57109423e-01,-1.81895291e-01,3.79472923e-01,-4.97516932e-01,-1.56340697e+00,-6.15044123e-01,1.17731936e-01,1.28254685e+00,-2.68784871e-01,3.84156612e-01,-3.02040046e-01,8.50767818e-01,-4.95946513e-01 -contig-149000000,-2.25486380e-01,4.55996871e+00,-2.51615775e-02,-1.51205361e-01,1.07175177e-02,2.93019463e-01,9.70922926e-01,2.46379655e-01,-1.00364703e-01,6.09076093e-01,-3.28250450e-01,1.05441806e+00,-4.31474225e-01,7.59884685e-01,-7.75473891e-03,1.14708104e+00,1.32200349e-01,9.52139352e-03,-2.33110972e-01,-5.25706814e-01,-5.98495838e-01,2.81901439e-01,-9.77963934e-02,7.16432250e-01,6.01830025e-01 -contig-197000000,-3.31775519e-01,5.39929234e+00,-1.90903454e-01,6.11445888e-01,-1.09128698e+00,1.21843576e+00,8.01264846e-01,-5.78095394e-01,1.03629322e+00,6.25838011e-02,1.60115157e-01,3.62820842e-01,-3.28342112e-01,-2.50014169e-01,-1.03068113e+00,-1.05263952e+00,-6.97013845e-01,2.97898259e-01,2.51667624e-01,-1.01449379e+00,1.47938660e-01,7.38765591e-02,5.51422393e-01,-5.08035081e-01,5.47299067e-02 -contig-159000000,4.81015398e-01,1.71073168e+00,3.00900380e+00,-1.12068248e+00,1.23807674e+00,-1.92034691e+00,8.33761033e-01,-2.87179321e-02,-1.09228239e-01,-1.51081265e-01,9.40602266e-01,-3.94118857e-01,1.25678973e+00,6.34731571e-01,-1.25652720e+00,-2.68717924e-01,8.18120999e-01,-7.97675685e-01,-1.70685364e-01,7.51481252e-01,-3.64615033e-01,-9.77380673e-01,1.56379813e-02,-1.11678749e-01,-4.19407609e-01 -contig-114000000,-6.31956058e+00,-2.03090856e+00,-3.96871440e+00,3.76281894e-01,-2.33381354e-01,5.04904672e-01,4.60487431e-01,3.12558525e-01,-3.52272249e-01,-8.30814534e-03,1.25841981e-02,1.53113398e-01,8.59371009e-02,2.72066074e-01,-3.09175481e-01,1.06748678e-01,1.54866482e-01,-2.05453128e-01,4.31078579e-01,1.37806014e-01,4.29964744e-01,2.43075426e-02,2.12436380e-01,1.20837249e-01,-2.01031083e-01 -contig-283000000,-1.44434109e-01,5.91616415e+00,-6.25675493e-01,1.38287839e+00,-3.56510203e-01,1.00598091e+00,7.51824733e-01,-9.85949451e-02,-1.41313638e+00,-7.86793328e-02,6.03866234e-01,-5.65402230e-01,2.71516026e+00,-4.75559292e-01,4.73295722e-02,1.28944184e+00,2.89519047e-01,8.34291902e-01,1.85702440e-01,1.69163591e-01,-1.32716915e+00,-9.93548550e-02,-5.33128470e-01,1.06647140e+00,4.56419819e-01 -contig-210000000,1.17418905e+00,-6.70245161e-01,5.56546932e+00,-1.21055367e+00,1.56827459e+00,-1.46601658e-01,1.63190765e+00,-7.18437150e-01,-1.24805262e+00,-2.96226447e-03,2.48825493e-01,-5.45151326e-02,-8.16691426e-01,-4.49719015e-02,1.48117136e-01,-8.75141291e-02,-5.08671388e-01,-4.53835007e-01,1.51926611e-01,-1.26056883e-01,2.43857996e-01,-5.84778161e-01,-3.17400411e-01,-1.38823420e-01,-4.17261942e-01 -contig-251000000,5.16209875e-01,2.52305885e+00,2.48342400e+00,9.21395772e-02,-1.03833720e+00,1.51697959e+00,-2.87928495e-01,-4.91768978e-01,-2.09654713e-01,-4.66512313e-01,-3.53784382e-01,-7.54921698e-02,4.46358141e-01,1.27458192e+00,-8.91819291e-01,-2.65087118e-01,-9.56297436e-01,5.99186900e-01,9.86226242e-02,4.98348441e-01,4.88394781e-01,-4.43874615e-01,-2.04998736e-01,-7.74643032e-01,-1.18861604e-01 -contig-226000000,2.83403165e-01,3.63051086e+00,1.74778298e+00,-1.37429291e+00,-7.80871979e-02,-9.98169455e-01,-8.84544125e-01,-3.10449698e-02,2.00846770e-01,-1.09167945e+00,1.83367396e-02,7.37804465e-01,-5.07974217e-01,-1.05649517e+00,7.41413129e-01,1.27051646e+00,-2.34989442e-01,7.12382074e-02,-6.20343226e-01,7.59888000e-01,-3.51211874e-02,2.81980791e-01,-2.19841555e-02,-4.22984909e-02,-6.61940190e-01 -contig-68000000,-5.77461487e+00,-7.30015021e-01,-3.96035932e+00,7.48421382e-01,-2.38357410e-01,5.67822399e-01,1.75623213e-01,-1.62981083e-01,-3.25215083e-02,-2.65314239e-02,1.43785721e-01,4.09486631e-01,-2.47421674e-01,2.09416501e-01,-1.82075876e-01,1.14847684e-01,3.58876399e-01,-5.34070322e-01,2.95676951e-01,3.20608253e-01,7.71820531e-02,1.72009104e-01,1.02206898e-01,1.16866977e-01,1.51105157e-01 -contig-152000000,-3.21655247e-01,3.74751547e+00,6.84809074e-01,-8.24633304e-01,6.87794326e-02,2.15553815e-01,-1.34399155e-01,8.46162196e-01,4.92956921e-01,-8.89706425e-01,5.27785981e-01,2.71476829e-01,-1.02321846e+00,9.70995178e-02,-1.10090772e+00,6.50227248e-01,-2.97492918e-01,2.11288582e-01,-7.20375576e-01,-1.10600714e+00,-1.33450986e-01,7.83572005e-01,4.67489263e-01,9.58205607e-02,-1.45144397e-01 -contig-85000000,-5.69139415e+00,-2.01579794e+00,-2.68931029e+00,-4.94828186e-02,-5.01473915e-02,1.20105015e-01,-5.90443770e-01,2.73608356e-01,-1.76711659e-01,3.03751832e-01,6.88547148e-02,-4.17066440e-01,1.55799937e-01,1.93008538e-02,7.58629183e-03,3.19560324e-01,1.59741475e-01,2.16412908e-01,7.48914130e-02,3.46857947e-02,2.15224970e-01,-1.61822497e-01,-3.43108110e-01,6.85981733e-02,1.74769002e-01 -contig-24000000,1.54186605e+01,-2.91226821e+00,-7.31212401e+00,-4.87814841e-01,-3.18604892e-01,-3.86075025e-01,-1.66525155e+00,1.02158817e+00,-8.61879343e-01,-9.40694343e-01,-7.54029828e-01,6.44344651e-01,-3.52260569e-01,-7.67750776e-01,8.50329140e-02,-3.63992775e-01,-5.35716913e-01,2.17116804e-02,4.73555601e-01,-2.79321773e-01,-4.19582437e-01,-2.73413281e-01,-4.46919665e-02,-6.00560039e-02,-2.55976921e-01 -contig-1000000,1.48393385e+01,-2.65310634e+00,-7.13914012e+00,-7.01830300e-01,-3.56607594e-01,-1.59994717e-02,-1.20735531e+00,5.92846299e-01,-5.70124138e-01,-9.93324830e-01,-3.65959383e-01,4.70890232e-01,-5.32450936e-01,-9.06616945e-01,1.34163742e-01,-4.29236258e-01,-3.05251163e-01,-1.81732716e-02,3.72824298e-01,-1.33235429e-01,-3.13397601e-01,-2.38223176e-01,-2.45275342e-01,1.36037082e-01,-1.03456678e-01 -contig-175000000,-6.32443787e-01,4.94955951e+00,5.16975348e-03,-6.42908116e-01,9.00686636e-01,-1.41057990e+00,5.59552197e-01,6.97257313e-02,3.85015808e-01,1.15360902e+00,-3.30554718e-01,-1.15763321e+00,-6.63814993e-01,-7.18469708e-01,5.56135289e-01,-1.32878404e+00,4.15737539e-01,-2.54380892e-02,6.77343278e-02,-3.69945271e-01,-2.63835315e-01,-5.94436769e-03,3.93539202e-01,-4.58551392e-01,-4.66996220e-02 -contig-717000000,-3.73050314e+00,-5.12444963e+00,1.68486635e+00,1.74109545e-01,6.59533680e-01,-5.29050375e-01,-3.54421554e-01,-1.76143192e+00,2.80388922e-01,-3.04385064e-01,-4.63792410e-01,5.31398652e-01,1.85616384e-01,-5.11778657e-01,7.88674293e-01,-1.48337967e-01,2.13254033e-01,3.60129772e-01,-3.03391167e-01,-7.60647224e-02,-5.38165663e-01,-6.80733447e-01,-5.74305532e-01,-6.73033871e-01,-2.15245752e-01 -contig-61000000,-5.40321309e+00,-2.02992869e+00,-2.42896746e+00,1.86010754e-02,-9.59047214e-02,4.29703697e-01,-1.24867821e-01,-1.73024356e-01,2.63164557e-02,1.67694302e-01,-1.10751977e-01,-4.18713677e-01,-2.96432142e-01,5.27322012e-02,-1.87836726e-01,5.11709097e-02,-1.57855035e-01,-1.09223589e-01,-1.03469118e-01,2.94703250e-01,-1.09364899e-01,3.62030321e-02,2.80187367e-01,1.63189067e-01,4.02286850e-02 -contig-165000000,-1.10299885e+00,7.22786471e+00,-2.15538594e+00,9.91061032e-01,8.76511399e-01,-4.98633185e-01,1.62611411e+00,1.14845397e-01,-3.52798841e-01,1.25520457e+00,3.92277715e-01,-6.60847935e-01,-4.34440797e-02,-1.88013965e+00,1.58790612e-01,-2.86280648e-02,7.80426790e-02,4.49048055e-01,4.37704859e-01,-6.08539797e-01,1.77298201e-01,-1.08046801e+00,-2.23646385e-01,-1.11528967e+00,-4.42658877e-01 -contig-49000000,-4.92637080e+00,-2.30230216e-01,-2.93880377e+00,5.07145650e-01,3.00166712e-03,-1.94348631e-01,-8.18014307e-01,-2.23210364e-01,4.59136908e-01,3.58316220e-01,2.40364238e-01,1.30040625e-01,8.21849968e-02,-3.59495563e-01,1.79428029e-01,4.31085749e-01,-2.57750512e-01,-3.75556257e-01,-1.42538951e-01,4.12956871e-01,3.83491589e-02,3.60430351e-01,2.89413074e-01,2.44786009e-02,-1.66088789e-01 -contig-223000000,-1.62183427e-01,3.39315381e+00,1.56530985e+00,6.31226060e-01,1.14430853e+00,-8.48118230e-01,4.56065308e-01,-3.61756703e-02,-8.51500166e-02,1.76310978e+00,-1.58793538e+00,6.18563085e-01,-6.96740869e-03,5.21194588e-01,7.11699585e-01,-4.55848921e-01,-3.10332442e-01,-5.55428221e-01,-8.54898670e-01,-1.42832332e+00,6.91524031e-01,4.10836247e-01,-8.72567492e-01,8.22302280e-01,-2.36025280e-02 -contig-113000000,-6.74601141e+00,-2.21899432e+00,-4.06504045e+00,-6.78227351e-02,1.12792075e-01,1.32755734e-01,4.82022672e-01,3.10166429e-01,-3.95926878e-01,-7.80870789e-02,6.84755298e-02,5.08705314e-03,-3.33111248e-01,1.62095904e-01,-1.51362145e-01,4.14700861e-02,9.96321714e-02,-2.81896861e-01,-1.16240161e-01,3.32100003e-02,6.77533102e-02,-4.40168747e-02,3.03691555e-01,9.23854991e-02,-8.09088673e-02 -contig-131000000,4.99024712e+00,-3.62832647e+00,5.47059611e+00,5.73962447e+00,1.39614690e+00,-1.21077992e+00,2.76873254e+00,1.94233028e+00,9.10058245e-01,-4.42613219e-01,-5.30070293e-01,-6.45124983e-01,-8.39038958e-01,-2.59789276e-01,-4.70359732e-02,1.71147412e-01,1.49391940e-02,1.13723207e-02,-5.34790256e-01,3.03281498e-02,-2.52236078e-01,1.06841622e+00,3.73229494e-01,-1.51488631e-01,1.98647043e-01 -contig-255000000,-3.87311932e-02,3.31437623e+00,1.75815925e+00,-3.77071533e-01,-1.32446575e+00,6.62531845e-01,-9.91330781e-01,-4.44388878e-01,4.91560549e-01,4.41908064e-01,-3.23722132e-01,1.18496712e-01,2.93778696e-01,6.44481452e-01,2.42184867e-01,-2.56270844e-02,-8.47515497e-01,-5.97889235e-01,-4.71192468e-01,-1.90940549e-02,2.37511990e-01,9.18994172e-01,-2.61927102e-01,6.50690918e-01,6.87230810e-01 -contig-15000000,-5.15039995e+00,-4.27039399e+00,-4.26153312e-01,-3.49908920e-01,5.42870158e-01,-4.21542990e-01,-8.19523131e-02,-6.62823628e-01,3.62226486e-02,-9.65928857e-01,4.94914325e-01,-6.02531547e-01,1.51747863e-01,-1.18961846e-01,2.27423003e-01,-1.09432547e-01,5.05177366e-01,5.34912719e-01,-2.05635784e-01,-2.33500131e-01,-5.30985365e-01,-1.79005860e-01,-4.92196497e-01,-3.59756303e-01,7.82164049e-02 -contig-48000000,-5.21672781e+00,-3.82972333e+00,-1.01562950e+00,-4.59635414e-01,3.35539147e-01,-1.39968651e-01,-7.76776467e-01,2.83837126e-01,-2.49041190e-02,2.75508753e-01,1.68875609e-01,-1.51398863e-01,-6.91719622e-02,4.56000372e-01,-1.87436366e-01,1.06190119e-02,-1.67595749e-01,1.30273686e-01,-4.81838047e-02,3.04677056e-01,-7.22677240e-03,4.62568151e-02,1.75113852e-02,2.49055608e-01,-2.56620981e-02 -contig-47000000,-5.09091595e+00,-1.16441417e+00,-2.66977881e+00,5.05590897e-01,2.79349374e-01,-6.84491631e-02,-3.10458665e-01,-5.46720191e-01,1.95579749e-01,4.13806509e-01,1.40067133e-02,2.62675795e-01,-5.73780363e-01,1.51594525e-01,2.47295026e-01,2.60260671e-01,-9.40720986e-02,-2.75607806e-01,-9.41912271e-02,-1.64564505e-01,-1.90837568e-02,2.87918254e-02,-2.36927972e-02,1.16104777e-01,4.68177366e-02 -contig-4912000000,1.20924313e+01,-3.05440101e+00,-2.78429410e+00,-4.91209536e-01,2.53564195e-01,5.20226578e-01,-5.45946009e-01,1.31026594e-01,-2.29274061e-01,-3.48575597e-01,2.55709565e-01,-1.79619308e-01,2.76787971e-01,8.69642117e-01,9.27945031e-02,-8.34100273e-03,-5.22818364e-01,-1.86387007e-01,-4.41908873e-01,-6.60604228e-02,1.79166478e-01,1.62804728e-01,2.46916247e-01,-4.74020782e-02,7.27312385e-02 -contig-1194000000,-5.09538574e+00,-2.40061726e+00,-1.33963720e+00,2.00450543e-01,-6.71123309e-01,3.04147162e-01,-1.04598615e+00,-4.73345407e-01,8.89370516e-01,5.18757979e-01,-5.73935732e-01,-3.59151915e-01,6.42332139e-01,-2.55898663e-02,1.49668770e-01,-4.35252738e-01,4.68762014e-02,1.40530686e-01,-7.40682435e-01,-3.51906650e-01,-3.24498217e-01,-3.16502007e-01,-3.94226498e-01,-2.14281479e-01,-1.91025256e-01 -contig-138000000,-5.41935918e-01,3.79701373e+00,9.92683975e-01,-2.92326265e-01,-5.98832895e-01,-4.17111332e-01,-4.97705403e-02,1.09832903e-01,9.85655334e-01,-7.62412190e-01,-1.54025202e-01,-8.60245245e-01,9.44816711e-01,-1.37163630e-01,-1.03204916e+00,-2.99764404e-01,1.11179616e+00,1.53923083e-01,4.30387762e-01,-5.34317025e-01,1.09711226e-01,-5.88119749e-01,-2.82065916e-01,9.68529444e-02,9.77759031e-02 -contig-4910000000,-6.47406330e+00,-4.35175277e+00,-1.64999273e+00,-6.69612896e-01,1.51853915e-01,-1.61974628e-01,-2.49842023e-01,1.81167086e-01,-5.92666332e-01,-2.65247187e-02,4.60551836e-01,-3.96251241e-02,2.60596478e-01,2.10686061e-01,-1.10284280e-01,-5.06585725e-02,-9.97773565e-02,1.75212235e-01,-7.35569510e-01,-2.65165942e-01,-1.35841028e-01,-9.65446092e-02,-2.80719110e-01,4.88022470e-02,-1.36137109e-01 -contig-301000000,2.52420654e-02,5.39712809e+00,3.45258520e-01,-4.00948410e-01,3.67222525e-01,-5.42039991e-01,-6.69472366e-01,1.56792389e-01,-1.51195637e-01,2.15376999e+00,3.90084087e-01,-2.23944116e+00,-1.17333184e+00,-5.50839723e-01,4.54374280e-02,7.36860149e-01,1.39110299e-01,2.65740122e-02,-6.30977796e-01,-3.77091610e-01,2.09849625e-01,-8.58167236e-01,1.17423143e+00,-3.00640835e-01,4.46604973e-02 -contig-28000000,-4.95763650e+00,-2.64412701e+00,-1.40150490e+00,-3.02710755e-02,7.49559520e-01,-5.18929461e-01,-1.95686516e-01,-9.61657389e-02,2.20626072e-01,1.96019535e-01,-2.42920159e-01,-7.18046488e-02,-5.01833354e-01,4.41845069e-01,1.40403362e-01,6.37343235e-02,1.61090778e-01,-2.44651369e-01,2.42570352e-01,-4.85721409e-01,-2.48148931e-01,2.07787588e-01,5.10697253e-01,1.33625283e-01,-1.99163221e-02 -contig-1412000000,-4.53818946e+00,1.63480565e+00,-2.96885010e+00,2.05848579e-01,6.86701383e-01,-6.00466331e-01,-5.00662549e-01,-1.45063200e-01,5.79197662e-01,-4.71162485e-01,6.90942432e-01,-1.84510240e-01,-1.73999372e-01,-1.11279342e+00,1.42315069e+00,5.00509407e-01,9.88202338e-01,2.60206788e-01,9.65261213e-01,1.73941631e-01,-8.93989641e-02,-1.55352091e-01,-2.14745997e-01,-6.16809957e-02,3.95024182e-01 -contig-96000000,-1.25060212e+00,4.44726950e+00,3.14511660e-01,-1.65152972e-01,-1.23160168e+00,7.61886355e-01,7.81121506e-01,-1.75057482e-01,2.37437450e-01,-1.32265490e+00,1.51189884e+00,1.00516490e+00,9.10741332e-01,1.57949776e-01,-2.14411922e-01,-1.24718437e+00,-1.66638066e-01,-6.55262413e-01,-1.49104037e-02,6.55506279e-01,2.41897400e-01,9.73957522e-02,5.60447502e-01,1.11655022e+00,2.13996379e-01 -contig-97000000,6.82080191e-02,4.36556956e+00,-1.20332811e-01,-2.28653539e-02,-2.36338793e+00,1.61946835e+00,-9.31540272e-02,1.66669863e+00,1.85896980e+00,-3.82324499e-01,4.96247938e-01,2.77264657e-02,1.31375086e-01,4.22211598e-01,1.65875036e-01,-3.97814356e-01,-3.50562361e-01,9.27456533e-01,9.59380227e-02,-8.38719940e-02,-2.15786315e-01,5.22533291e-01,1.36440479e+00,6.85021469e-01,-8.38752599e-03 -contig-160000000,-4.22401058e-02,3.77341356e+00,4.87032759e-01,-1.09784954e+00,5.46415712e-01,-4.42309132e-01,2.43313592e-01,3.88706334e-01,-3.10686266e-01,7.39259518e-01,-1.30217279e-01,-2.00123294e-01,-2.14822264e-01,1.46965896e-01,8.10664585e-02,1.79170921e-02,-6.11680885e-01,6.03789423e-01,2.78514051e-01,7.15090524e-01,-1.24994212e-01,2.89019587e-01,-7.10098630e-01,3.37304388e-01,-1.45890902e-01 -contig-1296000000,3.67681924e+00,-2.97976728e+00,3.76512473e+00,-1.18514662e+00,-3.81019293e+00,-8.62321277e-01,1.45621482e+00,-2.78850637e+00,-1.13450714e+00,1.25779684e+00,-1.49207241e+00,2.93940585e+00,9.00543927e-01,-1.05226023e+00,1.21829104e+00,-3.20609765e-01,3.83287738e-01,2.47986287e+00,-7.98856217e-01,5.02257742e-01,3.04667917e-01,1.55714611e+00,1.77378322e+00,1.79419768e-02,-2.22445917e-01 -contig-609000000,-4.24360813e+00,-3.61221564e+00,1.42750394e-01,-7.32336962e-02,4.75774973e-01,-3.54891183e-01,-1.20250641e+00,-2.80241984e-01,5.43059780e-01,2.93003681e-01,-1.63465982e-01,-3.77880768e-01,2.42585022e-01,3.09390039e-01,6.04863338e-01,-1.47208730e-01,-6.92537469e-01,2.30728644e-01,2.78761496e-02,3.01481283e-01,2.93304136e-01,-2.21325876e-02,-4.10129488e-01,1.48404617e-01,1.63296769e-01 -contig-130000000,-1.34223366e-01,4.15464165e+00,5.24549272e-02,-1.16345713e+00,3.06188305e-02,-8.58673799e-01,-3.46247617e-01,1.61460220e+00,4.66457066e-01,4.59017647e-01,-3.70265663e-01,-4.69465311e-01,2.93957681e-01,2.64990735e-01,1.58626423e-01,-6.36167650e-01,1.27082219e-01,3.57888516e-01,5.73516365e-01,1.13559527e+00,-3.37539562e-01,3.36329424e-01,-1.68354899e-01,8.52694424e-02,-4.82619359e-01 -contig-110000000,-6.89660429e+00,-5.07007977e+00,-2.31373295e+00,-9.22752216e-01,-2.18832436e-01,-2.02095808e-01,5.48218939e-01,8.47491931e-01,-9.01713849e-02,-1.65724786e-01,-2.34468134e-01,-4.19042686e-01,9.50205752e-02,2.24848356e-01,-2.39404908e-01,1.49582240e-01,-1.78916520e-01,1.77235808e-01,-1.00565418e-01,9.20036652e-02,5.32238351e-02,2.16111385e-01,1.44293848e-01,7.71653727e-02,-3.97657162e-02 -contig-278000000,3.95765845e-01,5.16391146e+00,-1.82721376e-01,-1.08573492e-01,2.03699295e+00,-2.13372104e+00,-5.69184557e-01,1.03892525e+00,1.31540066e-02,4.51730024e-01,3.83510524e-01,1.45293428e-01,5.32316011e-01,3.18885276e-01,1.09856928e+00,-4.11061701e-01,-1.75658216e+00,-6.38593324e-01,4.72548635e-03,-1.52350990e+00,-2.27254304e-01,-6.68049873e-01,8.72149122e-01,-1.72212543e+00,3.62974371e-01 -contig-281000000,9.98184290e-01,-7.02673014e-01,5.70932830e+00,-1.89748684e+00,-6.71786062e-01,4.51554209e-01,-1.24182919e+00,-1.25356340e-01,-5.01575051e-01,2.76580150e-01,5.01985019e-01,3.95156436e-01,-2.42860165e-01,6.56707712e-01,-2.13173220e+00,5.81418982e-01,4.70178065e-01,-3.10548527e-01,2.44426686e-01,-2.41924976e-01,3.54982084e-01,-1.35001562e-01,-5.39278977e-01,-4.77519441e-01,7.14976325e-01 -contig-193000000,1.18478471e+00,6.62664700e-02,4.36720054e+00,-2.91392153e-01,-2.94223104e-01,5.44934989e-01,-1.99372269e-01,2.71881267e-01,-4.22541580e-01,-2.78624102e-01,-1.19559126e+00,7.49408806e-01,7.36243334e-01,1.30250221e+00,-1.23089119e+00,-8.57554133e-01,-1.06231366e-01,7.44649644e-01,-6.36740332e-04,-7.00930803e-01,-9.42578984e-02,4.54012222e-01,-3.99164054e-01,3.22222587e-01,8.85537010e-01 -contig-224000000,1.12630648e+00,-1.03991172e+00,6.39428439e+00,-1.43192465e+00,5.88711776e-01,-6.74490685e-02,-3.80971622e-01,4.46770902e-01,-1.84245259e-01,5.82002102e-01,2.40784240e-01,-6.78898868e-01,1.01262937e-02,-1.02163094e-01,2.94655775e-01,-8.06571900e-01,-9.63735374e-01,-1.18820283e-02,1.13539243e-01,-8.55821004e-01,-9.37353488e-01,4.57036417e-01,-3.26435168e-01,3.72086666e-02,4.65301405e-01 -contig-302000000,8.51027501e-02,3.61391688e+00,1.32601808e+00,6.86545090e-01,-4.30019715e-01,1.36002088e+00,-5.61151230e-01,-1.29022545e-01,3.94843238e-01,1.62367105e-01,-8.48702807e-01,2.10751067e-02,-2.82766739e-02,6.28526968e-01,-1.26302396e+00,2.82930342e-01,-2.97480885e-01,1.08250176e-01,-4.44937123e-01,1.14810614e+00,-4.40405268e-01,6.51926978e-02,1.20982719e+00,-6.36183449e-01,-2.85763203e-01 -contig-182000000,7.69182206e-02,4.15935728e+00,5.61102829e-01,4.32340861e-01,2.14279101e-01,5.98556399e-02,3.26184579e-01,4.58790733e-01,-5.89466625e-01,-2.63720349e-02,-1.14415860e+00,-1.00671769e+00,1.12117651e+00,-8.91090240e-01,-1.16762548e+00,-5.21318063e-01,-5.13062456e-01,-4.10292634e-01,-7.13107951e-01,3.94874953e-01,-4.93691092e-01,3.90987725e-01,-4.75497804e-01,2.98674996e-01,-1.50974120e-01 -contig-112000000,-3.26472161e+00,-2.18800523e+00,8.90113596e-01,5.17854986e-01,6.21641327e-01,-4.11179858e-01,-1.08817278e+00,-7.29040138e-01,5.90970667e-01,-4.47124849e-01,2.58974925e-01,1.70595258e-01,3.03885734e-01,-8.18172843e-03,1.78378232e-01,-3.47968402e-01,-6.21824873e-01,6.66799793e-01,5.61038392e-01,-2.67063627e-01,5.67728274e-01,7.85548161e-01,-3.50561030e-01,-1.52685654e-01,-1.11965238e-01 -contig-536000000,-4.47488207e+00,-1.40402079e+00,-1.33016416e+00,8.66397692e-01,8.16971049e-01,-2.59667705e-01,-1.30466262e-01,-8.28234108e-01,7.85073321e-01,2.94061582e-01,-5.03979985e-01,1.17771428e+00,-3.36741258e-01,6.15814673e-01,5.94940215e-01,-2.40732131e-01,7.32199687e-02,-1.46150544e-01,-4.31932119e-01,-1.17418516e+00,-2.35220977e-02,-8.90862271e-02,4.53943455e-01,-1.03641422e-01,2.57295149e-01 -contig-4935000000,-5.99435384e+00,-1.85567754e+00,-2.76125354e+00,-4.51372971e-01,-2.22105962e-01,1.40400190e-01,1.01665891e+00,-5.72534845e-02,5.30446370e-01,-8.33379148e-01,3.39678003e-01,2.28245391e-01,7.72063834e-02,4.49025051e-02,2.25978701e-01,-4.52618334e-01,-3.34799780e-01,-3.54597998e-01,3.71990006e-01,5.27578875e-02,2.99334484e-01,2.62689845e-01,3.26762417e-01,-2.55425779e-02,7.52524237e-02 -contig-147000000,-3.23354481e-01,2.97261866e+00,1.64661853e+00,-9.16687882e-01,-4.91263714e-01,-3.24410902e-01,1.80634421e-01,-6.64425983e-01,7.73033199e-01,-1.05386944e+00,1.12068483e-01,1.10945189e+00,-7.06407122e-01,-1.20708570e-01,-1.72582609e-01,5.66110241e-02,-1.55084590e-01,5.70224530e-01,1.62475141e-01,8.09854491e-01,1.81612755e-01,-4.02528302e-01,-3.54339344e-01,7.24426324e-01,7.12043263e-01 -contig-45000000,1.24723061e+01,-2.77432737e+00,-1.61527844e+00,-8.87312078e-01,-3.68908958e-02,-1.65584386e-01,1.37979982e-01,2.22544051e-01,-1.78318592e-02,1.34970791e-01,1.97046564e-01,-1.85740259e-01,9.13311388e-02,5.47503818e-01,2.92540523e-01,1.03277996e-01,-6.73551625e-01,-1.92974432e-01,1.09143462e-01,-2.04674807e-01,-1.55336963e-01,6.66642945e-02,-3.97480343e-01,-2.39827210e-01,1.64393937e-02 -contig-378000000,1.14152207e+01,-2.06012329e+00,-2.20072165e+00,-1.06788774e-01,4.43146103e-02,8.98444539e-01,1.91028584e-01,-3.57107873e-01,4.51721176e-02,-2.68456004e-01,-2.84654259e-01,-1.02037585e-01,-4.46389692e-01,5.52536732e-01,-1.60849044e-01,-2.44584408e-01,2.10432488e-01,-1.19095634e-01,-3.77134908e-01,2.07150703e-01,-3.36927122e-01,-7.12538944e-02,-1.13640759e-01,7.13684288e-02,-2.33413988e-02 -contig-200000000,1.19443253e+01,-3.58083779e+00,-5.93776453e-01,-6.88923234e-01,-2.61246973e-02,4.12380634e-01,7.33769818e-02,-8.35098264e-01,-1.96639358e-02,1.97436295e-01,6.17357593e-01,-4.62300884e-01,-1.40758712e-02,9.30908480e-02,2.58973266e-02,-5.90477444e-01,2.90458856e-01,-8.43219110e-03,-2.98687275e-01,1.51070382e-01,4.84060913e-01,8.34458133e-02,-6.38321696e-02,2.74947142e-01,2.20346911e-01 -contig-201000000,-7.03664658e-01,3.44141112e+00,1.86966090e+00,6.37730216e-01,-5.72331208e-01,-3.88473484e-01,-9.38940910e-01,-4.30352373e-02,5.46559840e-01,-1.15475824e+00,9.88933771e-01,4.74005116e-01,9.87533572e-01,9.62711772e-01,3.97630045e-01,-2.94161537e-01,2.30291132e-01,-3.64172765e-01,-3.51400822e-01,-1.59302526e-01,1.12694908e-01,7.27313612e-01,-3.60222978e-01,-6.46015375e-01,-1.24004138e+00 -contig-60000000,-6.73800335e+00,-3.20901141e+00,-3.21828835e+00,-4.38482694e-01,1.77486264e-01,-1.84519774e-01,4.09954133e-02,6.10939855e-01,-3.66248693e-01,1.88996635e-01,-4.08661446e-02,-1.68268400e-01,-2.27866725e-01,2.17068589e-01,-1.85005063e-01,1.46010034e-01,-1.60927811e-02,1.41795216e-01,-2.52186563e-01,-1.34618477e-01,-9.39868419e-02,8.39076411e-02,2.23802192e-02,4.90234926e-02,9.72903610e-02 -contig-263000000,3.87556447e-04,2.37866798e+00,2.88121714e+00,-5.80786175e-01,9.51268802e-01,-9.96754464e-01,-2.32217255e-01,2.16144143e-01,1.65923202e-01,-3.06730878e-01,6.29504174e-01,8.93799703e-01,5.98712014e-01,9.71656153e-01,-3.49748672e-01,5.49321762e-01,-7.83530180e-01,-1.79103603e-01,-4.01192738e-01,-3.75044804e-01,-3.67709242e-02,6.67874491e-02,-2.83300255e-01,-3.42009422e-01,-3.50642483e-01 -contig-592000000,-4.06753647e+00,-2.79609851e+00,2.29953234e-01,2.90873997e-01,-2.34066163e-01,3.01900082e-01,-1.03845076e+00,-3.26363839e-01,7.80389191e-01,2.35556650e-02,-1.03069955e+00,-4.48384261e-01,2.22660036e-01,2.07718749e-01,-2.80588850e-01,-1.98445640e-02,1.72040653e-01,-9.37851529e-01,-4.27009075e-01,-7.81514628e-02,1.55827514e-01,-4.63251636e-01,6.14673028e-01,1.20387302e-01,3.00887160e-01 -contig-188000000,1.83388796e-01,3.52592633e+00,1.35079409e+00,-8.29979108e-01,1.24537506e+00,-1.12147600e+00,3.44856720e-01,1.79047603e-01,5.16158329e-02,-5.35485929e-02,-2.95316119e-02,1.47167483e+00,-9.96752010e-01,2.16201306e-01,-3.87399410e-01,-3.20620507e-01,-1.80360689e-01,-5.11715601e-01,6.56471451e-02,-5.58827651e-01,-7.78217271e-01,7.75118746e-01,-3.31497104e-01,9.59867694e-01,1.17776923e-01 -contig-349000000,-9.66670077e-02,5.34559714e+00,1.60742972e-02,3.82463328e-01,-1.75248100e-01,1.07391278e+00,3.85801171e-02,-6.65594332e-01,-2.58754800e+00,1.37485685e+00,-7.13491016e-01,-1.56639545e+00,1.88295337e-01,3.10578705e-01,8.63540038e-02,-9.35374024e-01,-3.17089215e-01,-1.54735136e-03,-8.49834742e-01,9.03253665e-01,1.19079081e-01,1.48472271e+00,4.82507410e-01,1.89001692e-01,5.16374888e-01 -contig-227000000,-9.04371787e-03,4.70037797e+00,4.89005362e-01,-4.26052478e-01,1.22363283e+00,-6.21624723e-01,-6.97346520e-01,-2.02262145e-01,-1.30089815e+00,1.29936160e-01,8.75505657e-01,-1.45652256e+00,1.18584937e+00,7.11035497e-01,1.40818661e+00,-7.75581927e-01,-5.15959596e-01,2.83973573e-01,1.24444070e+00,-1.42678199e-01,7.37088306e-01,-1.31180620e-01,3.97263723e-01,-2.42906115e-01,2.87877002e-01 -contig-120000000,-4.52450246e-01,2.33075878e+00,1.84282708e+00,-4.00890220e-01,-2.10365743e-01,-1.81150761e-01,-2.67545620e-01,2.74588677e-01,1.80058993e-01,-1.59552829e+00,6.42912993e-02,4.29351779e-01,7.50826280e-01,1.20341936e+00,3.30271363e-01,7.16118886e-01,-2.28882850e-01,3.13239346e-02,5.14833492e-01,-6.34906007e-02,-7.29205607e-01,4.81502798e-02,-8.31290883e-01,-2.27464444e-01,2.07502517e-01 -contig-183000000,-8.99048948e-01,5.95429182e+00,-8.21289983e-01,1.31615078e+00,-6.33559495e-01,1.37947463e+00,5.14907680e-01,-2.38138284e-01,-1.28615310e+00,-3.13115360e-01,6.38712193e-01,-2.69331742e-01,1.34983676e+00,-3.05584255e-01,1.42437969e-01,1.05774502e-01,-6.40313130e-01,8.73573939e-02,1.96978135e-01,2.45317546e-01,5.04873183e-01,-8.71665165e-01,-2.95164944e-01,-2.08487907e-01,-8.44006703e-01 -contig-35000000,1.22651344e+01,-4.22397724e+00,-4.36513290e-01,-6.19617794e-01,3.07397793e-02,4.22245730e-01,-4.97681967e-01,-3.72212055e-01,-2.81193940e-01,-6.05788082e-02,6.77491379e-01,2.10466077e-01,-6.05579235e-01,8.79379418e-01,2.16308876e-01,-3.59980326e-01,9.68219604e-01,1.81120165e-01,3.02235706e-01,-2.25362049e-01,2.09641998e-02,2.80480014e-01,9.72769112e-02,-6.22698321e-02,1.23652013e-01 -contig-132000000,1.26905766e+00,-3.24926971e+00,8.15547973e+00,-1.67169139e+00,-3.20189670e-01,6.24357867e-01,2.85971395e-01,2.70943544e-01,-5.49501423e-01,2.60962070e-02,6.99460722e-01,6.34433493e-01,4.83255414e-02,-2.40275055e-01,8.24520814e-01,-1.41725414e-01,-1.98340323e-01,-4.21295307e-01,-3.70702301e-01,3.14802717e-01,8.66074126e-02,-1.34067000e+00,7.18634659e-02,8.00523059e-01,-5.81284991e-01 -contig-163000000,-5.80947569e-01,3.19816498e+00,1.60170188e+00,-5.55313060e-01,6.67838416e-01,-4.19006676e-01,-7.56347632e-01,9.97924515e-01,-2.39305719e-01,8.50755607e-01,1.22649426e-01,-9.53292720e-01,6.79582507e-02,6.61096031e-01,2.96433808e-01,-4.89734449e-01,-5.58625327e-01,-3.20988458e-02,-8.88019851e-02,6.85885348e-01,-2.59815919e-02,-3.30021704e-03,-5.42090754e-01,5.02894908e-01,-1.05082222e-01 -contig-14000000,-5.80233668e+00,-3.17824188e+00,-1.81391471e+00,-3.10954232e-01,2.06200413e-01,-2.88769338e-01,2.23585030e-01,-5.48723132e-01,1.14318283e-02,-9.03105235e-01,5.85043756e-01,-1.52564226e-01,1.51557514e-01,-1.20983255e-01,2.13922872e-01,-3.04238697e-01,3.24782035e-01,3.12124625e-01,-4.55972777e-02,1.23876353e-01,-2.96404890e-01,-1.37069960e-01,-2.59356126e-01,-1.46513714e-01,2.40194669e-01 -contig-67000000,-5.75936062e+00,1.96891505e-02,-4.05944796e+00,8.54894728e-01,-1.96698462e-01,6.85660350e-01,-1.23952044e-01,-1.61650391e-01,-3.56227087e-01,3.57287563e-01,4.39445473e-01,2.92135868e-01,-3.30734907e-01,-1.51090010e-01,-2.20330558e-01,-2.40787432e-02,-1.95815657e-01,-4.59643298e-01,9.62334201e-02,6.58562227e-01,5.56666097e-01,8.24466297e-02,4.52119262e-01,3.38052437e-01,-2.96907404e-02 -contig-559000000,-3.84654823e+00,-2.46916282e+00,1.17240314e+00,7.24337211e-01,-1.71726439e+00,-2.46780960e+00,-1.83493264e-01,-7.64731155e-01,-2.66690138e-01,-2.23765260e-01,-1.12870235e+00,2.52900519e-01,1.44031386e-01,-3.07767122e-01,-7.24071428e-01,9.25793911e-01,-8.80000384e-01,-3.96320575e-01,2.34131642e+00,3.02834109e-01,3.20887202e-01,6.76725818e-01,1.30716415e+00,1.24403480e+00,-3.50684172e-02 -contig-36000000,-4.57879993e+00,-5.37737662e+00,1.28782507e+00,-5.98288530e-01,6.02864408e-01,3.93222913e-02,5.76835714e-02,-3.20414177e-01,-4.72253010e-01,-4.12671700e-01,3.24632740e-01,8.06091857e-02,7.96186326e-02,1.90461687e-01,-5.91373776e-02,-5.12132313e-02,-5.51739107e-01,2.08561870e-01,-3.17651149e-03,8.63500854e-02,-2.20711262e-01,-1.02639479e-01,8.02586881e-02,1.57736666e-01,9.96305122e-02 -contig-164000000,5.70586832e-01,1.26656522e-01,4.97939313e+00,-2.52054237e+00,3.61820007e-01,-1.75458575e+00,-4.90119749e-01,8.76149657e-01,8.61212045e-01,-9.21917790e-02,-2.31767914e-01,-1.38778500e+00,-8.62643633e-02,-9.10596080e-01,-1.20510413e+00,-1.09534952e-01,3.43172042e-01,3.40755774e-01,-9.00363226e-01,-5.39218331e-01,4.21144366e-01,1.19658729e+00,7.72349862e-01,-5.31897732e-01,2.16418340e-01 -contig-815000000,-3.23901521e+00,-8.94251289e-01,4.75186749e-05,9.58069128e-01,5.26496718e-01,1.12725788e-01,-2.07376446e+00,2.02205855e-01,4.21960045e-01,5.95241820e-01,-1.11372045e+00,-6.24419743e-01,9.87962469e-02,3.90757992e-01,-3.95816281e-02,-7.47021998e-01,3.05292882e-01,-5.32413408e-01,2.57030951e-01,8.66143196e-01,8.63660957e-01,2.11556887e-02,4.45604465e-01,-5.50451737e-01,-6.38740575e-01 -contig-4894000000,1.01223556e+01,-9.03460970e-01,6.35386882e-01,-4.68129668e-01,2.45533844e-01,-8.37881244e-01,2.07008564e+00,-8.43479453e-01,1.04563151e+00,8.11890979e-01,6.85600116e-01,1.54476436e-01,-5.65682661e-02,-9.50340789e-01,-1.31166051e+00,-5.55391448e-01,2.03812002e-01,-1.80613467e-01,-6.82614841e-01,1.38495233e-01,1.96087330e-01,-1.12132416e-01,-4.66588470e-01,1.89950388e-01,-3.56184934e-01 -contig-90000000,-1.39019287e+00,4.28949473e+00,1.37070792e-01,-4.03272213e-02,-1.79871331e+00,7.03684437e-01,2.70206677e-01,2.35370553e-01,1.16748138e+00,-5.18658633e-01,-3.95216132e-01,1.74445889e-01,-2.13837918e-01,2.79246232e-01,-1.22247380e-01,-7.18704092e-01,-4.06994015e-02,-3.11038848e-01,-8.18543292e-01,-1.09438182e-02,3.93179637e-01,2.84947471e-01,-3.66910389e-01,4.07359868e-03,1.01437079e+00 -contig-51000000,-4.98439662e+00,-4.93873653e+00,7.60167333e-02,-1.45649627e-01,-6.30033676e-01,4.10012946e-01,-5.41587238e-02,1.47886781e-01,9.90078717e-01,6.86604508e-01,-8.85538031e-01,-1.56427852e-01,2.00421975e-01,3.81890247e-01,1.51908937e-01,-2.58839174e-01,-2.78173794e-01,-1.12527147e-02,1.76643991e-02,-4.44084337e-01,-4.55626805e-01,-5.97588243e-02,-2.42960406e-02,2.90377582e-01,-1.66860417e-01 -contig-58000000,-4.69866602e+00,1.85323450e-01,-3.17607043e+00,5.98239607e-01,1.50734287e+00,-8.79371280e-01,-1.32226378e-01,-2.49039122e-01,-1.08736503e-01,8.17131004e-01,5.88561906e-01,1.02629573e-01,-6.98192011e-01,-4.90397608e-01,-8.13745742e-02,-3.44273188e-02,3.48286296e-01,3.04482614e-01,5.18197882e-01,7.22653149e-02,-3.64308244e-01,1.19925323e-01,-1.22179959e-01,3.14008268e-01,6.94117104e-01 -contig-186000000,-5.64082091e-01,4.41953824e+00,3.47731767e-01,3.44222229e-01,3.70173102e-02,-8.50690021e-03,1.43771574e-02,-2.91632222e-01,-5.57503110e-01,5.73552162e-01,-2.48971645e-01,-1.07168480e-01,3.26847065e-01,6.44217268e-01,1.58550050e-01,-9.70461387e-01,-3.75584779e-01,-8.24350310e-01,-6.34797456e-01,-7.88504120e-01,8.32462940e-01,1.60858027e-01,2.42371669e-01,-5.55594736e-01,2.04198461e-01 -contig-99000000,-5.42973211e+00,-5.11992801e+00,3.40818474e-01,-1.87191349e+00,2.44659880e-01,-3.44446859e-01,4.47898694e-01,1.02397771e+00,1.06231627e-01,5.66797498e-01,2.03085964e-01,-4.50863115e-01,3.20522824e-02,1.20064192e-01,-1.21209022e-01,3.85192851e-01,-4.68235500e-02,1.58377729e-01,4.25274323e-01,-1.99069220e-02,1.84371315e-01,1.21151981e-01,-1.49014585e-01,-9.92649785e-02,-1.50514387e-01 -contig-4933000000,1.46759135e+01,-2.21358037e+00,-7.28779828e+00,-4.09807043e-01,-1.63771660e-01,-2.13031966e-01,-1.16563370e+00,9.85313495e-01,-6.86337359e-01,-5.58279005e-01,-5.49442627e-01,5.19473876e-01,-3.03607449e-01,-7.67579364e-01,1.31260986e-03,-2.14627124e-01,-5.71824950e-01,3.96104879e-02,3.88819910e-01,1.31146794e-01,-4.36597765e-02,-1.41174565e-01,-2.13002661e-02,-5.36871652e-02,-1.89600232e-01 -contig-589000000,1.04568540e+01,-4.29802711e-01,-2.84481215e-01,1.37815556e-01,5.92815136e-01,-8.86004821e-01,1.87242082e+00,3.67254854e-01,5.38002288e-01,4.39174816e-01,-2.66563208e-01,1.06781444e+00,5.08720940e-01,1.58324927e+00,5.61021767e-01,1.58923669e+00,-9.52802996e-01,-1.29036672e-01,9.67010723e-01,2.41433275e-01,2.47317143e-01,5.56076134e-01,-5.34594118e-01,-3.26759553e-01,2.20628869e-01 -contig-91000000,-3.02754399e+00,-2.65813499e+00,7.87046659e-01,3.53277909e-01,1.95024534e+00,-6.92541283e-01,-4.60221142e-01,-1.11883118e+00,-1.17052083e-01,1.34595403e-01,1.93763462e-01,2.42679426e-01,-3.17806762e-01,-8.77012052e-02,2.49574304e-01,6.24391250e-01,-2.58538720e-01,-1.36600953e-01,-1.60997503e-02,9.60287132e-02,-1.60571739e-01,2.78939553e-01,2.39413122e-01,6.05971327e-01,-1.58518974e-01 -contig-66000000,-5.50309642e+00,-2.63546170e+00,-2.40030076e+00,2.26627810e-02,3.11198300e-01,9.73215774e-02,2.84800518e-01,3.09953652e-02,-1.37885866e-01,8.14542287e-02,-5.58729855e-02,-1.84971678e-01,-2.66467603e-01,1.90309713e-01,6.49375320e-02,5.32050124e-01,-2.80761519e-01,-8.50507455e-02,-1.00942150e-02,-1.31987880e-01,2.25301992e-02,7.07004499e-02,3.25195990e-02,2.70379296e-01,-2.36878749e-01 -contig-146000000,-6.73923278e-01,6.47727987e+00,-1.66815537e+00,-6.44599056e-01,-2.72169317e-02,-1.62438768e+00,-8.18341578e-01,8.19565175e-01,-3.61718486e-01,7.27472230e-01,-3.81283327e-01,5.88627779e-01,2.70891393e-01,-7.12474697e-01,1.30282337e+00,-6.10852570e-01,7.10658407e-01,-2.28501655e-01,-1.88347171e-01,-1.16654908e+00,3.95440123e-01,9.66984014e-02,-1.06488891e-01,-4.57080734e-01,4.36127723e-01 -contig-306000000,-3.57980996e-01,5.98090905e+00,-2.39404192e-01,1.65124185e-01,-6.95466588e-01,1.56543554e+00,-1.05829477e+00,3.72465628e-01,-7.25903329e-01,1.24842815e+00,1.38730650e+00,-1.50969386e-01,-8.09313137e-01,-1.13150289e-01,-7.06442472e-01,4.14493583e-01,-1.06397070e+00,-4.94709255e-01,1.07079468e-01,-4.49543510e-01,-3.97457771e-01,6.34742594e-01,9.74977509e-02,-3.73649494e-01,6.14626287e-02 -contig-2866000000,-5.07111129e+00,-2.09076589e+00,-1.62642190e+00,-3.43976821e-02,3.28308815e-01,-7.30871938e-01,-3.96054965e-01,-4.98338486e-01,2.16297319e-01,-8.59026936e-01,2.51254814e-01,-9.54242584e-02,5.65040380e-01,-2.62036980e-01,3.17924183e-01,-3.89194520e-01,6.64575991e-01,-4.22626266e-01,1.05389299e-01,6.12144182e-01,-1.68958830e-01,5.58503527e-01,5.77024578e-02,-5.59812716e-01,4.09770111e-01 -contig-364000000,-4.05438936e+00,-2.99942488e+00,5.49366331e-01,-2.82372072e-01,5.95927767e-01,9.82337889e-04,5.15946766e-02,-5.97833950e-01,6.46242278e-01,-1.20076690e-01,-2.83045148e-01,-3.63062706e-01,-9.86631501e-02,2.41216174e-01,4.82416456e-01,1.23496629e-01,-4.81761565e-02,4.14926656e-02,3.31667943e-03,-1.41486485e-01,-5.59573816e-01,-5.25845487e-01,-5.27242173e-02,-2.35703332e-01,-1.28271440e-01 -contig-192000000,-1.67305401e-01,5.13147915e+00,-6.44124454e-01,7.73586991e-01,-5.15584646e-02,-2.60500341e-02,6.73431418e-01,-3.76296956e-01,-1.83873285e-02,6.37471977e-02,-1.80008961e+00,-5.27886173e-02,1.26798335e+00,-6.61392101e-01,2.24496822e-01,7.80427915e-01,8.00958950e-01,5.15366087e-01,-1.02468150e-02,-1.42211003e+00,-3.39497165e-01,-3.72915935e-01,-7.73089935e-01,3.44162786e-01,1.00335700e-01 -contig-299000000,-3.54686083e-01,4.97642509e+00,3.66684652e-01,2.15019020e+00,-1.00804012e+00,2.10254930e+00,-6.34106606e-01,-1.11175101e+00,-6.64030714e-01,-5.22396940e-01,-1.02050143e+00,-1.12103818e-02,-4.07841673e-01,-6.59630909e-01,1.00404732e+00,1.07783830e+00,-1.39205462e-01,3.11762333e-02,-2.02083246e-01,-1.81258093e-01,1.42376940e+00,-6.29742437e-01,-6.11730577e-01,4.28925088e-01,-2.40052171e-01 -contig-308000000,-1.38221255e-01,5.56599499e+00,-1.80503491e-01,8.38809519e-01,-6.61342508e-01,7.25102969e-02,9.02761176e-01,-1.19866665e+00,9.82446945e-01,4.86321856e-01,-7.06487387e-01,3.97545138e-01,-6.98057089e-01,-1.16738209e+00,1.16233130e+00,-7.77649305e-01,-1.45245536e-01,-4.34205596e-01,-5.56182040e-01,-2.63142964e-01,3.02086115e-01,-4.54210496e-01,1.60936851e-01,4.55268549e-01,5.43689279e-01 -contig-265000000,1.26471681e+00,-2.06751484e+00,7.52957472e+00,-2.62495010e+00,1.07464026e+00,-2.01144250e+00,-1.70111986e+00,2.91834922e+00,1.74265414e+00,1.92295332e+00,1.55922720e+00,9.37462386e-01,-8.83718133e-02,-1.66032471e+00,-4.73062021e-01,-7.15381179e-01,1.09718991e+00,-2.38924316e-01,4.37598295e-01,2.38789689e+00,2.55800247e-01,-1.15460694e+00,5.51109853e-02,1.31248643e+00,3.54276306e-01 -contig-56000000,1.20509748e+01,-2.97215999e+00,-1.55222372e+00,-2.63090459e-01,-2.69621907e-01,4.33932575e-01,-1.90893056e-01,-8.14012756e-01,4.91140967e-01,-1.13868483e-01,6.63830914e-01,-7.14625026e-01,-8.12315285e-01,1.01024649e-01,9.11364490e-02,-2.59541494e-01,2.57797388e-01,-2.45031518e-01,1.29262449e-01,-8.38000228e-02,-3.29918089e-01,2.34662955e-01,1.01334681e-01,4.96589834e-01,7.10100533e-02 -contig-290000000,2.10058849e-01,3.78682800e+00,1.17566351e+00,-2.92506476e-01,-8.89792727e-01,1.49430444e-01,-7.03263613e-02,-1.89008114e-01,4.84480423e-01,3.57074863e-01,-1.70445692e+00,-1.52857845e+00,3.73841250e-01,-9.64433910e-01,2.59597487e-01,-1.35778087e-01,4.40501484e-01,4.68203075e-01,1.74241410e-01,4.15896706e-01,3.18042729e-01,-3.99375438e-02,-4.44737847e-01,2.88714470e-01,-3.11592171e-01 -contig-269000000,5.27806575e-01,2.20640818e+00,2.66271606e+00,4.04730443e-01,6.75806997e-01,-1.07148599e+00,1.20069315e+00,-1.02568428e+00,-1.40767818e-01,-9.62290643e-01,-1.24409869e+00,4.08069746e-01,-8.54184475e-01,-2.74114253e-01,-6.74551442e-01,-7.68064665e-01,1.54601793e+00,9.61243878e-01,1.33808321e-02,9.52196346e-02,-1.60944452e-01,8.98976847e-01,2.86788816e-01,-2.78444358e-01,1.19474052e+00 -contig-229000000,-4.27193536e-01,4.95991253e+00,4.80802819e-01,-1.39582100e-01,-1.75657206e+00,9.98612739e-01,-9.71308746e-01,4.21233924e-01,1.69121117e+00,-7.87045770e-01,3.35339280e-01,-6.31000827e-01,-4.70839817e-02,2.15254129e-01,1.31136053e+00,-7.07869149e-01,3.25875142e-02,-4.35133347e-01,5.98021783e-01,3.30085384e-01,3.56250682e-01,6.27742501e-01,4.26801501e-01,-3.88537609e-01,-2.12173288e-01 -contig-207000000,-6.92292692e-01,4.61720375e+00,3.48648592e-01,9.91237770e-01,1.23996552e+00,-3.82523556e-01,8.71665825e-01,-1.51806931e-01,-1.43138451e-01,3.17122386e-01,2.50816458e-01,9.79225825e-01,-5.58184825e-01,3.12991232e-01,4.04145110e-01,-9.66176818e-01,-5.61151037e-01,4.12167772e-01,4.42142319e-01,7.95460464e-02,-2.94412721e-01,-2.46844118e-01,5.30077160e-02,-2.46051287e-01,-1.58112390e-01 -contig-37000000,-5.21520652e+00,-7.45803204e-01,-3.17768097e+00,7.81790307e-01,8.47122073e-01,1.45533883e-01,-1.19621512e-01,-6.03659934e-01,-6.51249112e-01,3.95695901e-01,-7.70827087e-02,2.13948571e-01,-5.57127563e-01,5.49779215e-02,-8.41129740e-02,8.39850062e-02,2.04615287e-01,-1.41956939e-01,-2.18863372e-01,-2.47989320e-01,4.95764897e-02,-3.60866699e-01,-2.64701686e-02,-2.06724166e-01,1.59829625e-01 -contig-4915000000,-6.13175447e+00,-2.78147405e+00,-2.61810068e+00,-2.14390167e-02,-5.12253284e-01,4.12705790e-01,-1.70622807e-01,3.07835017e-01,7.40415220e-02,3.24336329e-01,-6.25857357e-01,-3.64233166e-01,-4.37047517e-02,2.33115461e-01,-5.85003911e-03,3.05386495e-02,-3.92051683e-02,9.49758470e-03,-4.08418848e-01,1.89164852e-01,1.35570382e-02,-7.50303087e-02,-1.53359463e-01,1.39618220e-01,2.21235645e-01 -contig-4942000000,-8.35284775e+00,-3.33700021e+00,-4.98073784e+00,-4.09444041e-01,-8.07370921e-01,3.50702520e-01,9.24392124e-01,8.04926398e-01,-3.21062585e-01,-1.48671398e-02,2.60174595e-01,6.68467229e-03,-4.30708792e-02,9.71877444e-02,1.73672441e-01,-2.33501624e-01,2.27210495e-01,5.17640137e-02,-3.52586484e-01,3.58305875e-02,-1.00701283e-01,-1.64973469e-01,4.82820218e-02,-2.37665664e-02,-4.48809338e-02 -contig-243000000,4.91277559e+00,-4.56677137e+00,5.34507874e+00,5.52372327e+00,5.43931459e-01,2.65462407e+00,-9.90208607e-01,1.89463256e+00,4.19654343e-01,-1.63152571e+00,-1.10177697e+00,-3.60646680e-01,-1.46039233e+00,7.44469994e-01,3.55932097e-02,-1.04087573e+00,7.12327140e-01,1.01974492e+00,-2.96431129e-01,-4.89709321e-01,6.00700910e-01,-9.15615756e-01,2.12555397e-01,4.91467788e-01,-6.15247461e-01 -contig-187000000,-9.07403771e-01,5.29302675e+00,-1.18303807e-01,2.01231931e+00,5.82540017e-01,-2.71733798e-01,1.09765504e+00,-8.50797102e-01,-9.72347242e-01,-2.99232938e-01,2.26891974e-01,5.62945642e-01,1.55881639e+00,2.80537369e-02,8.21274683e-01,-3.90232464e-01,3.64518268e-02,4.66981613e-02,-1.77357375e-01,9.31805453e-01,-6.22403231e-01,3.12992702e-01,-5.55768914e-01,2.54016767e-02,3.24956099e-01 -contig-126000000,1.15067444e-01,6.85913586e-01,3.72172793e+00,-1.03859277e+00,3.25371991e-01,-8.79921373e-01,1.14065930e+00,3.99339611e-02,2.76745450e-01,-2.38800673e+00,-2.32921323e-01,-4.00686824e-01,5.78165770e-01,-5.04733969e-01,6.35145118e-01,-2.39512801e-01,-1.37665819e-01,3.47982600e-01,1.31525241e-01,7.76228613e-02,-2.88581992e-01,1.01101913e-01,-2.74364457e-01,-9.87342653e-02,1.76671259e-02 -contig-70000000,-1.37007182e+00,4.85066652e+00,-1.01483008e+00,-2.27350179e-01,-5.14580297e-01,-9.63640113e-02,1.64060590e+00,-2.95637446e-01,-1.04923499e+00,2.37455803e-03,-4.29188679e-01,1.86188531e-01,-3.68876552e-01,3.43113726e-01,-4.54793618e-01,-5.56269915e-01,1.14675416e+00,-1.93932418e-01,-4.25944185e-01,6.05240338e-02,7.15395677e-01,6.49152437e-01,2.44058411e-01,5.97481718e-01,1.30958344e+00 -contig-264000000,-7.88692698e+00,-5.36674035e+00,-3.10112854e+00,-1.18165592e+00,-6.81141850e-01,-1.22563327e-01,3.66667517e-01,1.16071669e+00,-1.79882080e-01,6.32108576e-02,1.48626630e-01,-2.79867841e-01,4.07607103e-01,2.85513057e-01,1.04007012e-01,-1.56177254e-01,-5.68927179e-02,4.02036579e-01,-3.86017126e-01,-1.27617189e-01,5.02316928e-02,-1.20975533e-01,-1.99489593e-01,-1.10177795e-02,-8.48723179e-02 -contig-222000000,1.14158274e+00,-1.84174670e+00,6.96882479e+00,-1.44748658e+00,-1.53608741e+00,1.25444274e+00,-1.65708696e-01,5.97652411e-01,2.71118956e-01,7.73078564e-01,6.45497436e-02,-9.86099347e-01,-3.00923008e-01,2.13067098e-01,-5.49335114e-01,-1.35335901e-01,9.80417970e-01,5.80572115e-01,1.87428936e+00,-7.47581256e-01,8.49935287e-02,-3.09873131e-01,-9.46562849e-01,-2.23503199e-01,-5.15114647e-01 -contig-245000000,1.54981177e+00,9.42530448e-02,5.13815049e+00,-1.10972721e+00,-9.79979846e-01,3.54663087e-01,1.81169230e-01,-2.71101717e-01,6.77842813e-01,-3.26483739e-01,-9.41302263e-01,-3.01864334e-01,-8.35620169e-01,1.04984975e+00,7.36063895e-01,-8.56639970e-01,9.96097931e-01,-8.94671749e-01,1.32537802e+00,-5.34370628e-02,1.22070328e-01,-9.00397323e-01,-1.45151197e-01,8.24231500e-01,-5.62311292e-01 -contig-4916000000,-7.69977525e+00,-3.15247538e+00,-4.52938169e+00,-3.32102364e-01,-7.48260872e-01,2.90340318e-01,9.63789798e-01,6.08950541e-01,-4.38542856e-02,-1.86302147e-01,1.77656816e-01,-2.38666283e-01,-1.15038023e-01,-4.39936231e-02,-9.69506661e-02,-1.92581951e-01,2.20139536e-01,2.41011968e-01,-7.60176999e-02,1.20469500e-02,7.56870575e-02,7.26177956e-02,6.78983741e-02,-4.98282519e-02,-6.11741782e-02 -contig-23000000,1.23324948e+01,-2.64132294e+00,-2.89453733e+00,-4.22885253e-01,3.75484183e-01,-1.67935947e-01,2.36478579e+00,1.61912567e-01,2.28651320e-01,-7.65828019e-02,-6.84091128e-01,9.83250920e-01,6.96464827e-01,7.61697132e-01,3.42197933e-01,7.81437099e-01,-1.02422841e+00,-4.56480878e-01,3.84016981e-01,1.48752238e-01,3.95550249e-01,4.92664549e-01,-1.63671661e-01,-4.80256605e-01,2.88519910e-01 -contig-71000000,-1.63500279e+00,4.09188474e+00,-9.00903759e-02,-7.00812820e-01,4.08255068e-01,-5.41564261e-01,7.91392981e-01,8.44382893e-01,-3.62075376e-01,7.10656505e-01,7.14305843e-01,-7.42958580e-02,-3.36031015e-01,4.66045546e-01,8.98785662e-03,2.49079694e-02,-7.67718818e-02,5.70021586e-01,3.29937519e-01,-1.09131553e-01,1.33704497e-01,-9.85031322e-01,-5.28238465e-01,6.68194367e-01,-6.03385377e-01 -contig-1023000000,1.10638415e+01,-3.51119078e+00,6.73072820e-01,-1.85209852e-01,1.07529456e+00,-1.31873806e-01,3.90448025e+00,-4.42704498e-01,2.34590234e+00,1.88229428e+00,6.08188702e-01,-5.57192614e-01,3.28235184e-01,-2.48120847e-01,6.32693078e-01,3.75693763e-01,-9.10665106e-02,-8.84071396e-01,1.08367887e-01,3.06476078e-02,4.08846458e-01,5.61984198e-02,-2.11221780e-01,-2.05840556e-01,-5.89217388e-02 -contig-213000000,-9.19837509e-01,5.76311857e+00,-6.47476659e-01,4.52261243e-01,5.34817909e-02,1.15801344e-01,-6.84143715e-01,3.16211302e-01,1.42590220e-01,2.83604799e-01,-3.76637177e-01,3.61682007e-02,-8.82159339e-01,5.10833118e-01,2.23957091e-01,2.83128441e-02,3.63806266e-01,-2.52826636e-01,4.68965491e-02,-7.74592606e-01,4.95754168e-01,4.87144836e-01,1.14137409e-01,-1.22898815e+00,1.00907877e+00 -contig-228000000,-3.24660916e+00,-5.59121114e-01,-6.19073217e-01,1.26722000e+00,7.44045073e-01,8.09689756e-01,-1.61184617e+00,-1.18246584e+00,-3.19705819e-01,-1.12128638e-01,1.60643808e-01,-3.59787758e-01,-6.42736254e-01,2.85419958e-02,-2.39957944e-01,-5.07924901e-03,4.34957807e-01,5.01865790e-01,6.95970522e-01,-4.95047416e-01,-6.08390013e-01,2.41719659e-01,4.36582945e-03,-6.96666305e-02,1.36052621e-01 -contig-34000000,-2.93459131e+00,-8.47699762e+00,5.87702760e+00,2.86340408e-01,-9.09997988e-01,1.83952741e+00,-8.88231626e-01,-1.86541590e-01,-4.92343592e-01,5.60492648e-01,4.56484099e-01,3.80488776e-01,4.22200977e-01,-1.01395049e+00,4.98350823e-01,-2.68245995e-01,5.84698942e-01,-1.58641640e-01,-3.45711801e-01,-3.05214444e-01,-2.94125576e-01,-5.36145888e-01,-5.28903569e-01,-5.27134913e-01,-1.16563362e-01 -contig-55000000,-7.54144056e+00,-2.58747742e+00,-4.67922920e+00,-1.88276207e-01,-4.67574891e-01,7.65817587e-02,8.19548977e-01,6.28137431e-01,-1.86350375e-01,3.63522311e-02,2.62637223e-01,2.63958926e-01,4.64166437e-02,6.30306335e-02,3.43050335e-02,-9.90181229e-03,4.13067193e-02,-9.72213938e-02,-1.33909793e-01,-6.89002798e-02,2.40621600e-01,-3.98945862e-03,2.09307427e-01,-6.85006148e-02,-9.24530940e-02 -contig-127000000,2.39659624e-01,-1.57184838e+00,6.35707111e+00,-2.61056292e+00,-1.49759427e-01,-1.28925204e+00,-1.88559590e+00,3.50063731e+00,2.77495201e+00,2.66456282e+00,2.13045147e-01,4.26706826e-01,-7.99687698e-01,-6.94951278e-01,-7.12156525e-01,-6.94624679e-01,1.44655953e+00,-6.54676894e-01,-7.42481812e-01,1.16912806e+00,5.32431049e-01,-9.21677005e-01,-1.97115416e-01,9.95907952e-01,-3.32047831e-01 -contig-832000000,-1.69982752e+00,-2.58169134e+00,2.17429509e+00,6.34290759e-01,-6.35123954e-02,3.21140841e-01,-1.28633931e+00,-1.78929985e+00,2.10101567e+00,-4.31528445e-01,1.59469882e-01,-7.92286679e-01,-9.03944507e-01,-9.63106340e-01,-1.83803802e-01,6.70212969e-01,-7.00873134e-01,9.68409154e-01,3.86223095e-02,3.82320683e-02,-1.57793655e-01,-1.42716400e-01,-1.49783961e-01,2.21799476e-01,1.84464881e-01 -contig-11000000,-5.97311305e+00,-2.17193340e+00,-3.37343189e+00,1.40380200e-01,-1.39122603e-01,5.15713851e-02,1.54662221e-01,3.20120776e-01,1.89602067e-01,-2.55588550e-01,-1.86168803e-01,-1.33377810e-01,-1.60166406e-01,6.99035663e-02,-6.75596859e-03,3.39213580e-01,2.90179915e-01,-5.22885025e-02,2.14153605e-01,2.22292112e-01,1.78191351e-01,1.97545040e-01,2.77949824e-01,6.01331070e-02,1.33571127e-01 -contig-4931000000,1.31459803e+01,-2.04494587e+00,-5.15147160e+00,-3.39013162e-01,2.08308478e-01,-6.08963387e-02,-4.71643704e-01,5.13645006e-01,-8.15531584e-02,-3.91567867e-01,-1.26269153e-01,4.79685956e-02,7.67321571e-02,-1.20954366e-01,-7.83076060e-02,-1.11595451e-01,-3.73641699e-01,2.83328040e-02,-9.53356511e-03,-1.77608055e-01,-1.08778637e-02,-1.87768666e-01,-2.05777734e-01,-1.93238620e-01,2.48291686e-01 -contig-84000000,-9.17482081e-01,3.73258399e+00,1.88765690e-01,-5.91134634e-01,4.68209840e-01,-1.32709581e+00,1.28774323e+00,3.17543009e-01,5.74863223e-01,2.43118019e-01,-6.12634041e-01,9.27056080e-02,-4.02947336e-01,-3.43291633e-01,-3.02064342e-01,4.91132470e-01,-3.20243403e-01,1.17261905e-01,-4.87605749e-01,2.55656026e-01,-5.74521655e-01,-2.48260492e-01,3.36686797e-01,-6.84555465e-01,-1.59085631e-01 -contig-297000000,-1.93365547e-01,4.16214277e+00,1.04024239e+00,5.79414473e-01,1.77836918e+00,-7.75942748e-01,-1.04089881e-01,-1.09628987e+00,-9.20827864e-01,2.26285463e-01,-1.02947540e+00,-8.00179318e-01,-1.16159510e+00,6.80366157e-01,5.25876024e-01,1.05275956e-02,-2.52965394e-01,-1.04001744e+00,-3.96950884e-01,-2.17988019e-02,-3.71391675e-01,-1.99432393e+00,7.73100743e-01,-5.82273786e-01,1.88454266e-01 -contig-140000000,-5.12105905e-01,4.94665402e+00,-6.65365060e-02,2.76695075e-02,-1.27959733e-01,1.03553498e-01,4.24804105e-01,3.38931689e-01,-2.44761930e-01,6.91016522e-02,3.77321796e-01,-8.53926133e-01,-9.59607293e-02,3.39150248e-01,8.46172032e-01,8.80437448e-01,-9.81624215e-01,1.07486054e+00,-3.36961117e-01,4.92746598e-01,-1.64187431e-01,-8.00215040e-01,7.16072937e-02,4.51339715e-01,-7.04981472e-02 -contig-101000000,-9.13793526e-01,3.53989340e+00,7.66643113e-01,-6.87574538e-01,-2.13177857e-01,-7.66300058e-02,-7.14209741e-02,6.29491425e-01,2.53013048e-01,2.27506309e-01,-5.09831295e-01,-1.05917997e+00,-7.30612770e-01,2.00541138e-01,3.46081434e-01,-4.82198640e-01,-4.01596290e-01,6.87468562e-01,-1.97700381e-01,7.20299038e-01,4.78426554e-01,6.07917858e-01,-1.62819373e-01,-9.11122909e-02,-5.39879948e-01 -contig-206000000,-7.71638527e-01,5.90185805e+00,-7.55635126e-01,6.32591099e-01,2.03121746e-01,-4.28338253e-01,-1.08748788e-01,1.00797973e+00,7.48654609e-01,4.05430604e-01,6.58853723e-01,5.28697223e-01,-4.35303536e-01,-3.47047324e-01,1.34042252e+00,-1.16701490e+00,5.21440416e-01,9.35227247e-01,7.66660171e-01,-9.58312401e-01,5.47713679e-01,-2.78131816e-01,7.32804716e-02,-5.32068982e-01,2.65968909e-01 -contig-176000000,-6.96616011e-01,4.66891574e+00,3.54178544e-01,7.77545991e-02,-6.00382888e-01,4.33574233e-02,-5.49804318e-01,1.82635727e-01,5.18421427e-01,1.76888223e-01,-1.06733988e-01,-6.68342293e-01,-1.48786649e-01,1.85400696e-01,3.59948448e-01,2.02400493e-01,-3.07672224e-01,-4.53927746e-01,-6.73622582e-01,-7.19849148e-01,2.96694655e-01,-2.98405025e-01,2.74995034e-01,2.10056356e-01,3.80807461e-01 -contig-246000000,-3.17913433e-01,5.37591677e+00,1.20290946e-02,9.37792131e-01,-7.37247071e-01,1.19400699e+00,4.44569518e-02,5.73875472e-01,1.04015853e-01,5.77512198e-02,8.93637573e-01,3.76464706e-02,5.89558281e-01,1.62357405e-01,-4.83289555e-01,4.37574054e-01,-8.01804097e-02,1.66031222e-01,4.90741593e-01,-3.78994167e-01,-1.20175468e+00,2.17199913e-01,-5.54794999e-01,5.11826811e-01,1.88083511e-01 -contig-476000000,-3.58499387e+00,-5.50341543e+00,3.26543094e+00,-6.76434762e-01,4.86184343e-01,7.48457398e-01,-8.14003381e-01,2.30377447e-01,-7.31346217e-01,2.48262454e-01,2.49135259e-01,-5.90490707e-01,4.21610931e-02,8.28069495e-01,1.41345843e-01,-3.48133341e-01,-1.86593069e-01,2.66284927e-01,6.26030802e-01,1.33591177e-01,1.27727373e-01,-6.33153051e-03,2.37234207e-01,-1.83743194e-01,3.62865932e-01 -contig-291000000,-3.11100428e-02,3.22513767e+00,1.64732284e+00,-7.50085448e-01,-1.08710651e-01,-2.26529108e-01,-1.44252176e+00,-1.66592087e-01,-1.98205904e-01,-6.74050081e-01,-7.93329386e-01,-1.18659114e-01,-1.13153509e+00,-4.95863788e-01,-6.59227373e-01,-2.82314495e-01,-4.45207958e-01,4.07405670e-01,2.60615063e-01,-1.30001038e-01,1.61032199e+00,3.12535341e-01,-4.36320954e-01,-7.75545348e-01,-4.13508499e-01 -contig-4913000000,-6.81650409e+00,-9.47895308e-01,-4.96075022e+00,3.49612889e-01,-3.58592230e-01,4.59282910e-01,5.80763669e-01,4.93656413e-01,-1.77394384e-01,3.30559159e-01,1.85533917e-01,1.04795296e-01,-4.64657524e-01,-7.65429461e-02,3.94069034e-02,-3.96665179e-02,2.35144637e-01,-4.29357053e-01,2.20433054e-01,1.26883385e-01,4.76781609e-01,2.17753720e-01,3.74451918e-01,-7.37394109e-02,4.15642956e-02 -contig-3000000,1.26112375e+01,-7.41313187e-01,-6.68774354e+00,4.39414850e-02,6.72258555e-02,2.75115401e-01,-2.58212323e-01,5.99610155e-01,-1.94346137e-01,-4.38022145e-01,-8.79433273e-01,1.56754465e-01,7.04578785e-02,-6.78184315e-01,-4.81770183e-01,5.95794030e-02,5.45085742e-02,4.89763717e-02,1.71054888e-01,3.71919597e-01,1.88325285e-01,-1.03893081e-01,1.70463782e-01,7.31339801e-02,-2.62645609e-02 -contig-38000000,-5.48262446e+00,-8.81832331e-01,-3.18204308e+00,6.92800961e-01,2.51604649e-01,-1.74424972e-01,-2.31024966e-01,-1.81057626e-01,8.98064805e-02,-3.93954740e-01,1.91638147e-01,1.39627359e-01,-8.24155266e-02,-3.68881433e-01,2.43241922e-02,-1.68727388e-03,4.59614436e-01,-1.44171975e-01,1.84985877e-01,-2.00986515e-01,-6.11171566e-02,3.68623661e-01,-1.42026428e-01,-2.87583812e-02,1.06911220e-01 -contig-93000000,-7.48503030e+00,-4.66284039e+00,-2.90978832e+00,-5.50509901e-01,-7.94494196e-01,4.52776244e-01,1.24424876e-01,6.27465517e-01,-2.64395826e-01,4.97683970e-02,7.82952145e-02,-2.20436793e-01,2.99374557e-01,3.83178866e-01,6.12769386e-02,-1.70107271e-01,5.25069742e-02,3.83905403e-01,-6.63503569e-01,-2.21458485e-01,-1.79658222e-01,-3.39018739e-01,-1.11941784e-01,-4.81216879e-02,-4.61069771e-02 -contig-4523000000,8.99225013e+00,-1.39213239e-02,2.21584969e-01,9.56376604e-01,2.87293212e-01,-2.36256072e-01,-4.95059650e-01,-1.03610472e+00,7.75920658e-01,-6.80722881e-02,7.32640131e-01,-1.49350862e+00,4.80146827e-01,8.48917472e-01,2.76242914e-01,1.49373921e-01,8.23878154e-01,4.09874568e-01,3.76799485e-01,1.06137521e+00,-5.50194122e-01,1.13509418e+00,8.32333929e-01,-5.78267356e-01,-7.43950177e-01 -contig-338000000,1.16663060e+01,-1.88467042e+00,-3.02673146e+00,-3.26080387e-01,3.41456540e-01,1.25963195e-01,9.79952178e-01,-1.03879794e+00,5.05585041e-01,2.86617221e-01,4.44999281e-01,-4.09593855e-01,-7.18020872e-01,-2.07916820e-01,2.49717054e-01,-3.54172966e-01,1.16342314e-01,-1.62402686e-01,3.71828079e-01,5.54103863e-02,-1.24799997e-01,8.41312688e-02,-1.65802914e-01,1.89234692e-01,1.71254276e-01 -contig-216000000,-5.21875851e-01,6.62845986e+00,-9.69313112e-01,1.29262278e+00,-9.02334582e-02,8.05121469e-01,2.87700117e-02,1.08492854e-01,-1.29037456e+00,1.99028344e-01,-1.84481715e-01,-1.94132612e-01,-9.05452859e-01,-6.28418768e-01,7.63158242e-01,-5.05499257e-02,2.88850365e-01,9.07936242e-02,-9.52637242e-02,4.94898351e-01,1.55428200e+00,-1.20504207e-01,-7.88765135e-01,7.31799067e-01,-4.41597473e-01 -contig-4922000000,1.30575632e+01,-1.09717099e+00,-6.42130799e+00,-1.02126723e-01,-1.29848636e-01,2.90941525e-02,-7.46632821e-01,4.86128171e-01,-4.13514217e-01,-2.73875722e-01,-8.44224120e-01,2.82925212e-01,-8.73697311e-02,-7.22447154e-01,-3.99386023e-01,5.95105220e-02,-3.48543404e-01,-1.62968870e-01,2.92349087e-01,8.03012143e-02,2.58795903e-01,-1.22891501e-02,1.39331318e-01,1.80774312e-01,-4.49641520e-02 -contig-4906000000,-6.34347362e+00,-6.02138472e-01,-4.56680866e+00,6.44438203e-01,9.63552032e-02,2.64407565e-01,5.19451803e-01,3.07820974e-02,-4.49487373e-01,-1.02552512e-01,4.14706272e-02,4.98993885e-01,-4.61804976e-01,-6.04498152e-02,-5.02234591e-02,-3.52677229e-01,3.66515401e-01,-5.35210098e-01,3.61068716e-01,2.38497650e-01,3.69949569e-01,1.20948921e-01,2.51921477e-01,-1.27263146e-01,2.47008646e-01 -contig-312000000,8.24576898e-02,2.36435020e+00,2.79502455e+00,2.13440478e-01,5.87303382e-01,1.88417171e-01,-5.54314567e-01,-8.68318746e-01,-4.30796966e-01,7.93621540e-02,-1.76556257e-01,-6.87923130e-01,-5.28957570e-01,9.75800998e-01,2.52109762e-01,-3.61192633e-01,-1.05965514e+00,2.59327907e-01,-3.81422955e-02,-5.74842572e-02,-4.30496065e-01,1.52483518e-01,2.01110940e-01,-1.95038130e-01,-1.25970148e-01 -contig-256000000,-2.18213870e-01,4.59607890e+00,6.77968686e-01,3.91844356e-01,5.12361825e-01,2.09835428e-02,-3.53699733e-01,-1.11145592e-01,-1.43595035e+00,1.37850098e-01,-1.49698290e-01,-1.45447290e+00,1.99823566e+00,-4.88329695e-01,6.28662786e-01,1.15942337e-01,-2.13379961e-01,-1.19992088e-01,-1.30188685e-01,1.19341051e-01,1.12530455e-01,-6.32630462e-01,8.90538996e-01,1.60268193e-01,-5.06961568e-01 -contig-89000000,-7.34496348e-01,3.00142483e+00,9.16644065e-01,-1.37209443e+00,5.36437718e-01,-7.70849818e-01,9.57733154e-01,5.45486205e-01,-1.50280529e-01,-7.62397342e-01,3.99501779e-01,-1.69628335e-01,-2.83360950e-01,4.95741128e-01,4.38463601e-02,-6.21873013e-01,3.11879493e-01,6.72111117e-01,7.50672906e-01,3.77888105e-01,1.11576001e+00,-2.10807774e-01,-3.06248032e-01,-5.29692599e-01,6.21067934e-01 -contig-4919000000,-7.52161141e+00,-2.55898693e+00,-4.68127038e+00,-1.01904743e-01,-4.27162826e-01,3.18626333e-01,7.75730572e-01,4.73523118e-01,-2.83087617e-01,-2.48204591e-02,3.80571493e-02,1.22903947e-01,-1.99708215e-01,7.86055891e-02,2.43574294e-01,-1.47800209e-01,2.92100372e-01,-2.32783689e-01,-4.46431514e-01,1.12218332e-01,9.28574588e-03,-1.08738112e-01,1.04423796e-01,-6.43114521e-02,2.76277163e-02 -contig-88000000,-3.82130375e+00,-9.68522757e-01,-1.05866098e+00,6.06805151e-01,2.89277749e-01,8.13853046e-01,-6.25202777e-01,-4.63798105e-01,-5.62952844e-01,5.86331220e-01,7.27468406e-01,-1.71273843e-01,5.72993286e-01,1.49311211e-02,-2.88440096e-01,1.31662481e+00,1.90260498e-01,-2.04364814e-01,5.96688747e-01,1.33715260e-01,-3.76697513e-01,3.79331775e-01,-4.00451444e-01,6.20921938e-01,-6.43913362e-01 -contig-173000000,-8.66455395e-01,6.46014181e+00,-1.22420771e+00,7.11465512e-01,2.23426233e-01,1.48102777e+00,5.69919613e-01,-7.06201262e-01,-1.74021687e+00,1.37927190e-02,1.23773250e+00,3.79598909e-01,-5.13274036e-01,2.96033740e-02,1.90211245e-01,6.56975352e-01,-3.47642557e-01,2.09330273e-01,5.71131296e-01,-1.87453857e-01,7.14570817e-01,-6.53412522e-01,6.51918680e-02,2.58996744e-01,3.81141724e-01 -contig-4928000000,-7.18358248e+00,-2.80153487e+00,-4.17830878e+00,-2.05252742e-01,-5.52944604e-01,2.73121866e-01,7.76788829e-01,5.65195767e-01,-1.83940533e-01,-3.84304884e-01,8.44951435e-02,1.32430711e-01,4.02279257e-01,1.55057147e-01,1.05891015e-01,-5.08843321e-02,2.22023676e-01,-1.98254356e-01,2.77626251e-02,8.54632194e-02,2.66327421e-01,-4.23878930e-02,2.42880949e-01,6.95531728e-02,4.59085309e-02 -contig-231000000,-3.20664580e+00,-2.80305584e+00,1.57368944e+00,4.14207759e-01,6.60074882e-01,-4.20945264e-01,-2.21760422e+00,-8.87831850e-01,1.87118472e-01,1.04451093e-01,8.15430799e-01,8.89797313e-01,5.20987670e-01,-4.35673586e-01,-3.77122318e-01,7.26112123e-02,-1.02248806e-01,-1.91102773e-01,-8.41328927e-01,-7.03605924e-01,-4.27669042e-02,1.47682555e-01,-1.43553473e-01,-1.00698116e-01,-1.95111986e-01 -contig-377000000,2.05819447e+00,-2.26190052e+00,7.56143109e+00,-8.97191171e-01,-7.76918787e-02,8.88949817e-01,-4.20697228e-01,9.64118922e-01,-3.32430220e-01,3.09968256e-01,3.87940767e-02,1.10468428e+00,4.98851176e-01,7.32756419e-01,6.89020086e-01,1.11872034e+00,4.72079326e-01,1.00830448e+00,6.36162086e-01,2.30266820e-01,-1.07129032e+00,-3.08919875e-01,-1.05985120e-01,-4.40799816e-01,-1.91923817e-01 -contig-1887000000,1.16583743e+01,-8.70661442e-01,-3.84183640e+00,1.72832532e-01,7.89290732e-01,-3.03528118e-01,1.72507076e-01,9.35429498e-01,1.15046776e-02,3.43527595e-01,-1.06906319e-01,-2.00210227e-01,4.94961490e-01,8.16844100e-01,-4.07700207e-01,3.79641857e-01,-3.97599176e-01,-3.27843387e-01,1.76270542e-01,-1.76330415e-01,2.21237179e-01,-9.54264480e-03,6.09774494e-02,-5.58710566e-01,5.87972093e-01 -contig-4904000000,-5.96818698e+00,-2.39920286e+00,-2.81002801e+00,2.03058846e-01,-5.81248122e-02,3.10068113e-01,2.59651732e-01,6.31048932e-02,-1.11609205e-01,-3.05292668e-01,-4.93624488e-02,2.29197385e-02,-2.73817495e-01,5.48526592e-02,-2.07231691e-01,-6.09027602e-02,-7.07318167e-03,-5.91185585e-01,-3.85132114e-03,2.38622923e-01,5.31508940e-01,1.91443326e-01,4.13148536e-01,2.03983475e-01,-2.08286668e-01 -contig-1345000000,-4.15100263e+00,-2.54023770e+00,-6.25441888e-01,5.46254407e-01,1.63881564e-01,2.80340142e-02,-1.48313904e-01,-7.83585591e-01,7.08256749e-01,6.40768441e-02,-8.06370894e-01,-2.74810532e-02,2.93102886e-02,-9.43680224e-02,8.65751838e-02,-2.28852436e-01,-1.38361627e-01,-6.19512936e-02,-4.71308549e-02,1.66064036e-01,-2.46849409e-01,2.17553158e-01,-5.69623817e-02,-1.86987132e-01,-4.97192783e-01 -contig-279000000,2.39433264e-01,1.16630992e+00,3.55532803e+00,-4.87544866e-01,9.16473153e-01,-1.57813899e-02,-1.31016932e-01,-4.40442373e-01,-1.16340023e+00,-7.79194781e-01,-7.67814854e-01,-2.30996553e-01,-1.14763230e+00,3.20765826e-01,-1.02374298e+00,2.37195236e+00,9.21510041e-01,-2.95461146e-01,-2.08002058e-01,7.52347833e-01,4.03466935e-01,-1.82923174e+00,-9.45037659e-02,3.11033527e-03,8.37955853e-01 -contig-2648000000,-3.24057964e+00,4.70295614e-01,-1.33593494e+00,3.38830551e-01,1.26014594e+00,-2.70817260e-01,-4.90704270e-01,-6.04605307e-01,-3.55467616e-01,1.64439830e-01,4.33324667e-01,5.86462572e-01,1.05421013e+00,-1.01478498e-02,-6.98816369e-01,3.25955965e-01,7.96882253e-01,-2.99371954e-01,4.68581664e-01,2.71418603e-01,-1.98507146e-01,2.91787438e-01,2.93013824e-01,1.40728933e-01,5.61728476e-01 -contig-4908000000,-6.53012365e+00,-1.60105959e+00,-4.13977778e+00,4.82892860e-01,-2.28001043e-01,4.92834541e-01,3.57677066e-01,9.34335199e-02,-2.22369471e-01,2.02749115e-01,-2.22727788e-01,2.87761400e-01,-4.18162726e-01,2.65540738e-02,-6.37067017e-02,8.74203277e-02,3.16871115e-01,-1.37375576e-01,-2.86216370e-01,2.02342957e-01,-7.57083286e-02,-1.19814021e-01,1.24329217e-01,-9.32903379e-02,2.44703734e-02 -contig-247000000,5.47899280e-01,1.17737563e+00,3.65521470e+00,9.90830243e-01,-6.04116613e-01,1.14419882e+00,1.38102656e+00,-1.74852190e+00,2.90995380e-01,-3.33554870e-01,-1.27554763e+00,5.70777609e-01,3.33223490e-01,-4.15288227e-01,-3.44329303e-01,-4.16571889e-01,-1.70478363e+00,-4.43225828e-01,-9.12504351e-01,5.26298038e-01,-6.13413078e-01,-6.88157407e-01,4.31474721e-01,4.77610275e-01,4.57820824e-01 -contig-128000000,2.16832216e+00,-3.11887691e+00,8.05615535e+00,1.07789834e+00,-3.41219794e+00,-1.30401322e+00,-2.59010764e-01,1.92889520e-01,-8.25385749e-01,8.32423881e-01,-7.68533511e-01,-5.49769624e-01,-6.40124657e-01,8.85540655e-01,-1.08810517e+00,-2.59799081e-01,1.54579247e+00,2.82038683e-01,1.39901326e+00,8.46488660e-02,-6.39953020e-01,3.60662571e-01,3.39448540e-01,2.19406790e-01,1.40845579e+00 -contig-238000000,-3.78276915e+00,1.99471768e-01,-1.45733685e+00,8.76609327e-01,1.59965917e+00,-5.72611985e-01,2.93288298e-03,-1.36568120e+00,-4.85631073e-01,-7.06848122e-01,6.94701164e-01,-6.55421596e-01,1.89704902e-02,-8.01563508e-01,1.13867783e+00,-7.11722697e-01,3.36789161e-01,-5.65969811e-01,4.88058976e-01,-4.61295365e-01,-2.94112113e-01,6.75631265e-01,4.50499576e-03,-2.11078898e-01,3.92774642e-01 -contig-532000000,-2.15102538e+00,-3.95618278e-01,3.53495081e-01,1.34630961e+00,6.88439095e-01,5.90934585e-01,-1.58671588e+00,-1.04364090e+00,8.97145004e-02,-2.83281503e-01,-2.69163722e-01,-1.38357156e-01,7.32296536e-01,3.40924375e-01,-4.88905701e-01,-1.05026722e-01,1.21608295e-02,-7.43910589e-01,4.93908633e-01,1.11502322e-01,5.55586231e-02,-7.63759019e-01,3.42831450e-01,2.09253557e-01,3.71143897e-01 -contig-53000000,-5.77533127e+00,-1.52844452e+00,-3.10476691e+00,-6.60730886e-02,5.53410356e-01,-2.96332539e-01,4.65805385e-01,-2.54589012e-01,-2.39092369e-01,4.51237685e-01,1.94992872e-01,-2.74906325e-01,-4.80236847e-01,-3.10937272e-01,-3.49548691e-02,1.77021434e-01,-9.41079277e-02,1.89084593e-01,3.17832059e-02,1.04263821e-01,-2.15488772e-02,-1.14429379e-01,-1.98456753e-01,2.07495070e-01,8.15913286e-02 -contig-551000000,-6.41776747e+00,-2.62240221e+00,-3.39521037e+00,-3.64262111e-01,3.28137935e-01,-3.01560482e-01,6.13553881e-01,4.09489725e-01,-2.74459992e-01,8.96092248e-02,1.05003421e-01,1.58073690e-01,-3.76477197e-01,2.06590777e-01,-5.36819917e-02,5.97377558e-02,2.32138543e-01,-5.20141763e-02,3.22982513e-01,-1.51296322e-01,3.04629970e-01,1.81953272e-01,8.79043216e-02,8.96827606e-02,-5.47630126e-02 -contig-204000000,-3.56611507e-01,6.03778089e+00,-7.58624653e-01,3.03617656e-01,-1.12176497e+00,1.26833007e+00,-6.14854416e-01,4.41380228e-01,-2.52798597e-01,5.61717036e-01,2.12127509e-01,-5.63083509e-01,5.05657240e-01,-1.41645448e-01,-4.54509172e-01,-9.94853940e-02,8.72869675e-02,-2.99680448e-01,7.64056680e-02,1.08385699e-01,-6.46817659e-01,3.00342568e-01,-6.04270488e-01,-2.48488107e-01,-2.11701885e-03 -contig-311000000,9.36755133e-01,3.11892272e+00,2.05602094e+00,-5.18881600e-01,6.26749457e-02,5.44419388e-01,-9.21870336e-01,1.24383496e-01,-8.61555569e-02,5.36974562e-01,2.47478354e-01,1.00795802e+00,-8.02005767e-01,1.37787159e+00,-1.89888530e-01,-5.14571678e-01,4.07411108e-05,2.10056298e-01,4.85889752e-01,1.64586477e-01,1.26048828e+00,2.90502291e-01,9.06536070e-01,-4.56170112e-01,-4.11582206e-01 -contig-195000000,2.22127402e+00,-1.88111941e+00,6.16424215e+00,-1.38805187e+00,-5.77560487e-01,6.52794203e-01,1.08829339e+00,2.68452562e-01,-1.68854607e+00,7.46670769e-01,-1.82424267e+00,-3.21800889e-01,1.08121521e-03,-2.72410448e-01,-3.68739400e-01,2.91617080e-01,5.38300910e-01,-6.40624463e-01,9.83081767e-01,-4.05710303e-01,-3.89541137e-01,2.97854086e-01,-4.07824287e-01,-4.62653308e-01,-7.26488467e-01 -contig-1693000000,-2.21022549e+00,-2.71816484e+00,3.26378768e+00,5.31097423e-01,8.16865587e-01,1.63908966e-01,-7.77965971e-01,-1.09355841e+00,4.79533701e-01,2.47891462e-01,1.94382687e-02,-3.89851760e-02,2.64212828e-02,8.08176399e-01,6.32184638e-01,-8.32585387e-01,-2.70129436e-01,-3.87563643e-01,6.66573201e-01,4.92480247e-01,-6.49224047e-02,1.03128684e-01,6.50882326e-01,-4.79456000e-01,-1.38596526e-01 -contig-296000000,-4.61405417e-02,4.48776116e+00,1.03759620e+00,-1.77230375e-01,1.49899174e+00,-8.50198734e-01,1.35744184e-01,-1.24893592e-01,-1.10314421e+00,-1.22357201e-01,9.40740517e-01,6.67874518e-01,-4.63535863e-02,-2.30337208e-01,-4.08998191e-01,1.36746148e-01,1.88699479e-01,-8.40737033e-01,-5.34306078e-01,-3.54753770e-01,4.10215155e-01,5.16724860e-01,-9.29588224e-01,2.23110822e-02,1.20758345e-02 -contig-1111000000,1.31777723e+01,-5.43149655e+00,2.08072881e-01,-8.83713644e-01,-2.81162692e-01,6.29133106e-01,-1.02665459e+00,-3.41004349e-01,-6.68300223e-01,-5.66211194e-01,8.29315200e-01,-1.03811869e-01,-5.01657674e-01,2.60303625e-02,3.29433669e-01,-1.55882037e-01,7.60305677e-02,2.44762574e-01,-1.40868048e-01,-4.13320240e-01,-2.14111084e-01,-9.09483081e-02,5.31403233e-02,1.42787279e-01,1.82087199e-01 -contig-232000000,-4.18103099e+00,-5.06322462e+00,1.59045442e+00,-9.16136464e-01,4.89449999e-01,2.43385973e-02,-8.53888484e-02,1.04796937e-01,-3.71036030e-02,-1.68783095e-01,1.59635499e-01,-3.99533121e-01,-3.79598742e-01,3.69548885e-01,8.41423282e-02,1.91124840e-01,1.94901894e-01,-3.34974888e-01,6.63613293e-01,-4.22861400e-01,2.04113036e-01,1.69736362e-01,-2.76653630e-02,-2.93470220e-01,-1.79084826e-02 -contig-2089000000,-2.74764259e+00,-1.95426029e+00,4.54421784e-01,9.40156124e-01,1.11954979e+00,-4.21168196e-01,-1.02531979e+00,-1.20704094e+00,6.83297403e-01,-4.39810064e-01,-3.90578325e-01,-3.85495727e-01,-1.07271357e-01,3.73768823e-02,1.58955536e-03,-1.10246200e-01,2.86439320e-01,-1.55968260e-01,1.51054519e-01,-7.58940987e-01,2.45751232e-01,3.36064574e-01,3.74764255e-02,-4.29165659e-01,-7.07498608e-01 -contig-4938000000,-7.77079450e+00,-3.06931198e+00,-4.69040141e+00,-3.98891596e-01,-3.96824162e-01,1.84051673e-01,1.02231354e+00,8.02317105e-01,-4.28509468e-01,-1.48478535e-01,1.90995736e-01,3.10619062e-02,7.83152259e-02,1.89161001e-01,-1.67753573e-02,2.15650712e-02,1.44469888e-01,-1.89891345e-01,-8.53944552e-02,1.65642801e-01,2.60452995e-01,-2.70401613e-02,3.59469593e-01,1.21884261e-01,-4.87360921e-02 -contig-282000000,2.84539456e-01,2.94655773e+00,2.51802728e+00,-4.59136140e-01,-2.15852367e-01,1.58983798e-01,-1.35432101e+00,2.46660827e-01,5.13854851e-01,-9.15594084e-01,-8.87100973e-01,-1.54956440e+00,1.73246120e-01,5.76039371e-01,1.25134848e-01,9.38771488e-01,1.57540638e-01,-7.18103264e-01,-5.57706450e-01,-7.36916349e-01,7.22302002e-01,1.67002011e-01,9.49909411e-01,6.94973715e-01,6.33228310e-01 -contig-275000000,-3.13794137e-01,4.71068603e+00,8.11896691e-01,-2.00299404e-01,-1.89075956e-01,-3.14522542e-01,-8.44370986e-01,1.42220228e-01,2.07852052e-01,-3.34249776e-01,8.34023189e-01,1.31823645e-01,2.87340979e-01,3.06036574e-01,4.73402703e-01,6.02866851e-01,5.81902002e-01,6.30532440e-01,2.01585094e-01,8.41124344e-01,-6.79615578e-01,5.75117446e-01,3.65646142e-01,1.81302700e-01,-2.81383902e-01 -contig-274000000,-8.57406146e-01,5.21660301e+00,3.47783162e-01,2.20248766e-01,-2.65581220e-01,-1.57128571e-01,-2.16965485e-01,-6.80764821e-01,1.52464223e-02,-4.96922607e-01,1.12305660e+00,-1.06784350e+00,6.36518282e-01,-1.92490432e+00,-1.49028438e+00,1.28340373e+00,1.07710019e+00,5.33062922e-01,9.38258261e-03,-3.64998012e-01,3.72317431e-01,5.72697805e-01,-7.07831631e-01,9.14044530e-02,-7.04023371e-01 -contig-77000000,6.61137777e+00,-5.52205012e+00,7.56456378e-01,3.98186142e+00,-6.18070467e+00,-7.86329796e+00,5.74307458e-01,-9.78356351e-01,-2.57590633e+00,-2.63324613e-01,2.15384590e+00,-3.76488435e-01,-5.84855329e-01,1.76644894e-01,-5.51871074e-01,-1.24217514e-02,3.73095705e-01,-1.01038251e+00,-7.34353353e-01,5.38510399e-01,4.79651436e-01,-4.19049361e-01,-2.55075202e-01,2.26061123e-01,-4.53844757e-01 -contig-7000000,-6.23550015e+00,-3.65519477e+00,-2.14643854e+00,-2.41025631e-01,-8.86233721e-02,-4.76294989e-02,5.87502878e-01,-5.46594612e-01,2.07415262e-01,-4.97944670e-01,3.73119989e-01,-1.52459259e-02,-2.29391046e-01,-1.90879306e-01,3.52828089e-01,-4.13351166e-01,-3.09006629e-01,4.10245387e-01,-4.41452610e-01,-1.13332841e-01,-4.62318450e-01,-1.64649419e-01,-3.39675536e-01,6.02466764e-04,4.43450311e-01 -contig-218000000,4.63790689e+00,-4.44987789e+00,6.66472776e+00,4.42080486e+00,1.07809202e+00,4.08418377e-01,-3.01011023e-01,2.35902101e+00,1.82091218e-01,-2.57671527e-01,4.77073428e-01,-8.14200491e-01,-5.82665004e-01,9.72920587e-01,4.40936143e-01,6.96475982e-01,2.02308096e-01,-3.10385336e-01,4.11660307e-01,3.53448041e-01,-5.69660309e-01,7.31926589e-01,-9.23536596e-01,-3.50382501e-01,4.11489758e-01 -contig-239000000,2.88323224e-01,4.93361842e+00,1.89853545e-01,7.94818678e-01,5.73327284e-01,-3.47196053e-01,4.19161549e-01,5.64898353e-01,3.14743625e-01,7.40049502e-02,-1.14501008e-01,3.08975107e-01,9.05667163e-01,8.50401383e-02,1.12138096e+00,-4.53012831e-01,3.04732712e-01,5.10081239e-01,5.08449741e-01,-2.07699773e-01,6.79810545e-02,1.61459991e-01,-2.97201490e-01,2.50093291e-01,3.20256643e-01 -contig-4929000000,-8.30249445e+00,-2.47190993e+00,-5.63204517e+00,-2.65894235e-01,-7.72824777e-01,2.32963631e-01,1.24901335e+00,8.18094118e-01,-1.53869091e-01,6.46252760e-02,3.67553769e-01,4.42427865e-01,-2.61638864e-01,-9.07593227e-02,-1.47535547e-02,-2.26740456e-01,2.02387476e-01,-9.79532986e-03,-1.73018857e-01,-5.90894964e-02,2.16171518e-01,-6.56014459e-02,1.15358419e-01,-1.16359002e-01,1.33020601e-01 -contig-248000000,-1.97132108e-01,6.31638579e+00,-1.03265541e+00,8.19234864e-01,-1.55226503e+00,6.80826328e-01,7.63003555e-02,1.93258468e-02,1.31011621e+00,4.87286635e-01,7.26664912e-01,6.47906513e-01,9.12433311e-01,-4.69879635e-01,-6.80957023e-01,8.64187558e-01,-5.87565556e-01,2.22702917e-01,1.48115500e-01,-8.34460345e-01,8.87923995e-02,-6.85467610e-01,3.41992226e-01,-1.22555957e+00,7.25199570e-01 -contig-215000000,4.29221476e-01,1.68268860e+00,3.25032812e+00,-1.43809466e+00,1.90000335e+00,-1.27070982e+00,-2.34118699e-01,6.43876234e-01,-3.13842380e-01,5.13391210e-01,6.99234296e-02,-1.41688681e+00,-5.82448866e-01,-4.50000627e-01,-9.78081369e-01,1.23019336e-01,1.90373326e-02,1.02209456e+00,-7.72939434e-02,-7.34675293e-01,1.34476486e-03,8.74100220e-01,5.93859352e-01,-1.92702613e-01,-7.22693739e-01 -contig-3909000000,1.12845554e+01,-3.30955771e+00,-5.51057094e-01,-5.99046514e-01,1.02314259e+00,-3.60551506e-01,2.32870961e+00,-6.09211913e-01,1.27649592e+00,1.02217390e+00,4.88888772e-01,-3.62666157e-01,4.14683971e-01,-2.56972377e-01,2.15739284e-01,4.53850215e-01,-9.93744062e-01,-3.96101091e-01,5.25611067e-01,2.47421857e-01,6.22470328e-01,1.18726040e-01,-1.12550163e-01,-3.00350252e-01,-4.68403568e-02 -contig-150000000,1.23900621e-02,-1.35093110e-02,4.62547577e+00,-1.64593372e+00,-1.84336757e-01,-2.84733997e-02,2.59504570e-01,7.79701387e-01,8.53499997e-02,-1.37606592e-01,-1.32904955e-01,-1.18455687e-01,-4.43890538e-01,8.17598680e-01,8.54423253e-02,1.13380171e-01,6.87821050e-01,-1.32647542e+00,2.87106349e-01,-1.03416922e+00,-2.69655444e-01,-1.03564936e-01,-1.11785557e-01,-3.68361352e-01,-1.12302665e-01 -contig-151000000,-9.14592765e-01,5.37335378e+00,-3.27785186e-01,7.90024933e-01,-1.70818718e+00,1.01534263e+00,4.97922228e-01,-8.43714197e-01,1.63610182e+00,4.99760124e-02,2.45380873e-01,4.26386198e-01,-8.17460241e-01,-7.99044819e-01,-4.87089822e-01,-5.57348906e-01,-4.13202522e-01,3.16798669e-01,-3.80610808e-01,8.07466038e-01,2.51040385e-01,1.27354134e-01,-3.68096234e-01,2.27902785e-02,5.00789494e-03 -contig-212000000,-4.29796189e-01,5.03987213e+00,-2.67132436e-01,5.67133756e-01,7.71369938e-02,4.76388566e-01,1.37236764e-01,6.22119021e-01,3.23824547e-01,5.29209726e-01,5.61446119e-01,3.78426360e-01,4.05806483e-01,6.70507970e-01,1.11442437e+00,1.34617825e-01,2.82367163e-01,1.07491450e+00,8.93354118e-01,-4.95613600e-01,-3.80029996e-01,-8.67372740e-01,-3.50390878e-01,2.77525804e-01,-2.63545809e-01 -contig-133000000,-7.30816069e-01,5.16423002e+00,-4.04556542e-01,2.41151555e-01,3.41138411e-01,1.82071295e-01,6.92488251e-01,3.58842147e-03,-1.03895853e+00,9.32766214e-02,-6.13776529e-02,3.04099123e-01,4.04142109e-01,-9.95399692e-02,-8.44162169e-01,-8.53346436e-01,1.93458424e-01,6.40914566e-01,7.58008910e-01,2.34490726e-01,6.96073902e-01,-7.22572533e-01,-1.00314731e+00,6.32699875e-01,6.77656865e-01 -contig-194000000,-2.98606751e-01,5.62270465e+00,-5.33670978e-01,1.74962986e-02,-3.20576482e-01,1.49016715e-01,-3.33067846e-01,-1.18674563e-01,-1.82330202e-01,6.23904608e-01,4.23852791e-01,-1.23603947e-01,2.94029488e-01,-5.75790799e-01,-1.48742137e-01,4.70927666e-01,-6.69865200e-01,9.98040937e-01,8.12788659e-02,-2.19024375e-01,3.28788830e-01,-2.78543006e-01,5.58186688e-01,-1.03351088e+00,3.13628860e-01 -contig-26000000,-5.60322723e+00,-2.69146566e+00,-2.24698994e+00,3.67857691e-02,-3.34706091e-01,-1.97678314e-01,2.80637068e-02,-1.05434846e-01,9.31968717e-01,8.59578752e-02,-4.39746506e-01,-4.72859581e-01,-1.60857186e-01,-3.87913497e-01,1.50449351e-02,-3.66529802e-01,1.09237149e-01,1.70653021e-01,-7.07753307e-02,-2.09353831e-01,-4.65078671e-01,-1.73638349e-01,7.01661536e-03,-2.30190606e-01,-2.08299983e-01 -contig-170000000,1.74668928e+00,-3.25165921e+00,7.85320733e+00,-5.64991756e-01,-8.10671399e-01,1.44337786e+00,1.74569570e+00,-5.10636003e-01,-3.26782173e-01,1.86776204e-01,-7.82448030e-01,1.05076362e-02,-3.89227411e-01,-1.07784713e+00,-5.55826776e-01,-3.17334514e-01,-3.37316640e-01,-8.21777517e-01,4.28984174e-01,-5.71544521e-01,-8.80541086e-01,-1.21587342e+00,-3.61815658e-01,-6.26056471e-02,-4.16019970e-01 -contig-82000000,-1.06957525e+00,3.21933536e+00,5.66053820e-01,-1.03117693e+00,7.76688705e-01,-1.35084292e+00,1.36216501e+00,6.76014254e-01,1.38543299e-01,-1.10667615e+00,-7.36845059e-01,-9.97774921e-02,-4.65007014e-01,-1.01039968e-01,3.76374389e-01,-8.10447496e-01,7.58877637e-01,5.78287645e-01,1.51092040e-01,4.82114806e-01,-8.29659596e-01,-2.75461666e-02,-2.24772393e-01,1.35591390e-01,7.09613636e-01 -contig-29000000,-4.21254399e+00,-6.50943409e+00,1.92216113e+00,-1.98766941e-02,2.32780730e-01,1.14928932e-01,3.19090061e-01,-5.28665314e-01,9.33049883e-02,-3.43878188e-01,-2.18073291e-01,9.89505039e-02,4.72678729e-01,-2.04235254e-01,-2.99887741e-01,4.66364558e-02,-4.85154913e-01,6.80950789e-02,-2.94409130e-01,6.84038892e-02,-1.51084906e-01,-1.59860940e-01,-4.85509997e-02,-1.27178467e-01,-9.18551610e-03 -contig-69000000,1.35401059e+01,-1.08866484e+00,-6.96161189e+00,-2.36837303e-01,-7.73774453e-02,-3.59467212e-01,-9.57147214e-01,1.01605032e+00,-1.34427083e-01,7.60142706e-02,-6.95373323e-01,3.16296942e-01,-1.58280950e-01,-9.78139744e-01,-3.03444062e-01,1.17562900e-01,-4.91302602e-02,1.14459448e-01,2.96076199e-01,9.58739971e-02,2.79550763e-02,-6.57995782e-02,8.42088769e-02,-5.92304938e-02,-9.38758787e-02 -contig-25000000,1.28359081e+01,-1.20581490e+00,-6.68346887e+00,-4.15448798e-01,8.79819252e-02,8.41120547e-02,-8.78083048e-02,1.03924772e+00,5.39313911e-02,-7.36698658e-02,-4.81067026e-01,5.34062730e-01,2.32112124e-01,-3.51878111e-01,-4.14858806e-01,2.41686539e-01,1.43772182e-02,-2.67616107e-03,1.46635810e-01,2.15558487e-01,1.94903591e-01,1.30059912e-01,2.54369930e-01,3.65337229e-02,-2.50587108e-03 -contig-4903000000,-4.59262559e+00,-2.80139699e+00,-3.79699005e-01,-3.86011678e-01,4.03205209e-01,-2.44390915e-01,2.04499186e-01,-4.70786662e-01,6.12884702e-01,-3.88596218e-01,-2.14586082e-02,7.13077196e-02,-1.91976088e-01,-1.10469043e-02,3.75383047e-01,2.04848359e-01,-1.79863077e-01,1.13459056e-02,1.75808379e-01,1.38910970e-01,1.31630144e-01,-5.67471011e-02,-1.64318547e-01,1.77667218e-02,-8.58418630e-02 -contig-177000000,-3.83335050e+00,1.01237896e+00,-2.93297366e+00,1.20663596e+00,6.19481962e-01,3.87028094e-01,-3.56853504e-01,-6.03756940e-01,-4.38419294e-01,3.34589578e-01,5.82340213e-01,1.11815609e+00,4.29093060e-01,-6.26200139e-01,-1.17343665e+00,3.61604511e-01,4.73252640e-02,-1.12019148e-01,4.98866590e-01,7.48777944e-02,2.98941183e-01,7.80303326e-01,-1.15357541e-01,-1.53327127e-01,-4.19375030e-01 -contig-339000000,-3.52361231e-01,4.57487557e+00,2.75780377e-01,-3.89500237e-01,-7.42672344e-01,-5.57832173e-02,-1.54817802e-01,-9.18579774e-01,9.46959143e-01,-9.67166487e-01,1.03768702e+00,4.82025757e-01,-4.13965350e-01,-1.33370286e+00,-2.77340369e-01,2.70803227e-01,-1.25158538e-01,3.10008081e-01,6.84794865e-01,-6.43853869e-01,9.46748141e-01,-1.95757401e+00,1.12226318e+00,-9.41318857e-01,-2.44052222e-01 -contig-46000000,1.16901809e+01,-1.01134296e+00,-4.36723218e+00,-3.88697772e-01,1.29644259e-01,5.27082278e-01,-5.67831385e-01,2.89623159e-01,-1.51273673e-01,-2.01222766e-01,-1.20149831e-01,6.11620590e-01,6.79087134e-01,5.09827076e-01,-5.18939875e-01,-1.10402310e-01,1.36743922e-01,3.16311124e-01,8.22277006e-02,-1.27164315e-01,-3.96858137e-02,1.70284844e-02,3.23524052e-02,-1.21431971e-01,3.76576407e-02 -contig-240000000,3.78309519e-01,2.60779736e+00,2.07797227e+00,-1.79979259e+00,3.23219523e-01,-5.88802244e-01,-1.07825796e+00,-2.46459343e-01,-1.38415200e+00,-9.55653447e-01,-8.37964646e-02,-7.83205674e-01,-8.03167632e-01,6.54628113e-01,-7.32722124e-01,1.13093068e+00,6.96574542e-02,-8.00729242e-02,-2.61757658e-01,-5.93503342e-01,4.57979362e-01,-3.89340246e-01,6.74431873e-01,-5.14159213e-01,4.74143032e-01 -contig-684000000,-2.69811247e+00,-3.51294780e+00,1.83867983e+00,-5.88643388e-01,1.48638175e+00,-1.57567576e+00,-2.06876565e+00,-2.98667906e-01,1.16145729e+00,2.12302288e+00,3.03422331e-01,1.29901896e+00,5.68845270e-02,-4.54351959e-01,-5.13267997e-01,1.74340676e-01,-1.19053544e-01,4.06055688e-02,-3.06399919e-01,1.13170133e+00,1.89657787e-01,-1.24188280e+00,-3.60066758e-01,-2.73325023e-01,1.16738313e+00 -contig-191000000,-3.04041452e+00,-2.98949200e+00,1.20787473e+00,-2.95001995e-02,1.01364125e+00,-3.13789740e-01,-2.70576589e-01,-6.80057532e-01,7.04032688e-01,9.18358034e-02,-6.83959973e-01,-2.71251469e-01,-1.15337554e-01,2.88224025e-01,2.28344424e-01,1.40077596e-01,-3.35229735e-01,1.32174661e-01,3.07576176e-01,-2.74316986e-01,-1.94333201e-01,-7.24473665e-03,-1.49513187e-01,1.00658810e-01,-2.74765665e-01 -contig-3908000000,-4.32684449e+00,-3.51145603e+00,3.45174059e-01,-4.70111094e-01,1.24012810e+00,-7.07662150e-01,3.98154331e-01,-4.49208204e-01,3.12858736e-01,-2.62892208e-01,-4.32817749e-02,1.58229340e-01,-1.29680345e-01,3.17907584e-01,-3.49416320e-02,-1.02699860e-02,-2.91187618e-01,-1.81729095e-01,2.09629577e-01,-5.85758869e-01,7.97871787e-02,-1.80771987e-01,1.51760185e-01,-2.29505036e-01,-4.17332195e-01 -contig-3964000000,-4.16051813e+00,-1.14562237e+00,-1.63654387e+00,9.16905907e-01,3.10440789e-01,-3.92384445e-01,-1.69858473e+00,-5.41015601e-01,1.17288484e+00,5.12218709e-01,-9.09933181e-01,-6.62540340e-01,-9.00058322e-02,-6.16873803e-01,3.34230105e-01,1.12438776e+00,7.35288856e-02,4.29057856e-01,-5.96575056e-01,5.46791781e-01,-8.11818283e-01,-1.09524109e-01,1.85363462e-02,5.60155899e-01,3.64906095e-01 -contig-100000000,4.64947805e-01,7.21420443e-01,3.58246161e+00,-9.36468793e-01,-1.12337689e+00,-2.60602246e-01,-3.02181378e-01,6.24309990e-01,1.32430967e+00,-4.68271083e-01,-1.72221856e+00,2.52146010e-01,1.76644767e+00,1.11467449e+00,4.89502598e-03,5.81975798e-01,4.29559284e-02,-3.91973524e-01,-1.05314972e+00,-3.46260365e-01,-3.15839172e-01,5.00265643e-01,4.26424600e-01,-1.16716348e-01,-3.31705248e-01 -contig-4921000000,-7.78661997e+00,-3.23275949e+00,-4.30816783e+00,-5.26324449e-01,-4.43818150e-01,9.88229667e-02,4.09506613e-01,6.67595221e-01,-4.33282569e-01,3.20029453e-01,2.36228224e-01,-1.66329962e-02,1.23532234e-01,2.17715768e-01,1.46169420e-01,-1.67017569e-01,5.94430931e-03,1.82577560e-01,-5.77042911e-01,-1.31596008e-01,-2.88236770e-01,-2.48835676e-01,-2.39600518e-02,-1.53240084e-01,-9.82618721e-02 -contig-86000000,1.03566650e+01,4.01312835e-01,-2.74222729e+00,-9.03737046e-02,-2.37623888e-01,-8.02002565e-02,-6.51307972e-01,-1.43398922e-01,7.67986506e-01,7.90366700e-01,5.92234590e-01,-1.44095200e-01,5.65828660e-01,-1.79038279e-01,-9.35440381e-01,-1.61448401e-01,5.07358241e-01,1.47423042e-01,6.94153189e-02,-1.14927818e-01,5.67207940e-01,-1.12216266e-01,-3.59632292e-01,-4.40270681e-02,6.13528677e-02 -contig-285000000,3.91701575e-01,4.97036916e+00,3.08290660e-01,-5.94350100e-01,3.15493242e-01,-2.89327694e-01,2.34839333e-01,-5.57113218e-01,-2.60894859e-01,5.67178241e-03,7.49267752e-01,1.65516194e+00,-1.30500943e+00,4.68433099e-01,1.13202284e+00,6.96413876e-01,-3.10682820e-01,7.14776916e-01,-1.45078954e-01,-1.04031140e+00,-1.57418286e-01,1.06066184e+00,-7.79885427e-01,4.33364015e-01,-1.00072129e-01 diff --git a/c-concoct/vbgmmmodule.c b/c-concoct/vbgmmmodule.c deleted file mode 100644 index 1b1c4b0..0000000 --- a/c-concoct/vbgmmmodule.c +++ /dev/null @@ -1,1845 +0,0 @@ -/*System includes*/ -#include -#include -#include -#include -#include -#include - -/*GSL includes*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -/*User includes*/ -#include "vbgmmmodule.h" - - -static PyObject *vbgmm_fit(PyObject *self, PyObject *args) -{ - const char *szFileStub = NULL; - int nKStart = 0, nLMin = 0, nMaxIter; - unsigned long lSeed; - double dEpsilon; - int bCout = 0; - int sts; - - if (!PyArg_ParseTuple(args, "siikidi", &szFileStub,&nKStart,&nLMin,&lSeed,&nMaxIter,&dEpsilon,&bCout)) - return NULL; - sts = driver(szFileStub,nKStart,nLMin,lSeed,nMaxIter,dEpsilon,bCout); - return Py_BuildValue("i", sts); -} - -static PyMethodDef VbgmmMethods[] = { - {"fit", vbgmm_fit, METH_VARARGS, - "Fit a variational Bayesian Gaussian mixture."}, - {NULL, NULL, 0, NULL} /* Sentinel */ -}; - - -/* Python 2.x code */ - -PyMODINIT_FUNC -initvbgmm(void) -{ - (void) Py_InitModule("vbgmm", VbgmmMethods); -} - - -int driver(const char* szFileStub, int nKStart, int nLMin, unsigned long lSeed, int nMaxIter, double dEpsilon, int bCOut) -{ - t_Params tParams; - t_Data tData; - gsl_rng *ptGSLRNG = NULL; - const gsl_rng_type *ptGSLRNGType = NULL; - int i = 0, k = 0, nD = 0, nN = 0; - char szOFile[MAX_FILE_NAME_LENGTH]; - FILE *ofp = NULL; - t_VBParams tVBParams; - t_Cluster *ptBestCluster = NULL; - gsl_matrix *ptTemp = NULL; - gsl_matrix *ptTVar = NULL; - /*initialise GSL RNG*/ - gsl_rng_env_setup(); - - gsl_set_error_handler_off(); - - ptGSLRNGType = gsl_rng_default; - ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); - - /*get command line params*/ - tParams.nKStart = nKStart; - tParams.nLMin = nLMin; - tParams.nMaxIter = nMaxIter; - tParams.dEpsilon = dEpsilon; - tParams.lSeed = lSeed; - - setParams(&tParams,szFileStub); - - /*read in input data*/ - readInputData(tParams.szInputFile, &tData); - - readPInputData(tParams.szPInputFile, &tData); - - nD = tData.nD; - nN = tData.nN; - - ptTemp = gsl_matrix_alloc(tData.nT,nD); - ptTVar = gsl_matrix_alloc(tData.nT,tData.nT); - - setVBParams(&tVBParams, &tData); - - ptBestCluster = (t_Cluster *) malloc(sizeof(t_Cluster)); - - ptBestCluster->nN = nN; - ptBestCluster->nK = tParams.nKStart; - ptBestCluster->nD = nD; - ptBestCluster->ptData = &tData; - ptBestCluster->ptVBParams = &tVBParams; - ptBestCluster->lSeed = tParams.lSeed; - ptBestCluster->nMaxIter = tParams.nMaxIter; - ptBestCluster->dEpsilon = tParams.dEpsilon; - - if(bCOut > 0){ - ptBestCluster->szCOutFile = szFileStub; - } - else{ - ptBestCluster->szCOutFile = NULL; - } - runRThreads((void *) &ptBestCluster); - - compressCluster(ptBestCluster); - - calcCovarMatrices(ptBestCluster,&tData); - - sprintf(szOFile,"%sclustering_gt%d.csv",tParams.szOutFileStub,tParams.nLMin); - writeClusters(szOFile,ptBestCluster,&tData); - - sprintf(szOFile,"%spca_means_gt%d.csv",tParams.szOutFileStub,tParams.nLMin); - writeMeans(szOFile,ptBestCluster); - - sprintf(szOFile,"%smeans_gt%d.csv",tParams.szOutFileStub,tParams.nLMin); - writeTMeans(szOFile,ptBestCluster,&tData); - - for(k = 0; k < ptBestCluster->nK; k++){ - sprintf(szOFile,"%spca_variances_gt%d_dim%d.csv",tParams.szOutFileStub,tParams.nLMin,k); - - writeSquareMatrix(szOFile, ptBestCluster->aptSigma[k], nD); - - /*not entirely sure this is correct?*/ - gsl_blas_dgemm (CblasNoTrans,CblasNoTrans,1.0,tData.ptTMatrix,ptBestCluster->aptSigma[k],0.0,ptTemp); - - gsl_blas_dgemm (CblasNoTrans,CblasTrans,1.0,ptTemp,tData.ptTMatrix,0.0,ptTVar); - - sprintf(szOFile,"%svariances_gt%d_dim%d.csv",tParams.szOutFileStub,tParams.nLMin,k); - - writeSquareMatrix(szOFile, ptTVar, nD); - } - - sprintf(szOFile,"%sresponsibilities.csv",tParams.szOutFileStub); - - ofp = fopen(szOFile,"w"); - if(ofp){ - - for(i = 0; i < nN; i++){ - for(k = 0; k < ptBestCluster->nK - 1; k++){ - fprintf(ofp,"%f,",ptBestCluster->aadZ[i][k]); - } - fprintf(ofp,"%f\n",ptBestCluster->aadZ[i][ptBestCluster->nK - 1]); - } - - fclose(ofp); - } - else{ - fprintf(stderr,"Failed openining %s in main\n", szOFile); - fflush(stderr); - } - - sprintf(szOFile,"%svbl.csv",tParams.szOutFileStub); - - ofp = fopen(szOFile,"w"); - if(ofp){ - fprintf(ofp,"%d,%f,%d\n",ptBestCluster->nK,ptBestCluster->dVBL,ptBestCluster->nThread); - - fclose(ofp); - } - else{ - fprintf(stderr,"Failed openining %s in main\n", szOFile); - fflush(stderr); - } - - /*free up memory in data object*/ - destroyData(&tData); - - /*free up best BIC clusters*/ - - destroyCluster(ptBestCluster); - free(ptBestCluster); - - destroyParams(&tParams); - gsl_rng_free(ptGSLRNG); - gsl_matrix_free(tVBParams.ptInvW0); - gsl_matrix_free(ptTemp); - gsl_matrix_free(ptTVar); - - return EXIT_SUCCESS; -} - -void setParams(t_Params *ptParams, const char *szFileStub) -{ - - ptParams->szInputFile = (char *) malloc(MAX_FILE_NAME_LENGTH*sizeof(char)); - if(!ptParams->szInputFile) - goto memoryError; - - ptParams->szPInputFile = (char *) malloc(MAX_FILE_NAME_LENGTH*sizeof(char)); - if(!ptParams->szInputFile) - goto memoryError; - - sprintf(ptParams->szInputFile,"%s%s%d.csv",szFileStub,INPUT_FILE,ptParams->nLMin); - - sprintf(ptParams->szPInputFile,"%s%s%d.csv",szFileStub,PINPUT_FILE,ptParams->nLMin); - - ptParams->szOutFileStub = szFileStub; - - return; - - memoryError: - fprintf(stderr, "Failed allocating memory in setParams\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void destroyParams(t_Params *ptParams) -{ - - free(ptParams->szInputFile); - - free(ptParams->szPInputFile); -} - -void setVBParams(t_VBParams *ptVBParams, t_Data *ptData) -{ - int i = 0, nD = ptData->nD; - double adVar[nD], adMu[nD]; - - ptVBParams->dBeta0 = DEF_BETA0; - ptVBParams->dNu0 = (double) nD; - ptVBParams->ptInvW0 = gsl_matrix_alloc(nD,nD); - - calcSampleVar(ptData,adVar, adMu); - gsl_matrix_set_zero (ptVBParams->ptInvW0); - - for(i = 0; i < nD; i++){ - double dRD = adVar[i]*((double) nD); - - gsl_matrix_set(ptVBParams->ptInvW0,i,i,dRD); - } - - ptVBParams->dLogWishartB = dLogWishartB(ptVBParams->ptInvW0, nD, ptVBParams->dNu0, TRUE); -} - - -void readInputData(const char *szFile, t_Data *ptData) -{ - double **aadX = NULL; - int i = 0, j = 0, nD = 0, nN = 0; - char *szLine = (char *) malloc(sizeof(char)*MAX_LINE_LENGTH); - FILE* ifp = NULL; - - if(!szLine) - goto memoryError; - - ifp = fopen(szFile, "r"); - - if(ifp){ - char* szTok = NULL; - char* pcError = NULL; - - if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) - goto formatError; - - szTok = strtok(szLine, DELIM); - /*count dimensions*/ - while(strtok(NULL, DELIM) != NULL){ - - nD++; - } - /*count data points*/ - while(fgets(szLine, MAX_LINE_LENGTH, ifp) != NULL){ - nN++; - } - fclose(ifp); - - /*reopen input file*/ - ifp = fopen(szFile, "r"); - - if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) - goto formatError; - - - /*allocate memory for dimension names*/ - ptData->aszDimNames = (char **) malloc(nD*sizeof(char*)); - if(!ptData->aszDimNames) - goto memoryError; - - szTok = strtok(szLine, DELIM); - /*read in dim names*/ - for(i = 0; i < nD; i++){ - szTok = strtok(NULL, DELIM); - ptData->aszDimNames[i] = strdup(szTok); - } - - /*allocate memory for data matrix*/ - aadX = (double **) malloc(nN*sizeof(double*)); - if(!aadX) - goto memoryError; - for(i = 0; i < nN; i++){ - aadX[i] = (double *) malloc(nD*sizeof(double)); - if(!aadX[i]) - goto memoryError; - } - - /*read in input data*/ - ptData->aszSampleNames = (char **) malloc(nN*sizeof(char*)); - if(!ptData->aszSampleNames) - goto memoryError; - - for(i = 0; i < nN; i++){ - - if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) - goto formatError; - - szTok = strtok(szLine, DELIM); - ptData->aszSampleNames[i] = strdup(szTok); - for(j = 0; j < nD; j++){ - szTok = strtok(NULL, DELIM); - - aadX[i][j] = strtod(szTok,&pcError); - - if(*pcError != '\0'){ - goto formatError; - } - } - } - } - else{ - fprintf(stderr, "Failed to open abundance data file %s aborting\n", szFile); - fflush(stderr); - exit(EXIT_FAILURE); - } - - free(szLine); - ptData->nD = nD; - ptData->nN = nN; - ptData->aadX = aadX; - return; - - memoryError: - fprintf(stderr, "Failed allocating memory in readInputData\n"); - fflush(stderr); - exit(EXIT_FAILURE); - - formatError: - fprintf(stderr, "Incorrectly formatted abundance data file\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void readPInputData(const char *szFile, t_Data *ptData) -{ - int i = 0, j = 0, nD = ptData->nD, nT = 0; - char* szLine = (char *) malloc(sizeof(char)*MAX_LINE_LENGTH); - FILE* ifp = NULL; - - if(!szLine) - goto memoryError; - - ifp = fopen(szFile, "r"); - - if(ifp){ - char* szTok = NULL; - char* pcError = NULL; - nT = 1; - - if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) - goto memoryError; - - szTok = strtok(szLine, DELIM); - /*count dimensions*/ - while(strtok(NULL, DELIM) != NULL){ - nT++; - } - - ptData->ptTMatrix = gsl_matrix_alloc(nT,nD); - - fclose(ifp); - - /*reopen input file*/ - ifp = fopen(szFile, "r"); - - for(i = 0; i < nD; i++){ - double dTemp = 0.0; - - if(fgets(szLine, MAX_LINE_LENGTH, ifp) == NULL) - goto formatError; - - szTok = strtok(szLine, DELIM); - - dTemp = strtod(szTok,&pcError); - if(*pcError != '\0'){ - goto formatError; - } - - gsl_matrix_set(ptData->ptTMatrix,0,i,dTemp); - - for(j = 1; j < nT; j++){ - szTok = strtok(NULL, DELIM); - - dTemp = strtod(szTok,&pcError); - if(*pcError != '\0'){ - goto formatError; - } - - gsl_matrix_set(ptData->ptTMatrix,j,i,dTemp); - } - } - } - else{ - fprintf(stderr, "Failed to open abundance data file %s aborting\n", szFile); - fflush(stderr); - exit(EXIT_FAILURE); - } - - free(szLine); - ptData->nT = nT; - return; - - formatError: - fprintf(stderr, "Incorrectly formatted abundance data file\n"); - fflush(stderr); - exit(EXIT_FAILURE); - - memoryError: - fprintf(stderr, "Failed allocating memory in readPInputFile\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void destroyData(t_Data *ptData) -{ - int nN = ptData->nN, nD = ptData->nD; - int i = 0; - - gsl_matrix_free(ptData->ptTMatrix); - - for(i = 0; i < nD; i++){ - free(ptData->aszDimNames[i]); - } - free(ptData->aszDimNames); - - for(i = 0; i < nN; i++){ - free(ptData->aadX[i]); - } - free(ptData->aadX); - - for(i = 0; i < nN; i++){ - free(ptData->aszSampleNames[i]); - } - free(ptData->aszSampleNames); - - return; - -} - -void destroyCluster(t_Cluster* ptCluster) -{ - int i = 0, nN = ptCluster->nN, nKSize = ptCluster->nKSize; - - if(ptCluster->szCOutFile != NULL){ - free(ptCluster->szCOutFile); - } - - free(ptCluster->anMaxZ); - - free(ptCluster->anW); - - for(i = 0; i < nN; i++){ - free(ptCluster->aadZ[i]); - } - free(ptCluster->aadZ); - - free(ptCluster->adLDet); - free(ptCluster->adPi); - free(ptCluster->adBeta); - free(ptCluster->adNu); - - for(i = 0; i < nKSize; i++){ - free(ptCluster->aadMu[i]); - free(ptCluster->aadM[i]); - } - - free(ptCluster->aadMu); - free(ptCluster->aadM); - - for(i = 0; i < nKSize ; i++){ - gsl_matrix_free(ptCluster->aptSigma[i]); - gsl_matrix_free(ptCluster->aptCovar[i]); - } - free(ptCluster->aptSigma); - free(ptCluster->aptCovar); - return; -} - -void allocateCluster(t_Cluster *ptCluster, int nN, int nK, int nD, t_Data *ptData, long lSeed, int nMaxIter, double dEpsilon, char *szCOutFile) -{ - int i = 0, j = 0, k = 0; - - ptCluster->szCOutFile = szCOutFile; - ptCluster->ptVBParams = NULL; - ptCluster->lSeed = lSeed; - ptCluster->nMaxIter = nMaxIter; - ptCluster->dEpsilon = dEpsilon; - ptCluster->ptData = ptData; - - ptCluster->nN = nN; - ptCluster->nK = nK; - ptCluster->nKSize = nK; - ptCluster->nD = nD; - - ptCluster->dVBL = 0.0; - - ptCluster->anMaxZ = (int *) malloc(nN*sizeof(int)); /*destroyed*/ - if(!ptCluster->anMaxZ) - goto memoryError; - - ptCluster->anW = (int *) malloc(nK*sizeof(int)); /*destroyed*/ - if(!ptCluster->anW) - goto memoryError; - - for(i = 0; i < nN; i++){ - ptCluster->anMaxZ[i] = NOT_SET; - } - - for(i = 0; i < nK; i++){ - ptCluster->anW[i] = 0; - } - - ptCluster->aadZ = (double **) malloc(nN*sizeof(double *)); /*destroyed*/ - if(!ptCluster->aadZ) - goto memoryError; - - for(i = 0; i < nN; i++){ - ptCluster->aadZ[i] = (double *) malloc(nK*sizeof(double)); /*destroyed*/ - if(!ptCluster->aadZ[i]) - goto memoryError; - - for(j = 0; j < nK; j++){ - ptCluster->aadZ[i][j] = 0.0; - } - } - - ptCluster->adLDet = (double *) malloc(nK*sizeof(double)); /*all*/ - ptCluster->adPi = (double *) malloc(nK*sizeof(double)); - ptCluster->adBeta = (double *) malloc(nK*sizeof(double)); - ptCluster->adNu = (double *) malloc(nK*sizeof(double)); /*destroyed*/ - - if(!ptCluster->adLDet || !ptCluster->adPi) - goto memoryError; - - if(!ptCluster->adBeta || !ptCluster->adNu) - goto memoryError; - - for(k = 0; k < nK; k++){ - ptCluster->adLDet[k] = 0.0; - ptCluster->adPi[k] = 0.0; - ptCluster->adBeta[k] = 0.0; - ptCluster->adNu[k] = 0.0; - } - - ptCluster->aadMu = (double **) malloc(nK*sizeof(double *)); - if(!ptCluster->aadMu) - goto memoryError; - - ptCluster->aadM = (double **) malloc(nK*sizeof(double *)); - if(!ptCluster->aadM) - goto memoryError; - - for(i = 0; i < nK; i++){ - ptCluster->aadM[i] = (double*) malloc (nD*sizeof(double)); - if(!ptCluster->aadM[i]) - goto memoryError; - - ptCluster->aadMu[i] = (double*) malloc (nD*sizeof(double)); - if(!ptCluster->aadMu[i]) - goto memoryError; - } - - ptCluster->aptSigma = (gsl_matrix **) malloc(nK*sizeof(gsl_matrix *)); - if(!ptCluster->aptSigma) - goto memoryError; - - for(i = 0; i < nK ; i++){ - ptCluster->aptSigma[i] = (gsl_matrix*) gsl_matrix_alloc (nD, nD); - } - - ptCluster->aptCovar = (gsl_matrix **) malloc(nK*sizeof(gsl_matrix *)); - if(!ptCluster->aptCovar) - goto memoryError; - - for(i = 0; i < nK ; i++){ - ptCluster->aptCovar[i] = (gsl_matrix*) gsl_matrix_alloc (nD, nD); - } - - return; - - memoryError: - fprintf(stderr, "Failed allocating memory in allocateCluster\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void writeSquareMatrix(char*szFile, gsl_matrix *ptMatrix, int nD) -{ - int i = 0, j = 0; - FILE* ofp = fopen(szFile,"w"); - - if(ofp){ - for(i = 0; i < nD; i++){ - for(j = 0; j < nD - 1; j++){ - fprintf(ofp,"%f,",gsl_matrix_get(ptMatrix,i,j)); - } - fprintf(ofp,"%f\n",gsl_matrix_get(ptMatrix,i,j)); - } - } - else{ - fprintf(stderr,"Failed to open %s for writing in writeSquareMatrix\n", szFile); - fflush(stderr); - } -} - -double decomposeMatrix(gsl_matrix *ptSigmaMatrix, int nD) -{ - double dDet = 0.0; - int status; - int l = 0; - - status = gsl_linalg_cholesky_decomp(ptSigmaMatrix); - - if(status == GSL_EDOM){ - fprintf(stderr,"Failed Cholesky decomposition in decomposeMatrix\n"); - fflush(stderr); - exit(EXIT_FAILURE); - } - else{ - for(l = 0; l < nD; l++){ - double dT = gsl_matrix_get(ptSigmaMatrix,l,l); - dDet += 2.0*log(dT); - } - gsl_linalg_cholesky_invert(ptSigmaMatrix); - return dDet; - } -} - -void performMStep(t_Cluster *ptCluster, t_Data *ptData){ - int i = 0, j = 0, k = 0, l = 0, m = 0; - int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; - double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; - double *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; - double **aadCovar = NULL, **aadInvWK = NULL; - t_VBParams *ptVBParams = ptCluster->ptVBParams; - - gsl_matrix* ptSigmaMatrix = gsl_matrix_alloc(nD,nD); - - aadCovar = (double **) malloc(nD*sizeof(double*)); - if(!aadCovar) - goto memoryError; - - for(i = 0; i < nD; i++){ - aadCovar[i] = (double *) malloc(nD*sizeof(double)); - if(!aadCovar[i]) - goto memoryError; - } - - aadInvWK = (double **) malloc(nD*sizeof(double*)); - if(!aadInvWK) - goto memoryError; - - for(i = 0; i < nD; i++){ - aadInvWK[i] = (double *) malloc(nD*sizeof(double)); - if(!aadInvWK[i]) - goto memoryError; - } - - /*perform M step*/ - for(k = 0; k < nK; k++){ /*loop components*/ - double* adMu = ptCluster->aadMu[k]; - gsl_matrix *ptSigmaMatrix = ptCluster->aptSigma[k]; - double dF = 0.0; - /*recompute mixture weights and means*/ - for(j = 0; j < nD; j++){ - adMu[j] = 0.0; - for(l = 0; l < nD; l++){ - aadCovar[j][l] = 0.0; - } - } - - /* compute weight associated with component k*/ - adPi[k] = 0.0; - for(i = 0; i < nN; i++){ - if(aadZ[i][k] > MIN_Z){ - adPi[k] += aadZ[i][k]; - for(j = 0; j < nD; j++){ - adMu[j] += aadZ[i][k]*aadX[i][j]; - } - } - } - - /*normalise means*/ - if(adPi[k] > MIN_PI){ - /*Equation 10.60*/ - ptCluster->adBeta[k] = ptVBParams->dBeta0 + adPi[k]; - - for(j = 0; j < nD; j++){ - /*Equation 10.61*/ - ptCluster->aadM[k][j] = adMu[j]/ptCluster->adBeta[k]; - adMu[j] /= adPi[k]; - } - - ptCluster->adNu[k] = ptVBParams->dNu0 + adPi[k]; - - - /*calculate covariance matrices*/ - for(i = 0; i < nN; i++){ - if(aadZ[i][k] > MIN_Z){ - double adDiff[nD]; - - for(j = 0; j < nD; j++){ - adDiff[j] = aadX[i][j] - adMu[j]; - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <=l ; m++){ - aadCovar[l][m] += aadZ[i][k]*adDiff[l]*adDiff[m]; - } - } - } - } - - for(l = 0; l < nD; l++){ - for(m = l + 1; m < nD; m++){ - aadCovar[l][m] = aadCovar[m][l]; - } - } - - /*save sample covariances for later use*/ - for(l = 0; l < nD; l++){ - for(m = 0; m < nD; m++){ - double dC = aadCovar[l][m] / adPi[k]; - gsl_matrix_set(ptCluster->aptCovar[k],l,m,dC); - } - } - - /*Now perform equation 10.62*/ - dF = (ptVBParams->dBeta0*adPi[k])/ptCluster->adBeta[k]; - for(l = 0; l < nD; l++){ - for(m = 0; m <= l; m++){ - aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m) + aadCovar[l][m] + dF*adMu[l]*adMu[m]; - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ - aadCovar[l][m] /= adPi[k]; - gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); - gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); - } - } - - - /*Implement Equation 10.65*/ - adLDet[k] = ((double) nD)*log(2.0); - - for(l = 0; l < nD; l++){ - double dX = 0.5*(ptCluster->adNu[k] - (double) l); - adLDet[k] += gsl_sf_psi (dX); - } - - adLDet[k] -= decomposeMatrix(ptSigmaMatrix,nD); - } - else{ - /*Equation 10.60*/ - adPi[k] = 0.0; - - ptCluster->adBeta[k] = ptVBParams->dBeta0; - - for(j = 0; j < nD; j++){ - /*Equation 10.61*/ - ptCluster->aadM[k][j] = 0.0; - adMu[j] = 0.0; - } - - ptCluster->adNu[k] = ptVBParams->dNu0; - - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l; m++){ - aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ -aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ -gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); - gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); - } - } - - /*Implement Equation 10.65*/ - adLDet[k] = ((double) nD)*log(2.0); - - for(l = 0; l < nD; l++){ - double dX = 0.5*(ptCluster->adNu[k] - (double) l); - adLDet[k] += gsl_sf_psi (dX); - } - - adLDet[k] -= decomposeMatrix(ptSigmaMatrix,nD); - } - } - -/*Normalise pi*/ - - if(1){ - double dNP = 0.0; - - for(k = 0; k < nK; k++){ - dNP += adPi[k]; - } - - for(k = 0; k < nK; k++){ - adPi[k] /= dNP; - } - } - - /*free up memory*/ - for(i = 0; i < nD; i++){ - free(aadCovar[i]); - free(aadInvWK[i]); - } - - free(aadCovar); - free(aadInvWK); - - return; - - memoryError: - fprintf(stderr, "Failed allocating memory in performMStep\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData) -{ - int i = 0, j = 0, k = 0, l = 0, m = 0; - int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; - double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; - double *adPi = ptCluster->adPi, **aadCovar = NULL; - double dN = (double) nN; - - - aadCovar = (double **) malloc(nD*sizeof(double*)); - if(!aadCovar) - goto memoryError; - - for(i = 0; i < nD; i++){ - aadCovar[i] = (double *) malloc(nD*sizeof(double)); - if(!aadCovar[i]) - goto memoryError; - } - - - for(k = 0; k < nK; k++){ /*loop components*/ - double* adMu = ptCluster->aadMu[k]; - gsl_matrix *ptSigmaMatrix = ptCluster->aptSigma[k]; - /*recompute mixture weights and means*/ - for(j = 0; j < nD; j++){ - adMu[j] = 0.0; - for(l = 0; l < nD; l++){ - aadCovar[j][l] = 0.0; - } - /*prevents singularities*/ - aadCovar[j][j] = MIN_COVAR; - } - - /* compute weight associated with component k*/ - adPi[k] = 0.0; - for(i = 0; i < nN; i++){ - adPi[k] += aadZ[i][k]; - for(j = 0; j < nD; j++){ - adMu[j] += aadZ[i][k]*aadX[i][j]; - } - } - /*normalise means*/ - for(j = 0; j < nD; j++){ - adMu[j] /= adPi[k]; - } - - /*calculate covariance matrices*/ - for(i = 0; i < nN; i++){ - double adDiff[nD]; - - for(j = 0; j < nD; j++){ - adDiff[j] = aadX[i][j] - adMu[j]; - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <=l ; m++){ - aadCovar[l][m] += aadZ[i][k]*adDiff[l]*adDiff[m]; - } - } - } - - for(l = 0; l < nD; l++){ - for(m = l + 1; m < nD; m++){ - aadCovar[l][m] = aadCovar[m][l]; - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m < nD; m++){ - aadCovar[l][m] /= adPi[k]; - gsl_matrix_set(ptSigmaMatrix, l, m, aadCovar[l][m]); - } - } - - adPi[k] /= dN; /*normalise weights*/ - } - /*free up memory*/ - for(i = 0; i < nD; i++){ - free(aadCovar[i]); - } - - //gsl_matrix_free(ptSigmaMatrix); - free(aadCovar); - - return; - memoryError: - fprintf(stderr, "Failed allocating memory in performMStep\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void calcCovarMatricesVB(t_Cluster *ptCluster, t_Data *ptData){ - int i = 0, j = 0, k = 0, l = 0, m = 0; - int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; - double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; - double *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; - double **aadCovar = NULL, **aadInvWK = NULL; - t_VBParams *ptVBParams = ptCluster->ptVBParams; - - aadCovar = (double **) malloc(nD*sizeof(double*)); - if(!aadCovar) - goto memoryError; - - for(i = 0; i < nD; i++){ - aadCovar[i] = (double *) malloc(nD*sizeof(double)); - if(!aadCovar[i]) - goto memoryError; - } - - aadInvWK = (double **) malloc(nD*sizeof(double*)); - if(!aadInvWK) - goto memoryError; - - for(i = 0; i < nD; i++){ - aadInvWK[i] = (double *) malloc(nD*sizeof(double)); - if(!aadInvWK[i]) - goto memoryError; - } - - - /*perform M step*/ - for(k = 0; k < nK; k++){ /*loop components*/ - double* adMu = ptCluster->aadMu[k]; - gsl_matrix *ptSigmaMatrix = ptCluster->aptSigma[k]; - double dF = 0.0; - - /*recompute mixture weights and means*/ - for(j = 0; j < nD; j++){ - adMu[j] = 0.0; - for(l = 0; l < nD; l++){ - aadCovar[j][l] = 0.0; - } - } - - /* compute weight associated with component k*/ - adPi[k] = 0.0; - for(i = 0; i < nN; i++){ - adPi[k] += aadZ[i][k]; - for(j = 0; j < nD; j++){ - adMu[j] += aadZ[i][k]*aadX[i][j]; - } - } - /*normalise means*/ - if(adPi[k] > MIN_PI){ - - /*Equation 10.60*/ - ptCluster->adBeta[k] = ptVBParams->dBeta0 + adPi[k]; - - for(j = 0; j < nD; j++){ - /*Equation 10.61*/ - ptCluster->aadM[k][j] = adMu[j]/ptCluster->adBeta[k]; - adMu[j] /= adPi[k]; - } - - ptCluster->adNu[k] = ptVBParams->dNu0 + adPi[k]; - - - /*calculate covariance matrices*/ - for(i = 0; i < nN; i++){ - double adDiff[nD]; - - for(j = 0; j < nD; j++){ - adDiff[j] = aadX[i][j] - adMu[j]; - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <=l ; m++){ - aadCovar[l][m] += aadZ[i][k]*adDiff[l]*adDiff[m]; - } - } - } - - for(l = 0; l < nD; l++){ - for(m = l + 1; m < nD; m++){ - aadCovar[l][m] = aadCovar[m][l]; - } - } - - /*save sample covariances for later use*/ - for(l = 0; l < nD; l++){ - for(m = 0; m < nD; m++){ - double dC = aadCovar[l][m] / adPi[k]; - gsl_matrix_set(ptCluster->aptCovar[k],l,m,dC); - } - } - - /*Now perform equation 10.62*/ - dF = (ptVBParams->dBeta0*adPi[k])/ptCluster->adBeta[k]; - for(l = 0; l < nD; l++){ - for(m = 0; m <= l; m++){ - aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m) + aadCovar[l][m] + dF*adMu[l]*adMu[m]; - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ - //aadCovar[l][m] /= adPi[k]; - gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); - gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); - } - } - - } - else{ - /*Equation 10.60*/ - adPi[k] = 0.0; - - ptCluster->adBeta[k] = ptVBParams->dBeta0; - - for(j = 0; j < nD; j++){ - /*Equation 10.61*/ - ptCluster->aadM[k][j] = 0.0; - adMu[j] = 0.0; - } - - ptCluster->adNu[k] = ptVBParams->dNu0; - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l; m++){ - aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ - //aadCovar[l][m] /= adPi[k]; - gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); - gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); - } - } - - /*Implement Equation 10.65*/ - adLDet[k] = ((double) nD)*log(2.0); - - for(l = 0; l < nD; l++){ - double dX = 0.5*(ptCluster->adNu[k] - (double) l); - adLDet[k] += gsl_sf_psi (dX); - } - - adLDet[k] -= decomposeMatrix(ptSigmaMatrix,nD); - } - } - - /*Normalise pi*/ - - if(1){ - double dNP = 0.0; - - for(k = 0; k < nK; k++){ - dNP += adPi[k]; - } - - for(k = 0; k < nK; k++){ - adPi[k] /= dNP; - } - } - - /*free up memory*/ - for(i = 0; i < nD; i++){ - free(aadCovar[i]); - free(aadInvWK[i]); - } - - //gsl_matrix_free(ptSigmaMatrix); - free(aadCovar); - free(aadInvWK); - return; - memoryError: - fprintf(stderr, "Failed allocating memory in performMStep\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void updateMeans(t_Cluster *ptCluster, t_Data *ptData){ - int i = 0, j = 0, k = 0; - int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; - int *anMaxZ = ptCluster->anMaxZ; - int *anW = ptCluster->anW; - double **aadX = ptData->aadX, **aadMu = ptCluster->aadMu; - - for(k = 0; k < nK; k++){ - - for(j = 0; j < nD; j++){ - aadMu[k][j] = 0.0; - } - } - - for(i = 0; i < nN; i++){ - int nZ = anMaxZ[i]; - - for(j = 0; j < nD; j++){ - aadMu[nZ][j] += aadX[i][j]; - } - } - - for(k = 0; k < nK; k++){ /*loop components*/ - - /*normalise means*/ - if(anW[k] > 0){ - for(j = 0; j < nD; j++){ - aadMu[k][j] /= (double) anW[k]; - } - } - else{ - for(j = 0; j < nD; j++){ - aadMu[k][j] = 0.0; - } - } - } - - return; -} - -void initRandom(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData) -{ - /*very simple initialisation assign each data point to random cluster*/ - int i = 0, k = 0; - - for(i = 0; i < ptData->nN; i++){ - int nIK = -1; - - for(k = 0; k < ptCluster->nK; k++){ - ptCluster->aadZ[i][k] = 0.0; - } - - nIK = gsl_rng_uniform_int (ptGSLRNG, ptCluster->nK); - - ptCluster->aadZ[i][nIK] = 1.0; - } - - performMStep(ptCluster, ptData); - - return; -} - -double calcDist(double* adX, double *adMu, int nD) -{ - double dDist = 0.0; - int i = 0; - - for(i = 0; i < nD; i++){ - double dV = adX[i] - adMu[i]; - dDist += dV*dV; - } - - return sqrt(dDist); -} - -void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData) -{ - /*very simple initialisation assign each data point to random cluster*/ - int i = 0, k = 0, nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; - double **aadMu = ptCluster->aadMu, **aadX = ptData->aadX; - int *anMaxZ = ptCluster->anMaxZ, *anW = ptCluster->anW, nChange = nN; - int nIter = 0, nMaxIter = ptCluster->nMaxIter; - for(i = 0; i < nN; i++){ - int nIK = gsl_rng_uniform_int (ptGSLRNG, nK); - - ptCluster->anMaxZ[i] = nIK; - anW[nIK]++; - } - - updateMeans(ptCluster, ptData); - - while(nChange > 0 && nIter < nMaxIter){ - nChange = 0; - /*reassign vectors*/ - for(i = 0; i < nN; i++){ - double dMinDist = DBL_MAX; - int nMinK = NOT_SET; - - for(k = 0; k < nK; k++){ - double dDist = calcDist(aadX[i],aadMu[k],nD); - - if(dDist < dMinDist){ - nMinK = k; - dMinDist = dDist; - } - } - - if(nMinK != anMaxZ[i]){ - int nCurr = anMaxZ[i]; - nChange++; - anW[nCurr]--; - anW[nMinK]++; - anMaxZ[i] = nMinK; - - /*check for empty clusters*/ - if(anW[nCurr] == 0){ - int nRandI = gsl_rng_uniform_int (ptGSLRNG, nN); - int nKI = 0; - /*select at random from non empty clusters*/ - - while(anW[anMaxZ[nRandI]] == 1){ - nRandI = gsl_rng_uniform_int (ptGSLRNG, nN); - } - - nKI = anMaxZ[nRandI]; - anW[nKI]--; - anW[nCurr] = 1; - anMaxZ[nRandI] = nCurr; - } - } - } - //printf("%d %d\n",nIter,nChange); - nIter++; - updateMeans(ptCluster, ptData); - } - - for(i = 0; i < nN; i++){ - for(k = 0; k < nK; k++){ - ptCluster->aadZ[i][k] = 0.0; - } - ptCluster->aadZ[i][anMaxZ[i]] = 1.0; - } - - performMStep(ptCluster, ptData); - return; -} - -/*note assuming you are using inverse W matrix*/ -double dLogWishartB(gsl_matrix *ptInvW, int nD, double dNu, int bInv) -{ - int i = 0; - double dRet = 0.0, dT = 0.0; - double dLogDet = 0.0, dD = (double) nD; - gsl_matrix* ptTemp = gsl_matrix_alloc(nD,nD); - - gsl_matrix_memcpy(ptTemp, ptInvW); - - dLogDet = decomposeMatrix(ptTemp, nD); - - if(bInv == TRUE){ - dRet = 0.5*dNu*dLogDet; - } - else{ - dRet = -0.5*dNu*dLogDet; - } - - dT = 0.5*dNu*dD*log(2.0); - - dT += 0.25*dD*(dD - 1.0)*log(M_PI); - - for(i = 0; i < nD; i++){ - dT += gsl_sf_lngamma(0.5*(dNu - (double) i)); - } - - gsl_matrix_free(ptTemp); - - return dRet - dT; -} - -double dWishartExpectLogDet(gsl_matrix *ptW, double dNu, int nD) -{ - int i = 0; - double dRet = 0.0, dLogDet = 0.0, dD = (double) nD; - gsl_matrix* ptTemp = gsl_matrix_alloc(nD,nD); - - gsl_matrix_memcpy(ptTemp, ptW); - - dLogDet = decomposeMatrix(ptW, nD); - - dRet = dD*log(2.0) + dLogDet; - - for(i = 0; i < nD; i++){ - dRet += gsl_sf_psi(0.5*(dNu - (double) i)); - } - - gsl_matrix_free(ptTemp); - - return dRet; -} - - -double dWishartEntropy(gsl_matrix *ptW, double dNu, int nD) -{ - double dRet = -dLogWishartB(ptW, nD, dNu, FALSE); - double dExpLogDet = dWishartExpectLogDet(ptW, dNu, nD); - double dD = (double) nD; - - dRet -= 0.5 * (dNu - dD - 1.0)*dExpLogDet; - - dRet += 0.5*dNu*dD; - - return dRet; -} - -double calcVBL(t_Cluster* ptCluster) -{ - int i = 0, k = 0, l = 0, nN = ptCluster->nN; - int nK = ptCluster->nK, nD = ptCluster->nD; - double dBishop1 = 0.0, dBishop2 = 0.0, dBishop3 = 0.0, dBishop4 = 0.0, dBishop5 = 0.0; /*Bishop equations 10.71...*/ - gsl_matrix *ptRes = gsl_matrix_alloc(nD,nD); - gsl_vector *ptDiff = gsl_vector_alloc(nD); - gsl_vector *ptR = gsl_vector_alloc(nD); - double dD = (double) nD; - double** aadMu = ptCluster->aadMu, **aadM = ptCluster->aadM, **aadZ = ptCluster->aadZ; - double* adBeta = ptCluster->adBeta, *adNu = ptCluster->adNu, *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; - double adNK[nK]; - double d2Pi = 2.0*M_PI, dBeta0 = ptCluster->ptVBParams->dBeta0, dNu0 = ptCluster->ptVBParams->dNu0, dRet = 0.0; - double dK = 0.0; - - for(k = 0; k < nK; k++){ - adNK[k] = 0.0; - } - - /*Equation 10.72*/ - for(i = 0; i < nN; i++){ - for(k = 0; k < nK; k++){ - adNK[k] += aadZ[i][k]; - if(adPi[k] > 0.0){ - dBishop2 += aadZ[i][k]*log(adPi[k]); - } - } - } - - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - dK++; - } - } - - /*Equation 10.71*/ - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - double dT1 = 0.0, dT2 = 0.0, dF = 0.0; - - gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptCluster->aptCovar[k],ptCluster->aptSigma[k],0.0,ptRes); - - for(l = 0; l < nD; l++){ - dT1 += gsl_matrix_get(ptRes,l,l); - } - - for(l = 0; l < nD; l++){ - gsl_vector_set(ptDiff,l,aadMu[k][l] - aadM[k][l]); - } - - gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptR); - - gsl_blas_ddot (ptDiff, ptR, &dT2); - - dF = adLDet[k] - adNu[k]*(dT1 + dT2) - dD*(log(d2Pi) + (1.0/adBeta[k])); - - dBishop1 += 0.5*adNK[k]*dF; - } - } - - /*Equation 10.74*/ - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - double dT1 = 0.0, dT2 = 0.0, dF = 0.0; - - gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptCluster->ptVBParams->ptInvW0,ptCluster->aptSigma[k],0.0,ptRes); - - for(l = 0; l < nD; l++){ - dT1 += gsl_matrix_get(ptRes,l,l); - } - - for(l = 0; l < nD; l++){ - gsl_vector_set(ptDiff,l,aadM[k][l]); - } - - gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptR); - - gsl_blas_ddot (ptDiff, ptR, &dT2); - - dF = dD*log(dBeta0/d2Pi) + adLDet[k] - ((dD*dBeta0)/adBeta[k]) - dBeta0*adNu[k]*dT2 - adNu[k]*dT1; - - dBishop3 += 0.5*(dF + (dNu0 - dD - 1.0)*adLDet[k]); - } - } - - dBishop3 += dK*ptCluster->ptVBParams->dLogWishartB; - - /*Equation 10.75*/ - for(i = 0; i < nN; i++){ - for(k = 0; k < nK; k++){ - if(aadZ[i][k] > 0.0){ - dBishop4 += aadZ[i][k]*log(aadZ[i][k]); - } - } - } - - /*Equation 10.77*/ - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - dBishop5 += 0.5*adLDet[k] + 0.5*dD*log(adBeta[k]/d2Pi) - 0.5*dD - dWishartExpectLogDet(ptCluster->aptSigma[k], adNu[k], nD); - } - } - - gsl_matrix_free(ptRes); - gsl_vector_free(ptDiff); - gsl_vector_free(ptR); - - dRet = dBishop1 + dBishop2 + dBishop3 - dBishop4 - dBishop5; - - return dRet; -} - -void calcZ(t_Cluster* ptCluster, t_Data *ptData){ - double **aadX = ptData->aadX, **aadZ = ptCluster->aadZ; - int i = 0, k = 0, l = 0; - int nK = ptCluster->nK, nD = ptCluster->nD, nN = ptData->nN; - gsl_vector *ptDiff = gsl_vector_alloc(nD); - gsl_vector *ptRes = gsl_vector_alloc(nD); - double adDist[nK], dD = (double) nD; - double** aadM = ptCluster->aadM, *adPi = ptCluster->adPi; - - for(i = 0; i < nN; i++){ - double dMinDist = DBL_MAX; - double dTotalZ = 0.0; - double dNTotalZ = 0.0; - - for(k = 0; k < nK; k++){ - if(adPi[k] > 0.){ - /*set vector to data point*/ - for(l = 0; l < nD; l++){ - gsl_vector_set(ptDiff,l,aadX[i][l] - aadM[k][l]); - } - - gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptRes); - - gsl_blas_ddot (ptDiff, ptRes, &adDist[k]); - - adDist[k] *= ptCluster->adNu[k]; - - adDist[k] -= ptCluster->adLDet[k]; - - adDist[k] += dD/ptCluster->adBeta[k]; - - if(adDist[k] < dMinDist){ - dMinDist = adDist[k]; - } - } - } - - for(k = 0; k < nK; k++){ - if(adPi[k] > 0.){ - aadZ[i][k] = adPi[k]*exp(-0.5*(adDist[k]-dMinDist)); - dTotalZ += aadZ[i][k]; - } - else{ - aadZ[i][k] = 0.0; - } - } - - for(k = 0; k < nK; k++){ - double dF = aadZ[i][k] / dTotalZ; - if(dF < MIN_Z){ - aadZ[i][k] = 0.0; - } - dNTotalZ += aadZ[i][k]; - } - if(dNTotalZ > 0.){ - for(k = 0; k < nK; k++){ - aadZ[i][k] /= dNTotalZ; - } - } - } - - gsl_vector_free(ptRes); - gsl_vector_free(ptDiff); - return; -} - - -void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData) -{ - int i = 0, k = 0,nIter = 0; - int nN = ptData->nN, nK = ptCluster->nK; - /*change in log-likelihood*/ - double dLastVBL = 0.0, dDelta = DBL_MAX; - double **aadZ = ptCluster->aadZ; - int nMaxIter = ptCluster->nMaxIter; - double dEpsilon = ptCluster->dEpsilon; - FILE *ofp = NULL; - - if(ptCluster->szCOutFile){ - ofp = fopen(ptCluster->szCOutFile,"w"); - if(!ofp){ - fprintf(stderr, "Failed to open file %s in gmmTrainVB\n",ptCluster->szCOutFile); - fflush(stderr); - } - } - - /*calculate data likelihood*/ - calcZ(ptCluster,ptData); - ptCluster->dVBL = calcVBL(ptCluster); - - while(nIter < nMaxIter && dDelta > dEpsilon){ - - /*update parameter estimates*/ - performMStep(ptCluster, ptData); - - /*calculate responsibilities*/ - calcZ(ptCluster,ptData); - - dLastVBL = ptCluster->dVBL; - ptCluster->dVBL = calcVBL(ptCluster); - dDelta = fabs(ptCluster->dVBL - dLastVBL); - - if(ofp){ - fprintf(ofp,"%d,%f,%f,",nIter, ptCluster->dVBL, dDelta); - for(k = 0; k < nK-1; k++){ - fprintf(ofp,"%f,",ptCluster->adPi[k]); - } - fprintf(ofp,"%f\n",ptCluster->adPi[nK - 1]); - fflush(ofp); - } - nIter++; - } - - if(ofp){ - fclose(ofp); - } - - /*assign to best clusters*/ - for(i = 0; i < nN; i++){ - double dMaxZ = aadZ[i][0]; - int nMaxK = 0; - for(k = 1; k < nK; k++){ - if(aadZ[i][k] > dMaxZ){ - nMaxK = k; - dMaxZ = aadZ[i][k]; - } - } - ptCluster->anMaxZ[i] = nMaxK; - } - - return; -} - -void writeClusters(char *szOutFile, t_Cluster *ptCluster, t_Data *ptData) -{ - int nN = ptCluster->nN, i = 0; - FILE* ofp = fopen(szOutFile,"w"); - - if(ofp){ - for(i = 0; i < nN; i++){ - fprintf(ofp,"%s,%d\n",ptData->aszSampleNames[i],ptCluster->anMaxZ[i]); - } - } - else{ - fprintf(stderr,"Failed to open %s for writing in writeClusters\n", szOutFile); - fflush(stderr); - } -} - -void writeMeans(char *szOutFile, t_Cluster *ptCluster) -{ - int nK = ptCluster->nK, nD = ptCluster->nD,i = 0, j = 0; - FILE* ofp = fopen(szOutFile,"w"); - - if(ofp){ - for(i = 0; i < nK; i++){ - for(j = 0; j < nD - 1; j++){ - fprintf(ofp,"%f,",ptCluster->aadMu[i][j]); - } - fprintf(ofp,"%f\n",ptCluster->aadMu[i][nD - 1]); - } - } - else{ - fprintf(stderr,"Failed to open %s for writing in writeMeanss\n", szOutFile); - fflush(stderr); - } -} - -void writeTMeans(char *szOutFile, t_Cluster *ptCluster, t_Data *ptData) -{ - int nK = ptCluster->nK, nD = ptCluster->nD, nT = ptData->nT, i = 0, j = 0; - FILE* ofp = fopen(szOutFile,"w"); - gsl_vector* ptVector = gsl_vector_alloc(nD); - gsl_vector* ptTVector = gsl_vector_alloc(nT); - - if(ofp){ - for(i = 0; i < nK; i++){ - for(j = 0; j < nD; j++){ - gsl_vector_set(ptVector,j,ptCluster->aadMu[i][j]); - } - - gsl_blas_dgemv (CblasNoTrans, 1.0,ptData->ptTMatrix,ptVector,0.0, ptTVector); - - for(j = 0; j < nT - 1; j++){ - fprintf(ofp,"%f,",gsl_vector_get(ptTVector,j)); - } - fprintf(ofp,"%f\n",gsl_vector_get(ptTVector,nD - 1)); - } - } - else{ - fprintf(stderr,"Failed to open %s for writing in writeMeanss\n", szOutFile); - fflush(stderr); - } - - gsl_vector_free(ptVector); - gsl_vector_free(ptTVector); -} - - - -void* fitEM(void *pvCluster) -{ - t_Cluster *ptCluster = (t_Cluster *) pvCluster; - gsl_rng *ptGSLRNG = NULL; - const gsl_rng_type *ptGSLRNGType = NULL; - - /*initialise GSL RNG*/ - ptGSLRNGType = gsl_rng_default; - ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); - - gsl_rng_set (ptGSLRNG, ptCluster->lSeed); - - initKMeans(ptGSLRNG, ptCluster, ptCluster->ptData); - - gmmTrainVB(ptCluster, ptCluster->ptData); - - gsl_rng_free(ptGSLRNG); - - return NULL; -} - -void* runRThreads(void *pvpDCluster) -{ - t_Cluster **pptDCluster = (t_Cluster **) pvpDCluster; - t_Cluster *ptDCluster = (t_Cluster *) *pptDCluster; - double dBestVBL = -DBL_MAX; - t_Cluster** aptCluster = NULL; - pthread_t atRestarts[N_RTHREADS]; /*run each restart on a separate thread*/ - int iret[N_RTHREADS]; - int r = 0, nBestR = -1; - char *szCOutFile = NULL; - aptCluster = (t_Cluster **) malloc(N_RTHREADS*sizeof(t_Cluster*)); - if(!aptCluster) - goto memoryError; - - for(r = 0; r < N_RTHREADS; r++){ - if(ptDCluster->szCOutFile != NULL){ - szCOutFile = (char *) malloc(sizeof(char)*MAX_FILE_NAME_LENGTH); - sprintf(szCOutFile,"%sr%d.csv",ptDCluster->szCOutFile,r); - } - - aptCluster[r] = (t_Cluster *) malloc(sizeof(t_Cluster)); - - allocateCluster(aptCluster[r],ptDCluster->nN,ptDCluster->nK,ptDCluster->nD,ptDCluster->ptData,ptDCluster->lSeed + r*R_PRIME,ptDCluster->nMaxIter,ptDCluster->dEpsilon,szCOutFile); - aptCluster[r]->ptVBParams = ptDCluster->ptVBParams; - aptCluster[r]->nThread = r; - iret[r] = pthread_create(&atRestarts[r], NULL, fitEM, (void*) aptCluster[r]); - } - - for(r = 0; r < N_RTHREADS; r++){ - pthread_join(atRestarts[r], NULL); - } - - /*free up memory associated with input cluster*/ - free(ptDCluster); - - for(r = 0; r < N_RTHREADS; r++){ - if(aptCluster[r]->dVBL > dBestVBL){ - nBestR = r; - dBestVBL = aptCluster[r]->dVBL; - } - } - - *pptDCluster = aptCluster[nBestR]; - for(r = 0; r < N_RTHREADS; r++){ - if(r != nBestR){ - destroyCluster(aptCluster[r]); - free(aptCluster[r]); - } - } - free(aptCluster); - - return NULL; - memoryError: - fprintf(stderr, "Failed allocating memory in runRThreads\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - -void calcSampleVar(t_Data *ptData,double *adVar, double *adMu) -{ - double **aadX = ptData->aadX; - int i = 0, n = 0; - int nD = ptData->nD, nN = ptData->nN; - /*sample means*/ - double dN = (double) nN; - - for(i = 0; i < nD; i++){ - adMu[i] = 0.0; - adVar[i] = 0.0; - } - - for(i = 0; i < nD; i++){ - for(n = 0; n < nN; n++){ - adMu[i] += aadX[n][i]; - adVar[i] += aadX[n][i]*aadX[n][i]; - } - - adMu[i] /= dN; - - adVar[i] = (adVar[i] - dN*adMu[i]*adMu[i])/(dN - 1.0); - } - - return; -} - -void compressCluster(t_Cluster *ptCluster) -{ - int i = 0, k = 0, nNewK = 0, nN = ptCluster->nN; - double **aadNewZ = NULL, dN = (double) nN; - - for(i = 0; i < ptCluster->nK; i++){ - if(ptCluster->adPi[i] > 0.0){ - nNewK++; - } - } - - aadNewZ = (double **) malloc(nN*sizeof(double *)); - if(!aadNewZ) - goto memoryError; - - for(i = 0; i < nN; i++){ - aadNewZ[i] = (double *) malloc(nNewK*sizeof(double)); - if(!aadNewZ[i]) - goto memoryError; - } - - for(i = 0; i < nN; i++){ - int nC = 0; - for(k = 0; k < ptCluster->nK; k++){ - if(ptCluster->adPi[k] > 0.0){ - aadNewZ[i][nC] = ptCluster->aadZ[i][k]; - nC++; - } - } - } - - for(i = 0; i < nN; i++){ - free(ptCluster->aadZ[i]); - } - free(ptCluster->aadZ); - - /*reset Z and K*/ - ptCluster->aadZ = aadNewZ; - ptCluster->nK = nNewK; - - /*recalculate Pi*/ - for(k = 0; k < ptCluster->nK; k++){ - ptCluster->adPi[k] = 0.0; - for(i = 0; i < nN; i++){ - ptCluster->adPi[k] += ptCluster->aadZ[i][k]; - } - ptCluster->adPi[k] /= dN; - } - - /*assign to best clusters*/ - for(i = 0; i < nN; i++){ - double dMaxZ = ptCluster->aadZ[i][0]; - int nMaxK = 0; - for(k = 1; k < ptCluster->nK; k++){ - if(ptCluster->aadZ[i][k] > dMaxZ){ - nMaxK = k; - dMaxZ = ptCluster->aadZ[i][k]; - } - } - ptCluster->anMaxZ[i] = nMaxK; - } - - for(k = 0; k < ptCluster->nK; k++){ - ptCluster->anW[k] = 0; - } - - for(i = 0; i < nN; i++){ - ptCluster->anW[ptCluster->anMaxZ[i]]++; - } - - return; - - memoryError: - fprintf(stderr, "Failed allocating memory in main\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} diff --git a/c-concoct/vbgmmmodule.h b/c-concoct/vbgmmmodule.h deleted file mode 100644 index 3a5144f..0000000 --- a/c-concoct/vbgmmmodule.h +++ /dev/null @@ -1,189 +0,0 @@ -#ifndef NMGS_H -#define NMGS_H - -typedef struct s_Params -{ - /*seed*/ - unsigned long int lSeed; - /*min change VBL*/ - double dEpsilon; - /*maximum no. iterations*/ - int nMaxIter; - /*csv input file*/ - char *szInputFile; - /*pca transformation*/ - char *szPInputFile; - /*output file stub*/ - const char *szOutFileStub; - /*initial cluster size*/ - int nKStart; - /*min contig length*/ - int nLMin; - /*output convergence*/ - int bConvergeOut; -} t_Params; - - -typedef struct s_Data -{ - int nN; - - int nT; - - int nD; - - gsl_matrix *ptTMatrix; - - double **aadX; - - char **aszDimNames; - - char **aszSampleNames; -} t_Data; - -typedef struct s_VBParams -{ - /*scale for mean prior*/ - double dBeta0; - - /*Wishart degrees of freedom*/ - double dNu0; - - /*Inverse! of the Wishart scale precision-matrix*/ - gsl_matrix *ptInvW0; - - /*Log Wishart normalisation*/ - double dLogWishartB; - -} t_VBParams; - - -typedef struct s_Cluster -{ - /*output file for convergence if not null*/ - char *szCOutFile; - /*parameters for variational Bayes*/ - t_VBParams *ptVBParams; - /*start seed*/ - unsigned long lSeed; - /* maximum no. iterations*/ - int nMaxIter; - /* min. change in VBL bound*/ - double dEpsilon; - /*thread index*/ - int nThread; - /*pointer to data*/ - t_Data *ptData; - /*number of data points*/ - int nN; - /*size no. of clusters allocated*/ - int nKSize; - /*number of clusters*/ - int nK; - /*number of dimensions*/ - int nD; - /*variational lower bound*/ - double dVBL; - /*Means*/ - double **aadMu; - /*Scaled weight Bishop 10.60*/ - double *adBeta; - /*Scaled means Bishop 10.61*/ - double **aadM; - /*sample covariance matrix for each cluster storing this helps with lower bound calcn*/ - gsl_matrix **aptCovar; - /*Inverse regularised variances Bishop 10.62*/ - gsl_matrix **aptSigma; - /*Bishop 10.63*/ - double *adNu; - /*Responsibilities*/ - double **aadZ; - /*log-Matrix determinants*/ - double *adLDet; - /*mixture weights*/ - double *adPi; - /*assigned cluster for each data point*/ - int *anMaxZ; - /*frequencies for each cluster*/ - int *anW; -} t_Cluster; - - -#define DELIM ",\n" -#define MAX_LINE_LENGTH 1048576 -#define MAX_FILE_NAME_LENGTH 1024 -#define MAX_WORD_LENGTH 128 - -#define TRUE 1 -#define FALSE 0 - -#define NOT_SET -1 - -/*Default parameters*/ -#define DEF_BETA0 1.0e-3 - -#define MIN_Z 1.0e-6 -#define MIN_PI 0.1 /*Unormalised*/ -#define MIN_COVAR 0.001 - -#define N_RTHREADS 10 -#define R_PRIME 1009 - -#define INPUT_FILE "PCA_transformed_data_gt" -#define PINPUT_FILE "PCA_components_data_gt" - -int driver(const char* szFileStub, int nKStart, int nLMin, unsigned long lSeed, int nMaxIter, double dEpsilon, int bCOut); - -void setParams(t_Params *ptParams,const char *szFileStub); - -void destroyParams(t_Params *ptParams); - -void setVBParams(t_VBParams *ptVBParams, t_Data *ptData); - -void readInputData(const char *szFile, t_Data *ptData); - -void readPInputData(const char *szFile, t_Data *ptData); - -void destroyData(t_Data *ptData); - -void allocateCluster(t_Cluster *ptCluster, int nN, int nK, int nD, t_Data *ptData, long lSeed, int nMaxIter, double dEpsilon, char *szCOutFile); - -void performMStep(t_Cluster *ptCluster, t_Data *ptData); - -void updateMeans(t_Cluster *ptCluster, t_Data *ptData); - -void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData); - -void initRandom(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData); - -void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData); - -double calcDist(double* adX, double *adMu, int nD); - -void calcZ(t_Cluster* ptCluster, t_Data* ptData); - -void writeClusters(char *szOutFile, t_Cluster *ptCluster, t_Data *ptData); - -void destroyCluster(t_Cluster* ptCluster); - -void* fitEM(void *pvCluster); - -void* runRThreads(void *pvpDCluster); - -void writeMeans(char *szOutFile, t_Cluster *ptCluster); - -void writeTMeans(char *szOutFile, t_Cluster *ptCluster,t_Data *ptData); - -void writeSquareMatrix(char*szFile, gsl_matrix *ptMatrix, int nD); - -void calcSampleVar(t_Data *ptData,double *adVar, double *adMu); - -double dLogWishartB(gsl_matrix *ptInvW, int nD, double dNu, int bInv); - -double calcVBL(t_Cluster* ptCluster); - -void compressCluster(t_Cluster* ptCluster); - -void calcCovarMatrices(t_Cluster *ptCluster, t_Data *ptData); - -#endif diff --git a/c-concoct/vbgmmmodule.o b/c-concoct/vbgmmmodule.o deleted file mode 100644 index d5b5132b43291dc89d43c02e9ea1487ec2f11a19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52176 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 TpFh`;hU;@&9!|scIWGSjrL)1% From 234b9590e4d588777c536cd269ff3bad9f26d3f7 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 10:54:57 +0200 Subject: [PATCH 34/78] Moved c-concoct2 to c-concoct --- {c-concoct2 => c-concoct}/Makefile | 0 .../build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o | Bin .../build/temp.macosx-10.9-x86_64-2.7/vbgmm.o | Bin {c-concoct2 => c-concoct}/c_vbgmm_fit.c | 0 {c-concoct2 => c-concoct}/c_vbgmm_fit.h | 0 {c-concoct2 => c-concoct}/setup.py | 0 {c-concoct2 => c-concoct}/test_vbgmm_fit.c | 0 {c-concoct2 => c-concoct}/vbgmm.pyx | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename {c-concoct2 => c-concoct}/Makefile (100%) rename {c-concoct2 => c-concoct}/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o (100%) rename {c-concoct2 => c-concoct}/build/temp.macosx-10.9-x86_64-2.7/vbgmm.o (100%) rename {c-concoct2 => c-concoct}/c_vbgmm_fit.c (100%) rename {c-concoct2 => c-concoct}/c_vbgmm_fit.h (100%) rename {c-concoct2 => c-concoct}/setup.py (100%) rename {c-concoct2 => c-concoct}/test_vbgmm_fit.c (100%) rename {c-concoct2 => c-concoct}/vbgmm.pyx (100%) diff --git a/c-concoct2/Makefile b/c-concoct/Makefile similarity index 100% rename from c-concoct2/Makefile rename to c-concoct/Makefile diff --git a/c-concoct2/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o b/c-concoct/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o similarity index 100% rename from c-concoct2/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o rename to c-concoct/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o diff --git a/c-concoct2/build/temp.macosx-10.9-x86_64-2.7/vbgmm.o b/c-concoct/build/temp.macosx-10.9-x86_64-2.7/vbgmm.o similarity index 100% rename from c-concoct2/build/temp.macosx-10.9-x86_64-2.7/vbgmm.o rename to c-concoct/build/temp.macosx-10.9-x86_64-2.7/vbgmm.o diff --git a/c-concoct2/c_vbgmm_fit.c b/c-concoct/c_vbgmm_fit.c similarity index 100% rename from c-concoct2/c_vbgmm_fit.c rename to c-concoct/c_vbgmm_fit.c diff --git a/c-concoct2/c_vbgmm_fit.h b/c-concoct/c_vbgmm_fit.h similarity index 100% rename from c-concoct2/c_vbgmm_fit.h rename to c-concoct/c_vbgmm_fit.h diff --git a/c-concoct2/setup.py b/c-concoct/setup.py similarity index 100% rename from c-concoct2/setup.py rename to c-concoct/setup.py diff --git a/c-concoct2/test_vbgmm_fit.c b/c-concoct/test_vbgmm_fit.c similarity index 100% rename from c-concoct2/test_vbgmm_fit.c rename to c-concoct/test_vbgmm_fit.c diff --git a/c-concoct2/vbgmm.pyx b/c-concoct/vbgmm.pyx similarity index 100% rename from c-concoct2/vbgmm.pyx rename to c-concoct/vbgmm.pyx From 31b46754d1e0b26405147f13f9bd8cf8f07adec8 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 10:55:23 +0200 Subject: [PATCH 35/78] Adjusted gitignore and setup.py for new directory structure --- .gitignore | 6 +----- setup.py | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index a6f10ad..7d2841e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,12 +9,8 @@ dist/* build/* c-concoct/build/* *.egg* -c-concoct/build/* c-concoct/dist/* -c-concoct2/build/* -c-concoct2/build/* -c-concoct2/dist/* -c-concoct2/*.c +c-concoct/*.pyx #ignore screen file .screenrc #ignore test folder diff --git a/setup.py b/setup.py index e73bd3f..2451985 100644 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ zip_safe=False, cmdclass = {'build_ext': build_ext}, ext_modules = [ - Extension("vbgmm", sources=["./c-concoct2/vbgmm.pyx", "./c-concoct2/c_vbgmm_fit.c"], + Extension("vbgmm", sources=["./c-concoct/vbgmm.pyx", "./c-concoct/c_vbgmm_fit.c"], libraries =['gsl', 'gslcblas','gomp'], include_dirs=include_dirs_for_concoct, extra_compile_args = ['-fopenmp','-O3','-std=c99']) ], install_requires=['cython>=0.19.1', From 966ed02e48df6dc17bd2b5632d32354010227d7c Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 11:31:21 +0200 Subject: [PATCH 36/78] Fixed depreciation warning for biopython --- scripts/fasta_to_features.py | 2 +- tests/test_unittest_input.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/fasta_to_features.py b/scripts/fasta_to_features.py index 7997647..5024cba 100755 --- a/scripts/fasta_to_features.py +++ b/scripts/fasta_to_features.py @@ -36,7 +36,7 @@ def generate_features_from_fasta(fasta_file,nr_datapoints,kmer_len,outfile): contigs_id = [] for i,seq in enumerate(seqs): contigs_id.append(seq.id) - for kmer_tuple in window(seq.seq.tostring().upper(),kmer_len): + for kmer_tuple in window(str(seq.seq).upper(),kmer_len): contigs[i,kmer_dict["".join(kmer_tuple)]] += 1 df = pd.DataFrame(contigs,index=contigs_id) df.to_csv(outfile) diff --git a/tests/test_unittest_input.py b/tests/test_unittest_input.py index 147c9cb..54050a5 100644 --- a/tests/test_unittest_input.py +++ b/tests/test_unittest_input.py @@ -58,7 +58,7 @@ def test__calculate_composition(self): seq_strings = {} for i, s in enumerate(seqs): - seq_strings[s.id] = s.seq.tostring().upper() + seq_strings[s.id] = str(s.seq).upper() composition, contig_lengths = _calculate_composition(f, 0, 4) From 761dc3ac0b4ee051386210659e94075c52fcdf6c Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 11:31:47 +0200 Subject: [PATCH 37/78] Removed old outputfiles from tests --- tests/test_integration.py | 44 +-------------------------------------- 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/tests/test_integration.py b/tests/test_integration.py index d43813e..8ab824d 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -94,7 +94,7 @@ def test_directory_creation(self): assert_true(isfile(tmp_basename_file+'_clustering_gt1000.csv'), msg = "Clustering file is not created, when file is used as basename") L = listdir(tmp_basename_dir) - assert_true(len(L) == 26, + assert_true(len(L) == 6, msg = "Wrong number of output files, observed {0}".format(L)) def test_prior_to_clustering(self): @@ -118,27 +118,6 @@ def test_output_files_creation(self): isfile(d_p+ '/clustering_gt1000.csv'), msg='Large contigs clustering file is not created' ) - assert_true( - isfile(d_p+ '/pca_means_gt1000.csv'), - msg='Large contigs cluster pca means file is not created' - ) - assert_true( - isfile(d_p+ '/pca_variances_gt1000_dim1.csv'), - msg='Large contigs cluster pca variances file is not created' - ) - assert_true( - isfile(d_p+ '/means_gt1000.csv'), - msg='Large contigs cluster means file is not created' - ) - - assert_true( - isfile(d_p+ '/variances_gt1000_dim1.csv'), - msg='Large contigs cluster variance file is not created' - ) - assert_true( - isfile(d_p+ '/responsibilities.csv'), - msg='Large contigs responsibilities file is not created' - ) assert_true( isfile(d_p+ '/PCA_transformed_data_gt1000.csv'), msg='PCA file is not created' @@ -158,27 +137,6 @@ def test_output_files_creation(self): isfile(d_p+ 'clustering_gt1000.csv'), msg='Large contigs clustering file is not created' ) - assert_true( - isfile(d_p+ 'pca_means_gt1000.csv'), - msg='Large contigs cluster means file is not created' - ) - assert_true( - isfile(d_p+ 'pca_variances_gt1000_dim1.csv'), - msg='Large contigs cluster variances file is not created' - ) - assert_true( - isfile(d_p+ 'means_gt1000.csv'), - msg='Large contigs cluster means file is not created' - ) - - assert_true( - isfile(d_p+ 'variances_gt1000_dim1.csv'), - msg='Large contigs cluster variance file is not created' - ) - assert_true( - isfile(d_p+ 'responsibilities.csv'), - msg='Large contigs responsibilities file is not created' - ) assert_true( isfile(d_p+ 'PCA_transformed_data_gt1000.csv'), msg='PCA file is not created' From 1c5203cf1305acf98612eecfae2a22b9e6e1fbf7 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 11:32:44 +0200 Subject: [PATCH 38/78] Ignore file created by cython compilation --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7d2841e..e8dfd11 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ build/* c-concoct/build/* *.egg* c-concoct/dist/* -c-concoct/*.pyx +c-concoct/vbgmm.c #ignore screen file .screenrc #ignore test folder From 20fd77f89ee0a0eb2a20b1c6ebae53d4070fc077 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 13:19:32 +0200 Subject: [PATCH 39/78] Removed prebuilt version of c-code --- .../temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o | Bin 69284 -> 0 bytes .../build/temp.macosx-10.9-x86_64-2.7/vbgmm.o | Bin 145964 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 c-concoct/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o delete mode 100644 c-concoct/build/temp.macosx-10.9-x86_64-2.7/vbgmm.o diff --git a/c-concoct/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o b/c-concoct/build/temp.macosx-10.9-x86_64-2.7/c_vbgmm_fit.o deleted file mode 100644 index 9a64bd0ca05f8ee487da2e695359d6504fa4e835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69284 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∥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

pgko9yitU9i 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 From c443d7b1f19651a104c1e9168fd686a8acb9b9e0 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 13:21:29 +0200 Subject: [PATCH 40/78] Removed unused non-MP versions of c-concoct --- c-concoct/c_vbgmm_fit.c | 641 +--------------------------------------- 1 file changed, 1 insertion(+), 640 deletions(-) diff --git a/c-concoct/c_vbgmm_fit.c b/c-concoct/c_vbgmm_fit.c index 7980871..01d0e16 100644 --- a/c-concoct/c_vbgmm_fit.c +++ b/c-concoct/c_vbgmm_fit.c @@ -149,97 +149,6 @@ int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned l exit(EXIT_FAILURE); } -int driver(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, - int nMaxIter, double dEpsilon, int debug, int bAssign) -{ - t_Params tParams; - t_Data tData; - gsl_rng *ptGSLRNG = NULL; - const gsl_rng_type *ptGSLRNGType = NULL; - t_VBParams tVBParams; - t_Cluster *ptBestCluster = NULL; - int i = 0; - - /*initialise GSL RNG*/ - gsl_rng_env_setup(); - - gsl_set_error_handler_off(); - - ptGSLRNGType = gsl_rng_default; - ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); - - /*set clusters params*/ - tParams.nKStart = nKStart; - tParams.nMaxIter = nMaxIter; - tParams.dEpsilon = dEpsilon; - tParams.lSeed = lSeed; - printf("Generate input data\n"); - generateInputData(adX, nN, nD, &tData); - - setVBParams(&tVBParams, &tData); - - ptBestCluster = (t_Cluster *) malloc(sizeof(t_Cluster)); - - ptBestCluster->nN = nN; - ptBestCluster->nK = tParams.nKStart; - ptBestCluster->nD = nD; - ptBestCluster->ptData = &tData; - ptBestCluster->ptVBParams = &tVBParams; - ptBestCluster->lSeed = tParams.lSeed; - ptBestCluster->nMaxIter = tParams.nMaxIter; - ptBestCluster->dEpsilon = tParams.dEpsilon; - - ptBestCluster->szCOutFile = NULL; - - if(debug>0){ - ptBestCluster->szCOutFile = DEF_FILE_STUB; - } - else{ - ptBestCluster->szCOutFile = NULL; - } - - if(bAssign > 0){ - ptBestCluster->anMaxZ = (int *) malloc(nN*sizeof(int)); - if(!ptBestCluster->anMaxZ){ - goto memoryError; - } - - for(i = 0; i < nN; i++){ - ptBestCluster->anMaxZ[i] = anAssign[i]; - } - } - - printf("Run threads\n"); - runRThreads((void *) &ptBestCluster); - - compressCluster(ptBestCluster); - - calcCovarMatrices(ptBestCluster,&tData); - - for(i = 0; i < nN; i++){ - anAssign[i] = ptBestCluster->anMaxZ[i]; - } - - /*free up memory in data object*/ - destroyData(&tData); - - /*free up best BIC clusters*/ - - destroyCluster(ptBestCluster); - free(ptBestCluster); - - gsl_rng_free(ptGSLRNG); - gsl_matrix_free(tVBParams.ptInvW0); - - return EXIT_SUCCESS; - - memoryError: - fprintf(stderr, "Failed allocating memory in driver\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - - void generateInputData(double *adX, int nN, int nD, t_Data *ptData) { double **aadX = NULL; @@ -480,38 +389,6 @@ void destroyCluster(t_Cluster* ptCluster) return; } -void* fitEM(void *pvCluster) -{ - t_Cluster *ptCluster = (t_Cluster *) pvCluster; - gsl_rng *ptGSLRNG = NULL; - const gsl_rng_type *ptGSLRNGType = NULL; - int i = 0, k = 0; - /*initialise GSL RNG*/ - ptGSLRNGType = gsl_rng_default; - ptGSLRNG = gsl_rng_alloc(ptGSLRNGType); - - gsl_rng_set (ptGSLRNG, ptCluster->lSeed); - - if(ptCluster->bAssign == FALSE){ - initKMeans(ptGSLRNG, ptCluster, ptCluster->ptData); - } - else{ - for(i = 0; i < ptCluster->nN; i++){ - for(k = 0; k < ptCluster->nK; k++){ - ptCluster->aadZ[i][k] = 0.0; - } - ptCluster->aadZ[i][ptCluster->anMaxZ[i]] = 1.0; - } - performMStep(ptCluster, ptCluster->ptData); - } - - gmmTrainVB(ptCluster, ptCluster->ptData); - - gsl_rng_free(ptGSLRNG); - - return NULL; -} - void* fitEM_MP(void *pvCluster) { t_Cluster *ptCluster = (t_Cluster *) pvCluster; @@ -544,76 +421,6 @@ void* fitEM_MP(void *pvCluster) return NULL; } -void* runRThreads(void *pvpDCluster) -{ - t_Cluster **pptDCluster = (t_Cluster **) pvpDCluster; - t_Cluster *ptDCluster = (t_Cluster *) *pptDCluster; - double dBestVBL = -DBL_MAX; - t_Cluster** aptCluster = NULL; - pthread_t atRestarts[N_RTHREADS]; /*run each restart on a separate thread*/ - int iret[N_RTHREADS]; - int r = 0, nBestR = -1; - char *szCOutFile = NULL; - int i = 0; - aptCluster = (t_Cluster **) malloc(N_RTHREADS*sizeof(t_Cluster*)); - if(!aptCluster) - goto memoryError; - - for(r = 0; r < N_RTHREADS; r++){ - if(ptDCluster->szCOutFile != NULL){ - szCOutFile = (char *) malloc(sizeof(char)*MAX_FILE_NAME_LENGTH); - - sprintf(szCOutFile,"%sr%d.csv",ptDCluster->szCOutFile,r); - } - - aptCluster[r] = (t_Cluster *) malloc(sizeof(t_Cluster)); - - allocateCluster(aptCluster[r],ptDCluster->nN,ptDCluster->nK,ptDCluster->nD,ptDCluster->ptData, - ptDCluster->lSeed + r*R_PRIME,ptDCluster->nMaxIter,ptDCluster->dEpsilon,szCOutFile); - aptCluster[r]->ptVBParams = ptDCluster->ptVBParams; - aptCluster[r]->bAssign = ptDCluster->bAssign; - if(ptDCluster->bAssign > 0){ - for(i = 0; i < ptDCluster->nN; i++){ - aptCluster[r]->anMaxZ[i] = ptDCluster->anMaxZ[i]; - } - } - - aptCluster[r]->nThread = r; - iret[r] = pthread_create(&atRestarts[r], NULL, fitEM, (void*) aptCluster[r]); - } - - for(r = 0; r < N_RTHREADS; r++){ - pthread_join(atRestarts[r], NULL); - } - - printf("Free up memory associated with input\n"); - fflush(stdout); - /*free up memory associated with input cluster*/ - free(ptDCluster); - - for(r = 0; r < N_RTHREADS; r++){ - if(aptCluster[r]->dVBL > dBestVBL){ - nBestR = r; - dBestVBL = aptCluster[r]->dVBL; - } - } - - *pptDCluster = aptCluster[nBestR]; - for(r = 0; r < N_RTHREADS; r++){ - if(r != nBestR){ - destroyCluster(aptCluster[r]); - free(aptCluster[r]); - } - } - free(aptCluster); - - return NULL; - memoryError: - fprintf(stderr, "Failed allocating memory in runRThreads\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - void compressCluster(t_Cluster *ptCluster) { int i = 0, k = 0, nNewK = 0, nN = ptCluster->nN; @@ -715,207 +522,6 @@ double decomposeMatrix(gsl_matrix *ptSigmaMatrix, int nD) } } - -void performMStep(t_Cluster *ptCluster, t_Data *ptData){ - int i = 0, j = 0, k = 0, l = 0, m = 0; - int nN = ptData->nN, nK = ptCluster->nK, nD = ptData->nD; - double **aadZ = ptCluster->aadZ,**aadX = ptData->aadX; - double *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; - double **aadCovar = NULL, **aadInvWK = NULL; - t_VBParams *ptVBParams = ptCluster->ptVBParams; - - aadCovar = (double **) malloc(nD*sizeof(double*)); - if(!aadCovar) - goto memoryError; - - for(i = 0; i < nD; i++){ - aadCovar[i] = (double *) malloc(nD*sizeof(double)); - if(!aadCovar[i]) - goto memoryError; - } - - aadInvWK = (double **) malloc(nD*sizeof(double*)); - if(!aadInvWK) - goto memoryError; - - for(i = 0; i < nD; i++){ - aadInvWK[i] = (double *) malloc(nD*sizeof(double)); - if(!aadInvWK[i]) - goto memoryError; - } - - /*perform M step*/ - for(k = 0; k < nK; k++){ /*loop components*/ - double* adMu = ptCluster->aadMu[k]; - gsl_matrix *ptSigmaMatrix = ptCluster->aptSigma[k]; - double dF = 0.0; - /*recompute mixture weights and means*/ - for(j = 0; j < nD; j++){ - adMu[j] = 0.0; - for(l = 0; l < nD; l++){ - aadCovar[j][l] = 0.0; - } - } - - /* compute weight associated with component k*/ - adPi[k] = 0.0; - for(i = 0; i < nN; i++){ - if(aadZ[i][k] > MIN_Z){ - adPi[k] += aadZ[i][k]; - for(j = 0; j < nD; j++){ - adMu[j] += aadZ[i][k]*aadX[i][j]; - } - } - } - - /*normalise means*/ - if(adPi[k] > MIN_PI){ - /*Equation 10.60*/ - ptCluster->adBeta[k] = ptVBParams->dBeta0 + adPi[k]; - - for(j = 0; j < nD; j++){ - /*Equation 10.61*/ - ptCluster->aadM[k][j] = adMu[j]/ptCluster->adBeta[k]; - adMu[j] /= adPi[k]; - } - - ptCluster->adNu[k] = ptVBParams->dNu0 + adPi[k]; - - - /*calculate covariance matrices*/ - for(i = 0; i < nN; i++){ - if(aadZ[i][k] > MIN_Z){ - double adDiff[nD]; - - for(j = 0; j < nD; j++){ - adDiff[j] = aadX[i][j] - adMu[j]; - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <=l ; m++){ - aadCovar[l][m] += aadZ[i][k]*adDiff[l]*adDiff[m]; - } - } - } - } - - for(l = 0; l < nD; l++){ - for(m = l + 1; m < nD; m++){ - aadCovar[l][m] = aadCovar[m][l]; - } - } - - /*save sample covariances for later use*/ - for(l = 0; l < nD; l++){ - for(m = 0; m < nD; m++){ - double dC = aadCovar[l][m] / adPi[k]; - gsl_matrix_set(ptCluster->aptCovar[k],l,m,dC); - } - } - - /*Now perform equation 10.62*/ - dF = (ptVBParams->dBeta0*adPi[k])/ptCluster->adBeta[k]; - for(l = 0; l < nD; l++){ - for(m = 0; m <= l; m++){ - aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m) + aadCovar[l][m] + dF*adMu[l]*adMu[m]; - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ - aadCovar[l][m] /= adPi[k]; - gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); - gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); - } - } - - - /*Implement Equation 10.65*/ - adLDet[k] = ((double) nD)*log(2.0); - - for(l = 0; l < nD; l++){ - double dX = 0.5*(ptCluster->adNu[k] - (double) l); - adLDet[k] += gsl_sf_psi (dX); - } - - adLDet[k] -= decomposeMatrix(ptSigmaMatrix,nD); - } - else{ - /*Equation 10.60*/ - adPi[k] = 0.0; - - ptCluster->adBeta[k] = ptVBParams->dBeta0; - - for(j = 0; j < nD; j++){ - /*Equation 10.61*/ - ptCluster->aadM[k][j] = 0.0; - adMu[j] = 0.0; - } - - ptCluster->adNu[k] = ptVBParams->dNu0; - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l; m++){ - aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ - aadInvWK[l][m] = gsl_matrix_get(ptVBParams->ptInvW0, l,m); - } - } - - for(l = 0; l < nD; l++){ - for(m = 0; m <= l ; m++){ - gsl_matrix_set(ptSigmaMatrix, l, m, aadInvWK[l][m]); - gsl_matrix_set(ptSigmaMatrix, m, l, aadInvWK[l][m]); - } - } - - /*Implement Equation 10.65*/ - adLDet[k] = ((double) nD)*log(2.0); - - for(l = 0; l < nD; l++){ - double dX = 0.5*(ptCluster->adNu[k] - (double) l); - adLDet[k] += gsl_sf_psi (dX); - } - - adLDet[k] -= decomposeMatrix(ptSigmaMatrix,nD); - } - } - - /*Normalise pi*/ - - if(1){ - double dNP = 0.0; - - for(k = 0; k < nK; k++){ - dNP += adPi[k]; - } - - for(k = 0; k < nK; k++){ - adPi[k] /= dNP; - } - } - - /*free up memory*/ - for(i = 0; i < nD; i++){ - free(aadCovar[i]); - free(aadInvWK[i]); - } - - free(aadCovar); - free(aadInvWK); - - return; - - memoryError: - fprintf(stderr, "Failed allocating memory in performMStep\n"); - fflush(stderr); - exit(EXIT_FAILURE); -} - double mstep(int k, double *adMu, double* adM, int nN, int nD, double** aadZ, double** aadX, double *pdBeta, double *pdNu, double *pdLDet, t_VBParams *ptVBParams, gsl_matrix *ptCovarK, gsl_matrix *ptSigmaMatrix) { double dPi = 0.0, dBeta = 0.0, dLDet = 0.0, dNu = 0.0; @@ -1206,122 +812,10 @@ void initKMeans(gsl_rng *ptGSLRNG, t_Cluster *ptCluster, t_Data *ptData) ptCluster->aadZ[i][anMaxZ[i]] = 1.0; } - performMStep(ptCluster, ptData); + performMStepMP(ptCluster, ptData); return; } -double calcVBL(t_Cluster* ptCluster) -{ - int i = 0, k = 0, l = 0, nN = ptCluster->nN; - int nK = ptCluster->nK, nD = ptCluster->nD; - double dBishop1 = 0.0, dBishop2 = 0.0, dBishop3 = 0.0, dBishop4 = 0.0, dBishop5 = 0.0; /*Bishop equations 10.71...*/ - gsl_matrix *ptRes = gsl_matrix_alloc(nD,nD); - gsl_vector *ptDiff = gsl_vector_alloc(nD); - gsl_vector *ptR = gsl_vector_alloc(nD); - double dD = (double) nD; - double** aadMu = ptCluster->aadMu, **aadM = ptCluster->aadM, **aadZ = ptCluster->aadZ; - double* adBeta = ptCluster->adBeta, *adNu = ptCluster->adNu, *adLDet = ptCluster->adLDet, *adPi = ptCluster->adPi; - double adNK[nK]; - double d2Pi = 2.0*M_PI, dBeta0 = ptCluster->ptVBParams->dBeta0, dNu0 = ptCluster->ptVBParams->dNu0, dRet = 0.0; - double dK = 0.0; - - for(k = 0; k < nK; k++){ - adNK[k] = 0.0; - } - - /*Equation 10.72*/ - for(i = 0; i < nN; i++){ - for(k = 0; k < nK; k++){ - adNK[k] += aadZ[i][k]; - if(adPi[k] > 0.0){ - dBishop2 += aadZ[i][k]*log(adPi[k]); - } - } - } - - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - dK++; - } - } - - /*Equation 10.71*/ - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - double dT1 = 0.0, dT2 = 0.0, dF = 0.0; - - gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptCluster->aptCovar[k],ptCluster->aptSigma[k],0.0,ptRes); - - for(l = 0; l < nD; l++){ - dT1 += gsl_matrix_get(ptRes,l,l); - } - - for(l = 0; l < nD; l++){ - gsl_vector_set(ptDiff,l,aadMu[k][l] - aadM[k][l]); - } - - gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptR); - - gsl_blas_ddot (ptDiff, ptR, &dT2); - - dF = adLDet[k] - adNu[k]*(dT1 + dT2) - dD*(log(d2Pi) + (1.0/adBeta[k])); - - dBishop1 += 0.5*adNK[k]*dF; - } - } - - /*Equation 10.74*/ - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - double dT1 = 0.0, dT2 = 0.0, dF = 0.0; - - gsl_blas_dgemm (CblasNoTrans, CblasNoTrans, 1.0,ptCluster->ptVBParams->ptInvW0,ptCluster->aptSigma[k],0.0,ptRes); - - for(l = 0; l < nD; l++){ - dT1 += gsl_matrix_get(ptRes,l,l); - } - - for(l = 0; l < nD; l++){ - gsl_vector_set(ptDiff,l,aadM[k][l]); - } - - gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptR); - - gsl_blas_ddot (ptDiff, ptR, &dT2); - - dF = dD*log(dBeta0/d2Pi) + adLDet[k] - ((dD*dBeta0)/adBeta[k]) - dBeta0*adNu[k]*dT2 - adNu[k]*dT1; - - dBishop3 += 0.5*(dF + (dNu0 - dD - 1.0)*adLDet[k]); - } - } - - dBishop3 += dK*ptCluster->ptVBParams->dLogWishartB; - - /*Equation 10.75*/ - for(i = 0; i < nN; i++){ - for(k = 0; k < nK; k++){ - if(aadZ[i][k] > 0.0){ - dBishop4 += aadZ[i][k]*log(aadZ[i][k]); - } - } - } - - /*Equation 10.77*/ - for(k = 0; k < nK; k++){ - if(adNK[k] > 0.0){ - dBishop5 += 0.5*adLDet[k] + 0.5*dD*log(adBeta[k]/d2Pi) - 0.5*dD - dWishartExpectLogDet(ptCluster->aptSigma[k], adNu[k], nD); - } - } - - gsl_matrix_free(ptRes); - gsl_vector_free(ptDiff); - gsl_vector_free(ptR); - - dRet = dBishop1 + dBishop2 + dBishop3 - dBishop4 - dBishop5; - - return dRet; -} - double eqnA(int nD, gsl_matrix *ptCovarK, gsl_matrix *ptSigmaK, double *adMuK, double *adMK, double dLDetK, double dNuK, double logd2Pi, double dBetaK,double dNK) { int l = 0; @@ -1477,73 +971,6 @@ double calcVBL_MP(t_Cluster* ptCluster) return dRet; } - -void calcZ(t_Cluster* ptCluster, t_Data *ptData){ - double **aadX = ptData->aadX, **aadZ = ptCluster->aadZ; - int i = 0, k = 0, l = 0; - int nK = ptCluster->nK, nD = ptCluster->nD, nN = ptData->nN; - gsl_vector *ptDiff = gsl_vector_alloc(nD); - gsl_vector *ptRes = gsl_vector_alloc(nD); - double adDist[nK], dD = (double) nD; - double** aadM = ptCluster->aadM, *adPi = ptCluster->adPi; - - for(i = 0; i < nN; i++){ - double dMinDist = DBL_MAX; - double dTotalZ = 0.0; - double dNTotalZ = 0.0; - - for(k = 0; k < nK; k++){ - if(adPi[k] > 0.){ - /*set vector to data point*/ - for(l = 0; l < nD; l++){ - gsl_vector_set(ptDiff,l,aadX[i][l] - aadM[k][l]); - } - - gsl_blas_dsymv (CblasLower, 1.0, ptCluster->aptSigma[k], ptDiff, 0.0, ptRes); - - gsl_blas_ddot (ptDiff, ptRes, &adDist[k]); - - adDist[k] *= ptCluster->adNu[k]; - - adDist[k] -= ptCluster->adLDet[k]; - - adDist[k] += dD/ptCluster->adBeta[k]; - - if(adDist[k] < dMinDist){ - dMinDist = adDist[k]; - } - } - } - - for(k = 0; k < nK; k++){ - if(adPi[k] > 0.){ - aadZ[i][k] = adPi[k]*exp(-0.5*(adDist[k]-dMinDist)); - dTotalZ += aadZ[i][k]; - } - else{ - aadZ[i][k] = 0.0; - } - } - - for(k = 0; k < nK; k++){ - double dF = aadZ[i][k] / dTotalZ; - if(dF < MIN_Z){ - aadZ[i][k] = 0.0; - } - dNTotalZ += aadZ[i][k]; - } - if(dNTotalZ > 0.){ - for(k = 0; k < nK; k++){ - aadZ[i][k] /= dNTotalZ; - } - } - } - - gsl_vector_free(ptRes); - gsl_vector_free(ptDiff); - return; -} - void calcZ_MP(t_Cluster* ptCluster, t_Data *ptData){ double **aadX = ptData->aadX, **aadZ = ptCluster->aadZ; int nK = ptCluster->nK, nD = ptCluster->nD, nN = ptData->nN; @@ -1613,72 +1040,6 @@ void calcZ_MP(t_Cluster* ptCluster, t_Data *ptData){ return; } -void gmmTrainVB(t_Cluster *ptCluster, t_Data *ptData) -{ - int i = 0, k = 0,nIter = 0; - int nN = ptData->nN, nK = ptCluster->nK; - /*change in log-likelihood*/ - double dLastVBL = 0.0, dDelta = DBL_MAX; - double **aadZ = ptCluster->aadZ; - int nMaxIter = ptCluster->nMaxIter; - double dEpsilon = ptCluster->dEpsilon; - FILE *ofp = NULL; - - if(ptCluster->szCOutFile){ - ofp = fopen(ptCluster->szCOutFile,"w"); - if(!ofp){ - fprintf(stderr, "Failed to open file %s in gmmTrainVB\n",ptCluster->szCOutFile); - fflush(stderr); - } - } - - /*calculate data likelihood*/ - calcZ(ptCluster,ptData); - ptCluster->dVBL = calcVBL(ptCluster); - - while(nIter < nMaxIter && dDelta > dEpsilon){ - - /*update parameter estimates*/ - performMStep(ptCluster, ptData); - - /*calculate responsibilities*/ - calcZ(ptCluster,ptData); - - dLastVBL = ptCluster->dVBL; - ptCluster->dVBL = calcVBL(ptCluster); - dDelta = fabs(ptCluster->dVBL - dLastVBL); - - if(ofp){ - fprintf(ofp,"%d,%f,%f,",nIter, ptCluster->dVBL, dDelta); - for(k = 0; k < nK-1; k++){ - fprintf(ofp,"%f,",ptCluster->adPi[k]); - } - fprintf(ofp,"%f\n",ptCluster->adPi[nK - 1]); - fflush(ofp); - } - nIter++; - } - - if(ofp){ - fclose(ofp); - } - - /*assign to best clusters*/ - for(i = 0; i < nN; i++){ - double dMaxZ = aadZ[i][0]; - int nMaxK = 0; - for(k = 1; k < nK; k++){ - if(aadZ[i][k] > dMaxZ){ - nMaxK = k; - dMaxZ = aadZ[i][k]; - } - } - ptCluster->anMaxZ[i] = nMaxK; - } - - return; -} - void gmmTrainVB_MP(t_Cluster *ptCluster, t_Data *ptData) { int i = 0, k = 0,nIter = 0; From 46f1b58bb4a3f3c3d74108787918c2b8aa46b682 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 13:46:55 +0200 Subject: [PATCH 41/78] Some documentation and cleanup of concoct_refine --- bin/concoct_refine | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/bin/concoct_refine b/bin/concoct_refine index 1699fbe..1cd4122 100755 --- a/bin/concoct_refine +++ b/bin/concoct_refine @@ -1,5 +1,8 @@ #!/usr/bin/env python from __future__ import division +DESC="""A script that iterates over concoct results and reruns the concoct algorithm +for clusters where the median SCG presence is at least 2.""" + import sys import logging @@ -10,15 +13,10 @@ import pandas as p from sklearn.decomposition import PCA -from sklearn.cluster import KMeans - from concoct.transform import perform_pca -def vbgmm_fit_wrapper(args): - return vbgmm.fit(*args) - def main(argv): - parser = argparse.ArgumentParser() + parser = argparse.ArgumentParser(description=DESC) parser.add_argument("cluster_file", help="string specifying cluster file") @@ -34,8 +32,6 @@ def main(argv): args = parser.parse_args() -# import ipdb; ipdb.set_trace() - clusters = p.read_csv(args.cluster_file, header=None, index_col=0) original_data = p.read_csv(args.original_data, header=0, index_col=0) @@ -83,4 +79,4 @@ def main(argv): new_assign_df.to_csv("clustering_refine.csv") if __name__ == "__main__": main(sys.argv[1:]) - + From f010b83570539ff14fb3666fbf2ebcdb0688f753 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 13:52:35 +0200 Subject: [PATCH 42/78] Cleanup of concoct code --- bin/concoct | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/bin/concoct b/bin/concoct index 5171043..2866ffb 100755 --- a/bin/concoct +++ b/bin/concoct @@ -13,10 +13,7 @@ from concoct.parser import arguments from concoct.cluster import cluster from concoct.input import load_data from concoct.transform import perform_pca -from concoct.processes import prll_map -def vbgmm_fit_wrapper(args): - return vbgmm.fit(*args) def main(args): # Initialize output handling @@ -66,9 +63,9 @@ def main(args): logging.info('PCA transformed data.') logging.info('Will call vbgmm with parameters: %s, %s, %s, %s' % (Output.CONCOCT_PATH, args.clusters, args.length_threshold, args.threads)) - #import ipdb; ipdb.set_trace() - NC = transform_filter.shape[0] - assign = np.zeros(NC,dtype=np.int32) + + N_contigs = transform_filter.shape[0] + assign = np.zeros(N_contigs, dtype=np.int32) assign = vbgmm.fit(np.copy(transform_filter,order='C'),int(args.clusters),int(args.threads)) From f2de92fbf4ffafaf20162e470935884f1018064d Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 13:52:52 +0200 Subject: [PATCH 43/78] Removed unused processes.py file --- concoct/processes.py | 60 -------------------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 concoct/processes.py diff --git a/concoct/processes.py b/concoct/processes.py deleted file mode 100644 index d822e01..0000000 --- a/concoct/processes.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Processes and parallelism -========================= - -The ``processes`` module provides some convenience functions -for using processes in python. - -Adapted from http://stackoverflow.com/a/16071616/287297 - -Example usage: - - print prll_map(lambda i: i * 2, [1, 2, 3, 4, 6, 7, 8], 32, verbose=True) - -Comments: - -"It spawns a predefined amount of workers and only iterates through the input list - if there exists an idle worker. I also enabled the "daemon" mode for the workers so - that KeyboardInterupt works as expected." - -Pitfalls: all the stdouts are sent back to the parent stdout, intertwined. - -Alternatively, use this fork of multiprocessing: https://github.com/uqfoundation/multiprocess -""" - -# Modules # -import multiprocessing -from tqdm import tqdm - -################################################################################ -def target_func(f, q_in, q_out): - while True: - i, x = q_in.get() - if i is None: break - q_out.put((i, f(x))) - -################################################################################ -def prll_map(func_to_apply, items, cpus=None, verbose=False): - # Number of cores # - if cpus is None: cpus = min(multiprocessing.cpu_count(), 32) - # Create queues # - q_in = multiprocessing.Queue(1) - q_out = multiprocessing.Queue() - # Process list # - new_proc = lambda t,a: multiprocessing.Process(target=t, args=a) - processes = [new_proc(target_func, (func_to_apply, q_in, q_out)) for x in range(cpus)] - # Start them all # - for proc in processes: - proc.daemon = True - proc.start() - # Put and get # - sent = [q_in.put((i, x)) for i, x in enumerate(items)] - for x in range(cpus): q_in.put((None, None)) - res = [q_out.get() for x in range(len(sent))] - # Wait for them to finish # - if verbose: - for proc in tqdm(processes): proc.join() - else: - for proc in processes: proc.join() - # Return results # - return [x for i, x in sorted(res)] \ No newline at end of file From 88afa396802aa60e359e5ed927ae2651005ef484 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 12 Oct 2017 14:07:20 +0200 Subject: [PATCH 44/78] Changed version number --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb46739..2f5a467 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#CONCOCT 0.4.1 [![Build Status](https://travis-ci.org/BinPro/CONCOCT.png?branch=master)](https://travis-ci.org/BinPro/CONCOCT)# +## CONCOCT 1.0.0 development version [![Build Status](https://travis-ci.org/BinPro/CONCOCT.png?branch=master)](https://travis-ci.org/BinPro/CONCOCT) A program for unsupervised binning of metagenomic contigs by using nucleotide composition, coverage data in multiple samples and linkage data from paired end reads. From f70d79273cb78568c2d01f5da648a549a0be13e1 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Mon, 18 Dec 2017 14:49:49 +0100 Subject: [PATCH 45/78] Put random seed back in action --- bin/concoct | 5 +++-- c-concoct/c_vbgmm_fit.c | 4 ++-- c-concoct/c_vbgmm_fit.h | 2 +- c-concoct/vbgmm.pyx | 18 +++++++++--------- concoct/transform.py | 4 ++-- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/bin/concoct b/bin/concoct index 2866ffb..b98c2b4 100755 --- a/bin/concoct +++ b/bin/concoct @@ -38,7 +38,8 @@ def main(args): #PCA on the contigs that have kmer count greater than length_threshold transform_filter, pca = perform_pca( joined, - args.pca_components + args.pca_components, + args.seed ) logging.info('Performed PCA, resulted in %s dimensions' % transform_filter.shape[1]) @@ -67,7 +68,7 @@ def main(args): N_contigs = transform_filter.shape[0] assign = np.zeros(N_contigs, dtype=np.int32) - assign = vbgmm.fit(np.copy(transform_filter,order='C'),int(args.clusters),int(args.threads)) + assign = vbgmm.fit(np.copy(transform_filter,order='C'), int(args.clusters), int(args.seed), int(args.threads)) Output.write_assign( diff --git a/c-concoct/c_vbgmm_fit.c b/c-concoct/c_vbgmm_fit.c index 01d0e16..c5a9a1a 100644 --- a/c-concoct/c_vbgmm_fit.c +++ b/c-concoct/c_vbgmm_fit.c @@ -34,11 +34,11 @@ /*User includes*/ #include "c_vbgmm_fit.h" -void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int nThreads) +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int seed, int* anAssign, int nThreads) { int debug = 0; int bAssign = 0; - driverMP(adX, nN, nD, anAssign, nK, DEF_SEED, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign, nThreads); + driverMP(adX, nN, nD, anAssign, nK, seed, DEF_MAX_ITER, DEF_EPSILON, debug, bAssign, nThreads); return; } diff --git a/c-concoct/c_vbgmm_fit.h b/c-concoct/c_vbgmm_fit.h index 48a8d17..40e7cda 100644 --- a/c-concoct/c_vbgmm_fit.h +++ b/c-concoct/c_vbgmm_fit.h @@ -121,7 +121,7 @@ typedef struct s_Cluster /*user defines*/ -void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int nThreads); +void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int seed, int* anAssign, int nThreads); int driverMP(double *adX, int nN, int nD, int *anAssign, int nKStart, unsigned long lSeed, int nMaxIter, double dEpsilon, int debug, int bAssign, int nThreads); diff --git a/c-concoct/vbgmm.pyx b/c-concoct/vbgmm.pyx index 2d40018..8043334 100644 --- a/c-concoct/vbgmm.pyx +++ b/c-concoct/vbgmm.pyx @@ -12,23 +12,23 @@ import numpy as np cimport numpy as np # declare the interface to the C code -cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int* anAssign, int nThreads) +cdef extern void c_vbgmm_fit (double* adX, int nN, int nD, int nK, int seed, int* anAssign, int nThreads) @cython.boundscheck(False) @cython.wraparound(False) -def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, threads): +def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, seed, threads): """ - fit (xarray, assign, nK, debug, nThreads) + fit (xarray, nClusters, seed, threads) - Takes a numpy array xarray as input, fits the vbgmm using nK initial clusters - - and returns cluster assignments in assign + Takes a numpy array xarray as input, fits the vbgmm using nClsuters initial clusters param: xarray -- a 2-d numpy array of np.float64 - param: assigns -- cluster assignments must have same number of rows as xarray + param: nClusters -- an int, number of start clusters + param: seed -- an int, the random seed + param: threads -- int, the number of threads to use """ - cdef int nN, nD, nK, nS, bAssign, nThreads, debug + cdef int nN, nD, nK, nThreads nN, nD = xarray.shape[0], xarray.shape[1] @@ -38,6 +38,6 @@ def fit(np.ndarray[double, ndim=2, mode="c"] xarray not None, nClusters, threads cdef np.ndarray[int, ndim=1,mode="c"] assign = np.zeros((nN), dtype=np.intc) - c_vbgmm_fit (&xarray[0,0], nN, nD, nK, &assign[0], nThreads) + c_vbgmm_fit (&xarray[0,0], nN, nD, nK, seed, &assign[0], nThreads) return assign diff --git a/concoct/transform.py b/concoct/transform.py index 40c30d8..20e90d3 100644 --- a/concoct/transform.py +++ b/concoct/transform.py @@ -1,8 +1,8 @@ from sklearn.decomposition import PCA import pandas as p -def perform_pca(d,nc): - pca_object = PCA(n_components=nc).fit(d) +def perform_pca(d, nc, seed): + pca_object = PCA(n_components=nc, random_state=seed).fit(d) return pca_object.transform(d), pca_object def perform_split_pca(cov_d, composition, pca_components, use_pcas = None): From 030155a1b1f4f4da7ed0c5f0de5cab42b1a13325 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 16:42:30 +0200 Subject: [PATCH 46/78] Changed version-number to 0.5.0 --- README.md | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2f5a467..7c6836c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## CONCOCT 1.0.0 development version [![Build Status](https://travis-ci.org/BinPro/CONCOCT.png?branch=master)](https://travis-ci.org/BinPro/CONCOCT) +## CONCOCT 0.5.0 development version [![Build Status](https://travis-ci.org/BinPro/CONCOCT.png?branch=master)](https://travis-ci.org/BinPro/CONCOCT) A program for unsupervised binning of metagenomic contigs by using nucleotide composition, coverage data in multiple samples and linkage data from paired end reads. @@ -15,7 +15,7 @@ Johannes Alneberg, Brynjar Smári Bjarnason, Ino de Bruijn, Melanie Schirmer, Jo ## Documentation ## A comprehensive documentation for concoct is hosted on [readthedocs](https://concoct.readthedocs.org). -##Support## +## Support ## If you are having issues, please let us know. We have a mailing list located at: concoct-support@lists.sourcefourge.net which you can also subscribe to [here](https://lists.sourceforge.net/lists/listinfo/concoct-support). ## Contribute ## diff --git a/setup.py b/setup.py index 2451985..b53de86 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ print "You need to have Cython installed on your system to run setup.py. Sorry!" sys.exit() -version = '0.4.1' +version = '0.5.0' include_dirs_for_concoct = [np.get_include(), '/opt/local/include/'] From a0a246b0aa9e72a54f016e7d8fcc88e8eb322581 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 16:49:06 +0200 Subject: [PATCH 47/78] Updated version number in documentation --- doc/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/conf.py b/doc/source/conf.py index 6ea7ac0..9c27549 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -66,9 +66,9 @@ # built documents. # # The short X.Y version. -version = '0.4' +version = '0.5' # The full version, including alpha/beta/rc tags. -release = '0.4.1' +release = '0.5.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 1e7e85148cb2126776d465035dfbac14cbf1a3b7 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 16:50:09 +0200 Subject: [PATCH 48/78] New dockerfile with only minimal requirements --- doc/Dockerfile | 106 +++++++++++-------------------------------------- 1 file changed, 23 insertions(+), 83 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index ac05d33..af9baac 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -1,98 +1,38 @@ -# Docker for CONCOCT (http://github.com/BinPro/CONCOCT) v0.4.1 -# VERSION 0.4.1 -# +# Docker for CONCOCT (http://github.com/BinPro/CONCOCT) v0.5.0 +# VERSION 0.5.0 +# # This docker creates and sets up an Ubuntu environment with all -# dependencies for CONCOCT v0.4.1 installed. +# dependencies for CONCOCT v0.5.0 installed. # # To login to the docker with a shared directory from the host do: # -# sudo docker run -v /my/host/shared/directory:/my/docker/location -i -t binnisb/concoct_0.4.1 /bin/bash +# sudo docker run -v /my/host/shared/directory:/my/docker/location -i -t binnisb/concoct_0.5.0 /bin/bash # -FROM ubuntu:13.10 +FROM continuumio/miniconda MAINTAINER CONCOCT developer group, concoct-support@lists.sourceforge.net - -ENV PATH /opt/miniconda/bin:$PATH -ENV PATH /opt/velvet_1.2.10:$PATH +COPY . /opt/CONCOCT # Get basic ubuntu packages needed RUN apt-get update -qq -RUN apt-get install -qq wget build-essential libgsl0-dev git zip unzip - -# Set up Miniconda environment for python2 -RUN cd /opt;\ - wget http://repo.continuum.io/miniconda/Miniconda-3.3.0-Linux-x86_64.sh -O miniconda.sh;\ - chmod +x miniconda.sh;\ - ./miniconda.sh -p /opt/miniconda -b;\ - conda update --yes conda;\ - conda install --yes python=2.7 - -# Velvet for assembly -RUN apt-get install -qq zlib1g-dev -RUN cd /opt;\ - wget www.ebi.ac.uk/~zerbino/velvet/velvet_1.2.10.tgz -O velvet.tgz;\ - tar xf velvet.tgz;\ - cd velvet_1.2.10;\ - sed -i "s/MAXKMERLENGTH=31/MAXKMERLENGTH=128/" Makefile ;\ - make - -# Bedtools2.17 -RUN apt-get install -qq bedtools - -# Picard tools 1.118 -# To get fuse to work, I need the following (Issue here: https://github.com/dotcloud/docker/issues/514, -# solution here: https://gist.github.com/henrik-muehe/6155333). -ENV MRKDUP /opt/picard-tools-1.118/MarkDuplicates.jar -RUN apt-get install -qq libfuse2 openjdk-7-jre-headless -RUN cd /tmp ; apt-get download fuse -RUN cd /tmp ; dpkg-deb -x fuse_* . -RUN cd /tmp ; dpkg-deb -e fuse_* -RUN cd /tmp ; rm fuse_*.deb -RUN cd /tmp ; echo -en '#!/bin/bash\nexit 0\n' > DEBIAN/postinst -RUN cd /tmp ; dpkg-deb -b . /fuse.deb -RUN cd /tmp ; dpkg -i /fuse.deb -RUN cd /opt;\ - wget "http://downloads.sourceforge.net/project/picard/picard-tools/1.118/picard-tools-1.118.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpicard%2Ffiles%2Fpicard-tools%2F1.118%2F&ts=1396879817&use_mirror=freefr" -O picard-tools-1.118.zip;\ - unzip picard-tools-1.118.zip +RUN apt-get install -qq wget build-essential libgsl0-dev git zip unzip bedtools -# Samtools 0.1.19 -RUN apt-get install -qq samtools - -# Bowtie2.1.0 -RUN apt-get install -qq bowtie2 - -# Parallel 20130622-1 -RUN apt-get install -qq parallel - - - -# Install prodigal 2.60 -RUN cd /opt;\ - wget --no-check-certificate https://prodigal.googlecode.com/files/Prodigal-2.60.tar.gz;\ - tar xf Prodigal-2.60.tar.gz;\ - cd Prodigal-2.60;\ - make;\ - ln -s /opt/Prodigal-2.60/prodigal /bin/prodigal - -# Install R -RUN apt-get install -qq r-base - -# Install R packages -RUN cd /opt;\ - RREPO='"http://cran.rstudio.com/"';\ - printf "install.packages(\"ggplot2\", repo=$RREPO)\ninstall.packages(\"reshape\",repo=$RREPO)\ninstall.packages(\"gplots\",repo=$RREPO)\ninstall.packages(\"ellipse\",repo=$RREPO)\ninstall.packages(\"grid\",repo=$RREPO)\ninstall.packages(\"getopt\",repo=$RREPO)" > dep.R;\ - Rscript dep.R +RUN conda update --yes conda;\ + conda install --yes python=2.7;\ + pip install --upgrade pip -# Install python dependencies and fetch and install CONCOCT 0.4.1 +# Install python dependencies and fetch and install CONCOCT 0.5.0 RUN cd /opt;\ - conda update --yes conda;\ - conda install --yes python=2.7 atlas cython numpy scipy biopython pandas pip scikit-learn pysam;\ - pip install bcbio-gff;\ - wget --no-check-certificate https://github.com/BinPro/CONCOCT/archive/0.4.1.tar.gz;\ - tar xf 0.4.1.tar.gz;\ - cd CONCOCT-0.4.1;\ + conda install --yes python=2.7 atlas cython numpy scipy biopython pandas pip scikit-learn pysam tqdm;\ + pip install bcbio-gff + +# wget --no-check-certificate https://github.com/BinPro/CONCOCT/archive/0.5.0.tar.gz;\ +# tar xf 0.5.0.tar.gz;\ +# cd CONCOCT-0.5.0;\ +# python setup.py install + +RUN cd /opt/CONCOCT/;\ python setup.py install -ENV CONCOCT /opt/CONCOCT-0.4.1 -ENV CONCOCT_TEST /opt/Data/CONCOCT-test-data -ENV CONCOCT_EXAMPLE /opt/Data/CONCOCT-complete-example +RUN cd /opt/CONCOCT/;\ + nosetests From 7d8d0a0c9783b41ec4d9ce97419e68b02c20f8ad Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 16:59:15 +0200 Subject: [PATCH 49/78] Dumped the old mailing list and added a gitter channel --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7c6836c..73dc9dc 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ Johannes Alneberg, Brynjar Smári Bjarnason, Ino de Bruijn, Melanie Schirmer, Jo A comprehensive documentation for concoct is hosted on [readthedocs](https://concoct.readthedocs.org). ## Support ## -If you are having issues, please let us know. We have a mailing list located at: concoct-support@lists.sourcefourge.net which you can also subscribe to [here](https://lists.sourceforge.net/lists/listinfo/concoct-support). +[![Gitter](https://img.shields.io/badge/gitter-%20join%20chat%20%E2%86%92-4fb99a.svg?style=flat-square)](https://gitter.im/BinPro/CONCOCT) +If you are having trouble running CONCOCT or interpretting any results, please don't hesitate to write a question in our gitter channel. ## Contribute ## From 94ba9123c4f8e04b1607a2efe2508586b98f37f6 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 17:00:46 +0200 Subject: [PATCH 50/78] Removed tqdm installation and changed dockerhub location in Dockerfile --- doc/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index af9baac..c63ebf6 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -6,7 +6,7 @@ # # To login to the docker with a shared directory from the host do: # -# sudo docker run -v /my/host/shared/directory:/my/docker/location -i -t binnisb/concoct_0.5.0 /bin/bash +# docker run -v /my/host/shared/directory:/my/docker/location -i -t alneberg/concoct_0.5.0 /bin/bash # FROM continuumio/miniconda @@ -23,7 +23,7 @@ RUN conda update --yes conda;\ # Install python dependencies and fetch and install CONCOCT 0.5.0 RUN cd /opt;\ - conda install --yes python=2.7 atlas cython numpy scipy biopython pandas pip scikit-learn pysam tqdm;\ + conda install --yes python=2.7 atlas cython numpy scipy biopython pandas pip scikit-learn pysam;\ pip install bcbio-gff # wget --no-check-certificate https://github.com/BinPro/CONCOCT/archive/0.5.0.tar.gz;\ From 994083ea5a3b65a6f621e8c25f1720a37a8d99a0 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 17:18:40 +0200 Subject: [PATCH 51/78] Removed tqdm requirement --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7366a55..d5f1e1c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,3 @@ python-dateutil>=2.2 pytz>=2013.9 scikit-learn>=0.14.1 scipy>=0.13.3 -tqdm>=4.11.2 From efe4e80bb42200f6d2c3a32d5b4a81cf528ac04a Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 17:47:52 +0200 Subject: [PATCH 52/78] They're telling me pip is fast now --- .travis.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index ebfa979..2002075 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,20 +7,13 @@ python: virtualenv: system_site_packages: true before_install: - #Uses miniconda installation of scientific python packages instead of building from source - #or using old versions supplied by apt-get. Source: https://gist.github.com/dan-blanchard/7045057 - - if [ ${TRAVIS_PYTHON_VERSION:0:1} == "2" ]; then wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh; else wget http://repo.continuum.io/miniconda/Miniconda3-3.7.3-Linux-x86_64.sh -O miniconda.sh; fi - - chmod +x miniconda.sh - - ./miniconda.sh -b - - export PATH=/home/travis/miniconda3/bin:/home/travis/miniconda2/bin:$PATH - - conda update --yes conda + - pip install --upgrade pip - sudo apt-get update -qq - sudo apt-get install -qq build-essential libgsl0-dev bedtools mummer - "export DISPLAY=:99.0" - "sh -e /etc/init.d/xvfb start" install: - - conda install --yes python=$TRAVIS_PYTHON_VERSION cython numpy scipy biopython pandas pip scikit-learn docutils sphinx jinja2 seaborn - - pip install bcbio-gff + - pip install -r requirements.txt - python setup.py install # command to run tests script: nosetests From 6da02a2132e6f79810942db0820515569d8d4f2b Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 21:28:01 +0200 Subject: [PATCH 53/78] Added cython requirement and moved around pip installation in travis --- .travis.yml | 2 +- requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2002075..488ab05 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,8 +12,8 @@ before_install: - sudo apt-get install -qq build-essential libgsl0-dev bedtools mummer - "export DISPLAY=:99.0" - "sh -e /etc/init.d/xvfb start" + - pip install -r requirements.txt install: - - pip install -r requirements.txt - python setup.py install # command to run tests script: nosetests diff --git a/requirements.txt b/requirements.txt index d5f1e1c..5d3725a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ python-dateutil>=2.2 pytz>=2013.9 scikit-learn>=0.14.1 scipy>=0.13.3 +cython>=0.28.5 From 47222c7bbedfe0f912fedc236e9b653184b8d3fd Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Fri, 10 Aug 2018 22:09:58 +0200 Subject: [PATCH 54/78] Removed distribute requirement --- requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5d3725a..85c19df 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,6 @@ argparse>=1.2.1 bcbio-gff>=0.4 biopython>=1.63 -distribute>=0.6.49 nose>=1.3.0 numpy>=1.8.0 pandas>=0.13.0 From 2b2f1662ed96ff5a50d59137aed5ad17cd9fd7a2 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 22 Aug 2018 17:23:29 +0200 Subject: [PATCH 55/78] Much quicker to run pip install than conda install to build docker image --- doc/Dockerfile | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/doc/Dockerfile b/doc/Dockerfile index c63ebf6..d2daa31 100644 --- a/doc/Dockerfile +++ b/doc/Dockerfile @@ -9,22 +9,18 @@ # docker run -v /my/host/shared/directory:/my/docker/location -i -t alneberg/concoct_0.5.0 /bin/bash # -FROM continuumio/miniconda -MAINTAINER CONCOCT developer group, concoct-support@lists.sourceforge.net +FROM ubuntu:18.04 COPY . /opt/CONCOCT # Get basic ubuntu packages needed RUN apt-get update -qq -RUN apt-get install -qq wget build-essential libgsl0-dev git zip unzip bedtools +RUN apt-get install -qq wget build-essential libgsl0-dev git zip unzip bedtools python-pip -RUN conda update --yes conda;\ - conda install --yes python=2.7;\ - pip install --upgrade pip +RUN pip install --upgrade pip # Install python dependencies and fetch and install CONCOCT 0.5.0 -RUN cd /opt;\ - conda install --yes python=2.7 atlas cython numpy scipy biopython pandas pip scikit-learn pysam;\ - pip install bcbio-gff +RUN cd /opt/CONCOCT;\ + pip install -r requirements.txt;\ # wget --no-check-certificate https://github.com/BinPro/CONCOCT/archive/0.5.0.tar.gz;\ # tar xf 0.5.0.tar.gz;\ From a753b11d56fdcfd511252e97efd09552685a96fa Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 22 Aug 2018 17:42:39 +0200 Subject: [PATCH 56/78] Moved dockerfile --- doc/Dockerfile => Dockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename doc/Dockerfile => Dockerfile (100%) diff --git a/doc/Dockerfile b/Dockerfile similarity index 100% rename from doc/Dockerfile rename to Dockerfile From 1998a8fe1877d20e072bdeb727cb6f56d94bee82 Mon Sep 17 00:00:00 2001 From: linsalrob Date: Thu, 13 Sep 2018 10:06:58 -0700 Subject: [PATCH 57/78] Silently ignore COGs we dont know about! --- scripts/COG_table.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/COG_table.py b/scripts/COG_table.py index fe6a108..46b6a72 100755 --- a/scripts/COG_table.py +++ b/scripts/COG_table.py @@ -161,7 +161,10 @@ def main(args): seq_cov_above_threshold = percent_seq_covered >= RPSBLAST_SCOVS_THRESHOLD if pident_above_threshold and seq_cov_above_threshold: - cog_accession = cogrecords[record_d['sseqid'].split('|')[2]]['Accession'] + thisacc = record_d['sseqid'].split('|')[2] + cog_accession = 'unknown' + if thisacc in cogrecords: + cog_accession = cogrecords[thisacc]['Accession'] if args.gfffile: contig = featureid_locations[record_d['qseqid']] else: From 8cda4103de38a74db5827c1562cef9924b906f9b Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 27 Sep 2018 20:47:34 +0000 Subject: [PATCH 58/78] Removed redundant cluster module to fix sklearn error --- bin/concoct | 1 - concoct/cluster.py | 21 --------------------- 2 files changed, 22 deletions(-) delete mode 100644 concoct/cluster.py diff --git a/bin/concoct b/bin/concoct index b98c2b4..9422625 100755 --- a/bin/concoct +++ b/bin/concoct @@ -10,7 +10,6 @@ from sklearn.cluster import KMeans from concoct.output import Output from concoct.parser import arguments -from concoct.cluster import cluster from concoct.input import load_data from concoct.transform import perform_pca diff --git a/concoct/cluster.py b/concoct/cluster.py deleted file mode 100644 index 816bc02..0000000 --- a/concoct/cluster.py +++ /dev/null @@ -1,21 +0,0 @@ -import sys -import logging - -from sklearn.mixture import GMM - -def cluster(args): - c, cv_type,inits,iters,transform_filter,random_seed= args - #Run GMM on the pca transform of contigs with kmer count greater - #than threshold - gmm = GMM(n_components=c, covariance_type=cv_type, n_init=inits, - n_iter=iters, random_state=random_seed).fit(transform_filter) - bic = gmm.bic(transform_filter) - if gmm.converged_: - logging.info("Clustering into {0} clusters converged.".format(c)) - else: - logging.warning(("Clustering into {0} clusters did not " - "converge, consider increasing the number " - "of iterations.").format(c)) - print >> sys.stderr, "Cluster {0} did not converge".format(c) - return bic, c, gmm.converged_, gmm - From 2a062cec023d86e7146fa4db01413b2ceca3da7a Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 11 Oct 2018 14:58:53 +0200 Subject: [PATCH 59/78] Python 3 ready, thanks to 2to3 and manual modifications --- bin/concoct | 20 +++---- concoct/cluster.py | 4 +- concoct/input.py | 6 +- concoct/output.py | 16 +++-- concoct/parser.py | 7 ++- doc/source/conf.py | 16 ++--- doc/source/installation.rst | 14 +++++ requirements.txt | 1 - scripts/COG_table.py | 4 +- scripts/bam_to_linkage.py | 18 +++--- scripts/contig_read_count_per_genome.py | 9 ++- scripts/cut_up_fasta.py | 8 +-- scripts/dnadiff_dist_matrix.py | 6 +- .../evaluation/gen_input_table_taxonomy.py | 2 +- scripts/extract_fasta_bins.py | 2 +- scripts/extract_scg_bins.py | 14 ++--- scripts/fasta_to_features.py | 6 +- scripts/features_to_pca.py | 6 +- scripts/gen_input_table.py | 11 ++-- scripts/mummer_clusters.py | 20 +++---- setup.py | 2 +- tests/test_integration.py | 60 +++++++++---------- tests/test_unittest_input.py | 6 +- 23 files changed, 135 insertions(+), 123 deletions(-) diff --git a/bin/concoct b/bin/concoct index b98c2b4..4236001 100755 --- a/bin/concoct +++ b/bin/concoct @@ -1,16 +1,14 @@ #!/usr/bin/env python -from __future__ import division +from __future__ import print_function import sys import logging import vbgmm -import numpy as np +import numpy as np -from sklearn.cluster import KMeans from concoct.output import Output from concoct.parser import arguments -from concoct.cluster import cluster from concoct.input import load_data from concoct.transform import perform_pca @@ -25,7 +23,7 @@ def main(args): if len(composition) < 2: logging.error('Not enough contigs pass the threshold filter. Exiting!') sys.exit(-1) - + if cov is not None: joined = composition.join(cov.ix[:,cov_range[0]:cov_range[1]],how="inner") else: @@ -43,7 +41,7 @@ def main(args): ) logging.info('Performed PCA, resulted in %s dimensions' % transform_filter.shape[1]) - + if not args.no_original_data: Output.write_original_data( joined, @@ -67,10 +65,10 @@ def main(args): N_contigs = transform_filter.shape[0] assign = np.zeros(N_contigs, dtype=np.int32) - + assign = vbgmm.fit(np.copy(transform_filter,order='C'), int(args.clusters), int(args.seed), int(args.threads)) - - + + Output.write_assign( assign, args.length_threshold, @@ -79,7 +77,7 @@ def main(args): logging.info("CONCOCT Finished") - + if __name__=="__main__": args = arguments() if args.total_percentage_pca == 100: @@ -89,4 +87,4 @@ if __name__=="__main__": results = main(args) - print >> sys.stderr, "CONCOCT Finished, the log shows how it went." + print("CONCOCT Finished, the log shows how it went.", file=sys.stderr) diff --git a/concoct/cluster.py b/concoct/cluster.py index 816bc02..df02636 100644 --- a/concoct/cluster.py +++ b/concoct/cluster.py @@ -1,3 +1,4 @@ +from __future__ import print_function import sys import logging @@ -16,6 +17,5 @@ def cluster(args): logging.warning(("Clustering into {0} clusters did not " "converge, consider increasing the number " "of iterations.").format(c)) - print >> sys.stderr, "Cluster {0} did not converge".format(c) + print("Cluster {0} did not converge".format(c), file=sys.stderr) return bic, c, gmm.converged_, gmm - diff --git a/concoct/input.py b/concoct/input.py index 2823e6b..2e0c392 100644 --- a/concoct/input.py +++ b/concoct/input.py @@ -4,7 +4,7 @@ import numpy as np import pandas as p -from itertools import product, tee, izip +from itertools import product, tee from collections import Counter, OrderedDict from Bio import SeqIO @@ -141,6 +141,6 @@ def generate_feature_mapping(kmer_len): def window(seq,n): els = tee(seq,n) for i,el in enumerate(els): - for _ in xrange(i): + for _ in range(i): next(el, None) - return izip(*els) + return zip(*els) diff --git a/concoct/output.py b/concoct/output.py index 974c2fa..7d6cc18 100644 --- a/concoct/output.py +++ b/concoct/output.py @@ -4,6 +4,7 @@ @author: Johannes Alneberg """ +from __future__ import print_function import os import sys import logging @@ -22,7 +23,7 @@ class Output(object): PCA_COMPONENTS_FILE_BASE = None FLOAT_FORMAT = '%1.8e' INT_FORMAT = '%d' - + @classmethod def __init__(self,basename,args): """ @@ -61,12 +62,15 @@ def __init__(self,basename,args): logging.info("Results created at {0}".format( os.path.abspath(self.CONCOCT_PATH))) - print >> sys.stderr, "Up and running. Check {0} for progress".format( - os.path.abspath(self.LOG_FILE_BASE)) + + print("Up and running. Check {0} for progress".format( + os.path.abspath(self.LOG_FILE_BASE) + ), file=sys.stderr) + #Write header to bic.csv with open(self.ARGS_FILE,"w+") as fh: - print >> fh, args - + print(args, file=fh) + @classmethod def write_pca(self, transform, threshold, index): transform_df = p.DataFrame(transform, index=index) @@ -86,7 +90,7 @@ def write_assign(self, assign, threshold, index): ) logging.info('Wrote assign file.') - + @classmethod def write_pca_components(self, components, threshold): np.savetxt( diff --git a/concoct/parser.py b/concoct/parser.py index 5d4ef55..50ab55d 100644 --- a/concoct/parser.py +++ b/concoct/parser.py @@ -1,3 +1,4 @@ +from __future__ import print_function import os import sys from random import randint @@ -42,7 +43,7 @@ def arguments(): parser.add_argument('-t','--threads', type=int, default=1, help='Number of threads to use') - + parser.add_argument('-l','--length_threshold', type=int, default=1000, help=("specify the sequence length threshold, contigs shorter than this " "value will not be included. Defaults to 1000.")) @@ -94,10 +95,10 @@ def arguments(): args = parser.parse_args() if args.debug: - print >> sys.stderr, args + print(args, file=sys.stderr) sys.exit(0) # This can be changed to an or case when input of either case is supported individually - if not (args.coverage_file or args.composition_file): + if not (args.coverage_file or args.composition_file): parser.error("No input data supplied, add file(s) using --coverage_file and/or " "--composition_file ") diff --git a/doc/source/conf.py b/doc/source/conf.py index 9c27549..f6e8d8f 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -58,8 +58,8 @@ master_doc = 'index' # General information about the project. -project = u'CONCOCT' -copyright = u'2014, Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince' +project = 'CONCOCT' +copyright = '2014, Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -211,8 +211,8 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - ('index', 'CONCOCT.tex', u'CONCOCT Documentation', - u'Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince', 'manual'), + ('index', 'CONCOCT.tex', 'CONCOCT Documentation', + 'Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of @@ -241,8 +241,8 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('index', 'concoct', u'CONCOCT Documentation', - [u'Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince'], 1) + ('index', 'concoct', 'CONCOCT Documentation', + ['Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince'], 1) ] # If true, show URL addresses after external links. @@ -255,8 +255,8 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ('index', 'CONCOCT', u'CONCOCT Documentation', - u'Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince', 'CONCOCT', 'One line description of project.', + ('index', 'CONCOCT', 'CONCOCT Documentation', + 'Johannes Alneberg, Brynjar Smari Bjarnason, Ino de Bruijn, Melanie Schirmer, Joshua Quick, Umer Z. Ijaz, Nicholas J. Loman, Anders F. Andersson, Christopher Quince', 'CONCOCT', 'One line description of project.', 'Miscellaneous'), ] diff --git a/doc/source/installation.rst b/doc/source/installation.rst index d78e97f..586e4c1 100644 --- a/doc/source/installation.rst +++ b/doc/source/installation.rst @@ -27,6 +27,20 @@ linux (ubuntu) this is installed through: apt-get install build-essential libgsl0-dev +Making it work on Mac OSX: + +:: + + conda install llvm gcc libgcc pip + export CC=/Users/johannes.alneberg/miniconda3/envs/concoct_py3/bin/gcc + export CXX=/Users/johannes.alneberg/miniconda3/envs/concoct_py3/bin/g++ + conda install gsl + pip install -r requirements.txt + unset CC + unset CXX + pip install pysam + + Python packages ~~~~~~~~~~~~~~~ diff --git a/requirements.txt b/requirements.txt index 85c19df..90b6bbe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,6 @@ biopython>=1.63 nose>=1.3.0 numpy>=1.8.0 pandas>=0.13.0 -pysam>=0.7.7 python-dateutil>=2.2 pytz>=2013.9 scikit-learn>=0.14.1 diff --git a/scripts/COG_table.py b/scripts/COG_table.py index 46b6a72..0d950ad 100755 --- a/scripts/COG_table.py +++ b/scripts/COG_table.py @@ -180,7 +180,7 @@ def main(args): markers.sort() # print header - print "\t".join(["Cluster", "Contigs", "Num_contigs"] + markers) + print("\t".join(["Cluster", "Contigs", "Num_contigs"] + markers)) # Per cluster, count the number of features for cluster in clusters: @@ -195,7 +195,7 @@ def main(args): if feature == marker: count += 1 counts.append(str(count)) - print "\t".join(counts) + print("\t".join(counts)) if __name__ == "__main__": parser = argparse.ArgumentParser(usage=usage()) diff --git a/scripts/bam_to_linkage.py b/scripts/bam_to_linkage.py index b2847d5..969b787 100755 --- a/scripts/bam_to_linkage.py +++ b/scripts/bam_to_linkage.py @@ -173,7 +173,7 @@ def parse_linkage_info_bam(bamfile, readlength, min_contig_length, regionlength, # Remove default generators linkdict.default_factory = None - for v in linkdict.itervalues(): + for v in linkdict.values(): v.default_factory = None read_count_dict.default_factory = None @@ -221,15 +221,15 @@ def print_linkage_info(linkdict, read_count_dict, samplenames): where n represents sample name. Number of columns is thus 2 + 6 * n. """ # Header - print ("%s\t%s" + "\t%s" * len(samplenames)) % (("contig1", "contig2") + + print(("%s\t%s" + "\t%s" * len(samplenames)) % (("contig1", "contig2") + tuple(["nr_links_inward_%s\tnr_links_outward_%s\tnr_links_inline_%s\tnr_links_inward_or_outward_%s\t" - "read_count_contig1_%s\tread_count_contig2_%s" % ((s,) * 6) for s in samplenames])) + "read_count_contig1_%s\tread_count_contig2_%s" % ((s,) * 6) for s in samplenames]))) # Content - allcontigs = tuple(set([k for k in linkdict[s].keys() for s in samplenames])) + allcontigs = tuple(set([k for k in list(linkdict[s].keys()) for s in samplenames])) for c in allcontigs: - for c2 in set([k for k in linkdict[s][c].keys() for s in samplenames]): - print get_string_link_row(linkdict, read_count_dict, samplenames, c, c2) + for c2 in set([k for k in list(linkdict[s][c].keys()) for s in samplenames]): + print(get_string_link_row(linkdict, read_count_dict, samplenames, c, c2)) def parallel_get_linkage(bamfiles, readlength, min_contig_length, regionlength, max_n_cores, fullsearch): @@ -308,14 +308,12 @@ def main(fastafile, bamfiles, samplenames, readlength, min_contig_length, region if args.samplenames is not None: samplenames = [s[:-1] for s in open(args.samplenames).readlines()] if len(samplenames) != len(args.bamfiles): - raise(Exception("Nr of names in samplenames should be equal to nr " - "of given bamfiles")) + raise Exception else: samplenames = [str(i) for i in range(len(args.bamfiles))] for bf in args.bamfiles: if not os.path.isfile(bf + ".bai"): - raise(Exception("No index for %s file found, run samtools index " - "first on bam file." % bf)) + raise Exception main(args.fastafile, args.bamfiles, samplenames, args.readlength, args.mincontiglength, args.regionlength, args.max_n_cores, args.fullsearch) diff --git a/scripts/contig_read_count_per_genome.py b/scripts/contig_read_count_per_genome.py index 0c6af08..f2924fe 100755 --- a/scripts/contig_read_count_per_genome.py +++ b/scripts/contig_read_count_per_genome.py @@ -80,11 +80,11 @@ def count_contigs_per_genome(bamfile, count_dict, multi_align_tag='XS'): def print_count_dict(count_dict, column_header): - print ("contig" + "\t%s" * len(column_header)) % tuple(column_header) + print(("contig" + "\t%s" * len(column_header)) % tuple(column_header)) for contig in count_dict: - print ("%s" + "\t%i" * len(column_header)) % tuple([contig] + \ - [count_dict[contig][ch] for ch in column_header]) + print(("%s" + "\t%i" * len(column_header)) % tuple([contig] + \ + [count_dict[contig][ch] for ch in column_header])) def parallel_count_contigs_per_genome(args): @@ -131,7 +131,6 @@ def main(contigfa, reffa, bamfiles, max_n_processors): for bf in args.bamfiles: if not os.path.isfile(bf + ".bai"): - raise(Exception("No index for %s file found, run samtools index " - "first on bam file." % bf)) + raise Exception main(args.contigfa, args.reffa, args.bamfiles, args.max_n_processors) diff --git a/scripts/cut_up_fasta.py b/scripts/cut_up_fasta.py index 90f7b39..96b02e8 100755 --- a/scripts/cut_up_fasta.py +++ b/scripts/cut_up_fasta.py @@ -11,10 +11,10 @@ def cut_up_fasta(fastfiles, chunk_size, overlap, merge_last): if (not merge_last and len(record.seq) > chunk_size) or (merge_last and len(record.seq) >= 2 * chunk_size): i = 0 for split_seq in chunks(record.seq, chunk_size, overlap, merge_last): - print ">%s.%i\n%s" % (record.id, i, split_seq) + print(">%s.%i\n%s" % (record.id, i, split_seq)) i = i + 1 else: - print ">%s\n%s" % (record.id, record.seq) + print(">%s\n%s" % (record.id, record.seq)) def chunks(l, n, o, merge_last): @@ -24,10 +24,10 @@ def chunks(l, n, o, merge_last): assert n > o if not merge_last: - for i in xrange(0, len(l), n - o): + for i in range(0, len(l), n - o): yield l[i:i + n] else: - for i in xrange(0, len(l) - n + 1, n - o): + for i in range(0, len(l) - n + 1, n - o): yield l[i:i + n] if i + n + n - o <= len(l) else l[i:] diff --git a/scripts/dnadiff_dist_matrix.py b/scripts/dnadiff_dist_matrix.py index 4852d43..7079a22 100755 --- a/scripts/dnadiff_dist_matrix.py +++ b/scripts/dnadiff_dist_matrix.py @@ -102,7 +102,7 @@ def run_dnadiff_star(args): except CmdException as e: # Custom CmdException doesn't work well with multiprocessing so change # to regular Exception http://bugs.python.org/issue16558 - raise(Exception(str(e))) + raise Exception def run_dnadiff_pairwise(fasta_files, fasta_names, output_folder): @@ -174,7 +174,7 @@ def plot_dist_matrix(matrix, fasta_names, heatmap_out, dendrogram_out, cluster_t link = linkage(pdm, metric='euclidean', method='average') flat_clusters = fcluster(link, cluster_threshold, criterion='distance') - clustering = pd.Series(dict(zip(fasta_names, flat_clusters))) + clustering = pd.Series(dict(list(zip(fasta_names, flat_clusters)))) clustering.to_csv(clustering_out, sep='\t') # Plot heatmap @@ -260,7 +260,7 @@ def verbose_check_dependencies(progs): if path: logging.info("Using {}".format(path)) else: - raise(Exception("{} not installed".format(p))) + raise Exception def main(output_folder, fasta_files, fasta_names, min_coverage, diff --git a/scripts/evaluation/gen_input_table_taxonomy.py b/scripts/evaluation/gen_input_table_taxonomy.py index 4a308fd..dfd8c73 100755 --- a/scripts/evaluation/gen_input_table_taxonomy.py +++ b/scripts/evaluation/gen_input_table_taxonomy.py @@ -179,7 +179,7 @@ def get_taxonomy_dict(taxonomyfile): # Genus, Species. assert(len(cols) == len(TAXONOMY) + 1) - outdict[cols[0]] = dict(zip(TAXONOMY, cols[1:-1] + [cols[-1].rstrip('\n')])) + outdict[cols[0]] = dict(list(zip(TAXONOMY, cols[1:-1] + [cols[-1].rstrip('\n')]))) return outdict diff --git a/scripts/extract_fasta_bins.py b/scripts/extract_fasta_bins.py index 58a5c18..00c9c6a 100755 --- a/scripts/extract_fasta_bins.py +++ b/scripts/extract_fasta_bins.py @@ -21,7 +21,7 @@ def main(args): for i, row in df.iterrows(): cluster_to_contigs[row['cluster_id']].append(row['contig_id']) - for cluster_id, contig_ids in cluster_to_contigs.iteritems(): + for cluster_id, contig_ids in cluster_to_contigs.items(): output_file = os.path.join(args.output_path, "{0}.fa".format(cluster_id)) seqs = [all_seqs[contig_id] for contig_id in contig_ids] with open(output_file, 'w') as ofh: diff --git a/scripts/extract_scg_bins.py b/scripts/extract_scg_bins.py index 29013aa..db5bea5 100755 --- a/scripts/extract_scg_bins.py +++ b/scripts/extract_scg_bins.py @@ -27,10 +27,10 @@ def get_approved_bins(scg_tsv, max_missing_scg, max_multicopy_scg): with COG_table.py""" scgdf = pd.read_csv(scg_tsv, sep="\t") # number of multicopy genes - multi_scgs = scgdf.iloc[:, range(3, len(scgdf.columns))] \ + multi_scgs = scgdf.iloc[:, list(range(3, len(scgdf.columns)))] \ .apply(lambda x: x > 1).sum(axis=1) # number of missing scgs - miss_scgs = scgdf.iloc[:, range(3, len(scgdf.columns))] \ + miss_scgs = scgdf.iloc[:, list(range(3, len(scgdf.columns)))] \ .apply(lambda x: x == 0).sum(axis=1) app_bins = scgdf[(miss_scgs <= max_missing_scg) & (multi_scgs <= max_multicopy_scg)].loc[:, ["Cluster", "Contigs"]] @@ -114,13 +114,11 @@ def parse_input(): args = parser.parse_args() if not (len(args.names) == len(args.scg_tsvs) and len(args.scg_tsvs) == len(args.fasta_files)): - raise(Exception("Should have equal number of scg_tsvs, fasta_files " - "and names")) + raise Exception if args.groups and len(args.groups) != len(args.names): - raise(Exception("Should have equal number of --groups as scg_tsvs, " - "fasta_files and names")) + raise Exception if len(args.names) != len(set(args.names)): - raise(Exception("--names should be unique names")) + raise Exception return args @@ -162,7 +160,7 @@ def main(args): ) if args.groups: group_indices = {g:[i for i, j in enumerate(args.groups) if j == g] for g in args.groups} - for g, indices in group_indices.iteritems(): + for g, indices in group_indices.items(): logging.info("Selecting best SCG clustering for group " "{}".format(g)) select_and_write_approved_bins(args.output_folder, [args.scg_tsvs[i] for i in indices], diff --git a/scripts/fasta_to_features.py b/scripts/fasta_to_features.py index 5024cba..259f2a0 100755 --- a/scripts/fasta_to_features.py +++ b/scripts/fasta_to_features.py @@ -6,14 +6,14 @@ # optimized sliding window function from # http://stackoverflow.com/a/7636587 -from itertools import tee, izip +from itertools import tee def window(seq,n): els = tee(seq,n) for i,el in enumerate(els): - for _ in xrange(i): + for _ in range(i): next(el, None) - return izip(*els) + return zip(*els) def generate_feature_mapping(kmer_len): BASE_COMPLEMENT = {"A":"T","T":"A","G":"C","C":"G"} diff --git a/scripts/features_to_pca.py b/scripts/features_to_pca.py index 6d0c168..ab1ddfd 100755 --- a/scripts/features_to_pca.py +++ b/scripts/features_to_pca.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -from __future__ import division + import cv2 import pandas as pd import numpy as np @@ -11,7 +11,7 @@ def pca_signatures(signature_file): contigs = contigs.as_matrix() contigs += 1 log_contigs = np.log(contigs / contigs.sum(axis=1,keepdims=True)) - print (log_contigs > 0).any() + print((log_contigs > 0).any()) df_log_contigs = pd.DataFrame(log_contigs,index=contigs_idx) df_log_contigs.to_csv(signature_file+".log") pca = cv2.PCACompute(log_contigs,np.mean(log_contigs,axis=0).reshape((-1,1))) @@ -21,4 +21,4 @@ def pca_signatures(signature_file): import sys signature_file = sys.argv[1] pca_results = pca_signatures(signature_file) - print pca_results + print(pca_results) diff --git a/scripts/gen_input_table.py b/scripts/gen_input_table.py index 1cd9580..88173ba 100755 --- a/scripts/gen_input_table.py +++ b/scripts/gen_input_table.py @@ -32,7 +32,7 @@ def get_gc_and_len_dict(fastafile): def get_bedcov_dict(bedcoverage): """Uses the BEDTools genomeCoverageBed histogram output to determine mean coverage and percentage covered for each contig. - + Returns dict with fasta id as key and percentage covered and cov_mean as keys for the inner dictionary.""" out_dict = {} @@ -42,10 +42,11 @@ def get_bedcov_dict(bedcoverage): if os.path.isfile(bedcoverage): fh = open(bedcoverage) else: + bedcoverage = bedcoverage.decode('utf-8') fh = bedcoverage.split('\n')[:-1] for line in fh: - cols = line.split() + cols = line.split('\t') try: d = out_dict[cols[0]] @@ -105,7 +106,7 @@ def generate_input_table(fastafile, bamfiles, samplenames=None, isbedfiles=False """Reads input files into dictionaries then prints everything in the table format required for running ProBin.""" bedcovdicts = [] - + # Determine coverage information from bam file using BEDTools for i, bf in enumerate(bamfiles): if isbedfiles == False: @@ -118,7 +119,7 @@ def generate_input_table(fastafile, bamfiles, samplenames=None, isbedfiles=False bedcovdicts.append(get_bedcov_dict(out)) else: bedcovdicts.append(get_bedcov_dict(bf)) - + print_input_table(get_gc_and_len_dict(fastafile), bedcovdicts, samplenames=samplenames) @@ -138,7 +139,7 @@ def generate_input_table(fastafile, bamfiles, samplenames=None, isbedfiles=False raise Exception("Nr of names in samplenames should be equal to nr of given bamfiles") else: samplenames=None - + # ignore broken pipe error when piping output # http://newbebweb.blogspot.pt/2012/02/python-head-ioerror-errno-32-broken.html signal(SIGPIPE,SIG_DFL) diff --git a/scripts/mummer_clusters.py b/scripts/mummer_clusters.py index 3d0504c..eb4c447 100755 --- a/scripts/mummer_clusters.py +++ b/scripts/mummer_clusters.py @@ -26,7 +26,7 @@ with open(coveragefn, 'r') as csvfile: reader = csv.reader(csvfile, dialect='excel-tab') - reader.next() + next(reader) for row in reader: vals = [row[0], row[1], row[2], str(sum([float(x) for x in row[col1:col2+1]]))] covmap[row[0]] = vals @@ -38,7 +38,7 @@ contig_set = defaultdict(dict) -for chrom, label in refs.iteritems(): +for chrom, label in refs.items(): if not os.path.exists("%s_%s.delta" % (tag, chrom)): os.system("nucmer --prefix=%s_%s %s.fna %s" % (tag, chrom, chrom, tag)) #os.system("show-tiling %s_%s.delta > %s_%s.tiling" % (tag, chrom, tag, chrom)) @@ -56,16 +56,16 @@ start = cols[0] contig_set[label][contig] = start -print "Contig", +print("Contig", end=' ') for label in sorted(contig_set.keys()): - print "\t" + label, -print + print("\t" + label, end=' ') +print() for rec in SeqIO.parse(tag, "fasta"): - print "%s\t%s\t%s" % (rec.id, contigmap[rec.id], "\t".join(covmap[rec.id])), + print("%s\t%s\t%s" % (rec.id, contigmap[rec.id], "\t".join(covmap[rec.id])), end=' ') for label in sorted(contig_set.keys()): - if rec.id in contig_set[label].keys(): - print "\tY\t%s" % (contig_set[label][rec.id]), + if rec.id in list(contig_set[label].keys()): + print("\tY\t%s" % (contig_set[label][rec.id]), end=' ') else: - print "\tN\tNA", - print + print("\tN\tNA", end=' ') + print() diff --git a/setup.py b/setup.py index b53de86..0190fee 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ try: from Cython.Distutils import build_ext except ImportError: - print "You need to have Cython installed on your system to run setup.py. Sorry!" + print("You need to have Cython installed on your system to run setup.py. Sorry!") sys.exit() version = '0.5.0' diff --git a/tests/test_integration.py b/tests/test_integration.py index 8ab824d..10abe99 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -65,10 +65,10 @@ def md5sum(self,fh): infile = open("filename", 'rb') content = infile.read() infile.close() - m = hashlib.md5() + m = hashlib.md5() m.update(content) return m.hexdigest() - + def test_no_errors(self): self.run_command() assert_equal(self.c,0, @@ -79,7 +79,7 @@ def test_directory_creation(self): assert_true(isdir(tmp_basename_dir), msg = "Temporary directory not created") m_time_first = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') - + # Rerun the concoct and see that the directory is overwritten self.run_command() m_time_second = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') @@ -109,7 +109,7 @@ def test_prior_to_clustering(self): assert_true(isfile(d_p+ '/PCA_transformed_data_gt1000.csv'), msg="PCA transformed data file is not created") - + def test_output_files_creation(self): # dir as basename self.run_command() @@ -149,7 +149,7 @@ def test_output_files_creation(self): isfile(d_p+ 'log.txt'), msg='Log file is not created' ) - + def test_threshold_functionality(self): self.run_command() d_p = tmp_basename_dir @@ -157,7 +157,7 @@ def test_threshold_functionality(self): clust_gt_1 = d_p+'/clustering_gt1000.csv' odl_1 = self.file_len(od_1) clust_gtl_1= self.file_len(clust_gt_1) - + self.run_command(comp_file='composition_some_shortened.fa', basename=tmp_basename_dir2+'/') d_p2 = tmp_basename_dir2 @@ -165,7 +165,7 @@ def test_threshold_functionality(self): clust_gt_2 = d_p2+'/clustering_gt1000.csv' odl_2 = self.file_len(od_2) clust_gtl_2= self.file_len(clust_gt_2) - + assert_true(odl_1!=odl_2, msg='Original data have the same lengths') assert_true(clust_gtl_1!=clust_gtl_2, @@ -177,7 +177,7 @@ def test_logging(self): log_content = log.read() assert_true(len(log_content)>10, "Log content is too small") - pca_report = filter(lambda row: 'Performed PCA, resulted in ' in row, log_content.split('\n'))[0] + pca_report = [row for row in log_content.split('\n') if 'Performed PCA, resulted in ' in row][0] pca_dimensions_log = int(pca_report.split()[-2]) with open(tmp_basename_dir+'/PCA_transformed_data_gt1000.csv', 'r') as pca_comps: header = pca_comps.readlines()[0] @@ -193,7 +193,7 @@ def test_seed(self): first_time = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') with open(tmp_basename_dir+'/clustering_gt1000.csv','r') as clustering: first_file=clustering.read() - + self.run_command() second_time = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') with open(tmp_basename_dir+'/clustering_gt1000.csv','r') as clustering: @@ -204,10 +204,10 @@ def test_seed(self): msg='Clustering outcomes were not the same with same seeds') #Should be equal to both above since default seed is 11 - self.run_command(tags=["-f","11"]) + self.run_command(tags=["-f","11"]) first_time = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') with open(tmp_basename_dir+'/clustering_gt1000.csv','r') as clustering: - first_file=clustering.read() + first_file=clustering.read() assert_true(not (first_time==second_time), msg='clustering_gt1000.csv did not change') assert_true(first_file == second_file, @@ -219,7 +219,7 @@ def test_seed(self): with open(tmp_basename_dir+'/clustering_gt1000.csv','r') as clustering: first_file=clustering.read() - + #Should give random clustering self.run_command(tags=['-f','0']) second_time = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') @@ -237,7 +237,7 @@ def test_seed(self): first_time = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') with open(tmp_basename_dir+'/clustering_gt1000.csv','r') as clustering: first_file=clustering.read() - + #Should give clustering 3 self.run_command(tags=['-f','3']) second_time = os.path.getmtime(tmp_basename_dir+'/clustering_gt1000.csv') @@ -253,7 +253,7 @@ def test_log_coverage(self): original_coverage_data_path = os.path.join(tmp_basename_dir,'original_data_gt1000.csv') df = p.io.parsers.read_table(original_coverage_data_path,index_col=0,sep=',') - true_pseudo_cov = -1.3143 + true_pseudo_cov = -1.3143 calc_pseudo_cov = df.sample_1[0] assert_almost_equal(true_pseudo_cov,calc_pseudo_cov,places=4) @@ -262,20 +262,20 @@ def test_log_coverage_no_cov_normalization(self): original_coverage_data_path = os.path.join(tmp_basename_dir,'original_data_gt1000.csv') df = p.io.parsers.read_table(original_coverage_data_path,index_col=0,sep=',') - true_pseudo_cov = -1.8107 + true_pseudo_cov = -1.8107 calc_pseudo_cov = df.sample_1[0] assert_almost_equal(true_pseudo_cov,calc_pseudo_cov,places=4) def test_big_file_validation(self): - """ Run Validate.pl on the result files after running a larger input + """ Run Validate.pl on the result files after running a larger input file and make sure the statistics are good enough. """ - self.run_command(cov_file='large_contigs/coverage_table.tsv', + self.run_command(cov_file='large_contigs/coverage_table.tsv', comp_file='large_contigs/contigs.fa', basename=os.path.join(tmp_dir_path, 'large_contigs/')) validate_path = os.path.join(test_dir_path, '..', 'scripts', 'Validate.pl') - clustering_reference = os.path.join(test_dir_path, 'test_data', 'large_contigs', + clustering_reference = os.path.join(test_dir_path, 'test_data', 'large_contigs', 'clustering_gt1000_taxassign.csv') clustering_file = os.path.join(tmp_dir_path,'large_contigs', 'clustering_gt1000.csv') @@ -283,23 +283,23 @@ def test_big_file_validation(self): assert_true(isfile(validate_path)) assert_true(isfile(clustering_reference)) assert_true(isfile(clustering_file)) - validate_so = subprocess.check_output(['perl', validate_path, + validate_so = subprocess.check_output(['perl', validate_path, '--sfile={}'.format(clustering_reference), '--cfile={}'.format(clustering_file) ]) - print "Results for large clustering file: " - print validate_so - - headers = validate_so.split('\n')[0].split('\t') - stats = validate_so.split('\n')[1].split('\t') - stats_dict = dict(zip(headers, stats)) - - assert_true(float(stats_dict['AdjRand']) > 0.85, + print("Results for large clustering file: ") + print(validate_so) + + headers = validate_so.split(b'\n')[0].split(b'\t') + stats = validate_so.split(b'\n')[1].split(b'\t') + stats_dict = dict(list(zip(headers, stats))) + + assert_true(float(stats_dict[b'AdjRand']) > 0.85, msg=("Insufficient adjusted rand index " "reached, requires > 0.85")) - assert_true(float(stats_dict['Prec.']) > 0.95, + assert_true(float(stats_dict[b'Prec.']) > 0.95, msg=("Insufficient precision reached, " - "requires > 0.95")) - assert_true(float(stats_dict['Rec.']) > 0.90, + "requires > /0.95")) + assert_true(float(stats_dict[b'Rec.']) > 0.90, msg=("Insufficient recall reached, " "requires > 0.90")) diff --git a/tests/test_unittest_input.py b/tests/test_unittest_input.py index 54050a5..312e6a5 100644 --- a/tests/test_unittest_input.py +++ b/tests/test_unittest_input.py @@ -25,7 +25,7 @@ def test_normalize_per_samples(self): def test_generate_feature_mapping(self): feature_mapping, counter = generate_feature_mapping(2) assert_equal(counter, 10) - assert_equal(len(feature_mapping.keys()), 16) + assert_equal(len(list(feature_mapping.keys())), 16) assert_true(('A', 'A') in feature_mapping) def test_load_composition(self): @@ -65,14 +65,14 @@ def test__calculate_composition(self): # Make sure the count is correct for one specific kmer kmer_s = ('A', 'C', 'G', 'T') - for seq_id, s in seq_strings.iteritems(): + for seq_id, s in seq_strings.items(): c = count_substrings(s, "".join(kmer_s)) assert_equal(composition.ix[seq_id, feature_mapping[kmer_s]], c+1) # Check that non palindromic kmers works as well: kmer_s = ('A', 'G', 'G', 'G') reverse_kmer_s = ('C', 'C', 'C', 'T') - for seq_id, s in seq_strings.iteritems(): + for seq_id, s in seq_strings.items(): c_1 = count_substrings(s, "".join(kmer_s)) c_2 = count_substrings(s, "".join(reverse_kmer_s)) assert_equal(composition.ix[seq_id, feature_mapping[kmer_s]], c_1 + c_2 + 1) From 685f6a256e481619ed9d71930b293ccb250ab035 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 11 Oct 2018 15:02:11 +0200 Subject: [PATCH 60/78] Added python 3 to be tested on by travis --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 488ab05..d7ed977 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ language: python python: - "2.7" + - "3.4" + - "3.7" # does not have headers provided, please ask https://launchpad.net/~pypy/+archive/ppa # maintainers to fix their pypy-dev package. # command to install dependencies From 92ba151d30b5ef0f1745d072e173cb22630da585 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 11 Oct 2018 15:15:18 +0200 Subject: [PATCH 61/78] Python 3.7 not yet available on travis --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d7ed977..c9a61dd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,7 @@ language: python python: - "2.7" - - "3.4" - - "3.7" + - "3.6" # does not have headers provided, please ask https://launchpad.net/~pypy/+archive/ppa # maintainers to fix their pypy-dev package. # command to install dependencies From a66fd135509c96bca2f51fbc912dbf56812d5cda Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Thu, 11 Oct 2018 15:21:21 +0200 Subject: [PATCH 62/78] Only default python versions when using apt-get as well --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index c9a61dd..980ae3f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,10 @@ language: python python: - "2.7" - - "3.6" - # does not have headers provided, please ask https://launchpad.net/~pypy/+archive/ppa - # maintainers to fix their pypy-dev package. + - "3.4" + # Since we are using system_site_packages, we are only able to use + # the default python versions, see: + # https://docs.travis-ci.com/user/languages/python/#travis-ci-uses-isolated-virtualenvs # command to install dependencies virtualenv: system_site_packages: true From a3d7813087276b58f6533b9165fea762cde5d488 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 12:53:39 +0100 Subject: [PATCH 63/78] Cut up fasta can create a bedfile --- scripts/cut_up_fasta.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/scripts/cut_up_fasta.py b/scripts/cut_up_fasta.py index 96b02e8..0b48f3c 100755 --- a/scripts/cut_up_fasta.py +++ b/scripts/cut_up_fasta.py @@ -1,21 +1,35 @@ #!/usr/bin/env python """Cut up fasta file in non-overlapping or overlapping parts of equal length. + +Optionally creates a BED-file where the cutup contigs are specified in terms +of the original contigs. This can be used as input to concoct_coverage_table.py. """ +from __future__ import print_function import argparse from Bio import SeqIO -def cut_up_fasta(fastfiles, chunk_size, overlap, merge_last): +def cut_up_fasta(fastfiles, chunk_size, overlap, merge_last, bedoutfile): + if bedoutfile: + bedoutfile_fh = open(bedoutfile, 'w') for ff in fastfiles: for record in SeqIO.parse(ff, "fasta"): if (not merge_last and len(record.seq) > chunk_size) or (merge_last and len(record.seq) >= 2 * chunk_size): i = 0 for split_seq in chunks(record.seq, chunk_size, overlap, merge_last): print(">%s.%i\n%s" % (record.id, i, split_seq)) + if bedoutfile: + print("{0}\t{2}\t{3}\t{0}.{1}".format(record.id, i, chunk_size*i, chunk_size*i+len(split_seq)), + file=bedoutfile_fh) i = i + 1 else: print(">%s\n%s" % (record.id, record.seq)) + if bedoutfile: + print("{0}\t0\t{1}\t{0}".format(record.id, len(record.seq)), + file=bedoutfile_fh) + if bedoutfile: + bedoutfile_fh.close() def chunks(l, n, o, merge_last): """ Yield successive n-sized chunks from l with given overlap o between the @@ -39,5 +53,7 @@ def chunks(l, n, o, merge_last): parser.add_argument("-c", "--chunk_size", default=1999, type=int, help="Chunk size\n") parser.add_argument("-o", "--overlap_size", default=1900, type=int, help="Overlap size\n") parser.add_argument("-m", "--merge_last", default=False, action="store_true", help="Concatenate final part to last contig\n") + parser.add_argument("-b", "--bedfile", default=None, help="BEDfile to be created with exact regions of the original" + " contigs corresponding to the newly created contigs") args = parser.parse_args() - cut_up_fasta(args.contigs, args.chunk_size, args.overlap_size, args.merge_last) + cut_up_fasta(args.contigs, args.chunk_size, args.overlap_size, args.merge_last, args.bedfile) From a1e636c28238c3999379057b098c0aa0907efc37 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 12:54:05 +0100 Subject: [PATCH 64/78] A script to generate coverage table from a bedfile and the original contig bams --- scripts/concoct_coverage_table.py | 77 +++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 scripts/concoct_coverage_table.py diff --git a/scripts/concoct_coverage_table.py b/scripts/concoct_coverage_table.py new file mode 100644 index 0000000..27a4e0c --- /dev/null +++ b/scripts/concoct_coverage_table.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +""" +A script to generate the input coverage table for CONCOCT using a BEDFile. + +Output is written to stdout. The BEDFile defines the regions used as +subcontigs for concoct. This makes it possible to get the coverage for +subcontigs without specifically mapping reads against the subcontigs. + +@author: inodb, alneberg +""" +from __future__ import print_function +import sys +import os +import argparse +import subprocess +import glob +from signal import signal, SIGPIPE, SIG_DFL +import pandas as pd + +def generate_input_table(bedfile, bamfiles, samplenames=None): + """Reads input files into dictionaries then prints everything in the table + format required for running CONCOCT.""" + + p = subprocess.Popen(["samtools", "bedcov", bedfile] + bamfiles, stdout=subprocess.PIPE) + + out, err = p.communicate() + if p.returncode != 0: + sys.stderr.write(out) + sys.stderr.write(err) + raise Exception('Error with running samtools bedcov') + else: + # Header + if samplenames == None: + # Use index if no sample names given in header + col_names = [os.path.splitext(os.path.basename(bamfile))[0] for bamfile in bamfiles] + else: + # Use given sample names in header + col_names = samplenames + header=["cov_mean_sample_{}".format(n) for n in col_names] + + # Content + if sys.version_info[0] < 3: + from StringIO import StringIO + else: + from io import StringIO + + fh = StringIO(out.decode('utf-8')) + df = pd.read_table(fh, header=None) + avg_coverage_depth = df[df.columns[4:]].divide((df[2]-df[1]), axis=0) + avg_coverage_depth.index = df[3] + avg_coverage_depth.columns = header + avg_coverage_depth.to_csv(sys.stdout, index_label='contig', sep='\t') + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("bedfile", help="Contigs BEDFile with four columns representing: 'Contig ID, Start Position, " + "End Position and SubContig ID' respectively. The Subcontig ID is usually the same as the Contig ID for contigs " + "which are not cutup. This file can be generated by the cut_up_fasta.py script.") + parser.add_argument("bamfiles", nargs='+', help="BAM files with mappings to the original contigs.") + parser.add_argument("--samplenames", default=None, help="File with sample names, one line each. Should be same nr " + "of bamfiles. Default sample names used are the file names of the bamfiles, excluding the file extension.") + args = parser.parse_args() + + # Get sample names + if args.samplenames != None: + samplenames = [ s[:-1] for s in open(args.samplenames).readlines() ] + if len(samplenames) != len(args.bamfiles): + raise Exception("Nr of names ({0}) in samplenames should be equal to nr of given " + "bamfiles ({1})".format(len(samplenames), len(args.bamfiles))) + else: + samplenames=None + + # ignore broken pipe error when piping output + # http://newbebweb.blogspot.pt/2012/02/python-head-ioerror-errno-32-broken.html + signal(SIGPIPE,SIG_DFL) + + generate_input_table(args.bedfile, args.bamfiles, samplenames=samplenames) From bbe3c560f87771e145f0ce8ea8b6c93f40af4f66 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 12:56:59 +0100 Subject: [PATCH 65/78] Merge cutup clustering script --- scripts/merge_cutup_clustering.py | 65 +++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 scripts/merge_cutup_clustering.py diff --git a/scripts/merge_cutup_clustering.py b/scripts/merge_cutup_clustering.py new file mode 100644 index 0000000..6a8a131 --- /dev/null +++ b/scripts/merge_cutup_clustering.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +""" +With contigs cutup with cut_up_fasta.py as input, sees to that the consequtive +parts of the original contigs are merged. + +prints result to stdout. + +@author: alneberg +""" +from __future__ import print_function +import sys +import os +import argparse +from collections import defaultdict, Counter + +def original_contig_name_special(s): + """Transform s to the original contig name according to the special Baltic Mag paper""" + n = s.split(".")[-1].split('_')[0] + try: + int(n) + except: + return s, 0, None + # Only small integers are likely to be + # indicating a cutup part. + if int(n) < 1000: + + return ".".join(s.split(".")[:-1]), int(n), "_".join(s.split(".")[-1].split('_')[1:]) + else: + # A large n indicates that the integer + # was part of the original contig + return s, 0, None + +def main(args): + all_seqs = {} + all_originals = defaultdict(dict) + with open(args.cutup_clustering_result, 'r') as ifh: + for line in ifh: + line = line.strip() + contig_id, cluster_id = line.split(',') + original_contig_name, part_id, left_over = original_contig_name_special(contig_id) + + all_originals[original_contig_name][part_id] = cluster_id + + merged_contigs_stack = [] + + for original_contig_id, part_ids_d in all_originals.iteritems(): + if len(part_ids_d) > 1: + c = Counter(part_ids_d.values()) + cluster_id = c.most_common(1)[0][0] + c_string = [(a,b) for a, b in c.iteritems()] + if len(c.values()) > 1: + sys.stderr.write("{}\t{}, chosen: {}\n".format(original_contig_id, c_string, cluster_id)) + else: + sys.stderr.write("{}\t{}\n".format(original_contig_id, c_string)) + else: + cluster_id = part_ids_d.values()[0] + + sys.stdout.write("{},{}\n".format(original_contig_id, cluster_id)) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("cutup_clustering_result", help=("Input cutup clustering result.")) + args = parser.parse_args() + + main(args) From 569b0e255bc9c702dbb91f96ab4329617b8d5be7 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 12:58:40 +0100 Subject: [PATCH 66/78] Basic usage instruction on README --- README.md | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b91ce15..636115b 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,6 @@ A program for unsupervised binning of metagenomic contigs by using nucleotide composition, coverage data in multiple samples and linkage data from paired end reads. -Warning! This software is to be considered under development. Functionality and the user interface may still change significantly from one version to another. -If you want to use this software, please stay up to date with the list of known issues: -https://github.com/BinPro/CONCOCT/issues - ## Please Cite ## If you use CONCOCT in your publication, please cite: @@ -15,6 +11,34 @@ Johannes Alneberg, Brynjar Smári Bjarnason, Ino de Bruijn, Melanie Schirmer, Jo ## Documentation ## A comprehensive documentation for concoct is hosted on [readthedocs](https://concoct.readthedocs.org). +## Basic Usage ## +Cut contigs into smaller parts +```bash +cut_up_fasta.py original_contigs.fa -c 10000 -o 0 --merge_last -b contigs_10K.bed > contigs_10K.fa +``` + +Generate table with coverage depth information per sample and subcontig. +This step assumes the directory 'mapping' contains sorted and indexed bam files where each sample has been mapped against the original contigs. +```bash +concoct_coverage_table.py contigs_10K.bed mapping/Sample*.sorted.bam > coverage_table.tsv +``` + +Run concoct +```bash +concoct --composition_file contigs_10K.fa --coverage_file coverage_table.tsv -b concoct_output/ +``` + +Merge subcontig clustering into original contig clustering +```bash +merge_cutup_clustering.py concoct_output/clustering_gt1000.csv > concoct_output/clustering_merged.csv +``` + +Extract bins as individual FASTA +```bash +mkdir concoct_output/fata_bins +extract_fasta_bins.py original_contigs.fa concoct_output/clustering_merge.csv --output_path concoct_output/fasta_bins +``` + ## Support ## [![Gitter](https://img.shields.io/badge/gitter-%20join%20chat%20%E2%86%92-4fb99a.svg?style=flat-square)](https://gitter.im/BinPro/CONCOCT) If you are having trouble running CONCOCT or interpretting any results, please don't hesitate to write a question in our gitter channel. From 98956a07acdaf79ca3e84b9cff3c455ac2c6243b Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 13:00:33 +0100 Subject: [PATCH 67/78] Removed some trailing whitespace --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 636115b..e3a766b 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ Cut contigs into smaller parts cut_up_fasta.py original_contigs.fa -c 10000 -o 0 --merge_last -b contigs_10K.bed > contigs_10K.fa ``` -Generate table with coverage depth information per sample and subcontig. -This step assumes the directory 'mapping' contains sorted and indexed bam files where each sample has been mapped against the original contigs. +Generate table with coverage depth information per sample and subcontig. +This step assumes the directory 'mapping' contains sorted and indexed bam files where each sample has been mapped against the original contigs. ```bash concoct_coverage_table.py contigs_10K.bed mapping/Sample*.sorted.bam > coverage_table.tsv ``` From 0ee8dc5d12d81ee5fb7c5d238e746d411eca8baa Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 14:53:46 +0100 Subject: [PATCH 68/78] Bumped version to v1.0.0 --- Dockerfile | 16 ++++++++-------- README.md | 2 +- doc/source/conf.py | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index d2daa31..ccca028 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,12 @@ -# Docker for CONCOCT (http://github.com/BinPro/CONCOCT) v0.5.0 -# VERSION 0.5.0 +# Docker for CONCOCT (http://github.com/BinPro/CONCOCT) v1.0.0 +# VERSION 1.0.0 # # This docker creates and sets up an Ubuntu environment with all -# dependencies for CONCOCT v0.5.0 installed. +# dependencies for CONCOCT v1.0.0 installed. # # To login to the docker with a shared directory from the host do: # -# docker run -v /my/host/shared/directory:/my/docker/location -i -t alneberg/concoct_0.5.0 /bin/bash +# docker run -v /my/host/shared/directory:/my/docker/location -i -t alneberg/concoct_1.0.0 /bin/bash # FROM ubuntu:18.04 @@ -18,13 +18,13 @@ RUN apt-get install -qq wget build-essential libgsl0-dev git zip unzip bedtools RUN pip install --upgrade pip -# Install python dependencies and fetch and install CONCOCT 0.5.0 +# Install python dependencies and fetch and install CONCOCT 1.0.0 RUN cd /opt/CONCOCT;\ pip install -r requirements.txt;\ -# wget --no-check-certificate https://github.com/BinPro/CONCOCT/archive/0.5.0.tar.gz;\ -# tar xf 0.5.0.tar.gz;\ -# cd CONCOCT-0.5.0;\ +# wget --no-check-certificate https://github.com/BinPro/CONCOCT/archive/1.0.0.tar.gz;\ +# tar xf 1.0.0.tar.gz;\ +# cd CONCOCT-1.0.0;\ # python setup.py install RUN cd /opt/CONCOCT/;\ diff --git a/README.md b/README.md index e3a766b..a33ac2b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## CONCOCT 0.5.0 development version [![Build Status](https://travis-ci.org/BinPro/CONCOCT.png?branch=master)](https://travis-ci.org/BinPro/CONCOCT) +## CONCOCT 1.0.0 [![Build Status](https://travis-ci.org/BinPro/CONCOCT.png?branch=master)](https://travis-ci.org/BinPro/CONCOCT) A program for unsupervised binning of metagenomic contigs by using nucleotide composition, coverage data in multiple samples and linkage data from paired end reads. diff --git a/doc/source/conf.py b/doc/source/conf.py index f6e8d8f..c65ba27 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -66,9 +66,9 @@ # built documents. # # The short X.Y version. -version = '0.5' +version = '1.0' # The full version, including alpha/beta/rc tags. -release = '0.5.0' +release = '1.0.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 03271a2143560a3b972077dbd8e6d0726412d731 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 14:56:33 +0100 Subject: [PATCH 69/78] Bumped version in one more file --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a8cef15..aa0ab3d 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ print("You need to have Cython installed on your system to run setup.py. Sorry!") sys.exit() -version = '0.5.0' +version = '1.0.0' include_dirs_for_concoct = [np.get_include(), '/opt/local/include/'] From 4e1b582d01192ee108ce1250997330c766a4d399 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 16:17:32 +0100 Subject: [PATCH 70/78] Executable mode for new scripts --- scripts/concoct_coverage_table.py | 0 scripts/merge_cutup_clustering.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/concoct_coverage_table.py mode change 100644 => 100755 scripts/merge_cutup_clustering.py diff --git a/scripts/concoct_coverage_table.py b/scripts/concoct_coverage_table.py old mode 100644 new mode 100755 diff --git a/scripts/merge_cutup_clustering.py b/scripts/merge_cutup_clustering.py old mode 100644 new mode 100755 From 472373450aacba67fc9b0a3a38ac4b95ca46e5f1 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 16:18:00 +0100 Subject: [PATCH 71/78] Added some scripts that should be added to path when installing concoct --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index aa0ab3d..4f1262d 100644 --- a/setup.py +++ b/setup.py @@ -30,7 +30,8 @@ url='https://github.com/BinPro/CONCOCT', license='FreeBSD', packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), - scripts=["bin/concoct","bin/concoct_refine"], + scripts=["bin/concoct","bin/concoct_refine", "scripts/cut_up_fasta.py", "scripts/concoct_coverage_table.py", + "scripts/merge_cutup_clustering.py", "scripts/extract_fasta_bins.py"], include_package_data=True, zip_safe=False, cmdclass = {'build_ext': build_ext}, From 4547874c864b85d1b9aefd0b38aa0a209321168b Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 16:18:39 +0100 Subject: [PATCH 72/78] Bumped version number on complete example stump --- doc/source/complete_example.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/complete_example.rst b/doc/source/complete_example.rst index a580bba..747f27a 100644 --- a/doc/source/complete_example.rst +++ b/doc/source/complete_example.rst @@ -1,4 +1,4 @@ -Complete Example V0.4 +Complete Example V1.0 ===================== We'd like to here give you a complete example walk through. However, the From fb5071ad0023e5061e34d13683f7a9b98d6aa519 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 16:18:57 +0100 Subject: [PATCH 73/78] Slighlty more extensive installation instructions --- doc/source/installation.rst | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/doc/source/installation.rst b/doc/source/installation.rst index 64d4b7a..039d5ee 100644 --- a/doc/source/installation.rst +++ b/doc/source/installation.rst @@ -9,25 +9,30 @@ Fundamental dependencies :: - python v2.7.* - gcc - gsl + python version 2.7 or version 3 + gcc - C compiler + gsl - GNU Scientific Library + gslcblas - GNU Scientific Library BLAS library + gomp - GNU OpenMP implementation + These items are prerequisities for the installation of concoct as described below. The installation procedure varies on different systems, and described in this README is only how to proceed with a linux (ubuntu) distribution. -The first item, ``python v2.7.*``, should be installed on a modern -Ubuntu distribution. A c-compiler, e.g. ``gcc``, is needed to compile +We recommend using miniconda to install python. +A c-compiler, e.g. ``gcc``, is needed to compile the c parts of concoct that uses the GNU Scientific Library ``gsl``. For linux (ubuntu) this is installed through: :: - apt-get install build-essential libgsl0-dev + apt-get install build-essential libgsl0-dev libgomp1 -Making it work on Mac OSX: +Making it work on Mac OSX +~~~~~~~~~~~~~~~~~~~~~~~~~ +A bit of a hack. You have been warned: :: From 768ce7f502da72c77c90d5070a8bbafdc530da19 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 18:07:09 +0100 Subject: [PATCH 74/78] Corrected typo in README commands --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a33ac2b..624e329 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ merge_cutup_clustering.py concoct_output/clustering_gt1000.csv > concoct_output/ Extract bins as individual FASTA ```bash -mkdir concoct_output/fata_bins -extract_fasta_bins.py original_contigs.fa concoct_output/clustering_merge.csv --output_path concoct_output/fasta_bins +mkdir concoct_output/fasta_bins +extract_fasta_bins.py original_contigs.fa concoct_output/clustering_merged.csv --output_path concoct_output/fasta_bins ``` ## Support ## From 587f02031c50b8a0d8c1de7fa0ad2f110d209d2a Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 18:07:57 +0100 Subject: [PATCH 75/78] Use cluster_id as column name for clustering output --- concoct/output.py | 1 + 1 file changed, 1 insertion(+) diff --git a/concoct/output.py b/concoct/output.py index 7d6cc18..5799d77 100644 --- a/concoct/output.py +++ b/concoct/output.py @@ -84,6 +84,7 @@ def write_pca(self, transform, threshold, index): @classmethod def write_assign(self, assign, threshold, index): transform_df = p.DataFrame(assign, index=index) + transform_df.columns=['cluster_id'] transform_df.to_csv( self.ASSIGN_FILE_BASE.format(threshold), index_label="contig_id" From 0a5c25b5e802be884bf06e14d81e8bbb484c2277 Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 18:08:18 +0100 Subject: [PATCH 76/78] Use max 3 decimals for coverage values --- scripts/concoct_coverage_table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/concoct_coverage_table.py b/scripts/concoct_coverage_table.py index 27a4e0c..3c49b35 100755 --- a/scripts/concoct_coverage_table.py +++ b/scripts/concoct_coverage_table.py @@ -49,7 +49,7 @@ def generate_input_table(bedfile, bamfiles, samplenames=None): avg_coverage_depth = df[df.columns[4:]].divide((df[2]-df[1]), axis=0) avg_coverage_depth.index = df[3] avg_coverage_depth.columns = header - avg_coverage_depth.to_csv(sys.stdout, index_label='contig', sep='\t') + avg_coverage_depth.to_csv(sys.stdout, index_label='contig', sep='\t', float_format='%.3f') if __name__ == "__main__": parser = argparse.ArgumentParser(description=__doc__) From 69ae7f29461a9791a7a3142a53d3a3c32f4d169e Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 18:09:18 +0100 Subject: [PATCH 77/78] Assume header in clustering file --- scripts/extract_fasta_bins.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/extract_fasta_bins.py b/scripts/extract_fasta_bins.py index 00c9c6a..0b1de09 100755 --- a/scripts/extract_fasta_bins.py +++ b/scripts/extract_fasta_bins.py @@ -15,8 +15,9 @@ def main(args): all_seqs = {} for i, seq in enumerate(SeqIO.parse(args.fasta_file, "fasta")): all_seqs[seq.id] = seq - df = pd.read_csv(args.cluster_file, header=None, names=["contig_id", "cluster_id"]) - + df = pd.read_csv(args.cluster_file) + df.columns = ['contig_id', 'cluster_id'] + cluster_to_contigs = defaultdict(list) for i, row in df.iterrows(): cluster_to_contigs[row['cluster_id']].append(row['contig_id']) From 33895bcbf51ae0c58c32811aadb55d7713fa174f Mon Sep 17 00:00:00 2001 From: Johannes Alneberg Date: Wed, 5 Dec 2018 18:10:37 +0100 Subject: [PATCH 78/78] Removed some strange paper specific stuff and made it python 3 ready for merge_cutup_clustering script --- scripts/merge_cutup_clustering.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/scripts/merge_cutup_clustering.py b/scripts/merge_cutup_clustering.py index 6a8a131..cda9199 100755 --- a/scripts/merge_cutup_clustering.py +++ b/scripts/merge_cutup_clustering.py @@ -14,46 +14,50 @@ from collections import defaultdict, Counter def original_contig_name_special(s): - """Transform s to the original contig name according to the special Baltic Mag paper""" - n = s.split(".")[-1].split('_')[0] + n = s.split(".")[-1] try: int(n) except: - return s, 0, None + return s, 0 # Only small integers are likely to be # indicating a cutup part. if int(n) < 1000: - return ".".join(s.split(".")[:-1]), int(n), "_".join(s.split(".")[-1].split('_')[1:]) + return ".".join(s.split(".")[:-1]), int(n) else: # A large n indicates that the integer # was part of the original contig - return s, 0, None + return s, 0 def main(args): all_seqs = {} all_originals = defaultdict(dict) + first = True with open(args.cutup_clustering_result, 'r') as ifh: for line in ifh: + if first: + first=False + continue line = line.strip() contig_id, cluster_id = line.split(',') - original_contig_name, part_id, left_over = original_contig_name_special(contig_id) + original_contig_name, part_id = original_contig_name_special(contig_id) all_originals[original_contig_name][part_id] = cluster_id merged_contigs_stack = [] - for original_contig_id, part_ids_d in all_originals.iteritems(): + sys.stdout.write("contig_id,cluster_id\n") + for original_contig_id, part_ids_d in all_originals.items(): if len(part_ids_d) > 1: c = Counter(part_ids_d.values()) cluster_id = c.most_common(1)[0][0] - c_string = [(a,b) for a, b in c.iteritems()] + c_string = [(a,b) for a, b in c.items()] if len(c.values()) > 1: sys.stderr.write("{}\t{}, chosen: {}\n".format(original_contig_id, c_string, cluster_id)) else: sys.stderr.write("{}\t{}\n".format(original_contig_id, c_string)) else: - cluster_id = part_ids_d.values()[0] + cluster_id = list(part_ids_d.values())[0] sys.stdout.write("{},{}\n".format(original_contig_id, cluster_id))