Macaulay2 Engine
Loading...
Searching...
No Matches
ringmap.cpp
Go to the documentation of this file.
1#include "interface/ringmap.h"
2
3#include "buffer.hpp"
4#include "error.h"
5#include "exceptions.hpp"
6#include "freemod.hpp"
7#include "mat.hpp"
8#include "matrix.hpp"
9#include "ringmap.hpp"
10
11class Ring;
12class RingElement;
13
14const Ring *IM2_RingMap_target(const RingMap *F) { return F->get_ring(); }
15M2_string IM2_RingMap_to_string(const RingMap *F)
16{
17 buffer o;
18 try
19 {
20 F->text_out(o);
21 return o.to_string();
22 } catch (const exc::engine_error& e)
23 {
24 o << "[unprintable ringmap]";
25 return o.to_string();
26 }
27}
28
29unsigned int rawRingMapHash(const RingMap *F) { return F->hash(); }
31{
32 return f->is_equal(g);
33}
34
35const RingMap *IM2_RingMap_make(const Matrix *M, const Ring *base); /* TODO */
36
37const RingMap *IM2_RingMap_make1(const Matrix *M) { return RingMap::make(M); }
38const RingElement /* or null */ *IM2_RingMap_eval_ringelem(const RingMap *F,
39 const RingElement *a)
40{
41 try
42 {
43 return F->eval(a);
44 } catch (const exc::engine_error& e)
45 {
46 ERROR(e.what());
47 return nullptr;
48 }
49}
50
51const Matrix /* or null */ *IM2_RingMap_eval_matrix(const RingMap *F,
52 const FreeModule *newTarget,
53 const Matrix *M)
54{
55 if (newTarget->rank() < M->n_rows())
56 {
57 ERROR("expected FreeModule of rank at least %d", M->n_rows());
58 return nullptr;
59 }
60 try
61 {
62 return F->eval(newTarget, M);
63 } catch (const exc::engine_error& e)
64 {
65 ERROR(e.what());
66 return nullptr;
67 }
68}
69
71 const MutableMatrix *M)
72{
73 try
74 {
76 F->get_ring(), M->n_rows(), M->n_cols(), M->is_dense());
77 // TODO: now map it!
78 } catch (const exc::engine_error& e)
79 {
80 ERROR(e.what());
81 return nullptr;
82 }
83}
84
85// Local Variables:
86// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
87// indent-tabs-mode: nil
88// End:
Append-only GC-backed byte buffer used throughout the engine for text output.
unsigned int hash() const
Definition hash.hpp:70
int rank() const
Definition freemod.hpp:105
Engine-side free module R^n over a Ring.
Definition freemod.hpp:66
int n_rows() const
Definition matrix.hpp:146
virtual size_t n_rows() const =0
virtual size_t n_cols() const =0
static MutableMatrix * zero_matrix(const Ring *R, size_t nrows, size_t ncols, bool dense)
Definition mat.cpp:54
virtual bool is_dense() const =0
Abstract base class for mutable matrices over an arbitrary engine Ring, the in-place counterpart of t...
Definition mat.hpp:79
Front-end-visible "ring element" value: an engine ring_elem paired with the Ring* that gives it meani...
Definition relem.hpp:67
xxx xxx xxx
Definition ring.hpp:102
bool is_equal(const RingMap *phi) const
Definition ringmap.cpp:111
const Ring * get_ring() const
Definition ringmap.hpp:111
void text_out(buffer &o) const
Definition ringmap.cpp:129
static const RingMap * make(const Matrix *m)
Definition ringmap.cpp:123
RingElement * eval(const RingElement *r) const
Definition ringmap.cpp:238
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Definition ringmap.hpp:60
M2_string to_string()
Definition buffer.cpp:20
Engine error-reporting primitives: ERROR, INTERNAL_ERROR, error, error_message.
namespace exc — internal C++ exception types and the TRY / CATCH macro pair.
static CanonicalForm base
Definition factory.cpp:289
#define Matrix
Definition factory.cpp:14
FreeModule — finite-rank free module R^n, the type-level anchor for every Matrix.
MutableMatrix * rawRingMapEvalMutableMatrix(const RingMap *F, const MutableMatrix *M)
Definition ringmap.cpp:70
const Ring * IM2_RingMap_target(const RingMap *F)
Definition ringmap.cpp:14
const Matrix * IM2_RingMap_eval_matrix(const RingMap *F, const FreeModule *newTarget, const Matrix *M)
Definition ringmap.cpp:51
const RingMap * IM2_RingMap_make1(const Matrix *M)
Definition ringmap.cpp:37
const RingElement * IM2_RingMap_eval_ringelem(const RingMap *F, const RingElement *a)
Definition ringmap.cpp:38
const RingMap * IM2_RingMap_make(const Matrix *M, const Ring *base)
unsigned int rawRingMapHash(const RingMap *F)
Definition ringmap.cpp:29
M2_bool IM2_RingMap_is_equal(const RingMap *f, const RingMap *g)
Definition ringmap.cpp:30
M2_string IM2_RingMap_to_string(const RingMap *F)
Definition ringmap.cpp:15
const int ERROR
Definition m2-mem.cpp:55
char M2_bool
Definition m2-types.h:82
MutableMatrix — abstract base of every mutable matrix the engine hands across the boundary.
Matrix — the engine's immutable homomorphism F -> G between free modules.
Engine-boundary C API for constructing and evaluating RingMap homomorphisms.
RingMap — engine representation of a ring homomorphism.