In [1]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib

In [2]:
%load_ext Cython

In [3]:
import matplotlib.pyplot as plt

In [4]:
from nltk.corpus import stopwords
import xml.etree.ElementTree as ET
from tethne.readers import dfr
from tethne.classes.feature import StructuredFeature, StructuredFeatureSet
import os
import nltk

In [5]:
import cPickle as pickle
from collections import defaultdict, Counter

In [6]:
basepath = "/Users/erickpeirson/Downloads/JHB from JSTOR"

In [8]:
corpus = dfr.read(basepath)

In [69]:
corpus.indexed_papers


Out[69]:
{'10.2307/41488391': <tethne.classes.paper.Paper at 0x10a9436d0>,
 '10.2307/41488392': <tethne.classes.paper.Paper at 0x109211f10>,
 '10.2307/41488395': <tethne.classes.paper.Paper at 0x109e97790>,
 '10.2307/41488426': <tethne.classes.paper.Paper at 0x10a4d7190>,
 '10.2307/41488397': <tethne.classes.paper.Paper at 0x10a4d7a10>,
 '10.2307/41488396': <tethne.classes.paper.Paper at 0x109d5be90>,
 '10.2307/41488407': <tethne.classes.paper.Paper at 0x10914b810>,
 '10.2307/4330841': <tethne.classes.paper.Paper at 0x10900ffd0>,
 '10.2307/40801950': <tethne.classes.paper.Paper at 0x109233890>,
 '10.2307/4330843': <tethne.classes.paper.Paper at 0x1091fab90>,
 '10.2307/4330842': <tethne.classes.paper.Paper at 0x1092c9490>,
 '10.2307/40801955': <tethne.classes.paper.Paper at 0x109c0be50>,
 '10.2307/4330844': <tethne.classes.paper.Paper at 0x109d00e10>,
 '10.2307/4330847': <tethne.classes.paper.Paper at 0x1094ad210>,
 '10.2307/4330846': <tethne.classes.paper.Paper at 0x10a49dd10>,
 '10.2307/4331619': <tethne.classes.paper.Paper at 0x1098cd5d0>,
 '10.2307/41488458': <tethne.classes.paper.Paper at 0x10a64e810>,
 '10.2307/41488459': <tethne.classes.paper.Paper at 0x109e80fd0>,
 '10.2307/41488452': <tethne.classes.paper.Paper at 0x108f91a50>,
 '10.2307/41488453': <tethne.classes.paper.Paper at 0x109537850>,
 '10.2307/41488451': <tethne.classes.paper.Paper at 0x1097ee050>,
 '10.2307/41488456': <tethne.classes.paper.Paper at 0x10a1c9410>,
 '10.2307/41488457': <tethne.classes.paper.Paper at 0x10a540a90>,
 '10.2307/41488454': <tethne.classes.paper.Paper at 0x109d45110>,
 '10.2307/41488455': <tethne.classes.paper.Paper at 0x10923fcd0>,
 '10.2307/4331423': <tethne.classes.paper.Paper at 0x109104d10>,
 '10.2307/4331222': <tethne.classes.paper.Paper at 0x10a0cf690>,
 '10.2307/4331223': <tethne.classes.paper.Paper at 0x109480490>,
 '10.2307/4331220': <tethne.classes.paper.Paper at 0x10983e190>,
 '10.2307/4331221': <tethne.classes.paper.Paper at 0x109fcaf10>,
 '10.2307/4331226': <tethne.classes.paper.Paper at 0x109c5d790>,
 '10.2307/4331227': <tethne.classes.paper.Paper at 0x10a5ef2d0>,
 '10.2307/4331224': <tethne.classes.paper.Paper at 0x10995bf90>,
 '10.2307/4331225': <tethne.classes.paper.Paper at 0x10a2a6f50>,
 '10.2307/4331228': <tethne.classes.paper.Paper at 0x10a4ee550>,
 '10.2307/4331229': <tethne.classes.paper.Paper at 0x10a1a9b90>,
 '10.2307/4330755': <tethne.classes.paper.Paper at 0x1090d5dd0>,
 '10.2307/40984890': <tethne.classes.paper.Paper at 0x10a4903d0>,
 '10.2307/4330754': <tethne.classes.paper.Paper at 0x109d7ead0>,
 '10.2307/4331318': <tethne.classes.paper.Paper at 0x109f82910>,
 '10.2307/4331319': <tethne.classes.paper.Paper at 0x10a950dd0>,
 '10.2307/4331316': <tethne.classes.paper.Paper at 0x10a6fcf50>,
 '10.2307/4331317': <tethne.classes.paper.Paper at 0x10a31af50>,
 '10.2307/4331314': <tethne.classes.paper.Paper at 0x10a461c50>,
 '10.2307/4331315': <tethne.classes.paper.Paper at 0x109c8bf90>,
 '10.2307/4331312': <tethne.classes.paper.Paper at 0x108fb4590>,
 '10.2307/4331313': <tethne.classes.paper.Paper at 0x108fd5f10>,
 '10.2307/4331310': <tethne.classes.paper.Paper at 0x10a404290>,
 '10.2307/4331311': <tethne.classes.paper.Paper at 0x10a540490>,
 '10.2307/4331954': <tethne.classes.paper.Paper at 0x109e5cb10>,
 '10.2307/4331955': <tethne.classes.paper.Paper at 0x109d7ee10>,
 '10.2307/4331484': <tethne.classes.paper.Paper at 0x109b73c50>,
 '10.2307/4331485': <tethne.classes.paper.Paper at 0x109a969d0>,
 '10.2307/4331482': <tethne.classes.paper.Paper at 0x10a3c8dd0>,
 '10.2307/4331483': <tethne.classes.paper.Paper at 0x10a6fcb50>,
 '10.2307/4331952': <tethne.classes.paper.Paper at 0x10a028250>,
 '10.2307/4331953': <tethne.classes.paper.Paper at 0x10a4e2e90>,
 '10.2307/40271565': <tethne.classes.paper.Paper at 0x1097e32d0>,
 '10.2307/40271564': <tethne.classes.paper.Paper at 0x10a56ed10>,
 '10.2307/40271567': <tethne.classes.paper.Paper at 0x1099d1fd0>,
 '10.2307/40271566': <tethne.classes.paper.Paper at 0x1097d7890>,
 '10.2307/4331958': <tethne.classes.paper.Paper at 0x109c5ddd0>,
 '10.2307/40271560': <tethne.classes.paper.Paper at 0x10a4bffd0>,
 '10.2307/4331488': <tethne.classes.paper.Paper at 0x1091e2d50>,
 '10.2307/40271562': <tethne.classes.paper.Paper at 0x109004b50>,
 '10.2307/4331558': <tethne.classes.paper.Paper at 0x10a07ad10>,
 '10.2307/4331559': <tethne.classes.paper.Paper at 0x10a845590>,
 '10.2307/4330573': <tethne.classes.paper.Paper at 0x10a0e4a90>,
 '10.2307/4331009': <tethne.classes.paper.Paper at 0x10a7ff990>,
 '10.2307/4330575': <tethne.classes.paper.Paper at 0x10a897c50>,
 '10.2307/4330574': <tethne.classes.paper.Paper at 0x10a2d7f10>,
 '10.2307/4330577': <tethne.classes.paper.Paper at 0x109a3ac50>,
 '10.2307/4330576': <tethne.classes.paper.Paper at 0x109d89590>,
 '10.2307/4330579': <tethne.classes.paper.Paper at 0x10995b910>,
 '10.2307/4330578': <tethne.classes.paper.Paper at 0x10a8fdc90>,
 '10.2307/4331000': <tethne.classes.paper.Paper at 0x10a3c83d0>,
 '10.2307/4331001': <tethne.classes.paper.Paper at 0x10a75b390>,
 '10.2307/4331554': <tethne.classes.paper.Paper at 0x10a77d090>,
 '10.2307/4331007': <tethne.classes.paper.Paper at 0x109ec6ad0>,
 '10.2307/4331004': <tethne.classes.paper.Paper at 0x10a383a50>,
 '10.2307/4331557': <tethne.classes.paper.Paper at 0x10a817f50>,
 '10.2307/4331828': <tethne.classes.paper.Paper at 0x10a278d50>,
 '10.2307/4331829': <tethne.classes.paper.Paper at 0x109d89bd0>,
 '10.2307/4331798': <tethne.classes.paper.Paper at 0x1091e2e50>,
 '10.2307/4331799': <tethne.classes.paper.Paper at 0x109104b10>,
 '10.2307/4331792': <tethne.classes.paper.Paper at 0x10a788450>,
 '10.2307/4331037': <tethne.classes.paper.Paper at 0x10a09db50>,
 '10.2307/4331790': <tethne.classes.paper.Paper at 0x10a61de10>,
 '10.2307/4331823': <tethne.classes.paper.Paper at 0x10a6b5310>,
 '10.2307/4331824': <tethne.classes.paper.Paper at 0x109908fd0>,
 '10.2307/4331825': <tethne.classes.paper.Paper at 0x109af2cd0>,
 '10.2307/4331826': <tethne.classes.paper.Paper at 0x109ea4cd0>,
 '10.2307/4331795': <tethne.classes.paper.Paper at 0x10a0a9f90>,
 '10.2307/4331527': <tethne.classes.paper.Paper at 0x10a11eed0>,
 '10.2307/4331526': <tethne.classes.paper.Paper at 0x10a383d50>,
 '10.2307/4330689': <tethne.classes.paper.Paper at 0x10a4caf10>,
 '10.2307/4330688': <tethne.classes.paper.Paper at 0x109027690>,
 '10.2307/4330683': <tethne.classes.paper.Paper at 0x109ec6f10>,
 '10.2307/4330682': <tethne.classes.paper.Paper at 0x109afd710>,
 '10.2307/4330681': <tethne.classes.paper.Paper at 0x109bcfe90>,
 '10.2307/4330680': <tethne.classes.paper.Paper at 0x10a766950>,
 '10.2307/4330687': <tethne.classes.paper.Paper at 0x10a5e3b90>,
 '10.2307/4330686': <tethne.classes.paper.Paper at 0x10a2b2ed0>,
 '10.2307/4330685': <tethne.classes.paper.Paper at 0x10a92d2d0>,
 '10.2307/4330684': <tethne.classes.paper.Paper at 0x1090eefd0>,
 '10.2307/4331176': <tethne.classes.paper.Paper at 0x109e00d10>,
 '10.2307/4331177': <tethne.classes.paper.Paper at 0x1098db410>,
 '10.2307/4331174': <tethne.classes.paper.Paper at 0x10903f750>,
 '10.2307/4331175': <tethne.classes.paper.Paper at 0x10a7db150>,
 '10.2307/4331172': <tethne.classes.paper.Paper at 0x10a579810>,
 '10.2307/4331173': <tethne.classes.paper.Paper at 0x109d5b250>,
 '10.2307/4331170': <tethne.classes.paper.Paper at 0x10a69df10>,
 '10.2307/4331171': <tethne.classes.paper.Paper at 0x109f53ed0>,
 '10.2307/4331178': <tethne.classes.paper.Paper at 0x10a140610>,
 '10.2307/4331179': <tethne.classes.paper.Paper at 0x10a607e10>,
 '10.2307/4330759': <tethne.classes.paper.Paper at 0x109938650>,
 '10.2307/4330974': <tethne.classes.paper.Paper at 0x10a23dfd0>,
 '10.2307/4330977': <tethne.classes.paper.Paper at 0x1098fe710>,
 '10.2307/4330976': <tethne.classes.paper.Paper at 0x10a4a8c10>,
 '10.2307/4330971': <tethne.classes.paper.Paper at 0x10984a5d0>,
 '10.2307/4330970': <tethne.classes.paper.Paper at 0x109ebbd10>,
 '10.2307/4330973': <tethne.classes.paper.Paper at 0x10a383290>,
 '10.2307/4330972': <tethne.classes.paper.Paper at 0x10a8f2710>,
 '10.2307/4330751': <tethne.classes.paper.Paper at 0x10a8cfed0>,
 '10.2307/4330750': <tethne.classes.paper.Paper at 0x109eddf50>,
 '10.2307/4330753': <tethne.classes.paper.Paper at 0x10a3d5210>,
 '10.2307/4330752': <tethne.classes.paper.Paper at 0x109ef5950>,
 '10.2307/4330979': <tethne.classes.paper.Paper at 0x109e69910>,
 '10.2307/4330978': <tethne.classes.paper.Paper at 0x10a561b50>,
 '10.2307/4330757': <tethne.classes.paper.Paper at 0x109e18f50>,
 '10.2307/4330756': <tethne.classes.paper.Paper at 0x109f01bd0>,
 '10.2307/4330999': <tethne.classes.paper.Paper at 0x10a157f90>,
 '10.2307/4330998': <tethne.classes.paper.Paper at 0x10a106210>,
 '10.2307/4330997': <tethne.classes.paper.Paper at 0x109febf90>,
 '10.2307/4330996': <tethne.classes.paper.Paper at 0x10a561390>,
 '10.2307/4330995': <tethne.classes.paper.Paper at 0x10a253390>,
 '10.2307/4330994': <tethne.classes.paper.Paper at 0x10a29a410>,
 '10.2307/4330993': <tethne.classes.paper.Paper at 0x1098fead0>,
 '10.2307/4330992': <tethne.classes.paper.Paper at 0x1090ee050>,
 '10.2307/4330991': <tethne.classes.paper.Paper at 0x10a12b990>,
 '10.2307/4330990': <tethne.classes.paper.Paper at 0x109206e90>,
 '10.2307/41488448': <tethne.classes.paper.Paper at 0x10992b950>,
 '10.2307/41488445': <tethne.classes.paper.Paper at 0x10a09db90>,
 '10.2307/41488444': <tethne.classes.paper.Paper at 0x109908f90>,
 '10.2307/41488447': <tethne.classes.paper.Paper at 0x10a8b93d0>,
 '10.2307/41488446': <tethne.classes.paper.Paper at 0x1098341d0>,
 '10.2307/41488441': <tethne.classes.paper.Paper at 0x109128fd0>,
 '10.2307/41488440': <tethne.classes.paper.Paper at 0x109543a50>,
 '10.2307/41488443': <tethne.classes.paper.Paper at 0x10992bb90>,
 '10.2307/41488442': <tethne.classes.paper.Paper at 0x1098e6a10>,
 '10.2307/4331149': <tethne.classes.paper.Paper at 0x1099f3850>,
 '10.2307/4331148': <tethne.classes.paper.Paper at 0x108f86bd0>,
 '10.2307/4330498': <tethne.classes.paper.Paper at 0x10a087050>,
 '10.2307/40984889': <tethne.classes.paper.Paper at 0x1097e3210>,
 '10.2307/40984888': <tethne.classes.paper.Paper at 0x1098b7610>,
 '10.2307/40984887': <tethne.classes.paper.Paper at 0x1098e6290>,
 '10.2307/40984886': <tethne.classes.paper.Paper at 0x10910fd10>,
 '10.2307/40984885': <tethne.classes.paper.Paper at 0x10a54b650>,
 '10.2307/4331140': <tethne.classes.paper.Paper at 0x109badfd0>,
 '10.2307/40984883': <tethne.classes.paper.Paper at 0x10a355c50>,
 '10.2307/40984882': <tethne.classes.paper.Paper at 0x109dd2810>,
 '10.2307/40984881': <tethne.classes.paper.Paper at 0x109d891d0>,
 '10.2307/40984880': <tethne.classes.paper.Paper at 0x10a83ae90>,
 '10.2307/4331369': <tethne.classes.paper.Paper at 0x109e75bd0>,
 '10.2307/4331368': <tethne.classes.paper.Paper at 0x1094ad190>,
 '10.2307/4331363': <tethne.classes.paper.Paper at 0x10a635f10>,
 '10.2307/4331362': <tethne.classes.paper.Paper at 0x10a20e2d0>,
 '10.2307/4331361': <tethne.classes.paper.Paper at 0x109bb8f50>,
 '10.2307/4331360': <tethne.classes.paper.Paper at 0x108fed450>,
 '10.2307/4331367': <tethne.classes.paper.Paper at 0x10a6b5a50>,
 '10.2307/4331366': <tethne.classes.paper.Paper at 0x10a51d510>,
 '10.2307/4331365': <tethne.classes.paper.Paper at 0x109d5bed0>,
 '10.2307/4331364': <tethne.classes.paper.Paper at 0x109cd1310>,
 '10.2307/4331961': <tethne.classes.paper.Paper at 0x1090f8e50>,
 '10.2307/4331960': <tethne.classes.paper.Paper at 0x10a36bf10>,
 '10.2307/4331963': <tethne.classes.paper.Paper at 0x109cf3bd0>,
 '10.2307/4331962': <tethne.classes.paper.Paper at 0x109e0c790>,
 '10.2307/4331965': <tethne.classes.paper.Paper at 0x10a4caed0>,
 '10.2307/4331964': <tethne.classes.paper.Paper at 0x10a586650>,
 '10.2307/4331967': <tethne.classes.paper.Paper at 0x1092f8110>,
 '10.2307/4331966': <tethne.classes.paper.Paper at 0x10a12b190>,
 '10.2307/4331969': <tethne.classes.paper.Paper at 0x109951210>,
 '10.2307/4331968': <tethne.classes.paper.Paper at 0x109c74d50>,
 '10.2307/4330568': <tethne.classes.paper.Paper at 0x108fa8790>,
 '10.2307/4330569': <tethne.classes.paper.Paper at 0x109f31190>,
 '10.2307/4330566': <tethne.classes.paper.Paper at 0x10a3bda90>,
 '10.2307/4330567': <tethne.classes.paper.Paper at 0x109179290>,
 '10.2307/4330564': <tethne.classes.paper.Paper at 0x1092d5250>,
 '10.2307/4330565': <tethne.classes.paper.Paper at 0x10a629e10>,
 '10.2307/4330562': <tethne.classes.paper.Paper at 0x1094dc650>,
 '10.2307/4330563': <tethne.classes.paper.Paper at 0x109ef5990>,
 '10.2307/4330560': <tethne.classes.paper.Paper at 0x10a897d50>,
 '10.2307/4330561': <tethne.classes.paper.Paper at 0x10a033910>,
 '10.2307/4331565': <tethne.classes.paper.Paper at 0x108f9ddd0>,
 '10.2307/4331564': <tethne.classes.paper.Paper at 0x109bf5f90>,
 '10.2307/4331567': <tethne.classes.paper.Paper at 0x109c2d290>,
 '10.2307/4331566': <tethne.classes.paper.Paper at 0x109ce8e50>,
 '10.2307/4331561': <tethne.classes.paper.Paper at 0x10a8dcf50>,
 '10.2307/4331560': <tethne.classes.paper.Paper at 0x10a3d5950>,
 '10.2307/4331563': <tethne.classes.paper.Paper at 0x109e244d0>,
 '10.2307/4331562': <tethne.classes.paper.Paper at 0x10a33e7d0>,
 '10.2307/4331569': <tethne.classes.paper.Paper at 0x109e24150>,
 '10.2307/4331568': <tethne.classes.paper.Paper at 0x109f478d0>,
 '10.2307/4331767': <tethne.classes.paper.Paper at 0x109e3ad10>,
 '10.2307/4331814': <tethne.classes.paper.Paper at 0x109543a90>,
 '10.2307/4331765': <tethne.classes.paper.Paper at 0x10a1c9490>,
 '10.2307/4331764': <tethne.classes.paper.Paper at 0x10911af10>,
 '10.2307/4331763': <tethne.classes.paper.Paper at 0x109e18f10>,
 '10.2307/4331762': <tethne.classes.paper.Paper at 0x109fbed50>,
 '10.2307/4331761': <tethne.classes.paper.Paper at 0x10a6d9ed0>,
 '10.2307/4331812': <tethne.classes.paper.Paper at 0x109dea510>,
 '10.2307/4331819': <tethne.classes.paper.Paper at 0x10a686e90>,
 '10.2307/4331818': <tethne.classes.paper.Paper at 0x109da0ad0>,
 '10.2307/4331769': <tethne.classes.paper.Paper at 0x109f82590>,
 '10.2307/4331768': <tethne.classes.paper.Paper at 0x10a5e3d10>,
 '10.2307/4331589': <tethne.classes.paper.Paper at 0x10a187ed0>,
 '10.2307/4331588': <tethne.classes.paper.Paper at 0x10a742ad0>,
 '10.2307/4331587': <tethne.classes.paper.Paper at 0x1094d1090>,
 '10.2307/4331586': <tethne.classes.paper.Paper at 0x1099baf10>,
 '10.2307/4331585': <tethne.classes.paper.Paper at 0x1097f9250>,
 '10.2307/4331584': <tethne.classes.paper.Paper at 0x1090eead0>,
 '10.2307/4331583': <tethne.classes.paper.Paper at 0x109dc8a10>,
 '10.2307/4331582': <tethne.classes.paper.Paper at 0x109f9ad90>,
 '10.2307/4331581': <tethne.classes.paper.Paper at 0x10a8f2e10>,
 '10.2307/4331580': <tethne.classes.paper.Paper at 0x1098041d0>,
 '10.2307/4330698': <tethne.classes.paper.Paper at 0x109938d50>,
 '10.2307/4330699': <tethne.classes.paper.Paper at 0x10a1ebf10>,
 '10.2307/4330690': <tethne.classes.paper.Paper at 0x109185b50>,
 '10.2307/4330691': <tethne.classes.paper.Paper at 0x109f3ca90>,
 '10.2307/4330692': <tethne.classes.paper.Paper at 0x10a85c950>,
 '10.2307/4331520': <tethne.classes.paper.Paper at 0x10a055f50>,
 '10.2307/4330694': <tethne.classes.paper.Paper at 0x10a2ca850>,
 '10.2307/4330695': <tethne.classes.paper.Paper at 0x109c39c10>,
 '10.2307/4330696': <tethne.classes.paper.Paper at 0x10a9a3c50>,
 '10.2307/4330697': <tethne.classes.paper.Paper at 0x109161fd0>,
 '10.2307/4331103': <tethne.classes.paper.Paper at 0x10a5ef990>,
 '10.2307/4331102': <tethne.classes.paper.Paper at 0x109e2fd90>,
 '10.2307/4331101': <tethne.classes.paper.Paper at 0x10a327dd0>,
 '10.2307/4331100': <tethne.classes.paper.Paper at 0x109bf5a10>,
 '10.2307/4331107': <tethne.classes.paper.Paper at 0x10a087f10>,
 '10.2307/4331106': <tethne.classes.paper.Paper at 0x109908c50>,
 '10.2307/4331105': <tethne.classes.paper.Paper at 0x10914b090>,
 '10.2307/4331104': <tethne.classes.paper.Paper at 0x10a14b490>,
 '10.2307/4331523': <tethne.classes.paper.Paper at 0x109dde690>,
 '10.2307/4331109': <tethne.classes.paper.Paper at 0x109474250>,
 '10.2307/4331108': <tethne.classes.paper.Paper at 0x10a909690>,
 '10.2307/4331522': <tethne.classes.paper.Paper at 0x1094b9390>,
 '10.2307/4330962': <tethne.classes.paper.Paper at 0x109c8b090>,
 '10.2307/4330963': <tethne.classes.paper.Paper at 0x10a41ae90>,
 '10.2307/4330744': <tethne.classes.paper.Paper at 0x10a282750>,
 '10.2307/4330961': <tethne.classes.paper.Paper at 0x10a2e1510>,
 '10.2307/4330742': <tethne.classes.paper.Paper at 0x109ebb610>,
 '10.2307/4330967': <tethne.classes.paper.Paper at 0x10a9bc390>,
 '10.2307/4330740': <tethne.classes.paper.Paper at 0x10a1f6e50>,
 '10.2307/4331618': <tethne.classes.paper.Paper at 0x109d6b710>,
 '10.2307/4331617': <tethne.classes.paper.Paper at 0x10a61d790>,
 '10.2307/4331616': <tethne.classes.paper.Paper at 0x10a26b7d0>,
 '10.2307/4331615': <tethne.classes.paper.Paper at 0x10a113b50>,
 '10.2307/4331614': <tethne.classes.paper.Paper at 0x109d23ed0>,
 '10.2307/4331613': <tethne.classes.paper.Paper at 0x109edd110>,
 '10.2307/4331612': <tethne.classes.paper.Paper at 0x10a794610>,
 '10.2307/4331611': <tethne.classes.paper.Paper at 0x10a04af50>,
 '10.2307/4331610': <tethne.classes.paper.Paper at 0x109ed1c90>,
 '10.2307/4330988': <tethne.classes.paper.Paper at 0x109f5ec50>,
 '10.2307/4330989': <tethne.classes.paper.Paper at 0x10a5fc810>,
 '10.2307/4330984': <tethne.classes.paper.Paper at 0x10a192f50>,
 '10.2307/4330985': <tethne.classes.paper.Paper at 0x10a8e7c50>,
 '10.2307/4330986': <tethne.classes.paper.Paper at 0x109cbbfd0>,
 '10.2307/4330987': <tethne.classes.paper.Paper at 0x10a2f8910>,
 '10.2307/4330980': <tethne.classes.paper.Paper at 0x109dead90>,
 '10.2307/4330981': <tethne.classes.paper.Paper at 0x10a31a510>,
 '10.2307/4330982': <tethne.classes.paper.Paper at 0x1099dcfd0>,
 '10.2307/4330983': <tethne.classes.paper.Paper at 0x10a8a1750>,
 '10.2307/4330885': <tethne.classes.paper.Paper at 0x10980f0d0>,
 '10.2307/4330884': <tethne.classes.paper.Paper at 0x10a528fd0>,
 '10.2307/4331848': <tethne.classes.paper.Paper at 0x109e3ac10>,
 '10.2307/4330889': <tethne.classes.paper.Paper at 0x1092e1150>,
 '10.2307/4330664': <tethne.classes.paper.Paper at 0x109229ed0>,
 '10.2307/29737538': <tethne.classes.paper.Paper at 0x10a2a6f90>,
 '10.2307/29737539': <tethne.classes.paper.Paper at 0x109e5ce90>,
 '10.2307/29737530': <tethne.classes.paper.Paper at 0x109966e50>,
 '10.2307/29737531': <tethne.classes.paper.Paper at 0x10921ce90>,
 '10.2307/29737532': <tethne.classes.paper.Paper at 0x109bc4e90>,
 '10.2307/29737533': <tethne.classes.paper.Paper at 0x109104790>,
 '10.2307/29737534': <tethne.classes.paper.Paper at 0x109914410>,
 '10.2307/29737535': <tethne.classes.paper.Paper at 0x10a477d50>,
 '10.2307/29737536': <tethne.classes.paper.Paper at 0x1092d52d0>,
 '10.2307/29737537': <tethne.classes.paper.Paper at 0x10a3e1c90>,
 '10.2307/4331802': <tethne.classes.paper.Paper at 0x10a5b4690>,
 '10.2307/4331775': <tethne.classes.paper.Paper at 0x109860050>,
 '10.2307/4331776': <tethne.classes.paper.Paper at 0x109914a90>,
 '10.2307/4331777': <tethne.classes.paper.Paper at 0x109032a10>,
 '10.2307/4331806': <tethne.classes.paper.Paper at 0x10a579bd0>,
 '10.2307/4331807': <tethne.classes.paper.Paper at 0x10a432b50>,
 '10.2307/4331804': <tethne.classes.paper.Paper at 0x1099f3e10>,
 '10.2307/4331773': <tethne.classes.paper.Paper at 0x10a50f6d0>,
 '10.2307/4330776': <tethne.classes.paper.Paper at 0x10983e4d0>,
 '10.2307/4331386': <tethne.classes.paper.Paper at 0x109537f90>,
 '10.2307/4331378': <tethne.classes.paper.Paper at 0x1091cae90>,
 '10.2307/4331379': <tethne.classes.paper.Paper at 0x10a59e610>,
 '10.2307/4331370': <tethne.classes.paper.Paper at 0x1099a3410>,
 '10.2307/4331371': <tethne.classes.paper.Paper at 0x109ea48d0>,
 '10.2307/4331372': <tethne.classes.paper.Paper at 0x109fbe1d0>,
 '10.2307/4331373': <tethne.classes.paper.Paper at 0x109c00b50>,
 '10.2307/4331374': <tethne.classes.paper.Paper at 0x109133a50>,
 '10.2307/4331375': <tethne.classes.paper.Paper at 0x109ee9dd0>,
 '10.2307/4331376': <tethne.classes.paper.Paper at 0x1094dc250>,
 '10.2307/4331377': <tethne.classes.paper.Paper at 0x10903fd10>,
 '10.2307/4330519': <tethne.classes.paper.Paper at 0x109e97090>,
 '10.2307/4330518': <tethne.classes.paper.Paper at 0x108f25590>,
 '10.2307/4330513': <tethne.classes.paper.Paper at 0x1091ed1d0>,
 '10.2307/4330512': <tethne.classes.paper.Paper at 0x10a709f90>,
 '10.2307/4330511': <tethne.classes.paper.Paper at 0x109b51f50>,
 '10.2307/4330510': <tethne.classes.paper.Paper at 0x10a1570d0>,
 '10.2307/4330517': <tethne.classes.paper.Paper at 0x10a88bed0>,
 '10.2307/4330516': <tethne.classes.paper.Paper at 0x1097e3290>,
 '10.2307/4330515': <tethne.classes.paper.Paper at 0x10a561350>,
 '10.2307/4330514': <tethne.classes.paper.Paper at 0x10a410cd0>,
 '10.2307/4331572': <tethne.classes.paper.Paper at 0x109bb8fd0>,
 '10.2307/4331573': <tethne.classes.paper.Paper at 0x10a51dc90>,
 '10.2307/4331570': <tethne.classes.paper.Paper at 0x10a349290>,
 '10.2307/4331571': <tethne.classes.paper.Paper at 0x109c6ad90>,
 '10.2307/4331576': <tethne.classes.paper.Paper at 0x10a1d4610>,
 '10.2307/4331577': <tethne.classes.paper.Paper at 0x109879050>,
 '10.2307/4331574': <tethne.classes.paper.Paper at 0x10a3a6f90>,
 '10.2307/4331575': <tethne.classes.paper.Paper at 0x109e3a4d0>,
 '10.2307/4331578': <tethne.classes.paper.Paper at 0x109ddedd0>,
 '10.2307/4331579': <tethne.classes.paper.Paper at 0x10a03f6d0>,
 '10.2307/4331774': <tethne.classes.paper.Paper at 0x10a5efd10>,
 '10.2307/4331803': <tethne.classes.paper.Paper at 0x109f236d0>,
 '10.2307/4331800': <tethne.classes.paper.Paper at 0x109a17350>,
 '10.2307/4331801': <tethne.classes.paper.Paper at 0x10a304e50>,
 '10.2307/4331770': <tethne.classes.paper.Paper at 0x10a005ed0>,
 '10.2307/4331771': <tethne.classes.paper.Paper at 0x109e51c50>,
 '10.2307/4331772': <tethne.classes.paper.Paper at 0x109d00a90>,
 '10.2307/4331805': <tethne.classes.paper.Paper at 0x10a23da10>,
 '10.2307/4331808': <tethne.classes.paper.Paper at 0x10a304ad0>,
 '10.2307/4331809': <tethne.classes.paper.Paper at 0x10a1bd650>,
 '10.2307/4331778': <tethne.classes.paper.Paper at 0x10a432fd0>,
 '10.2307/4331779': <tethne.classes.paper.Paper at 0x1092e18d0>,
 '10.2307/4331598': <tethne.classes.paper.Paper at 0x10ae1e6d0>,
 '10.2307/4331599': <tethne.classes.paper.Paper at 0x109df5b10>,
 '10.2307/4331594': <tethne.classes.paper.Paper at 0x109e51910>,
 '10.2307/4331595': <tethne.classes.paper.Paper at 0x109c44f90>,
 '10.2307/4331596': <tethne.classes.paper.Paper at 0x109ee9a50>,
 '10.2307/4331597': <tethne.classes.paper.Paper at 0x109dbd0d0>,
 '10.2307/4331590': <tethne.classes.paper.Paper at 0x109d39250>,
 '10.2307/4331591': <tethne.classes.paper.Paper at 0x10a4bfd90>,
 '10.2307/4331592': <tethne.classes.paper.Paper at 0x109c51250>,
 '10.2307/4331593': <tethne.classes.paper.Paper at 0x1098f2cd0>,
 '10.2307/4331110': <tethne.classes.paper.Paper at 0x10a2b2b50>,
 '10.2307/4331111': <tethne.classes.paper.Paper at 0x10a709b90>,
 '10.2307/4331112': <tethne.classes.paper.Paper at 0x10a736b10>,
 '10.2307/4331113': <tethne.classes.paper.Paper at 0x109d68510>,
 '10.2307/4331114': <tethne.classes.paper.Paper at 0x1099c6650>,
 '10.2307/4331115': <tethne.classes.paper.Paper at 0x109ce8290>,
 '10.2307/4331978': <tethne.classes.paper.Paper at 0x10a226290>,
 '10.2307/4331117': <tethne.classes.paper.Paper at 0x10a4b42d0>,
 '10.2307/4331118': <tethne.classes.paper.Paper at 0x10a17a950>,
 '10.2307/4331119': <tethne.classes.paper.Paper at 0x10a0c2850>,
 '10.2307/4331974': <tethne.classes.paper.Paper at 0x109d50e50>,
 '10.2307/4331975': <tethne.classes.paper.Paper at 0x10a691ad0>,
 '10.2307/4331972': <tethne.classes.paper.Paper at 0x10a30fb90>,
 '10.2307/4331973': <tethne.classes.paper.Paper at 0x109827450>,
 '10.2307/4331970': <tethne.classes.paper.Paper at 0x10981c210>,
 '10.2307/4331971': <tethne.classes.paper.Paper at 0x10a6f0ed0>,
 '10.2307/4331059': <tethne.classes.paper.Paper at 0x1099e8e50>,
 '10.2307/4331058': <tethne.classes.paper.Paper at 0x10a113b90>,
 '10.2307/4330582': <tethne.classes.paper.Paper at 0x109185b90>,
 '10.2307/4330733': <tethne.classes.paper.Paper at 0x109d45e50>,
 '10.2307/4330732': <tethne.classes.paper.Paper at 0x10a33ecd0>,
 '10.2307/4330731': <tethne.classes.paper.Paper at 0x109d506d0>,
 '10.2307/4331504': <tethne.classes.paper.Paper at 0x10a6ce5d0>,
 '10.2307/4331608': <tethne.classes.paper.Paper at 0x10a29ab10>,
 '10.2307/4330736': <tethne.classes.paper.Paper at 0x10a0c20d0>,
 '10.2307/4330735': <tethne.classes.paper.Paper at 0x10a231490>,
 '10.2307/4330734': <tethne.classes.paper.Paper at 0x1098c2810>,
 '10.2307/4331604': <tethne.classes.paper.Paper at 0x109a80dd0>,
 '10.2307/4331605': <tethne.classes.paper.Paper at 0x10a4faa90>,
 '10.2307/4331606': <tethne.classes.paper.Paper at 0x1091b3fd0>,
 '10.2307/4330738': <tethne.classes.paper.Paper at 0x109fa5c90>,
 '10.2307/4331600': <tethne.classes.paper.Paper at 0x1091edd10>,
 '10.2307/4331601': <tethne.classes.paper.Paper at 0x1092114d0>,
 '10.2307/4331602': <tethne.classes.paper.Paper at 0x109d93e10>,
 '10.2307/4331603': <tethne.classes.paper.Paper at 0x10a19e290>,
 '10.2307/4331517': <tethne.classes.paper.Paper at 0x109b7e6d0>,
 '10.2307/4330587': <tethne.classes.paper.Paper at 0x10a36b250>,
 '10.2307/4331976': <tethne.classes.paper.Paper at 0x10a187f90>,
 '10.2307/4331977': <tethne.classes.paper.Paper at 0x10a26b450>,
 '10.2307/4331053': <tethne.classes.paper.Paper at 0x10a8fdcd0>,
 '10.2307/40271535': <tethne.classes.paper.Paper at 0x10a7db350>,
 '10.2307/40271532': <tethne.classes.paper.Paper at 0x10a85c1d0>,
 '10.2307/40271533': <tethne.classes.paper.Paper at 0x10a909c50>,
 '10.2307/4331057': <tethne.classes.paper.Paper at 0x109938cd0>,
 '10.2307/4330649': <tethne.classes.paper.Paper at 0x109128b90>,
 '10.2307/4330648': <tethne.classes.paper.Paper at 0x10a8fdf90>,
 '10.2307/4330647': <tethne.classes.paper.Paper at 0x109d39f90>,
 '10.2307/4330646': <tethne.classes.paper.Paper at 0x109eafed0>,
 '10.2307/4330645': <tethne.classes.paper.Paper at 0x109dd29d0>,
 '10.2307/4331056': <tethne.classes.paper.Paper at 0x10a349d50>,
 '10.2307/4330643': <tethne.classes.paper.Paper at 0x10a253950>,
 '10.2307/4330642': <tethne.classes.paper.Paper at 0x10a6634d0>,
 '10.2307/4330641': <tethne.classes.paper.Paper at 0x10a4b4e90>,
 '10.2307/4330640': <tethne.classes.paper.Paper at 0x10980f450>,
 '10.2307/4330965': <tethne.classes.paper.Paper at 0x109fd59d0>,
 '10.2307/4331512': <tethne.classes.paper.Paper at 0x1092ec390>,
 '10.2307/29737529': <tethne.classes.paper.Paper at 0x10a2789d0>,
 '10.2307/29737523': <tethne.classes.paper.Paper at 0x10a7e8390>,
 '10.2307/29737522': <tethne.classes.paper.Paper at 0x10a41abd0>,
 '10.2307/29737521': <tethne.classes.paper.Paper at 0x10a7c2110>,
 '10.2307/29737520': <tethne.classes.paper.Paper at 0x10a36bed0>,
 '10.2307/29737527': <tethne.classes.paper.Paper at 0x1091fac10>,
 '10.2307/29737526': <tethne.classes.paper.Paper at 0x109974750>,
 '10.2307/29737525': <tethne.classes.paper.Paper at 0x10a2ca4d0>,
 '10.2307/29737524': <tethne.classes.paper.Paper at 0x109f77e10>,
 '10.2307/40271569': <tethne.classes.paper.Paper at 0x109206ad0>,
 '10.2307/4331345': <tethne.classes.paper.Paper at 0x10a226a50>,
 '10.2307/4331344': <tethne.classes.paper.Paper at 0x10a533f10>,
 '10.2307/4331347': <tethne.classes.paper.Paper at 0x1094a23d0>,
 '10.2307/4331346': <tethne.classes.paper.Paper at 0x108fed3d0>,
 '10.2307/4331341': <tethne.classes.paper.Paper at 0x10a46bb50>,
 '10.2307/4331340': <tethne.classes.paper.Paper at 0x109c44fd0>,
 '10.2307/4331343': <tethne.classes.paper.Paper at 0x10a260950>,
 '10.2307/4331342': <tethne.classes.paper.Paper at 0x10a83aad0>,
 '10.2307/4331349': <tethne.classes.paper.Paper at 0x109e47fd0>,
 '10.2307/4331348': <tethne.classes.paper.Paper at 0x109a50cd0>,
 '10.2307/4330730': <tethne.classes.paper.Paper at 0x10a3764d0>,
 '10.2307/4331421': <tethne.classes.paper.Paper at 0x1091fa450>,
 '10.2307/4330737': <tethne.classes.paper.Paper at 0x109d74110>,
 '10.2307/4331609': <tethne.classes.paper.Paper at 0x10a629a50>,
 '10.2307/4331705': <tethne.classes.paper.Paper at 0x1092b10d0>,
 '10.2307/4331256': <tethne.classes.paper.Paper at 0x10a2eca90>,
 '10.2307/4331707': <tethne.classes.paper.Paper at 0x10a03f390>,
 '10.2307/4330508': <tethne.classes.paper.Paper at 0x108fd5450>,
 '10.2307/4330509': <tethne.classes.paper.Paper at 0x10997ffd0>,
 '10.2307/4331706': <tethne.classes.paper.Paper at 0x10a709ed0>,
 '10.2307/4330500': <tethne.classes.paper.Paper at 0x109cdc190>,
 '10.2307/4330501': <tethne.classes.paper.Paper at 0x109a2da10>,
 '10.2307/4330502': <tethne.classes.paper.Paper at 0x108f91ad0>,
 '10.2307/4330503': <tethne.classes.paper.Paper at 0x108fb4210>,
 '10.2307/4330504': <tethne.classes.paper.Paper at 0x109b20d90>,
 '10.2307/4330505': <tethne.classes.paper.Paper at 0x10a136c50>,
 '10.2307/4330506': <tethne.classes.paper.Paper at 0x109c96a50>,
 '10.2307/4331252': <tethne.classes.paper.Paper at 0x109944b90>,
 '10.2307/4331607': <tethne.classes.paper.Paper at 0x10983e510>,
 '10.2307/4331251': <tethne.classes.paper.Paper at 0x109c39f90>,
 '10.2307/4331250': <tethne.classes.paper.Paper at 0x1094d17d0>,
 '10.2307/4331293': <tethne.classes.paper.Paper at 0x109a96d10>,
 '10.2307/4331292': <tethne.classes.paper.Paper at 0x10a01dad0>,
 '10.2307/4331291': <tethne.classes.paper.Paper at 0x10a7ff910>,
 '10.2307/4331742': <tethne.classes.paper.Paper at 0x10a9aff90>,
 '10.2307/4331297': <tethne.classes.paper.Paper at 0x10a192f90>,
 '10.2307/4331744': <tethne.classes.paper.Paper at 0x10a5cb990>,
 '10.2307/4331295': <tethne.classes.paper.Paper at 0x109e5c750>,
 '10.2307/4331294': <tethne.classes.paper.Paper at 0x10a74f1d0>,
 '10.2307/4331749': <tethne.classes.paper.Paper at 0x109161890>,
 '10.2307/4331748': <tethne.classes.paper.Paper at 0x10a01db10>,
 '10.2307/4331299': <tethne.classes.paper.Paper at 0x109004d50>,
 '10.2307/4331298': <tethne.classes.paper.Paper at 0x10a686fd0>,
 '10.2307/40271488': <tethne.classes.paper.Paper at 0x10a30fc50>,
 '10.2307/40271489': <tethne.classes.paper.Paper at 0x10a663a90>,
 '10.2307/40271486': <tethne.classes.paper.Paper at 0x109ff8590>,
 '10.2307/40271487': <tethne.classes.paper.Paper at 0x10a66ef90>,
 '10.2307/40271484': <tethne.classes.paper.Paper at 0x109133790>,
 '10.2307/40271485': <tethne.classes.paper.Paper at 0x109c96dd0>,
 '10.2307/4331129': <tethne.classes.paper.Paper at 0x109cdc890>,
 '10.2307/4331128': <tethne.classes.paper.Paper at 0x10a17ad90>,
 '10.2307/4331125': <tethne.classes.paper.Paper at 0x10a31aed0>,
 '10.2307/4331124': <tethne.classes.paper.Paper at 0x10a6d97d0>,
 '10.2307/4331127': <tethne.classes.paper.Paper at 0x10a8c4fd0>,
 '10.2307/4331126': <tethne.classes.paper.Paper at 0x1092bc290>,
 '10.2307/4331121': <tethne.classes.paper.Paper at 0x108fbfad0>,
 '10.2307/4331120': <tethne.classes.paper.Paper at 0x10a2b20d0>,
 '10.2307/4331123': <tethne.classes.paper.Paper at 0x10a231bd0>,
 '10.2307/4331122': <tethne.classes.paper.Paper at 0x109f31d90>,
 '10.2307/4331909': <tethne.classes.paper.Paper at 0x10a88b350>,
 '10.2307/4331908': <tethne.classes.paper.Paper at 0x109951a90>,
 '10.2307/4331903': <tethne.classes.paper.Paper at 0x109dbd810>,
 '10.2307/4331902': <tethne.classes.paper.Paper at 0x109ae6e90>,
 '10.2307/4331901': <tethne.classes.paper.Paper at 0x109e24e50>,
 '10.2307/4331900': <tethne.classes.paper.Paper at 0x10a06f0d0>,
 '10.2307/4331907': <tethne.classes.paper.Paper at 0x109b89cd0>,
 '10.2307/4331906': <tethne.classes.paper.Paper at 0x10a332910>,
 '10.2307/4331905': <tethne.classes.paper.Paper at 0x10a49da10>,
 '10.2307/4331904': <tethne.classes.paper.Paper at 0x10a304310>,
 '10.2307/4330581': <tethne.classes.paper.Paper at 0x10910f210>,
 '10.2307/4331639': <tethne.classes.paper.Paper at 0x10a4049d0>,
 '10.2307/4330721': <tethne.classes.paper.Paper at 0x10a157b90>,
 '10.2307/4330722': <tethne.classes.paper.Paper at 0x1094ad0d0>,
 '10.2307/4330723': <tethne.classes.paper.Paper at 0x10a0ef990>,
 '10.2307/4330724': <tethne.classes.paper.Paper at 0x10a0a9f10>,
 '10.2307/4330725': <tethne.classes.paper.Paper at 0x109a45a90>,
 '10.2307/4330726': <tethne.classes.paper.Paper at 0x10a612ed0>,
 '10.2307/4330727': <tethne.classes.paper.Paper at 0x109e8b150>,
 '10.2307/4330728': <tethne.classes.paper.Paper at 0x10a921ed0>,
 '10.2307/4331630': <tethne.classes.paper.Paper at 0x10a7ff410>,
 '10.2307/4331633': <tethne.classes.paper.Paper at 0x10a383890>,
 '10.2307/4331632': <tethne.classes.paper.Paper at 0x10a5aac10>,
 '10.2307/4331635': <tethne.classes.paper.Paper at 0x10a852b10>,
 '10.2307/4331634': <tethne.classes.paper.Paper at 0x10a80b090>,
 '10.2307/4331637': <tethne.classes.paper.Paper at 0x108fed750>,
 '10.2307/4331636': <tethne.classes.paper.Paper at 0x10919c0d0>,
 '10.2307/4331486': <tethne.classes.paper.Paper at 0x1090d5d90>,
 '10.2307/4331487': <tethne.classes.paper.Paper at 0x109a68ed0>,
 '10.2307/4331956': <tethne.classes.paper.Paper at 0x109229a90>,
 '10.2307/4331957': <tethne.classes.paper.Paper at 0x109233590>,
 '10.2307/4331950': <tethne.classes.paper.Paper at 0x10a77d590>,
 '10.2307/40271568': <tethne.classes.paper.Paper at 0x109b7ead0>,
 '10.2307/4331480': <tethne.classes.paper.Paper at 0x1099ae250>,
 '10.2307/4331481': <tethne.classes.paper.Paper at 0x109161490>,
 '10.2307/4330658': <tethne.classes.paper.Paper at 0x10a46b450>,
 '10.2307/4330659': <tethne.classes.paper.Paper at 0x109e2f390>,
 '10.2307/4330654': <tethne.classes.paper.Paper at 0x10923fad0>,
 '10.2307/4330655': <tethne.classes.paper.Paper at 0x10a612ad0>,
 '10.2307/4330656': <tethne.classes.paper.Paper at 0x109a3a550>,
 '10.2307/4330657': <tethne.classes.paper.Paper at 0x109da9fd0>,
 '10.2307/4330650': <tethne.classes.paper.Paper at 0x10a6c17d0>,
 '10.2307/4330651': <tethne.classes.paper.Paper at 0x1099c6d50>,
 '10.2307/4330652': <tethne.classes.paper.Paper at 0x109b51390>,
 '10.2307/4330653': <tethne.classes.paper.Paper at 0x109a17ad0>,
 '10.2307/40271561': <tethne.classes.paper.Paper at 0x109dc8e50>,
 '10.2307/4331959': <tethne.classes.paper.Paper at 0x10a612f50>,
 '10.2307/40271563': <tethne.classes.paper.Paper at 0x1091bfdd0>,
 '10.2307/4331489': <tethne.classes.paper.Paper at 0x108f25910>,
 '10.2307/29737518': <tethne.classes.paper.Paper at 0x10a3f8c10>,
 '10.2307/29737519': <tethne.classes.paper.Paper at 0x1097ee090>,
 '10.2307/29737516': <tethne.classes.paper.Paper at 0x10a43d990>,
 '10.2307/29737517': <tethne.classes.paper.Paper at 0x1091b3f10>,
 '10.2307/29737514': <tethne.classes.paper.Paper at 0x10a005750>,
 '10.2307/29737515': <tethne.classes.paper.Paper at 0x10a72aa50>,
 '10.2307/29737513': <tethne.classes.paper.Paper at 0x10a11e310>,
 '10.2307/29737510': <tethne.classes.paper.Paper at 0x10a0ef1d0>,
 '10.2307/29737511': <tethne.classes.paper.Paper at 0x109b2d150>,
 '10.2307/4331500': <tethne.classes.paper.Paper at 0x10a69d650>,
 '10.2307/4330571': <tethne.classes.paper.Paper at 0x1092f8590>,
 '10.2307/4330570': <tethne.classes.paper.Paper at 0x10a56ec50>,
 '10.2307/4331008': <tethne.classes.paper.Paper at 0x10a7c26d0>,
 '10.2307/4330572': <tethne.classes.paper.Paper at 0x1091b3490>,
 '10.2307/4330644': <tethne.classes.paper.Paper at 0x10a663bd0>,
 '10.2307/4331550': <tethne.classes.paper.Paper at 0x10923fdd0>,
 '10.2307/4331551': <tethne.classes.paper.Paper at 0x10a2bfad0>,
 '10.2307/4331552': <tethne.classes.paper.Paper at 0x109cf3fd0>,
 '10.2307/4331553': <tethne.classes.paper.Paper at 0x10a03f710>,
 '10.2307/4331006': <tethne.classes.paper.Paper at 0x109fe0f10>,
 '10.2307/4331437': <tethne.classes.paper.Paper at 0x1099bab50>,
 '10.2307/4331556': <tethne.classes.paper.Paper at 0x10a0e4dd0>,
 '10.2307/4331005': <tethne.classes.paper.Paper at 0x1098b7990>,
 '10.2307/4331352': <tethne.classes.paper.Paper at 0x109891450>,
 '10.2307/4331353': <tethne.classes.paper.Paper at 0x109adcd90>,
 '10.2307/4331350': <tethne.classes.paper.Paper at 0x109caf790>,
 '10.2307/4331351': <tethne.classes.paper.Paper at 0x1098dbbd0>,
 '10.2307/4331356': <tethne.classes.paper.Paper at 0x10a3edd90>,
 '10.2307/4331357': <tethne.classes.paper.Paper at 0x109afdd90>,
 '10.2307/4331354': <tethne.classes.paper.Paper at 0x10901cad0>,
 '10.2307/4331821': <tethne.classes.paper.Paper at 0x109e69cd0>,
 '10.2307/4331358': <tethne.classes.paper.Paper at 0x10a5b4f10>,
 '10.2307/4331359': <tethne.classes.paper.Paper at 0x10a332210>,
 '10.2307/4331822': <tethne.classes.paper.Paper at 0x10a04ac90>,
 '10.2307/4331791': <tethne.classes.paper.Paper at 0x109c22650>,
 '10.2307/4331796': <tethne.classes.paper.Paper at 0x1098db3d0>,
 '10.2307/4331797': <tethne.classes.paper.Paper at 0x1099dced0>,
 '10.2307/4331794': <tethne.classes.paper.Paper at 0x109dbdb90>,
 '10.2307/4331827': <tethne.classes.paper.Paper at 0x1091bf9d0>,
 '10.2307/4330535': <tethne.classes.paper.Paper at 0x10a278290>,
 '10.2307/4330534': <tethne.classes.paper.Paper at 0x100734e90>,
 '10.2307/4330537': <tethne.classes.paper.Paper at 0x109a3afd0>,
 '10.2307/4330536': <tethne.classes.paper.Paper at 0x1099ffb10>,
 '10.2307/4330531': <tethne.classes.paper.Paper at 0x10a80ba10>,
 '10.2307/4330530': <tethne.classes.paper.Paper at 0x10a5d7290>,
 '10.2307/4330533': <tethne.classes.paper.Paper at 0x10a2ec6d0>,
 '10.2307/4330532': <tethne.classes.paper.Paper at 0x109e51fd0>,
 '10.2307/4330539': <tethne.classes.paper.Paper at 0x10a432450>,
 '10.2307/4330538': <tethne.classes.paper.Paper at 0x109aa1c90>,
 '10.2307/4331758': <tethne.classes.paper.Paper at 0x10a163610>,
 '10.2307/4331759': <tethne.classes.paper.Paper at 0x108fe2290>,
 '10.2307/4331756': <tethne.classes.paper.Paper at 0x10a5c0ed0>,
 '10.2307/4331757': <tethne.classes.paper.Paper at 0x1094971d0>,
 '10.2307/4331754': <tethne.classes.paper.Paper at 0x109e47a50>,
 '10.2307/4331755': <tethne.classes.paper.Paper at 0x109b731d0>,
 '10.2307/4331752': <tethne.classes.paper.Paper at 0x10a6fc250>,
 '10.2307/4331753': <tethne.classes.paper.Paper at 0x1099c6950>,
 '10.2307/4331750': <tethne.classes.paper.Paper at 0x10a561cd0>,
 '10.2307/4331751': <tethne.classes.paper.Paper at 0x1092bc2d0>,
 '10.2307/4331280': <tethne.classes.paper.Paper at 0x10a6e5d10>,
 '10.2307/4331281': <tethne.classes.paper.Paper at 0x109133fd0>,
 '10.2307/4331282': <tethne.classes.paper.Paper at 0x10a736ed0>,
 '10.2307/4331283': <tethne.classes.paper.Paper at 0x10a0b7210>,
 '10.2307/4331284': <tethne.classes.paper.Paper at 0x109a0bc50>,
 '10.2307/4331285': <tethne.classes.paper.Paper at 0x109879090>,
 '10.2307/4331286': <tethne.classes.paper.Paper at 0x109be7410>,
 '10.2307/4331287': <tethne.classes.paper.Paper at 0x10a88be90>,
 '10.2307/4331288': <tethne.classes.paper.Paper at 0x10a6d9b50>,
 '10.2307/4331289': <tethne.classes.paper.Paper at 0x109ad15d0>,
 '10.2307/40271495': <tethne.classes.paper.Paper at 0x10a064e90>,
 '10.2307/40271494': <tethne.classes.paper.Paper at 0x109860090>,
 '10.2307/29737487': <tethne.classes.paper.Paper at 0x10948b690>,
 '10.2307/40271491': <tethne.classes.paper.Paper at 0x10a72add0>,
 '10.2307/40271490': <tethne.classes.paper.Paper at 0x109c6aa10>,
 '10.2307/40271493': <tethne.classes.paper.Paper at 0x1092f8210>,
 '10.2307/40271492': <tethne.classes.paper.Paper at 0x10a456350>,
 '10.2307/4331138': <tethne.classes.paper.Paper at 0x109827390>,
 '10.2307/4331139': <tethne.classes.paper.Paper at 0x109d00dd0>,
 '10.2307/4331132': <tethne.classes.paper.Paper at 0x10a7ffc50>,
 '10.2307/4331133': <tethne.classes.paper.Paper at 0x109179610>,
 '10.2307/4331130': <tethne.classes.paper.Paper at 0x10983e090>,
 '10.2307/4331131': <tethne.classes.paper.Paper at 0x109e80f10>,
 '10.2307/4331136': <tethne.classes.paper.Paper at 0x10a6b5f90>,
 '10.2307/4331137': <tethne.classes.paper.Paper at 0x1095159d0>,
 '10.2307/4331134': <tethne.classes.paper.Paper at 0x10a1ebb90>,
 '10.2307/4331135': <tethne.classes.paper.Paper at 0x10a629990>,
 '10.2307/4331918': <tethne.classes.paper.Paper at 0x10a483c10>,
 '10.2307/4331919': <tethne.classes.paper.Paper at 0x10a260cd0>,
 '10.2307/4331910': <tethne.classes.paper.Paper at 0x10a4fa690>,
 '10.2307/4331911': <tethne.classes.paper.Paper at 0x1092e1110>,
 '10.2307/4331912': <tethne.classes.paper.Paper at 0x109a5bfd0>,
 '10.2307/4331913': <tethne.classes.paper.Paper at 0x109e8bed0>,
 '10.2307/4331914': <tethne.classes.paper.Paper at 0x10a579c50>,
 '10.2307/4331915': <tethne.classes.paper.Paper at 0x10a8f2310>,
 '10.2307/4331916': <tethne.classes.paper.Paper at 0x1099aeb90>,
 '10.2307/4331917': <tethne.classes.paper.Paper at 0x109ae6710>,
 '10.2307/4330719': <tethne.classes.paper.Paper at 0x10a23df90>,
 '10.2307/4330718': <tethne.classes.paper.Paper at 0x109af2910>,
 '10.2307/4330715': <tethne.classes.paper.Paper at 0x10a505910>,
 '10.2307/4330714': <tethne.classes.paper.Paper at 0x1091fa0d0>,
 '10.2307/4330717': <tethne.classes.paper.Paper at 0x10a82fe50>,
 '10.2307/4330716': <tethne.classes.paper.Paper at 0x108f9d250>,
 '10.2307/4330711': <tethne.classes.paper.Paper at 0x109914ed0>,
 '10.2307/4330710': <tethne.classes.paper.Paper at 0x10a6581d0>,
 '10.2307/4330713': <tethne.classes.paper.Paper at 0x109bdb9d0>,
 '10.2307/4330712': <tethne.classes.paper.Paper at 0x10a868b50>,
 '10.2307/4331626': <tethne.classes.paper.Paper at 0x10a14b850>,
 '10.2307/4331627': <tethne.classes.paper.Paper at 0x1092bc350>,
 '10.2307/4331624': <tethne.classes.paper.Paper at 0x10a01db90>,
 '10.2307/4331625': <tethne.classes.paper.Paper at 0x10a0da8d0>,
 '10.2307/4331622': <tethne.classes.paper.Paper at 0x1094ad110>,
 '10.2307/4331623': <tethne.classes.paper.Paper at 0x10a6aaf90>,
 '10.2307/4331620': <tethne.classes.paper.Paper at 0x10a091c90>,
 '10.2307/4331621': <tethne.classes.paper.Paper at 0x10a461610>,
 '10.2307/4331628': <tethne.classes.paper.Paper at 0x109f3ca10>,
 '10.2307/4331629': <tethne.classes.paper.Paper at 0x10a83a050>,
 '10.2307/4330669': <tethne.classes.paper.Paper at 0x10a7cf450>,
 '10.2307/4330668': <tethne.classes.paper.Paper at 0x10a873ed0>,
 '10.2307/4330887': <tethne.classes.paper.Paper at 0x108fb4bd0>,
 '10.2307/4330886': <tethne.classes.paper.Paper at 0x108f86dd0>,
 '10.2307/4330881': <tethne.classes.paper.Paper at 0x10a4615d0>,
 '10.2307/4330880': <tethne.classes.paper.Paper at 0x108fe2a10>,
 '10.2307/4330883': <tethne.classes.paper.Paper at 0x109fe0e90>,
 '10.2307/4330882': <tethne.classes.paper.Paper at 0x10910fd90>,
 '10.2307/4330661': <tethne.classes.paper.Paper at 0x10986d190>,
 '10.2307/4330660': <tethne.classes.paper.Paper at 0x10a376bd0>,
 '10.2307/4330663': <tethne.classes.paper.Paper at 0x109f82210>,
 '10.2307/4330662': <tethne.classes.paper.Paper at 0x109d16dd0>,
 '10.2307/4330665': <tethne.classes.paper.Paper at 0x109aad610>,
 '10.2307/4330888': <tethne.classes.paper.Paper at 0x109be73d0>,
 '10.2307/4330667': <tethne.classes.paper.Paper at 0x10a709f10>,
 '10.2307/4330666': <tethne.classes.paper.Paper at 0x10a586dd0>,
 '10.2307/4330869': <tethne.classes.paper.Paper at 0x109a50f90>,
 '10.2307/4330868': <tethne.classes.paper.Paper at 0x10a0053d0>,
 '10.2307/4330867': <tethne.classes.paper.Paper at 0x10a449910>,
 '10.2307/4330866': <tethne.classes.paper.Paper at 0x109bcf790>,
 '10.2307/4330865': <tethne.classes.paper.Paper at 0x109474290>,
 '10.2307/4330864': <tethne.classes.paper.Paper at 0x109c7fe50>,
 '10.2307/4330863': <tethne.classes.paper.Paper at 0x10a4108d0>,
 '10.2307/4330862': <tethne.classes.paper.Paper at 0x10a21a7d0>,
 '10.2307/4330861': <tethne.classes.paper.Paper at 0x109ca2590>,
 '10.2307/4330860': <tethne.classes.paper.Paper at 0x1098c2dd0>,
 '10.2307/4331203': <tethne.classes.paper.Paper at 0x10a4e2350>,
 '10.2307/29737501': <tethne.classes.paper.Paper at 0x10a7361d0>,
 '10.2307/29737500': <tethne.classes.paper.Paper at 0x109cc5e90>,
 '10.2307/29737503': <tethne.classes.paper.Paper at 0x10a5aaf10>,
 '10.2307/29737502': <tethne.classes.paper.Paper at 0x10a2f88d0>,
 '10.2307/29737505': <tethne.classes.paper.Paper at 0x109a96cd0>,
 '10.2307/29737504': <tethne.classes.paper.Paper at 0x1091d5590>,
 '10.2307/29737507': <tethne.classes.paper.Paper at 0x10a7889d0>,
 '10.2307/29737506': <tethne.classes.paper.Paper at 0x1094b9050>,
 '10.2307/29737509': <tethne.classes.paper.Paper at 0x109a2ddd0>,
 '10.2307/29737508': <tethne.classes.paper.Paper at 0x109185810>,
 '10.2307/40271514': <tethne.classes.paper.Paper at 0x109cafe90>,
 '10.2307/4331072': <tethne.classes.paper.Paper at 0x109eafc50>,
 '10.2307/4332009': <tethne.classes.paper.Paper at 0x109966750>,
 '10.2307/4332008': <tethne.classes.paper.Paper at 0x109af2d10>,
 '10.2307/4331071': <tethne.classes.paper.Paper at 0x10995bb50>,
 '10.2307/4332003': <tethne.classes.paper.Paper at 0x10a8f2cd0>,
 '10.2307/4332002': <tethne.classes.paper.Paper at 0x109e182d0>,
 '10.2307/4332001': <tethne.classes.paper.Paper at 0x1092ec350>,
 '10.2307/4332000': <tethne.classes.paper.Paper at 0x10a5cbd50>,
 '10.2307/4332007': <tethne.classes.paper.Paper at 0x109855910>,
 '10.2307/4332006': <tethne.classes.paper.Paper at 0x10a4a8bd0>,
 '10.2307/4332005': <tethne.classes.paper.Paper at 0x10952cb10>,
 '10.2307/4332004': <tethne.classes.paper.Paper at 0x109d16a50>,
 '10.2307/41653588': <tethne.classes.paper.Paper at 0x109f8e3d0>,
 '10.2307/41653589': <tethne.classes.paper.Paper at 0x109879410>,
 '10.2307/4330522': <tethne.classes.paper.Paper at 0x10a909310>,
 '10.2307/4330523': <tethne.classes.paper.Paper at 0x10a5c0e10>,
 '10.2307/4330520': <tethne.classes.paper.Paper at 0x10a742390>,
 '10.2307/4330521': <tethne.classes.paper.Paper at 0x10a091950>,
 '10.2307/4330526': <tethne.classes.paper.Paper at 0x10923fe50>,
 '10.2307/4330527': <tethne.classes.paper.Paper at 0x109ee9fd0>,
 '10.2307/4330524': <tethne.classes.paper.Paper at 0x1090e1c50>,
 '10.2307/41653567': <tethne.classes.paper.Paper at 0x109b38fd0>,
 '10.2307/41653568': <tethne.classes.paper.Paper at 0x109b0a950>,
 '10.2307/41653569': <tethne.classes.paper.Paper at 0x109c6a290>,
 '10.2307/4330528': <tethne.classes.paper.Paper at 0x10998bf90>,
 '10.2307/4330529': <tethne.classes.paper.Paper at 0x109f8eb10>,
 '10.2307/4331729': <tethne.classes.paper.Paper at 0x109da9e50>,
 '10.2307/4331728': <tethne.classes.paper.Paper at 0x109bdb5d0>,
 '10.2307/4331723': <tethne.classes.paper.Paper at 0x109f3c290>,
 '10.2307/4331722': <tethne.classes.paper.Paper at 0x109b0a590>,
 '10.2307/4331721': <tethne.classes.paper.Paper at 0x109d006d0>,
 '10.2307/4331720': <tethne.classes.paper.Paper at 0x10a36bf50>,
 '10.2307/4331727': <tethne.classes.paper.Paper at 0x109e2fe10>,
 '10.2307/4331726': <tethne.classes.paper.Paper at 0x10a873650>,
 '10.2307/4331725': <tethne.classes.paper.Paper at 0x10a586d50>,
 '10.2307/4331724': <tethne.classes.paper.Paper at 0x10a845910>,
 '10.2307/4330525': <tethne.classes.paper.Paper at 0x1091d5cd0>,
 '10.2307/4330975': <tethne.classes.paper.Paper at 0x10921ca90>,
 '10.2307/4330758': <tethne.classes.paper.Paper at 0x109b51f10>,
 '10.2307/4331389': <tethne.classes.paper.Paper at 0x10a38f850>,
 '10.2307/4331388': <tethne.classes.paper.Paper at 0x10a85cc10>,
 '10.2307/4331435': <tethne.classes.paper.Paper at 0x10a1c9f50>,
 '10.2307/4331926': <tethne.classes.paper.Paper at 0x10a011910>,
 '10.2307/4331921': <tethne.classes.paper.Paper at 0x10a79fa50>,
 '10.2307/4331432': <tethne.classes.paper.Paper at 0x109ba2bd0>,
 '10.2307/4331431': <tethne.classes.paper.Paper at 0x10a1f6f10>,
 '10.2307/4331430': <tethne.classes.paper.Paper at 0x10a2e1c90>,
 '10.2307/4331381': <tethne.classes.paper.Paper at 0x109f0df50>,
 '10.2307/4331380': <tethne.classes.paper.Paper at 0x10a28f190>,
 '10.2307/4331383': <tethne.classes.paper.Paper at 0x10a50fa90>,
 '10.2307/4331382': <tethne.classes.paper.Paper at 0x109d5b950>,
 '10.2307/4331929': <tethne.classes.paper.Paper at 0x10a6ced50>,
 '10.2307/4331928': <tethne.classes.paper.Paper at 0x10a943350>,
 '10.2307/4331439': <tethne.classes.paper.Paper at 0x109febfd0>,
 '10.2307/4331438': <tethne.classes.paper.Paper at 0x10a771950>,
 '10.2307/4331334': <tethne.classes.paper.Paper at 0x10995bf50>,
 '10.2307/4331496': <tethne.classes.paper.Paper at 0x109497110>,
 '10.2307/4331443': <tethne.classes.paper.Paper at 0x1091b37d0>,
 '10.2307/4331440': <tethne.classes.paper.Paper at 0x109dde2d0>,
 '10.2307/4331441': <tethne.classes.paper.Paper at 0x10a2e18d0>,
 '10.2307/4331330': <tethne.classes.paper.Paper at 0x109c966d0>,
 '10.2307/4331447': <tethne.classes.paper.Paper at 0x108ff9990>,
 '10.2307/4330708': <tethne.classes.paper.Paper at 0x10a7ff0d0>,
 '10.2307/4330709': <tethne.classes.paper.Paper at 0x108fd5f50>,
 '10.2307/4331444': <tethne.classes.paper.Paper at 0x109eafb10>,
 '10.2307/4330702': <tethne.classes.paper.Paper at 0x109cd1690>,
 '10.2307/4330703': <tethne.classes.paper.Paper at 0x10a260e50>,
 '10.2307/4330700': <tethne.classes.paper.Paper at 0x10a38ffd0>,
 '10.2307/4330701': <tethne.classes.paper.Paper at 0x10a8c4bd0>,
 '10.2307/4330706': <tethne.classes.paper.Paper at 0x10a7f4c50>,
 '10.2307/4330707': <tethne.classes.paper.Paper at 0x108f9d950>,
 '10.2307/4330704': <tethne.classes.paper.Paper at 0x10a4fa350>,
 '10.2307/4330705': <tethne.classes.paper.Paper at 0x109cf3b10>,
 '10.2307/4331653': <tethne.classes.paper.Paper at 0x10a19ee10>,
 '10.2307/4331652': <tethne.classes.paper.Paper at 0x10a6aa0d0>,
 '10.2307/4331651': <tethne.classes.paper.Paper at 0x10a1a9450>,
 '10.2307/4331650': <tethne.classes.paper.Paper at 0x1098270d0>,
 '10.2307/4331657': <tethne.classes.paper.Paper at 0x109920e50>,
 '10.2307/4331656': <tethne.classes.paper.Paper at 0x109c7f710>,
 '10.2307/4331655': <tethne.classes.paper.Paper at 0x109fd5a10>,
 '10.2307/4331654': <tethne.classes.paper.Paper at 0x10a8b9ed0>,
 '10.2307/4331659': <tethne.classes.paper.Paper at 0x109998c50>,
 '10.2307/4331658': <tethne.classes.paper.Paper at 0x109ea4250>,
 '10.2307/4331925': <tethne.classes.paper.Paper at 0x1099e8690>,
 '10.2307/4330892': <tethne.classes.paper.Paper at 0x10a226250>,
 '10.2307/4330677': <tethne.classes.paper.Paper at 0x109fd5250>,
 '10.2307/4330674': <tethne.classes.paper.Paper at 0x10a88b6d0>,
 '10.2307/4330675': <tethne.classes.paper.Paper at 0x109fa5490>,
 '10.2307/4330896': <tethne.classes.paper.Paper at 0x10a0e42d0>,
 '10.2307/4330673': <tethne.classes.paper.Paper at 0x10a921f90>,
 '10.2307/4330894': <tethne.classes.paper.Paper at 0x109b73dd0>,
 '10.2307/4330895': <tethne.classes.paper.Paper at 0x10a483e90>,
 '10.2307/4330898': <tethne.classes.paper.Paper at 0x10a106950>,
 '10.2307/4330899': <tethne.classes.paper.Paper at 0x10a4eec50>,
 '10.2307/4330678': <tethne.classes.paper.Paper at 0x10a477d10>,
 '10.2307/4330679': <tethne.classes.paper.Paper at 0x108fb4cd0>,
 '10.2307/40801946': <tethne.classes.paper.Paper at 0x1094c5290>,
 '10.2307/40801947': <tethne.classes.paper.Paper at 0x10a969ad0>,
 '10.2307/40801945': <tethne.classes.paper.Paper at 0x10a80b750>,
 '10.2307/4330878': <tethne.classes.paper.Paper at 0x10a629290>,
 '10.2307/4330879': <tethne.classes.paper.Paper at 0x1098910d0>,
 '10.2307/4330874': <tethne.classes.paper.Paper at 0x10a50f710>,
 '10.2307/4330875': <tethne.classes.paper.Paper at 0x1098b7d10>,
 '10.2307/4330876': <tethne.classes.paper.Paper at 0x109c74510>,
 '10.2307/4330877': <tethne.classes.paper.Paper at 0x109ab8b10>,
 '10.2307/4330870': <tethne.classes.paper.Paper at 0x10a3491d0>,
 '10.2307/4330871': <tethne.classes.paper.Paper at 0x109f23e10>,
 '10.2307/40801948': <tethne.classes.paper.Paper at 0x10a82fed0>,
 '10.2307/4330873': <tethne.classes.paper.Paper at 0x10a0e4d90>,
 '10.2307/4330857': <tethne.classes.paper.Paper at 0x10948b210>,
 '10.2307/4332018': <tethne.classes.paper.Paper at 0x10a641cd0>,
 '10.2307/4332019': <tethne.classes.paper.Paper at 0x10a477fd0>,
 '10.2307/4331924': <tethne.classes.paper.Paper at 0x108fe2dd0>,
 '10.2307/4332010': <tethne.classes.paper.Paper at 0x109ac5710>,
 '10.2307/4332011': <tethne.classes.paper.Paper at 0x10a8cfa10>,
 '10.2307/4332012': <tethne.classes.paper.Paper at 0x10a8f2d90>,
 '10.2307/4332013': <tethne.classes.paper.Paper at 0x10986d210>,
 '10.2307/4332014': <tethne.classes.paper.Paper at 0x10a282b90>,
 '10.2307/4332015': <tethne.classes.paper.Paper at 0x109f0df10>,
 '10.2307/4332016': <tethne.classes.paper.Paper at 0x10a5e3e10>,
 '10.2307/4332017': <tethne.classes.paper.Paper at 0x109f18510>,
 '10.2307/40984879': <tethne.classes.paper.Paper at 0x10a231b90>,
 '10.2307/4330763': <tethne.classes.paper.Paper at 0x10a3a6850>,
 '10.2307/4331793': <tethne.classes.paper.Paper at 0x10903f210>,
 '10.2307/4331538': <tethne.classes.paper.Paper at 0x109480050>,
 '10.2307/4331539': <tethne.classes.paper.Paper at 0x109f5e9d0>,
 '10.2307/41653595': <tethne.classes.paper.Paper at 0x10a505bd0>,
 '10.2307/41653594': <tethne.classes.paper.Paper at 0x10a113f10>,
 '10.2307/41653591': <tethne.classes.paper.Paper at 0x10a410b90>,
 '10.2307/41653590': <tethne.classes.paper.Paper at 0x10a5e37d0>,
 '10.2307/41653593': <tethne.classes.paper.Paper at 0x109128c10>,
 '10.2307/41653592': <tethne.classes.paper.Paper at 0x10a2cac10>,
 '10.2307/41653573': <tethne.classes.paper.Paper at 0x10a7cfc90>,
 '10.2307/41653572': <tethne.classes.paper.Paper at 0x10a3e1410>,
 '10.2307/41653571': <tethne.classes.paper.Paper at 0x10a2e1290>,
 '10.2307/41653570': <tethne.classes.paper.Paper at 0x10a533f90>,
 '10.2307/4331530': <tethne.classes.paper.Paper at 0x1091d5210>,
 '10.2307/41653575': <tethne.classes.paper.Paper at 0x10921c390>,
 '10.2307/41653574': <tethne.classes.paper.Paper at 0x1091bfe10>,
 '10.2307/4331531': <tethne.classes.paper.Paper at 0x1098c2490>,
 '10.2307/4331738': <tethne.classes.paper.Paper at 0x108ff9250>,
 '10.2307/4331739': <tethne.classes.paper.Paper at 0x109ce8ad0>,
 '10.2307/4331436': <tethne.classes.paper.Paper at 0x10952cf90>,
 '10.2307/4331730': <tethne.classes.paper.Paper at 0x10952ca10>,
 '10.2307/4331731': <tethne.classes.paper.Paper at 0x10a607f90>,
 '10.2307/4331732': <tethne.classes.paper.Paper at 0x1099d18d0>,
 '10.2307/4331733': <tethne.classes.paper.Paper at 0x10986d1d0>,
 '10.2307/4331734': <tethne.classes.paper.Paper at 0x109afdd50>,
 '10.2307/4331927': <tethne.classes.paper.Paper at 0x10a2a6990>,
 '10.2307/4331736': <tethne.classes.paper.Paper at 0x10a943e50>,
 '10.2307/4331737': <tethne.classes.paper.Paper at 0x10a4fae10>,
 '10.2307/4331434': <tethne.classes.paper.Paper at 0x10984a690>,
 '10.2307/4331433': <tethne.classes.paper.Paper at 0x1090324d0>,
 '10.2307/4331920': <tethne.classes.paper.Paper at 0x10910f590>,
 '10.2307/4331923': <tethne.classes.paper.Paper at 0x109f18ed0>,
 '10.2307/4331253': <tethne.classes.paper.Paper at 0x1092f8150>,
 '10.2307/4331849': <tethne.classes.paper.Paper at 0x10a087b50>,
 '10.2307/4331846': <tethne.classes.paper.Paper at 0x109bf5d50>,
 '10.2307/4331029': <tethne.classes.paper.Paper at 0x109c51ed0>,
 '10.2307/4331385': <tethne.classes.paper.Paper at 0x10a586a10>,
 '10.2307/4331384': <tethne.classes.paper.Paper at 0x10a950890>,
 '10.2307/4331424': <tethne.classes.paper.Paper at 0x109aa1f50>,
 '10.2307/4331397': <tethne.classes.paper.Paper at 0x109badcd0>,
 '10.2307/4331930': <tethne.classes.paper.Paper at 0x10a26b410>,
 '10.2307/4331395': <tethne.classes.paper.Paper at 0x10a736a90>,
 '10.2307/4331420': <tethne.classes.paper.Paper at 0x10a2b2e90>,
 '10.2307/4331393': <tethne.classes.paper.Paper at 0x109d93ad0>,
 '10.2307/4331934': <tethne.classes.paper.Paper at 0x109deacd0>,
 '10.2307/4331935': <tethne.classes.paper.Paper at 0x109fca7d0>,
 '10.2307/4331938': <tethne.classes.paper.Paper at 0x10a07a910>,
 '10.2307/4331939': <tethne.classes.paper.Paper at 0x109fca090>,
 '10.2307/4331428': <tethne.classes.paper.Paper at 0x10a742a10>,
 '10.2307/4331429': <tethne.classes.paper.Paper at 0x10a4b4a90>,
 '10.2307/4331398': <tethne.classes.paper.Paper at 0x109133e90>,
 '10.2307/4331399': <tethne.classes.paper.Paper at 0x10a87eed0>,
 '10.2307/4331640': <tethne.classes.paper.Paper at 0x109fb1310>,
 '10.2307/4331641': <tethne.classes.paper.Paper at 0x109e97410>,
 '10.2307/4331642': <tethne.classes.paper.Paper at 0x10a9158d0>,
 '10.2307/4331643': <tethne.classes.paper.Paper at 0x10a6ce290>,
 '10.2307/4331644': <tethne.classes.paper.Paper at 0x109fb12d0>,
 '10.2307/4331645': <tethne.classes.paper.Paper at 0x10a028690>,
 '10.2307/4331646': <tethne.classes.paper.Paper at 0x1098e6d50>,
 '10.2307/4331647': <tethne.classes.paper.Paper at 0x109da9090>,
 '10.2307/4331648': <tethne.classes.paper.Paper at 0x1097f9290>,
 '10.2307/4331649': <tethne.classes.paper.Paper at 0x109cdc110>,
 '10.2307/4331002': <tethne.classes.paper.Paper at 0x10986d590>,
 '10.2307/4331003': <tethne.classes.paper.Paper at 0x1098cdd50>,
 '10.2307/4330603': <tethne.classes.paper.Paper at 0x109b44550>,
 '10.2307/4330602': <tethne.classes.paper.Paper at 0x10a5cb0d0>,
 '10.2307/4330601': <tethne.classes.paper.Paper at 0x10a0fad50>,
 '10.2307/4330600': <tethne.classes.paper.Paper at 0x109c44a90>,
 '10.2307/4330607': <tethne.classes.paper.Paper at 0x109b73950>,
 '10.2307/4330606': <tethne.classes.paper.Paper at 0x10a540110>,
 '10.2307/4330605': <tethne.classes.paper.Paper at 0x109ebbd50>,
 '10.2307/4330604': <tethne.classes.paper.Paper at 0x10a449d50>,
 '10.2307/4330609': <tethne.classes.paper.Paper at 0x10a028e50>,
 '10.2307/4330608': <tethne.classes.paper.Paper at 0x10a04afd0>,
 '10.2307/4330849': <tethne.classes.paper.Paper at 0x1099e8a10>,
 '10.2307/4330848': <tethne.classes.paper.Paper at 0x109d93710>,
 '10.2307/40801951': <tethne.classes.paper.Paper at 0x10a1d4290>,
 '10.2307/4330840': <tethne.classes.paper.Paper at 0x109aa1450>,
 '10.2307/40801953': <tethne.classes.paper.Paper at 0x1099d1b10>,
 '10.2307/40801952': <tethne.classes.paper.Paper at 0x109ad1d50>,
 '10.2307/4330845': <tethne.classes.paper.Paper at 0x108deaad0>,
 '10.2307/40801954': <tethne.classes.paper.Paper at 0x10a3b2ad0>,
 '10.2307/40801957': <tethne.classes.paper.Paper at 0x10a005ad0>,
 '10.2307/40801956': <tethne.classes.paper.Paper at 0x10a591b90>,
 '10.2307/4332025': <tethne.classes.paper.Paper at 0x10a7b61d0>,
 '10.2307/4332024': <tethne.classes.paper.Paper at 0x1098cd990>,
 '10.2307/4332027': <tethne.classes.paper.Paper at 0x109d23f50>,
 '10.2307/4332026': <tethne.classes.paper.Paper at 0x10a3558d0>,
 '10.2307/4332021': <tethne.classes.paper.Paper at 0x10a5407d0>,
 '10.2307/4332020': <tethne.classes.paper.Paper at 0x109e0ce90>,
 '10.2307/4332023': <tethne.classes.paper.Paper at 0x109ac56d0>,
 '10.2307/4332022': <tethne.classes.paper.Paper at 0x10a304a90>,
 '10.2307/4332029': <tethne.classes.paper.Paper at 0x109004cd0>,
 '10.2307/4332028': <tethne.classes.paper.Paper at 0x10a17add0>,
 '10.2307/4331095': <tethne.classes.paper.Paper at 0x10a461990>,
 '10.2307/4331094': <tethne.classes.paper.Paper at 0x109ed1610>,
 '10.2307/4331097': <tethne.classes.paper.Paper at 0x109f31550>,
 '10.2307/4331096': <tethne.classes.paper.Paper at 0x109d39f10>,
 '10.2307/4331091': <tethne.classes.paper.Paper at 0x10a449890>,
 '10.2307/4331090': <tethne.classes.paper.Paper at 0x10a9afe10>,
 '10.2307/4331093': <tethne.classes.paper.Paper at 0x10a14bc10>,
 '10.2307/4331092': <tethne.classes.paper.Paper at 0x10a426b10>,
 '10.2307/4331099': <tethne.classes.paper.Paper at 0x10a07ad50>,
 '10.2307/4331098': <tethne.classes.paper.Paper at 0x10a4d7e10>,
 '10.2307/4331257': <tethne.classes.paper.Paper at 0x10a41a750>,
 '10.2307/4331704': <tethne.classes.paper.Paper at 0x10a74f990>,
 '10.2307/4331255': <tethne.classes.paper.Paper at 0x10a1def50>,
 '10.2307/4331254': <tethne.classes.paper.Paper at 0x109a8b110>,
 '10.2307/4331701': <tethne.classes.paper.Paper at 0x10a72ad90>,
 '10.2307/4331700': <tethne.classes.paper.Paper at 0x10a72aa10>,
 '10.2307/4331703': <tethne.classes.paper.Paper at 0x10a8ad910>,
 '10.2307/4331702': <tethne.classes.paper.Paper at 0x109c17190>,
 '10.2307/4331709': <tethne.classes.paper.Paper at 0x10a868b10>,
 '10.2307/4331708': <tethne.classes.paper.Paper at 0x10a3ed150>,
 '10.2307/4331259': <tethne.classes.paper.Paper at 0x109a80e90>,
 '10.2307/4331258': <tethne.classes.paper.Paper at 0x109e24e90>,
 '10.2307/4331899': <tethne.classes.paper.Paper at 0x109d6bd50>,
 '10.2307/4331898': <tethne.classes.paper.Paper at 0x10a79fd50>,
 '10.2307/4331895': <tethne.classes.paper.Paper at 0x10a46bf10>,
 '10.2307/4331894': <tethne.classes.paper.Paper at 0x109a8b490>,
 '10.2307/4331897': <tethne.classes.paper.Paper at 0x109c22f50>,
 '10.2307/4331896': <tethne.classes.paper.Paper at 0x10a203dd0>,
 '10.2307/4331891': <tethne.classes.paper.Paper at 0x1094680d0>,
 '10.2307/4331890': <tethne.classes.paper.Paper at 0x10a0fab10>,
 '10.2307/4331893': <tethne.classes.paper.Paper at 0x10a3e1b10>,
 '10.2307/4331892': <tethne.classes.paper.Paper at 0x109db3250>,
 '10.2307/4330540': <tethne.classes.paper.Paper at 0x1094c5250>,
 '10.2307/4331411': <tethne.classes.paper.Paper at 0x10a490790>,
 '10.2307/4331410': <tethne.classes.paper.Paper at 0x10a8e7e90>,
 '10.2307/4331413': <tethne.classes.paper.Paper at 0x10a19ee50>,
 '10.2307/4331412': <tethne.classes.paper.Paper at 0x109badc50>,
 '10.2307/4331415': <tethne.classes.paper.Paper at 0x109f8ee90>,
 '10.2307/4331414': <tethne.classes.paper.Paper at 0x10a456dd0>,
 '10.2307/4331417': <tethne.classes.paper.Paper at 0x10a87e150>,
 '10.2307/4331416': <tethne.classes.paper.Paper at 0x10a2d76d0>,
 '10.2307/4331419': <tethne.classes.paper.Paper at 0x109cc5e50>,
 '10.2307/4331418': <tethne.classes.paper.Paper at 0x10a404c50>,
 '10.2307/4331679': <tethne.classes.paper.Paper at 0x1099f3d90>,
 '10.2307/4331678': <tethne.classes.paper.Paper at 0x10a4e2a50>,
 '10.2307/4331675': <tethne.classes.paper.Paper at 0x109da0f50>,
 '10.2307/4331674': <tethne.classes.paper.Paper at 0x109c8bc50>,
 '10.2307/4331677': <tethne.classes.paper.Paper at 0x1092c9150>,
 '10.2307/4331676': <tethne.classes.paper.Paper at 0x109b67350>,
 '10.2307/4331671': <tethne.classes.paper.Paper at 0x10a556950>,
 '10.2307/4331670': <tethne.classes.paper.Paper at 0x109c8bfd0>,
 '10.2307/4331673': <tethne.classes.paper.Paper at 0x1094c5990>,
 '10.2307/4331672': <tethne.classes.paper.Paper at 0x10a0ef590>,
 '10.2307/40271518': <tethne.classes.paper.Paper at 0x10a92de90>,
 '10.2307/40271519': <tethne.classes.paper.Paper at 0x109891bd0>,
 '10.2307/4331079': <tethne.classes.paper.Paper at 0x10a055e50>,
 '10.2307/4331078': <tethne.classes.paper.Paper at 0x109c74c90>,
 '10.2307/4331077': <tethne.classes.paper.Paper at 0x109e75750>,
 '10.2307/4331076': <tethne.classes.paper.Paper at 0x109543750>,
 '10.2307/4331075': <tethne.classes.paper.Paper at 0x109ddea10>,
 '10.2307/4331074': <tethne.classes.paper.Paper at 0x10a157fd0>,
 '10.2307/4331073': <tethne.classes.paper.Paper at 0x10a852cd0>,
 '10.2307/40271515': <tethne.classes.paper.Paper at 0x10a3f8f90>,
 '10.2307/40271516': <tethne.classes.paper.Paper at 0x109dea8d0>,
 '10.2307/40271517': <tethne.classes.paper.Paper at 0x109fb1210>,
 '10.2307/4330676': <tethne.classes.paper.Paper at 0x109537ad0>,
 '10.2307/4330893': <tethne.classes.paper.Paper at 0x109bc4f10>,
 '10.2307/4330890': <tethne.classes.paper.Paper at 0x1098b7150>,
 '10.2307/4330610': <tethne.classes.paper.Paper at 0x10a95be10>,
 '10.2307/4330611': <tethne.classes.paper.Paper at 0x109cf3c10>,
 '10.2307/4330612': <tethne.classes.paper.Paper at 0x109966fd0>,
 '10.2307/4330891': <tethne.classes.paper.Paper at 0x10a231c90>,
 '10.2307/4330614': <tethne.classes.paper.Paper at 0x109bb8d50>,
 '10.2307/4330615': <tethne.classes.paper.Paper at 0x109f0de90>,
 '10.2307/4330616': <tethne.classes.paper.Paper at 0x109c96350>,
 '10.2307/4330617': <tethne.classes.paper.Paper at 0x1092b1490>,
 '10.2307/4330618': <tethne.classes.paper.Paper at 0x1097d74d0>,
 '10.2307/4330619': <tethne.classes.paper.Paper at 0x10a7c2610>,
 '10.2307/4330507': <tethne.classes.paper.Paper at 0x10914bf50>,
 '10.2307/4330897': <tethne.classes.paper.Paper at 0x1099bac10>,
 '10.2307/4330670': <tethne.classes.paper.Paper at 0x10a6ce990>,
 '10.2307/4330671': <tethne.classes.paper.Paper at 0x10a4b4bd0>,
 '10.2307/4330856': <tethne.classes.paper.Paper at 0x109855250>,
 '10.2307/4330777': <tethne.classes.paper.Paper at 0x10a49d650>,
 '10.2307/4330854': <tethne.classes.paper.Paper at 0x109233dd0>,
 '10.2307/4330855': <tethne.classes.paper.Paper at 0x10a490e50>,
 '10.2307/4330852': <tethne.classes.paper.Paper at 0x109ab8ed0>,
 '10.2307/4330853': <tethne.classes.paper.Paper at 0x10a771a10>,
 '10.2307/4330850': <tethne.classes.paper.Paper at 0x109ca2cd0>,
 '10.2307/4330851': <tethne.classes.paper.Paper at 0x109c00e90>,
 '10.2307/4330951': <tethne.classes.paper.Paper at 0x10a92d650>,
 '10.2307/4330858': <tethne.classes.paper.Paper at 0x109f31510>,
 '10.2307/4330859': <tethne.classes.paper.Paper at 0x109804150>,
 '10.2307/4330950': <tethne.classes.paper.Paper at 0x10a23df10>,
 '10.2307/41488387': <tethne.classes.paper.Paper at 0x10a3d55d0>,
 '10.2307/4330773': <tethne.classes.paper.Paper at 0x109474210>,
 '10.2307/4330772': <tethne.classes.paper.Paper at 0x10a868ed0>,
 '10.2307/4330955': <tethne.classes.paper.Paper at 0x109891490>,
 '10.2307/4330954': <tethne.classes.paper.Paper at 0x109f23990>,
 '10.2307/29737558': <tethne.classes.paper.Paper at 0x1090ca510>,
 '10.2307/29737559': <tethne.classes.paper.Paper at 0x10a7dbc10>,
 '10.2307/29737552': <tethne.classes.paper.Paper at 0x10a033550>,
 '10.2307/29737553': <tethne.classes.paper.Paper at 0x1099dc390>,
 '10.2307/29737550': <tethne.classes.paper.Paper at 0x109b89c90>,
 '10.2307/29737551': <tethne.classes.paper.Paper at 0x10a5568d0>,
 ...}

