mirror of
https://github.com/triqs/dft_tools
synced 2024-12-26 22:33:48 +01:00
7cf7d09c77
- The issue comes from the fact that the default generated += and co by the Python API is the one for immutable types, like int. - Indeed, in python, for an int : x=1 id(x) 140266967205832 x+=1 id(x) 140266967205808 - For a mutable type, like a gf, it is necessary to add explicitly the xxx_inplace_add functions. - Added : - the generation of the inplace_xxx functions - a method in class_ in the wrapper generator that deduce all += operator from the + operators. - this assumes that the +=, ... are defined in C++. - The generation of such operators are optional, with option with_inplace_operators in the arithmetic flag. - Also, added the overload g += M and g -= M for g : GfImfreq, M a complex matrix. Mainly for legacy Python codes.
56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
# Test from I. Krivenko.
|
|
from __future__ import print_function
|
|
from pytriqs.gf.local import *
|
|
from pytriqs.gf.local.descriptors import *
|
|
import sys
|
|
def print_err(*x) : print (*x, file= sys.stderr)
|
|
|
|
g_up = GfImFreq(indices = [0], beta = 1)
|
|
g_dn = GfImFreq(indices = [0], beta = 1)
|
|
|
|
g_up <<= iOmega_n
|
|
g_dn <<= iOmega_n
|
|
|
|
G = BlockGf(name_list=['up','dn'], block_list=[g_up,g_dn], make_copies=False)
|
|
|
|
print("Before:")
|
|
print("G['up'] =", G['up'].data[0,0,0])
|
|
print("G['dn'] =", G['dn'].data[0,0,0])
|
|
print_err('id(g_up) =', id(g_up))
|
|
print_err('id(g_dn) =', id(g_dn))
|
|
print_err ("(id=", id(G['up']),")")
|
|
print_err ("(id=", id(G['dn']),")")
|
|
|
|
G['up'] += G['dn']
|
|
|
|
print("After G['up'] += G['dn']:")
|
|
print("G['up'] =", G['up'].data[0,0,0])
|
|
print("G['dn'] =", G['dn'].data[0,0,0])
|
|
print_err('id(g_up) =', id(g_up))
|
|
print_err('id(g_dn) =', id(g_dn))
|
|
print_err ("(id=", id(G['up']),")")
|
|
print_err ("(id=", id(G['dn']),")")
|
|
|
|
|
|
g_up += g_dn
|
|
|
|
print("After g_up += g_dn:")
|
|
print("G['up'] =", G['up'].data[0,0,0])
|
|
print("G['dn'] =", G['dn'].data[0,0,0])
|
|
print_err('id(g_up) =', id(g_up))
|
|
print_err('id(g_dn) =', id(g_dn))
|
|
print_err ("(id=", id(G['up']),")")
|
|
print_err ("(id=", id(G['dn']),")")
|
|
|
|
|
|
G += G
|
|
print("After G += G:")
|
|
print("G['up'] =", G['up'].data[0,0,0])
|
|
print("G['dn'] =", G['dn'].data[0,0,0])
|
|
print_err('id(g_up) =', id(g_up))
|
|
print_err('id(g_dn) =', id(g_dn))
|
|
print_err ("(id=", id(G['up']),")")
|
|
print_err ("(id=", id(G['dn']),")")
|
|
|
|
|