1. 01 Apr, 2020 1 commit
    • will-ca's avatar
      Make fused function dispatch O(n) for `cpdef` functions. (GH-3366) · 27b5adbb
      will-ca authored
      * Rewrote signature matching for fused cpdef function dispatch to use a pre-built tree index in a mutable default argument and be O(n).
      
      * Added test to ensure proper differentiation between ambiguously compatible and definitely compatible arguments.
      
      * Added test to ensure fused cpdef's can be called by the module itself during import.
      
      * Added test to ensure consistent handling of ambiguous fused cpdef signatures.
      
      * Test for explicitly defined fused cpdef method.
      
      * Add .komodoproject to .gitignore.
      
      * Add /cython_debug/ to .gitignore.
      
      Closes #1385.
      27b5adbb
  2. 31 Mar, 2020 14 commits
  3. 26 Mar, 2020 4 commits
  4. 25 Mar, 2020 1 commit
    • Dmitry Shesterkin's avatar
      Avoid incorrect type calls from cython.declare and cython.cast in Shadow.py (GH-3244) · 48dc1f01
      Dmitry Shesterkin authored
      The following code:
      ```
      # cython: infer_types=True
      import cython
      
      @cython.cclass
      class Foo:
          a: cython.double
          b: cython.double
          c: cython.double
      
          def __init__(self, a: cython.double, b: cython.double ,c: cython.double):
              self.a = a
              self.b = b
              self.c = c
      
      def bar():
          l = []
          l.append(Foo(10, 20, 30))
      
          v = cython.declare(Foo, l[0])
          r = v.a + v.b
          print( r )
      
          v2 = cython.cast(Foo, l[0]) #Faster - No __Pyx_TypeTest() call
          r = v2.b + v2.c
          print( r )
      
      bar()
      ```
      works fine when compiled and throws an exception when interpreted: `TypeError: __init__() missing 2 required positional arguments: 'b' and 'c'`
      
      It could be fixed if we change implementations as shown in the patch.
      Also, added more tests for the cases I'm trying to fix
      NB: Removed execution of `test_declare(None)` to make sure that the new `none_declare()` test works instead. `test_declare(None)` doesn't throw exception in pure mode but does it in the native mode
      
      Replacing `hasattr(t, '__call__')` to `callable(t)` in the master branch broke the implementation and the tests because the construction was used to detect typedefs. To fix that I got rid of this check completely and replaced it to exact checks which also simplified the code
      
      Changed `declare` implementation when initializing arguments are not provided. Now it correctly works with typedefs of the user classes and also directly support arrays:
          ```
          >>> EmptyClassSyn = cython.typedef(EmptyClass)
          >>> cython.declare(EmptyClassSyn) is None
          True
          >>> cython.declare(cython.int[2]) is not None
          True
          ```
      Added missed return statement to `index_type` which made the following assigment possible:
          ```
              a = cython.declare(cython.int[2])
              a[0] = 1
          ```
      48dc1f01
  5. 24 Mar, 2020 11 commits
  6. 23 Mar, 2020 5 commits
  7. 22 Mar, 2020 2 commits
  8. 21 Mar, 2020 2 commits