In [9]:
def chunkify(pages):


    T = []    # Tokens.
    PP = []   # Page start indices
    P = []    # Paragraph start indices (in T).
    S = []    # Sentence start indices (in T).
    I = []    # Token start,end character position indices.
        
    def _chunk_paragraphs(page):
        try:
            tok = nltk.tokenize.TextTilingTokenizer()
            return tok.tokenize(page)
        except ValueError:    # No paragraphs
            return [page]
    
    def _chunk_sentences(para):
        return nltk.tokenize.sent_tokenize(para)        
    
    pos = 0
    for page in pages:
        PP.append(len(T))

        paragraphs = _chunk_paragraphs(page)
        for para in paragraphs:
            P.append(len(T))    # Paragraph start index in T.

            sentences = _chunk_sentences(para)
            for sent in sentences:
                sent = sent.strip()
                S.append(len(T))    # Sentence start index in T.


                words = nltk.tokenize.word_tokenize(sent)
                for word in words:
                    T.append(word)
                    word_length = len(word) + 1
                    I.append((pos, pos + word_length))
                    pos += word_length

    return T, PP, P, S, I

In [78]:
ocrpath = os.path.join(basepath, 'ocr')
features = {}
u = 0
for fname in os.listdir(ocrpath):
    print '\r', fname, u,
    u += 1
    if fname.lower().endswith('.xml'):
        fpath = os.path.join(ocrpath, fname)
        doi = fname[4:-4].replace('_', '/')
        root = ET.parse(fpath).getroot()
        T, PP, P, S, I = chunkify([page.text for page in root.findall('.//page')])
        
        contexts = [
            ('page', PP),
            ('paragraph', P),
            ('sentence', S),
        ]
        feature = StructuredFeature(T, contexts=contexts)
        
        
        newTokens = []
        newContexts = {}
        tokenMap = {}
        for i in xrange(len(feature)):
            t = feature[i]
            if keep(t):
                tokenMap[len(newTokens)] = i
                newTokens.append(transform(t))

        reverse = {v:k for k,v in tokenMap.iteritems()}

        newContexts = []
        for name, indices in feature.contexts.items():
            newIndices = []
            for i in indices:
                while i not in reverse:
                    if i > len(feature):
                        break
                    i += 1
                if i not in reverse:
                    continue
                    
                new_i = reverse[i]
                if new_i not in newIndices:
                    newIndices.append(new_i)
            newContexts.append((name, newIndices))
        newFeature = StructuredFeature(newTokens, newContexts, reference=(feature, tokenMap))  
        features[doi] = (newFeature)


