numpy 1.9.2__zip → 1.10.0__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1593) hide show
  1. numpy-1.10.0.post2/INSTALL.txt +200 -0
  2. numpy-1.10.0.post2/LICENSE.txt +30 -0
  3. numpy-1.10.0.post2/MANIFEST.in +31 -0
  4. numpy-1.10.0.post2/PKG-INFO +47 -0
  5. numpy-1.10.0.post2/cnew.txt +117 -0
  6. numpy-1.10.0.post2/cold.txt +44 -0
  7. numpy-1.10.0.post2/committers.txt +160 -0
  8. numpy-1.10.0.post2/cpre.txt +283 -0
  9. numpy-1.10.0.post2/crel.txt +161 -0
  10. numpy-1.10.0.post2/doc/release/1.10.0-notes.rst +439 -0
  11. numpy-1.10.0.post2/doc/scipy-sphinx-theme/.git +1 -0
  12. numpy-1.10.0.post2/doc/source/conf.py +331 -0
  13. numpy-1.10.0.post2/doc/source/dev/development_environment.rst +211 -0
  14. numpy-1.10.0.post2/doc/source/dev/gitwash/development_workflow.rst +534 -0
  15. numpy-1.10.0.post2/doc/source/dev/gitwash/git_links.inc +95 -0
  16. numpy-1.10.0.post2/doc/source/dev/gitwash/index.rst +14 -0
  17. numpy-1.10.0.post2/doc/source/dev/index.rst +11 -0
  18. numpy-1.10.0.post2/doc/source/reference/arrays.classes.rst +490 -0
  19. numpy-1.10.0.post2/doc/source/reference/arrays.dtypes.rst +536 -0
  20. numpy-1.10.0.post2/doc/source/reference/arrays.indexing.rst +549 -0
  21. numpy-1.10.0.post2/doc/source/reference/arrays.interface.rst +337 -0
  22. numpy-1.10.0.post2/doc/source/reference/arrays.ndarray.rst +622 -0
  23. numpy-1.10.0.post2/doc/source/reference/arrays.scalars.rst +291 -0
  24. numpy-1.10.0.post2/doc/source/reference/c-api.array.rst +3393 -0
  25. numpy-1.10.0.post2/doc/source/reference/c-api.config.rst +103 -0
  26. numpy-1.10.0.post2/doc/source/reference/c-api.coremath.rst +420 -0
  27. numpy-1.10.0.post2/doc/source/reference/c-api.dtype.rst +376 -0
  28. numpy-1.10.0.post2/doc/source/reference/c-api.generalized-ufuncs.rst +191 -0
  29. numpy-1.10.0.post2/doc/source/reference/c-api.iterator.rst +1300 -0
  30. numpy-1.10.0.post2/doc/source/reference/c-api.types-and-structures.rst +1240 -0
  31. numpy-1.10.0.post2/doc/source/reference/c-api.ufunc.rst +413 -0
  32. numpy-1.10.0.post2/doc/source/reference/index.rst +43 -0
  33. numpy-1.10.0.post2/doc/source/reference/internals.code-explanations.rst +615 -0
  34. numpy-1.10.0.post2/doc/source/reference/routines.array-manipulation.rst +115 -0
  35. numpy-1.10.0.post2/doc/source/reference/routines.io.rst +78 -0
  36. numpy-1.10.0.post2/doc/source/reference/routines.linalg.rst +91 -0
  37. numpy-1.10.0.post2/doc/source/reference/routines.ma.rst +407 -0
  38. numpy-1.10.0.post2/doc/source/reference/routines.sort.rst +41 -0
  39. numpy-1.10.0.post2/doc/source/reference/routines.statistics.rst +57 -0
  40. numpy-1.10.0.post2/doc/source/reference/swig.interface-file.rst +1066 -0
  41. numpy-1.10.0.post2/doc/source/reference/swig.testing.rst +167 -0
  42. numpy-1.10.0.post2/doc/source/reference/ufuncs.rst +666 -0
  43. numpy-1.10.0.post2/doc/source/release.rst +20 -0
  44. numpy-1.10.0.post2/doc/source/user/basics.io.genfromtxt.rst +531 -0
  45. numpy-1.10.0.post2/doc/source/user/basics.rec.rst +7 -0
  46. numpy-1.10.0.post2/doc/source/user/c-info.beyond-basics.rst +560 -0
  47. numpy-1.10.0.post2/doc/source/user/c-info.how-to-extend.rst +642 -0
  48. numpy-1.10.0.post2/doc/source/user/c-info.python-as-glue.rst +1177 -0
  49. numpy-1.10.0.post2/doc/source/user/c-info.ufunc-tutorial.rst +1211 -0
  50. numpy-1.10.0.post2/doc/source/user/install.rst +194 -0
  51. numpy-1.10.0.post2/doc/sphinxext/.git +1 -0
  52. numpy-1.10.0.post2/numpy/__init__.py +227 -0
  53. numpy-1.10.0.post2/numpy/_build_utils/README +8 -0
  54. numpy-1.10.0.post2/numpy/_build_utils/apple_accelerate.py +21 -0
  55. numpy-1.10.0.post2/numpy/_build_utils/common.py +138 -0
  56. numpy-1.10.0.post2/numpy/_build_utils/src/apple_sgemv_fix.c +227 -0
  57. numpy-1.10.0.post2/numpy/_build_utils/waf.py +531 -0
  58. numpy-1.10.0.post2/numpy/_import_tools.py +353 -0
  59. numpy-1.10.0.post2/numpy/add_newdocs.py +7611 -0
  60. numpy-1.10.0.post2/numpy/compat/_inspect.py +194 -0
  61. numpy-1.10.0.post2/numpy/compat/py3k.py +88 -0
  62. numpy-1.10.0.post2/numpy/compat/setup.py +12 -0
  63. numpy-1.10.0.post2/numpy/core/__init__.py +89 -0
  64. numpy-1.10.0.post2/numpy/core/_internal.py +761 -0
  65. numpy-1.10.0.post2/numpy/core/_methods.py +133 -0
  66. numpy-1.10.0.post2/numpy/core/arrayprint.py +760 -0
  67. numpy-1.10.0.post2/numpy/core/code_generators/cversions.txt +34 -0
  68. numpy-1.10.0.post2/numpy/core/code_generators/generate_ufunc_api.py +219 -0
  69. numpy-1.10.0.post2/numpy/core/code_generators/generate_umath.py +1017 -0
  70. numpy-1.10.0.post2/numpy/core/code_generators/numpy_api.py +415 -0
  71. numpy-1.10.0.post2/numpy/core/code_generators/ufunc_docstrings.py +3442 -0
  72. numpy-1.10.0.post2/numpy/core/defchararray.py +2689 -0
  73. numpy-1.10.0.post2/numpy/core/fromnumeric.py +3089 -0
  74. numpy-1.10.0.post2/numpy/core/function_base.py +203 -0
  75. numpy-1.10.0.post2/numpy/core/getlimits.py +308 -0
  76. numpy-1.10.0.post2/numpy/core/include/numpy/ndarrayobject.h +246 -0
  77. numpy-1.10.0.post2/numpy/core/include/numpy/ndarraytypes.h +1797 -0
  78. numpy-1.10.0.post2/numpy/core/include/numpy/npy_3kcompat.h +448 -0
  79. numpy-1.10.0.post2/numpy/core/include/numpy/npy_common.h +1051 -0
  80. numpy-1.10.0.post2/numpy/core/include/numpy/npy_cpu.h +92 -0
  81. numpy-1.10.0.post2/numpy/core/include/numpy/npy_endian.h +61 -0
  82. numpy-1.10.0.post2/numpy/core/include/numpy/npy_math.h +525 -0
  83. numpy-1.10.0.post2/numpy/core/include/numpy/numpyconfig.h +36 -0
  84. numpy-1.10.0.post2/numpy/core/machar.py +342 -0
  85. numpy-1.10.0.post2/numpy/core/memmap.py +311 -0
  86. numpy-1.10.0.post2/numpy/core/numeric.py +2893 -0
  87. numpy-1.10.0.post2/numpy/core/numerictypes.py +1036 -0
  88. numpy-1.10.0.post2/numpy/core/records.py +846 -0
  89. numpy-1.10.0.post2/numpy/core/setup.py +983 -0
  90. numpy-1.10.0.post2/numpy/core/setup_common.py +352 -0
  91. numpy-1.10.0.post2/numpy/core/shape_base.py +350 -0
  92. numpy-1.10.0.post2/numpy/core/src/multiarray/alloc.c +244 -0
  93. numpy-1.10.0.post2/numpy/core/src/multiarray/arrayobject.c +1858 -0
  94. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.c.src +4738 -0
  95. numpy-1.10.0.post2/numpy/core/src/multiarray/arraytypes.h +37 -0
  96. numpy-1.10.0.post2/numpy/core/src/multiarray/buffer.c +981 -0
  97. numpy-1.10.0.post2/numpy/core/src/multiarray/calculation.c +1224 -0
  98. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.c +812 -0
  99. numpy-1.10.0.post2/numpy/core/src/multiarray/cblasfuncs.h +10 -0
  100. numpy-1.10.0.post2/numpy/core/src/multiarray/common.c +911 -0
  101. numpy-1.10.0.post2/numpy/core/src/multiarray/common.h +250 -0
  102. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.c +1664 -0
  103. numpy-1.10.0.post2/numpy/core/src/multiarray/compiled_base.h +24 -0
  104. numpy-1.10.0.post2/numpy/core/src/multiarray/conversion_utils.c +1217 -0
  105. numpy-1.10.0.post2/numpy/core/src/multiarray/convert.c +590 -0
  106. numpy-1.10.0.post2/numpy/core/src/multiarray/convert_datatype.c +2155 -0
  107. numpy-1.10.0.post2/numpy/core/src/multiarray/ctors.c +3838 -0
  108. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime.c +3821 -0
  109. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busday.c +1322 -0
  110. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_busdaycal.c +552 -0
  111. numpy-1.10.0.post2/numpy/core/src/multiarray/datetime_strings.c +1772 -0
  112. numpy-1.10.0.post2/numpy/core/src/multiarray/descriptor.c +3719 -0
  113. numpy-1.10.0.post2/numpy/core/src/multiarray/dtype_transfer.c +4239 -0
  114. numpy-1.10.0.post2/numpy/core/src/multiarray/einsum.c.src +3005 -0
  115. numpy-1.10.0.post2/numpy/core/src/multiarray/getset.c +986 -0
  116. numpy-1.10.0.post2/numpy/core/src/multiarray/hashdescr.c +318 -0
  117. numpy-1.10.0.post2/numpy/core/src/multiarray/item_selection.c +2413 -0
  118. numpy-1.10.0.post2/numpy/core/src/multiarray/iterators.c +2192 -0
  119. numpy-1.10.0.post2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +1769 -0
  120. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.c +3380 -0
  121. numpy-1.10.0.post2/numpy/core/src/multiarray/mapping.h +77 -0
  122. numpy-1.10.0.post2/numpy/core/src/multiarray/methods.c +2514 -0
  123. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarray_tests.c.src +1035 -0
  124. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.c +4628 -0
  125. numpy-1.10.0.post2/numpy/core/src/multiarray/multiarraymodule.h +15 -0
  126. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_api.c +2809 -0
  127. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_constr.c +3160 -0
  128. numpy-1.10.0.post2/numpy/core/src/multiarray/nditer_pywrap.c +2499 -0
  129. numpy-1.10.0.post2/numpy/core/src/multiarray/number.c +1106 -0
  130. numpy-1.10.0.post2/numpy/core/src/multiarray/number.h +77 -0
  131. numpy-1.10.0.post2/numpy/core/src/multiarray/numpymemoryview.c +308 -0
  132. numpy-1.10.0.post2/numpy/core/src/multiarray/numpyos.c +683 -0
  133. numpy-1.10.0.post2/numpy/core/src/multiarray/scalarapi.c +870 -0
  134. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.c.src +4343 -0
  135. numpy-1.10.0.post2/numpy/core/src/multiarray/scalartypes.h +55 -0
  136. numpy-1.10.0.post2/numpy/core/src/multiarray/shape.c +1131 -0
  137. numpy-1.10.0.post2/numpy/core/src/multiarray/ucsnarrow.c +174 -0
  138. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.c +180 -0
  139. numpy-1.10.0.post2/numpy/core/src/multiarray/vdot.h +18 -0
  140. numpy-1.10.0.post2/numpy/core/src/npymath/ieee754.c.src +808 -0
  141. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math.c.src +597 -0
  142. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_complex.c.src +1788 -0
  143. numpy-1.10.0.post2/numpy/core/src/npymath/npy_math_private.h +544 -0
  144. numpy-1.10.0.post2/numpy/core/src/npysort/heapsort.c.src +402 -0
  145. numpy-1.10.0.post2/numpy/core/src/npysort/mergesort.c.src +488 -0
  146. numpy-1.10.0.post2/numpy/core/src/npysort/npysort_common.h +360 -0
  147. numpy-1.10.0.post2/numpy/core/src/npysort/quicksort.c.src +523 -0
  148. numpy-1.10.0.post2/numpy/core/src/npysort/selection.c.src +426 -0
  149. numpy-1.10.0.post2/numpy/core/src/private/npy_cblas.h +584 -0
  150. numpy-1.10.0.post2/numpy/core/src/private/npy_config.h +101 -0
  151. numpy-1.10.0.post2/numpy/core/src/private/npy_import.h +32 -0
  152. numpy-1.10.0.post2/numpy/core/src/private/npy_partition.h.src +122 -0
  153. numpy-1.10.0.post2/numpy/core/src/private/npy_sort.h +196 -0
  154. numpy-1.10.0.post2/numpy/core/src/private/templ_common.h.src +43 -0
  155. numpy-1.10.0.post2/numpy/core/src/private/ufunc_override.h +397 -0
  156. numpy-1.10.0.post2/numpy/core/src/umath/funcs.inc.src +356 -0
  157. numpy-1.10.0.post2/numpy/core/src/umath/loops.c.src +2675 -0
  158. numpy-1.10.0.post2/numpy/core/src/umath/loops.h.src +497 -0
  159. numpy-1.10.0.post2/numpy/core/src/umath/operand_flag_tests.c.src +105 -0
  160. numpy-1.10.0.post2/numpy/core/src/umath/scalarmath.c.src +1738 -0
  161. numpy-1.10.0.post2/numpy/core/src/umath/simd.inc.src +903 -0
  162. numpy-1.10.0.post2/numpy/core/src/umath/test_rational.c.src +1404 -0
  163. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_object.c +5703 -0
  164. numpy-1.10.0.post2/numpy/core/src/umath/ufunc_type_resolution.c +2159 -0
  165. numpy-1.10.0.post2/numpy/core/src/umath/umath_tests.c.src +392 -0
  166. numpy-1.10.0.post2/numpy/core/src/umath/umathmodule.c +443 -0
  167. numpy-1.10.0.post2/numpy/core/tests/test_abc.py +47 -0
  168. numpy-1.10.0.post2/numpy/core/tests/test_api.py +515 -0
  169. numpy-1.10.0.post2/numpy/core/tests/test_arrayprint.py +171 -0
  170. numpy-1.10.0.post2/numpy/core/tests/test_datetime.py +1820 -0
  171. numpy-1.10.0.post2/numpy/core/tests/test_defchararray.py +703 -0
  172. numpy-1.10.0.post2/numpy/core/tests/test_deprecations.py +619 -0
  173. numpy-1.10.0.post2/numpy/core/tests/test_dtype.py +578 -0
  174. numpy-1.10.0.post2/numpy/core/tests/test_einsum.py +627 -0
  175. numpy-1.10.0.post2/numpy/core/tests/test_errstate.py +52 -0
  176. numpy-1.10.0.post2/numpy/core/tests/test_function_base.py +142 -0
  177. numpy-1.10.0.post2/numpy/core/tests/test_getlimits.py +77 -0
  178. numpy-1.10.0.post2/numpy/core/tests/test_half.py +436 -0
  179. numpy-1.10.0.post2/numpy/core/tests/test_indexerrors.py +126 -0
  180. numpy-1.10.0.post2/numpy/core/tests/test_indexing.py +1047 -0
  181. numpy-1.10.0.post2/numpy/core/tests/test_item_selection.py +73 -0
  182. numpy-1.10.0.post2/numpy/core/tests/test_machar.py +29 -0
  183. numpy-1.10.0.post2/numpy/core/tests/test_memmap.py +130 -0
  184. numpy-1.10.0.post2/numpy/core/tests/test_multiarray.py +5924 -0
  185. numpy-1.10.0.post2/numpy/core/tests/test_multiarray_assignment.py +84 -0
  186. numpy-1.10.0.post2/numpy/core/tests/test_nditer.py +2638 -0
  187. numpy-1.10.0.post2/numpy/core/tests/test_numeric.py +2204 -0
  188. numpy-1.10.0.post2/numpy/core/tests/test_numerictypes.py +382 -0
  189. numpy-1.10.0.post2/numpy/core/tests/test_print.py +248 -0
  190. numpy-1.10.0.post2/numpy/core/tests/test_records.py +299 -0
  191. numpy-1.10.0.post2/numpy/core/tests/test_regression.py +2177 -0
  192. numpy-1.10.0.post2/numpy/core/tests/test_scalarinherit.py +41 -0
  193. numpy-1.10.0.post2/numpy/core/tests/test_scalarmath.py +316 -0
  194. numpy-1.10.0.post2/numpy/core/tests/test_shape_base.py +319 -0
  195. numpy-1.10.0.post2/numpy/core/tests/test_ufunc.py +1227 -0
  196. numpy-1.10.0.post2/numpy/core/tests/test_umath.py +1933 -0
  197. numpy-1.10.0.post2/numpy/core/tests/test_umath_complex.py +538 -0
  198. numpy-1.10.0.post2/numpy/core/tests/test_unicode.py +360 -0
  199. numpy-1.10.0.post2/numpy/distutils/__init__.py +23 -0
  200. numpy-1.10.0.post2/numpy/distutils/ccompiler.py +690 -0
  201. numpy-1.10.0.post2/numpy/distutils/command/autodist.py +94 -0
  202. numpy-1.10.0.post2/numpy/distutils/command/build.py +47 -0
  203. numpy-1.10.0.post2/numpy/distutils/command/build_clib.py +295 -0
  204. numpy-1.10.0.post2/numpy/distutils/command/build_ext.py +522 -0
  205. numpy-1.10.0.post2/numpy/distutils/command/config.py +437 -0
  206. numpy-1.10.0.post2/numpy/distutils/exec_command.py +651 -0
  207. numpy-1.10.0.post2/numpy/distutils/fcompiler/compaq.py +128 -0
  208. numpy-1.10.0.post2/numpy/distutils/fcompiler/gnu.py +403 -0
  209. numpy-1.10.0.post2/numpy/distutils/fcompiler/intel.py +217 -0
  210. numpy-1.10.0.post2/numpy/distutils/fcompiler/pg.py +63 -0
  211. numpy-1.10.0.post2/numpy/distutils/fcompiler/sun.py +55 -0
  212. numpy-1.10.0.post2/numpy/distutils/intelccompiler.py +95 -0
  213. numpy-1.10.0.post2/numpy/distutils/lib2def.py +116 -0
  214. numpy-1.10.0.post2/numpy/distutils/mingw32ccompiler.py +599 -0
  215. numpy-1.10.0.post2/numpy/distutils/misc_util.py +2306 -0
  216. numpy-1.10.0.post2/numpy/distutils/msvc9compiler.py +23 -0
  217. numpy-1.10.0.post2/numpy/distutils/msvccompiler.py +17 -0
  218. numpy-1.10.0.post2/numpy/distutils/npy_pkg_config.py +451 -0
  219. numpy-1.10.0.post2/numpy/distutils/system_info.py +2397 -0
  220. numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +12 -0
  221. numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +11 -0
  222. numpy-1.10.0.post2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +11 -0
  223. numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +13 -0
  224. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/__init__.py +1 -0
  225. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example.py +17 -0
  226. numpy-1.10.0.post2/numpy/distutils/tests/swig_ext/tests/test_example2.py +15 -0
  227. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_gnu.py +60 -0
  228. numpy-1.10.0.post2/numpy/distutils/tests/test_fcompiler_intel.py +36 -0
  229. numpy-1.10.0.post2/numpy/distutils/tests/test_misc_util.py +79 -0
  230. numpy-1.10.0.post2/numpy/distutils/tests/test_npy_pkg_config.py +102 -0
  231. numpy-1.10.0.post2/numpy/distutils/tests/test_system_info.py +209 -0
  232. numpy-1.10.0.post2/numpy/distutils/unixccompiler.py +125 -0
  233. numpy-1.10.0.post2/numpy/doc/byteswapping.py +156 -0
  234. numpy-1.10.0.post2/numpy/doc/creation.py +144 -0
  235. numpy-1.10.0.post2/numpy/doc/glossary.py +423 -0
  236. numpy-1.10.0.post2/numpy/doc/indexing.py +439 -0
  237. numpy-1.10.0.post2/numpy/doc/structured_arrays.py +290 -0
  238. numpy-1.10.0.post2/numpy/f2py/__init__.py +49 -0
  239. numpy-1.10.0.post2/numpy/f2py/__main__.py +25 -0
  240. numpy-1.10.0.post2/numpy/f2py/auxfuncs.py +858 -0
  241. numpy-1.10.0.post2/numpy/f2py/capi_maps.py +851 -0
  242. numpy-1.10.0.post2/numpy/f2py/cb_rules.py +554 -0
  243. numpy-1.10.0.post2/numpy/f2py/cfuncs.py +1261 -0
  244. numpy-1.10.0.post2/numpy/f2py/common_rules.py +150 -0
  245. numpy-1.10.0.post2/numpy/f2py/crackfortran.py +3314 -0
  246. numpy-1.10.0.post2/numpy/f2py/diagnose.py +156 -0
  247. numpy-1.10.0.post2/numpy/f2py/f2py2e.py +656 -0
  248. numpy-1.10.0.post2/numpy/f2py/f2py_testing.py +48 -0
  249. numpy-1.10.0.post2/numpy/f2py/f90mod_rules.py +272 -0
  250. numpy-1.10.0.post2/numpy/f2py/func2subr.py +299 -0
  251. numpy-1.10.0.post2/numpy/f2py/rules.py +1475 -0
  252. numpy-1.10.0.post2/numpy/f2py/setup.py +117 -0
  253. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.c +1037 -0
  254. numpy-1.10.0.post2/numpy/f2py/src/fortranobject.h +162 -0
  255. numpy-1.10.0.post2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +223 -0
  256. numpy-1.10.0.post2/numpy/f2py/tests/test_array_from_pyobj.py +593 -0
  257. numpy-1.10.0.post2/numpy/f2py/tests/test_assumed_shape.py +35 -0
  258. numpy-1.10.0.post2/numpy/f2py/tests/test_callback.py +136 -0
  259. numpy-1.10.0.post2/numpy/f2py/tests/test_kind.py +36 -0
  260. numpy-1.10.0.post2/numpy/f2py/tests/test_mixed.py +40 -0
  261. numpy-1.10.0.post2/numpy/f2py/tests/test_regression.py +34 -0
  262. numpy-1.10.0.post2/numpy/f2py/tests/test_return_character.py +148 -0
  263. numpy-1.10.0.post2/numpy/f2py/tests/test_return_complex.py +170 -0
  264. numpy-1.10.0.post2/numpy/f2py/tests/test_return_integer.py +180 -0
  265. numpy-1.10.0.post2/numpy/f2py/tests/test_return_logical.py +189 -0
  266. numpy-1.10.0.post2/numpy/f2py/tests/test_return_real.py +206 -0
  267. numpy-1.10.0.post2/numpy/f2py/tests/test_size.py +44 -0
  268. numpy-1.10.0.post2/numpy/f2py/tests/util.py +367 -0
  269. numpy-1.10.0.post2/numpy/f2py/use_rules.py +115 -0
  270. numpy-1.10.0.post2/numpy/fft/fftpack.c +1501 -0
  271. numpy-1.10.0.post2/numpy/fft/fftpack.h +28 -0
  272. numpy-1.10.0.post2/numpy/fft/fftpack.py +1241 -0
  273. numpy-1.10.0.post2/numpy/fft/fftpack_litemodule.c +363 -0
  274. numpy-1.10.0.post2/numpy/fft/info.py +187 -0
  275. numpy-1.10.0.post2/numpy/fft/setup.py +19 -0
  276. numpy-1.10.0.post2/numpy/fft/tests/test_fftpack.py +166 -0
  277. numpy-1.10.0.post2/numpy/fft/tests/test_helper.py +78 -0
  278. numpy-1.10.0.post2/numpy/lib/_iotools.py +917 -0
  279. numpy-1.10.0.post2/numpy/lib/arraypad.py +1497 -0
  280. numpy-1.10.0.post2/numpy/lib/arraysetops.py +480 -0
  281. numpy-1.10.0.post2/numpy/lib/arrayterator.py +226 -0
  282. numpy-1.10.0.post2/numpy/lib/financial.py +737 -0
  283. numpy-1.10.0.post2/numpy/lib/format.py +814 -0
  284. numpy-1.10.0.post2/numpy/lib/function_base.py +4150 -0
  285. numpy-1.10.0.post2/numpy/lib/index_tricks.py +874 -0
  286. numpy-1.10.0.post2/numpy/lib/info.py +152 -0
  287. numpy-1.10.0.post2/numpy/lib/nanfunctions.py +1237 -0
  288. numpy-1.10.0.post2/numpy/lib/npyio.py +1992 -0
  289. numpy-1.10.0.post2/numpy/lib/polynomial.py +1277 -0
  290. numpy-1.10.0.post2/numpy/lib/recfunctions.py +1003 -0
  291. numpy-1.10.0.post2/numpy/lib/setup.py +12 -0
  292. numpy-1.10.0.post2/numpy/lib/shape_base.py +872 -0
  293. numpy-1.10.0.post2/numpy/lib/stride_tricks.py +200 -0
  294. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npy +0 -0
  295. numpy-1.10.0.post2/numpy/lib/tests/data/py2-objarr.npz +0 -0
  296. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npy +0 -0
  297. numpy-1.10.0.post2/numpy/lib/tests/data/py3-objarr.npz +0 -0
  298. numpy-1.10.0.post2/numpy/lib/tests/test__iotools.py +348 -0
  299. numpy-1.10.0.post2/numpy/lib/tests/test__version.py +70 -0
  300. numpy-1.10.0.post2/numpy/lib/tests/test_arraypad.py +1047 -0
  301. numpy-1.10.0.post2/numpy/lib/tests/test_arraysetops.py +309 -0
  302. numpy-1.10.0.post2/numpy/lib/tests/test_financial.py +163 -0
  303. numpy-1.10.0.post2/numpy/lib/tests/test_format.py +841 -0
  304. numpy-1.10.0.post2/numpy/lib/tests/test_function_base.py +2555 -0
  305. numpy-1.10.0.post2/numpy/lib/tests/test_index_tricks.py +326 -0
  306. numpy-1.10.0.post2/numpy/lib/tests/test_io.py +1916 -0
  307. numpy-1.10.0.post2/numpy/lib/tests/test_nanfunctions.py +707 -0
  308. numpy-1.10.0.post2/numpy/lib/tests/test_packbits.py +26 -0
  309. numpy-1.10.0.post2/numpy/lib/tests/test_polynomial.py +188 -0
  310. numpy-1.10.0.post2/numpy/lib/tests/test_recfunctions.py +734 -0
  311. numpy-1.10.0.post2/numpy/lib/tests/test_shape_base.py +386 -0
  312. numpy-1.10.0.post2/numpy/lib/tests/test_stride_tricks.py +405 -0
  313. numpy-1.10.0.post2/numpy/lib/tests/test_twodim_base.py +535 -0
  314. numpy-1.10.0.post2/numpy/lib/tests/test_type_check.py +332 -0
  315. numpy-1.10.0.post2/numpy/lib/twodim_base.py +1007 -0
  316. numpy-1.10.0.post2/numpy/lib/type_check.py +596 -0
  317. numpy-1.10.0.post2/numpy/lib/utils.py +1122 -0
  318. numpy-1.10.0.post2/numpy/linalg/lapack_lite/python_xerbla.c +46 -0
  319. numpy-1.10.0.post2/numpy/linalg/lapack_litemodule.c +358 -0
  320. numpy-1.10.0.post2/numpy/linalg/linalg.py +2406 -0
  321. numpy-1.10.0.post2/numpy/linalg/tests/test_build.py +59 -0
  322. numpy-1.10.0.post2/numpy/linalg/tests/test_linalg.py +1351 -0
  323. numpy-1.10.0.post2/numpy/linalg/tests/test_regression.py +95 -0
  324. numpy-1.10.0.post2/numpy/linalg/umath_linalg.c.src +3236 -0
  325. numpy-1.10.0.post2/numpy/ma/__init__.py +56 -0
  326. numpy-1.10.0.post2/numpy/ma/bench.py +131 -0
  327. numpy-1.10.0.post2/numpy/ma/core.py +7608 -0
  328. numpy-1.10.0.post2/numpy/ma/extras.py +1953 -0
  329. numpy-1.10.0.post2/numpy/ma/mrecords.py +796 -0
  330. numpy-1.10.0.post2/numpy/ma/setup.py +13 -0
  331. numpy-1.10.0.post2/numpy/ma/tests/test_core.py +4100 -0
  332. numpy-1.10.0.post2/numpy/ma/tests/test_extras.py +1132 -0
  333. numpy-1.10.0.post2/numpy/ma/tests/test_mrecords.py +520 -0
  334. numpy-1.10.0.post2/numpy/ma/tests/test_old_ma.py +879 -0
  335. numpy-1.10.0.post2/numpy/ma/tests/test_regression.py +80 -0
  336. numpy-1.10.0.post2/numpy/ma/tests/test_subclassing.py +338 -0
  337. numpy-1.10.0.post2/numpy/ma/testutils.py +289 -0
  338. numpy-1.10.0.post2/numpy/ma/timer_comparison.py +440 -0
  339. numpy-1.10.0.post2/numpy/matlib.py +358 -0
  340. numpy-1.10.0.post2/numpy/matrixlib/defmatrix.py +1232 -0
  341. numpy-1.10.0.post2/numpy/matrixlib/tests/test_defmatrix.py +449 -0
  342. numpy-1.10.0.post2/numpy/matrixlib/tests/test_multiarray.py +23 -0
  343. numpy-1.10.0.post2/numpy/matrixlib/tests/test_numeric.py +23 -0
  344. numpy-1.10.0.post2/numpy/matrixlib/tests/test_regression.py +37 -0
  345. numpy-1.10.0.post2/numpy/polynomial/_polybase.py +962 -0
  346. numpy-1.10.0.post2/numpy/polynomial/chebyshev.py +2056 -0
  347. numpy-1.10.0.post2/numpy/polynomial/hermite.py +1831 -0
  348. numpy-1.10.0.post2/numpy/polynomial/hermite_e.py +1828 -0
  349. numpy-1.10.0.post2/numpy/polynomial/laguerre.py +1780 -0
  350. numpy-1.10.0.post2/numpy/polynomial/legendre.py +1808 -0
  351. numpy-1.10.0.post2/numpy/polynomial/polyutils.py +403 -0
  352. numpy-1.10.0.post2/numpy/random/mtrand/distributions.c +912 -0
  353. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.c +34805 -0
  354. numpy-1.10.0.post2/numpy/random/mtrand/mtrand.pyx +4766 -0
  355. numpy-1.10.0.post2/numpy/random/setup.py +61 -0
  356. numpy-1.10.0.post2/numpy/random/tests/test_random.py +723 -0
  357. numpy-1.10.0.post2/numpy/random/tests/test_regression.py +117 -0
  358. numpy-1.10.0.post2/numpy/setup.py +29 -0
  359. numpy-1.10.0.post2/numpy/testing/__init__.py +15 -0
  360. numpy-1.10.0.post2/numpy/testing/decorators.py +271 -0
  361. numpy-1.10.0.post2/numpy/testing/noseclasses.py +353 -0
  362. numpy-1.10.0.post2/numpy/testing/nosetester.py +511 -0
  363. numpy-1.10.0.post2/numpy/testing/print_coercion_tables.py +91 -0
  364. numpy-1.10.0.post2/numpy/testing/setup.py +20 -0
  365. numpy-1.10.0.post2/numpy/testing/tests/test_decorators.py +182 -0
  366. numpy-1.10.0.post2/numpy/testing/tests/test_utils.py +781 -0
  367. numpy-1.10.0.post2/numpy/testing/utils.py +1831 -0
  368. numpy-1.10.0.post2/numpy/tests/test_ctypeslib.py +106 -0
  369. numpy-1.10.0.post2/numpy/tests/test_matlib.py +55 -0
  370. numpy-1.10.0.post2/numpy/tests/test_scripts.py +69 -0
  371. numpy-1.10.0.post2/numpy/version.py +10 -0
  372. numpy-1.10.0.post2/setup.py +260 -0
  373. numpy-1.10.0.post2/site.cfg.example +193 -0
  374. numpy-1.10.0.post2/tmp.txt +789 -0
  375. numpy-1.10.0.post2/tools/swig/README +145 -0
  376. numpy-1.10.0.post2/tools/swig/numpy.i +3161 -0
  377. numpy-1.10.0.post2/tools/swig/test/Array.i +135 -0
  378. numpy-1.10.0.post2/tools/swig/test/ArrayZ.cxx +131 -0
  379. numpy-1.10.0.post2/tools/swig/test/ArrayZ.h +56 -0
  380. numpy-1.10.0.post2/tools/swig/test/Flat.cxx +36 -0
  381. numpy-1.10.0.post2/tools/swig/test/Flat.h +34 -0
  382. numpy-1.10.0.post2/tools/swig/test/Flat.i +36 -0
  383. numpy-1.10.0.post2/tools/swig/test/Makefile +37 -0
  384. numpy-1.10.0.post2/tools/swig/test/setup.py +71 -0
  385. numpy-1.10.0.post2/tools/swig/test/testArray.py +385 -0
  386. numpy-1.10.0.post2/tools/swig/test/testFarray.py +159 -0
  387. numpy-1.10.0.post2/tools/swig/test/testFlat.py +200 -0
  388. numpy-1.10.0.post2/tools/swig/test/testFortran.py +173 -0
  389. numpy-1.10.0.post2/tools/swig/test/testMatrix.py +362 -0
  390. numpy-1.10.0.post2/tools/swig/test/testSuperTensor.py +388 -0
  391. numpy-1.10.0.post2/tools/swig/test/testTensor.py +402 -0
  392. numpy-1.10.0.post2/tools/swig/test/testVector.py +381 -0
  393. numpy-1.9.2/INSTALL.txt +0 -138
  394. numpy-1.9.2/LICENSE.txt +0 -30
  395. numpy-1.9.2/MANIFEST.in +0 -26
  396. numpy-1.9.2/PKG-INFO +0 -39
  397. numpy-1.9.2/doc/scipy-sphinx-theme/.git +0 -1
  398. numpy-1.9.2/doc/source/conf.py +0 -331
  399. numpy-1.9.2/doc/source/dev/gitwash/branch_list.png +0 -0
  400. numpy-1.9.2/doc/source/dev/gitwash/branch_list_compare.png +0 -0
  401. numpy-1.9.2/doc/source/dev/gitwash/development_workflow.rst +0 -568
  402. numpy-1.9.2/doc/source/dev/gitwash/git_links.inc +0 -88
  403. numpy-1.9.2/doc/source/dev/gitwash/index.rst +0 -14
  404. numpy-1.9.2/doc/source/dev/index.rst +0 -10
  405. numpy-1.9.2/doc/source/reference/arrays.classes.rst +0 -427
  406. numpy-1.9.2/doc/source/reference/arrays.dtypes.rst +0 -534
  407. numpy-1.9.2/doc/source/reference/arrays.indexing.rst +0 -550
  408. numpy-1.9.2/doc/source/reference/arrays.interface.rst +0 -336
  409. numpy-1.9.2/doc/source/reference/arrays.ndarray.rst +0 -609
  410. numpy-1.9.2/doc/source/reference/arrays.scalars.rst +0 -291
  411. numpy-1.9.2/doc/source/reference/c-api.array.rst +0 -3362
  412. numpy-1.9.2/doc/source/reference/c-api.config.rst +0 -103
  413. numpy-1.9.2/doc/source/reference/c-api.coremath.rst +0 -420
  414. numpy-1.9.2/doc/source/reference/c-api.dtype.rst +0 -376
  415. numpy-1.9.2/doc/source/reference/c-api.generalized-ufuncs.rst +0 -171
  416. numpy-1.9.2/doc/source/reference/c-api.iterator.rst +0 -1298
  417. numpy-1.9.2/doc/source/reference/c-api.types-and-structures.rst +0 -1204
  418. numpy-1.9.2/doc/source/reference/c-api.ufunc.rst +0 -399
  419. numpy-1.9.2/doc/source/reference/index.rst +0 -44
  420. numpy-1.9.2/doc/source/reference/internals.code-explanations.rst +0 -666
  421. numpy-1.9.2/doc/source/reference/routines.array-manipulation.rst +0 -113
  422. numpy-1.9.2/doc/source/reference/routines.io.rst +0 -74
  423. numpy-1.9.2/doc/source/reference/routines.linalg.rst +0 -88
  424. numpy-1.9.2/doc/source/reference/routines.ma.rst +0 -405
  425. numpy-1.9.2/doc/source/reference/routines.sort.rst +0 -42
  426. numpy-1.9.2/doc/source/reference/routines.statistics.rst +0 -55
  427. numpy-1.9.2/doc/source/reference/swig.interface-file.rst +0 -1055
  428. numpy-1.9.2/doc/source/reference/swig.testing.rst +0 -166
  429. numpy-1.9.2/doc/source/reference/ufuncs.rst +0 -651
  430. numpy-1.9.2/doc/source/release.rst +0 -19
  431. numpy-1.9.2/doc/source/user/basics.io.genfromtxt.rst +0 -531
  432. numpy-1.9.2/doc/source/user/basics.rec.rst +0 -7
  433. numpy-1.9.2/doc/source/user/c-info.beyond-basics.rst +0 -560
  434. numpy-1.9.2/doc/source/user/c-info.how-to-extend.rst +0 -642
  435. numpy-1.9.2/doc/source/user/c-info.python-as-glue.rst +0 -1528
  436. numpy-1.9.2/doc/source/user/c-info.ufunc-tutorial.rst +0 -1211
  437. numpy-1.9.2/doc/source/user/install.rst +0 -180
  438. numpy-1.9.2/doc/sphinxext/.git +0 -1
  439. numpy-1.9.2/numpy/__init__.py +0 -216
  440. numpy-1.9.2/numpy/_import_tools.py +0 -348
  441. numpy-1.9.2/numpy/add_newdocs.py +0 -7518
  442. numpy-1.9.2/numpy/compat/_inspect.py +0 -221
  443. numpy-1.9.2/numpy/compat/py3k.py +0 -89
  444. numpy-1.9.2/numpy/compat/setup.py +0 -12
  445. numpy-1.9.2/numpy/core/__init__.py +0 -78
  446. numpy-1.9.2/numpy/core/_internal.py +0 -570
  447. numpy-1.9.2/numpy/core/_methods.py +0 -134
  448. numpy-1.9.2/numpy/core/arrayprint.py +0 -752
  449. numpy-1.9.2/numpy/core/blasdot/_dotblas.c +0 -1255
  450. numpy-1.9.2/numpy/core/blasdot/apple_sgemv_patch.c +0 -216
  451. numpy-1.9.2/numpy/core/blasdot/cblas.h +0 -578
  452. numpy-1.9.2/numpy/core/code_generators/cversions.txt +0 -31
  453. numpy-1.9.2/numpy/core/code_generators/generate_ufunc_api.py +0 -219
  454. numpy-1.9.2/numpy/core/code_generators/generate_umath.py +0 -972
  455. numpy-1.9.2/numpy/core/code_generators/numpy_api.py +0 -412
  456. numpy-1.9.2/numpy/core/code_generators/ufunc_docstrings.py +0 -3419
  457. numpy-1.9.2/numpy/core/defchararray.py +0 -2687
  458. numpy-1.9.2/numpy/core/fromnumeric.py +0 -2938
  459. numpy-1.9.2/numpy/core/function_base.py +0 -190
  460. numpy-1.9.2/numpy/core/getlimits.py +0 -306
  461. numpy-1.9.2/numpy/core/include/numpy/fenv/fenv.c +0 -38
  462. numpy-1.9.2/numpy/core/include/numpy/fenv/fenv.h +0 -224
  463. numpy-1.9.2/numpy/core/include/numpy/ndarrayobject.h +0 -237
  464. numpy-1.9.2/numpy/core/include/numpy/ndarraytypes.h +0 -1820
  465. numpy-1.9.2/numpy/core/include/numpy/npy_3kcompat.h +0 -506
  466. numpy-1.9.2/numpy/core/include/numpy/npy_common.h +0 -1038
  467. numpy-1.9.2/numpy/core/include/numpy/npy_cpu.h +0 -122
  468. numpy-1.9.2/numpy/core/include/numpy/npy_endian.h +0 -49
  469. numpy-1.9.2/numpy/core/include/numpy/npy_math.h +0 -479
  470. numpy-1.9.2/numpy/core/include/numpy/numpyconfig.h +0 -35
  471. numpy-1.9.2/numpy/core/machar.py +0 -338
  472. numpy-1.9.2/numpy/core/memmap.py +0 -308
  473. numpy-1.9.2/numpy/core/numeric.py +0 -2842
  474. numpy-1.9.2/numpy/core/numerictypes.py +0 -1042
  475. numpy-1.9.2/numpy/core/records.py +0 -804
  476. numpy-1.9.2/numpy/core/setup.py +0 -1016
  477. numpy-1.9.2/numpy/core/setup_common.py +0 -321
  478. numpy-1.9.2/numpy/core/shape_base.py +0 -277
  479. numpy-1.9.2/numpy/core/src/multiarray/alloc.c +0 -241
  480. numpy-1.9.2/numpy/core/src/multiarray/arrayobject.c +0 -1791
  481. numpy-1.9.2/numpy/core/src/multiarray/arraytypes.c.src +0 -4372
  482. numpy-1.9.2/numpy/core/src/multiarray/arraytypes.h +0 -13
  483. numpy-1.9.2/numpy/core/src/multiarray/buffer.c +0 -954
  484. numpy-1.9.2/numpy/core/src/multiarray/calculation.c +0 -1229
  485. numpy-1.9.2/numpy/core/src/multiarray/common.c +0 -798
  486. numpy-1.9.2/numpy/core/src/multiarray/common.h +0 -328
  487. numpy-1.9.2/numpy/core/src/multiarray/conversion_utils.c +0 -1240
  488. numpy-1.9.2/numpy/core/src/multiarray/convert.c +0 -589
  489. numpy-1.9.2/numpy/core/src/multiarray/convert_datatype.c +0 -2199
  490. numpy-1.9.2/numpy/core/src/multiarray/ctors.c +0 -3785
  491. numpy-1.9.2/numpy/core/src/multiarray/datetime.c +0 -3823
  492. numpy-1.9.2/numpy/core/src/multiarray/datetime_busday.c +0 -1322
  493. numpy-1.9.2/numpy/core/src/multiarray/datetime_busdaycal.c +0 -552
  494. numpy-1.9.2/numpy/core/src/multiarray/datetime_strings.c +0 -1772
  495. numpy-1.9.2/numpy/core/src/multiarray/descriptor.c +0 -3658
  496. numpy-1.9.2/numpy/core/src/multiarray/dtype_transfer.c +0 -4232
  497. numpy-1.9.2/numpy/core/src/multiarray/einsum.c.src +0 -3013
  498. numpy-1.9.2/numpy/core/src/multiarray/getset.c +0 -984
  499. numpy-1.9.2/numpy/core/src/multiarray/hashdescr.c +0 -319
  500. numpy-1.9.2/numpy/core/src/multiarray/item_selection.c +0 -2711
  501. numpy-1.9.2/numpy/core/src/multiarray/iterators.c +0 -2160
  502. numpy-1.9.2/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +0 -1767
  503. numpy-1.9.2/numpy/core/src/multiarray/mapping.c +0 -3316
  504. numpy-1.9.2/numpy/core/src/multiarray/mapping.h +0 -73
  505. numpy-1.9.2/numpy/core/src/multiarray/methods.c +0 -2497
  506. numpy-1.9.2/numpy/core/src/multiarray/multiarray_tests.c.src +0 -977
  507. numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule.c +0 -4202
  508. numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule.h +0 -4
  509. numpy-1.9.2/numpy/core/src/multiarray/multiarraymodule_onefile.c +0 -58
  510. numpy-1.9.2/numpy/core/src/multiarray/nditer_api.c +0 -2809
  511. numpy-1.9.2/numpy/core/src/multiarray/nditer_constr.c +0 -3159
  512. numpy-1.9.2/numpy/core/src/multiarray/nditer_pywrap.c +0 -2492
  513. numpy-1.9.2/numpy/core/src/multiarray/number.c +0 -1057
  514. numpy-1.9.2/numpy/core/src/multiarray/number.h +0 -76
  515. numpy-1.9.2/numpy/core/src/multiarray/numpymemoryview.c +0 -309
  516. numpy-1.9.2/numpy/core/src/multiarray/numpyos.c +0 -683
  517. numpy-1.9.2/numpy/core/src/multiarray/scalarapi.c +0 -861
  518. numpy-1.9.2/numpy/core/src/multiarray/scalartypes.c.src +0 -4270
  519. numpy-1.9.2/numpy/core/src/multiarray/scalartypes.h +0 -52
  520. numpy-1.9.2/numpy/core/src/multiarray/shape.c +0 -1141
  521. numpy-1.9.2/numpy/core/src/multiarray/ucsnarrow.c +0 -173
  522. numpy-1.9.2/numpy/core/src/npymath/ieee754.c.src +0 -814
  523. numpy-1.9.2/numpy/core/src/npymath/npy_math.c.src +0 -527
  524. numpy-1.9.2/numpy/core/src/npymath/npy_math_complex.c.src +0 -291
  525. numpy-1.9.2/numpy/core/src/npymath/npy_math_private.h +0 -539
  526. numpy-1.9.2/numpy/core/src/npysort/heapsort.c.src +0 -341
  527. numpy-1.9.2/numpy/core/src/npysort/mergesort.c.src +0 -428
  528. numpy-1.9.2/numpy/core/src/npysort/npysort_common.h +0 -367
  529. numpy-1.9.2/numpy/core/src/npysort/quicksort.c.src +0 -363
  530. numpy-1.9.2/numpy/core/src/npysort/selection.c.src +0 -474
  531. numpy-1.9.2/numpy/core/src/private/npy_config.h +0 -44
  532. numpy-1.9.2/numpy/core/src/private/npy_partition.h.src +0 -138
  533. numpy-1.9.2/numpy/core/src/private/npy_sort.h +0 -194
  534. numpy-1.9.2/numpy/core/src/private/scalarmathmodule.h.src +0 -42
  535. numpy-1.9.2/numpy/core/src/private/ufunc_override.h +0 -384
  536. numpy-1.9.2/numpy/core/src/scalarmathmodule.c.src +0 -1980
  537. numpy-1.9.2/numpy/core/src/umath/funcs.inc.src +0 -715
  538. numpy-1.9.2/numpy/core/src/umath/loops.c.src +0 -2654
  539. numpy-1.9.2/numpy/core/src/umath/loops.h.src +0 -501
  540. numpy-1.9.2/numpy/core/src/umath/operand_flag_tests.c.src +0 -105
  541. numpy-1.9.2/numpy/core/src/umath/simd.inc.src +0 -881
  542. numpy-1.9.2/numpy/core/src/umath/test_rational.c.src +0 -1404
  543. numpy-1.9.2/numpy/core/src/umath/ufunc_object.c +0 -5520
  544. numpy-1.9.2/numpy/core/src/umath/ufunc_type_resolution.c +0 -2164
  545. numpy-1.9.2/numpy/core/src/umath/umath_tests.c.src +0 -341
  546. numpy-1.9.2/numpy/core/src/umath/umathmodule.c +0 -561
  547. numpy-1.9.2/numpy/core/src/umath/umathmodule_onefile.c +0 -6
  548. numpy-1.9.2/numpy/core/tests/test_abc.py +0 -45
  549. numpy-1.9.2/numpy/core/tests/test_api.py +0 -514
  550. numpy-1.9.2/numpy/core/tests/test_arrayprint.py +0 -167
  551. numpy-1.9.2/numpy/core/tests/test_blasdot.py +0 -249
  552. numpy-1.9.2/numpy/core/tests/test_datetime.py +0 -1781
  553. numpy-1.9.2/numpy/core/tests/test_defchararray.py +0 -642
  554. numpy-1.9.2/numpy/core/tests/test_deprecations.py +0 -512
  555. numpy-1.9.2/numpy/core/tests/test_dtype.py +0 -542
  556. numpy-1.9.2/numpy/core/tests/test_einsum.py +0 -583
  557. numpy-1.9.2/numpy/core/tests/test_errstate.py +0 -51
  558. numpy-1.9.2/numpy/core/tests/test_function_base.py +0 -111
  559. numpy-1.9.2/numpy/core/tests/test_getlimits.py +0 -86
  560. numpy-1.9.2/numpy/core/tests/test_half.py +0 -439
  561. numpy-1.9.2/numpy/core/tests/test_indexerrors.py +0 -127
  562. numpy-1.9.2/numpy/core/tests/test_indexing.py +0 -1014
  563. numpy-1.9.2/numpy/core/tests/test_item_selection.py +0 -70
  564. numpy-1.9.2/numpy/core/tests/test_machar.py +0 -30
  565. numpy-1.9.2/numpy/core/tests/test_memmap.py +0 -127
  566. numpy-1.9.2/numpy/core/tests/test_multiarray.py +0 -4645
  567. numpy-1.9.2/numpy/core/tests/test_multiarray_assignment.py +0 -80
  568. numpy-1.9.2/numpy/core/tests/test_nditer.py +0 -2630
  569. numpy-1.9.2/numpy/core/tests/test_numeric.py +0 -2117
  570. numpy-1.9.2/numpy/core/tests/test_numerictypes.py +0 -377
  571. numpy-1.9.2/numpy/core/tests/test_print.py +0 -245
  572. numpy-1.9.2/numpy/core/tests/test_records.py +0 -185
  573. numpy-1.9.2/numpy/core/tests/test_regression.py +0 -2108
  574. numpy-1.9.2/numpy/core/tests/test_scalarinherit.py +0 -34
  575. numpy-1.9.2/numpy/core/tests/test_scalarmath.py +0 -275
  576. numpy-1.9.2/numpy/core/tests/test_shape_base.py +0 -250
  577. numpy-1.9.2/numpy/core/tests/test_ufunc.py +0 -1153
  578. numpy-1.9.2/numpy/core/tests/test_umath.py +0 -1695
  579. numpy-1.9.2/numpy/core/tests/test_umath_complex.py +0 -537
  580. numpy-1.9.2/numpy/core/tests/test_unicode.py +0 -357
  581. numpy-1.9.2/numpy/distutils/__init__.py +0 -39
  582. numpy-1.9.2/numpy/distutils/ccompiler.py +0 -656
  583. numpy-1.9.2/numpy/distutils/command/autodist.py +0 -43
  584. numpy-1.9.2/numpy/distutils/command/build.py +0 -39
  585. numpy-1.9.2/numpy/distutils/command/build_clib.py +0 -284
  586. numpy-1.9.2/numpy/distutils/command/build_ext.py +0 -503
  587. numpy-1.9.2/numpy/distutils/command/config.py +0 -476
  588. numpy-1.9.2/numpy/distutils/exec_command.py +0 -618
  589. numpy-1.9.2/numpy/distutils/fcompiler/compaq.py +0 -128
  590. numpy-1.9.2/numpy/distutils/fcompiler/gnu.py +0 -390
  591. numpy-1.9.2/numpy/distutils/fcompiler/intel.py +0 -205
  592. numpy-1.9.2/numpy/distutils/fcompiler/pg.py +0 -60
  593. numpy-1.9.2/numpy/distutils/fcompiler/sun.py +0 -52
  594. numpy-1.9.2/numpy/distutils/intelccompiler.py +0 -45
  595. numpy-1.9.2/numpy/distutils/lib2def.py +0 -116
  596. numpy-1.9.2/numpy/distutils/mingw32ccompiler.py +0 -582
  597. numpy-1.9.2/numpy/distutils/misc_util.py +0 -2271
  598. numpy-1.9.2/numpy/distutils/npy_pkg_config.py +0 -464
  599. numpy-1.9.2/numpy/distutils/system_info.py +0 -2319
  600. numpy-1.9.2/numpy/distutils/tests/f2py_ext/tests/test_fib2.py +0 -13
  601. numpy-1.9.2/numpy/distutils/tests/f2py_f90_ext/tests/test_foo.py +0 -12
  602. numpy-1.9.2/numpy/distutils/tests/gen_ext/tests/test_fib3.py +0 -12
  603. numpy-1.9.2/numpy/distutils/tests/pyrex_ext/tests/test_primes.py +0 -14
  604. numpy-1.9.2/numpy/distutils/tests/swig_ext/tests/test_example.py +0 -18
  605. numpy-1.9.2/numpy/distutils/tests/swig_ext/tests/test_example2.py +0 -16
  606. numpy-1.9.2/numpy/distutils/tests/test_fcompiler_gnu.py +0 -53
  607. numpy-1.9.2/numpy/distutils/tests/test_fcompiler_intel.py +0 -36
  608. numpy-1.9.2/numpy/distutils/tests/test_misc_util.py +0 -75
  609. numpy-1.9.2/numpy/distutils/tests/test_npy_pkg_config.py +0 -98
  610. numpy-1.9.2/numpy/distutils/unixccompiler.py +0 -113
  611. numpy-1.9.2/numpy/doc/byteswapping.py +0 -147
  612. numpy-1.9.2/numpy/doc/creation.py +0 -144
  613. numpy-1.9.2/numpy/doc/glossary.py +0 -418
  614. numpy-1.9.2/numpy/doc/indexing.py +0 -437
  615. numpy-1.9.2/numpy/doc/structured_arrays.py +0 -223
  616. numpy-1.9.2/numpy/f2py/__init__.py +0 -49
  617. numpy-1.9.2/numpy/f2py/auxfuncs.py +0 -711
  618. numpy-1.9.2/numpy/f2py/capi_maps.py +0 -773
  619. numpy-1.9.2/numpy/f2py/cb_rules.py +0 -539
  620. numpy-1.9.2/numpy/f2py/cfuncs.py +0 -1224
  621. numpy-1.9.2/numpy/f2py/common_rules.py +0 -132
  622. numpy-1.9.2/numpy/f2py/crackfortran.py +0 -2870
  623. numpy-1.9.2/numpy/f2py/diagnose.py +0 -149
  624. numpy-1.9.2/numpy/f2py/f2py2e.py +0 -598
  625. numpy-1.9.2/numpy/f2py/f2py_testing.py +0 -46
  626. numpy-1.9.2/numpy/f2py/f90mod_rules.py +0 -246
  627. numpy-1.9.2/numpy/f2py/func2subr.py +0 -291
  628. numpy-1.9.2/numpy/f2py/rules.py +0 -1448
  629. numpy-1.9.2/numpy/f2py/setup.py +0 -129
  630. numpy-1.9.2/numpy/f2py/src/fortranobject.c +0 -972
  631. numpy-1.9.2/numpy/f2py/src/fortranobject.h +0 -162
  632. numpy-1.9.2/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c +0 -223
  633. numpy-1.9.2/numpy/f2py/tests/test_array_from_pyobj.py +0 -559
  634. numpy-1.9.2/numpy/f2py/tests/test_assumed_shape.py +0 -37
  635. numpy-1.9.2/numpy/f2py/tests/test_callback.py +0 -132
  636. numpy-1.9.2/numpy/f2py/tests/test_kind.py +0 -36
  637. numpy-1.9.2/numpy/f2py/tests/test_mixed.py +0 -41
  638. numpy-1.9.2/numpy/f2py/tests/test_regression.py +0 -32
  639. numpy-1.9.2/numpy/f2py/tests/test_return_character.py +0 -142
  640. numpy-1.9.2/numpy/f2py/tests/test_return_complex.py +0 -169
  641. numpy-1.9.2/numpy/f2py/tests/test_return_integer.py +0 -178
  642. numpy-1.9.2/numpy/f2py/tests/test_return_logical.py +0 -187
  643. numpy-1.9.2/numpy/f2py/tests/test_return_real.py +0 -203
  644. numpy-1.9.2/numpy/f2py/tests/test_size.py +0 -47
  645. numpy-1.9.2/numpy/f2py/tests/util.py +0 -353
  646. numpy-1.9.2/numpy/f2py/use_rules.py +0 -109
  647. numpy-1.9.2/numpy/fft/fftpack.c +0 -1501
  648. numpy-1.9.2/numpy/fft/fftpack.h +0 -28
  649. numpy-1.9.2/numpy/fft/fftpack.py +0 -1169
  650. numpy-1.9.2/numpy/fft/fftpack_litemodule.c +0 -371
  651. numpy-1.9.2/numpy/fft/info.py +0 -179
  652. numpy-1.9.2/numpy/fft/setup.py +0 -20
  653. numpy-1.9.2/numpy/fft/tests/test_fftpack.py +0 -75
  654. numpy-1.9.2/numpy/fft/tests/test_helper.py +0 -78
  655. numpy-1.9.2/numpy/lib/_iotools.py +0 -891
  656. numpy-1.9.2/numpy/lib/arraypad.py +0 -1475
  657. numpy-1.9.2/numpy/lib/arraysetops.py +0 -464
  658. numpy-1.9.2/numpy/lib/arrayterator.py +0 -226
  659. numpy-1.9.2/numpy/lib/financial.py +0 -737
  660. numpy-1.9.2/numpy/lib/format.py +0 -771
  661. numpy-1.9.2/numpy/lib/function_base.py +0 -3884
  662. numpy-1.9.2/numpy/lib/index_tricks.py +0 -869
  663. numpy-1.9.2/numpy/lib/info.py +0 -151
  664. numpy-1.9.2/numpy/lib/nanfunctions.py +0 -1158
  665. numpy-1.9.2/numpy/lib/npyio.py +0 -1918
  666. numpy-1.9.2/numpy/lib/polynomial.py +0 -1271
  667. numpy-1.9.2/numpy/lib/recfunctions.py +0 -1003
  668. numpy-1.9.2/numpy/lib/setup.py +0 -23
  669. numpy-1.9.2/numpy/lib/shape_base.py +0 -865
  670. numpy-1.9.2/numpy/lib/src/_compiled_base.c +0 -1761
  671. numpy-1.9.2/numpy/lib/stride_tricks.py +0 -123
  672. numpy-1.9.2/numpy/lib/tests/test__iotools.py +0 -326
  673. numpy-1.9.2/numpy/lib/tests/test__version.py +0 -57
  674. numpy-1.9.2/numpy/lib/tests/test_arraypad.py +0 -560
  675. numpy-1.9.2/numpy/lib/tests/test_arraysetops.py +0 -301
  676. numpy-1.9.2/numpy/lib/tests/test_financial.py +0 -160
  677. numpy-1.9.2/numpy/lib/tests/test_format.py +0 -716
  678. numpy-1.9.2/numpy/lib/tests/test_function_base.py +0 -2145
  679. numpy-1.9.2/numpy/lib/tests/test_index_tricks.py +0 -289
  680. numpy-1.9.2/numpy/lib/tests/test_io.py +0 -1754
  681. numpy-1.9.2/numpy/lib/tests/test_nanfunctions.py +0 -774
  682. numpy-1.9.2/numpy/lib/tests/test_polynomial.py +0 -177
  683. numpy-1.9.2/numpy/lib/tests/test_recfunctions.py +0 -705
  684. numpy-1.9.2/numpy/lib/tests/test_shape_base.py +0 -368
  685. numpy-1.9.2/numpy/lib/tests/test_stride_tricks.py +0 -238
  686. numpy-1.9.2/numpy/lib/tests/test_twodim_base.py +0 -504
  687. numpy-1.9.2/numpy/lib/tests/test_type_check.py +0 -328
  688. numpy-1.9.2/numpy/lib/twodim_base.py +0 -1003
  689. numpy-1.9.2/numpy/lib/type_check.py +0 -605
  690. numpy-1.9.2/numpy/lib/utils.py +0 -1176
  691. numpy-1.9.2/numpy/linalg/lapack_lite/python_xerbla.c +0 -47
  692. numpy-1.9.2/numpy/linalg/lapack_litemodule.c +0 -362
  693. numpy-1.9.2/numpy/linalg/linalg.py +0 -2136
  694. numpy-1.9.2/numpy/linalg/tests/test_build.py +0 -53
  695. numpy-1.9.2/numpy/linalg/tests/test_linalg.py +0 -1156
  696. numpy-1.9.2/numpy/linalg/tests/test_regression.py +0 -90
  697. numpy-1.9.2/numpy/linalg/umath_linalg.c.src +0 -3210
  698. numpy-1.9.2/numpy/ma/__init__.py +0 -58
  699. numpy-1.9.2/numpy/ma/bench.py +0 -166
  700. numpy-1.9.2/numpy/ma/core.py +0 -7374
  701. numpy-1.9.2/numpy/ma/extras.py +0 -1932
  702. numpy-1.9.2/numpy/ma/mrecords.py +0 -734
  703. numpy-1.9.2/numpy/ma/setup.py +0 -20
  704. numpy-1.9.2/numpy/ma/tests/test_core.py +0 -3706
  705. numpy-1.9.2/numpy/ma/tests/test_extras.py +0 -954
  706. numpy-1.9.2/numpy/ma/tests/test_mrecords.py +0 -521
  707. numpy-1.9.2/numpy/ma/tests/test_old_ma.py +0 -869
  708. numpy-1.9.2/numpy/ma/tests/test_regression.py +0 -75
  709. numpy-1.9.2/numpy/ma/tests/test_subclassing.py +0 -236
  710. numpy-1.9.2/numpy/ma/testutils.py +0 -240
  711. numpy-1.9.2/numpy/ma/timer_comparison.py +0 -459
  712. numpy-1.9.2/numpy/matlib.py +0 -358
  713. numpy-1.9.2/numpy/matrixlib/defmatrix.py +0 -1094
  714. numpy-1.9.2/numpy/matrixlib/tests/test_defmatrix.py +0 -400
  715. numpy-1.9.2/numpy/matrixlib/tests/test_multiarray.py +0 -18
  716. numpy-1.9.2/numpy/matrixlib/tests/test_numeric.py +0 -10
  717. numpy-1.9.2/numpy/matrixlib/tests/test_regression.py +0 -34
  718. numpy-1.9.2/numpy/polynomial/_polybase.py +0 -962
  719. numpy-1.9.2/numpy/polynomial/chebyshev.py +0 -2056
  720. numpy-1.9.2/numpy/polynomial/hermite.py +0 -1789
  721. numpy-1.9.2/numpy/polynomial/hermite_e.py +0 -1786
  722. numpy-1.9.2/numpy/polynomial/laguerre.py +0 -1781
  723. numpy-1.9.2/numpy/polynomial/legendre.py +0 -1809
  724. numpy-1.9.2/numpy/polynomial/polytemplate.py +0 -927
  725. numpy-1.9.2/numpy/polynomial/polyutils.py +0 -403
  726. numpy-1.9.2/numpy/random/mtrand/distributions.c +0 -892
  727. numpy-1.9.2/numpy/random/mtrand/mtrand.c +0 -31204
  728. numpy-1.9.2/numpy/random/mtrand/mtrand.pyx +0 -4706
  729. numpy-1.9.2/numpy/random/setup.py +0 -74
  730. numpy-1.9.2/numpy/random/tests/test_random.py +0 -707
  731. numpy-1.9.2/numpy/random/tests/test_regression.py +0 -86
  732. numpy-1.9.2/numpy/setup.py +0 -27
  733. numpy-1.9.2/numpy/testing/__init__.py +0 -16
  734. numpy-1.9.2/numpy/testing/decorators.py +0 -271
  735. numpy-1.9.2/numpy/testing/noseclasses.py +0 -353
  736. numpy-1.9.2/numpy/testing/nosetester.py +0 -504
  737. numpy-1.9.2/numpy/testing/print_coercion_tables.py +0 -89
  738. numpy-1.9.2/numpy/testing/setup.py +0 -20
  739. numpy-1.9.2/numpy/testing/tests/test_decorators.py +0 -185
  740. numpy-1.9.2/numpy/testing/tests/test_utils.py +0 -558
  741. numpy-1.9.2/numpy/testing/utils.py +0 -1715
  742. numpy-1.9.2/numpy/tests/test_ctypeslib.py +0 -102
  743. numpy-1.9.2/numpy/tests/test_matlib.py +0 -55
  744. numpy-1.9.2/numpy/version.py +0 -10
  745. numpy-1.9.2/setup.py +0 -251
  746. numpy-1.9.2/site.cfg.example +0 -157
  747. numpy-1.9.2/tools/swig/README +0 -135
  748. numpy-1.9.2/tools/swig/numpy.i +0 -3085
  749. numpy-1.9.2/tools/swig/test/Array.i +0 -102
  750. numpy-1.9.2/tools/swig/test/Makefile +0 -34
  751. numpy-1.9.2/tools/swig/test/setup.py +0 -64
  752. numpy-1.9.2/tools/swig/test/testArray.py +0 -284
  753. numpy-1.9.2/tools/swig/test/testFarray.py +0 -159
  754. numpy-1.9.2/tools/swig/test/testFortran.py +0 -173
  755. numpy-1.9.2/tools/swig/test/testMatrix.py +0 -362
  756. numpy-1.9.2/tools/swig/test/testSuperTensor.py +0 -388
  757. numpy-1.9.2/tools/swig/test/testTensor.py +0 -402
  758. numpy-1.9.2/tools/swig/test/testVector.py +0 -381
  759. {numpy-1.9.2 → numpy-1.10.0.post2}/BENTO_BUILD.txt +0 -0
  760. {numpy-1.9.2 → numpy-1.10.0.post2}/COMPATIBILITY +0 -0
  761. {numpy-1.9.2 → numpy-1.10.0.post2}/DEV_README.txt +0 -0
  762. {numpy-1.9.2 → numpy-1.10.0.post2}/README.txt +0 -0
  763. {numpy-1.9.2 → numpy-1.10.0.post2}/THANKS.txt +0 -0
  764. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/Makefile +0 -0
  765. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/BUGS.txt +0 -0
  766. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/FAQ.txt +0 -0
  767. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/HISTORY.txt +0 -0
  768. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Makefile +0 -0
  769. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/OLDNEWS.txt +0 -0
  770. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/README.txt +0 -0
  771. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-1.x.txt +0 -0
  772. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-2.x.txt +0 -0
  773. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-3.x.txt +0 -0
  774. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/Release-4.x.txt +0 -0
  775. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/TESTING.txt +0 -0
  776. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/THANKS.txt +0 -0
  777. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/TODO.txt +0 -0
  778. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/apps.tex +0 -0
  779. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/bugs.tex +0 -0
  780. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/collectinput.py +0 -0
  781. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/commands.tex +0 -0
  782. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/default.css +0 -0
  783. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/docutils.conf +0 -0
  784. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/arr.f +0 -0
  785. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/bar.f +0 -0
  786. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foo.f +0 -0
  787. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar-smart.f90 +0 -0
  788. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobar.f90 +0 -0
  789. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/foobarmodule.tex +0 -0
  790. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/ex1/runme +0 -0
  791. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2py.1 +0 -0
  792. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2py2e.tex +0 -0
  793. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/README.txt +0 -0
  794. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/aerostructure.jpg +0 -0
  795. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/flow.jpg +0 -0
  796. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_html.sh +0 -0
  797. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_pdf.sh +0 -0
  798. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/mk_ps.sh +0 -0
  799. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1.f +0 -0
  800. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1mess.txt +0 -0
  801. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/exp1session.txt +0 -0
  802. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foo.pyf +0 -0
  803. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/src/examples/foom.pyf +0 -0
  804. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/f2python9-final/structure.jpg +0 -0
  805. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/fortranobject.tex +0 -0
  806. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/hello.f +0 -0
  807. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/index.html +0 -0
  808. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/intro.tex +0 -0
  809. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/array_from_pyobj.c +0 -0
  810. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/bar.c +0 -0
  811. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/foo.f +0 -0
  812. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/fortran_array_from_pyobj.txt +0 -0
  813. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/fun.pyf +0 -0
  814. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/run.pyf +0 -0
  815. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarray/transpose.txt +0 -0
  816. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/multiarrays.txt +0 -0
  817. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/notes.tex +0 -0
  818. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/oldnews.html +0 -0
  819. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/options.tex +0 -0
  820. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/pyforttest.pyf +0 -0
  821. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/pytest.py +0 -0
  822. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/python9.tex +0 -0
  823. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/signaturefile.tex +0 -0
  824. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/simple.f +0 -0
  825. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/simple_session.dat +0 -0
  826. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/using_F_compiler.txt +0 -0
  827. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/f2py/win32_notes.txt +0 -0
  828. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/postprocess.py +0 -0
  829. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.3.0-notes.rst +0 -0
  830. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.4.0-notes.rst +0 -0
  831. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.5.0-notes.rst +0 -0
  832. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.0-notes.rst +0 -0
  833. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.1-notes.rst +0 -0
  834. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.6.2-notes.rst +0 -0
  835. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.0-notes.rst +0 -0
  836. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.1-notes.rst +0 -0
  837. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.7.2-notes.rst +0 -0
  838. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.0-notes.rst +0 -0
  839. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.1-notes.rst +0 -0
  840. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.8.2-notes.rst +0 -0
  841. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.0-notes.rst +0 -0
  842. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.1-notes.rst +0 -0
  843. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/1.9.2-notes.rst +0 -0
  844. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/release/time_based_proposal.rst +0 -0
  845. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/.gitignore +0 -0
  846. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/Makefile +0 -0
  847. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/README.rst +0 -0
  848. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_static/scipyshiny_small.png +0 -0
  849. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/layout.html +0 -0
  850. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/searchbox.html +0 -0
  851. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/sourcelink.html +0 -0
  852. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/extend.css +0 -0
  853. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/pygments.css +0 -0
  854. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/scipy-central.css +0 -0
  855. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-bootstrap.css +0 -0
  856. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/css/spc-extend.css +0 -0
  857. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/all-icons.svg +0 -0
  858. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/contents.png +0 -0
  859. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/create-new-account-icon.png +0 -0
  860. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon-shrunk.png +0 -0
  861. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.png +0 -0
  862. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-icon.svg +0 -0
  863. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiniest.png +0 -0
  864. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon-tiny.png +0 -0
  865. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/external-link-list-icon.png +0 -0
  866. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ad.png +0 -0
  867. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ae.png +0 -0
  868. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-af.png +0 -0
  869. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ag.png +0 -0
  870. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ai.png +0 -0
  871. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-al.png +0 -0
  872. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-am.png +0 -0
  873. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ao.png +0 -0
  874. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aq.png +0 -0
  875. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ar.png +0 -0
  876. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-as.png +0 -0
  877. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-at.png +0 -0
  878. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-au.png +0 -0
  879. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-aw.png +0 -0
  880. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-az.png +0 -0
  881. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ba.png +0 -0
  882. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bb.png +0 -0
  883. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bd.png +0 -0
  884. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-be.png +0 -0
  885. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bf.png +0 -0
  886. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bg.png +0 -0
  887. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bh.png +0 -0
  888. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bi.png +0 -0
  889. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bj.png +0 -0
  890. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bl.png +0 -0
  891. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bm.png +0 -0
  892. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bn.png +0 -0
  893. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bo.png +0 -0
  894. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-br.png +0 -0
  895. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bs.png +0 -0
  896. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bt.png +0 -0
  897. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bw.png +0 -0
  898. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-by.png +0 -0
  899. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-bz.png +0 -0
  900. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ca.png +0 -0
  901. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cc.png +0 -0
  902. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cd.png +0 -0
  903. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cf.png +0 -0
  904. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cg.png +0 -0
  905. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ch.png +0 -0
  906. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ci.png +0 -0
  907. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ck.png +0 -0
  908. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cl.png +0 -0
  909. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cm.png +0 -0
  910. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cn.png +0 -0
  911. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-co.png +0 -0
  912. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cr.png +0 -0
  913. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cu.png +0 -0
  914. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cv.png +0 -0
  915. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cw.png +0 -0
  916. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cx.png +0 -0
  917. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cy.png +0 -0
  918. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-cz.png +0 -0
  919. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-de.png +0 -0
  920. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dj.png +0 -0
  921. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dk.png +0 -0
  922. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dm.png +0 -0
  923. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-do.png +0 -0
  924. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-dz.png +0 -0
  925. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ec.png +0 -0
  926. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ee.png +0 -0
  927. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-eg.png +0 -0
  928. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-er.png +0 -0
  929. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-es.png +0 -0
  930. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-et.png +0 -0
  931. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fi.png +0 -0
  932. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fj.png +0 -0
  933. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fk.png +0 -0
  934. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fm.png +0 -0
  935. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fo.png +0 -0
  936. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-fr.png +0 -0
  937. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ga.png +0 -0
  938. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gb.png +0 -0
  939. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gd.png +0 -0
  940. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ge.png +0 -0
  941. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gf.png +0 -0
  942. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gg.png +0 -0
  943. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gh.png +0 -0
  944. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gi.png +0 -0
  945. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gl.png +0 -0
  946. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gm.png +0 -0
  947. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gn.png +0 -0
  948. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gq.png +0 -0
  949. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gr.png +0 -0
  950. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gs.png +0 -0
  951. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gt.png +0 -0
  952. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gu.png +0 -0
  953. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gw.png +0 -0
  954. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-gy.png +0 -0
  955. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hk.png +0 -0
  956. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hm.png +0 -0
  957. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hn.png +0 -0
  958. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hr.png +0 -0
  959. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ht.png +0 -0
  960. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-hu.png +0 -0
  961. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-id.png +0 -0
  962. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ie.png +0 -0
  963. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-il.png +0 -0
  964. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-im.png +0 -0
  965. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-in.png +0 -0
  966. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-io.png +0 -0
  967. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-iq.png +0 -0
  968. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ir.png +0 -0
  969. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-is.png +0 -0
  970. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-it.png +0 -0
  971. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-je.png +0 -0
  972. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jm.png +0 -0
  973. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jo.png +0 -0
  974. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-jp.png +0 -0
  975. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ke.png +0 -0
  976. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kg.png +0 -0
  977. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kh.png +0 -0
  978. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ki.png +0 -0
  979. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-km.png +0 -0
  980. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kn.png +0 -0
  981. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kp.png +0 -0
  982. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kr.png +0 -0
  983. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kw.png +0 -0
  984. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ky.png +0 -0
  985. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-kz.png +0 -0
  986. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-la.png +0 -0
  987. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lb.png +0 -0
  988. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lc.png +0 -0
  989. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-li.png +0 -0
  990. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lk.png +0 -0
  991. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lr.png +0 -0
  992. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ls.png +0 -0
  993. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lt.png +0 -0
  994. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lu.png +0 -0
  995. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-lv.png +0 -0
  996. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ly.png +0 -0
  997. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ma.png +0 -0
  998. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mc.png +0 -0
  999. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-md.png +0 -0
  1000. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-me.png +0 -0
  1001. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mf.png +0 -0
  1002. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mg.png +0 -0
  1003. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mh.png +0 -0
  1004. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mk.png +0 -0
  1005. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ml.png +0 -0
  1006. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mm.png +0 -0
  1007. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mn.png +0 -0
  1008. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mo.png +0 -0
  1009. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mp.png +0 -0
  1010. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mq.png +0 -0
  1011. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mr.png +0 -0
  1012. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ms.png +0 -0
  1013. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mt.png +0 -0
  1014. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mu.png +0 -0
  1015. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mv.png +0 -0
  1016. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mw.png +0 -0
  1017. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mx.png +0 -0
  1018. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-my.png +0 -0
  1019. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-mz.png +0 -0
  1020. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-na.png +0 -0
  1021. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nc.png +0 -0
  1022. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ne.png +0 -0
  1023. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nf.png +0 -0
  1024. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ng.png +0 -0
  1025. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ni.png +0 -0
  1026. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nl.png +0 -0
  1027. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-no.png +0 -0
  1028. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-np.png +0 -0
  1029. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nr.png +0 -0
  1030. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nu.png +0 -0
  1031. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-nz.png +0 -0
  1032. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-om.png +0 -0
  1033. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pa.png +0 -0
  1034. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pe.png +0 -0
  1035. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pf.png +0 -0
  1036. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pg.png +0 -0
  1037. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ph.png +0 -0
  1038. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pk.png +0 -0
  1039. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pl.png +0 -0
  1040. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pm.png +0 -0
  1041. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pn.png +0 -0
  1042. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pr.png +0 -0
  1043. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ps.png +0 -0
  1044. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pt.png +0 -0
  1045. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-pw.png +0 -0
  1046. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-py.png +0 -0
  1047. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-qa.png +0 -0
  1048. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-re.png +0 -0
  1049. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ro.png +0 -0
  1050. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rs.png +0 -0
  1051. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ru.png +0 -0
  1052. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-rw.png +0 -0
  1053. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sa.png +0 -0
  1054. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sb.png +0 -0
  1055. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sc.png +0 -0
  1056. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sd.png +0 -0
  1057. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-se.png +0 -0
  1058. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sg.png +0 -0
  1059. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sh.png +0 -0
  1060. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-si.png +0 -0
  1061. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sj.png +0 -0
  1062. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sk.png +0 -0
  1063. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sl.png +0 -0
  1064. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sm.png +0 -0
  1065. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sn.png +0 -0
  1066. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-so.png +0 -0
  1067. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sr.png +0 -0
  1068. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-st.png +0 -0
  1069. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sv.png +0 -0
  1070. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sy.png +0 -0
  1071. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-sz.png +0 -0
  1072. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tc.png +0 -0
  1073. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-td.png +0 -0
  1074. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tf.png +0 -0
  1075. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tg.png +0 -0
  1076. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-th.png +0 -0
  1077. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tj.png +0 -0
  1078. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tk.png +0 -0
  1079. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tl.png +0 -0
  1080. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tm.png +0 -0
  1081. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tn.png +0 -0
  1082. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-to.png +0 -0
  1083. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tr.png +0 -0
  1084. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tt.png +0 -0
  1085. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tv.png +0 -0
  1086. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tw.png +0 -0
  1087. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-tz.png +0 -0
  1088. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ua.png +0 -0
  1089. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ug.png +0 -0
  1090. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-um.png +0 -0
  1091. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-us.png +0 -0
  1092. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uy.png +0 -0
  1093. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-uz.png +0 -0
  1094. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-va.png +0 -0
  1095. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vc.png +0 -0
  1096. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ve.png +0 -0
  1097. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vg.png +0 -0
  1098. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vi.png +0 -0
  1099. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vn.png +0 -0
  1100. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-vu.png +0 -0
  1101. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-wf.png +0 -0
  1102. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ws.png +0 -0
  1103. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-ye.png +0 -0
  1104. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-za.png +0 -0
  1105. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zm.png +0 -0
  1106. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/flags/flag-zw.png +0 -0
  1107. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings-white.png +0 -0
  1108. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/glyphicons-halflings.png +0 -0
  1109. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/important-icon.png +0 -0
  1110. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/information-icon.png +0 -0
  1111. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/internet-web-browser.png +0 -0
  1112. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon-shrunk.png +0 -0
  1113. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.png +0 -0
  1114. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-icon.svg +0 -0
  1115. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon-tiny.png +0 -0
  1116. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/multiple-file-list-icon.png +0 -0
  1117. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/navigation.png +0 -0
  1118. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon-tiny.png +0 -0
  1119. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/person-list-icon.png +0 -0
  1120. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy-logo.png +0 -0
  1121. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipy_org_logo.gif +0 -0
  1122. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipycentral_logo.png +0 -0
  1123. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/scipyshiny_small.png +0 -0
  1124. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/send-email-icon.png +0 -0
  1125. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon-shrunk.png +0 -0
  1126. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.png +0 -0
  1127. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-icon.svg +0 -0
  1128. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiniest.png +0 -0
  1129. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon-tiny.png +0 -0
  1130. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/single-file-list-icon.png +0 -0
  1131. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/transparent-pixel.gif +0 -0
  1132. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/img/ui-anim_basic_16x16.gif +0 -0
  1133. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/js/copybutton.js +0 -0
  1134. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/accordion.less +0 -0
  1135. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/alerts.less +0 -0
  1136. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/bootstrap.less +0 -0
  1137. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/breadcrumbs.less +0 -0
  1138. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/button-groups.less +0 -0
  1139. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/buttons.less +0 -0
  1140. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/carousel.less +0 -0
  1141. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/close.less +0 -0
  1142. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/code.less +0 -0
  1143. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/component-animations.less +0 -0
  1144. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/dropdowns.less +0 -0
  1145. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/forms.less +0 -0
  1146. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/grid.less +0 -0
  1147. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/hero-unit.less +0 -0
  1148. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/labels-badges.less +0 -0
  1149. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/layouts.less +0 -0
  1150. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/media.less +0 -0
  1151. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/mixins.less +0 -0
  1152. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/modals.less +0 -0
  1153. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navbar.less +0 -0
  1154. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/navs.less +0 -0
  1155. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pager.less +0 -0
  1156. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/pagination.less +0 -0
  1157. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/popovers.less +0 -0
  1158. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/progress-bars.less +0 -0
  1159. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/reset.less +0 -0
  1160. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-1200px-min.less +0 -0
  1161. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-767px-max.less +0 -0
  1162. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-768px-979px.less +0 -0
  1163. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-navbar.less +0 -0
  1164. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive-utilities.less +0 -0
  1165. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/responsive.less +0 -0
  1166. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/scaffolding.less +0 -0
  1167. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/sprites.less +0 -0
  1168. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tables.less +0 -0
  1169. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/thumbnails.less +0 -0
  1170. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/tooltip.less +0 -0
  1171. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/type.less +0 -0
  1172. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/utilities.less +0 -0
  1173. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/variables.less +0 -0
  1174. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/bootstrap/wells.less +0 -0
  1175. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-bootstrap.less +0 -0
  1176. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-content.less +0 -0
  1177. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-extend.less +0 -0
  1178. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-footer.less +0 -0
  1179. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-header.less +0 -0
  1180. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-rightsidebar.less +0 -0
  1181. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/less/spc-utils.less +0 -0
  1182. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/static/scipy.css_t +0 -0
  1183. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/_theme/scipy/theme.conf +0 -0
  1184. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/conf.py +0 -0
  1185. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/index.rst +0 -0
  1186. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc.rst +0 -0
  1187. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_2.rst +0 -0
  1188. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_3.rst +0 -0
  1189. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_autodoc_4.rst +0 -0
  1190. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/scipy-sphinx-theme/test_optimize.rst +0 -0
  1191. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/autosummary/class.rst +0 -0
  1192. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/indexcontent.html +0 -0
  1193. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/indexsidebar.html +0 -0
  1194. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/_templates/layout.html +0 -0
  1195. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/about.rst +0 -0
  1196. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/bugs.rst +0 -0
  1197. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/contents.rst +0 -0
  1198. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/configure_git.rst +0 -0
  1199. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/development_setup.rst +0 -0
  1200. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/dot2_dot3.rst +0 -0
  1201. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/following_latest.rst +0 -0
  1202. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/forking_button.png +0 -0
  1203. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_development.rst +0 -0
  1204. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_intro.rst +0 -0
  1205. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/git_resources.rst +0 -0
  1206. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash/pull_button.png +0 -0
  1207. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/dev/gitwash_links.txt +0 -0
  1208. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/advanced.rst +0 -0
  1209. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/allocarr.f90 +0 -0
  1210. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/allocarr_session.dat +0 -0
  1211. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/array.f +0 -0
  1212. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/array_session.dat +0 -0
  1213. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/calculate.f +0 -0
  1214. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/calculate_session.dat +0 -0
  1215. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback.f +0 -0
  1216. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback2.pyf +0 -0
  1217. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/callback_session.dat +0 -0
  1218. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/common.f +0 -0
  1219. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/common_session.dat +0 -0
  1220. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/compile_session.dat +0 -0
  1221. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/distutils.rst +0 -0
  1222. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/extcallback.f +0 -0
  1223. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/extcallback_session.dat +0 -0
  1224. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib1.f +0 -0
  1225. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib1.pyf +0 -0
  1226. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib2.pyf +0 -0
  1227. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/fib3.f +0 -0
  1228. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/ftype.f +0 -0
  1229. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/ftype_session.dat +0 -0
  1230. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/getting-started.rst +0 -0
  1231. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/index.rst +0 -0
  1232. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/moddata.f90 +0 -0
  1233. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/moddata_session.dat +0 -0
  1234. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/python-usage.rst +0 -0
  1235. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/run_main_session.dat +0 -0
  1236. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/scalar.f +0 -0
  1237. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/scalar_session.dat +0 -0
  1238. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/setup_example.py +0 -0
  1239. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/signature-file.rst +0 -0
  1240. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/spam.pyf +0 -0
  1241. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/spam_session.dat +0 -0
  1242. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/string.f +0 -0
  1243. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/string_session.dat +0 -0
  1244. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/usage.rst +0 -0
  1245. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/var.pyf +0 -0
  1246. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/f2py/var_session.dat +0 -0
  1247. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/glossary.rst +0 -0
  1248. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/license.rst +0 -0
  1249. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal.rst +0 -0
  1250. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/datetime-proposal3.rst +0 -0
  1251. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/deferred-ufunc-evaluation.rst +0 -0
  1252. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/generalized-ufuncs.rst +0 -0
  1253. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/groupby_additions.rst +0 -0
  1254. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/index.rst +0 -0
  1255. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/math_config_clean.rst +0 -0
  1256. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/missing-data.rst +0 -0
  1257. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/new-iterator-ufunc.rst +0 -0
  1258. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/newbugtracker.rst +0 -0
  1259. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/npy-format.rst +0 -0
  1260. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/structured_array_extensions.rst +0 -0
  1261. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/ufunc-overrides.rst +0 -0
  1262. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/neps/warnfix.rst +0 -0
  1263. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.datetime.rst +0 -0
  1264. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.nditer.rst +0 -0
  1265. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/arrays.rst +0 -0
  1266. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/c-api.deprecations.rst +0 -0
  1267. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/c-api.rst +0 -0
  1268. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/distutils.rst +0 -0
  1269. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.dia +0 -0
  1270. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.pdf +0 -0
  1271. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/dtype-hierarchy.png +0 -0
  1272. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.fig +0 -0
  1273. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.pdf +0 -0
  1274. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/figures/threefundamental.png +0 -0
  1275. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/internals.rst +0 -0
  1276. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.baseclass.rst +0 -0
  1277. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.generic.rst +0 -0
  1278. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/maskedarray.rst +0 -0
  1279. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.array-creation.rst +0 -0
  1280. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.bitwise.rst +0 -0
  1281. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.char.rst +0 -0
  1282. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.ctypeslib.rst +0 -0
  1283. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.datetime.rst +0 -0
  1284. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.dtype.rst +0 -0
  1285. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.dual.rst +0 -0
  1286. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.emath.rst +0 -0
  1287. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.err.rst +0 -0
  1288. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.fft.rst +0 -0
  1289. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.financial.rst +0 -0
  1290. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.functional.rst +0 -0
  1291. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.help.rst +0 -0
  1292. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.indexing.rst +0 -0
  1293. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.logic.rst +0 -0
  1294. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.math.rst +0 -0
  1295. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.matlib.rst +0 -0
  1296. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.numarray.rst +0 -0
  1297. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.oldnumeric.rst +0 -0
  1298. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.other.rst +0 -0
  1299. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.padding.rst +0 -0
  1300. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.chebyshev.rst +0 -0
  1301. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.classes.rst +0 -0
  1302. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite.rst +0 -0
  1303. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.hermite_e.rst +0 -0
  1304. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.laguerre.rst +0 -0
  1305. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.legendre.rst +0 -0
  1306. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.package.rst +0 -0
  1307. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.poly1d.rst +0 -0
  1308. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.polynomial.rst +0 -0
  1309. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.polynomials.rst +0 -0
  1310. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.random.rst +0 -0
  1311. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.rst +0 -0
  1312. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.set.rst +0 -0
  1313. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.testing.rst +0 -0
  1314. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/routines.window.rst +0 -0
  1315. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/reference/swig.rst +0 -0
  1316. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.broadcasting.rst +0 -0
  1317. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.byteswapping.rst +0 -0
  1318. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.creation.rst +0 -0
  1319. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.indexing.rst +0 -0
  1320. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.io.rst +0 -0
  1321. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.rst +0 -0
  1322. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.subclassing.rst +0 -0
  1323. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/basics.types.rst +0 -0
  1324. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/c-info.rst +0 -0
  1325. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/howtofind.rst +0 -0
  1326. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/index.rst +0 -0
  1327. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/introduction.rst +0 -0
  1328. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/misc.rst +0 -0
  1329. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/performance.rst +0 -0
  1330. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/source/user/whatisnumpy.rst +0 -0
  1331. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/.gitignore +0 -0
  1332. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/.travis.yml +0 -0
  1333. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/LICENSE.txt +0 -0
  1334. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/MANIFEST.in +0 -0
  1335. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/README.rst +0 -0
  1336. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/__init__.py +0 -0
  1337. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/comment_eater.py +0 -0
  1338. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/compiler_unparse.py +0 -0
  1339. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape.py +0 -0
  1340. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/docscrape_sphinx.py +0 -0
  1341. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/linkcode.py +0 -0
  1342. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/numpydoc.py +0 -0
  1343. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/phantom_import.py +0 -0
  1344. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/plot_directive.py +0 -0
  1345. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_docscrape.py +0 -0
  1346. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_linkcode.py +0 -0
  1347. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_phantom_import.py +0 -0
  1348. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_plot_directive.py +0 -0
  1349. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/tests/test_traitsdoc.py +0 -0
  1350. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/numpydoc/traitsdoc.py +0 -0
  1351. {numpy-1.9.2 → numpy-1.10.0.post2}/doc/sphinxext/setup.py +0 -0
  1352. {numpy-1.9.2/numpy/core/code_generators → numpy-1.10.0.post2/numpy/_build_utils}/__init__.py +0 -0
  1353. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/compat/__init__.py +0 -0
  1354. {numpy-1.9.2/numpy/distutils/tests/f2py_ext → numpy-1.10.0.post2/numpy/core/code_generators}/__init__.py +0 -0
  1355. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/code_generators/genapi.py +0 -0
  1356. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/code_generators/generate_numpy_api.py +0 -0
  1357. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/cversions.py +0 -0
  1358. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/_neighborhood_iterator_imp.h +0 -0
  1359. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/_numpyconfig.h.in +0 -0
  1360. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayobject.h +0 -0
  1361. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/arrayscalars.h +0 -0
  1362. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/halffloat.h +0 -0
  1363. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/noprefix.h +0 -0
  1364. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_1_7_deprecated_api.h +0 -0
  1365. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_interrupt.h +0 -0
  1366. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_no_deprecated_api.h +0 -0
  1367. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/npy_os.h +0 -0
  1368. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/old_defines.h +0 -0
  1369. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/oldnumeric.h +0 -0
  1370. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/ufuncobject.h +0 -0
  1371. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/include/numpy/utils.h +0 -0
  1372. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/info.py +0 -0
  1373. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/mlib.ini.in +0 -0
  1374. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/npymath.ini.in +0 -0
  1375. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/dummymodule.c +0 -0
  1376. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/_datetime.h +0 -0
  1377. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/alloc.h +0 -0
  1378. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.c +0 -0
  1379. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign.h +0 -0
  1380. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_array.c +0 -0
  1381. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/array_assign_scalar.c +0 -0
  1382. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/arrayobject.h +0 -0
  1383. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/buffer.h +0 -0
  1384. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/calculation.h +0 -0
  1385. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/conversion_utils.h +0 -0
  1386. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert.h +0 -0
  1387. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/convert_datatype.h +0 -0
  1388. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ctors.h +0 -0
  1389. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busday.h +0 -0
  1390. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_busdaycal.h +0 -0
  1391. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/datetime_strings.h +0 -0
  1392. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/descriptor.h +0 -0
  1393. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/flagsobject.c +0 -0
  1394. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/getset.h +0 -0
  1395. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/hashdescr.h +0 -0
  1396. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/item_selection.h +0 -0
  1397. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/iterators.h +0 -0
  1398. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/methods.h +0 -0
  1399. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_impl.h +0 -0
  1400. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_pywrap.h +0 -0
  1401. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/nditer_templ.c.src +0 -0
  1402. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpymemoryview.h +0 -0
  1403. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/numpyos.h +0 -0
  1404. {numpy-1.9.2/numpy/core/blasdot → numpy-1.10.0.post2/numpy/core/src/multiarray}/python_xerbla.c +0 -0
  1405. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.c +0 -0
  1406. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/refcount.h +0 -0
  1407. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.c +0 -0
  1408. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/sequence.h +0 -0
  1409. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/shape.h +0 -0
  1410. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/ucsnarrow.h +0 -0
  1411. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.c +0 -0
  1412. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/multiarray/usertypes.h +0 -0
  1413. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/_signbit.c +0 -0
  1414. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/halffloat.c +0 -0
  1415. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npymath/npy_math_common.h +0 -0
  1416. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/npysort/binsearch.c.src +0 -0
  1417. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/lowlevel_strided_loops.h +0 -0
  1418. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_binsearch.h.src +0 -0
  1419. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_fpmath.h +0 -0
  1420. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/private/npy_pycompat.h +0 -0
  1421. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.c +0 -0
  1422. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/reduction.h +0 -0
  1423. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/struct_ufunc_test.c.src +0 -0
  1424. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_object.h +0 -0
  1425. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/src/umath/ufunc_type_resolution.h +0 -0
  1426. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/data/astype_copy.pkl +0 -0
  1427. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/data/recarray_from_file.fits +0 -0
  1428. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/core/tests/test_scalarprint.py +0 -0
  1429. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/ctypeslib.py +0 -0
  1430. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/__version__.py +0 -0
  1431. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/__init__.py +0 -0
  1432. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/bdist_rpm.py +0 -0
  1433. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_py.py +0 -0
  1434. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_scripts.py +0 -0
  1435. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/build_src.py +0 -0
  1436. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/config_compiler.py +0 -0
  1437. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/develop.py +0 -0
  1438. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/egg_info.py +0 -0
  1439. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install.py +0 -0
  1440. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_clib.py +0 -0
  1441. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_data.py +0 -0
  1442. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/install_headers.py +0 -0
  1443. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/command/sdist.py +0 -0
  1444. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/compat.py +0 -0
  1445. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/conv_template.py +0 -0
  1446. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/core.py +0 -0
  1447. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/cpuinfo.py +0 -0
  1448. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/environment.py +0 -0
  1449. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/extension.py +0 -0
  1450. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/__init__.py +0 -0
  1451. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/absoft.py +0 -0
  1452. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/g95.py +0 -0
  1453. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/hpux.py +0 -0
  1454. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/ibm.py +0 -0
  1455. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/lahey.py +0 -0
  1456. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/mips.py +0 -0
  1457. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/nag.py +0 -0
  1458. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/none.py +0 -0
  1459. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/pathf95.py +0 -0
  1460. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/fcompiler/vast.py +0 -0
  1461. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/from_template.py +0 -0
  1462. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/info.py +0 -0
  1463. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/line_endings.py +0 -0
  1464. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/log.py +0 -0
  1465. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/mingw/gfortran_vs2003_hack.c +0 -0
  1466. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/numpy_distribution.py +0 -0
  1467. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/pathccompiler.py +0 -0
  1468. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/setup.py +0 -0
  1469. {numpy-1.9.2/numpy/distutils/tests/f2py_f90_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_ext}/__init__.py +0 -0
  1470. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/setup.py +0 -0
  1471. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib1.f +0 -0
  1472. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_ext/src/fib2.pyf +0 -0
  1473. {numpy-1.9.2/numpy/distutils/tests/gen_ext → numpy-1.10.0.post2/numpy/distutils/tests/f2py_f90_ext}/__init__.py +0 -0
  1474. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/include/body.f90 +0 -0
  1475. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/setup.py +0 -0
  1476. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/f2py_f90_ext/src/foo_free.f90 +0 -0
  1477. {numpy-1.9.2/numpy/distutils/tests/pyrex_ext → numpy-1.10.0.post2/numpy/distutils/tests/gen_ext}/__init__.py +0 -0
  1478. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/gen_ext/setup.py +0 -0
  1479. {numpy-1.9.2/numpy/distutils/tests/swig_ext → numpy-1.10.0.post2/numpy/distutils/tests/pyrex_ext}/__init__.py +0 -0
  1480. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/primes.pyx +0 -0
  1481. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/pyrex_ext/setup.py +0 -0
  1482. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/setup.py +0 -0
  1483. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/setup.py +0 -0
  1484. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.c +0 -0
  1485. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/example.i +0 -0
  1486. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.cc +0 -0
  1487. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.h +0 -0
  1488. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/swig_ext/src/zoo.i +0 -0
  1489. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/distutils/tests/test_exec_command.py +0 -0
  1490. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/__init__.py +0 -0
  1491. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/basics.py +0 -0
  1492. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/broadcasting.py +0 -0
  1493. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/constants.py +0 -0
  1494. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/howtofind.py +0 -0
  1495. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/internals.py +0 -0
  1496. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/io.py +0 -0
  1497. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/jargon.py +0 -0
  1498. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/methods_vs_functions.py +0 -0
  1499. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/misc.py +0 -0
  1500. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/performance.py +0 -0
  1501. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/subclassing.py +0 -0
  1502. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/doc/ufuncs.py +0 -0
  1503. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/dual.py +0 -0
  1504. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/__version__.py +0 -0
  1505. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/info.py +0 -0
  1506. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/.f2py_f2cmap +0 -0
  1507. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_free.f90 +0 -0
  1508. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_mod.f90 +0 -0
  1509. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/foo_use.f90 +0 -0
  1510. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/assumed_shape/precision.f90 +0 -0
  1511. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/kind/foo.f90 +0 -0
  1512. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo.f +0 -0
  1513. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_fixed.f90 +0 -0
  1514. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/mixed/foo_free.f90 +0 -0
  1515. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/regression/inout.f90 +0 -0
  1516. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/f2py/tests/src/size/foo.f90 +0 -0
  1517. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/fft/__init__.py +0 -0
  1518. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/fft/helper.py +0 -0
  1519. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/__init__.py +0 -0
  1520. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/_datasource.py +0 -0
  1521. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/_version.py +0 -0
  1522. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/scimath.py +0 -0
  1523. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/data/python3.npy +0 -0
  1524. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/data/win64python2.npy +0 -0
  1525. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test__datasource.py +0 -0
  1526. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_arrayterator.py +0 -0
  1527. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_regression.py +0 -0
  1528. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_ufunclike.py +0 -0
  1529. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/tests/test_utils.py +0 -0
  1530. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/ufunclike.py +0 -0
  1531. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/lib/user_array.py +0 -0
  1532. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/__init__.py +0 -0
  1533. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/info.py +0 -0
  1534. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/blas_lite.c +0 -0
  1535. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlamch.c +0 -0
  1536. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/dlapack_lite.c +0 -0
  1537. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c.h +0 -0
  1538. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/f2c_lite.c +0 -0
  1539. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/lapack_lite/zlapack_lite.c +0 -0
  1540. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/setup.py +0 -0
  1541. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/linalg/tests/test_deprecations.py +0 -0
  1542. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/ma/version.py +0 -0
  1543. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/matrixlib/__init__.py +0 -0
  1544. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/matrixlib/setup.py +0 -0
  1545. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/__init__.py +0 -0
  1546. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/polynomial.py +0 -0
  1547. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/setup.py +0 -0
  1548. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_chebyshev.py +0 -0
  1549. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_classes.py +0 -0
  1550. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite.py +0 -0
  1551. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_hermite_e.py +0 -0
  1552. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_laguerre.py +0 -0
  1553. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_legendre.py +0 -0
  1554. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polynomial.py +0 -0
  1555. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_polyutils.py +0 -0
  1556. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/polynomial/tests/test_printing.py +0 -0
  1557. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/__init__.py +0 -0
  1558. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/info.py +0 -0
  1559. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/Python.pxi +0 -0
  1560. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/distributions.h +0 -0
  1561. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/generate_mtrand_c.py +0 -0
  1562. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.c +0 -0
  1563. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/initarray.h +0 -0
  1564. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/mtrand_py_helper.h +0 -0
  1565. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/numpy.pxd +0 -0
  1566. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.c +0 -0
  1567. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/random/mtrand/randomkit.h +0 -0
  1568. {numpy-1.9.2 → numpy-1.10.0.post2}/numpy/testing/tests/test_doctesting.py +0 -0
  1569. {numpy-1.9.2 → numpy-1.10.0.post2}/setupegg.py +0 -0
  1570. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/Makefile +0 -0
  1571. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/pyfragments.swg +0 -0
  1572. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array1.cxx +0 -0
  1573. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array1.h +0 -0
  1574. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array2.cxx +0 -0
  1575. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Array2.h +0 -0
  1576. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.cxx +0 -0
  1577. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.h +0 -0
  1578. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Farray.i +0 -0
  1579. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.cxx +0 -0
  1580. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.h +0 -0
  1581. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Fortran.i +0 -0
  1582. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.cxx +0 -0
  1583. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.h +0 -0
  1584. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Matrix.i +0 -0
  1585. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.cxx +0 -0
  1586. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.h +0 -0
  1587. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/SuperTensor.i +0 -0
  1588. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.cxx +0 -0
  1589. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.h +0 -0
  1590. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Tensor.i +0 -0
  1591. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.cxx +0 -0
  1592. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.h +0 -0
  1593. {numpy-1.9.2 → numpy-1.10.0.post2}/tools/swig/test/Vector.i +0 -0
