Skip to content
Snippets Groups Projects
Select Git revision
  • 0b15e10c73bbce6492c1159d622a5f93a12f6eb7
  • master default protected
  • v2.0-dev protected
  • zikeliml/Task-96-dotExporterForAST
  • zikeliml/124-rework-tutorials
  • fma
  • fhennig/v2.0-deprecations
  • holzer-master-patch-46757
  • 66-absolute-access-is-probably-not-copied-correctly-after-_eval_subs
  • gpu_bufferfield_fix
  • hyteg
  • vectorization_sqrt_fix
  • target_dh_refactoring
  • const_fix
  • improved_comm
  • gpu_liveness_opts
  • release/1.3.7 protected
  • release/1.3.6 protected
  • release/2.0.dev0 protected
  • release/1.3.5 protected
  • release/1.3.4 protected
  • release/1.3.3 protected
  • release/1.3.2 protected
  • release/1.3.1 protected
  • release/1.3 protected
  • release/1.2 protected
  • release/1.1.1 protected
  • release/1.1 protected
  • release/1.0.1 protected
  • release/1.0 protected
  • release/0.4.4 protected
  • last/Kerncraft
  • last/OpenCL
  • last/LLVM
  • release/0.4.3 protected
  • release/0.4.2 protected
36 results

test_move_constant_before_loop.py

Blame
  • test_move_constant_before_loop.py 1.20 KiB
    import numpy as np
    
    import pystencils as ps
    from pystencils.astnodes import Block, LoopOverCoordinate, SympyAssignment, TypedSymbol
    from pystencils.transformations import move_constants_before_loop
    
    
    def test_symbol_renaming():
        """When two loops have assignments to the same symbol with different rhs and both
        are pulled before the loops, one of them has to be renamed
        """
    
        f, g = ps.fields("f, g : double[2D]")
        a, b, c = [TypedSymbol(n, np.float64) for n in ('a', 'b', 'c')]
    
        loop1 = LoopOverCoordinate(Block([SympyAssignment(c, a + b),
                                          SympyAssignment(g[0, 0], f[0, 0] + c)]),
                                   0, 0, 10)
        loop2 = LoopOverCoordinate(Block([SympyAssignment(c, a ** 2 + b ** 2),
                                          SympyAssignment(g[0, 0], f[0, 0] + c)]),
                                   0, 0, 10)
        block = Block([loop1, loop2])
    
        move_constants_before_loop(block)
    
        loops = block.atoms(LoopOverCoordinate)
        assert len(loops) == 2
        for loop in loops:
            assert len(loop.body.args) == 1
            assert len(loop.parent.args) == 4  # 2 loops + 2 subexpressions
            assert loop.parent.args[0].lhs.name != loop.parent.args[1].lhs.name