ocr_10.2307_4332035.XML 1916

In [79]:
fset = StructuredFeatureSet(features)

In [24]:
def number(value):
    for model in [int, float]:
        try:
            model(value)
            return True
        except:
            pass
    return False

In [20]:
stoplist = set(stopwords.words())

In [25]:
def keep(token):
    reject = [len(token) < 3,
              token in stoplist,
              number(token)]
    if not any(reject):
        return True
    return False

In [29]:
vocabulary = {}
def transform(token):
    token = token.lower()
    if token not in vocabulary:
        vocabulary[token] = len(vocabulary)
    return vocabulary[token]

In [11]:
papers, chunks = fset.context_chunks('page')

In [99]:
fset.N_features


Out[99]:
258084

In [9]:
%%cython -a

import numpy as np
cimport numpy as np
import cython
cimport cython
from cython cimport view
from libc.stdlib cimport malloc, free
DTYPE = np.float64
IDTYPE = np.int
ctypedef np.float64_t DTYPE_t
ctypedef np.int_t IDTYPE_t

cdef extern from "stdlib.h":
    ctypedef void const_void "const void"
    void qsort(void *base, int nmemb, int size,
            int(*compar)(const_void *, const_void *)) nogil

cdef struct Sorter:
    IDTYPE_t index
    DTYPE_t value

