Macaulay2 Engine
Loading...
Searching...
No Matches

◆ rawConvolve()

engine_RawRingElementArrayOrNull rawConvolve ( engine_RawRingElementArray H,
int convolve_type )

Definition at line 762 of file ringelement.cpp.

764{
765 // convolve_type == 1: E_n = E_(n-1) * H_1 - E(n-2) * H_2 + ... + (-1)^n * H_n
766 // convolve_type == 2: n * E_n = E_(n-1) * H_1 - E(n-2) * H_2 + ... + (-1)^n *
767 // H_n
768 // others of interest? These are good for translating between symmetric
769 // functions of type E,H,P
770
771 // H_0 is ignored... (OR: should we instead shift everything: first entry of H
772 // is denoted H_1...?)
773
774 try
775 {
776 int len = H->len;
777 if (len <= 1)
778 {
779 ERROR("expected ring element array of length at least 2");
780 return nullptr;
781 }
782 const PolyRing *P = H->array[1]->get_ring()->cast_to_PolyRing();
783 if (P == nullptr)
784 {
785 ERROR("expected a polynomial ring");
786 return nullptr;
787 }
788 VECTOR(ring_elem) input_relems(len);
789 VECTOR(ring_elem) output_relems(len);
790 for (int i = 0; i < len; i++) input_relems[i] = H->array[i]->get_value();
791 convolve(P, input_relems, output_relems, convolve_type);
792
793 engine_RawRingElementArray result =
794 getmemarraytype(engine_RawRingElementArray, len);
795 result->len = len;
796 for (int i = 0; i < result->len; i++)
797 result->array[i] = RingElement::make_raw(P, output_relems[i]);
798
799 return result;
800 } catch (const exc::engine_error& e)
801 {
802 ERROR(e.what());
803 return nullptr;
804 }
805}
Concrete PolyRingFlat subclass implementing ordinary commutative polynomial rings K[x_1,...
Definition poly.hpp:64
static RingElement * make_raw(const Ring *R, ring_elem f)
Definition relem.cpp:20
const int ERROR
Definition m2-mem.cpp:55
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmemarraytype(S, len)
Definition m2-mem.h:142
#define VECTOR(T)
Definition newdelete.hpp:78
void convolve(const PolyRing *R, const VECTOR(ring_elem) &input_relems, VECTOR(ring_elem) &output_relems, int convolve_type)

References convolve(), ERROR, getmemarraytype, RingElement::make_raw(), result(), and VECTOR.