<commit_before>#include "Matrix.h"
#include "Quaternion.h"
#include <algorithm>
#include <utility>

namespace Mai {

Matrix4x4& Matrix4x4::Scale(float x, float y, float z) {
	SetVector(0, GetVector(0) * x);
	SetVector(1, GetVector(1) * y);
	SetVector(2, GetVector(2) * z);
	return *this;
}

Matrix4x4& Matrix4x4::Transpose() {
	std::swap(f[1], f[4]);
	std::swap(f[2], f[8]);
	std::swap(f[3], f[12]);
	std::swap(f[6], f[9]);
	std::swap(f[7], f[13]);
	std::swap(f[11], f[14]);
	return *this;
}

Matrix4x4& Matrix4x4::Inverse()
{
  Matrix4x4 ret;
  float det_1;
  float pos = 0;
  float neg = 0;
  float temp;

  temp = f[0] * f[5] * f[10];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = f[4] * f[9] * f[2];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = f[8] * f[1] * f[6];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = -f[8] * f[5] * f[2];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = -f[4] * f[1] * f[10];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = -f[0] * f[9] * f[6];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  det_1 = pos + neg;

  if (det_1 == 0.0) {
	//Error
  } else {
	det_1 = 1.0f / det_1;
	ret.f[0] =  (f[5] * f[10] - f[9] * f[6]) * det_1;
	ret.f[1] = -(f[1] * f[10] - f[9] * f[2]) * det_1;
	ret.f[2] =  (f[1] * f[ 6] - f[5] * f[2]) * det_1;
	ret.f[4] = -(f[4] * f[10] - f[8] * f[6]) * det_1;
	ret.f[5] =  (f[0] * f[10] - f[8] * f[2]) * det_1;
	ret.f[6] = -(f[0] * f[ 6] - f[4] * f[2]) * det_1;
	ret.f[8] =  (f[4] * f[ 9] - f[8] * f[5]) * det_1;
	ret.f[9] = -(f[0] * f[ 9] - f[8] * f[1]) * det_1;
	ret.f[10] = (f[0] * f[ 5] - f[4] * f[1]) * det_1;

	/* Calculate -C * inverse(A) */
	ret.f[12] = -(f[12] * ret.f[0] + f[13] * ret.f[4] + f[14] * ret.f[8]);
	ret.f[13] = -(f[12] * ret.f[1] + f[13] * ret.f[5] + f[14] * ret.f[9]);
	ret.f[14] = -(f[12] * ret.f[2] + f[13] * ret.f[6] + f[14] * ret.f[10]);

	ret.f[3] = 0.0f;
	ret.f[7] = 0.0f;
	ret.f[11] = 0.0f;
	ret.f[15] = 1.0f;
  }

  *this = ret;
  return *this;
}

void Matrix4x4::Decompose(Quaternion* q, Vector3F* scale, Vector3F* trans) const {
  if (trans) {
    *trans = GetRawVector(3).ToVec3();
  }
  Vector3F v0 = GetVector(0).ToVec3();
  Vector3F v1 = GetVector(1).ToVec3();
  Vector3F v2 = GetVector(2).ToVec3();
  const Vector3F s(v0.Length(), v1.Length(), v2.Length());
  if (scale) {
    *scale = s;<commit_msg>fix to get the correct translation.<commit_after>#include "Matrix.h"
#include "Quaternion.h"
#include <algorithm>
#include <utility>

namespace Mai {

Matrix4x4& Matrix4x4::Scale(float x, float y, float z) {
	SetVector(0, GetVector(0) * x);
	SetVector(1, GetVector(1) * y);
	SetVector(2, GetVector(2) * z);
	return *this;
}

Matrix4x4& Matrix4x4::Transpose() {
	std::swap(f[1], f[4]);
	std::swap(f[2], f[8]);
	std::swap(f[3], f[12]);
	std::swap(f[6], f[9]);
	std::swap(f[7], f[13]);
	std::swap(f[11], f[14]);
	return *this;
}

Matrix4x4& Matrix4x4::Inverse()
{
  Matrix4x4 ret;
  float det_1;
  float pos = 0;
  float neg = 0;
  float temp;

  temp = f[0] * f[5] * f[10];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = f[4] * f[9] * f[2];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = f[8] * f[1] * f[6];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = -f[8] * f[5] * f[2];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = -f[4] * f[1] * f[10];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  temp = -f[0] * f[9] * f[6];
  if (temp >= 0)
	pos += temp;
  else
	neg += temp;
  det_1 = pos + neg;

  if (det_1 == 0.0) {
	//Error
  } else {
	det_1 = 1.0f / det_1;
	ret.f[0] =  (f[5] * f[10] - f[9] * f[6]) * det_1;
	ret.f[1] = -(f[1] * f[10] - f[9] * f[2]) * det_1;
	ret.f[2] =  (f[1] * f[ 6] - f[5] * f[2]) * det_1;
	ret.f[4] = -(f[4] * f[10] - f[8] * f[6]) * det_1;
	ret.f[5] =  (f[0] * f[10] - f[8] * f[2]) * det_1;
	ret.f[6] = -(f[0] * f[ 6] - f[4] * f[2]) * det_1;
	ret.f[8] =  (f[4] * f[ 9] - f[8] * f[5]) * det_1;
	ret.f[9] = -(f[0] * f[ 9] - f[8] * f[1]) * det_1;
	ret.f[10] = (f[0] * f[ 5] - f[4] * f[1]) * det_1;

	/* Calculate -C * inverse(A) */
	ret.f[12] = -(f[12] * ret.f[0] + f[13] * ret.f[4] + f[14] * ret.f[8]);
	ret.f[13] = -(f[12] * ret.f[1] + f[13] * ret.f[5] + f[14] * ret.f[9]);
	ret.f[14] = -(f[12] * ret.f[2] + f[13] * ret.f[6] + f[14] * ret.f[10]);

	ret.f[3] = 0.0f;
	ret.f[7] = 0.0f;
	ret.f[11] = 0.0f;
	ret.f[15] = 1.0f;
  }

  *this = ret;
  return *this;
}

void Matrix4x4::Decompose(Quaternion* q, Vector3F* scale, Vector3F* trans) const {
  if (trans) {
    *trans = GetVector(3).ToVec3();
  }
  Vector3F v0 = GetVector(0).ToVec3();
  Vector3F v1 = GetVector(1).ToVec3();
  Vector3F v2 = GetVector(2).ToVec3();
  const Vector3F s(v0.Length(), v1.Length(), v2.Length());
  if (scale) {
    *scale = s;
{'fraction_non_alphanumeric': 0.26634433466470464, 'fraction_numerical': 0.08492747529955855, 'mean_word_length': 2.9225061830173122, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3258131', 'n_tokens_mistral': 2623, 'n_tokens_neox': 2505, 'n_words': 536}