cdef int _compare(const_void *a, const_void *b):
    cdef DTYPE_t v = ((<Sorter*>a)).value-((<Sorter*>b)).value
    if v < 0: return -1
    if v >= 0: return 1

cdef void cyargsort(np.ndarray[DTYPE_t] data, Sorter * order):
    cdef IDTYPE_t i
    cdef IDTYPE_t n = data.shape[0]
    for i in range(n):
        order[i].index = i
        order[i].value = data[i]
    qsort(<void *> order, n, sizeof(Sorter), _compare)

cpdef argsort(np.ndarray[DTYPE_t] data, np.ndarray[IDTYPE_t] order):
    cdef IDTYPE_t i
    cdef IDTYPE_t n = data.shape[0]
    cdef Sorter *order_struct = <Sorter *> malloc(n * sizeof(Sorter))
    cyargsort(data, order_struct)
    for i in range(n):
        order[i] = order_struct[i].index
    free(order_struct)

from libc.stdlib cimport rand
cdef extern from "stdlib.h":
    int RAND_MAX

@cython.boundscheck(False)
@cython.cdivision(True)
def one_iter(np.ndarray[IDTYPE_t, ndim=2] n_dk, 
             np.ndarray[IDTYPE_t, ndim=2] n_kw, 
             np.ndarray[IDTYPE_t] n_k,
             np.ndarray[IDTYPE_t] n_d,
             np.ndarray[IDTYPE_t] z,
             np.ndarray[DTYPE_t] alpha,
             np.ndarray[DTYPE_t] beta,    
             np.ndarray[IDTYPE_t] words,
             np.ndarray[IDTYPE_t] docs,
             np.ndarray[DTYPE_t] p_z,
             DTYPE_t B,
             IDTYPE_t maxiters):
    cdef unsigned int wmax = words.shape[0]
    cdef unsigned int kmax = n_k.shape[0]
    cdef DTYPE_t left
    cdef DTYPE_t right
    cdef IDTYPE_t n_kw_v, n_dk_v,  n_d_v, n_k_v, k
    cdef DTYPE_t beta_v, alpha_v, total
    cdef DTYPE_t spz
    cdef unsigned int w, i, d, word, it
    cdef DTYPE_t rv
    cdef np.ndarray[IDTYPE_t] p_z_sort = np.arange(kmax)
    
    for it in range(maxiters):
        for w in range(wmax):
            d = docs[w]
            word = words[w]

            k = z[w]
            
            # Decrement to exclude current topic assignment.
            n_dk[d, k] -= 1
            n_kw[word, k] -= 1
            n_k[k] -= 1

            # Recalculate probability of assigning z[i] = k
            for i in range(kmax):
                n_kw_v = n_kw[word, i]
                n_dk_v = n_dk[d, i]
                n_k_v = n_k[k]
                alpha_v = alpha[i]
                n_d_v = n_d[d]
                beta_v = beta[word]

                left = (n_dk_v + alpha_v) / (n_d_v + alpha_v)
                right = (n_kw_v + beta_v)/(n_k_v + B)
                p_z[i] =  left * right 

            # Normalize to [0, 1]
            spz = 0.
            for i in range(kmax):
                spz = spz + p_z[i]
            for i in range(kmax):
                p_z[i] = p_z[i] / spz

            # Draw z[i] <- k from multinomial.
            argsort(p_z, p_z_sort)        # Sort parameters
            rv = rand() / float(RAND_MAX) # rv ~ Uniform(0,1)
            
            total = 0
            for i in range(kmax):
                total += p_z[p_z_sort[i]]
                if rv < total:
                    k = p_z_sort[i]
                    break
            z[w] = k
            
            # Re-increment with new topic assignment.
            n_dk[d, k] += 1
            n_kw[word, k] +=1 
            n_k[k] += 1

    return n_dk, n_kw, n_k, n_d, z


