// File: /workspace/github_cpp_makefile_star2_O2/btbujiangjun[P]abcdl/example/algebra/Matrix.cpp
// Function: main
int main(int argc,char** argv){
    abcdl::utils::log::set_min_log_level(abcdl::utils::log::INFO);
    abcdl::utils::log::initialize_log(argc, argv);
    
	abcdl::algebra::MatrixHelper<real> helper;
    
	real d1[6] = {1,2,-3,4,5,6};
    Mat m1(d1, 2, 3);

	auto m = helper.dot(m1, m1);
	m.display("^");	

	m1.display();

    auto m3 = m1 * m1;
    m3.display();

    m1 += m1;
    m1.display();

    m1.sigmoid();
    m1.display();

    Mat m2;
    helper.sigmoid_derivative(m2, m1);
    m2.display();

    m1 *= -1;
    m1.display();
    auto m4 = m2 * m1;
    m4.display();
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x120, %rsp            # imm = 0x120
movq %rsi, %rbx
movl %edi, %ebp
xorl %edi, %edi
callq 0x27b66
movl %ebp, %edi
movq %rbx, %rsi
callq 0x27870
leaq 0xc8(%rsp), %rbx
movq %rbx, %rdi
callq 0x9414
movaps 0x217ec(%rip), %xmm0    # 0x290d0
leaq 0x100(%rsp), %rsi
movaps %xmm0, (%rsi)
movabsq $0x40c0000040a00000, %rax # imm = 0x40C0000040A00000
movq %rax, 0x10(%rsi)
leaq 0x58(%rsp), %r14
pushq $0x2
popq %rdx
pushq $0x3
popq %rcx
movq %r14, %rdi
callq 0x10b94
leaq 0xd8(%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
movq %r14, %rcx
callq 0x20b58
leaq 0x21767(%rip), %rsi     # 0x29094
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x70e0
leaq 0xd8(%rsp), %rdi
leaq 0x80(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0x80(%rsp), %rdi
callq 0x7100
leaq 0x2172b(%rip), %rsi     # 0x29096
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x70e0
leaq 0x58(%rsp), %rdi
leaq 0x80(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0x80(%rsp), %rdi
callq 0x7100
leaq 0x80(%rsp), %rdi
leaq 0x58(%rsp), %rdx
movq %rdx, %rsi
callq 0x17616
leaq 0x216db(%rip), %rsi     # 0x29096
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x70e0
leaq 0x80(%rsp), %rdi
leaq 0x8(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0x8(%rsp), %rdi
callq 0x7100
leaq 0x58(%rsp), %rdi
movq %rdi, %rsi
callq 0x16fc8
leaq 0x21699(%rip), %rsi     # 0x29096
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x70e0
leaq 0x58(%rsp), %rdi
leaq 0x8(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0x8(%rsp), %rdi
callq 0x7100
leaq 0x58(%rsp), %rdi
callq 0x1cabe
leaq 0x2165d(%rip), %rsi     # 0x29096
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rdx
callq 0x70e0
leaq 0x58(%rsp), %rdi
leaq 0x8(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0x8(%rsp), %rdi
callq 0x7100
leaq 0x8(%rsp), %rdi
callq 0x10a38
leaq 0xc8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0x213e2
leaq 0x2160a(%rip), %rsi     # 0x29096
leaq 0x30(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
callq 0x70e0
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
callq 0x7100
movl $0xbf800000, (%rbx)     # imm = 0xBF800000
leaq 0x58(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x177bc
leaq 0x215bd(%rip), %rsi     # 0x29096
leaq 0x30(%rsp), %rdi
leaq 0xa8(%rsp), %rdx
callq 0x70e0
leaq 0x58(%rsp), %rdi
leaq 0x30(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0x30(%rsp), %rdi
callq 0x7100
leaq 0x30(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0x17616
leaq 0x21574(%rip), %rsi     # 0x29096
leaq 0xa8(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x70e0
leaq 0x30(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
pushq $0x1
popq %rdx
callq 0x11b84
leaq 0xa8(%rsp), %rdi
callq 0x7100
leaq 0x30(%rsp), %rdi
callq 0x10c62
leaq 0x8(%rsp), %rdi
callq 0x10c62
leaq 0x80(%rsp), %rdi
callq 0x10c62
leaq 0xd8(%rsp), %rdi
callq 0x10c62
leaq 0x58(%rsp), %rdi
callq 0x10c62
xorl %eax, %eax
addq $0x120, %rsp            # imm = 0x120
popq %rbx
popq %r14
popq %rbp
retq
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x7100
jmp 0x7bb1
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x10c62
jmp 0x7bd9
jmp 0x7bd6
jmp 0x7bc5
jmp 0x7bd6
jmp 0x7bd6
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x7100
jmp 0x7bd9
jmp 0x7bd6
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x10c62
jmp 0x7c25
jmp 0x7c22
jmp 0x7bef
jmp 0x7c22
jmp 0x7bef
jmp 0x7c22
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x7100
jmp 0x7c25
jmp 0x7c22
jmp 0x7c18
jmp 0x7c06
jmp 0x7c18
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0x7100
jmp 0x7c32
movq %rax, %rbx
jmp 0x7c32
movq %rax, %rbx
jmp 0x7c3f
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0x10c62
leaq 0xd8(%rsp), %rdi
callq 0x10c62
leaq 0x58(%rsp), %rdi
callq 0x10c62
movq %rbx, %rdi
callq 0x7430
nop