// File: KokiKishimoto[P]cp_decomposition/testcp.cpp
// Function: TestCP::TestCP(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
TestCP(std::string dataFile, std::string testFile, std::string validFile, std::string modelSubjFile, std::string modelObjFile, std::string modelRelFile) {
		trainData = Data();
		trainData.readFromRawFile(dataFile);

		testData = TestData();
		testData.readFromRawFileRev(testFile, trainData);

		scores_subj.resize(trainData.entity_counter, RankScore());
		scores_obj.resize(trainData.entity_counter, RankScore());

		subjData = ModelFileLoad();
		subjData.model_load(modelSubjFile);
		subjVec = subjData.Vec;

		objData = ModelFileLoad();
		objData.model_load(modelObjFile);
		objVec = objData.Vec;

		relationData = ModelFileLoad();
		relationData.model_load(modelRelFile);
		relationVec = relationData.Vec;

		vecDim = subjData.vecDim;

		op = SignalOperation();
		outVec1.resize(vecDim);
		outVec2.resize(vecDim);
		outVec3.resize(vecDim);

		outVec1_inv.resize(vecDim);
		outVec2_inv.resize(vecDim);
		outVec3_inv.resize(vecDim);

		generate_key(trainData.triples);
		generate_key(testData.triples);

		validData = TestData();
		validData.readFromRawFile(validFile, trainData);
		generate_key(validData.triples);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4a0, %rsp            # imm = 0x4A0
movq %r9, -0x380(%rbp)
movq %r8, -0x378(%rbp)
movq %rcx, -0x370(%rbp)
movq %rdx, -0x368(%rbp)
movq %rsi, -0x360(%rbp)
movq 0x10(%rbp), %rax
movq %rax, -0x358(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x340(%rbp)
movq %rdi, %rax
movq %rax, -0x350(%rbp)
callq 0x41b0
movq -0x340(%rbp), %rdi
addq $0x18, %rdi
movq %rdi, -0x348(%rbp)
callq 0x41b0
movq -0x340(%rbp), %rdi
addq $0x30, %rdi
movq %rdi, -0x338(%rbp)
callq 0x41d0
jmp 0x2f9b
movq -0x350(%rbp), %rdi
addq $0x148, %rdi            # imm = 0x148
movq %rdi, -0x388(%rbp)
callq 0x42c0
jmp 0x2fb7
movq -0x350(%rbp), %rdi
addq $0x160, %rdi            # imm = 0x160
movq %rdi, -0x390(%rbp)
callq 0x42c0
jmp 0x2fd3
movq -0x350(%rbp), %rdi
addq $0x178, %rdi            # imm = 0x178
movq %rdi, -0x398(%rbp)
callq 0x42e0
jmp 0x2fef
movq -0x350(%rbp), %rdi
addq $0x1b8, %rdi            # imm = 0x1B8
movq %rdi, -0x3a0(%rbp)
callq 0x42e0
jmp 0x300b
movq -0x350(%rbp), %rdi
addq $0x1f8, %rdi            # imm = 0x1F8
movq %rdi, -0x3a8(%rbp)
callq 0x42e0
jmp 0x3027
movq -0x350(%rbp), %rdi
addq $0x238, %rdi            # imm = 0x238
movq %rdi, -0x3f0(%rbp)
callq 0x4310
movq -0x350(%rbp), %rdi
addq $0x250, %rdi            # imm = 0x250
movq %rdi, -0x3e8(%rbp)
callq 0x4310
movq -0x350(%rbp), %rdi
addq $0x268, %rdi            # imm = 0x268
movq %rdi, -0x3e0(%rbp)
callq 0x4310
movq -0x350(%rbp), %rdi
addq $0x280, %rdi            # imm = 0x280
movq %rdi, -0x3d8(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x298, %rdi            # imm = 0x298
movq %rdi, -0x3d0(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
movq %rdi, -0x3c8(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x2c8, %rdi            # imm = 0x2C8
movq %rdi, -0x3c0(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x2e0, %rdi            # imm = 0x2E0
movq %rdi, -0x3b8(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
movq %rdi, -0x3b0(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x310, %rdi            # imm = 0x310
callq 0x4350
jmp 0x3126
movq -0x350(%rbp), %rdi
addq $0x318, %rdi            # imm = 0x318
movq %rdi, -0x420(%rbp)
callq 0x4360
movq -0x350(%rbp), %rdi
addq $0x348, %rdi            # imm = 0x348
movq %rdi, -0x418(%rbp)
callq 0x4360
movq -0x350(%rbp), %rdi
addq $0x380, %rdi            # imm = 0x380
movq %rdi, -0x410(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x398, %rdi            # imm = 0x398
movq %rdi, -0x408(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x3b0, %rdi            # imm = 0x3B0
movq %rdi, -0x400(%rbp)
callq 0x4330
movq -0x350(%rbp), %rdi
addq $0x3c8, %rdi            # imm = 0x3C8
movq %rdi, -0x3f8(%rbp)
callq 0x4330
leaq -0x158(%rbp), %rdi
callq 0x41d0
jmp 0x31d0
movq -0x350(%rbp), %rdi
addq $0x30, %rdi
movq %rdi, -0x430(%rbp)
leaq -0x158(%rbp), %rsi
movq %rsi, -0x428(%rbp)
callq 0x4380
movq -0x428(%rbp), %rdi
callq 0x4450
movq -0x360(%rbp), %rsi
leaq -0x178(%rbp), %rdi
callq 0x20f0
jmp 0x3216
movq -0x430(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x44c0
jmp 0x322b
leaq -0x178(%rbp), %rdi
callq 0x2150
leaq -0x190(%rbp), %rdi
callq 0x42c0
jmp 0x3245
movq -0x350(%rbp), %rdi
addq $0x148, %rdi            # imm = 0x148
movq %rdi, -0x440(%rbp)
leaq -0x190(%rbp), %rsi
movq %rsi, -0x438(%rbp)
callq 0x4900
movq -0x438(%rbp), %rdi
callq 0x4930
movq -0x368(%rbp), %rsi
leaq -0x1b0(%rbp), %rdi
callq 0x20f0
jmp 0x328e
movq -0x440(%rbp), %rdi
movq -0x350(%rbp), %rdx
addq $0x30, %rdx
leaq -0x1b0(%rbp), %rsi
callq 0x4950
jmp 0x32ae
leaq -0x1b0(%rbp), %rdi
callq 0x2150
movq -0x350(%rbp), %rax
movq %rax, %rcx
movq %rcx, -0x450(%rbp)
movslq 0x30(%rax), %rax
movq %rax, -0x448(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x4de0
jmp 0x32e4
movq -0x448(%rbp), %rsi
movq -0x450(%rbp), %rdi
leaq -0x1c0(%rbp), %rdx
callq 0x4d30
jmp 0x3300
movq -0x350(%rbp), %rax
movq %rax, %rcx
addq $0x18, %rcx
movq %rcx, -0x460(%rbp)
movslq 0x30(%rax), %rax
movq %rax, -0x458(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x4de0
jmp 0x332e
movq -0x458(%rbp), %rsi
movq -0x460(%rbp), %rdi
leaq -0x1d0(%rbp), %rdx
callq 0x4d30
jmp 0x334a
leaq -0x210(%rbp), %rdi
callq 0x42e0
jmp 0x3358
movq -0x350(%rbp), %rdi
addq $0x178, %rdi            # imm = 0x178
movq %rdi, -0x470(%rbp)
leaq -0x210(%rbp), %rsi
movq %rsi, -0x468(%rbp)
callq 0x4df0
movq -0x468(%rbp), %rdi
callq 0x4e50
movq -0x378(%rbp), %rsi
leaq -0x230(%rbp), %rdi
callq 0x20f0
jmp 0x33a1
movq -0x470(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x4e80
jmp 0x33b6
leaq -0x230(%rbp), %rdi
callq 0x2150
movq -0x350(%rbp), %rdi
movq %rdi, %rsi
addq $0x180, %rsi            # imm = 0x180
addq $0x238, %rdi            # imm = 0x238
callq 0x5090
jmp 0x33e1
leaq -0x270(%rbp), %rdi
callq 0x42e0
jmp 0x33ef
movq -0x350(%rbp), %rdi
addq $0x1b8, %rdi            # imm = 0x1B8
movq %rdi, -0x480(%rbp)
leaq -0x270(%rbp), %rsi
movq %rsi, -0x478(%rbp)
callq 0x4df0
movq -0x478(%rbp), %rdi
callq 0x4e50
movq -0x380(%rbp), %rsi
leaq -0x290(%rbp), %rdi
callq 0x20f0
jmp 0x3438
movq -0x480(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x4e80
jmp 0x344d
leaq -0x290(%rbp), %rdi
callq 0x2150
movq -0x350(%rbp), %rdi
movq %rdi, %rsi
addq $0x1c0, %rsi            # imm = 0x1C0
addq $0x250, %rdi            # imm = 0x250
callq 0x5090
jmp 0x3478
leaq -0x2d0(%rbp), %rdi
callq 0x42e0
jmp 0x3486
movq -0x350(%rbp), %rdi
addq $0x1f8, %rdi            # imm = 0x1F8
movq %rdi, -0x490(%rbp)
leaq -0x2d0(%rbp), %rsi
movq %rsi, -0x488(%rbp)
callq 0x4df0
movq -0x488(%rbp), %rdi
callq 0x4e50
movq -0x358(%rbp), %rsi
leaq -0x2f0(%rbp), %rdi
callq 0x20f0
jmp 0x34cf
movq -0x490(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x4e80
jmp 0x34e4
leaq -0x2f0(%rbp), %rdi
callq 0x2150
movq -0x350(%rbp), %rdi
movq %rdi, %rsi
addq $0x200, %rsi            # imm = 0x200
addq $0x268, %rdi            # imm = 0x268
callq 0x5090
jmp 0x350f
movq -0x350(%rbp), %rax
movl 0x17c(%rax), %ecx
movl %ecx, 0x378(%rax)
leaq -0x2f1(%rbp), %rdi
callq 0x4350
jmp 0x3530
movq -0x350(%rbp), %rax
movq %rax, %rdi
addq $0x280, %rdi            # imm = 0x280
movslq 0x378(%rax), %rsi
callq 0x52e0
jmp 0x354f
movq -0x350(%rbp), %rax
movq %rax, %rdi
addq $0x298, %rdi            # imm = 0x298
movslq 0x378(%rax), %rsi
callq 0x52e0
jmp 0x356e
movq -0x350(%rbp), %rax
movq %rax, %rdi
addq $0x2b0, %rdi            # imm = 0x2B0
movslq 0x378(%rax), %rsi
callq 0x52e0
jmp 0x358d
movq -0x350(%rbp), %rax
movq %rax, %rdi
addq $0x2c8, %rdi            # imm = 0x2C8
movslq 0x378(%rax), %rsi
callq 0x52e0
jmp 0x35ac
movq -0x350(%rbp), %rax
movq %rax, %rdi
addq $0x2e0, %rdi            # imm = 0x2E0
movslq 0x378(%rax), %rsi
callq 0x52e0
jmp 0x35cb
movq -0x350(%rbp), %rax
movq %rax, %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
movslq 0x378(%rax), %rsi
callq 0x52e0
jmp 0x35ea
movq -0x350(%rbp), %rdi
movq %rdi, %rsi
addq $0x128, %rsi            # imm = 0x128
callq 0x5370
jmp 0x3602
movq -0x350(%rbp), %rdi
movq %rdi, %rsi
addq $0x148, %rsi            # imm = 0x148
callq 0x5370
jmp 0x361a
leaq -0x310(%rbp), %rdi
callq 0x42c0
jmp 0x3628
movq -0x350(%rbp), %rdi
addq $0x160, %rdi            # imm = 0x160
movq %rdi, -0x4a0(%rbp)
leaq -0x310(%rbp), %rsi
movq %rsi, -0x498(%rbp)
callq 0x4900
movq -0x498(%rbp), %rdi
callq 0x4930
movq -0x370(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x20f0
jmp 0x3671
movq -0x4a0(%rbp), %rdi
movq -0x350(%rbp), %rdx
addq $0x30, %rdx
leaq -0x330(%rbp), %rsi
callq 0x5470
jmp 0x3691
leaq -0x330(%rbp), %rdi
callq 0x2150
movq -0x350(%rbp), %rdi
movq %rdi, %rsi
addq $0x160, %rsi            # imm = 0x160
callq 0x5370
jmp 0x36b5
addq $0x4a0, %rsp            # imm = 0x4A0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x38df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x38d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x38c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x38bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x38af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x38a3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x382b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x37e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x2150
jmp 0x37e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x2150
jmp 0x37e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x2150
jmp 0x37e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x2150
jmp 0x37e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x2150
jmp 0x37e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x2150
movq -0x3f8(%rbp), %rdi
callq 0x57c0
movq -0x400(%rbp), %rdi
callq 0x57c0
movq -0x408(%rbp), %rdi
callq 0x57c0
movq -0x410(%rbp), %rdi
callq 0x57c0
movq -0x418(%rbp), %rdi
callq 0x5820
movq -0x420(%rbp), %rdi
callq 0x5820
movq -0x3b0(%rbp), %rdi
callq 0x57c0
movq -0x3b8(%rbp), %rdi
callq 0x57c0
movq -0x3c0(%rbp), %rdi
callq 0x57c0
movq -0x3c8(%rbp), %rdi
callq 0x57c0
movq -0x3d0(%rbp), %rdi
callq 0x57c0
movq -0x3d8(%rbp), %rdi
callq 0x57c0
movq -0x3e0(%rbp), %rdi
callq 0x5840
movq -0x3e8(%rbp), %rdi
callq 0x5840
movq -0x3f0(%rbp), %rdi
callq 0x5840
movq -0x3a8(%rbp), %rdi
callq 0x4e50
movq -0x3a0(%rbp), %rdi
callq 0x4e50
movq -0x398(%rbp), %rdi
callq 0x4e50
movq -0x390(%rbp), %rdi
callq 0x4930
movq -0x388(%rbp), %rdi
callq 0x4930
movq -0x338(%rbp), %rdi
callq 0x4450
movq -0x348(%rbp), %rdi
callq 0x58a0
movq -0x340(%rbp), %rdi
callq 0x58a0
movq -0x38(%rbp), %rdi
callq 0x23a0