Out[9]:

Generated by Cython 0.22

 001: 
+002: import 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 = 2; __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 = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __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 = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 003: cimport numpy as np
 004: import cython
 005: cimport cython
 006: from cython cimport view
 007: from libc.stdlib cimport malloc, free
+008: DTYPE = np.float64
  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DTYPE, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 8; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+009: IDTYPE = np.int
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IDTYPE, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+010: ctypedef np.float64_t DTYPE_t
typedef __pyx_t_5numpy_float64_t __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t;
 011: ctypedef np.int_t IDTYPE_t
 012: 
 013: cdef extern from "stdlib.h":
 014:     ctypedef void const_void "const void"
 015:     void qsort(void *base, int nmemb, int size,
 016:             int(*compar)(const_void *, const_void *)) nogil
 017: 
 018: cdef struct Sorter:
 019:     IDTYPE_t index
 020:     DTYPE_t value
 021: 
+022: cdef int _compare(const_void *a, const_void *b):
static int __pyx_f_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c__compare(const void *__pyx_v_a, const void *__pyx_v_b) {
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_v;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_compare", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+023:     cdef DTYPE_t v = ((<Sorter*>a)).value-((<Sorter*>b)).value
  __pyx_v_v = (((struct __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_Sorter *)__pyx_v_a)->value - ((struct __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_Sorter *)__pyx_v_b)->value);
+024:     if v < 0: return -1
  __pyx_t_1 = ((__pyx_v_v < 0.0) != 0);
  if (__pyx_t_1) {
    __pyx_r = -1;
    goto __pyx_L0;
  }
+025:     if v >= 0: return 1
  __pyx_t_1 = ((__pyx_v_v >= 0.0) != 0);
  if (__pyx_t_1) {
    __pyx_r = 1;
    goto __pyx_L0;
  }
 026: 
+027: cdef void cyargsort(np.ndarray[DTYPE_t] data, Sorter * order):
static void __pyx_f_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_cyargsort(PyArrayObject *__pyx_v_data, struct __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_Sorter *__pyx_v_order) {
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_i;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_n;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_data;
  __Pyx_Buffer __pyx_pybuffer_data;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cyargsort", 0);
  __pyx_pybuffer_data.pybuffer.buf = NULL;
  __pyx_pybuffer_data.refcount = 0;
  __pyx_pybuffernd_data.data = NULL;
  __pyx_pybuffernd_data.rcbuffer = &__pyx_pybuffer_data;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_data.rcbuffer->pybuffer, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_data.diminfo[0].strides = __pyx_pybuffernd_data.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_data.diminfo[0].shape = __pyx_pybuffernd_data.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_WriteUnraisable("_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c.cyargsort", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_RefNannyFinishContext();
}
 028:     cdef IDTYPE_t i
+029:     cdef IDTYPE_t n = data.shape[0]
  __pyx_v_n = (__pyx_v_data->dimensions[0]);
+030:     for i in range(n):
  __pyx_t_1 = __pyx_v_n;
  for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
    __pyx_v_i = __pyx_t_2;
+031:         order[i].index = i
    (__pyx_v_order[__pyx_v_i]).index = __pyx_v_i;
+032:         order[i].value = data[i]
    __pyx_t_3 = __pyx_v_i;
    __pyx_t_4 = -1;
    if (__pyx_t_3 < 0) {
      __pyx_t_3 += __pyx_pybuffernd_data.diminfo[0].shape;
      if (unlikely(__pyx_t_3 < 0)) __pyx_t_4 = 0;
    } else if (unlikely(__pyx_t_3 >= __pyx_pybuffernd_data.diminfo[0].shape)) __pyx_t_4 = 0;
    if (unlikely(__pyx_t_4 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_4);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    (__pyx_v_order[__pyx_v_i]).value = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_data.rcbuffer->pybuffer.buf, __pyx_t_3, __pyx_pybuffernd_data.diminfo[0].strides));
  }
