<pre style='margin:0'>
Chris Jones (cjones051073) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/44d36e52540afb3b9ddb77944348e56af4082086">https://github.com/macports/macports-ports/commit/44d36e52540afb3b9ddb77944348e56af4082086</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 44d36e52540 hptt: Add missing patch file
</span>44d36e52540 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 44d36e52540afb3b9ddb77944348e56af4082086
</span>Author: Chris Jones <jonesc@macports.org>
AuthorDate: Tue Apr 11 15:07:25 2023 +0100

<span style='display:block; white-space:pre;color:#404040;'>    hptt: Add missing patch file
</span>---
 math/hptt/files/0004-Fix-Build-With-Clang.patch | 116 ++++++++++++++++++++++++
 1 file changed, 116 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/math/hptt/files/0004-Fix-Build-With-Clang.patch b/math/hptt/files/0004-Fix-Build-With-Clang.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..0931162acfb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/math/hptt/files/0004-Fix-Build-With-Clang.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,116 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/benchmark/reference.cpp b/benchmark/reference.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a74318a..13dd108 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/benchmark/reference.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/benchmark/reference.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -13,6 +13,35 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "defines.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Check if 'floatType' is complex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <typename floatType>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++class is_complex {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  template <
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      template <typename> typename _floatType, typename T,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      typename = typename std::enable_if<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          std::is_same<_floatType<T>, std::complex<T>>::value, bool>::type>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool static constexpr _is_complex(_floatType<T>) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return true;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  template <typename _floatType>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool static constexpr _is_complex(_floatType) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  static constexpr auto value =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      _is_complex(typename std::remove_reference<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  typename std::remove_cv<floatType>::type>::type());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Re-define 'conj' to make sure it return a floating point if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// argument is a floating point
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++template <typename floatType, typename = typename std::enable_if<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                                  !is_complex<floatType>::value, bool>::type>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++floatType conj(floatType &&x) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return x;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template<typename floatType>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void transpose_ref( uint32_t *size, uint32_t *perm, int dim, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -57,13 +86,13 @@ void transpose_ref( uint32_t *size, uint32_t *perm, int dim,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       if( beta == (floatType) 0 )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          for(int i=0; i < sizeInner; ++i)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if( conjA )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-               B_[i] = alpha * std::conj(A_[i * strideAinner]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++               B_[i] = alpha * conj(A_[i * strideAinner]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                B_[i] = alpha * A_[i * strideAinner];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          for(int i=0; i < sizeInner; ++i)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if( conjA )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-               B_[i] = alpha * std::conj(A_[i * strideAinner]) + beta * B_[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++               B_[i] = alpha * conj(A_[i * strideAinner]) + beta * B_[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                B_[i] = alpha * A_[i * strideAinner] + beta * B_[i];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/pythonAPI/hptt/hptt.py b/pythonAPI/hptt/hptt.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f6f4171..a0df69c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/pythonAPI/hptt/hptt.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/pythonAPI/hptt/hptt.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -115,10 +115,16 @@ def tensorTransposeAndUpdate(perm, alpha, A, beta, B, numThreads=-1):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         raise ValueError("Unsupported dtype: {}.".format(A.dtype))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     # tranpose!
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    tranpose_fn(permc, ctypes.c_int32(A.ndim),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                scalar_fn(alpha), dataA, sizeA, outerSizeA,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                scalar_fn(beta), dataB, outerSizeB,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                ctypes.c_int32(numThreads), ctypes.c_int32(useRowMajor))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if 'float' in str(A.dtype):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        tranpose_fn(permc, ctypes.c_int32(A.ndim),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    scalar_fn(alpha), dataA, sizeA, outerSizeA,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    scalar_fn(beta), dataB, outerSizeB,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    ctypes.c_int32(numThreads), ctypes.c_int32(useRowMajor))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        tranpose_fn(permc, ctypes.c_int32(A.ndim),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    scalar_fn(alpha), False, dataA, sizeA, outerSizeA,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    scalar_fn(beta), dataB, outerSizeB,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    ctypes.c_int32(numThreads), ctypes.c_int32(useRowMajor))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def tensorTranspose(perm, alpha, A, numThreads=-1):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -168,7 +174,7 @@ def transpose(a, axes=None):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         ``a`` with its axes permuted.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     """
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if axes is None:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        axes = reversed(range(a.ndim))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        axes = list(reversed(range(a.ndim)))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return tensorTranspose(axes, 1.0, a)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/src/hptt.cpp b/src/hptt.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ea761c8..41c4551 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/src/hptt.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/src/hptt.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -171,8 +171,8 @@ void dTensorTranspose( const int *perm, const int dim,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void cTensorTranspose( const int *perm, const int dim,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                 const float _Complex alpha, bool conjA, const float _Complex *A, const int *sizeA, const int *outerSizeA, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                 const float _Complex beta,        float _Complex *B,                   const int *outerSizeB, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 const float alpha, bool conjA, const float *A, const int *sizeA, const int *outerSizeA, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 const float beta,        float *B,                   const int *outerSizeB, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  const int numThreads, const int useRowMajor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    auto plan(std::make_shared<hptt::Transpose<hptt::FloatComplex> >(sizeA, perm, outerSizeA, outerSizeB, dim, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -182,8 +182,8 @@ void cTensorTranspose( const int *perm, const int dim,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void zTensorTranspose( const int *perm, const int dim,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                 const double _Complex alpha, bool conjA, const double _Complex *A, const int *sizeA, const int *outerSizeA, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                 const double _Complex beta,        double _Complex *B,                   const int *outerSizeB, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 const double alpha, bool conjA, const double *A, const int *sizeA, const int *outerSizeA, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                 const double beta,        double *B,                   const int *outerSizeB, 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                  const int numThreads, const int useRowMajor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    auto plan(std::make_shared<hptt::Transpose<hptt::DoubleComplex> >(sizeA, perm, outerSizeA, outerSizeB, dim, 
</span></pre><pre style='margin:0'>

</pre>