{ "info": { "author": "Laurent Faucheux", "author_email": "laurent.faucheux@hotmail.fr", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Programming Language :: Python :: 2.7", "Topic :: Scientific/Engineering" ], "description": "# [PyOKNN](https://github.com/lfaucheux/oknn) - A spatial lag operator proposal implemented in Python: *only the k-nearest neighbor* (oknn).\r\n\r\n# Why\r\n
By opposition to the time-series case, specifying the spatial lag operator involves a lot of arbitrariness. Hence this proposal, which yields a lag operator usable as primarily observed without modi\ufb01cations. (click to expand)\r\n

\r\n\r\n [Fingleton (2009)](http://onlinelibrary.wiley.com/doi/10.1111/j.1538-4632.2009.00765.x/abstract) and [Corrado and Fingleton (2012)](http://onlinelibrary.wiley.com/doi/10.1111/j.1467-9787.2011.00726.x/abstract) remind the analogies between temporal and spatial processes, at least when considering their lag operators. In the spatial econometric (SE) case, the lag operator is always explicitly involved *via* the use of a matrix , where is the number of interacting positions. The chosen space can be geographic, economic, social or of any other type. In the temporal case, which is seen as a space like no other given its inescapable anisotropic nature, the lag operator is in practice never explicitly considered. Any variable to lag, say, a vector , is formed over components that are prealably sorted according to their position on the timeline. This allows the lag-procedure to simply consist of offsetting down/up these components by a lag-determined number of rows, say, one row. In matrix terms, this offsetting procedure would be entirely equivalent to pre-multiplying an unsorted version of by a boolean matrix with s indicating the immediate and unilateral proximity between temporal positions.\r\n\r\n The so-structured data generating process (DGP) thus involves as primarily observed, i.e. with no restructuring hypothesis or transformation. For each lag, this provides the statistician with a straightforward parameter space de\ufb01nition, whose knowledge of the exact boundary is important, both for estimation and inference [(Elhorst et al., 2012)](https://www.rug.nl/research/portal/publications/on-model-specification-and-parameter-space-definitions-in-higher-order-spatial-econometric-models(89205cfc-b2ad-4820-836c-2c4e919a9d11)/export.html).\r\n\r\n By opposition to the time series (TS) case, specifying involves a lot of arbitrariness. Apart from \u2019s non-nilpotency, these hypotheses deal with \u2019s isotropy [(Cressie, 1993)](http://doi.wiley.com/10.1002/9781119115151) and \ufb01nding \u2019s true entrywise speci\ufb01cation through a very large number of competing ones, be it functional or binary. Some famous entrywise speci\ufb01cations are the negative exponential function [(Haggett, 1965)](http://www.abebooks.com/9780713151794/Locational-Analysis-Human-Geography-Peter-071315179X/plp?cm_sp=plped-_-1-_-image), the inverse-distance function [(Wilson, 1970)](http://www.worldcat.org/title/entropy-in-urban-and-regional-modelling/oclc/816930997?referer=null&ht=edition), the combined distance-boundary function [(Cli\ufb00 and Ord, 1973)](http://journals.sagepub.com/doi/abs/10.1177/030913259501900205) and the weighted logistic accessibility function [(Bodson and Peeters, 1975)](http://epn.sagepub.com/lookup/doi/10.1068/a070455). Binary weights speci\ufb01cations are either based on the k-nearest neighbor (knn), on the k-order of contiguity or on the radial distance. Then, to ensure the unique de\ufb01nition of any to-be-lagged variable in terms of the other variables of the model, is scaled depending on the choice one makes among three competing normalization techniques. The \ufb01rst one makes row-stochastic, but does not necessarily preserve its symmetry. The second one pre- and post-multiplies by the negative square root of a diagonal matrix reporting its row-totals [(Cli\ufb00 and Ord, 1973)](http://journals.sagepub.com/doi/abs/10.1177/030913259501900205). The last one scales by its largest characteristic root [(Elhorst, 2001)](https://www.rug.nl/research/portal/publications/dynamic-models-in-space-and-time(3c6cb77b-b42c-4c64-b034-6f618d11a38f)/export.html). \r\n\r\n But the choice of and of its transformation is not innocuous. For a maximum likelihood (ML) estimation to be consistent, the estimated spatial model must involve the true ([Dogan, 2013](http://www.mdpi.com/2225-1146/3/1/101); [Lee, 2004](http://repository.ust.hk/ir/Record/1783.1-32038)). When dealing with autoregressive disturbances, both estimators ML and spatial generalized moments (GM) ([Anselin, 2011](https://geodacenter.asu.edu/software/downloads/geodaspace); [Arraiz et al., 2010](http://onlinelibrary.wiley.com/doi/10.1111/j.1467-9787.2009.00618.x/abstract); [Drukker et al., 2013](http://dx.doi.org/10.1080/07474938.2013.741020); [Kelejian and Prucha, 2010](http://dx.doi.org/10.1016/j.jeconom.2009.10.025)) theoretically base their knowledge of unobservable innovations upon the knowledge of . When facing endogeneity problems in non-autoregressive speci\ufb01cations and resorting to, *e.g.* [Kelejian and Prucha (1999)](http://onlinelibrary.wiley.com/doi/10.1111/1468-2354.00027/abstract)\u2019s generalized moments estimator (GM), the de\ufb01nition of the exogeneity constrains heavily relies on , which yields consistent and ef\ufb01cient estimations for sure, but potentially not with respect to the true DGP. If resorting to the instrumental variables (IV) method \u2013 in which space is conceived as providing ideal instruments ([Das et al., 2003](http://dx.doi.org/10.1111/j.1435-5597.2003.tb00001.x); [Lee, 2003](http://www.tandfonline.com/doi/abs/10.1081/ETC-120025891); [Pinkse and Slade, 2010](http://onlinelibrary.wiley.com/doi/10.1111/j.1467-9787.2009.00645.x/abstract)) \u2013, the strength of instruments is far from being ensured with in its most common speci\ufb01cation, i.e. whose lag consists of neighbors-averaging. Moreover, as discussed by [Gibbons and Overman (2012)](http://onlinelibrary.wiley.com/doi/10.1111/j.1467-9787.2012.00760.x/full), the inclusion of the product of higher powers of the spatial lag operator in the set of instruments is very likely to lead to a problem of colinearity, which in turn leads to the weaknesses of both identi\ufb01cation and instruments. Finally, when computing [LeSage and Pace (2009)](http://onlinelibrary.wiley.com/doi/10.1111/j.1751-5823.2009.00095_9.x/abstract)\u2019s total direct and indirect e\ufb00ects, the correctness of the true derivative of the regressand with respect to any spatially \ufb01ltered variable is a direct result of the correctness of .\r\n\r\n Hence the proposal that follows, *i.e* a speci\ufb01cation method for the spatial lag operator whose properties are as close as possible to the ones of its time series (TS) counterpart, *i.e.* usable as primarily observed without modi\ufb01cations. Nonetheless we follow [Pinkse and Slade (2010, p.105)](http://onlinelibrary.wiley.com/doi/10.1111/j.1467-9787.2009.00645.x/abstract)\u2019s recommendation of developing tools that are not simply extensions of familiar TS techniques to multiple dimensions. This is done so by proposing a speci\ufb01cation-method which is fully grounded on the observation of the empirical characteristics of space, while minimizing as much as possible the set of hypotheses that are required.\r\n\r\n Whereas the oknn speci\ufb01cation of is the strict spatial counterpart of the k-order TS lag operator, , it had surprisingly never been proposed. The likely reason for this fact is the usual assumption of regular lattice, on which the autoregression structure superimposes. Frequently seen as an issue, the irregularity of the lattice is the rational for this speci\ufb01cation. Moreover, in realistic spatial con\ufb01gurations, the lattice regularity is the exception rather than the rule.\r\n\r\n This specification implies the transposition in space of the three-stage modeling approach of [Box and Jenkins (1976)](https://www.wiley.com/en-fr/Time+Series+Analysis:+Forecasting+and+Control,+5th+Edition-p-9781118675021) which consists of (i) identifying and selecting the model, (ii) estimating the parameters and (iii) checking the model. It follows that the models that are subject to selection in the present work are likely to involve a large number of parameters whose distributions, probably not symmetrical, are cumbersome to derive analytically. This is why in addition to the (normal-approximation-based) observed con\ufb01dence intervals, (non-adjusted and adjusted) bootstrap percentile intervals are implemented. However, the existence of \ufb01xed spatial weight matrices prohibits the use of traditional bootstrapping methods. So as to compute (normal approximation or percentile-based) con\ufb01dence intervals for all the parameters, we use a special case of bootstrap method, namely [Lin et al. (2007)](https://www.researchgate.net/publication/228585605_Bootstrap_Test_Statistics_for_Spatial_Econometric_Models)\u2019s hybrid version of residual-based recursive wild bootstrap. This method is particularly appropriate since it (i) \"accounts for \ufb01xed spatial structure and heteroscedasticity of unknown form in the data\" and (ii) \"can be used for model identi\ufb01cation (pre-test) and diagnostic checking (post-test) of a spatial econometric model\". As mentioned above, non-adjusted percentile intervals as well as bias-corrected and accelerated (BCa) percentile intervals [(Efron and Tibshirani, 1993)](https://scholar.google.com/scholar_lookup?title=An%20introduction%20to%20the%20bootstrap&author=Efron&publication_year=1993) are implemented as well.\r\n

\r\n
\r\n\r\n# How\r\n\r\n## [Python2.7.+](https://www.python.org/ftp/python/2.7.14/python-2.7.14.msi) requirements\r\n\r\n- **[matplotlib](https://matplotlib.org/)** *(==1.4.3 preferably)*\r\n- **[numdifftools](https://pypi.python.org/pypi/Numdifftools)** *(>=0.9.20 preferably)* \r\n- **[numpy](http://www.numpy.org/)** *(>=1.14.0 preferably)* \r\n- **[pandas](https://pandas.pydata.org/)** *(>=0.22.0 preferably)* \r\n- **[scipy](https://www.scipy.org/)** *(>=1.0.0 preferably)* \r\n- **[pysal](http://pysal.readthedocs.io/en/latest/)** *(>=1.14.3 preferably)*\r\n\r\n## Installation\r\n\r\nWe are going to use a package management system to install and manage software packages written in Python, namely [pip](https://en.wikipedia.org/wiki/Pip_(package_manager)). Open a session in your OS shell prompt and type\r\n\r\n pip install pyoknn\r\n\r\nOr using a non-python-builtin approach, namely [git](https://git-scm.com/downloads),\r\n\r\n git clone git://github.com/lfaucheux/PyOKNN.git\r\n cd PyOKNN\r\n python setup.py install\r\n\r\n## Example usage:\r\nThe example that follows is done via the Python Shell. Let's first import the module `PyOKNN`.\r\n\r\n >>> import PyOKNN as ok \r\n\r\nWe use [Anselin's Columbus OH 49 observation data set](https://nowosad.github.io/spData/reference/columbus.html). Since the data set is included in PyOKNN, there is no need to mention the path directory.\r\n\r\n >>> o = ok.Presenter(\r\n ... data_name = 'columbus',\r\n ... y_name = 'CRIME',\r\n ... x_names = ['INC', 'HOVAL'],\r\n ... id_name = 'POLYID',\r\n ... verbose = True,\r\n ... opverbose = True,\r\n ... )\r\n\r\n\r\nLet's directly illustrate the main *raison d'\u00eatre* of this package, i.e. modelling spatial correlation structures. To do so, simply type\r\n\r\n >>> o.u_XACF_chart\r\n saved in C:\\data\\Columbus.out\\ER{0}AR{0}MA{0}[RESID][(P)ACF].png\r\n\r\nand\r\n\r\n >>> o.u_hull_chart\r\n saved in C:\\data\\Columbus.out\\ER{0}AR{0}MA{0}[RESID][HULLS].png\r\n\r\n`ER{0}AR{0}MA{0}[RESID][(P)ACF].png` and `ER{0}AR{0}MA{0}[RESID][HULLS].png` look like this\r\n\r\n\r\n\r\n
N.B.. (click to expand)\r\nHull charts should be treated with great caution since before talking about \"long-distance trend\" and/or \"space-dependent variance\", we should make sure that residuals are somehow sorted geographically. However, as shown in the map below, saying that it is totally uninformative appears abusive.\r\n\r\n

\r\n\r\n

\r\n
\r\n\r\nBe it in the ACF (upper dial) or in the PACF, we clearly have significant dependences at work through the lags 1, 2 and 4. Let's first think of it as global (thus considering the PACF) and go for an AR{1,2,4}.\r\n\r\n >>> o.u_XACF_chart_of(AR_ks=[1, 2, 4])\r\n Optimization terminated successfully.\r\n Current function value: 108.789436\r\n Iterations: 177\r\n Function evaluations: 370\r\n saved in C:\\data\\Columbus.out\\ER{0}AR{1,2,4}MA{0}[RESID][(P)ACF].png\r\n >>> o.u_hull_chart\r\n saved in C:\\data\\Columbus.out\\ER{0}AR{1,2,4}MA{0}[RESID][HULLS].png\r\n\r\n\r\n\r\n\r\nor thinking of those as local, let's go for a MA{1,2,4}. \r\n\r\n >>> o.u_XACF_chart_of(MA_ks=[1, 2, 4])\r\n Optimization terminated successfully.\r\n Current function value: 107.015463\r\n Iterations: 174\r\n Function evaluations: 357\r\n saved in C:\\data\\Columbus.out\\ER{0}AR{0}MA{1,2,4}[RESID][(P)ACF].png\r\n >>> o.u_hull_chart\r\n saved in C:\\data\\Columbus.out\\ER{0}AR{0}MA{1,2,4}[RESID][HULLS].png\r\n\r\n\r\n\r\nThinking of CRIME variable as cointegrated through space with INC and HOVAL, let's run a (partial) differencing whose structure is superimposed to the lags 1, 2 and 4.\r\n\r\n >>> o.u_XACF_chart_of(ER_ks=[1, 2, 4]) \r\n Optimization terminated successfully.\r\n Current function value: 107.126738\r\n Iterations: 189\r\n Function evaluations: 382\r\n saved in C:\\data\\Columbus.out\\ER{1,2,4}AR{0}MA{0}[RESID][(P)ACF].png\r\n >>> o.u_hull_chart\r\n saved in C:\\data\\Columbus.out\\ER{1,2,4}AR{0}MA{0}[RESID][HULLS].png\r\n\r\n\r\n\r\nA little summary is always useful.\r\n\r\n >>> o.summary()\r\n ================================= PARS\r\n \\\\\\\\ HAT //// ER{0}AR{0}MA{0} ER{0}AR{0}MA{1,2,4} ER{0}AR{1,2,4}MA{0} ER{1,2,4}AR{0}MA{0}\r\n \\beta_0 68.618961 63.418312 40.602532 59.163974\r\n \\beta_{HOVAL} -0.273931 -0.290030 -0.261453 -0.251289\r\n \\beta_{INC} -1.597311 -1.237462 -0.936830 -1.147231\r\n \\gamma_{1} NaN NaN NaN 0.106979\r\n \\gamma_{2} NaN NaN NaN 0.212151\r\n \\gamma_{4} NaN NaN NaN 0.377095\r\n \\lambda_{1} NaN 0.233173 NaN NaN\r\n \\lambda_{2} NaN 0.303743 NaN NaN\r\n \\lambda_{4} NaN 0.390871 NaN NaN\r\n \\rho_{1} NaN NaN 0.137684 NaN\r\n \\rho_{2} NaN NaN 0.218272 NaN\r\n \\rho_{4} NaN NaN 0.144365 NaN\r\n \\sigma^2_{ML} 122.752913 93.134974 79.000511 69.257032\r\n ================================= CRTS\r\n \\\\\\\\ HAT //// ER{0}AR{0}MA{0} ER{0}AR{0}MA{1,2,4} ER{0}AR{1,2,4}MA{0} ER{1,2,4}AR{0}MA{0}\r\n llik -187.377239 -176.543452 -178.317424 -176.654726\r\n HQC 382.907740 369.393427 372.941372 369.615976\r\n BIC 386.429939 376.437825 379.985770 376.660374\r\n AIC 380.754478 365.086903 368.634848 365.309452\r\n AICg 5.625770 5.306023 5.378430 5.310565\r\n pr^2 0.552404 0.548456 0.542484 0.550022\r\n pr^2 (pred) 0.552404 0.548456 0.590133 0.550022\r\n Sh's W 0.977076 0.990134 0.949463 0.972979\r\n Sh's Pr(>|W|) 0.449724 0.952490 0.035132 0.316830\r\n Sh's W (pred) 0.977076 0.978415 0.969177 0.973051\r\n Sh's Pr(>|W|) (pred) 0.449724 0.500748 0.224519 0.318861\r\n BP's B 7.900442 2.778268 20.419370 9.983489\r\n BP's Pr(>|B|) 0.019250 0.249291 0.000037 0.006794\r\n KB's K 5.694088 2.723948 9.514668 6.721746\r\n KB's Pr(>|K|) 0.058016 0.256155 0.008588 0.034705 \r\n\r\nGiven that the specification `ER{0}AR{0}MA{1,2,4}` has the minimum BIC, let's pursue with it and check its parameters-covariance matrix and statistical table. Keep in mind that the returned statistics and results are always those of the last model we worked with. We can figure out what this last model is -- i.e. the ongoing model --, typing\r\n\r\n >>> o.model_id\r\n ER{1,2,4}AR{0}MA{0}\r\n\r\nSince we want to continue with the specification `ER{0}AR{0}MA{1,2,4}`, we thus have to explicitly set it as \"ongoing\". This can be done, say, while requesting the parameters-covariance matrix and statistical table, as follows\r\n\r\n >>> o.covmat_of(MA_ks=[1, 2, 4])\r\n \\\\\\\\ COV //// \\beta_0 \\beta_{INC} \\beta_{HOVAL} \\lambda_{1} \\lambda_{2} \\lambda_{4} \\sigma^2_{ML}\r\n \\beta_0 19.139222 -0.784264 -0.025163 -0.061544 -0.028639 0.073201 -1.621429\r\n \\beta_{INC} -0.784264 0.109572 -0.019676 0.008862 0.017765 -0.014063 0.715907\r\n \\beta_{HOVAL} -0.025163 -0.019676 0.007814 -0.001673 -0.006111 0.003102 -0.239979\r\n \\lambda_{1} -0.061544 0.008862 -0.001673 0.010061 -0.000185 -0.001523 0.346635\r\n \\lambda_{2} -0.028639 0.017765 -0.006111 -0.000185 0.014815 -0.001668 0.576185\r\n \\lambda_{4} 0.073201 -0.014063 0.003102 -0.001523 -0.001668 0.008075 0.092086\r\n \\sigma^2_{ML} -1.621429 0.715907 -0.239979 0.346635 0.576185 0.092086 394.737828\r\n\r\nand\r\n\r\n >>> o.table_test # no need to type `o.table_test_of(MA_ks=[1, 2, 4])`\r\n \\\\\\\\ STT //// Estimate Std. Error t|z value Pr(>|t|) Pr(>|z|) 95.0% lo. 95.0% up.\r\n \\beta_0 63.418312 4.374840 14.496146 3.702829e-18 1.281465e-47 62.193379 64.643245\r\n \\beta_{INC} -1.237462 0.331017 -3.738367 5.422541e-04 1.852193e-04 -1.330145 -1.144779\r\n \\beta_{HOVAL} -0.290030 0.088398 -3.280974 2.056930e-03 1.034494e-03 -0.314781 -0.265279\r\n \\lambda_{1} 0.233173 0.100303 2.324690 2.487823e-02 2.008854e-02 0.205089 0.261257\r\n \\lambda_{2} 0.303743 0.121716 2.495501 1.649425e-02 1.257793e-02 0.269663 0.337823\r\n \\lambda_{4} 0.390871 0.089860 4.349759 8.232171e-05 1.362874e-05 0.365711 0.416032\r\n \\sigma^2_{ML} 93.134973 19.868010 4.687685 2.795560e-05 2.763129e-06 87.572032 98.697913\r\n\r\nIncidentally, note that the above table holds for\r\n\r\n >>> o.type_I_err\r\n 0.05\r\n\r\nBut one may want not to make any assumptions regarding spatial parameters distribution and favor an empirical approach by bootstrap-estimating all parameters as well as their (bias-corrected and accelerated - BCa) percentile intervals. \r\n\r\n >>> o.opverbose = False # Printing minimizer's messages may slow down iterations\r\n >>> o.PIs_computer(\r\n ... plot_hist = True, # Bootstrap distributions\r\n ... plot_conv = True, # Convergence plots\r\n ... MA_ks = [1, 2, 4]\r\n ... nbsamples = 10000 # Number of resamplings\r\n ... )\r\n\r\n10000 resamplings later, we see regarding economic parameters that using normal-approximation-based confidence intervals is anything but \"flat wrong\", look:\r\n\r\n\r\n\r\nwhich is not as true for spatial parameters:\r\n\r\n\r\n\r\nOne notable diffference is that BCa percentile intervals of and contain 0 while their non-BCa version does not. Moreover, these non-normal-based intervals are all the more informative when dealing with asymmetrical distributions, as that of \r\n\r\n
\r\n\r\nNote that the statistical table, previously called typing `o.table_test`, is now augmented on the right by the bootstrap-results.\r\n\r\n >>> o.table_test\r\n \\\\\\\\ STT //// Estimate Std. Error t|z value Pr(>|t|) Pr(>|z|) 95.0% CI.lo. 95.0% CI.up. 95.0% PI.lo. 95.0% PI.up. 95.0% BCa.lo. 95.0% BCa.up.\r\n \\beta_0 63.418312 4.374840 14.496146 3.702829e-18 1.281465e-47 62.193379 64.643245 53.922008 73.107011 53.328684 72.512817\r\n \\beta_{INC} -1.237462 0.331017 -3.738367 5.422541e-04 1.852193e-04 -1.330145 -1.144779 -1.846416 -0.632656 -1.825207 -0.610851\r\n \\beta_{HOVAL} -0.290030 0.088398 -3.280974 2.056930e-03 1.034494e-03 -0.314781 -0.265279 -0.451431 -0.127206 -0.451658 -0.127696\r\n \\lambda_{1} 0.233173 0.100303 2.324690 2.487823e-02 2.008854e-02 0.205089 0.261257 -0.043012 0.534407 -0.122474 0.484635\r\n \\lambda_{2} 0.303743 0.121716 2.495501 1.649425e-02 1.257793e-02 0.269663 0.337823 0.008517 0.616936 -0.089690 0.562511\r\n \\lambda_{4} 0.390871 0.089860 4.349759 8.232171e-05 1.362874e-05 0.365711 0.416032 0.116317 0.768369 -0.032977 0.652651\r\n \\sigma^2_{ML} 93.134973 19.868010 4.687685 2.795560e-05 2.763129e-06 87.572032 98.697913 50.668029 139.392307 61.426042 168.070074\r\n\r\nIncidentally, other distributions have been generated in addition to those of the parameters\r\n\r\n\r\n\r\n\r\nAll the other charts (distributions and convergence plots) are viewable [here](https://github.com/lfaucheux/PyOKNN/tree/master/PyOKNN/examples).\r\n\r\n\r\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/lfaucheux/PyOKNN/archive/0.1.66.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lfaucheux/PyOKNN", "keywords": "spatial econometrics,oknn specification,weight matrix", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "PyOKNN", "package_url": "https://pypi.org/project/PyOKNN/", "platform": "", "project_url": "https://pypi.org/project/PyOKNN/", "project_urls": { "Download": "https://github.com/lfaucheux/PyOKNN/archive/0.1.66.tar.gz", "Homepage": "https://github.com/lfaucheux/PyOKNN" }, "release_url": "https://pypi.org/project/PyOKNN/0.1.66/", "requires_dist": [ "numpy (>=1.14.0)", "numdifftools (>=0.9.20)", "pandas (>=0.22.0)", "scipy (>=1.0.0)", "pysal (>=1.14.3)", "matplotlib (==1.4.3)" ], "requires_python": "", "summary": "A spatial lag operator proposal implemented in Python21: only the k-nearest neighbor (oknn), PyOKNN.", "version": "0.1.66" }, "last_serial": 4975820, "releases": { "0.1.6": [ { "comment_text": "", "digests": { "md5": "5fa57c9987d1e3e67b70a101321a622f", "sha256": "5e97720b6056b219d43b3a511653ef973ff14df52854d6282f30179435ef6aa4" }, "downloads": -1, "filename": "PyOKNN-0.1.6.zip", "has_sig": false, "md5_digest": "5fa57c9987d1e3e67b70a101321a622f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6183006, "upload_time": "2018-02-15T08:20:19", "url": "https://files.pythonhosted.org/packages/fa/6a/a96ddf7de62b0f1b98d9de92cb6fb12904f3db06b4a35c611cc4b16637cf/PyOKNN-0.1.6.zip" } ], "0.1.60": [ { "comment_text": "", "digests": { "md5": "08aff5e32e4f71a31728d836837bc6d2", "sha256": "e4381bbce8403fb735b7981734778aac29c78642a1a4b714189097f73026b0e5" }, "downloads": -1, "filename": "PyOKNN-0.1.60.zip", "has_sig": false, "md5_digest": "08aff5e32e4f71a31728d836837bc6d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12253383, "upload_time": "2018-02-15T09:56:28", "url": "https://files.pythonhosted.org/packages/6b/38/1d6c5b792bbd3e2963197c6ed2945970e362ece7cab5bd653ddfe2a34b10/PyOKNN-0.1.60.zip" } ], "0.1.61": [ { "comment_text": "", "digests": { "md5": "a071f1198ad756f26d6d00a26e462869", "sha256": "ab18d50e5153fbff91fc31f4866ae638a26f633f4bfc51838daf97d55a7cd2fa" }, "downloads": -1, "filename": "PyOKNN-0.1.61.zip", "has_sig": false, "md5_digest": "a071f1198ad756f26d6d00a26e462869", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15716265, "upload_time": "2018-02-16T00:37:51", "url": "https://files.pythonhosted.org/packages/6c/80/450090f26a34427e818bd8bc2af855bc06034943d49e638dd4ecea51f0bc/PyOKNN-0.1.61.zip" } ], "0.1.62": [ { "comment_text": "", "digests": { "md5": "17e2243d255c5d336a3d5c12e3d3d4a2", "sha256": "854afc32963e373c253d44cfb0e963efb30f33830a7506c144a358336ef70462" }, "downloads": -1, "filename": "PyOKNN-0.1.62.zip", "has_sig": false, "md5_digest": "17e2243d255c5d336a3d5c12e3d3d4a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15663543, "upload_time": "2018-02-18T05:25:18", "url": "https://files.pythonhosted.org/packages/2b/37/54cf3daff8a1e51b6242876d23ca28630a404608c2ccd2b9da651aa39f54/PyOKNN-0.1.62.zip" } ], "0.1.63": [ { "comment_text": "", "digests": { "md5": "aeabb52e5cb62acaeb5f5f463b801f96", "sha256": "e51386dc6c119d0627365666ba48412cbb285497bd7f5706db70a8def9d0bdaf" }, "downloads": -1, "filename": "PyOKNN-0.1.63.zip", "has_sig": false, "md5_digest": "aeabb52e5cb62acaeb5f5f463b801f96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10239076, "upload_time": "2018-02-18T19:16:16", "url": "https://files.pythonhosted.org/packages/82/45/8f45748c23502218162602eb11d5190a01b073c97a4e2bd458ec47586150/PyOKNN-0.1.63.zip" } ], "0.1.65": [ { "comment_text": "", "digests": { "md5": "2ddd3af69b7e52b29f566ad6fbc5c05c", "sha256": "c7d882f6e6cdee4dcaa3ce4b309ba5a9af4754c5e7030b9f6f4fb6715e14a958" }, "downloads": -1, "filename": "PyOKNN-0.1.65-py2-none-any.whl", "has_sig": false, "md5_digest": "2ddd3af69b7e52b29f566ad6fbc5c05c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10513248, "upload_time": "2019-03-23T13:56:22", "url": "https://files.pythonhosted.org/packages/ef/b2/a229b8326718fb4c2574b5913291b5b237b4b8d92ace035e4adf92a74a60/PyOKNN-0.1.65-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5aebff0b4f87a002a8a7254fe7cd617", "sha256": "daf5d721e51ebe5673dc70ab7a1a10cb0e27c68f04f5ab7656a07ee8cd17ed45" }, "downloads": -1, "filename": "PyOKNN-0.1.65.tar.gz", "has_sig": false, "md5_digest": "b5aebff0b4f87a002a8a7254fe7cd617", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10253259, "upload_time": "2019-03-23T13:56:33", "url": "https://files.pythonhosted.org/packages/73/93/0ad6efc5bcc78c0531d6f4127e92670517dc0eda8bb1a8b75c2219ddfd13/PyOKNN-0.1.65.tar.gz" } ], "0.1.66": [ { "comment_text": "", "digests": { "md5": "7d3d733c71c8b47101b1c13d6bf5a6f4", "sha256": "5b59023af603d8bbdc662c95d02365b1d0151955a9cc2de06be0ea9c4f82ec26" }, "downloads": -1, "filename": "PyOKNN-0.1.66-py2-none-any.whl", "has_sig": false, "md5_digest": "7d3d733c71c8b47101b1c13d6bf5a6f4", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10513247, "upload_time": "2019-03-23T14:12:10", "url": "https://files.pythonhosted.org/packages/24/52/f5780c87814087f9a1870f1d2539f9a2740f94181ae2772da8864b876565/PyOKNN-0.1.66-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "002250643c07f5971ee085cba6c581bf", "sha256": "0eb4974bb5319551799e9d05ffc703df21acf60be952fcff248965c3aaaa0d2f" }, "downloads": -1, "filename": "PyOKNN-0.1.66.tar.gz", "has_sig": false, "md5_digest": "002250643c07f5971ee085cba6c581bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10253255, "upload_time": "2019-03-23T14:12:21", "url": "https://files.pythonhosted.org/packages/ce/42/60827c70902a73f96acb616af9df0a0ecfab5e043979579263d10dc07ffa/PyOKNN-0.1.66.tar.gz" } ], "0.1.66b0": [ { "comment_text": "", "digests": { "md5": "f2d21857c94c06dca1da76e3dd05aeb8", "sha256": "1262bf892df9a2152d3f15080dd5920b49125bea98d452bb7d23476b61abc15f" }, "downloads": -1, "filename": "PyOKNN-0.1.66b0-py2-none-any.whl", "has_sig": false, "md5_digest": "f2d21857c94c06dca1da76e3dd05aeb8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10513269, "upload_time": "2019-03-23T14:14:39", "url": "https://files.pythonhosted.org/packages/c1/13/abc1214f2e0a11980a189bc3b41ecdd2d4d209cce81783c7fda675fb3741/PyOKNN-0.1.66b0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4cba2513390f0f6255122760a8068a4a", "sha256": "33cbb03511efcf5339298692868025ac293dbfd47b2f9e07d3ed35f511e50a9d" }, "downloads": -1, "filename": "PyOKNN-0.1.66b0.tar.gz", "has_sig": false, "md5_digest": "4cba2513390f0f6255122760a8068a4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10253473, "upload_time": "2019-03-23T14:14:56", "url": "https://files.pythonhosted.org/packages/34/eb/ecbd3730c91be78b4faae2fea0105a698530b6e681b81e662a9f1d70fe99/PyOKNN-0.1.66b0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7d3d733c71c8b47101b1c13d6bf5a6f4", "sha256": "5b59023af603d8bbdc662c95d02365b1d0151955a9cc2de06be0ea9c4f82ec26" }, "downloads": -1, "filename": "PyOKNN-0.1.66-py2-none-any.whl", "has_sig": false, "md5_digest": "7d3d733c71c8b47101b1c13d6bf5a6f4", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10513247, "upload_time": "2019-03-23T14:12:10", "url": "https://files.pythonhosted.org/packages/24/52/f5780c87814087f9a1870f1d2539f9a2740f94181ae2772da8864b876565/PyOKNN-0.1.66-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "002250643c07f5971ee085cba6c581bf", "sha256": "0eb4974bb5319551799e9d05ffc703df21acf60be952fcff248965c3aaaa0d2f" }, "downloads": -1, "filename": "PyOKNN-0.1.66.tar.gz", "has_sig": false, "md5_digest": "002250643c07f5971ee085cba6c581bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10253255, "upload_time": "2019-03-23T14:12:21", "url": "https://files.pythonhosted.org/packages/ce/42/60827c70902a73f96acb616af9df0a0ecfab5e043979579263d10dc07ffa/PyOKNN-0.1.66.tar.gz" } ] }