+033:     qsort(<void *> order, n, sizeof(Sorter), _compare)
  qsort(((void *)__pyx_v_order), __pyx_v_n, (sizeof(struct __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_Sorter)), __pyx_f_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c__compare);
 034: 
+035: cpdef argsort(np.ndarray[DTYPE_t] data, np.ndarray[IDTYPE_t] order):
static PyObject *__pyx_pw_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_1argsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_f_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_argsort(PyArrayObject *__pyx_v_data, PyArrayObject *__pyx_v_order, CYTHON_UNUSED int __pyx_skip_dispatch) {
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_i;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_n;
  struct __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_Sorter *__pyx_v_order_struct;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_data;
  __Pyx_Buffer __pyx_pybuffer_data;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_order;
  __Pyx_Buffer __pyx_pybuffer_order;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("argsort", 0);
  __pyx_pybuffer_data.pybuffer.buf = NULL;
  __pyx_pybuffer_data.refcount = 0;
  __pyx_pybuffernd_data.data = NULL;
  __pyx_pybuffernd_data.rcbuffer = &__pyx_pybuffer_data;
  __pyx_pybuffer_order.pybuffer.buf = NULL;
  __pyx_pybuffer_order.refcount = 0;
  __pyx_pybuffernd_order.data = NULL;
  __pyx_pybuffernd_order.rcbuffer = &__pyx_pybuffer_order;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_data.rcbuffer->pybuffer, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_data.diminfo[0].strides = __pyx_pybuffernd_data.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_data.diminfo[0].shape = __pyx_pybuffernd_data.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_order.rcbuffer->pybuffer, (PyObject*)__pyx_v_order, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_order.diminfo[0].strides = __pyx_pybuffernd_order.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_order.diminfo[0].shape = __pyx_pybuffernd_order.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_order.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c.argsort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_order.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_1argsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_1argsort(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_data = 0;
  PyArrayObject *__pyx_v_order = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("argsort (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_data,&__pyx_n_s_order,0};
    PyObject* values[2] = {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  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_data)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_order)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("argsort", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "argsort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_data = ((PyArrayObject *)values[0]);
    __pyx_v_order = ((PyArrayObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("argsort", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c.argsort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), __pyx_ptype_5numpy_ndarray, 1, "data", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), __pyx_ptype_5numpy_ndarray, 1, "order", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_argsort(__pyx_self, __pyx_v_data, __pyx_v_order);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_argsort(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_data, PyArrayObject *__pyx_v_order) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_data;
  __Pyx_Buffer __pyx_pybuffer_data;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_order;
  __Pyx_Buffer __pyx_pybuffer_order;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("argsort", 0);
  __pyx_pybuffer_data.pybuffer.buf = NULL;
  __pyx_pybuffer_data.refcount = 0;
  __pyx_pybuffernd_data.data = NULL;
  __pyx_pybuffernd_data.rcbuffer = &__pyx_pybuffer_data;
  __pyx_pybuffer_order.pybuffer.buf = NULL;
  __pyx_pybuffer_order.refcount = 0;
  __pyx_pybuffernd_order.data = NULL;
  __pyx_pybuffernd_order.rcbuffer = &__pyx_pybuffer_order;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_data.rcbuffer->pybuffer, (PyObject*)__pyx_v_data, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_data.diminfo[0].strides = __pyx_pybuffernd_data.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_data.diminfo[0].shape = __pyx_pybuffernd_data.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_order.rcbuffer->pybuffer, (PyObject*)__pyx_v_order, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_order.diminfo[0].strides = __pyx_pybuffernd_order.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_order.diminfo[0].shape = __pyx_pybuffernd_order.rcbuffer->pybuffer.shape[0];
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_argsort(__pyx_v_data, __pyx_v_order, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_order.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c.argsort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_data.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_order.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 036:     cdef IDTYPE_t i
+037:     cdef IDTYPE_t n = data.shape[0]
  __pyx_v_n = (__pyx_v_data->dimensions[0]);
+038:     cdef Sorter *order_struct = <Sorter *> malloc(n * sizeof(Sorter))
  __pyx_v_order_struct = ((struct __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_Sorter *)malloc((__pyx_v_n * (sizeof(struct __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_Sorter)))));
+039:     cyargsort(data, order_struct)
  __pyx_f_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_cyargsort(((PyArrayObject *)__pyx_v_data), __pyx_v_order_struct);
+040:     for i in range(n):
  __pyx_t_1 = __pyx_v_n;
  for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_1; __pyx_t_2+=1) {
    __pyx_v_i = __pyx_t_2;
+041:         order[i] = order_struct[i].index
    __pyx_t_3 = (__pyx_v_order_struct[__pyx_v_i]).index;
    __pyx_t_4 = __pyx_v_i;
    __pyx_t_5 = -1;
    if (__pyx_t_4 < 0) {
      __pyx_t_4 += __pyx_pybuffernd_order.diminfo[0].shape;
      if (unlikely(__pyx_t_4 < 0)) __pyx_t_5 = 0;
    } else if (unlikely(__pyx_t_4 >= __pyx_pybuffernd_order.diminfo[0].shape)) __pyx_t_5 = 0;
    if (unlikely(__pyx_t_5 != -1)) {
      __Pyx_RaiseBufferIndexError(__pyx_t_5);
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    }
    *__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_order.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_order.diminfo[0].strides) = __pyx_t_3;
  }
+042:     free(order_struct)
  free(__pyx_v_order_struct);
 043: 
 044: from libc.stdlib cimport rand
 045: cdef extern from "stdlib.h":
 046:     int RAND_MAX
 047: 
 048: @cython.boundscheck(False)
 049: @cython.cdivision(True)
+050: def one_iter(np.ndarray[IDTYPE_t, ndim=2] n_dk,
/* Python wrapper */
static PyObject *__pyx_pw_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_3one_iter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_3one_iter = {"one_iter", (PyCFunction)__pyx_pw_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_3one_iter, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_3one_iter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_n_dk = 0;
  PyArrayObject *__pyx_v_n_kw = 0;
  PyArrayObject *__pyx_v_n_k = 0;
  PyArrayObject *__pyx_v_n_d = 0;
  PyArrayObject *__pyx_v_z = 0;
  PyArrayObject *__pyx_v_alpha = 0;
  PyArrayObject *__pyx_v_beta = 0;
  PyArrayObject *__pyx_v_words = 0;
  PyArrayObject *__pyx_v_docs = 0;
  PyArrayObject *__pyx_v_p_z = 0;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_B;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_maxiters;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_iter (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n_dk,&__pyx_n_s_n_kw,&__pyx_n_s_n_k,&__pyx_n_s_n_d,&__pyx_n_s_z,&__pyx_n_s_alpha,&__pyx_n_s_beta,&__pyx_n_s_words,&__pyx_n_s_docs,&__pyx_n_s_p_z,&__pyx_n_s_B,&__pyx_n_s_maxiters,0};
    PyObject* values[12] = {0,0,0,0,0,0,0,0,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 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        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_n_dk)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        case  1:
        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n_kw)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  2:
        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n_k)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  3:
        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n_d)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  4:
        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  5:
        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  6:
        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_beta)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  7:
        if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_words)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  8:
        if (likely((values[8] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_docs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 8); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case  9:
        if (likely((values[9] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p_z)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 9); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case 10:
        if (likely((values[10] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_B)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 10); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
        case 11:
        if (likely((values[11] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxiters)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, 11); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "one_iter") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 12) {
      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);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
      values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
      values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
      values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
      values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
      values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
      values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
    }
    __pyx_v_n_dk = ((PyArrayObject *)values[0]);
    __pyx_v_n_kw = ((PyArrayObject *)values[1]);
    __pyx_v_n_k = ((PyArrayObject *)values[2]);
    __pyx_v_n_d = ((PyArrayObject *)values[3]);
    __pyx_v_z = ((PyArrayObject *)values[4]);
    __pyx_v_alpha = ((PyArrayObject *)values[5]);
    __pyx_v_beta = ((PyArrayObject *)values[6]);
    __pyx_v_words = ((PyArrayObject *)values[7]);
    __pyx_v_docs = ((PyArrayObject *)values[8]);
    __pyx_v_p_z = ((PyArrayObject *)values[9]);
    __pyx_v_B = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_B == (npy_float64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
    __pyx_v_maxiters = __Pyx_PyInt_As_npy_long(values[11]); if (unlikely((__pyx_v_maxiters == (npy_long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("one_iter", 1, 12, 12, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
  __pyx_L3_error:;
  __Pyx_AddTraceback("_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c.one_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_n_dk), __pyx_ptype_5numpy_ndarray, 1, "n_dk", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_n_kw), __pyx_ptype_5numpy_ndarray, 1, "n_kw", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_n_k), __pyx_ptype_5numpy_ndarray, 1, "n_k", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_n_d), __pyx_ptype_5numpy_ndarray, 1, "n_d", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_z), __pyx_ptype_5numpy_ndarray, 1, "z", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_alpha), __pyx_ptype_5numpy_ndarray, 1, "alpha", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_beta), __pyx_ptype_5numpy_ndarray, 1, "beta", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_words), __pyx_ptype_5numpy_ndarray, 1, "words", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_docs), __pyx_ptype_5numpy_ndarray, 1, "docs", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_p_z), __pyx_ptype_5numpy_ndarray, 1, "p_z", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_r = __pyx_pf_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_2one_iter(__pyx_self, __pyx_v_n_dk, __pyx_v_n_kw, __pyx_v_n_k, __pyx_v_n_d, __pyx_v_z, __pyx_v_alpha, __pyx_v_beta, __pyx_v_words, __pyx_v_docs, __pyx_v_p_z, __pyx_v_B, __pyx_v_maxiters);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_2one_iter(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_n_dk, PyArrayObject *__pyx_v_n_kw, PyArrayObject *__pyx_v_n_k, PyArrayObject *__pyx_v_n_d, PyArrayObject *__pyx_v_z, PyArrayObject *__pyx_v_alpha, PyArrayObject *__pyx_v_beta, PyArrayObject *__pyx_v_words, PyArrayObject *__pyx_v_docs, PyArrayObject *__pyx_v_p_z, __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_B, __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_maxiters) {
  unsigned int __pyx_v_wmax;
  unsigned int __pyx_v_kmax;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_left;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_right;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_n_kw_v;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_n_dk_v;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_n_d_v;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_n_k_v;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t __pyx_v_k;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_beta_v;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_alpha_v;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_total;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_spz;
  unsigned int __pyx_v_w;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_d;
  unsigned int __pyx_v_word;
  CYTHON_UNUSED unsigned int __pyx_v_it;
  __pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t __pyx_v_rv;
  PyArrayObject *__pyx_v_p_z_sort = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_alpha;
  __Pyx_Buffer __pyx_pybuffer_alpha;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_beta;
  __Pyx_Buffer __pyx_pybuffer_beta;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_docs;
  __Pyx_Buffer __pyx_pybuffer_docs;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_n_d;
  __Pyx_Buffer __pyx_pybuffer_n_d;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_n_dk;
  __Pyx_Buffer __pyx_pybuffer_n_dk;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_n_k;
  __Pyx_Buffer __pyx_pybuffer_n_k;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_n_kw;
  __Pyx_Buffer __pyx_pybuffer_n_kw;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_p_z;
  __Pyx_Buffer __pyx_pybuffer_p_z;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_p_z_sort;
  __Pyx_Buffer __pyx_pybuffer_p_z_sort;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_words;
  __Pyx_Buffer __pyx_pybuffer_words;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_z;
  __Pyx_Buffer __pyx_pybuffer_z;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("one_iter", 0);
  __pyx_pybuffer_p_z_sort.pybuffer.buf = NULL;
  __pyx_pybuffer_p_z_sort.refcount = 0;
  __pyx_pybuffernd_p_z_sort.data = NULL;
  __pyx_pybuffernd_p_z_sort.rcbuffer = &__pyx_pybuffer_p_z_sort;
  __pyx_pybuffer_n_dk.pybuffer.buf = NULL;
  __pyx_pybuffer_n_dk.refcount = 0;
  __pyx_pybuffernd_n_dk.data = NULL;
  __pyx_pybuffernd_n_dk.rcbuffer = &__pyx_pybuffer_n_dk;
  __pyx_pybuffer_n_kw.pybuffer.buf = NULL;
  __pyx_pybuffer_n_kw.refcount = 0;
  __pyx_pybuffernd_n_kw.data = NULL;
  __pyx_pybuffernd_n_kw.rcbuffer = &__pyx_pybuffer_n_kw;
  __pyx_pybuffer_n_k.pybuffer.buf = NULL;
  __pyx_pybuffer_n_k.refcount = 0;
  __pyx_pybuffernd_n_k.data = NULL;
  __pyx_pybuffernd_n_k.rcbuffer = &__pyx_pybuffer_n_k;
  __pyx_pybuffer_n_d.pybuffer.buf = NULL;
  __pyx_pybuffer_n_d.refcount = 0;
  __pyx_pybuffernd_n_d.data = NULL;
  __pyx_pybuffernd_n_d.rcbuffer = &__pyx_pybuffer_n_d;
  __pyx_pybuffer_z.pybuffer.buf = NULL;
  __pyx_pybuffer_z.refcount = 0;
  __pyx_pybuffernd_z.data = NULL;
  __pyx_pybuffernd_z.rcbuffer = &__pyx_pybuffer_z;
  __pyx_pybuffer_alpha.pybuffer.buf = NULL;
  __pyx_pybuffer_alpha.refcount = 0;
  __pyx_pybuffernd_alpha.data = NULL;
  __pyx_pybuffernd_alpha.rcbuffer = &__pyx_pybuffer_alpha;
  __pyx_pybuffer_beta.pybuffer.buf = NULL;
  __pyx_pybuffer_beta.refcount = 0;
  __pyx_pybuffernd_beta.data = NULL;
  __pyx_pybuffernd_beta.rcbuffer = &__pyx_pybuffer_beta;
  __pyx_pybuffer_words.pybuffer.buf = NULL;
  __pyx_pybuffer_words.refcount = 0;
  __pyx_pybuffernd_words.data = NULL;
  __pyx_pybuffernd_words.rcbuffer = &__pyx_pybuffer_words;
  __pyx_pybuffer_docs.pybuffer.buf = NULL;
  __pyx_pybuffer_docs.refcount = 0;
  __pyx_pybuffernd_docs.data = NULL;
  __pyx_pybuffernd_docs.rcbuffer = &__pyx_pybuffer_docs;
  __pyx_pybuffer_p_z.pybuffer.buf = NULL;
  __pyx_pybuffer_p_z.refcount = 0;
  __pyx_pybuffernd_p_z.data = NULL;
  __pyx_pybuffernd_p_z.rcbuffer = &__pyx_pybuffer_p_z;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_n_dk.rcbuffer->pybuffer, (PyObject*)__pyx_v_n_dk, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_n_dk.diminfo[0].strides = __pyx_pybuffernd_n_dk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_n_dk.diminfo[0].shape = __pyx_pybuffernd_n_dk.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_n_dk.diminfo[1].strides = __pyx_pybuffernd_n_dk.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_n_dk.diminfo[1].shape = __pyx_pybuffernd_n_dk.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_n_kw.rcbuffer->pybuffer, (PyObject*)__pyx_v_n_kw, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_n_kw.diminfo[0].strides = __pyx_pybuffernd_n_kw.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_n_kw.diminfo[0].shape = __pyx_pybuffernd_n_kw.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_n_kw.diminfo[1].strides = __pyx_pybuffernd_n_kw.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_n_kw.diminfo[1].shape = __pyx_pybuffernd_n_kw.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_n_k.rcbuffer->pybuffer, (PyObject*)__pyx_v_n_k, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_n_k.diminfo[0].strides = __pyx_pybuffernd_n_k.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_n_k.diminfo[0].shape = __pyx_pybuffernd_n_k.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_n_d.rcbuffer->pybuffer, (PyObject*)__pyx_v_n_d, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_n_d.diminfo[0].strides = __pyx_pybuffernd_n_d.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_n_d.diminfo[0].shape = __pyx_pybuffernd_n_d.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_z, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_z.diminfo[0].strides = __pyx_pybuffernd_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_z.diminfo[0].shape = __pyx_pybuffernd_z.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer, (PyObject*)__pyx_v_alpha, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_alpha.diminfo[0].strides = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_alpha.diminfo[0].shape = __pyx_pybuffernd_alpha.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_beta.rcbuffer->pybuffer, (PyObject*)__pyx_v_beta, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_beta.diminfo[0].strides = __pyx_pybuffernd_beta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_beta.diminfo[0].shape = __pyx_pybuffernd_beta.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_words.rcbuffer->pybuffer, (PyObject*)__pyx_v_words, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_words.diminfo[0].strides = __pyx_pybuffernd_words.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_words.diminfo[0].shape = __pyx_pybuffernd_words.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_docs.rcbuffer->pybuffer, (PyObject*)__pyx_v_docs, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_docs.diminfo[0].strides = __pyx_pybuffernd_docs.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_docs.diminfo[0].shape = __pyx_pybuffernd_docs.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_p_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_p_z, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  }
  __pyx_pybuffernd_p_z.diminfo[0].strides = __pyx_pybuffernd_p_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_p_z.diminfo[0].shape = __pyx_pybuffernd_p_z.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_beta.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_docs.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_d.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_dk.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_k.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_kw.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_p_z.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_words.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c.one_iter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_alpha.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_beta.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_docs.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_d.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_dk.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_k.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_n_kw.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_p_z.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_words.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_p_z_sort);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__7 = PyTuple_Pack(32, __pyx_n_s_n_dk, __pyx_n_s_n_kw, __pyx_n_s_n_k, __pyx_n_s_n_d, __pyx_n_s_z, __pyx_n_s_alpha, __pyx_n_s_beta, __pyx_n_s_words, __pyx_n_s_docs, __pyx_n_s_p_z, __pyx_n_s_B, __pyx_n_s_maxiters, __pyx_n_s_wmax, __pyx_n_s_kmax, __pyx_n_s_left, __pyx_n_s_right, __pyx_n_s_n_kw_v, __pyx_n_s_n_dk_v, __pyx_n_s_n_d_v, __pyx_n_s_n_k_v, __pyx_n_s_k, __pyx_n_s_beta_v, __pyx_n_s_alpha_v, __pyx_n_s_total, __pyx_n_s_spz, __pyx_n_s_w, __pyx_n_s_i, __pyx_n_s_d, __pyx_n_s_word, __pyx_n_s_it, __pyx_n_s_rv, __pyx_n_s_p_z_sort); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_3one_iter, NULL, __pyx_n_s_cython_magic_d9c528fd3d73ccd6a8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_one_iter, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 051:              np.ndarray[IDTYPE_t, ndim=2] n_kw,
 052:              np.ndarray[IDTYPE_t] n_k,
 053:              np.ndarray[IDTYPE_t] n_d,
 054:              np.ndarray[IDTYPE_t] z,
 055:              np.ndarray[DTYPE_t] alpha,
 056:              np.ndarray[DTYPE_t] beta,
 057:              np.ndarray[IDTYPE_t] words,
 058:              np.ndarray[IDTYPE_t] docs,
 059:              np.ndarray[DTYPE_t] p_z,
 060:              DTYPE_t B,
 061:              IDTYPE_t maxiters):
+062:     cdef unsigned int wmax = words.shape[0]
  __pyx_v_wmax = (__pyx_v_words->dimensions[0]);
+063:     cdef unsigned int kmax = n_k.shape[0]
  __pyx_v_kmax = (__pyx_v_n_k->dimensions[0]);
 064:     cdef DTYPE_t left
 065:     cdef DTYPE_t right
 066:     cdef IDTYPE_t n_kw_v, n_dk_v,  n_d_v, n_k_v, k
 067:     cdef DTYPE_t beta_v, alpha_v, total
 068:     cdef DTYPE_t spz
 069:     cdef unsigned int w, i, d, word, it
 070:     cdef DTYPE_t rv
+071:     cdef np.ndarray[IDTYPE_t] p_z_sort = np.arange(kmax)
  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_arange); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_kmax); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  if (!__pyx_t_4) {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else {
    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = NULL;
    PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_p_z_sort = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer.buf = NULL;
      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
    } else {__pyx_pybuffernd_p_z_sort.diminfo[0].strides = __pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_p_z_sort.diminfo[0].shape = __pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_p_z_sort = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 072: 
+073:     for it in range(maxiters):
  __pyx_t_7 = __pyx_v_maxiters;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_it = __pyx_t_8;
+074:         for w in range(wmax):
    __pyx_t_9 = __pyx_v_wmax;
    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
      __pyx_v_w = __pyx_t_10;
+075:             d = docs[w]
      __pyx_t_11 = __pyx_v_w;
      __pyx_v_d = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_docs.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_docs.diminfo[0].strides));
+076:             word = words[w]
      __pyx_t_12 = __pyx_v_w;
      __pyx_v_word = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_words.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_words.diminfo[0].strides));
 077: 
+078:             k = z[w]
      __pyx_t_13 = __pyx_v_w;
      __pyx_v_k = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_z.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_z.diminfo[0].strides));
 079: 
