)]}'
{
  "commit": "a3a4b6d77f376815ac7475a7d2e5b6df41797300",
  "tree": "026e4f2a731ac1e7ee6746fb3997b14f1974dccb",
  "parents": [
    "b75dac16943a6e3d39deb92e70c7f5df23092cc9"
  ],
  "author": {
    "name": "Sergiu Deitsch",
    "email": "sergiu.deitsch@gmail.com",
    "time": "Sun Nov 14 00:50:57 2021 +0100"
  },
  "committer": {
    "name": "Sergiu Deitsch",
    "email": "sergiu.deitsch@gmail.com",
    "time": "Mon Nov 15 23:27:33 2021 +0100"
  },
  "message": "support copysign jet\n\nlibc++ (default on macOS) uses the copysign function for std::complex\nmultiplication which causes compilation errors such as these if\nstd::complex is combined with jets:\n\n/Applications/Xcode_12.4.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/complex:607:19: error: no matching function for call to \u0027copysign\u0027\n            __a \u003d copysign(__libcpp_isinf_or_builtin(__a) ? _Tp(1) : _Tp(0), __a);\n                  ^~~~~~~~\nfoo.hpp:218:39: note: in instantiation of function template specialization \u0027std::__1::operator*\u003cceres::Jet\u003cdouble, 3\u003e \u003e\u0027 requested here\n    std::complex\u003cScalar\u003e result \u003d lhs * rhs;\n\ncopysign is also useful in other situations where the sign is required\nallowing it to compute without branching.\n\nChange-Id: I84b2d23374f1bf3bae32833016bb686d97d74054\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "be246173a1e4cd4a227452352cde9ed05ce105a7",
      "old_mode": 33188,
      "old_path": "include/ceres/jet.h",
      "new_id": "c97e6218c276b1c966665474072ab46646143a99",
      "new_mode": 33188,
      "new_path": "include/ceres/jet.h"
    },
    {
      "type": "modify",
      "old_id": "4718a20b0328b2723276818a67fdbba7d676c2ef",
      "old_mode": 33188,
      "old_path": "internal/ceres/jet_test.cc",
      "new_id": "5631312d4b90edf5bb6ff9dc912c0a469bc812b4",
      "new_mode": 33188,
      "new_path": "internal/ceres/jet_test.cc"
    }
  ]
}