@@ -0,0 +1,3719 @@
1
+ /* Array Descr Object */
2
+
3
+ #define PY_SSIZE_T_CLEAN
4
+ #include <Python.h>
5
+ #include "structmember.h"
6
+
7
+ #define NPY_NO_DEPRECATED_API NPY_API_VERSION
8
+ #define _MULTIARRAYMODULE
9
+ #include "numpy/arrayobject.h"
10
+ #include "numpy/arrayscalars.h"
11
+
12
+ #include "npy_config.h"
13
+
14
+ #include "npy_pycompat.h"
15
+
16
+ #include "_datetime.h"
17
+ #include "common.h"
18
+ #include "descriptor.h"
19
+
20
+ /*
21
+ * offset: A starting offset.
22
+ * alignment: A power-of-two alignment.
23
+ *
24
+ * This macro returns the smallest value >= 'offset'
25
+ * that is divisible by 'alignment'. Because 'alignment'
26
+ * is a power of two and integers are twos-complement,
27
+ * it is possible to use some simple bit-fiddling to do this.
28
+ */
29
+ #define NPY_NEXT_ALIGNED_OFFSET(offset, alignment) \
30
+ (((offset) + (alignment) - 1) & (-(alignment)))
31
+
32
+ #define PyDictProxy_Check(obj) (Py_TYPE(obj) == &PyDictProxy_Type)
33
+
34
+ static PyObject *typeDict = NULL; /* Must be explicitly loaded */
35
+
36
+ static PyArray_Descr *
37
+ _use_inherit(PyArray_Descr *type, PyObject *newobj, int *errflag);
38
+
39
+ /*
40
+ * Creates a dtype object from ctypes inputs.
41
+ *
42
+ * Returns a new reference to a dtype object, or NULL
43
+ * if this is not possible. When it returns NULL, it does
44
+ * not set a Python exception.
45
+ */
46
+ static PyArray_Descr *
47
+ _arraydescr_fromctypes(PyObject *obj)
48
+ {
49
+ PyObject *dtypedescr;
50
+ PyArray_Descr *newdescr;
51
+ int ret;
52
+
53
+ /* Understand basic ctypes */
54
+ dtypedescr = PyObject_GetAttrString(obj, "_type_");
55
+ PyErr_Clear();
56
+ if (dtypedescr) {
57
+ ret = PyArray_DescrConverter(dtypedescr, &newdescr);
58
+ Py_DECREF(dtypedescr);
59
+ if (ret == NPY_SUCCEED) {
60
+ PyObject *length;
61
+ /* Check for ctypes arrays */
62
+ length = PyObject_GetAttrString(obj, "_length_");
63
+ PyErr_Clear();
64
+ if (length) {
65
+ /* derived type */
66
+ PyObject *newtup;
67
+ PyArray_Descr *derived;
68
+ newtup = Py_BuildValue("NN", newdescr, length);
69
+ ret = PyArray_DescrConverter(newtup, &derived);
70
+ Py_DECREF(newtup);
71
+ if (ret == NPY_SUCCEED) {
72
+ return derived;
73
+ }
74
+ PyErr_Clear();
75
+ return NULL;
76
+ }
77
+ return newdescr;
78
+ }
79
+ PyErr_Clear();
80
+ return NULL;
81
+ }
82
+ /* Understand ctypes structures --
83
+ bit-fields are not supported
84
+ automatically aligns */
85
+ dtypedescr = PyObject_GetAttrString(obj, "_fields_");
86
+ PyErr_Clear();
87
+ if (dtypedescr) {
88
+ ret = PyArray_DescrAlignConverter(dtypedescr, &newdescr);
89
+ Py_DECREF(dtypedescr);
90
+ if (ret == NPY_SUCCEED) {
91
+ return newdescr;
92
+ }
93
+ PyErr_Clear();
94
+ }
95
+
96
+ return NULL;
97
+ }
98
+
99
+ /*
100
+ * This function creates a dtype object when:
101
+ * - The object has a "dtype" attribute, and it can be converted
102
+ * to a dtype object.
103
+ * - The object is a ctypes type object, including array
104
+ * and structure types.
105
+ *
106
+ * Returns a new reference to a dtype object, or NULL
107
+ * if this is not possible. When it returns NULL, it does
108
+ * not set a Python exception.
109
+ */
110
+ NPY_NO_EXPORT PyArray_Descr *
111
+ _arraydescr_fromobj(PyObject *obj)
112
+ {
113
+ PyObject *dtypedescr;
114
+ PyArray_Descr *newdescr = NULL;
115
+ int ret;
116
+
117
+ /* For arbitrary objects that have a "dtype" attribute */
118
+ dtypedescr = PyObject_GetAttrString(obj, "dtype");
119
+ PyErr_Clear();
120
+ if (dtypedescr != NULL) {
121
+ ret = PyArray_DescrConverter(dtypedescr, &newdescr);
122
+ Py_DECREF(dtypedescr);
123
+ if (ret == NPY_SUCCEED) {
124
+ return newdescr;
125
+ }
126
+ PyErr_Clear();
127
+ }
128
+ return _arraydescr_fromctypes(obj);
129
+ }
130
+
131
+ /*
132
+ * Sets the global typeDict object, which is a dictionary mapping
133
+ * dtype names to numpy scalar types.
134
+ */
135
+ NPY_NO_EXPORT PyObject *
136
+ array_set_typeDict(PyObject *NPY_UNUSED(ignored), PyObject *args)
137
+ {
138
+ PyObject *dict;
139
+
140
+ if (!PyArg_ParseTuple(args, "O", &dict)) {
141
+ return NULL;
142
+ }
143
+ /* Decrement old reference (if any)*/
144
+ Py_XDECREF(typeDict);
145
+ typeDict = dict;
146
+ /* Create an internal reference to it */
147
+ Py_INCREF(dict);
148
+ Py_RETURN_NONE;
149
+ }
150
+
151
+ #define _chk_byteorder(arg) (arg == '>' || arg == '<' || \
152
+ arg == '|' || arg == '=')
153
+
154
+ static int
155
+ _check_for_commastring(char *type, Py_ssize_t len)
156
+ {
157
+ Py_ssize_t i;
158
+ int sqbracket;
159
+
160
+ /* Check for ints at start of string */
161
+ if ((type[0] >= '0'
162
+ && type[0] <= '9')
163
+ || ((len > 1)
164
+ && _chk_byteorder(type[0])
165
+ && (type[1] >= '0'
166
+ && type[1] <= '9'))) {
167
+ return 1;
168
+ }
169
+ /* Check for empty tuple */
170
+ if (((len > 1)
171
+ && (type[0] == '('
172
+ && type[1] == ')'))
173
+ || ((len > 3)
174
+ && _chk_byteorder(type[0])
175
+ && (type[1] == '('
176
+ && type[2] == ')'))) {
177
+ return 1;
178
+ }
179
+ /*
180
+ * Check for presence of commas outside square [] brackets. This
181
+ * allows commas inside of [], for parameterized dtypes to use.
182
+ */
183
+ sqbracket = 0;
184
+ for (i = 1; i < len; i++) {
185
+ switch (type[i]) {
186
+ case ',':
187
+ if (sqbracket == 0) {
188
+ return 1;
189
+ }
190
+ break;
191
+ case '[':
192
+ ++sqbracket;
193
+ break;
194
+ case ']':
195
+ --sqbracket;
196
+ break;
197
+ }
198
+ }
199
+ return 0;
200
+ }
201
+
202
+ #undef _chk_byteorder
203
+
204
+ static int
205
+ is_datetime_typestr(char *type, Py_ssize_t len)
206
+ {
207
+ if (len < 2) {
208
+ return 0;
209
+ }
210
+ if (type[1] == '8' && (type[0] == 'M' || type[0] == 'm')) {
211
+ return 1;
212
+ }
213
+ if (len < 10) {
214
+ return 0;
215
+ }
216
+ if (strncmp(type, "datetime64", 10) == 0) {
217
+ return 1;
218
+ }
219
+ if (len < 11) {
220
+ return 0;
221
+ }
222
+ if (strncmp(type, "timedelta64", 11) == 0) {
223
+ return 1;
224
+ }
225
+ return 0;
226
+ }
227
+
228
+ static PyArray_Descr *
229
+ _convert_from_tuple(PyObject *obj)
230
+ {
231
+ PyArray_Descr *type, *res;
232
+ PyObject *val;
233
+ int errflag;
234
+
235
+ if (PyTuple_GET_SIZE(obj) != 2) {
236
+ return NULL;
237
+ }
238
+ if (!PyArray_DescrConverter(PyTuple_GET_ITEM(obj,0), &type)) {
239
+ return NULL;
240
+ }
241
+ val = PyTuple_GET_ITEM(obj,1);
242
+ /* try to interpret next item as a type */
243
+ res = _use_inherit(type, val, &errflag);
244
+ if (res || errflag) {
245
+ Py_DECREF(type);
246
+ if (res) {
247
+ return res;
248
+ }
249
+ else {
250
+ return NULL;
251
+ }
252
+ }
253
+ PyErr_Clear();
254
+ /*
255
+ * We get here if res was NULL but errflag wasn't set
256
+ * --- i.e. the conversion to a data-descr failed in _use_inherit
257
+ */
258
+ if (type->elsize == 0) {
259
+ /* interpret next item as a typesize */
260
+ int itemsize = PyArray_PyIntAsInt(PyTuple_GET_ITEM(obj,1));
261
+
262
+ if (error_converting(itemsize)) {
263
+ PyErr_SetString(PyExc_ValueError,
264
+ "invalid itemsize in generic type tuple");
265
+ goto fail;
266
+ }
267
+ PyArray_DESCR_REPLACE(type);
268
+ if (type->type_num == NPY_UNICODE) {
269
+ type->elsize = itemsize << 2;
270
+ }
271
+ else {
272
+ type->elsize = itemsize;
273
+ }
274
+ }
275
+ else if (PyDict_Check(val) || PyDictProxy_Check(val)) {
276
+ /* Assume it's a metadata dictionary */
277
+ if (PyDict_Merge(type->metadata, val, 0) == -1) {
278
+ Py_DECREF(type);
279
+ return NULL;
280
+ }
281
+ }
282
+ else {
283
+ /*
284
+ * interpret next item as shape (if it's a tuple)
285
+ * and reset the type to NPY_VOID with
286
+ * a new fields attribute.
287
+ */
288
+ PyArray_Dims shape = {NULL, -1};
289
+ PyArray_Descr *newdescr;
290
+ npy_intp items;
291
+ int i;
292
+
293
+ if (!(PyArray_IntpConverter(val, &shape)) || (shape.len > NPY_MAXDIMS)) {
294
+ PyDimMem_FREE(shape.ptr);
295
+ PyErr_SetString(PyExc_ValueError,
296
+ "invalid shape in fixed-type tuple.");
297
+ goto fail;
298
+ }
299
+ /*
300
+ * If (type, 1) was given, it is equivalent to type...
301
+ * or (type, ()) was given it is equivalent to type...
302
+ */
303
+ if ((shape.len == 1
304
+ && shape.ptr[0] == 1
305
+ && PyNumber_Check(val))
306
+ || (shape.len == 0
307
+ && PyTuple_Check(val))) {
308
+ PyDimMem_FREE(shape.ptr);
309
+ return type;
310
+ }
311
+ newdescr = PyArray_DescrNewFromType(NPY_VOID);
312
+ if (newdescr == NULL) {
313
+ PyDimMem_FREE(shape.ptr);
314
+ goto fail;
315
+ }
316
+
317
+ /* validate and set shape */
318
+ for (i=0; i < shape.len; i++) {
319
+ if (shape.ptr[i] < 0) {
320
+ PyErr_SetString(PyExc_ValueError,
321
+ "invalid shape in fixed-type tuple: "
322
+ "dimension smaller then zero.");
323
+ PyDimMem_FREE(shape.ptr);
324
+ goto fail;
325
+ }
326
+ if (shape.ptr[i] > NPY_MAX_INT) {
327
+ PyErr_SetString(PyExc_ValueError,
328
+ "invalid shape in fixed-type tuple: "
329
+ "dimension does not fit into a C int.");
330
+ PyDimMem_FREE(shape.ptr);
331
+ goto fail;
332
+ }
333
+ }
334
+ items = PyArray_OverflowMultiplyList(shape.ptr, shape.len);
335
+ if ((items < 0) || (items > (NPY_MAX_INT / type->elsize))) {
336
+ PyErr_SetString(PyExc_ValueError,
337
+ "invalid shape in fixed-type tuple: dtype size in "
338
+ "bytes must fit into a C int.");
339
+ PyDimMem_FREE(shape.ptr);
340
+ goto fail;
341
+ }
342
+ newdescr->elsize = type->elsize * items;
343
+ if (newdescr->elsize == -1) {
344
+ PyDimMem_FREE(shape.ptr);
345
+ goto fail;
346
+ }
347
+
348
+ newdescr->subarray = PyArray_malloc(sizeof(PyArray_ArrayDescr));
349
+ if (newdescr->subarray == NULL) {
350
+ Py_DECREF(newdescr);
351
+ PyErr_NoMemory();
352
+ goto fail;
353
+ }
354
+ newdescr->flags = type->flags;
355
+ newdescr->alignment = type->alignment;
356
+ newdescr->subarray->base = type;
357
+ type = NULL;
358
+ Py_XDECREF(newdescr->fields);
359
+ Py_XDECREF(newdescr->names);
360
+ newdescr->fields = NULL;
361
+ newdescr->names = NULL;
362
+
363
+ /*
364
+ * Create a new subarray->shape tuple (it can be an arbitrary
365
+ * sequence of integer like objects, neither of which is safe.
366
+ */
367
+ newdescr->subarray->shape = PyTuple_New(shape.len);
368
+ if (newdescr->subarray->shape == NULL) {
369
+ PyDimMem_FREE(shape.ptr);
370
+ goto fail;
371
+ }
372
+ for (i=0; i < shape.len; i++) {
373
+ PyTuple_SET_ITEM(newdescr->subarray->shape, i,
374
+ PyInt_FromLong((long)shape.ptr[i]));
375
+
376
+ if (PyTuple_GET_ITEM(newdescr->subarray->shape, i) == NULL) {
377
+ Py_DECREF(newdescr->subarray->shape);
378
+ newdescr->subarray->shape = NULL;
379
+ PyDimMem_FREE(shape.ptr);
380
+ goto fail;
381
+ }
382
+ }
383
+
384
+ PyDimMem_FREE(shape.ptr);
385
+ type = newdescr;
386
+ }
387
+ return type;
388
+
389
+ fail:
390
+ Py_XDECREF(type);
391
+ return NULL;
392
+ }
393
+
394
+ /*
395
+ * obj is a list. Each item is a tuple with
396
+ *
397
+ * (field-name, data-type (either a list or a string), and an optional
398
+ * shape parameter).
399
+ *
400
+ * field-name can be a string or a 2-tuple
401
+ * data-type can now be a list, string, or 2-tuple
402
+ * (string, metadata dictionary)
403
+ */
404
+ static PyArray_Descr *
405
+ _convert_from_array_descr(PyObject *obj, int align)
406
+ {
407
+ int n, i, totalsize;
408
+ int ret;
409
+ PyObject *fields, *item, *newobj;
410
+ PyObject *name, *tup, *title;
411
+ PyObject *nameslist;
412
+ PyArray_Descr *new;
413
+ PyArray_Descr *conv;
414
+ /* Types with fields need the Python C API for field access */
415
+ char dtypeflags = NPY_NEEDS_PYAPI;
416
+ int maxalign = 0;
417
+
418
+ n = PyList_GET_SIZE(obj);
419
+ nameslist = PyTuple_New(n);
420
+ if (!nameslist) {
421
+ return NULL;
422
+ }
423
+ totalsize = 0;
424
+ fields = PyDict_New();
425
+ for (i = 0; i < n; i++) {
426
+ item = PyList_GET_ITEM(obj, i);
427
+ if (!PyTuple_Check(item) || (PyTuple_GET_SIZE(item) < 2)) {
428
+ goto fail;
429
+ }
430
+ name = PyTuple_GET_ITEM(item, 0);
431
+ if (PyUString_Check(name)) {
432
+ title = NULL;
433
+ }
434
+ else if (PyTuple_Check(name)) {
435
+ if (PyTuple_GET_SIZE(name) != 2) {
436
+ goto fail;
437
+ }
438
+ title = PyTuple_GET_ITEM(name, 0);
439
+ name = PyTuple_GET_ITEM(name, 1);
440
+ if (!PyUString_Check(name)) {
441
+ goto fail;
442
+ }
443
+ }
444
+ else {
445
+ goto fail;
446
+ }
447
+
448
+ /* Insert name into nameslist */
449
+ Py_INCREF(name);
450
+
451
+ if (PyUString_GET_SIZE(name) == 0) {
452
+ Py_DECREF(name);
453
+ if (title == NULL) {
454
+ name = PyUString_FromFormat("f%d", i);
455
+ }
456
+ #if defined(NPY_PY3K)
457
+ /* On Py3, allow only non-empty Unicode strings as field names */
458
+ else if (PyUString_Check(title) && PyUString_GET_SIZE(title) > 0) {
459
+ name = title;
460
+ Py_INCREF(name);
461
+ }
462
+ else {
463
+ goto fail;
464
+ }
465
+ #else
466
+ else {
467
+ name = title;
468
+ Py_INCREF(name);
469
+ }
470
+ #endif
471
+ }
472
+ PyTuple_SET_ITEM(nameslist, i, name);
473
+
474
+ /* Process rest */
475
+
476
+ if (PyTuple_GET_SIZE(item) == 2) {
477
+ if (align) {
478
+ ret = PyArray_DescrAlignConverter(PyTuple_GET_ITEM(item, 1),
479
+ &conv);
480
+ }
481
+ else {
482
+ ret = PyArray_DescrConverter(PyTuple_GET_ITEM(item, 1), &conv);
483
+ }
484
+ if (ret == NPY_FAIL) {
485
+ PyObject_Print(PyTuple_GET_ITEM(item, 1), stderr, 0);
486
+ }
487
+ }
488
+ else if (PyTuple_GET_SIZE(item) == 3) {
489
+ newobj = PyTuple_GetSlice(item, 1, 3);
490
+ if (align) {
491
+ ret = PyArray_DescrAlignConverter(newobj, &conv);
492
+ }
493
+ else {
494
+ ret = PyArray_DescrConverter(newobj, &conv);
495
+ }
496
+ Py_DECREF(newobj);
497
+ }
498
+ else {
499
+ goto fail;
500
+ }
501
+ if (ret == NPY_FAIL) {
502
+ goto fail;
503
+ }
504
+ if ((PyDict_GetItem(fields, name) != NULL)
505
+ || (title
506
+ #if defined(NPY_PY3K)
507
+ && PyUString_Check(title)
508
+ #else
509
+ && (PyUString_Check(title) || PyUnicode_Check(title))
510
+ #endif
511
+ && (PyDict_GetItem(fields, title) != NULL))) {
512
+ PyErr_SetString(PyExc_ValueError,
513
+ "two fields with the same name");
514
+ goto fail;
515
+ }
516
+ dtypeflags |= (conv->flags & NPY_FROM_FIELDS);
517
+ tup = PyTuple_New((title == NULL ? 2 : 3));
518
+ PyTuple_SET_ITEM(tup, 0, (PyObject *)conv);
519
+ if (align) {
520
+ int _align;
521
+
522
+ _align = conv->alignment;
523
+ if (_align > 1) {
524
+ totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, _align);
525
+ }
526
+ maxalign = PyArray_MAX(maxalign, _align);
527
+ }
528
+ PyTuple_SET_ITEM(tup, 1, PyInt_FromLong((long) totalsize));
529
+
530
+ PyDict_SetItem(fields, name, tup);
531
+
532
+ /*
533
+ * Title can be "meta-data". Only insert it
534
+ * into the fields dictionary if it is a string
535
+ * and if it is not the same as the name.
536
+ */
537
+ if (title != NULL) {
538
+ Py_INCREF(title);
539
+ PyTuple_SET_ITEM(tup, 2, title);
540
+ #if defined(NPY_PY3K)
541
+ if (PyUString_Check(title)) {
542
+ #else
543
+ if (PyUString_Check(title) || PyUnicode_Check(title)) {
544
+ #endif
545
+ if (PyDict_GetItem(fields, title) != NULL) {
546
+ PyErr_SetString(PyExc_ValueError,
547
+ "title already used as a name or title.");
548
+ Py_DECREF(tup);
549
+ goto fail;
550
+ }
551
+ PyDict_SetItem(fields, title, tup);
552
+ }
553
+ }
554
+ totalsize += conv->elsize;
555
+ Py_DECREF(tup);
556
+ }
557
+
558
+ if (maxalign > 1) {
559
+ totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, maxalign);
560
+ }
561
+
562
+ new = PyArray_DescrNewFromType(NPY_VOID);
563
+ if (new == NULL) {
564
+ Py_XDECREF(fields);
565
+ Py_XDECREF(nameslist);
566
+ return NULL;
567
+ }
568
+ new->fields = fields;
569
+ new->names = nameslist;
570
+ new->elsize = totalsize;
571
+ new->flags = dtypeflags;
572
+
573
+ /* Structured arrays get a sticky aligned bit */
574
+ if (align) {
575
+ new->flags |= NPY_ALIGNED_STRUCT;
576
+ new->alignment = maxalign;
577
+ }
578
+ return new;
579
+
580
+ fail:
581
+ Py_DECREF(fields);
582
+ Py_DECREF(nameslist);
583
+ return NULL;
584
+
585
+ }
586
+
587
+ /*
588
+ * a list specifying a data-type can just be
589
+ * a list of formats. The names for the fields
590
+ * will default to f0, f1, f2, and so forth.
591
+ */
592
+ static PyArray_Descr *
593
+ _convert_from_list(PyObject *obj, int align)
594
+ {
595
+ int n, i;
596
+ int totalsize;
597
+ PyObject *fields;
598
+ PyArray_Descr *conv = NULL;
599
+ PyArray_Descr *new;
600
+ PyObject *key, *tup;
601
+ PyObject *nameslist = NULL;
602
+ int ret;
603
+ int maxalign = 0;
604
+ /* Types with fields need the Python C API for field access */
605
+ char dtypeflags = NPY_NEEDS_PYAPI;
606
+
607
+ n = PyList_GET_SIZE(obj);
608
+ /*
609
+ * Ignore any empty string at end which _internal._commastring
610
+ * can produce
611
+ */
612
+ key = PyList_GET_ITEM(obj, n-1);
613
+ if (PyBytes_Check(key) && PyBytes_GET_SIZE(key) == 0) {
614
+ n = n - 1;
615
+ }
616
+ /* End ignore code.*/
617
+ totalsize = 0;
618
+ if (n == 0) {
619
+ return NULL;
620
+ }
621
+ nameslist = PyTuple_New(n);
622
+ if (!nameslist) {
623
+ return NULL;
624
+ }
625
+ fields = PyDict_New();
626
+ for (i = 0; i < n; i++) {
627
+ tup = PyTuple_New(2);
628
+ key = PyUString_FromFormat("f%d", i);
629
+ if (align) {
630
+ ret = PyArray_DescrAlignConverter(PyList_GET_ITEM(obj, i), &conv);
631
+ }
632
+ else {
633
+ ret = PyArray_DescrConverter(PyList_GET_ITEM(obj, i), &conv);
634
+ }
635
+ if (ret == NPY_FAIL) {
636
+ Py_DECREF(tup);
637
+ Py_DECREF(key);
638
+ goto fail;
639
+ }
640
+ dtypeflags |= (conv->flags & NPY_FROM_FIELDS);
641
+ PyTuple_SET_ITEM(tup, 0, (PyObject *)conv);
642
+ if (align) {
643
+ int _align;
644
+
645
+ _align = conv->alignment;
646
+ if (_align > 1) {
647
+ totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, _align);
648
+ }
649
+ maxalign = PyArray_MAX(maxalign, _align);
650
+ }
651
+ PyTuple_SET_ITEM(tup, 1, PyInt_FromLong((long) totalsize));
652
+ PyDict_SetItem(fields, key, tup);
653
+ Py_DECREF(tup);
654
+ PyTuple_SET_ITEM(nameslist, i, key);
655
+ totalsize += conv->elsize;
656
+ }
657
+ new = PyArray_DescrNewFromType(NPY_VOID);
658
+ new->fields = fields;
659
+ new->names = nameslist;
660
+ new->flags = dtypeflags;
661
+ if (maxalign > 1) {
662
+ totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, maxalign);
663
+ }
664
+ /* Structured arrays get a sticky aligned bit */
665
+ if (align) {
666
+ new->flags |= NPY_ALIGNED_STRUCT;
667
+ new->alignment = maxalign;
668
+ }
669
+ new->elsize = totalsize;
670
+ return new;
671
+
672
+ fail:
673
+ Py_DECREF(nameslist);
674
+ Py_DECREF(fields);
675
+ return NULL;
676
+ }
677
+
678
+
679
+ /*
680
+ * comma-separated string
681
+ * this is the format developed by the numarray records module and implemented
682
+ * by the format parser in that module this is an alternative implementation
683
+ * found in the _internal.py file patterned after that one -- the approach is
684
+ * to try to convert to a list (with tuples if any repeat information is
685
+ * present) and then call the _convert_from_list)
686
+ *
687
+ * TODO: Calling Python from C like this in critical-path code is not
688
+ * a good idea. This should all be converted to C code.
689
+ */
690
+ static PyArray_Descr *
691
+ _convert_from_commastring(PyObject *obj, int align)
692
+ {
693
+ PyObject *listobj;
694
+ PyArray_Descr *res;
695
+ PyObject *_numpy_internal;
696
+
697
+ if (!PyBytes_Check(obj)) {
698
+ return NULL;
699
+ }
700
+ _numpy_internal = PyImport_ImportModule("numpy.core._internal");
701
+ if (_numpy_internal == NULL) {
702
+ return NULL;
703
+ }
704
+ listobj = PyObject_CallMethod(_numpy_internal, "_commastring", "O", obj);
705
+ Py_DECREF(_numpy_internal);
706
+ if (listobj == NULL) {
707
+ return NULL;
708
+ }
709
+ if (!PyList_Check(listobj) || PyList_GET_SIZE(listobj) < 1) {
710
+ PyErr_SetString(PyExc_RuntimeError,
711
+ "_commastring is not returning a list with len >= 1");
712
+ Py_DECREF(listobj);
713
+ return NULL;
714
+ }
715
+ if (PyList_GET_SIZE(listobj) == 1) {
716
+ int retcode;
717
+ retcode = PyArray_DescrConverter(PyList_GET_ITEM(listobj, 0),
718
+ &res);
719
+ if (retcode == NPY_FAIL) {
720
+ res = NULL;
721
+ }
722
+ }
723
+ else {
724
+ res = _convert_from_list(listobj, align);
725
+ }
726
+ Py_DECREF(listobj);
727
+ if (!res && !PyErr_Occurred()) {
728
+ PyErr_SetString(PyExc_ValueError,
729
+ "invalid data-type");
730
+ return NULL;
731
+ }
732
+ return res;
733
+ }
734
+
735
+ static int
736
+ _is_tuple_of_integers(PyObject *obj)
737
+ {
738
+ int i;
739
+
740
+ if (!PyTuple_Check(obj)) {
741
+ return 0;
742
+ }
743
+ for (i = 0; i < PyTuple_GET_SIZE(obj); i++) {
744
+ if (!PyArray_IsIntegerScalar(PyTuple_GET_ITEM(obj, i))) {
745
+ return 0;
746
+ }
747
+ }
748
+ return 1;
749
+ }
750
+
751
+ /*
752
+ * A tuple type would be either (generic typeobject, typesize)
753
+ * or (fixed-length data-type, shape)
754
+ *
755
+ * or (inheriting data-type, new-data-type)
756
+ * The new data-type must have the same itemsize as the inheriting data-type
757
+ * unless the latter is 0
758
+ *
759
+ * Thus (int32, {'real':(int16,0),'imag',(int16,2)})
760
+ *
761
+ * is one way to specify a descriptor that will give
762
+ * a['real'] and a['imag'] to an int32 array.
763
+ *
764
+ * leave type reference alone
765
+ */
766
+ static PyArray_Descr *
767
+ _use_inherit(PyArray_Descr *type, PyObject *newobj, int *errflag)
768
+ {
769
+ PyArray_Descr *new;
770
+ PyArray_Descr *conv;
771
+
772
+ *errflag = 0;
773
+ if (PyArray_IsScalar(newobj, Integer)
774
+ || _is_tuple_of_integers(newobj)
775
+ || !PyArray_DescrConverter(newobj, &conv)) {
776
+ return NULL;
777
+ }
778
+ *errflag = 1;
779
+ new = PyArray_DescrNew(type);
780
+ if (new == NULL) {
781
+ goto fail;
782
+ }
783
+ if (new->elsize && new->elsize != conv->elsize) {
784
+ PyErr_SetString(PyExc_ValueError,
785
+ "mismatch in size of old and new data-descriptor");
786
+ goto fail;
787
+ }
788
+ new->elsize = conv->elsize;
789
+ if (PyDataType_HASFIELDS(conv)) {
790
+ new->fields = conv->fields;
791
+ Py_XINCREF(new->fields);
792
+ new->names = conv->names;
793
+ Py_XINCREF(new->names);
794
+ }
795
+ new->flags = conv->flags;
796
+ Py_DECREF(conv);
797
+ *errflag = 0;
798
+ return new;
799
+
800
+ fail:
801
+ Py_DECREF(conv);
802
+ return NULL;
803
+ }
804
+
805
+ /*
806
+ * Validates that any field of the structured array 'dtype' which has
807
+ * the NPY_ITEM_HASOBJECT flag set does not overlap with another field.
808
+ *
809
+ * This algorithm is worst case O(n^2). It could be done with a sort
810
+ * and sweep algorithm, but the structured dtype representation is
811
+ * rather ugly right now, so writing something better can wait until
812
+ * that representation is made sane.
813
+ *
814
+ * Returns 0 on success, -1 if an exception is raised.
815
+ */
816
+ static int
817
+ validate_object_field_overlap(PyArray_Descr *dtype)
818
+ {
819
+ PyObject *names, *fields, *key, *tup, *title;
820
+ Py_ssize_t i, j, names_size;
821
+ PyArray_Descr *fld_dtype, *fld2_dtype;
822
+ int fld_offset, fld2_offset;
823
+
824
+ /* Get some properties from the dtype */
825
+ names = dtype->names;
826
+ names_size = PyTuple_GET_SIZE(names);
827
+ fields = dtype->fields;
828
+
829
+ for (i = 0; i < names_size; ++i) {
830
+ key = PyTuple_GET_ITEM(names, i);
831
+ if (key == NULL) {
832
+ return -1;
833
+ }
834
+ tup = PyDict_GetItem(fields, key);
835
+ if (tup == NULL) {
836
+ return -1;
837
+ }
838
+ if (!PyArg_ParseTuple(tup, "Oi|O", &fld_dtype, &fld_offset, &title)) {
839
+ return -1;
840
+ }
841
+
842
+ /* If this field has objects, check for overlaps */
843
+ if (PyDataType_REFCHK(fld_dtype)) {
844
+ for (j = 0; j < names_size; ++j) {
845
+ if (i != j) {
846
+ key = PyTuple_GET_ITEM(names, j);
847
+ if (key == NULL) {
848
+ return -1;
849
+ }
850
+ tup = PyDict_GetItem(fields, key);
851
+ if (tup == NULL) {
852
+ return -1;
853
+ }
854
+ if (!PyArg_ParseTuple(tup, "Oi|O", &fld2_dtype,
855
+ &fld2_offset, &title)) {
856
+ return -1;
857
+ }
858
+ /* Raise an exception if it overlaps */
859
+ if (fld_offset < fld2_offset + fld2_dtype->elsize &&
860
+ fld2_offset < fld_offset + fld_dtype->elsize) {
861
+ PyErr_SetString(PyExc_TypeError,
862
+ "Cannot create a NumPy dtype with overlapping "
863
+ "object fields");
864
+ return -1;
865
+ }
866
+ }
867
+ }
868
+ }
869
+ }
870
+
871
+ /* It passed all the overlap tests */
872
+ return 0;
873
+ }
874
+
875
+ /*
876
+ * a dictionary specifying a data-type
877
+ * must have at least two and up to four
878
+ * keys These must all be sequences of the same length.
879
+ *
880
+ * can also have an additional key called "metadata" which can be any dictionary
881
+ *
882
+ * "names" --- field names
883
+ * "formats" --- the data-type descriptors for the field.
884
+ *
885
+ * Optional:
886
+ *
887
+ * "offsets" --- integers indicating the offset into the
888
+ * record of the start of the field.
889
+ * if not given, then "consecutive offsets"
890
+ * will be assumed and placed in the dictionary.
891
+ *
892
+ * "titles" --- Allows the use of an additional key
893
+ * for the fields dictionary.(if these are strings
894
+ * or unicode objects) or
895
+ * this can also be meta-data to
896
+ * be passed around with the field description.
897
+ *
898
+ * Attribute-lookup-based field names merely has to query the fields
899
+ * dictionary of the data-descriptor. Any result present can be used
900
+ * to return the correct field.
901
+ *
902
+ * So, the notion of what is a name and what is a title is really quite
903
+ * arbitrary.
904
+ *
905
+ * What does distinguish a title, however, is that if it is not None,
906
+ * it will be placed at the end of the tuple inserted into the
907
+ * fields dictionary.and can therefore be used to carry meta-data around.
908
+ *
909
+ * If the dictionary does not have "names" and "formats" entries,
910
+ * then it will be checked for conformity and used directly.
911
+ */
912
+ static PyArray_Descr *
913
+ _use_fields_dict(PyObject *obj, int align)
914
+ {
915
+ PyObject *_numpy_internal;
916
+ PyArray_Descr *res;
917
+
918
+ _numpy_internal = PyImport_ImportModule("numpy.core._internal");
919
+ if (_numpy_internal == NULL) {
920
+ return NULL;
921
+ }
922
+ res = (PyArray_Descr *)PyObject_CallMethod(_numpy_internal,
923
+ "_usefields", "Oi", obj, align);
924
+ Py_DECREF(_numpy_internal);
925
+ return res;
926
+ }
927
+
928
+ /*
929
+ * Creates a struct dtype object from a Python dictionary.
930
+ */
931
+ static PyArray_Descr *
932
+ _convert_from_dict(PyObject *obj, int align)
933
+ {
934
+ PyArray_Descr *new;
935
+ PyObject *fields = NULL;
936
+ PyObject *names, *offsets, *descrs, *titles, *tmp;
937
+ PyObject *metadata;
938
+ int n, i;
939
+ int totalsize, itemsize;
940
+ int maxalign = 0;
941
+ /* Types with fields need the Python C API for field access */
942
+ char dtypeflags = NPY_NEEDS_PYAPI;
943
+ int has_out_of_order_fields = 0;
944
+
945
+ fields = PyDict_New();
946
+ if (fields == NULL) {
947
+ return (PyArray_Descr *)PyErr_NoMemory();
948
+ }
949
+ /* Use PyMapping_GetItemString to support dictproxy objects as well */
950
+ names = PyMapping_GetItemString(obj, "names");
951
+ descrs = PyMapping_GetItemString(obj, "formats");
952
+ if (!names || !descrs) {
953
+ Py_DECREF(fields);
954
+ PyErr_Clear();
955
+ return _use_fields_dict(obj, align);
956
+ }
957
+ n = PyObject_Length(names);
958
+ offsets = PyMapping_GetItemString(obj, "offsets");
959
+ titles = PyMapping_GetItemString(obj, "titles");
960
+ if (!offsets || !titles) {
961
+ PyErr_Clear();
962
+ }
963
+
964
+ if ((n > PyObject_Length(descrs))
965
+ || (offsets && (n > PyObject_Length(offsets)))
966
+ || (titles && (n > PyObject_Length(titles)))) {
967
+ PyErr_SetString(PyExc_ValueError,
968
+ "'names', 'formats', 'offsets', and 'titles' dicct "
969
+ "entries must have the same length");
970
+ goto fail;
971
+ }
972
+
973
+ /*
974
+ * If a property 'aligned' is in the dict, it overrides the align flag
975
+ * to be True if it not already true.
976
+ */
977
+ tmp = PyMapping_GetItemString(obj, "aligned");
978
+ if (tmp == NULL) {
979
+ PyErr_Clear();
980
+ } else {
981
+ if (tmp == Py_True) {
982
+ align = 1;
983
+ }
984
+ else if (tmp != Py_False) {
985
+ PyErr_SetString(PyExc_ValueError,
986
+ "NumPy dtype descriptor includes 'aligned' entry, "
987
+ "but its value is neither True nor False");
988
+ return NULL;
989
+ }
990
+ }
991
+
992
+ totalsize = 0;
993
+ for (i = 0; i < n; i++) {
994
+ PyObject *tup, *descr, *ind, *title, *name, *off;
995
+ int len, ret, _align = 1;
996
+ PyArray_Descr *newdescr;
997
+
998
+ /* Build item to insert (descr, offset, [title])*/
999
+ len = 2;
1000
+ title = NULL;
1001
+ ind = PyInt_FromLong(i);
1002
+ if (titles) {
1003
+ title=PyObject_GetItem(titles, ind);
1004
+ if (title && title != Py_None) {
1005
+ len = 3;
1006
+ }
1007
+ else {
1008
+ Py_XDECREF(title);
1009
+ }
1010
+ PyErr_Clear();
1011
+ }
1012
+ tup = PyTuple_New(len);
1013
+ descr = PyObject_GetItem(descrs, ind);
1014
+ if (!descr) {
1015
+ goto fail;
1016
+ }
1017
+ if (align) {
1018
+ ret = PyArray_DescrAlignConverter(descr, &newdescr);
1019
+ }
1020
+ else {
1021
+ ret = PyArray_DescrConverter(descr, &newdescr);
1022
+ }
1023
+ Py_DECREF(descr);
1024
+ if (ret == NPY_FAIL) {
1025
+ Py_DECREF(tup);
1026
+ Py_DECREF(ind);
1027
+ goto fail;
1028
+ }
1029
+ PyTuple_SET_ITEM(tup, 0, (PyObject *)newdescr);
1030
+ if (align) {
1031
+ _align = newdescr->alignment;
1032
+ maxalign = PyArray_MAX(maxalign,_align);
1033
+ }
1034
+ if (offsets) {
1035
+ long offset;
1036
+ off = PyObject_GetItem(offsets, ind);
1037
+ if (!off) {
1038
+ goto fail;
1039
+ }
1040
+ offset = PyInt_AsLong(off);
1041
+ PyTuple_SET_ITEM(tup, 1, off);
1042
+ /* Flag whether the fields are specified out of order */
1043
+ if (offset < totalsize) {
1044
+ has_out_of_order_fields = 1;
1045
+ }
1046
+ /* If align=True, enforce field alignment */
1047
+ if (align && offset % newdescr->alignment != 0) {
1048
+ PyErr_Format(PyExc_ValueError,
1049
+ "offset %d for NumPy dtype with fields is "
1050
+ "not divisible by the field alignment %d "
1051
+ "with align=True",
1052
+ (int)offset, (int)newdescr->alignment);
1053
+ ret = NPY_FAIL;
1054
+ }
1055
+ else if (offset + newdescr->elsize > totalsize) {
1056
+ totalsize = offset + newdescr->elsize;
1057
+ }
1058
+ }
1059
+ else {
1060
+ if (align && _align > 1) {
1061
+ totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, _align);
1062
+ }
1063
+ PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(totalsize));
1064
+ totalsize += newdescr->elsize;
1065
+ }
1066
+ if (len == 3) {
1067
+ PyTuple_SET_ITEM(tup, 2, title);
1068
+ }
1069
+ name = PyObject_GetItem(names, ind);
1070
+ if (!name) {
1071
+ goto fail;
1072
+ }
1073
+ Py_DECREF(ind);
1074
+ #if defined(NPY_PY3K)
1075
+ if (!PyUString_Check(name)) {
1076
+ #else
1077
+ if (!(PyUString_Check(name) || PyUnicode_Check(name))) {
1078
+ #endif
1079
+ PyErr_SetString(PyExc_ValueError,
1080
+ "field names must be strings");
1081
+ ret = NPY_FAIL;
1082
+ }
1083
+
1084
+ /* Insert into dictionary */
1085
+ if (PyDict_GetItem(fields, name) != NULL) {
1086
+ PyErr_SetString(PyExc_ValueError,
1087
+ "name already used as a name or title");
1088
+ ret = NPY_FAIL;
1089
+ }
1090
+ PyDict_SetItem(fields, name, tup);
1091
+ Py_DECREF(name);
1092
+ if (len == 3) {
1093
+ #if defined(NPY_PY3K)
1094
+ if (PyUString_Check(title)) {
1095
+ #else
1096
+ if (PyUString_Check(title) || PyUnicode_Check(title)) {
1097
+ #endif
1098
+ if (PyDict_GetItem(fields, title) != NULL) {
1099
+ PyErr_SetString(PyExc_ValueError,
1100
+ "title already used as a name or title.");
1101
+ ret=NPY_FAIL;
1102
+ }
1103
+ PyDict_SetItem(fields, title, tup);
1104
+ }
1105
+ }
1106
+ Py_DECREF(tup);
1107
+ if ((ret == NPY_FAIL) || (newdescr->elsize == 0)) {
1108
+ goto fail;
1109
+ }
1110
+ dtypeflags |= (newdescr->flags & NPY_FROM_FIELDS);
1111
+ }
1112
+
1113
+ new = PyArray_DescrNewFromType(NPY_VOID);
1114
+ if (new == NULL) {
1115
+ goto fail;
1116
+ }
1117
+ if (maxalign > 1) {
1118
+ totalsize = NPY_NEXT_ALIGNED_OFFSET(totalsize, maxalign);
1119
+ }
1120
+ if (align) {
1121
+ new->alignment = maxalign;
1122
+ }
1123
+ new->elsize = totalsize;
1124
+ if (!PyTuple_Check(names)) {
1125
+ names = PySequence_Tuple(names);
1126
+ }
1127
+ else {
1128
+ Py_INCREF(names);
1129
+ }
1130
+ new->names = names;
1131
+ new->fields = fields;
1132
+ new->flags = dtypeflags;
1133
+
1134
+ /*
1135
+ * If the fields weren't in order, and there was an OBJECT type,
1136
+ * need to verify that no OBJECT types overlap with something else.
1137
+ */
1138
+ if (has_out_of_order_fields && PyDataType_REFCHK(new)) {
1139
+ if (validate_object_field_overlap(new) < 0) {
1140
+ Py_DECREF(new);
1141
+ return NULL;
1142
+ }
1143
+ }
1144
+
1145
+ /* Structured arrays get a sticky aligned bit */
1146
+ if (align) {
1147
+ new->flags |= NPY_ALIGNED_STRUCT;
1148
+ }
1149
+
1150
+ /* Override the itemsize if provided */
1151
+ tmp = PyMapping_GetItemString(obj, "itemsize");
1152
+ if (tmp == NULL) {
1153
+ PyErr_Clear();
1154
+ } else {
1155
+ itemsize = (int)PyInt_AsLong(tmp);
1156
+ if (itemsize == -1 && PyErr_Occurred()) {
1157
+ Py_DECREF(new);
1158
+ return NULL;
1159
+ }
1160
+ /* Make sure the itemsize isn't made too small */
1161
+ if (itemsize < new->elsize) {
1162
+ PyErr_Format(PyExc_ValueError,
1163
+ "NumPy dtype descriptor requires %d bytes, "
1164
+ "cannot override to smaller itemsize of %d",
1165
+ (int)new->elsize, (int)itemsize);
1166
+ Py_DECREF(new);
1167
+ return NULL;
1168
+ }
1169
+ /* If align is set, make sure the alignment divides into the size */
1170
+ if (align && itemsize % new->alignment != 0) {
1171
+ PyErr_Format(PyExc_ValueError,
1172
+ "NumPy dtype descriptor requires alignment of %d bytes, "
1173
+ "which is not divisible into the specified itemsize %d",
1174
+ (int)new->alignment, (int)itemsize);
1175
+ Py_DECREF(new);
1176
+ return NULL;
1177
+ }
1178
+ /* Set the itemsize */
1179
+ new->elsize = itemsize;
1180
+ }
1181
+
1182
+ /* Add the metadata if provided */
1183
+ metadata = PyMapping_GetItemString(obj, "metadata");
1184
+
1185
+ if (metadata == NULL) {
1186
+ PyErr_Clear();
1187
+ }
1188
+ else if (new->metadata == NULL) {
1189
+ new->metadata = metadata;
1190
+ Py_XINCREF(new->metadata);
1191
+ }
1192
+ else if (PyDict_Merge(new->metadata, metadata, 0) == -1) {
1193
+ Py_DECREF(new);
1194
+ return NULL;
1195
+ }
1196
+ return new;
1197
+
1198
+ fail:
1199
+ Py_XDECREF(fields);
1200
+ return NULL;
1201
+ }
1202
+
1203
+
1204
+ /*NUMPY_API*/
1205
+ NPY_NO_EXPORT PyArray_Descr *
1206
+ PyArray_DescrNewFromType(int type_num)
1207
+ {
1208
+ PyArray_Descr *old;
1209
+ PyArray_Descr *new;
1210
+
1211
+ old = PyArray_DescrFromType(type_num);
1212
+ new = PyArray_DescrNew(old);
1213
+ Py_DECREF(old);
1214
+ return new;
1215
+ }
1216
+
1217
+ /*NUMPY_API
1218
+ * Get typenum from an object -- None goes to NULL
1219
+ */
1220
+ NPY_NO_EXPORT int
1221
+ PyArray_DescrConverter2(PyObject *obj, PyArray_Descr **at)
1222
+ {
1223
+ if (obj == Py_None) {
1224
+ *at = NULL;
1225
+ return NPY_SUCCEED;
1226
+ }
1227
+ else {
1228
+ return PyArray_DescrConverter(obj, at);
1229
+ }
1230
+ }
1231
+
1232
+ /*NUMPY_API
1233
+ * Get typenum from an object -- None goes to NPY_DEFAULT_TYPE
1234
+ * This function takes a Python object representing a type and converts it
1235
+ * to a the correct PyArray_Descr * structure to describe the type.
1236
+ *
1237
+ * Many objects can be used to represent a data-type which in NumPy is
1238
+ * quite a flexible concept.
1239
+ *
1240
+ * This is the central code that converts Python objects to
1241
+ * Type-descriptor objects that are used throughout numpy.
1242
+ *
1243
+ * Returns a new reference in *at, but the returned should not be
1244
+ * modified as it may be one of the canonical immutable objects or
1245
+ * a reference to the input obj.
1246
+ */
1247
+ NPY_NO_EXPORT int
1248
+ PyArray_DescrConverter(PyObject *obj, PyArray_Descr **at)
1249
+ {
1250
+ int check_num = NPY_NOTYPE + 10;
1251
+ PyObject *item;
1252
+ int elsize = 0;
1253
+ char endian = '=';
1254
+
1255
+ *at = NULL;
1256
+
1257
+ /* default */
1258
+ if (obj == Py_None) {
1259
+ *at = PyArray_DescrFromType(NPY_DEFAULT_TYPE);
1260
+ return NPY_SUCCEED;
1261
+ }
1262
+
1263
+ if (PyArray_DescrCheck(obj)) {
1264
+ *at = (PyArray_Descr *)obj;
1265
+ Py_INCREF(*at);
1266
+ return NPY_SUCCEED;
1267
+ }
1268
+
1269
+ if (PyType_Check(obj)) {
1270
+ if (PyType_IsSubtype((PyTypeObject *)obj, &PyGenericArrType_Type)) {
1271
+ *at = PyArray_DescrFromTypeObject(obj);
1272
+ return (*at) ? NPY_SUCCEED : NPY_FAIL;
1273
+ }
1274
+ check_num = NPY_OBJECT;
1275
+ #if !defined(NPY_PY3K)
1276
+ if (obj == (PyObject *)(&PyInt_Type)) {
1277
+ check_num = NPY_LONG;
1278
+ }
1279
+ else if (obj == (PyObject *)(&PyLong_Type)) {
1280
+ check_num = NPY_LONGLONG;
1281
+ }
1282
+ #else
1283
+ if (obj == (PyObject *)(&PyLong_Type)) {
1284
+ check_num = NPY_LONG;
1285
+ }
1286
+ #endif
1287
+ else if (obj == (PyObject *)(&PyFloat_Type)) {
1288
+ check_num = NPY_DOUBLE;
1289
+ }
1290
+ else if (obj == (PyObject *)(&PyComplex_Type)) {
1291
+ check_num = NPY_CDOUBLE;
1292
+ }
1293
+ else if (obj == (PyObject *)(&PyBool_Type)) {
1294
+ check_num = NPY_BOOL;
1295
+ }
1296
+ else if (obj == (PyObject *)(&PyBytes_Type)) {
1297
+ check_num = NPY_STRING;
1298
+ }
1299
+ else if (obj == (PyObject *)(&PyUnicode_Type)) {
1300
+ check_num = NPY_UNICODE;
1301
+ }
1302
+ #if defined(NPY_PY3K)
1303
+ else if (obj == (PyObject *)(&PyMemoryView_Type)) {
1304
+ #else
1305
+ else if (obj == (PyObject *)(&PyBuffer_Type)) {
1306
+ #endif
1307
+ check_num = NPY_VOID;
1308
+ }
1309
+ else {
1310
+ *at = _arraydescr_fromobj(obj);
1311
+ if (*at) {
1312
+ return NPY_SUCCEED;
1313
+ }
1314
+ }
1315
+ goto finish;
1316
+ }
1317
+
1318
+ /* or a typecode string */
1319
+
1320
+ if (PyUnicode_Check(obj)) {
1321
+ /* Allow unicode format strings: convert to bytes */
1322
+ int retval;
1323
+ PyObject *obj2;
1324
+ obj2 = PyUnicode_AsASCIIString(obj);
1325
+ if (obj2 == NULL) {
1326
+ return NPY_FAIL;
1327
+ }
1328
+ retval = PyArray_DescrConverter(obj2, at);
1329
+ Py_DECREF(obj2);
1330
+ return retval;
1331
+ }
1332
+
1333
+ if (PyBytes_Check(obj)) {
1334
+ char *type = NULL;
1335
+ Py_ssize_t len = 0;
1336
+
1337
+ /* Check for a string typecode. */
1338
+ if (PyBytes_AsStringAndSize(obj, &type, &len) < 0) {
1339
+ goto error;
1340
+ }
1341
+
1342
+ /* Empty string is invalid */
1343
+ if (len == 0) {
1344
+ goto fail;
1345
+ }
1346
+
1347
+ /* check for commas present or first (or second) element a digit */
1348
+ if (_check_for_commastring(type, len)) {
1349
+ *at = _convert_from_commastring(obj, 0);
1350
+ return (*at) ? NPY_SUCCEED : NPY_FAIL;
1351
+ }
1352
+
1353
+ /* Process the endian character. '|' is replaced by '='*/
1354
+ switch (type[0]) {
1355
+ case '>':
1356
+ case '<':
1357
+ case '=':
1358
+ endian = type[0];
1359
+ ++type;
1360
+ --len;
1361
+ break;
1362
+
1363
+ case '|':
1364
+ endian = '=';
1365
+ ++type;
1366
+ --len;
1367
+ break;
1368
+ }
1369
+
1370
+ /* Just an endian character is invalid */
1371
+ if (len == 0) {
1372
+ goto fail;
1373
+ }
1374
+
1375
+ /* Check for datetime format */
1376
+ if (is_datetime_typestr(type, len)) {
1377
+ *at = parse_dtype_from_datetime_typestr(type, len);
1378
+ if (*at == NULL) {
1379
+ return NPY_FAIL;
1380
+ }
1381
+ /* *at has byte order '=' at this point */
1382
+ if (!PyArray_ISNBO(endian)) {
1383
+ (*at)->byteorder = endian;
1384
+ }
1385
+ return NPY_SUCCEED;
1386
+ }
1387
+
1388
+ /* A typecode like 'd' */
1389
+ if (len == 1) {
1390
+ check_num = type[0];
1391
+ }
1392
+ /* A kind + size like 'f8' */
1393
+ else {
1394
+ char *typeend = NULL;
1395
+ int kind;
1396
+
1397
+ /* Parse the integer, make sure it's the rest of the string */
1398
+ elsize = (int)strtol(type + 1, &typeend, 10);
1399
+ if (typeend - type == len) {
1400
+
1401
+ kind = type[0];
1402
+ switch (kind) {
1403
+ case NPY_STRINGLTR:
1404
+ case NPY_STRINGLTR2:
1405
+ check_num = NPY_STRING;
1406
+ break;
1407
+
1408
+ /*
1409
+ * When specifying length of UNICODE
1410
+ * the number of characters is given to match
1411
+ * the STRING interface. Each character can be
1412
+ * more than one byte and itemsize must be
1413
+ * the number of bytes.
1414
+ */
1415
+ case NPY_UNICODELTR:
1416
+ check_num = NPY_UNICODE;
1417
+ elsize <<= 2;
1418
+ break;
1419
+
1420
+ case NPY_VOIDLTR:
1421
+ check_num = NPY_VOID;
1422
+ break;
1423
+
1424
+ default:
1425
+ if (elsize == 0) {
1426
+ check_num = NPY_NOTYPE+10;
1427
+ }
1428
+ /* Support for generic processing c8, i4, f8, etc...*/
1429
+ else {
1430
+ check_num = PyArray_TypestrConvert(elsize, kind);
1431
+ if (check_num == NPY_NOTYPE) {
1432
+ check_num += 10;
1433
+ }
1434
+ elsize = 0;
1435
+ }
1436
+ }
1437
+ }
1438
+ }
1439
+ }
1440
+ else if (PyTuple_Check(obj)) {
1441
+ /* or a tuple */
1442
+ *at = _convert_from_tuple(obj);
1443
+ if (*at == NULL){
1444
+ if (PyErr_Occurred()) {
1445
+ return NPY_FAIL;
1446
+ }
1447
+ goto fail;
1448
+ }
1449
+ return NPY_SUCCEED;
1450
+ }
1451
+ else if (PyList_Check(obj)) {
1452
+ /* or a list */
1453
+ *at = _convert_from_array_descr(obj,0);
1454
+ if (*at == NULL) {
1455
+ if (PyErr_Occurred()) {
1456
+ return NPY_FAIL;
1457
+ }
1458
+ goto fail;
1459
+ }
1460
+ return NPY_SUCCEED;
1461
+ }
1462
+ else if (PyDict_Check(obj) || PyDictProxy_Check(obj)) {
1463
+ /* or a dictionary */
1464
+ *at = _convert_from_dict(obj,0);
1465
+ if (*at == NULL) {
1466
+ if (PyErr_Occurred()) {
1467
+ return NPY_FAIL;
1468
+ }
1469
+ goto fail;
1470
+ }
1471
+ return NPY_SUCCEED;
1472
+ }
1473
+ else if (PyArray_Check(obj)) {
1474
+ goto fail;
1475
+ }
1476
+ else {
1477
+ *at = _arraydescr_fromobj(obj);
1478
+ if (*at) {
1479
+ return NPY_SUCCEED;
1480
+ }
1481
+ if (PyErr_Occurred()) {
1482
+ return NPY_FAIL;
1483
+ }
1484
+ goto fail;
1485
+ }
1486
+ if (PyErr_Occurred()) {
1487
+ goto fail;
1488
+ }
1489
+
1490
+ finish:
1491
+ if ((check_num == NPY_NOTYPE + 10) ||
1492
+ (*at = PyArray_DescrFromType(check_num)) == NULL) {
1493
+ PyErr_Clear();
1494
+ /* Now check to see if the object is registered in typeDict */
1495
+ if (typeDict != NULL) {
1496
+ item = PyDict_GetItem(typeDict, obj);
1497
+ #if defined(NPY_PY3K)
1498
+ if (!item && PyBytes_Check(obj)) {
1499
+ PyObject *tmp;
1500
+ tmp = PyUnicode_FromEncodedObject(obj, "ascii", "strict");
1501
+ if (tmp != NULL) {
1502
+ item = PyDict_GetItem(typeDict, tmp);
1503
+ Py_DECREF(tmp);
1504
+ }
1505
+ }
1506
+ #endif
1507
+ if (item) {
1508
+ return PyArray_DescrConverter(item, at);
1509
+ }
1510
+ }
1511
+ goto fail;
1512
+ }
1513
+
1514
+ if (((*at)->elsize == 0) && (elsize != 0)) {
1515
+ PyArray_DESCR_REPLACE(*at);
1516
+ (*at)->elsize = elsize;
1517
+ }
1518
+ if (endian != '=' && PyArray_ISNBO(endian)) {
1519
+ endian = '=';
1520
+ }
1521
+ if (endian != '=' && (*at)->byteorder != '|'
1522
+ && (*at)->byteorder != endian) {
1523
+ PyArray_DESCR_REPLACE(*at);
1524
+ (*at)->byteorder = endian;
1525
+ }
1526
+ return NPY_SUCCEED;
1527
+
1528
+ fail:
1529
+ if (PyBytes_Check(obj)) {
1530
+ PyErr_Format(PyExc_TypeError,
1531
+ "data type \"%s\" not understood", PyBytes_AS_STRING(obj));
1532
+ }
1533
+ else {
1534
+ PyErr_SetString(PyExc_TypeError,
1535
+ "data type not understood");
1536
+ }
1537
+
1538
+ error:
1539
+ *at = NULL;
1540
+ return NPY_FAIL;
1541
+ }
1542
+
1543
+ /** Array Descr Objects for dynamic types **/
1544
+
1545
+ /*
1546
+ * There are some statically-defined PyArray_Descr objects corresponding
1547
+ * to the basic built-in types.
1548
+ * These can and should be DECREF'd and INCREF'd as appropriate, anyway.
1549
+ * If a mistake is made in reference counting, deallocation on these
1550
+ * builtins will be attempted leading to problems.
1551
+ *
1552
+ * This lets us deal with all PyArray_Descr objects using reference
1553
+ * counting (regardless of whether they are statically or dynamically
1554
+ * allocated).
1555
+ */
1556
+
1557
+ /*NUMPY_API
1558
+ * base cannot be NULL
1559
+ */
1560
+ NPY_NO_EXPORT PyArray_Descr *
1561
+ PyArray_DescrNew(PyArray_Descr *base)
1562
+ {
1563
+ PyArray_Descr *newdescr = PyObject_New(PyArray_Descr, &PyArrayDescr_Type);
1564
+
1565
+ if (newdescr == NULL) {
1566
+ return NULL;
1567
+ }
1568
+ /* Don't copy PyObject_HEAD part */
1569
+ memcpy((char *)newdescr + sizeof(PyObject),
1570
+ (char *)base + sizeof(PyObject),
1571
+ sizeof(PyArray_Descr) - sizeof(PyObject));
1572
+
1573
+ /*
1574
+ * The c_metadata has a by-value ownership model, need to clone it
1575
+ * (basically a deep copy, but the auxdata clone function has some
1576
+ * flexibility still) so the new PyArray_Descr object owns
1577
+ * a copy of the data. Having both 'base' and 'newdescr' point to
1578
+ * the same auxdata pointer would cause a double-free of memory.
1579
+ */
1580
+ if (base->c_metadata != NULL) {
1581
+ newdescr->c_metadata = NPY_AUXDATA_CLONE(base->c_metadata);
1582
+ if (newdescr->c_metadata == NULL) {
1583
+ PyErr_NoMemory();
1584
+ Py_DECREF(newdescr);
1585
+ return NULL;
1586
+ }
1587
+ }
1588
+
1589
+ if (newdescr->fields == Py_None) {
1590
+ newdescr->fields = NULL;
1591
+ }
1592
+ Py_XINCREF(newdescr->fields);
1593
+ Py_XINCREF(newdescr->names);
1594
+ if (newdescr->subarray) {
1595
+ newdescr->subarray = PyArray_malloc(sizeof(PyArray_ArrayDescr));
1596
+ if (newdescr->subarray == NULL) {
1597
+ Py_DECREF(newdescr);
1598
+ return (PyArray_Descr *)PyErr_NoMemory();
1599
+ }
1600
+ memcpy(newdescr->subarray, base->subarray, sizeof(PyArray_ArrayDescr));
1601
+ Py_INCREF(newdescr->subarray->shape);
1602
+ Py_INCREF(newdescr->subarray->base);
1603
+ }
1604
+ Py_XINCREF(newdescr->typeobj);
1605
+ Py_XINCREF(newdescr->metadata);
1606
+ newdescr->hash = -1;
1607
+
1608
+ return newdescr;
1609
+ }
1610
+
1611
+ /*
1612
+ * should never be called for builtin-types unless
1613
+ * there is a reference-count problem
1614
+ */
1615
+ static void
1616
+ arraydescr_dealloc(PyArray_Descr *self)
1617
+ {
1618
+ if (self->fields == Py_None) {
1619
+ fprintf(stderr, "*** Reference count error detected: \n" \
1620
+ "an attempt was made to deallocate %d (%c) ***\n",
1621
+ self->type_num, self->type);
1622
+ Py_INCREF(self);
1623
+ Py_INCREF(self);
1624
+ return;
1625
+ }
1626
+ Py_XDECREF(self->typeobj);
1627
+ Py_XDECREF(self->names);
1628
+ Py_XDECREF(self->fields);
1629
+ if (self->subarray) {
1630
+ Py_XDECREF(self->subarray->shape);
1631
+ Py_DECREF(self->subarray->base);
1632
+ PyArray_free(self->subarray);
1633
+ }
1634
+ Py_XDECREF(self->metadata);
1635
+ NPY_AUXDATA_FREE(self->c_metadata);
1636
+ self->c_metadata = NULL;
1637
+ Py_TYPE(self)->tp_free((PyObject *)self);
1638
+ }
1639
+
1640
+ /*
1641
+ * we need to be careful about setting attributes because these
1642
+ * objects are pointed to by arrays that depend on them for interpreting
1643
+ * data. Currently no attributes of data-type objects can be set
1644
+ * directly except names.
1645
+ */
1646
+ static PyMemberDef arraydescr_members[] = {
1647
+ {"type",
1648
+ T_OBJECT, offsetof(PyArray_Descr, typeobj), READONLY, NULL},
1649
+ {"kind",
1650
+ T_CHAR, offsetof(PyArray_Descr, kind), READONLY, NULL},
1651
+ {"char",
1652
+ T_CHAR, offsetof(PyArray_Descr, type), READONLY, NULL},
1653
+ {"num",
1654
+ T_INT, offsetof(PyArray_Descr, type_num), READONLY, NULL},
1655
+ {"byteorder",
1656
+ T_CHAR, offsetof(PyArray_Descr, byteorder), READONLY, NULL},
1657
+ {"itemsize",
1658
+ T_INT, offsetof(PyArray_Descr, elsize), READONLY, NULL},
1659
+ {"alignment",
1660
+ T_INT, offsetof(PyArray_Descr, alignment), READONLY, NULL},
1661
+ {"flags",
1662
+ T_BYTE, offsetof(PyArray_Descr, flags), READONLY, NULL},
1663
+ {NULL, 0, 0, 0, NULL},
1664
+ };
1665
+
1666
+ static PyObject *
1667
+ arraydescr_subdescr_get(PyArray_Descr *self)
1668
+ {
1669
+ if (!PyDataType_HASSUBARRAY(self)) {
1670
+ Py_RETURN_NONE;
1671
+ }
1672
+ return Py_BuildValue("OO",
1673
+ (PyObject *)self->subarray->base, self->subarray->shape);
1674
+ }
1675
+
1676
+ NPY_NO_EXPORT PyObject *
1677
+ arraydescr_protocol_typestr_get(PyArray_Descr *self)
1678
+ {
1679
+ char basic_ = self->kind;
1680
+ char endian = self->byteorder;
1681
+ int size = self->elsize;
1682
+ PyObject *ret;
1683
+
1684
+ if (endian == '=') {
1685
+ endian = '<';
1686
+ if (!PyArray_IsNativeByteOrder(endian)) {
1687
+ endian = '>';
1688
+ }
1689
+ }
1690
+ if (self->type_num == NPY_UNICODE) {
1691
+ size >>= 2;
1692
+ }
1693
+ if (self->type_num == NPY_OBJECT) {
1694
+ ret = PyUString_FromFormat("%c%c", endian, basic_);
1695
+ }
1696
+ else {
1697
+ ret = PyUString_FromFormat("%c%c%d", endian, basic_, size);
1698
+ }
1699
+ if (PyDataType_ISDATETIME(self)) {
1700
+ PyArray_DatetimeMetaData *meta;
1701
+
1702
+ meta = get_datetime_metadata_from_dtype(self);
1703
+ if (meta == NULL) {
1704
+ Py_DECREF(ret);
1705
+ return NULL;
1706
+ }
1707
+
1708
+ ret = append_metastr_to_string(meta, 0, ret);
1709
+ }
1710
+
1711
+ return ret;
1712
+ }
1713
+
1714
+ static PyObject *
1715
+ arraydescr_typename_get(PyArray_Descr *self)
1716
+ {
1717
+ static const char np_prefix[] = "numpy.";
1718
+ const int np_prefix_len = sizeof(np_prefix) - 1;
1719
+ PyTypeObject *typeobj = self->typeobj;
1720
+ PyObject *res;
1721
+ char *s;
1722
+ int len;
1723
+ int prefix_len;
1724
+ int suffix_len;
1725
+
1726
+ if (PyTypeNum_ISUSERDEF(self->type_num)) {
1727
+ s = strrchr(typeobj->tp_name, '.');
1728
+ if (s == NULL) {
1729
+ res = PyUString_FromString(typeobj->tp_name);
1730
+ }
1731
+ else {
1732
+ res = PyUString_FromStringAndSize(s + 1, strlen(s) - 1);
1733
+ }
1734
+ return res;
1735
+ }
1736
+ else {
1737
+ /*
1738
+ * NumPy type or subclass
1739
+ *
1740
+ * res is derived from typeobj->tp_name with the following rules:
1741
+ * - if starts with "numpy.", that prefix is removed
1742
+ * - if ends with "_", that suffix is removed
1743
+ */
1744
+ len = strlen(typeobj->tp_name);
1745
+
1746
+ if (! strncmp(typeobj->tp_name, np_prefix, np_prefix_len)) {
1747
+ prefix_len = np_prefix_len;
1748
+ }
1749
+ else {
1750
+ prefix_len = 0;
1751
+ }
1752
+
1753
+ if (typeobj->tp_name[len - 1] == '_') {
1754
+ suffix_len = 1;
1755
+ }
1756
+ else {
1757
+ suffix_len = 0;
1758
+ }
1759
+
1760
+ len -= prefix_len;
1761
+ len -= suffix_len;
1762
+ res = PyUString_FromStringAndSize(typeobj->tp_name+prefix_len, len);
1763
+ }
1764
+ if (PyTypeNum_ISFLEXIBLE(self->type_num) && self->elsize != 0) {
1765
+ PyObject *p;
1766
+ p = PyUString_FromFormat("%d", self->elsize * 8);
1767
+ PyUString_ConcatAndDel(&res, p);
1768
+ }
1769
+ if (PyDataType_ISDATETIME(self)) {
1770
+ PyArray_DatetimeMetaData *meta;
1771
+
1772
+ meta = get_datetime_metadata_from_dtype(self);
1773
+ if (meta == NULL) {
1774
+ Py_DECREF(res);
1775
+ return NULL;
1776
+ }
1777
+
1778
+ res = append_metastr_to_string(meta, 0, res);
1779
+ }
1780
+
1781
+ return res;
1782
+ }
1783
+
1784
+ static PyObject *
1785
+ arraydescr_base_get(PyArray_Descr *self)
1786
+ {
1787
+ if (!PyDataType_HASSUBARRAY(self)) {
1788
+ Py_INCREF(self);
1789
+ return (PyObject *)self;
1790
+ }
1791
+ Py_INCREF(self->subarray->base);
1792
+ return (PyObject *)(self->subarray->base);
1793
+ }
1794
+
1795
+ static PyObject *
1796
+ arraydescr_shape_get(PyArray_Descr *self)
1797
+ {
1798
+ if (!PyDataType_HASSUBARRAY(self)) {
1799
+ return PyTuple_New(0);
1800
+ }
1801
+ /*TODO
1802
+ * self->subarray->shape should always be a tuple,
1803
+ * so this check should be unnecessary
1804
+ */
1805
+ if (PyTuple_Check(self->subarray->shape)) {
1806
+ Py_INCREF(self->subarray->shape);
1807
+ return (PyObject *)(self->subarray->shape);
1808
+ }
1809
+ return Py_BuildValue("(O)", self->subarray->shape);
1810
+ }
1811
+
1812
+ NPY_NO_EXPORT PyObject *
1813
+ arraydescr_protocol_descr_get(PyArray_Descr *self)
1814
+ {
1815
+ PyObject *dobj, *res;
1816
+ PyObject *_numpy_internal;
1817
+
1818
+ if (!PyDataType_HASFIELDS(self)) {
1819
+ /* get default */
1820
+ dobj = PyTuple_New(2);
1821
+ if (dobj == NULL) {
1822
+ return NULL;
1823
+ }
1824
+ PyTuple_SET_ITEM(dobj, 0, PyUString_FromString(""));
1825
+ PyTuple_SET_ITEM(dobj, 1, arraydescr_protocol_typestr_get(self));
1826
+ res = PyList_New(1);
1827
+ if (res == NULL) {
1828
+ Py_DECREF(dobj);
1829
+ return NULL;
1830
+ }
1831
+ PyList_SET_ITEM(res, 0, dobj);
1832
+ return res;
1833
+ }
1834
+
1835
+ _numpy_internal = PyImport_ImportModule("numpy.core._internal");
1836
+ if (_numpy_internal == NULL) {
1837
+ return NULL;
1838
+ }
1839
+ res = PyObject_CallMethod(_numpy_internal, "_array_descr", "O", self);
1840
+ Py_DECREF(_numpy_internal);
1841
+ return res;
1842
+ }
1843
+
1844
+ /*
1845
+ * returns 1 for a builtin type
1846
+ * and 2 for a user-defined data-type descriptor
1847
+ * return 0 if neither (i.e. it's a copy of one)
1848
+ */
1849
+ static PyObject *
1850
+ arraydescr_isbuiltin_get(PyArray_Descr *self)
1851
+ {
1852
+ long val;
1853
+ val = 0;
1854
+ if (self->fields == Py_None) {
1855
+ val = 1;
1856
+ }
1857
+ if (PyTypeNum_ISUSERDEF(self->type_num)) {
1858
+ val = 2;
1859
+ }
1860
+ return PyInt_FromLong(val);
1861
+ }
1862
+
1863
+ static int
1864
+ _arraydescr_isnative(PyArray_Descr *self)
1865
+ {
1866
+ if (!PyDataType_HASFIELDS(self)) {
1867
+ return PyArray_ISNBO(self->byteorder);
1868
+ }
1869
+ else {
1870
+ PyObject *key, *value, *title = NULL;
1871
+ PyArray_Descr *new;
1872
+ int offset;
1873
+ Py_ssize_t pos = 0;
1874
+ while (PyDict_Next(self->fields, &pos, &key, &value)) {
1875
+ if NPY_TITLE_KEY(key, value) {
1876
+ continue;
1877
+ }
1878
+ if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset, &title)) {
1879
+ return -1;
1880
+ }
1881
+ if (!_arraydescr_isnative(new)) {
1882
+ return 0;
1883
+ }
1884
+ }
1885
+ }
1886
+ return 1;
1887
+ }
1888
+
1889
+ /*
1890
+ * return Py_True if this data-type descriptor
1891
+ * has native byteorder if no fields are defined
1892
+ *
1893
+ * or if all sub-fields have native-byteorder if
1894
+ * fields are defined
1895
+ */
1896
+ static PyObject *
1897
+ arraydescr_isnative_get(PyArray_Descr *self)
1898
+ {
1899
+ PyObject *ret;
1900
+ int retval;
1901
+ retval = _arraydescr_isnative(self);
1902
+ if (retval == -1) {
1903
+ return NULL;
1904
+ }
1905
+ ret = retval ? Py_True : Py_False;
1906
+ Py_INCREF(ret);
1907
+ return ret;
1908
+ }
1909
+
1910
+ static PyObject *
1911
+ arraydescr_isalignedstruct_get(PyArray_Descr *self)
1912
+ {
1913
+ PyObject *ret;
1914
+ ret = (self->flags&NPY_ALIGNED_STRUCT) ? Py_True : Py_False;
1915
+ Py_INCREF(ret);
1916
+ return ret;
1917
+ }
1918
+
1919
+ static PyObject *
1920
+ arraydescr_fields_get(PyArray_Descr *self)
1921
+ {
1922
+ if (!PyDataType_HASFIELDS(self)) {
1923
+ Py_RETURN_NONE;
1924
+ }
1925
+ return PyDictProxy_New(self->fields);
1926
+ }
1927
+
1928
+ static PyObject *
1929
+ arraydescr_metadata_get(PyArray_Descr *self)
1930
+ {
1931
+ if (self->metadata == NULL) {
1932
+ Py_RETURN_NONE;
1933
+ }
1934
+ return PyDictProxy_New(self->metadata);
1935
+ }
1936
+
1937
+ static PyObject *
1938
+ arraydescr_hasobject_get(PyArray_Descr *self)
1939
+ {
1940
+ if (PyDataType_FLAGCHK(self, NPY_ITEM_HASOBJECT)) {
1941
+ Py_RETURN_TRUE;
1942
+ }
1943
+ else {
1944
+ Py_RETURN_FALSE;
1945
+ }
1946
+ }
1947
+
1948
+ static PyObject *
1949
+ arraydescr_names_get(PyArray_Descr *self)
1950
+ {
1951
+ if (!PyDataType_HASFIELDS(self)) {
1952
+ Py_RETURN_NONE;
1953
+ }
1954
+ Py_INCREF(self->names);
1955
+ return self->names;
1956
+ }
1957
+
1958
+ static int
1959
+ arraydescr_names_set(PyArray_Descr *self, PyObject *val)
1960
+ {
1961
+ int N = 0;
1962
+ int i;
1963
+ PyObject *new_names;
1964
+ PyObject *new_fields;
1965
+
1966
+ if (val == NULL) {
1967
+ PyErr_SetString(PyExc_AttributeError,
1968
+ "Cannot delete dtype names attribute");
1969
+ return -1;
1970
+ }
1971
+ if (!PyDataType_HASFIELDS(self)) {
1972
+ PyErr_SetString(PyExc_ValueError,
1973
+ "there are no fields defined");
1974
+ return -1;
1975
+ }
1976
+
1977
+ /*
1978
+ * FIXME
1979
+ *
1980
+ * This deprecation has been temporarily removed for the NumPy 1.7
1981
+ * release. It should be re-added after the 1.7 branch is done,
1982
+ * and a convenience API to replace the typical use-cases for
1983
+ * mutable names should be implemented.
1984
+ *
1985
+ * if (DEPRECATE("Setting NumPy dtype names is deprecated, the dtype "
1986
+ * "will become immutable in a future version") < 0) {
1987
+ * return -1;
1988
+ * }
1989
+ */
1990
+
1991
+ N = PyTuple_GET_SIZE(self->names);
1992
+ if (!PySequence_Check(val) || PyObject_Size((PyObject *)val) != N) {
1993
+ PyErr_Format(PyExc_ValueError,
1994
+ "must replace all names at once with a sequence of length %d",
1995
+ N);
1996
+ return -1;
1997
+ }
1998
+ /* Make sure all entries are strings */
1999
+ for (i = 0; i < N; i++) {
2000
+ PyObject *item;
2001
+ int valid = 1;
2002
+ item = PySequence_GetItem(val, i);
2003
+ valid = PyUString_Check(item);
2004
+ Py_DECREF(item);
2005
+ if (!valid) {
2006
+ PyErr_Format(PyExc_ValueError,
2007
+ "item #%d of names is of type %s and not string",
2008
+ i, Py_TYPE(item)->tp_name);
2009
+ return -1;
2010
+ }
2011
+ }
2012
+ /* Invalidate cached hash value */
2013
+ self->hash = -1;
2014
+ /* Update dictionary keys in fields */
2015
+ new_names = PySequence_Tuple(val);
2016
+ new_fields = PyDict_New();
2017
+ for (i = 0; i < N; i++) {
2018
+ PyObject *key;
2019
+ PyObject *item;
2020
+ PyObject *new_key;
2021
+ int ret;
2022
+ key = PyTuple_GET_ITEM(self->names, i);
2023
+ /* Borrowed references to item and new_key */
2024
+ item = PyDict_GetItem(self->fields, key);
2025
+ new_key = PyTuple_GET_ITEM(new_names, i);
2026
+ /* Check for duplicates */
2027
+ ret = PyDict_Contains(new_fields, new_key);
2028
+ if (ret != 0) {
2029
+ if (ret < 0) {
2030
+ PyErr_Clear();
2031
+ }
2032
+ PyErr_SetString(PyExc_ValueError, "Duplicate field names given.");
2033
+ Py_DECREF(new_names);
2034
+ Py_DECREF(new_fields);
2035
+ return -1;
2036
+ }
2037
+ PyDict_SetItem(new_fields, new_key, item);
2038
+ }
2039
+
2040
+ /* Replace names */
2041
+ Py_DECREF(self->names);
2042
+ self->names = new_names;
2043
+
2044
+ /* Replace fields */
2045
+ Py_DECREF(self->fields);
2046
+ self->fields = new_fields;
2047
+
2048
+ return 0;
2049
+ }
2050
+
2051
+ static PyGetSetDef arraydescr_getsets[] = {
2052
+ {"subdtype",
2053
+ (getter)arraydescr_subdescr_get,
2054
+ NULL, NULL, NULL},
2055
+ {"descr",
2056
+ (getter)arraydescr_protocol_descr_get,
2057
+ NULL, NULL, NULL},
2058
+ {"str",
2059
+ (getter)arraydescr_protocol_typestr_get,
2060
+ NULL, NULL, NULL},
2061
+ {"name",
2062
+ (getter)arraydescr_typename_get,
2063
+ NULL, NULL, NULL},
2064
+ {"base",
2065
+ (getter)arraydescr_base_get,
2066
+ NULL, NULL, NULL},
2067
+ {"shape",
2068
+ (getter)arraydescr_shape_get,
2069
+ NULL, NULL, NULL},
2070
+ {"isbuiltin",
2071
+ (getter)arraydescr_isbuiltin_get,
2072
+ NULL, NULL, NULL},
2073
+ {"isnative",
2074
+ (getter)arraydescr_isnative_get,
2075
+ NULL, NULL, NULL},
2076
+ {"isalignedstruct",
2077
+ (getter)arraydescr_isalignedstruct_get,
2078
+ NULL, NULL, NULL},
2079
+ {"fields",
2080
+ (getter)arraydescr_fields_get,
2081
+ NULL, NULL, NULL},
2082
+ {"metadata",
2083
+ (getter)arraydescr_metadata_get,
2084
+ NULL, NULL, NULL},
2085
+ {"names",
2086
+ (getter)arraydescr_names_get,
2087
+ (setter)arraydescr_names_set,
2088
+ NULL, NULL},
2089
+ {"hasobject",
2090
+ (getter)arraydescr_hasobject_get,
2091
+ NULL, NULL, NULL},
2092
+ {NULL, NULL, NULL, NULL, NULL},
2093
+ };
2094
+
2095
+ static PyObject *
2096
+ arraydescr_new(PyTypeObject *NPY_UNUSED(subtype),
2097
+ PyObject *args, PyObject *kwds)
2098
+ {
2099
+ PyObject *odescr, *metadata=NULL;
2100
+ PyArray_Descr *descr, *conv;
2101
+ npy_bool align = NPY_FALSE;
2102
+ npy_bool copy = NPY_FALSE;
2103
+ npy_bool copied = NPY_FALSE;
2104
+
2105
+ static char *kwlist[] = {"dtype", "align", "copy", "metadata", NULL};
2106
+
2107
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O&O&O!", kwlist,
2108
+ &odescr,
2109
+ PyArray_BoolConverter, &align,
2110
+ PyArray_BoolConverter, &copy,
2111
+ &PyDict_Type, &metadata)) {
2112
+ return NULL;
2113
+ }
2114
+
2115
+ if (align) {
2116
+ if (!PyArray_DescrAlignConverter(odescr, &conv)) {
2117
+ return NULL;
2118
+ }
2119
+ }
2120
+ else if (!PyArray_DescrConverter(odescr, &conv)) {
2121
+ return NULL;
2122
+ }
2123
+
2124
+ /* Get a new copy of it unless it's already a copy */
2125
+ if (copy && conv->fields == Py_None) {
2126
+ descr = PyArray_DescrNew(conv);
2127
+ Py_DECREF(conv);
2128
+ conv = descr;
2129
+ copied = NPY_TRUE;
2130
+ }
2131
+
2132
+ if ((metadata != NULL)) {
2133
+ /*
2134
+ * We need to be sure to make a new copy of the data-type and any
2135
+ * underlying dictionary
2136
+ */
2137
+ if (!copied) {
2138
+ copied = NPY_TRUE;
2139
+ descr = PyArray_DescrNew(conv);
2140
+ Py_DECREF(conv);
2141
+ conv = descr;
2142
+ }
2143
+ if ((conv->metadata != NULL)) {
2144
+ /*
2145
+ * Make a copy of the metadata before merging with the
2146
+ * input metadata so that this data-type descriptor has
2147
+ * it's own copy
2148
+ */
2149
+ /* Save a reference */
2150
+ odescr = conv->metadata;
2151
+ conv->metadata = PyDict_Copy(odescr);
2152
+ /* Decrement the old reference */
2153
+ Py_DECREF(odescr);
2154
+
2155
+ /*
2156
+ * Update conv->metadata with anything new in metadata
2157
+ * keyword, but do not over-write anything already there
2158
+ */
2159
+ if (PyDict_Merge(conv->metadata, metadata, 0) != 0) {
2160
+ Py_DECREF(conv);
2161
+ return NULL;
2162
+ }
2163
+ }
2164
+ else {
2165
+ /* Make a copy of the input dictionary */
2166
+ conv->metadata = PyDict_Copy(metadata);
2167
+ }
2168
+ }
2169
+
2170
+ return (PyObject *)conv;
2171
+ }
2172
+
2173
+ /*
2174
+ * Return a tuple of
2175
+ * (cleaned metadata dictionary, tuple with (str, num))
2176
+ */
2177
+ static PyObject *
2178
+ _get_pickleabletype_from_datetime_metadata(PyArray_Descr *dtype)
2179
+ {
2180
+ PyObject *ret, *dt_tuple;
2181
+ PyArray_DatetimeMetaData *meta;
2182
+
2183
+ /* Create the 2-item tuple to return */
2184
+ ret = PyTuple_New(2);
2185
+ if (ret == NULL) {
2186
+ return NULL;
2187
+ }
2188
+
2189
+ /* Store the metadata dictionary */
2190
+ if (dtype->metadata != NULL) {
2191
+ Py_INCREF(dtype->metadata);
2192
+ PyTuple_SET_ITEM(ret, 0, dtype->metadata);
2193
+ } else {
2194
+ PyTuple_SET_ITEM(ret, 0, PyDict_New());
2195
+ }
2196
+
2197
+ /* Convert the datetime metadata into a tuple */
2198
+ meta = get_datetime_metadata_from_dtype(dtype);
2199
+ if (meta == NULL) {
2200
+ Py_DECREF(ret);
2201
+ return NULL;
2202
+ }
2203
+ /* Use a 4-tuple that numpy 1.6 knows how to unpickle */
2204
+ dt_tuple = PyTuple_New(4);
2205
+ if (dt_tuple == NULL) {
2206
+ Py_DECREF(ret);
2207
+ return NULL;
2208
+ }
2209
+ PyTuple_SET_ITEM(dt_tuple, 0,
2210
+ PyBytes_FromString(_datetime_strings[meta->base]));
2211
+ PyTuple_SET_ITEM(dt_tuple, 1,
2212
+ PyInt_FromLong(meta->num));
2213
+ PyTuple_SET_ITEM(dt_tuple, 2,
2214
+ PyInt_FromLong(1));
2215
+ PyTuple_SET_ITEM(dt_tuple, 3,
2216
+ PyInt_FromLong(1));
2217
+
2218
+ PyTuple_SET_ITEM(ret, 1, dt_tuple);
2219
+
2220
+ return ret;
2221
+ }
2222
+
2223
+ /*
2224
+ * return a tuple of (callable object, args, state).
2225
+ *
2226
+ * TODO: This method needs to change so that unpickling doesn't
2227
+ * use __setstate__. This is required for the dtype
2228
+ * to be an immutable object.
2229
+ */
2230
+ static PyObject *
2231
+ arraydescr_reduce(PyArray_Descr *self, PyObject *NPY_UNUSED(args))
2232
+ {
2233
+ /*
2234
+ * version number of this pickle type. Increment if we need to
2235
+ * change the format. Be sure to handle the old versions in
2236
+ * arraydescr_setstate.
2237
+ */
2238
+ const int version = 4;
2239
+ PyObject *ret, *mod, *obj;
2240
+ PyObject *state;
2241
+ char endian;
2242
+ int elsize, alignment;
2243
+
2244
+ ret = PyTuple_New(3);
2245
+ if (ret == NULL) {
2246
+ return NULL;
2247
+ }
2248
+ mod = PyImport_ImportModule("numpy.core.multiarray");
2249
+ if (mod == NULL) {
2250
+ Py_DECREF(ret);
2251
+ return NULL;
2252
+ }
2253
+ obj = PyObject_GetAttrString(mod, "dtype");
2254
+ Py_DECREF(mod);
2255
+ if (obj == NULL) {
2256
+ Py_DECREF(ret);
2257
+ return NULL;
2258
+ }
2259
+ PyTuple_SET_ITEM(ret, 0, obj);
2260
+ if (PyTypeNum_ISUSERDEF(self->type_num)
2261
+ || ((self->type_num == NPY_VOID
2262
+ && self->typeobj != &PyVoidArrType_Type))) {
2263
+ obj = (PyObject *)self->typeobj;
2264
+ Py_INCREF(obj);
2265
+ }
2266
+ else {
2267
+ elsize = self->elsize;
2268
+ if (self->type_num == NPY_UNICODE) {
2269
+ elsize >>= 2;
2270
+ }
2271
+ obj = PyUString_FromFormat("%c%d",self->kind, elsize);
2272
+ }
2273
+ PyTuple_SET_ITEM(ret, 1, Py_BuildValue("(Nii)", obj, 0, 1));
2274
+
2275
+ /*
2276
+ * Now return the state which is at least byteorder,
2277
+ * subarray, and fields
2278
+ */
2279
+ endian = self->byteorder;
2280
+ if (endian == '=') {
2281
+ endian = '<';
2282
+ if (!PyArray_IsNativeByteOrder(endian)) {
2283
+ endian = '>';
2284
+ }
2285
+ }
2286
+ if (PyDataType_ISDATETIME(self)) {
2287
+ PyObject *newobj;
2288
+ state = PyTuple_New(9);
2289
+ PyTuple_SET_ITEM(state, 0, PyInt_FromLong(version));
2290
+ /*
2291
+ * newobj is a tuple of the Python metadata dictionary
2292
+ * and tuple of date_time info (str, num)
2293
+ */
2294
+ newobj = _get_pickleabletype_from_datetime_metadata(self);
2295
+ if (newobj == NULL) {
2296
+ Py_DECREF(state);
2297
+ Py_DECREF(ret);
2298
+ return NULL;
2299
+ }
2300
+ PyTuple_SET_ITEM(state, 8, newobj);
2301
+ }
2302
+ else if (self->metadata) {
2303
+ state = PyTuple_New(9);
2304
+ PyTuple_SET_ITEM(state, 0, PyInt_FromLong(version));
2305
+ Py_INCREF(self->metadata);
2306
+ PyTuple_SET_ITEM(state, 8, self->metadata);
2307
+ }
2308
+ else { /* Use version 3 pickle format */
2309
+ state = PyTuple_New(8);
2310
+ PyTuple_SET_ITEM(state, 0, PyInt_FromLong(3));
2311
+ }
2312
+
2313
+ PyTuple_SET_ITEM(state, 1, PyUString_FromFormat("%c", endian));
2314
+ PyTuple_SET_ITEM(state, 2, arraydescr_subdescr_get(self));
2315
+ if (PyDataType_HASFIELDS(self)) {
2316
+ Py_INCREF(self->names);
2317
+ Py_INCREF(self->fields);
2318
+ PyTuple_SET_ITEM(state, 3, self->names);
2319
+ PyTuple_SET_ITEM(state, 4, self->fields);
2320
+ }
2321
+ else {
2322
+ PyTuple_SET_ITEM(state, 3, Py_None);
2323
+ PyTuple_SET_ITEM(state, 4, Py_None);
2324
+ Py_INCREF(Py_None);
2325
+ Py_INCREF(Py_None);
2326
+ }
2327
+
2328
+ /* for extended types it also includes elsize and alignment */
2329
+ if (PyTypeNum_ISEXTENDED(self->type_num)) {
2330
+ elsize = self->elsize;
2331
+ alignment = self->alignment;
2332
+ }
2333
+ else {
2334
+ elsize = -1;
2335
+ alignment = -1;
2336
+ }
2337
+ PyTuple_SET_ITEM(state, 5, PyInt_FromLong(elsize));
2338
+ PyTuple_SET_ITEM(state, 6, PyInt_FromLong(alignment));
2339
+ PyTuple_SET_ITEM(state, 7, PyInt_FromLong(self->flags));
2340
+
2341
+ PyTuple_SET_ITEM(ret, 2, state);
2342
+ return ret;
2343
+ }
2344
+
2345
+ /*
2346
+ * returns NPY_OBJECT_DTYPE_FLAGS if this data-type has an object portion used
2347
+ * when setting the state because hasobject is not stored.
2348
+ */
2349
+ static char
2350
+ _descr_find_object(PyArray_Descr *self)
2351
+ {
2352
+ if (self->flags
2353
+ || self->type_num == NPY_OBJECT
2354
+ || self->kind == 'O') {
2355
+ return NPY_OBJECT_DTYPE_FLAGS;
2356
+ }
2357
+ if (PyDataType_HASFIELDS(self)) {
2358
+ PyObject *key, *value, *title = NULL;
2359
+ PyArray_Descr *new;
2360
+ int offset;
2361
+ Py_ssize_t pos = 0;
2362
+
2363
+ while (PyDict_Next(self->fields, &pos, &key, &value)) {
2364
+ if NPY_TITLE_KEY(key, value) {
2365
+ continue;
2366
+ }
2367
+ if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset, &title)) {
2368
+ PyErr_Clear();
2369
+ return 0;
2370
+ }
2371
+ if (_descr_find_object(new)) {
2372
+ new->flags = NPY_OBJECT_DTYPE_FLAGS;
2373
+ return NPY_OBJECT_DTYPE_FLAGS;
2374
+ }
2375
+ }
2376
+ }
2377
+ return 0;
2378
+ }
2379
+
2380
+ /*
2381
+ * state is at least byteorder, subarray, and fields but could include elsize
2382
+ * and alignment for EXTENDED arrays
2383
+ */
2384
+ static PyObject *
2385
+ arraydescr_setstate(PyArray_Descr *self, PyObject *args)
2386
+ {
2387
+ int elsize = -1, alignment = -1;
2388
+ int version = 4;
2389
+ char endian;
2390
+ PyObject *endian_obj;
2391
+ PyObject *subarray, *fields, *names = NULL, *metadata=NULL;
2392
+ int incref_names = 1;
2393
+ int int_dtypeflags = 0;
2394
+ char dtypeflags;
2395
+
2396
+ if (self->fields == Py_None) {
2397
+ Py_RETURN_NONE;
2398
+ }
2399
+ if (PyTuple_GET_SIZE(args) != 1
2400
+ || !(PyTuple_Check(PyTuple_GET_ITEM(args, 0)))) {
2401
+ PyErr_BadInternalCall();
2402
+ return NULL;
2403
+ }
2404
+ switch (PyTuple_GET_SIZE(PyTuple_GET_ITEM(args,0))) {
2405
+ case 9:
2406
+ if (!PyArg_ParseTuple(args, "(iOOOOiiiO)", &version, &endian_obj,
2407
+ &subarray, &names, &fields, &elsize,
2408
+ &alignment, &int_dtypeflags, &metadata)) {
2409
+ PyErr_Clear();
2410
+ return NULL;
2411
+ }
2412
+ break;
2413
+ case 8:
2414
+ if (!PyArg_ParseTuple(args, "(iOOOOiii)", &version, &endian_obj,
2415
+ &subarray, &names, &fields, &elsize,
2416
+ &alignment, &int_dtypeflags)) {
2417
+ return NULL;
2418
+ }
2419
+ break;
2420
+ case 7:
2421
+ if (!PyArg_ParseTuple(args, "(iOOOOii)", &version, &endian_obj,
2422
+ &subarray, &names, &fields, &elsize,
2423
+ &alignment)) {
2424
+ return NULL;
2425
+ }
2426
+ break;
2427
+ case 6:
2428
+ if (!PyArg_ParseTuple(args, "(iOOOii)", &version,
2429
+ &endian_obj, &subarray, &fields,
2430
+ &elsize, &alignment)) {
2431
+ return NULL;
2432
+ }
2433
+ break;
2434
+ case 5:
2435
+ version = 0;
2436
+ if (!PyArg_ParseTuple(args, "(OOOii)",
2437
+ &endian_obj, &subarray, &fields, &elsize,
2438
+ &alignment)) {
2439
+ return NULL;
2440
+ }
2441
+ break;
2442
+ default:
2443
+ /* raise an error */
2444
+ if (PyTuple_GET_SIZE(PyTuple_GET_ITEM(args,0)) > 5) {
2445
+ version = PyInt_AsLong(PyTuple_GET_ITEM(args, 0));
2446
+ }
2447
+ else {
2448
+ version = -1;
2449
+ }
2450
+ }
2451
+
2452
+ /*
2453
+ * If we ever need another pickle format, increment the version
2454
+ * number. But we should still be able to handle the old versions.
2455
+ */
2456
+ if (version < 0 || version > 4) {
2457
+ PyErr_Format(PyExc_ValueError,
2458
+ "can't handle version %d of numpy.dtype pickle",
2459
+ version);
2460
+ return NULL;
2461
+ }
2462
+ /* Invalidate cached hash value */
2463
+ self->hash = -1;
2464
+
2465
+ if (version == 1 || version == 0) {
2466
+ if (fields != Py_None) {
2467
+ PyObject *key, *list;
2468
+ key = PyInt_FromLong(-1);
2469
+ list = PyDict_GetItem(fields, key);
2470
+ if (!list) {
2471
+ return NULL;
2472
+ }
2473
+ Py_INCREF(list);
2474
+ names = list;
2475
+ PyDict_DelItem(fields, key);
2476
+ incref_names = 0;
2477
+ }
2478
+ else {
2479
+ names = Py_None;
2480
+ }
2481
+ }
2482
+
2483
+ /* Parse endian */
2484
+ if (PyUnicode_Check(endian_obj) || PyBytes_Check(endian_obj)) {
2485
+ PyObject *tmp = NULL;
2486
+ char *str;
2487
+ Py_ssize_t len;
2488
+
2489
+ if (PyUnicode_Check(endian_obj)) {
2490
+ tmp = PyUnicode_AsASCIIString(endian_obj);
2491
+ if (tmp == NULL) {
2492
+ return NULL;
2493
+ }
2494
+ endian_obj = tmp;
2495
+ }
2496
+
2497
+ if (PyBytes_AsStringAndSize(endian_obj, &str, &len) < 0) {
2498
+ Py_XDECREF(tmp);
2499
+ return NULL;
2500
+ }
2501
+ if (len != 1) {
2502
+ PyErr_SetString(PyExc_ValueError,
2503
+ "endian is not 1-char string in Numpy dtype unpickling");
2504
+ Py_XDECREF(tmp);
2505
+ return NULL;
2506
+ }
2507
+ endian = str[0];
2508
+ Py_XDECREF(tmp);
2509
+ }
2510
+ else {
2511
+ PyErr_SetString(PyExc_ValueError,
2512
+ "endian is not a string in Numpy dtype unpickling");
2513
+ return NULL;
2514
+ }
2515
+
2516
+ if ((fields == Py_None && names != Py_None) ||
2517
+ (names == Py_None && fields != Py_None)) {
2518
+ PyErr_Format(PyExc_ValueError,
2519
+ "inconsistent fields and names in Numpy dtype unpickling");
2520
+ return NULL;
2521
+ }
2522
+
2523
+ if (names != Py_None && !PyTuple_Check(names)) {
2524
+ PyErr_Format(PyExc_ValueError,
2525
+ "non-tuple names in Numpy dtype unpickling");
2526
+ return NULL;
2527
+ }
2528
+
2529
+ if (fields != Py_None && !PyDict_Check(fields)) {
2530
+ PyErr_Format(PyExc_ValueError,
2531
+ "non-dict fields in Numpy dtype unpickling");
2532
+ return NULL;
2533
+ }
2534
+
2535
+ if (endian != '|' && PyArray_IsNativeByteOrder(endian)) {
2536
+ endian = '=';
2537
+ }
2538
+ self->byteorder = endian;
2539
+ if (self->subarray) {
2540
+ Py_XDECREF(self->subarray->base);
2541
+ Py_XDECREF(self->subarray->shape);
2542
+ PyArray_free(self->subarray);
2543
+ }
2544
+ self->subarray = NULL;
2545
+
2546
+ if (subarray != Py_None) {
2547
+ PyObject *subarray_shape;
2548
+
2549
+ /*
2550
+ * Ensure that subarray[0] is an ArrayDescr and
2551
+ * that subarray_shape obtained from subarray[1] is a tuple of integers.
2552
+ */
2553
+ if (!(PyTuple_Check(subarray) &&
2554
+ PyTuple_Size(subarray) == 2 &&
2555
+ PyArray_DescrCheck(PyTuple_GET_ITEM(subarray, 0)))) {
2556
+ PyErr_Format(PyExc_ValueError,
2557
+ "incorrect subarray in __setstate__");
2558
+ return NULL;
2559
+ }
2560
+ subarray_shape = PyTuple_GET_ITEM(subarray, 1);
2561
+ if (PyNumber_Check(subarray_shape)) {
2562
+ PyObject *tmp;
2563
+ #if defined(NPY_PY3K)
2564
+ tmp = PyNumber_Long(subarray_shape);
2565
+ #else
2566
+ tmp = PyNumber_Int(subarray_shape);
2567
+ #endif
2568
+ if (tmp == NULL) {
2569
+ return NULL;
2570
+ }
2571
+ subarray_shape = Py_BuildValue("(O)", tmp);
2572
+ Py_DECREF(tmp);
2573
+ if (subarray_shape == NULL) {
2574
+ return NULL;
2575
+ }
2576
+ }
2577
+ else if (_is_tuple_of_integers(subarray_shape)) {
2578
+ Py_INCREF(subarray_shape);
2579
+ }
2580
+ else {
2581
+ PyErr_Format(PyExc_ValueError,
2582
+ "incorrect subarray shape in __setstate__");
2583
+ return NULL;
2584
+ }
2585
+
2586
+ self->subarray = PyArray_malloc(sizeof(PyArray_ArrayDescr));
2587
+ if (!PyDataType_HASSUBARRAY(self)) {
2588
+ return PyErr_NoMemory();
2589
+ }
2590
+ self->subarray->base = (PyArray_Descr *)PyTuple_GET_ITEM(subarray, 0);
2591
+ Py_INCREF(self->subarray->base);
2592
+ self->subarray->shape = subarray_shape;
2593
+ }
2594
+
2595
+ if (fields != Py_None) {
2596
+ /*
2597
+ * Ensure names are of appropriate string type
2598
+ */
2599
+ Py_ssize_t i;
2600
+ int names_ok = 1;
2601
+ PyObject *name;
2602
+
2603
+ for (i = 0; i < PyTuple_GET_SIZE(names); ++i) {
2604
+ name = PyTuple_GET_ITEM(names, i);
2605
+ if (!PyUString_Check(name)) {
2606
+ names_ok = 0;
2607
+ break;
2608
+ }
2609
+ }
2610
+
2611
+ if (names_ok) {
2612
+ Py_XDECREF(self->fields);
2613
+ self->fields = fields;
2614
+ Py_INCREF(fields);
2615
+ Py_XDECREF(self->names);
2616
+ self->names = names;
2617
+ if (incref_names) {
2618
+ Py_INCREF(names);
2619
+ }
2620
+ }
2621
+ else {
2622
+ #if defined(NPY_PY3K)
2623
+ /*
2624
+ * To support pickle.load(f, encoding='bytes') for loading Py2
2625
+ * generated pickles on Py3, we need to be more lenient and convert
2626
+ * field names from byte strings to unicode.
2627
+ */
2628
+ PyObject *tmp, *new_name, *field;
2629
+
2630
+ tmp = PyDict_New();
2631
+ if (tmp == NULL) {
2632
+ return NULL;
2633
+ }
2634
+ Py_XDECREF(self->fields);
2635
+ self->fields = tmp;
2636
+
2637
+ tmp = PyTuple_New(PyTuple_GET_SIZE(names));
2638
+ if (tmp == NULL) {
2639
+ return NULL;
2640
+ }
2641
+ Py_XDECREF(self->names);
2642
+ self->names = tmp;
2643
+
2644
+ for (i = 0; i < PyTuple_GET_SIZE(names); ++i) {
2645
+ name = PyTuple_GET_ITEM(names, i);
2646
+ field = PyDict_GetItem(fields, name);
2647
+ if (!field) {
2648
+ return NULL;
2649
+ }
2650
+
2651
+ if (PyUnicode_Check(name)) {
2652
+ new_name = name;
2653
+ Py_INCREF(new_name);
2654
+ }
2655
+ else {
2656
+ new_name = PyUnicode_FromEncodedObject(name, "ASCII", "strict");
2657
+ if (new_name == NULL) {
2658
+ return NULL;
2659
+ }
2660
+ }
2661
+
2662
+ PyTuple_SET_ITEM(self->names, i, new_name);
2663
+ if (PyDict_SetItem(self->fields, new_name, field) != 0) {
2664
+ return NULL;
2665
+ }
2666
+ }
2667
+ #else
2668
+ PyErr_Format(PyExc_ValueError,
2669
+ "non-string names in Numpy dtype unpickling");
2670
+ return NULL;
2671
+ #endif
2672
+ }
2673
+ }
2674
+
2675
+ if (PyTypeNum_ISEXTENDED(self->type_num)) {
2676
+ self->elsize = elsize;
2677
+ self->alignment = alignment;
2678
+ }
2679
+
2680
+ /*
2681
+ * We use an integer converted to char for backward compatibility with
2682
+ * pickled arrays. Pickled arrays created with previous versions encoded
2683
+ * flags as an int even though it actually was a char in the PyArray_Descr
2684
+ * structure
2685
+ */
2686
+ dtypeflags = int_dtypeflags;
2687
+ if (dtypeflags != int_dtypeflags) {
2688
+ PyErr_Format(PyExc_ValueError,
2689
+ "incorrect value for flags variable (overflow)");
2690
+ return NULL;
2691
+ }
2692
+ else {
2693
+ self->flags = dtypeflags;
2694
+ }
2695
+
2696
+ if (version < 3) {
2697
+ self->flags = _descr_find_object(self);
2698
+ }
2699
+
2700
+ /*
2701
+ * We have a borrowed reference to metadata so no need
2702
+ * to alter reference count when throwing away Py_None.
2703
+ */
2704
+ if (metadata == Py_None) {
2705
+ metadata = NULL;
2706
+ }
2707
+
2708
+ if (PyDataType_ISDATETIME(self) && (metadata != NULL)) {
2709
+ PyObject *old_metadata, *errmsg;
2710
+ PyArray_DatetimeMetaData temp_dt_data;
2711
+
2712
+ if ((! PyTuple_Check(metadata)) || (PyTuple_Size(metadata) != 2)) {
2713
+ errmsg = PyUString_FromString("Invalid datetime dtype (metadata, c_metadata): ");
2714
+ PyUString_ConcatAndDel(&errmsg, PyObject_Repr(metadata));
2715
+ PyErr_SetObject(PyExc_ValueError, errmsg);
2716
+ Py_DECREF(errmsg);
2717
+ return NULL;
2718
+ }
2719
+
2720
+ if (convert_datetime_metadata_tuple_to_datetime_metadata(
2721
+ PyTuple_GET_ITEM(metadata, 1),
2722
+ &temp_dt_data) < 0) {
2723
+ return NULL;
2724
+ }
2725
+
2726
+ old_metadata = self->metadata;
2727
+ self->metadata = PyTuple_GET_ITEM(metadata, 0);
2728
+ memcpy((char *) &((PyArray_DatetimeDTypeMetaData *)self->c_metadata)->meta,
2729
+ (char *) &temp_dt_data,
2730
+ sizeof(PyArray_DatetimeMetaData));
2731
+ Py_XINCREF(self->metadata);
2732
+ Py_XDECREF(old_metadata);
2733
+ }
2734
+ else {
2735
+ PyObject *old_metadata = self->metadata;
2736
+ self->metadata = metadata;
2737
+ Py_XINCREF(self->metadata);
2738
+ Py_XDECREF(old_metadata);
2739
+ }
2740
+
2741
+ Py_RETURN_NONE;
2742
+ }
2743
+
2744
+ /*NUMPY_API
2745
+ *
2746
+ * Get type-descriptor from an object forcing alignment if possible
2747
+ * None goes to DEFAULT type.
2748
+ *
2749
+ * any object with the .fields attribute and/or .itemsize attribute (if the
2750
+ *.fields attribute does not give the total size -- i.e. a partial record
2751
+ * naming). If itemsize is given it must be >= size computed from fields
2752
+ *
2753
+ * The .fields attribute must return a convertible dictionary if present.
2754
+ * Result inherits from NPY_VOID.
2755
+ */
2756
+ NPY_NO_EXPORT int
2757
+ PyArray_DescrAlignConverter(PyObject *obj, PyArray_Descr **at)
2758
+ {
2759
+ if (PyDict_Check(obj) || PyDictProxy_Check(obj)) {
2760
+ *at = _convert_from_dict(obj, 1);
2761
+ }
2762
+ else if (PyBytes_Check(obj)) {
2763
+ *at = _convert_from_commastring(obj, 1);
2764
+ }
2765
+ else if (PyUnicode_Check(obj)) {
2766
+ PyObject *tmp;
2767
+ tmp = PyUnicode_AsASCIIString(obj);
2768
+ *at = _convert_from_commastring(tmp, 1);
2769
+ Py_DECREF(tmp);
2770
+ }
2771
+ else if (PyList_Check(obj)) {
2772
+ *at = _convert_from_array_descr(obj, 1);
2773
+ }
2774
+ else {
2775
+ return PyArray_DescrConverter(obj, at);
2776
+ }
2777
+ if (*at == NULL) {
2778
+ if (!PyErr_Occurred()) {
2779
+ PyErr_SetString(PyExc_ValueError,
2780
+ "data-type-descriptor not understood");
2781
+ }
2782
+ return NPY_FAIL;
2783
+ }
2784
+ return NPY_SUCCEED;
2785
+ }
2786
+
2787
+ /*NUMPY_API
2788
+ *
2789
+ * Get type-descriptor from an object forcing alignment if possible
2790
+ * None goes to NULL.
2791
+ */
2792
+ NPY_NO_EXPORT int
2793
+ PyArray_DescrAlignConverter2(PyObject *obj, PyArray_Descr **at)
2794
+ {
2795
+ if (PyDict_Check(obj) || PyDictProxy_Check(obj)) {
2796
+ *at = _convert_from_dict(obj, 1);
2797
+ }
2798
+ else if (PyBytes_Check(obj)) {
2799
+ *at = _convert_from_commastring(obj, 1);
2800
+ }
2801
+ else if (PyUnicode_Check(obj)) {
2802
+ PyObject *tmp;
2803
+ tmp = PyUnicode_AsASCIIString(obj);
2804
+ *at = _convert_from_commastring(tmp, 1);
2805
+ Py_DECREF(tmp);
2806
+ }
2807
+ else if (PyList_Check(obj)) {
2808
+ *at = _convert_from_array_descr(obj, 1);
2809
+ }
2810
+ else {
2811
+ return PyArray_DescrConverter2(obj, at);
2812
+ }
2813
+ if (*at == NULL) {
2814
+ if (!PyErr_Occurred()) {
2815
+ PyErr_SetString(PyExc_ValueError,
2816
+ "data-type-descriptor not understood");
2817
+ }
2818
+ return NPY_FAIL;
2819
+ }
2820
+ return NPY_SUCCEED;
2821
+ }
2822
+
2823
+
2824
+
2825
+ /*NUMPY_API
2826
+ *
2827
+ * returns a copy of the PyArray_Descr structure with the byteorder
2828
+ * altered:
2829
+ * no arguments: The byteorder is swapped (in all subfields as well)
2830
+ * single argument: The byteorder is forced to the given state
2831
+ * (in all subfields as well)
2832
+ *
2833
+ * Valid states: ('big', '>') or ('little' or '<')
2834
+ * ('native', or '=')
2835
+ *
2836
+ * If a descr structure with | is encountered it's own
2837
+ * byte-order is not changed but any fields are:
2838
+ *
2839
+ *
2840
+ * Deep bytorder change of a data-type descriptor
2841
+ * *** Leaves reference count of self unchanged --- does not DECREF self ***
2842
+ */
2843
+ NPY_NO_EXPORT PyArray_Descr *
2844
+ PyArray_DescrNewByteorder(PyArray_Descr *self, char newendian)
2845
+ {
2846
+ PyArray_Descr *new;
2847
+ char endian;
2848
+
2849
+ new = PyArray_DescrNew(self);
2850
+ endian = new->byteorder;
2851
+ if (endian != NPY_IGNORE) {
2852
+ if (newendian == NPY_SWAP) {
2853
+ /* swap byteorder */
2854
+ if (PyArray_ISNBO(endian)) {
2855
+ endian = NPY_OPPBYTE;
2856
+ }
2857
+ else {
2858
+ endian = NPY_NATBYTE;
2859
+ }
2860
+ new->byteorder = endian;
2861
+ }
2862
+ else if (newendian != NPY_IGNORE) {
2863
+ new->byteorder = newendian;
2864
+ }
2865
+ }
2866
+ if (PyDataType_HASFIELDS(new)) {
2867
+ PyObject *newfields;
2868
+ PyObject *key, *value;
2869
+ PyObject *newvalue;
2870
+ PyObject *old;
2871
+ PyArray_Descr *newdescr;
2872
+ Py_ssize_t pos = 0;
2873
+ int len, i;
2874
+
2875
+ newfields = PyDict_New();
2876
+ /* make new dictionary with replaced PyArray_Descr Objects */
2877
+ while (PyDict_Next(self->fields, &pos, &key, &value)) {
2878
+ if NPY_TITLE_KEY(key, value) {
2879
+ continue;
2880
+ }
2881
+ if (!PyUString_Check(key) || !PyTuple_Check(value) ||
2882
+ ((len=PyTuple_GET_SIZE(value)) < 2)) {
2883
+ continue;
2884
+ }
2885
+ old = PyTuple_GET_ITEM(value, 0);
2886
+ if (!PyArray_DescrCheck(old)) {
2887
+ continue;
2888
+ }
2889
+ newdescr = PyArray_DescrNewByteorder(
2890
+ (PyArray_Descr *)old, newendian);
2891
+ if (newdescr == NULL) {
2892
+ Py_DECREF(newfields); Py_DECREF(new);
2893
+ return NULL;
2894
+ }
2895
+ newvalue = PyTuple_New(len);
2896
+ PyTuple_SET_ITEM(newvalue, 0, (PyObject *)newdescr);
2897
+ for (i = 1; i < len; i++) {
2898
+ old = PyTuple_GET_ITEM(value, i);
2899
+ Py_INCREF(old);
2900
+ PyTuple_SET_ITEM(newvalue, i, old);
2901
+ }
2902
+ PyDict_SetItem(newfields, key, newvalue);
2903
+ Py_DECREF(newvalue);
2904
+ }
2905
+ Py_DECREF(new->fields);
2906
+ new->fields = newfields;
2907
+ }
2908
+ if (PyDataType_HASSUBARRAY(new)) {
2909
+ Py_DECREF(new->subarray->base);
2910
+ new->subarray->base = PyArray_DescrNewByteorder(
2911
+ self->subarray->base, newendian);
2912
+ }
2913
+ return new;
2914
+ }
2915
+
2916
+
2917
+ static PyObject *
2918
+ arraydescr_newbyteorder(PyArray_Descr *self, PyObject *args)
2919
+ {
2920
+ char endian=NPY_SWAP;
2921
+
2922
+ if (!PyArg_ParseTuple(args, "|O&", PyArray_ByteorderConverter,
2923
+ &endian)) {
2924
+ return NULL;
2925
+ }
2926
+ return (PyObject *)PyArray_DescrNewByteorder(self, endian);
2927
+ }
2928
+
2929
+ static PyMethodDef arraydescr_methods[] = {
2930
+ /* for pickling */
2931
+ {"__reduce__",
2932
+ (PyCFunction)arraydescr_reduce,
2933
+ METH_VARARGS, NULL},
2934
+ {"__setstate__",
2935
+ (PyCFunction)arraydescr_setstate,
2936
+ METH_VARARGS, NULL},
2937
+ {"newbyteorder",
2938
+ (PyCFunction)arraydescr_newbyteorder,
2939
+ METH_VARARGS, NULL},
2940
+ {NULL, NULL, 0, NULL} /* sentinel */
2941
+ };
2942
+
2943
+ /*
2944
+ * Checks whether the structured data type in 'dtype'
2945
+ * has a simple layout, where all the fields are in order,
2946
+ * and follow each other with no alignment padding.
2947
+ *
2948
+ * When this returns true, the dtype can be reconstructed
2949
+ * from a list of the field names and dtypes with no additional
2950
+ * dtype parameters.
2951
+ *
2952
+ * Returns 1 if it has a simple layout, 0 otherwise.
2953
+ */
2954
+ static int
2955
+ is_dtype_struct_simple_unaligned_layout(PyArray_Descr *dtype)
2956
+ {
2957
+ PyObject *names, *fields, *key, *tup, *title;
2958
+ Py_ssize_t i, names_size;
2959
+ PyArray_Descr *fld_dtype;
2960
+ int fld_offset;
2961
+ npy_intp total_offset;
2962
+
2963
+ /* Get some properties from the dtype */
2964
+ names = dtype->names;
2965
+ names_size = PyTuple_GET_SIZE(names);
2966
+ fields = dtype->fields;
2967
+
2968
+ /* Start at offset zero */
2969
+ total_offset = 0;
2970
+
2971
+ for (i = 0; i < names_size; ++i) {
2972
+ key = PyTuple_GET_ITEM(names, i);
2973
+ if (key == NULL) {
2974
+ return 0;
2975
+ }
2976
+ tup = PyDict_GetItem(fields, key);
2977
+ if (tup == NULL) {
2978
+ return 0;
2979
+ }
2980
+ if (!PyArg_ParseTuple(tup, "Oi|O", &fld_dtype, &fld_offset, &title)) {
2981
+ PyErr_Clear();
2982
+ return 0;
2983
+ }
2984
+ /* If this field doesn't follow the pattern, not a simple layout */
2985
+ if (total_offset != fld_offset) {
2986
+ return 0;
2987
+ }
2988
+ /* Get the next offset */
2989
+ total_offset += fld_dtype->elsize;
2990
+ }
2991
+
2992
+ /*
2993
+ * If the itemsize doesn't match the final offset, it's
2994
+ * not a simple layout.
2995
+ */
2996
+ if (total_offset != dtype->elsize) {
2997
+ return 0;
2998
+ }
2999
+
3000
+ /* It's a simple layout, since all the above tests passed */
3001
+ return 1;
3002
+ }
3003
+
3004
+ /*
3005
+ * Returns a string representation of a structured array,
3006
+ * in a list format.
3007
+ */
3008
+ static PyObject *
3009
+ arraydescr_struct_list_str(PyArray_Descr *dtype)
3010
+ {
3011
+ PyObject *names, *key, *fields, *ret, *tmp, *tup, *title;
3012
+ Py_ssize_t i, names_size;
3013
+ PyArray_Descr *fld_dtype;
3014
+ int fld_offset;
3015
+
3016
+ names = dtype->names;
3017
+ names_size = PyTuple_GET_SIZE(names);
3018
+ fields = dtype->fields;
3019
+
3020
+ /* Build up a string to make the list */
3021
+
3022
+ /* Go through all the names */
3023
+ ret = PyUString_FromString("[");
3024
+ for (i = 0; i < names_size; ++i) {
3025
+ key = PyTuple_GET_ITEM(names, i);
3026
+ tup = PyDict_GetItem(fields, key);
3027
+ if (tup == NULL) {
3028
+ return 0;
3029
+ }
3030
+ title = NULL;
3031
+ if (!PyArg_ParseTuple(tup, "Oi|O", &fld_dtype, &fld_offset, &title)) {
3032
+ PyErr_Clear();
3033
+ return 0;
3034
+ }
3035
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("("));
3036
+ /* Check for whether to do titles as well */
3037
+ if (title != NULL && title != Py_None) {
3038
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("("));
3039
+ PyUString_ConcatAndDel(&ret, PyObject_Repr(title));
3040
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(", "));
3041
+ PyUString_ConcatAndDel(&ret, PyObject_Repr(key));
3042
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("), "));
3043
+ }
3044
+ else {
3045
+ PyUString_ConcatAndDel(&ret, PyObject_Repr(key));
3046
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(", "));
3047
+ }
3048
+ /* Special case subarray handling here */
3049
+ if (PyDataType_HASSUBARRAY(fld_dtype)) {
3050
+ tmp = arraydescr_construction_repr(
3051
+ fld_dtype->subarray->base, 0, 1);
3052
+ PyUString_ConcatAndDel(&ret, tmp);
3053
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(", "));
3054
+ PyUString_ConcatAndDel(&ret,
3055
+ PyObject_Str(fld_dtype->subarray->shape));
3056
+ }
3057
+ else {
3058
+ tmp = arraydescr_construction_repr(fld_dtype, 0, 1);
3059
+ PyUString_ConcatAndDel(&ret, tmp);
3060
+ }
3061
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(")"));
3062
+ if (i != names_size - 1) {
3063
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(", "));
3064
+ }
3065
+ }
3066
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("]"));
3067
+
3068
+ return ret;
3069
+ }
3070
+
3071
+ /*
3072
+ * Returns a string representation of a structured array,
3073
+ * in a dict format.
3074
+ */
3075
+ static PyObject *
3076
+ arraydescr_struct_dict_str(PyArray_Descr *dtype, int includealignedflag)
3077
+ {
3078
+ PyObject *names, *key, *fields, *ret, *tmp, *tup, *title;
3079
+ Py_ssize_t i, names_size;
3080
+ PyArray_Descr *fld_dtype;
3081
+ int fld_offset, has_titles;
3082
+
3083
+ names = dtype->names;
3084
+ names_size = PyTuple_GET_SIZE(names);
3085
+ fields = dtype->fields;
3086
+ has_titles = 0;
3087
+
3088
+ /* Build up a string to make the dictionary */
3089
+
3090
+ /* First, the names */
3091
+ ret = PyUString_FromString("{'names':[");
3092
+ for (i = 0; i < names_size; ++i) {
3093
+ key = PyTuple_GET_ITEM(names, i);
3094
+ PyUString_ConcatAndDel(&ret, PyObject_Repr(key));
3095
+ if (i != names_size - 1) {
3096
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(","));
3097
+ }
3098
+ }
3099
+ /* Second, the formats */
3100
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("], 'formats':["));
3101
+ for (i = 0; i < names_size; ++i) {
3102
+ key = PyTuple_GET_ITEM(names, i);
3103
+ tup = PyDict_GetItem(fields, key);
3104
+ if (tup == NULL) {
3105
+ return 0;
3106
+ }
3107
+ title = NULL;
3108
+ if (!PyArg_ParseTuple(tup, "Oi|O", &fld_dtype, &fld_offset, &title)) {
3109
+ PyErr_Clear();
3110
+ return 0;
3111
+ }
3112
+ /* Check for whether to do titles as well */
3113
+ if (title != NULL && title != Py_None) {
3114
+ has_titles = 1;
3115
+ }
3116
+ tmp = arraydescr_construction_repr(fld_dtype, 0, 1);
3117
+ PyUString_ConcatAndDel(&ret, tmp);
3118
+ if (i != names_size - 1) {
3119
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(","));
3120
+ }
3121
+ }
3122
+ /* Third, the offsets */
3123
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("], 'offsets':["));
3124
+ for (i = 0; i < names_size; ++i) {
3125
+ key = PyTuple_GET_ITEM(names, i);
3126
+ tup = PyDict_GetItem(fields, key);
3127
+ if (tup == NULL) {
3128
+ return 0;
3129
+ }
3130
+ if (!PyArg_ParseTuple(tup, "Oi|O", &fld_dtype, &fld_offset, &title)) {
3131
+ PyErr_Clear();
3132
+ return 0;
3133
+ }
3134
+ PyUString_ConcatAndDel(&ret, PyUString_FromFormat("%d", fld_offset));
3135
+ if (i != names_size - 1) {
3136
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(","));
3137
+ }
3138
+ }
3139
+ /* Fourth, the titles */
3140
+ if (has_titles) {
3141
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("], 'titles':["));
3142
+ for (i = 0; i < names_size; ++i) {
3143
+ key = PyTuple_GET_ITEM(names, i);
3144
+ tup = PyDict_GetItem(fields, key);
3145
+ if (tup == NULL) {
3146
+ return 0;
3147
+ }
3148
+ title = Py_None;
3149
+ if (!PyArg_ParseTuple(tup, "Oi|O", &fld_dtype,
3150
+ &fld_offset, &title)) {
3151
+ PyErr_Clear();
3152
+ return 0;
3153
+ }
3154
+ PyUString_ConcatAndDel(&ret, PyObject_Repr(title));
3155
+ if (i != names_size - 1) {
3156
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(","));
3157
+ }
3158
+ }
3159
+ }
3160
+ if (includealignedflag && (dtype->flags&NPY_ALIGNED_STRUCT)) {
3161
+ /* Finally, the itemsize/itemsize and aligned flag */
3162
+ PyUString_ConcatAndDel(&ret,
3163
+ PyUString_FromFormat("], 'itemsize':%d, 'aligned':True}",
3164
+ (int)dtype->elsize));
3165
+ }
3166
+ else {
3167
+ /* Finally, the itemsize/itemsize*/
3168
+ PyUString_ConcatAndDel(&ret,
3169
+ PyUString_FromFormat("], 'itemsize':%d}", (int)dtype->elsize));
3170
+ }
3171
+
3172
+ return ret;
3173
+ }
3174
+
3175
+ /* Produces a string representation for a structured dtype */
3176
+ static PyObject *
3177
+ arraydescr_struct_str(PyArray_Descr *dtype, int includealignflag)
3178
+ {
3179
+ PyObject *sub;
3180
+
3181
+ /*
3182
+ * The list str representation can't include the 'align=' flag,
3183
+ * so if it is requested and the struct has the aligned flag set,
3184
+ * we must use the dict str instead.
3185
+ */
3186
+ if (!(includealignflag && (dtype->flags&NPY_ALIGNED_STRUCT)) &&
3187
+ is_dtype_struct_simple_unaligned_layout(dtype)) {
3188
+ sub = arraydescr_struct_list_str(dtype);
3189
+ }
3190
+ else {
3191
+ sub = arraydescr_struct_dict_str(dtype, includealignflag);
3192
+ }
3193
+
3194
+ /* If the data type has a non-void (subclassed) type, show it */
3195
+ if (dtype->type_num == NPY_VOID && dtype->typeobj != &PyVoidArrType_Type) {
3196
+ /*
3197
+ * Note: We cannot get the type name from dtype->typeobj->tp_name
3198
+ * because its value depends on whether the type is dynamically or
3199
+ * statically allocated. Instead use __name__ and __module__.
3200
+ * See https://docs.python.org/2/c-api/typeobj.html.
3201
+ */
3202
+
3203
+ PyObject *str_name, *namestr, *str_module, *modulestr, *ret;
3204
+
3205
+ str_name = PyUString_FromString("__name__");
3206
+ namestr = PyObject_GetAttr((PyObject*)(dtype->typeobj), str_name);
3207
+ Py_DECREF(str_name);
3208
+
3209
+ if (namestr == NULL) {
3210
+ /* this should never happen since types always have __name__ */
3211
+ PyErr_Format(PyExc_RuntimeError,
3212
+ "dtype does not have a __name__ attribute");
3213
+ return NULL;
3214
+ }
3215
+
3216
+ str_module = PyUString_FromString("__module__");
3217
+ modulestr = PyObject_GetAttr((PyObject*)(dtype->typeobj), str_module);
3218
+ Py_DECREF(str_module);
3219
+
3220
+ ret = PyUString_FromString("(");
3221
+ if (modulestr != NULL) {
3222
+ /* Note: if modulestr == NULL, the type is unpicklable */
3223
+ PyUString_ConcatAndDel(&ret, modulestr);
3224
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("."));
3225
+ }
3226
+ PyUString_ConcatAndDel(&ret, namestr);
3227
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(", "));
3228
+ PyUString_ConcatAndDel(&ret, sub);
3229
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(")"));
3230
+ return ret;
3231
+ }
3232
+ else {
3233
+ return sub;
3234
+ }
3235
+ }
3236
+
3237
+ /* Produces a string representation for a subarray dtype */
3238
+ static PyObject *
3239
+ arraydescr_subarray_str(PyArray_Descr *dtype)
3240
+ {
3241
+ PyObject *p, *ret;
3242
+
3243
+ ret = PyUString_FromString("(");
3244
+ p = arraydescr_construction_repr(dtype->subarray->base, 0, 1);
3245
+ PyUString_ConcatAndDel(&ret, p);
3246
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(", "));
3247
+ PyUString_ConcatAndDel(&ret, PyObject_Str(dtype->subarray->shape));
3248
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(")"));
3249
+
3250
+ return ret;
3251
+ }
3252
+
3253
+ static PyObject *
3254
+ arraydescr_str(PyArray_Descr *dtype)
3255
+ {
3256
+ PyObject *sub;
3257
+
3258
+ if (PyDataType_HASFIELDS(dtype)) {
3259
+ sub = arraydescr_struct_str(dtype, 1);
3260
+ }
3261
+ else if (PyDataType_HASSUBARRAY(dtype)) {
3262
+ sub = arraydescr_subarray_str(dtype);
3263
+ }
3264
+ else if (PyDataType_ISFLEXIBLE(dtype) || !PyArray_ISNBO(dtype->byteorder)) {
3265
+ sub = arraydescr_protocol_typestr_get(dtype);
3266
+ }
3267
+ else {
3268
+ sub = arraydescr_typename_get(dtype);
3269
+ }
3270
+ return sub;
3271
+ }
3272
+
3273
+ /*
3274
+ * The dtype repr function specifically for structured arrays.
3275
+ */
3276
+ static PyObject *
3277
+ arraydescr_struct_repr(PyArray_Descr *dtype)
3278
+ {
3279
+ PyObject *sub, *s;
3280
+
3281
+ s = PyUString_FromString("dtype(");
3282
+ sub = arraydescr_struct_str(dtype, 0);
3283
+ if (sub == NULL) {
3284
+ return NULL;
3285
+ }
3286
+
3287
+ PyUString_ConcatAndDel(&s, sub);
3288
+
3289
+ /* If it's an aligned structure, add the align=True parameter */
3290
+ if (dtype->flags&NPY_ALIGNED_STRUCT) {
3291
+ PyUString_ConcatAndDel(&s, PyUString_FromString(", align=True"));
3292
+ }
3293
+
3294
+ PyUString_ConcatAndDel(&s, PyUString_FromString(")"));
3295
+ return s;
3296
+ }
3297
+
3298
+ /* See descriptor.h for documentation */
3299
+ NPY_NO_EXPORT PyObject *
3300
+ arraydescr_construction_repr(PyArray_Descr *dtype, int includealignflag,
3301
+ int shortrepr)
3302
+ {
3303
+ PyObject *ret;
3304
+ PyArray_DatetimeMetaData *meta;
3305
+ char byteorder[2];
3306
+
3307
+ if (PyDataType_HASFIELDS(dtype)) {
3308
+ return arraydescr_struct_str(dtype, includealignflag);
3309
+ }
3310
+ else if (PyDataType_HASSUBARRAY(dtype)) {
3311
+ return arraydescr_subarray_str(dtype);
3312
+ }
3313
+
3314
+ /* Normalize byteorder to '<' or '>' */
3315
+ switch (dtype->byteorder) {
3316
+ case NPY_NATIVE:
3317
+ byteorder[0] = NPY_NATBYTE;
3318
+ break;
3319
+ case NPY_SWAP:
3320
+ byteorder[0] = NPY_OPPBYTE;
3321
+ break;
3322
+ case NPY_IGNORE:
3323
+ byteorder[0] = '\0';
3324
+ break;
3325
+ default:
3326
+ byteorder[0] = dtype->byteorder;
3327
+ break;
3328
+ }
3329
+ byteorder[1] = '\0';
3330
+
3331
+ /* Handle booleans, numbers, and custom dtypes */
3332
+ if (dtype->type_num == NPY_BOOL) {
3333
+ if (shortrepr) {
3334
+ return PyUString_FromString("'?'");
3335
+ }
3336
+ else {
3337
+ return PyUString_FromString("'bool'");
3338
+ }
3339
+ }
3340
+ else if (PyTypeNum_ISNUMBER(dtype->type_num)) {
3341
+ /* Short repr with endianness, like '<f8' */
3342
+ if (shortrepr || (dtype->byteorder != NPY_NATIVE &&
3343
+ dtype->byteorder != NPY_IGNORE)) {
3344
+ return PyUString_FromFormat("'%s%c%d'", byteorder,
3345
+ (int)dtype->kind, dtype->elsize);
3346
+ }
3347
+ /* Longer repr, like 'float64' */
3348
+ else {
3349
+ char *kindstr;
3350
+ switch (dtype->kind) {
3351
+ case 'u':
3352
+ kindstr = "uint";
3353
+ break;
3354
+ case 'i':
3355
+ kindstr = "int";
3356
+ break;
3357
+ case 'f':
3358
+ kindstr = "float";
3359
+ break;
3360
+ case 'c':
3361
+ kindstr = "complex";
3362
+ break;
3363
+ default:
3364
+ PyErr_Format(PyExc_RuntimeError,
3365
+ "internal dtype repr error, unknown kind '%c'",
3366
+ (int)dtype->kind);
3367
+ return NULL;
3368
+ }
3369
+ return PyUString_FromFormat("'%s%d'", kindstr, 8*dtype->elsize);
3370
+ }
3371
+ }
3372
+ else if (PyTypeNum_ISUSERDEF(dtype->type_num)) {
3373
+ char *s = strrchr(dtype->typeobj->tp_name, '.');
3374
+ if (s == NULL) {
3375
+ return PyUString_FromString(dtype->typeobj->tp_name);
3376
+ }
3377
+ else {
3378
+ return PyUString_FromStringAndSize(s + 1, strlen(s) - 1);
3379
+ }
3380
+ }
3381
+
3382
+ /* All the rest which don't fit in the same pattern */
3383
+ switch (dtype->type_num) {
3384
+ /*
3385
+ * The object reference may be different sizes on different
3386
+ * platforms, so it should never include the itemsize here.
3387
+ */
3388
+ case NPY_OBJECT:
3389
+ return PyUString_FromString("'O'");
3390
+
3391
+ case NPY_STRING:
3392
+ if (dtype->elsize == 0) {
3393
+ return PyUString_FromString("'S'");
3394
+ }
3395
+ else {
3396
+ return PyUString_FromFormat("'S%d'", (int)dtype->elsize);
3397
+ }
3398
+
3399
+ case NPY_UNICODE:
3400
+ if (dtype->elsize == 0) {
3401
+ return PyUString_FromFormat("'%sU'", byteorder);
3402
+ }
3403
+ else {
3404
+ return PyUString_FromFormat("'%sU%d'", byteorder,
3405
+ (int)dtype->elsize / 4);
3406
+ }
3407
+
3408
+ case NPY_VOID:
3409
+ if (dtype->elsize == 0) {
3410
+ return PyUString_FromString("'V'");
3411
+ }
3412
+ else {
3413
+ return PyUString_FromFormat("'V%d'", (int)dtype->elsize);
3414
+ }
3415
+
3416
+ case NPY_DATETIME:
3417
+ meta = get_datetime_metadata_from_dtype(dtype);
3418
+ if (meta == NULL) {
3419
+ return NULL;
3420
+ }
3421
+ ret = PyUString_FromFormat("'%sM8", byteorder);
3422
+ ret = append_metastr_to_string(meta, 0, ret);
3423
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("'"));
3424
+ return ret;
3425
+
3426
+ case NPY_TIMEDELTA:
3427
+ meta = get_datetime_metadata_from_dtype(dtype);
3428
+ if (meta == NULL) {
3429
+ return NULL;
3430
+ }
3431
+ ret = PyUString_FromFormat("'%sm8", byteorder);
3432
+ ret = append_metastr_to_string(meta, 0, ret);
3433
+ PyUString_ConcatAndDel(&ret, PyUString_FromString("'"));
3434
+ return ret;
3435
+
3436
+ default:
3437
+ PyErr_SetString(PyExc_RuntimeError, "Internal error: NumPy dtype "
3438
+ "unrecognized type number");
3439
+ return NULL;
3440
+ }
3441
+ }
3442
+
3443
+ /*
3444
+ * The general dtype repr function.
3445
+ */
3446
+ static PyObject *
3447
+ arraydescr_repr(PyArray_Descr *dtype)
3448
+ {
3449
+ PyObject *ret;
3450
+
3451
+ if (PyDataType_HASFIELDS(dtype)) {
3452
+ return arraydescr_struct_repr(dtype);
3453
+ }
3454
+ else {
3455
+ ret = PyUString_FromString("dtype(");
3456
+ PyUString_ConcatAndDel(&ret,
3457
+ arraydescr_construction_repr(dtype, 1, 0));
3458
+ PyUString_ConcatAndDel(&ret, PyUString_FromString(")"));
3459
+ return ret;
3460
+ }
3461
+ }
3462
+
3463
+ static PyObject *
3464
+ arraydescr_richcompare(PyArray_Descr *self, PyObject *other, int cmp_op)
3465
+ {
3466
+ PyArray_Descr *new = NULL;
3467
+ PyObject *result = Py_NotImplemented;
3468
+ if (!PyArray_DescrCheck(other)) {
3469
+ if (PyArray_DescrConverter(other, &new) == NPY_FAIL) {
3470
+ return NULL;
3471
+ }
3472
+ }
3473
+ else {
3474
+ new = (PyArray_Descr *)other;
3475
+ Py_INCREF(new);
3476
+ }
3477
+ switch (cmp_op) {
3478
+ case Py_LT:
3479
+ if (!PyArray_EquivTypes(self, new) && PyArray_CanCastTo(self, new)) {
3480
+ result = Py_True;
3481
+ }
3482
+ else {
3483
+ result = Py_False;
3484
+ }
3485
+ break;
3486
+ case Py_LE:
3487
+ if (PyArray_CanCastTo(self, new)) {
3488
+ result = Py_True;
3489
+ }
3490
+ else {
3491
+ result = Py_False;
3492
+ }
3493
+ break;
3494
+ case Py_EQ:
3495
+ if (PyArray_EquivTypes(self, new)) {
3496
+ result = Py_True;
3497
+ }
3498
+ else {
3499
+ result = Py_False;
3500
+ }
3501
+ break;
3502
+ case Py_NE:
3503
+ if (PyArray_EquivTypes(self, new))
3504
+ result = Py_False;
3505
+ else
3506
+ result = Py_True;
3507
+ break;
3508
+ case Py_GT:
3509
+ if (!PyArray_EquivTypes(self, new) && PyArray_CanCastTo(new, self)) {
3510
+ result = Py_True;
3511
+ }
3512
+ else {
3513
+ result = Py_False;
3514
+ }
3515
+ break;
3516
+ case Py_GE:
3517
+ if (PyArray_CanCastTo(new, self)) {
3518
+ result = Py_True;
3519
+ }
3520
+ else {
3521
+ result = Py_False;
3522
+ }
3523
+ break;
3524
+ default:
3525
+ result = Py_NotImplemented;
3526
+ }
3527
+
3528
+ Py_XDECREF(new);
3529
+ Py_INCREF(result);
3530
+ return result;
3531
+ }
3532
+
3533
+ /*************************************************************************
3534
+ **************** Implement Mapping Protocol ***************************
3535
+ *************************************************************************/
3536
+
3537
+ static Py_ssize_t
3538
+ descr_length(PyObject *self0)
3539
+ {
3540
+ PyArray_Descr *self = (PyArray_Descr *)self0;
3541
+
3542
+ if (PyDataType_HASFIELDS(self)) {
3543
+ return PyTuple_GET_SIZE(self->names);
3544
+ }
3545
+ else {
3546
+ return 0;
3547
+ }
3548
+ }
3549
+
3550
+ static PyObject *
3551
+ descr_repeat(PyObject *self, Py_ssize_t length)
3552
+ {
3553
+ PyObject *tup;
3554
+ PyArray_Descr *new;
3555
+ if (length < 0) {
3556
+ return PyErr_Format(PyExc_ValueError,
3557
+ "Array length must be >= 0, not %"NPY_INTP_FMT, (npy_intp)length);
3558
+ }
3559
+ tup = Py_BuildValue("O" NPY_SSIZE_T_PYFMT, self, length);
3560
+ if (tup == NULL) {
3561
+ return NULL;
3562
+ }
3563
+ PyArray_DescrConverter(tup, &new);
3564
+ Py_DECREF(tup);
3565
+ return (PyObject *)new;
3566
+ }
3567
+
3568
+ static PyObject *
3569
+ descr_subscript(PyArray_Descr *self, PyObject *op)
3570
+ {
3571
+ PyObject *retval;
3572
+
3573
+ if (!PyDataType_HASFIELDS(self)) {
3574
+ PyObject *astr = arraydescr_str(self);
3575
+ #if defined(NPY_PY3K)
3576
+ PyObject *bstr = PyUnicode_AsUnicodeEscapeString(astr);
3577
+ Py_DECREF(astr);
3578
+ astr = bstr;
3579
+ #endif
3580
+ PyErr_Format(PyExc_KeyError,
3581
+ "There are no fields in dtype %s.", PyBytes_AsString(astr));
3582
+ Py_DECREF(astr);
3583
+ return NULL;
3584
+ }
3585
+ #if defined(NPY_PY3K)
3586
+ if (PyUString_Check(op)) {
3587
+ #else
3588
+ if (PyUString_Check(op) || PyUnicode_Check(op)) {
3589
+ #endif
3590
+ PyObject *obj = PyDict_GetItem(self->fields, op);
3591
+ PyObject *descr;
3592
+ PyObject *s;
3593
+
3594
+ if (obj == NULL) {
3595
+ if (PyUnicode_Check(op)) {
3596
+ s = PyUnicode_AsUnicodeEscapeString(op);
3597
+ }
3598
+ else {
3599
+ s = op;
3600
+ }
3601
+
3602
+ PyErr_Format(PyExc_KeyError,
3603
+ "Field named \'%s\' not found.", PyBytes_AsString(s));
3604
+ if (s != op) {
3605
+ Py_DECREF(s);
3606
+ }
3607
+ return NULL;
3608
+ }
3609
+ descr = PyTuple_GET_ITEM(obj, 0);
3610
+ Py_INCREF(descr);
3611
+ retval = descr;
3612
+ }
3613
+ else if (PyInt_Check(op)) {
3614
+ PyObject *name;
3615
+ int size = PyTuple_GET_SIZE(self->names);
3616
+ int value = PyArray_PyIntAsInt(op);
3617
+ int orig_value = value;
3618
+
3619
+ if (PyErr_Occurred()) {
3620
+ return NULL;
3621
+ }
3622
+ if (value < 0) {
3623
+ value += size;
3624
+ }
3625
+ if (value < 0 || value >= size) {
3626
+ PyErr_Format(PyExc_IndexError,
3627
+ "Field index %d out of range.", orig_value);
3628
+ return NULL;
3629
+ }
3630
+ name = PyTuple_GET_ITEM(self->names, value);
3631
+ retval = descr_subscript(self, name);
3632
+ }
3633
+ else {
3634
+ PyErr_SetString(PyExc_ValueError,
3635
+ "Field key must be an integer, string, or unicode.");
3636
+ return NULL;
3637
+ }
3638
+ return retval;
3639
+ }
3640
+
3641
+ static PySequenceMethods descr_as_sequence = {
3642
+ descr_length,
3643
+ (binaryfunc)NULL,
3644
+ descr_repeat,
3645
+ NULL, NULL,
3646
+ NULL, /* sq_ass_item */
3647
+ NULL, /* ssizessizeobjargproc sq_ass_slice */
3648
+ 0, /* sq_contains */
3649
+ 0, /* sq_inplace_concat */
3650
+ 0, /* sq_inplace_repeat */
3651
+ };
3652
+
3653
+ static PyMappingMethods descr_as_mapping = {
3654
+ descr_length, /* mp_length*/
3655
+ (binaryfunc)descr_subscript, /* mp_subscript*/
3656
+ (objobjargproc)NULL, /* mp_ass_subscript*/
3657
+ };
3658
+
3659
+ /****************** End of Mapping Protocol ******************************/
3660
+
3661
+ NPY_NO_EXPORT PyTypeObject PyArrayDescr_Type = {
3662
+ #if defined(NPY_PY3K)
3663
+ PyVarObject_HEAD_INIT(NULL, 0)
3664
+ #else
3665
+ PyObject_HEAD_INIT(NULL)
3666
+ 0, /* ob_size */
3667
+ #endif
3668
+ "numpy.dtype", /* tp_name */
3669
+ sizeof(PyArray_Descr), /* tp_basicsize */
3670
+ 0, /* tp_itemsize */
3671
+ /* methods */
3672
+ (destructor)arraydescr_dealloc, /* tp_dealloc */
3673
+ 0, /* tp_print */
3674
+ 0, /* tp_getattr */
3675
+ 0, /* tp_setattr */
3676
+ #if defined(NPY_PY3K)
3677
+ (void *)0, /* tp_reserved */
3678
+ #else
3679
+ 0, /* tp_compare */
3680
+ #endif
3681
+ (reprfunc)arraydescr_repr, /* tp_repr */
3682
+ 0, /* tp_as_number */
3683
+ &descr_as_sequence, /* tp_as_sequence */
3684
+ &descr_as_mapping, /* tp_as_mapping */
3685
+ 0, /* tp_hash */
3686
+ 0, /* tp_call */
3687
+ (reprfunc)arraydescr_str, /* tp_str */
3688
+ 0, /* tp_getattro */
3689
+ 0, /* tp_setattro */
3690
+ 0, /* tp_as_buffer */
3691
+ Py_TPFLAGS_DEFAULT, /* tp_flags */
3692
+ 0, /* tp_doc */
3693
+ 0, /* tp_traverse */
3694
+ 0, /* tp_clear */
3695
+ (richcmpfunc)arraydescr_richcompare, /* tp_richcompare */
3696
+ 0, /* tp_weaklistoffset */
3697
+ 0, /* tp_iter */
3698
+ 0, /* tp_iternext */
3699
+ arraydescr_methods, /* tp_methods */
3700
+ arraydescr_members, /* tp_members */
3701
+ arraydescr_getsets, /* tp_getset */
3702
+ 0, /* tp_base */
3703
+ 0, /* tp_dict */
3704
+ 0, /* tp_descr_get */
3705
+ 0, /* tp_descr_set */
3706
+ 0, /* tp_dictoffset */
3707
+ 0, /* tp_init */
3708
+ 0, /* tp_alloc */
3709
+ arraydescr_new, /* tp_new */
3710
+ 0, /* tp_free */
3711
+ 0, /* tp_is_gc */
3712
+ 0, /* tp_bases */
3713
+ 0, /* tp_mro */
3714
+ 0, /* tp_cache */
3715
+ 0, /* tp_subclasses */
3716
+ 0, /* tp_weaklist */
3717
+ 0, /* tp_del */
3718
+ 0, /* tp_version_tag */
3719
+ };