+080:             n_dk[d, k] -= 1
      __pyx_t_14 = __pyx_v_d;
      __pyx_t_15 = __pyx_v_k;
      if (__pyx_t_15 < 0) __pyx_t_15 += __pyx_pybuffernd_n_dk.diminfo[1].shape;
      *__Pyx_BufPtrStrided2d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_dk.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_n_dk.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_n_dk.diminfo[1].strides) -= 1;
+081:             n_kw[word, k] -= 1
      __pyx_t_16 = __pyx_v_word;
      __pyx_t_17 = __pyx_v_k;
      if (__pyx_t_17 < 0) __pyx_t_17 += __pyx_pybuffernd_n_kw.diminfo[1].shape;
      *__Pyx_BufPtrStrided2d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_kw.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_n_kw.diminfo[0].strides, __pyx_t_17, __pyx_pybuffernd_n_kw.diminfo[1].strides) -= 1;
+082:             n_k[k] -= 1
      __pyx_t_18 = __pyx_v_k;
      if (__pyx_t_18 < 0) __pyx_t_18 += __pyx_pybuffernd_n_k.diminfo[0].shape;
      *__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_k.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_n_k.diminfo[0].strides) -= 1;
 083: 
+084:             for i in range(kmax):
      __pyx_t_19 = __pyx_v_kmax;
      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
        __pyx_v_i = __pyx_t_20;
