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