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.

Potentially problematic release.


This version of numpy might be problematic. Click here for more details.

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