+085:                 n_kw_v = n_kw[word, i]
        __pyx_t_21 = __pyx_v_word;
        __pyx_t_22 = __pyx_v_i;
        __pyx_v_n_kw_v = (*__Pyx_BufPtrStrided2d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_kw.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_n_kw.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_n_kw.diminfo[1].strides));
+086:                 n_dk_v = n_dk[d, i]
        __pyx_t_23 = __pyx_v_d;
        __pyx_t_24 = __pyx_v_i;
        __pyx_v_n_dk_v = (*__Pyx_BufPtrStrided2d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_dk.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_n_dk.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_n_dk.diminfo[1].strides));
+087:                 n_k_v = n_k[k]
        __pyx_t_25 = __pyx_v_k;
        if (__pyx_t_25 < 0) __pyx_t_25 += __pyx_pybuffernd_n_k.diminfo[0].shape;
        __pyx_v_n_k_v = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_k.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_n_k.diminfo[0].strides));
+088:                 alpha_v = alpha[i]
        __pyx_t_26 = __pyx_v_i;
        __pyx_v_alpha_v = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_alpha.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_alpha.diminfo[0].strides));
+089:                 n_d_v = n_d[d]
        __pyx_t_27 = __pyx_v_d;
        __pyx_v_n_d_v = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_d.rcbuffer->pybuffer.buf, __pyx_t_27, __pyx_pybuffernd_n_d.diminfo[0].strides));
+090:                 beta_v = beta[word]
        __pyx_t_28 = __pyx_v_word;
        __pyx_v_beta_v = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_beta.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_beta.diminfo[0].strides));
 091: 
+092:                 left = (n_dk_v + alpha_v) / (n_d_v + alpha_v)
        __pyx_v_left = ((__pyx_v_n_dk_v + __pyx_v_alpha_v) / (__pyx_v_n_d_v + __pyx_v_alpha_v));
+093:                 right = (n_kw_v + beta_v)/(n_k_v + B)
        __pyx_v_right = ((__pyx_v_n_kw_v + __pyx_v_beta_v) / (__pyx_v_n_k_v + __pyx_v_B));
+094:                 p_z[i] =  left * right
        __pyx_t_29 = __pyx_v_i;
        *__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_p_z.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_p_z.diminfo[0].strides) = (__pyx_v_left * __pyx_v_right);
      }
 095: 
+096:             spz = 0.
      __pyx_v_spz = 0.;
+097:             for i in range(kmax):
      __pyx_t_19 = __pyx_v_kmax;
      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
        __pyx_v_i = __pyx_t_20;
+098:                 spz = spz + p_z[i]
        __pyx_t_30 = __pyx_v_i;
        __pyx_v_spz = (__pyx_v_spz + (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_p_z.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_p_z.diminfo[0].strides)));
      }
 099: 
+100:             for i in range(kmax):
      __pyx_t_19 = __pyx_v_kmax;
      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
        __pyx_v_i = __pyx_t_20;
+101:                 p_z[i] = p_z[i] / spz
        __pyx_t_31 = __pyx_v_i;
        __pyx_t_32 = __pyx_v_i;
        *__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_p_z.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_p_z.diminfo[0].strides) = ((*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_p_z.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_p_z.diminfo[0].strides)) / __pyx_v_spz);
      }
 102: 
+103:             argsort(p_z, p_z_sort)  # Sort parameters
      __pyx_t_1 = __pyx_f_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_argsort(((PyArrayObject *)__pyx_v_p_z), ((PyArrayObject *)__pyx_v_p_z_sort), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+104:             rv = rand() / float(RAND_MAX) # rv ~ Uniform(0,1)
      __pyx_v_rv = (rand() / ((double)RAND_MAX));
 105: 
+106:             total = 0
      __pyx_v_total = 0.0;
+107:             for i in range(kmax):
      __pyx_t_19 = __pyx_v_kmax;
      for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
        __pyx_v_i = __pyx_t_20;
+108:                 total += p_z[p_z_sort[i]]
        __pyx_t_33 = __pyx_v_i;
        __pyx_t_34 = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer.buf, __pyx_t_33, __pyx_pybuffernd_p_z_sort.diminfo[0].strides));
        if (__pyx_t_34 < 0) __pyx_t_34 += __pyx_pybuffernd_p_z.diminfo[0].shape;
        __pyx_v_total = (__pyx_v_total + (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_DTYPE_t *, __pyx_pybuffernd_p_z.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_p_z.diminfo[0].strides)));
+109:                 if rv < total:
        __pyx_t_35 = ((__pyx_v_rv < __pyx_v_total) != 0);
        if (__pyx_t_35) {
+110:                     k = p_z_sort[i]
          __pyx_t_36 = __pyx_v_i;
          __pyx_v_k = (*__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_p_z_sort.rcbuffer->pybuffer.buf, __pyx_t_36, __pyx_pybuffernd_p_z_sort.diminfo[0].strides));
+111:                     break
          goto __pyx_L14_break;
        }
      }
      __pyx_L14_break:;
 112: #             k = sample(p_z, rv)
 113: 
+114:             z[w] = k
      __pyx_t_19 = __pyx_v_w;
      *__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_z.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_z.diminfo[0].strides) = __pyx_v_k;
+115:             n_dk[d, k] += 1
      __pyx_t_20 = __pyx_v_d;
      __pyx_t_37 = __pyx_v_k;
      if (__pyx_t_37 < 0) __pyx_t_37 += __pyx_pybuffernd_n_dk.diminfo[1].shape;
      *__Pyx_BufPtrStrided2d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_dk.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_n_dk.diminfo[0].strides, __pyx_t_37, __pyx_pybuffernd_n_dk.diminfo[1].strides) += 1;
+116:             n_kw[word, k] +=1
      __pyx_t_38 = __pyx_v_word;
      __pyx_t_39 = __pyx_v_k;
      if (__pyx_t_39 < 0) __pyx_t_39 += __pyx_pybuffernd_n_kw.diminfo[1].shape;
      *__Pyx_BufPtrStrided2d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_kw.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_n_kw.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_n_kw.diminfo[1].strides) += 1;
+117:             n_k[k] += 1
      __pyx_t_40 = __pyx_v_k;
      if (__pyx_t_40 < 0) __pyx_t_40 += __pyx_pybuffernd_n_k.diminfo[0].shape;
      *__Pyx_BufPtrStrided1d(__pyx_t_46_cython_magic_d9c528fd3d73ccd6a85d7b47c951dc1c_IDTYPE_t *, __pyx_pybuffernd_n_k.rcbuffer->pybuffer.buf, __pyx_t_40, __pyx_pybuffernd_n_k.diminfo[0].strides) += 1;
    }
  }
 118: 
+119:     return n_dk, n_kw, n_k, n_d, z
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_n_dk));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_n_dk));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_n_dk));
  __Pyx_INCREF(((PyObject *)__pyx_v_n_kw));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_n_kw));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_n_kw));
  __Pyx_INCREF(((PyObject *)__pyx_v_n_k));
  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_n_k));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_n_k));
  __Pyx_INCREF(((PyObject *)__pyx_v_n_d));
  PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_n_d));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_n_d));
  __Pyx_INCREF(((PyObject *)__pyx_v_z));
  PyTuple_SET_ITEM(__pyx_t_1, 4, ((PyObject *)__pyx_v_z));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_z));
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

In [14]:
D = len(chunks)
W = fset.N_features
words = np.array([ c for chunk in chunks for c in chunk])
docs = np.array([ d for d in xrange(D) for c in chunks[d] ])
N = len(words)
K = 200

n_dk = np.zeros((D, K), dtype=np.int)  # Number of words in d assigned to k
n_kw = np.zeros((W, K), dtype=np.int)  # Number of times word w is assigned to k
n_k = np.zeros((K, ), dtype=np.int) 
n_d = np.zeros((D, ), dtype=np.int)


z = randint.rvs(0, K, size=N)

for w in xrange(N):
    d = docs[w]
    word = words[w]
    k = z[w]
    n_dk[d, k] += 1
    n_kw[word, k] += 1
    n_k[k] += 1
    n_d[d] += 1
    w += 1
    

alpha = uniform.rvs(0., 50./K, size=K)
# beta = uniform.rvs(0., 200./W, size=W)
beta = np.array([200./W]*W)

In [15]:
n_dk, n_kw, n_k, n_d, z = one_iter(n_dk, n_kw, n_k, n_d, z, alpha, beta, words, docs, np.zeros((K,)), np.sum(beta), 10)

In [23]:
z[33000:33300]


Out[23]:
array([ 95, 119, 114,  31, 100, 100, 100, 100, 100,  95, 100, 100, 100,
       100, 100, 109, 100, 100, 100, 162, 100, 109, 109, 100, 100, 100,
       100, 100, 186, 100, 100, 100, 109, 100, 100, 100, 100, 100, 100,
        95, 121, 100, 100, 109, 165, 100,  64, 100, 100, 100,  43, 162,
       100, 100, 100, 100, 114, 100, 198, 100, 186, 100, 162, 162,  64,
       100, 100, 100, 121, 100, 100, 100,  64, 100, 109, 100, 100, 109,
       100, 165, 109, 100,  40, 162,  19, 165, 121, 100, 100,  95, 100,
       119, 100, 109, 100, 100, 100, 100, 100, 121, 162, 100,  95,  95,
       100, 100, 100, 100,  65, 100, 100, 100, 100, 109, 109, 109, 100,
       100, 119, 100, 109, 109, 100, 139, 100, 100, 114, 100, 109, 100,
       162, 119, 100, 100, 109, 162, 100,  37, 100, 100, 100, 100, 109,
       121, 100, 100, 100, 162, 100, 100, 100, 165, 109, 100, 100, 100,
       100, 100, 100, 100, 100, 100, 100, 175, 100, 100, 100, 100, 100,
       100, 100, 100, 100, 100, 109, 100, 109, 100, 162,  59, 100, 100,
       100, 100, 100, 100, 100, 100,  37, 101, 100, 100, 109, 100, 182,
       182,  95,  47, 100, 100, 175, 162, 100,  95, 121, 100, 100, 100,
       100, 100, 100,  95, 100,  95, 100, 186, 162, 100, 100,  64, 100,
       100, 100, 121, 170, 100, 100, 109, 100, 109, 100, 100, 100, 100,
       109, 109, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
       100, 100, 100,  36,  95, 100, 100, 100, 100, 100, 100, 100, 109,
       100, 100, 100, 100, 100, 109, 100, 100, 100, 100, 100, 100, 100,
       100, 100, 100,  95, 109, 100, 100, 100, 100, 100, 100, 100, 121,
       100, 109, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 109, 109])

In [83]:
with open('/Users/erickpeirson/Desktop/jhb_featureset.pickle', 'w') as f:
    pickle.dump(fset, f)

In [7]:
with open('/Users/erickpeirson/Desktop/jhb_featureset.pickle', 'r') as f:
   fset = pickle.load(f)

In [20]:
import json
with open('/Users/erickpeirson/Projects/jhb_fixture.json', 'r') as f:
    data = json.load(f)

In [13]:
from scipy.stats import uniform, rv_discrete, randint
import numpy as np