The Original CHomP Software
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
chomp::homology::chaincomplex< euclidom > Class Template Reference

This is an implementation of a chain complex over an arbitrary ring. More...

#include <chains.h>

Public Member Functions

 chaincomplex (int d, int trace_generators=0, int trace_bases=0)
 The default constructor. More...
 
 ~chaincomplex ()
 The destructor. More...
 
void def_gen (int q, int_t n)
 Defines the number of generators in the given dimension. More...
 
void add (int q, int_t m, int_t n, const euclidom &e)
 Adds a coefficient to the structure: D_q [m, n] += e. More...
 
euclidom get (int q, int_t row, int_t col) const
 Returns an element from the boundary matrix for the given dimension. More...
 
const mmatrix< euclidom > & getboundary (int i) const
 Returns a reference to the given boundary matrix. More...
 
int_t getnumgen (int i) const
 Returns the number of generators at the given level. More...
 
int dim () const
 Returns the dimension of the chain complex. More...
 
const chain< euclidom > & gethomgen (int q, int_t i) const
 Returns the given homology generator at level q. More...
 
const mmatrix< euclidom > & gethomgen (int q) const
 Returns the homology generators matrix at level q. More...
 
const mmatrix< euclidom > & getchgbasis (int q) const
 Returns the base change matrix at level q. More...
 
void simple_form (int which, bool quiet)
 Reduces of the given boundary matrix in the chain complex for the purpose of homology computation. More...
 
void simple_form (const int *level, bool quiet)
 Runs the reduction of all the boundary matrices in the chain complex. More...
 
int simple_homology (chain< euclidom > &result, int which) const
 Computes the given level of homology of the chain complex, provided it has been transformed into the simple form previously. More...
 
int simple_homology (chain< euclidom > *&result, const int *level=NULL) const
 Computes the homology of the chain complex, provided it has been transformed into the simple form previously. More...
 
void take_homology (const chain< euclidom > *hom_chain)
 Creates a chain complex containing exactly one generator for each homology generator. More...
 
outputstreamshow_homology (outputstream &out, const chain< euclidom > *hom, const int *level=NULL) const
 Writes the homology module of the chain complex to an output stream. More...
 
std::ostream & show_homology (std::ostream &out, const chain< euclidom > *hom, const int *level=NULL) const
 Writes the homology module of the chain complex to an output stream. More...
 
outputstreamshow_generators (outputstream &out, const chain< euclidom > &list, int q) const
 Writes the homology generators of the homology module to an output stream. More...
 
std::ostream & show_generators (std::ostream &out, const chain< euclidom > &list, int q) const
 Writes the homology generators of the homology module to an output stream. More...
 
outputstreamcompute_and_show_homology (outputstream &out, chain< euclidom > *&hom, const int *level=NULL)
 Computes the homology and shows the result. More...
 
std::ostream & compute_and_show_homology (std::ostream &out, chain< euclidom > *&hom, const int *level=NULL)
 Computes the homology and shows the result. More...
 

Private Member Functions

 chaincomplex (const chaincomplex< euclidom > &m)
 The copy constructor is not implemented. More...
 
chaincomplex< euclidom > & operator= (const chaincomplex< euclidom > &s)
 The assignment operator is not implemented. More...
 

Private Attributes

int len
 The length of the chain complex (i.e., its dimension + 1). More...
 
mmatrix< euclidom > * boundary
 The matrices of the boundary homomorphism. More...
 
mmatrix< euclidom > * generators
 Matrices which store actual combinations of generators. More...
 
mmatrix< euclidom > * chgbases
 Matrices which store the change of basis to obtain the SNF. More...
 
int * generators_initialized
 Have the generator tracing matrices been initialized to the identity (of suitable size each)? More...
 
int * chgbases_initialized
 Have the base change tracing matrices been initialized to the identity (of suitable size each)? More...
 
int_tnumgen
 The numbers of generators in each dimension, or -1's if not defined yet. More...
 

Friends

class chainmap< euclidom >
 The class "chainmap" is a friend class which has access to the internal data of the chain complex class. More...
 

Detailed Description

template<class euclidom>
class chomp::homology::chaincomplex< euclidom >

This is an implementation of a chain complex over an arbitrary ring.

The dimension of the chain complex must be known apriori. If there are elements not used in boundaries, use "def_gen" to set the true number of generators at each level.

Definition at line 2661 of file chains.h.

Constructor & Destructor Documentation

◆ chaincomplex() [1/2]

template<class euclidom >
chomp::homology::chaincomplex< euclidom >::chaincomplex ( int  d,
int  trace_generators = 0,
int  trace_bases = 0 
)
inline

The default constructor.

The dimension must be defined apriori and cannot be modified later. If requested, additional matrices are created to trace homology generators, and/or to determine the change of bases while computing the SNF.

Definition at line 2820 of file chains.h.

2822{
2823 // set the number of tables to be sufficient for 0 to d inclusive
2824 len = (d >= 0) ? (d + 1) : 0;
2825
2826 // create a table of empty matrices
2827 boundary = len ? new mmatrix<euclidom> [len] : NULL;
2828
2829 // create a table of matrices for tracing generators of homology
2830 generators = (trace_generators && len) ?
2831 new mmatrix<euclidom> [len] : NULL;
2832 if (generators)
2833 generators_initialized = new int [len];
2834 else
2836
2837 // create a table of matrices for tacing base changes
2838 chgbases = (trace_bases && len) ?
2839 new mmatrix<euclidom> [len] : NULL;
2840 if (chgbases)
2841 chgbases_initialized = new int [len];
2842 else
2843 chgbases_initialized = NULL;
2844
2845 // create a table of generator numbers
2846 numgen = len ? new int_t [len] : NULL;
2847
2848 // link the boundary matrices to each other,
2849 // as well as to the generators and to the base change matrices
2850 for (int i = 0; i < len; ++ i)
2851 {
2852 numgen [i] = -1;
2853 if (i < len - 1)
2854 boundary [i]. dom_img. add (boundary [i + 1]);
2855 if (i > 0)
2856 boundary [i]. img_dom. add (boundary [i - 1]);
2857 if (generators)
2858 {
2859 boundary [i]. dom_dom. add (generators [i]);
2860 if (i > 0)
2861 {
2862 boundary [i]. img_dom. add
2863 (generators [i - 1]);
2864 }
2865 generators_initialized [i] = 0;
2866 }
2867 if (chgbases)
2868 {
2869 boundary [i]. dom_img. add (chgbases [i]); // ???
2870 if (i > 0)
2871 {
2872 boundary [i]. img_img. add // ???
2873 (chgbases [i - 1]);
2874 }
2875 chgbases_initialized [i] = 0;
2876 }
2877 }
2878
2879 return;
2880} /* chaincomplex<euclidom>::chaincomplex */
mmatrix< euclidom > * generators
Matrices which store actual combinations of generators.
Definition: chains.h:2798
void add(int q, int_t m, int_t n, const euclidom &e)
Adds a coefficient to the structure: D_q [m, n] += e.
Definition: chains.h:2920
mmatrix< euclidom > * chgbases
Matrices which store the change of basis to obtain the SNF.
Definition: chains.h:2801
int_t * numgen
The numbers of generators in each dimension, or -1's if not defined yet.
Definition: chains.h:2813
mmatrix< euclidom > * boundary
The matrices of the boundary homomorphism.
Definition: chains.h:2794
int * chgbases_initialized
Have the base change tracing matrices been initialized to the identity (of suitable size each)?
Definition: chains.h:2809
int * generators_initialized
Have the generator tracing matrices been initialized to the identity (of suitable size each)?
Definition: chains.h:2805
int len
The length of the chain complex (i.e., its dimension + 1).
Definition: chains.h:2790
int int_t
Index type for indexing arrays, counting cubes, etc.
Definition: config.h:115

◆ ~chaincomplex()

template<class euclidom >
chomp::homology::chaincomplex< euclidom >::~chaincomplex
inline

The destructor.

Definition at line 2883 of file chains.h.

2884{
2885 if (boundary)
2886 delete [] boundary;
2887 if (generators)
2888 delete [] generators;
2889 if (chgbases)
2890 delete [] chgbases;
2891 if (numgen)
2892 delete [] numgen;
2894 delete [] generators_initialized;
2896 delete [] chgbases_initialized;
2897 return;
2898} /* chaincomplex<euclidom>::~chaincomplex */

◆ chaincomplex() [2/2]

template<class euclidom >
chomp::homology::chaincomplex< euclidom >::chaincomplex ( const chaincomplex< euclidom > &  m)
inlineprivate

The copy constructor is not implemented.

Definition at line 2779 of file chains.h.

2780 {throw "Copy constructor not implemented "
2781 "for a chain complex.";}

Member Function Documentation

◆ add()

template<class euclidom >
void chomp::homology::chaincomplex< euclidom >::add ( int  q,
int_t  m,
int_t  n,
const euclidom &  e 
)
inline

Adds a coefficient to the structure: D_q [m, n] += e.

In other words, boundary of element n += e * element m.

Definition at line 2920 of file chains.h.

2922{
2923 if ((q <= 0) || (q >= len))
2924 throw "Trying to add a boundary for dimension out of range";
2925
2926 if (numgen [q] <= n)
2927 numgen [q] = n + 1;
2928 if (numgen [q - 1] <= m)
2929 numgen [q - 1] = m + 1;
2930
2931 boundary [q]. add (m, n, e);
2932 return;
2933} /* chaincomplex<euclidom>::add */

◆ compute_and_show_homology() [1/2]

template<class euclidom >
outputstream & chomp::homology::chaincomplex< euclidom >::compute_and_show_homology ( outputstream out,
chain< euclidom > *&  hom,
const int *  level = NULL 
)
inline

Computes the homology and shows the result.

Definition at line 3189 of file chains.h.

3191{
3192 simple_form (level, false);
3193 simple_homology (hom, level);
3194 show_homology (out, hom, level);
3195 return out;
3196} /* chaincomplex<euclidom>::compute_and_show_homology */
outputstream & show_homology(outputstream &out, const chain< euclidom > *hom, const int *level=NULL) const
Writes the homology module of the chain complex to an output stream.
Definition: chains.h:3140
void simple_form(int which, bool quiet)
Reduces of the given boundary matrix in the chain complex for the purpose of homology computation.
Definition: chains.h:3007
int simple_homology(chain< euclidom > &result, int which) const
Computes the given level of homology of the chain complex, provided it has been transformed into the ...
Definition: chains.h:3079

References chomp::homology::show_homology().

◆ compute_and_show_homology() [2/2]

template<class euclidom >
std::ostream & chomp::homology::chaincomplex< euclidom >::compute_and_show_homology ( std::ostream &  out,
chain< euclidom > *&  hom,
const int *  level = NULL 
)
inline

Computes the homology and shows the result.

Definition at line 3199 of file chains.h.

3201{
3202 outputstream tout (out);
3203 compute_and_show_homology (tout, hom, level);
3204 return out;
3205} /* chaincomplex<euclidom>::compute_and_show_homology */
outputstream & compute_and_show_homology(outputstream &out, chain< euclidom > *&hom, const int *level=NULL)
Computes the homology and shows the result.
Definition: chains.h:3190

◆ def_gen()

template<class euclidom >
void chomp::homology::chaincomplex< euclidom >::def_gen ( int  q,
int_t  n 
)
inline

Defines the number of generators in the given dimension.

This number is automatically increased while boundary formulas are added. However, it must be used if some generators do not appear in the boundaries or have zero boundaries.

Definition at line 2901 of file chains.h.

2902{
2903 if ((q < 0) || (q >= len))
2904 return;
2905
2906 if (numgen [q] < n)
2907 numgen [q] = n;
2908
2909 if (q == 0)
2910 boundary [0]. define (0, numgen [q]);
2911 if ((q > 0) && (numgen [q - 1] >= 0))
2912 boundary [q]. define (numgen [q - 1], numgen [q]);
2913 if ((q < dim ()) && (numgen [q + 1] >= 0))
2914 boundary [q + 1]. define (numgen [q], numgen [q + 1]);
2915
2916 return;
2917} /* chaincomplex<euclidom>::def_gen */
int dim() const
Returns the dimension of the chain complex.
Definition: chains.h:2968

◆ dim()

template<class euclidom >
int chomp::homology::chaincomplex< euclidom >::dim
inline

Returns the dimension of the chain complex.

Definition at line 2968 of file chains.h.

2969{
2970 return len - 1;
2971} /* chaincomplex<euclidom>::dim */

◆ get()

template<class euclidom >
euclidom chomp::homology::chaincomplex< euclidom >::get ( int  q,
int_t  row,
int_t  col 
) const
inline

Returns an element from the boundary matrix for the given dimension.

Definition at line 2936 of file chains.h.

2937{
2938 if ((q < 0) || (q >= len))
2939 throw "Boundary coefficient out of range from chain cplx.";
2940
2941 return boundary [q]. get (row, col);
2942} /* chaincomplex<euclidom>::get */
euclidom get(int q, int_t row, int_t col) const
Returns an element from the boundary matrix for the given dimension.
Definition: chains.h:2936

◆ getboundary()

template<class euclidom >
const mmatrix< euclidom > & chomp::homology::chaincomplex< euclidom >::getboundary ( int  i) const
inline

Returns a reference to the given boundary matrix.

Definition at line 2945 of file chains.h.

2947{
2948 if ((i < 0) || (i >= len))
2949 throw "Boundary matrix out of range from chain complex.";
2950
2951 return boundary [i];
2952} /* chaincomplex<euclidom>::getboundary */

◆ getchgbasis()

template<class euclidom >
const mmatrix< euclidom > & chomp::homology::chaincomplex< euclidom >::getchgbasis ( int  q) const
inline

Returns the base change matrix at level q.

Definition at line 2996 of file chains.h.

2998{
2999 if ((q < 0) || (q >= len))
3000 throw "Level for basis change matrix out of range.";
3001 if (!chgbases || !chgbases_initialized [q])
3002 throw "Trying to get non-existent basis change matrix.";
3003 return chgbases [q];
3004} /* chaincomplex<euclidom>::getchgbasis */

◆ gethomgen() [1/2]

template<class euclidom >
const mmatrix< euclidom > & chomp::homology::chaincomplex< euclidom >::gethomgen ( int  q) const
inline

Returns the homology generators matrix at level q.

Definition at line 2985 of file chains.h.

2987{
2988 if ((q < 0) || (q >= len))
2989 throw "Level for homology generators out of range.";
2991 throw "Trying to get non-existent homology generators.";
2992 return generators [q];
2993} /* chaincomplex<euclidom>::gethomgen */

◆ gethomgen() [2/2]

template<class euclidom >
const chain< euclidom > & chomp::homology::chaincomplex< euclidom >::gethomgen ( int  q,
int_t  i 
) const
inline

Returns the given homology generator at level q.

Note: 'i' must be the number of chain generator.

Definition at line 2974 of file chains.h.

2976{
2977 if ((q < 0) || (q >= len))
2978 throw "Level for homology generators out of range.";
2980 throw "Trying to get non-existent homology generators.";
2981 return generators [q]. getcol (i);
2982} /* chaincomplex<euclidom>::gethomgen */

◆ getnumgen()

template<class euclidom >
int_t chomp::homology::chaincomplex< euclidom >::getnumgen ( int  i) const
inline

Returns the number of generators at the given level.

Definition at line 2955 of file chains.h.

2956{
2957 if ((i < 0) || (i >= len))
2958 // throw "Level for the number of generators out of range.";
2959 return 0;
2960
2961 if (numgen [i] < 0)
2962 return 0;
2963 else
2964 return numgen [i];
2965} /* chaincomplex<euclidom>::getnumgen */

◆ operator=()

template<class euclidom >
chaincomplex< euclidom > & chomp::homology::chaincomplex< euclidom >::operator= ( const chaincomplex< euclidom > &  s)
inlineprivate

The assignment operator is not implemented.

Definition at line 2784 of file chains.h.

2786 {throw "Operator = not implemented "
2787 "for a chain complex."; return *this;}

◆ show_generators() [1/2]

template<class euclidom >
outputstream & chomp::homology::chaincomplex< euclidom >::show_generators ( outputstream out,
const chain< euclidom > &  list,
int  q 
) const
inline

Writes the homology generators of the homology module to an output stream.

Each generator as a combination of the original ones is shown on a separate line.

Definition at line 3169 of file chains.h.

3171{
3172 if (!generators || (q < 0) || (q >= len))
3173 return out;
3174 for (int_t i = 0; i < list. size (); ++ i)
3175 out << gethomgen (q, list. num (i)) << '\n';
3176 return out;
3177} /* chaincomplex<euclidom>::show_generators */
const chain< euclidom > & gethomgen(int q, int_t i) const
Returns the given homology generator at level q.
Definition: chains.h:2974

◆ show_generators() [2/2]

template<class euclidom >
std::ostream & chomp::homology::chaincomplex< euclidom >::show_generators ( std::ostream &  out,
const chain< euclidom > &  list,
int  q 
) const
inline

Writes the homology generators of the homology module to an output stream.

Each generator as a combination of the original ones is shown on a separate line.

Definition at line 3180 of file chains.h.

3182{
3183 outputstream tout (out);
3184 show_generators (tout, list, q);
3185 return out;
3186} /* chaincomplex<euclidom>::show_generators */
outputstream & show_generators(outputstream &out, const chain< euclidom > &list, int q) const
Writes the homology generators of the homology module to an output stream.
Definition: chains.h:3170

◆ show_homology() [1/2]

template<class euclidom >
outputstream & chomp::homology::chaincomplex< euclidom >::show_homology ( outputstream out,
const chain< euclidom > *  hom,
const int *  level = NULL 
) const
inline

Writes the homology module of the chain complex to an output stream.

If a table of levels is given, shows only these levels for which the table's entry is nonzero.

Definition at line 3139 of file chains.h.

3142{
3143 int max_level = len - 1;
3144 while ((max_level >= 0) && !hom [max_level]. size ())
3145 -- max_level;
3146 ++ max_level;
3147 for (int q = 0; q < max_level; ++ q)
3148 {
3149 if (!level || level [q])
3150 {
3151 out << "H_" << q << " = ";
3152 chomp::homology::show_homology (out, hom [q]);
3153 out << '\n';
3154 }
3155 }
3156 return out;
3157} /* chaincomplex<euclidom>::show_homology */
outputstream & show_homology(outputstream &out, const chain< euclidom > &c)
Shows a chain as a list of generators of one level of a homology module.
Definition: chains.h:3584

References chomp::homology::show_homology().

◆ show_homology() [2/2]

template<class euclidom >
std::ostream & chomp::homology::chaincomplex< euclidom >::show_homology ( std::ostream &  out,
const chain< euclidom > *  hom,
const int *  level = NULL 
) const
inline

Writes the homology module of the chain complex to an output stream.

If a table of levels is given, shows only these levels for which the table's entry is nonzero.

Definition at line 3160 of file chains.h.

3162{
3163 outputstream tout (out);
3164 show_homology (tout, hom, level);
3165 return out;
3166} /* chaincomplex<euclidom>::show_homology */

References chomp::homology::show_homology().

◆ simple_form() [1/2]

template<class euclidom >
void chomp::homology::chaincomplex< euclidom >::simple_form ( const int *  level,
bool  quiet 
)
inline

Runs the reduction of all the boundary matrices in the chain complex.

If the array of levels is given, computes only simple forms necessary for homology levels for which the entries in the array are nonzero.

Definition at line 3067 of file chains.h.

3069{
3070 for (int i = len - 1; i >= 0; -- i)
3071 {
3072 if (!level || level [i] || (i && level [i - 1]))
3073 simple_form (i, quiet);
3074 }
3075 return;
3076} /* chaincomplex<euclidom>::simple_form */

◆ simple_form() [2/2]

template<class euclidom >
void chomp::homology::chaincomplex< euclidom >::simple_form ( int  which,
bool  quiet 
)
inline

Reduces of the given boundary matrix in the chain complex for the purpose of homology computation.

Definition at line 3007 of file chains.h.

3008{
3009// if ((which < 0) || (which >= len))
3010// throw "Trying to find the simple form of a wrong matrix.";
3011
3012 // if the generator tracing matrices are not initialized, do it now
3013 if (generators)
3014 {
3015 if (!generators_initialized [which])
3016 generators [which]. identity (numgen [which]);
3017 generators_initialized [which] = 1;
3018 if ((which > 0) && (!generators_initialized [which - 1]))
3019 {
3020 generators [which - 1]. identity
3021 (numgen [which - 1]);
3022 generators_initialized [which - 1] = 1;
3023 }
3024 }
3025
3026 // if the base change tracing matrices are not initialized, do it now
3027 if (chgbases)
3028 {
3029 if (!chgbases_initialized [which])
3030 chgbases [which]. identity (numgen [which]);
3031 chgbases_initialized [which] = 1;
3032 if ((which > 0) && (!chgbases_initialized [which - 1]))
3033 {
3034 chgbases [which - 1]. identity
3035 (numgen [which - 1]);
3036 chgbases_initialized [which - 1] = 1;
3037 }
3038 }
3039
3040 // verify that the adjacent matrices have sufficient size
3041 if (which > 0)
3042 {
3043 int_t n = boundary [which]. getnrows ();
3044 mmatrix<euclidom> &other = boundary [which - 1];
3045 if (other. getncols () < n)
3046 other. define (other. getnrows (), n);
3047 }
3048 if (which < len - 1)
3049 {
3050 int_t n = boundary [which]. getncols ();
3051 mmatrix<euclidom> &other = boundary [which + 1];
3052 if (other. getnrows () < n)
3053 other. define (n, other. getncols ());
3054 }
3055
3056 // compute simple form of the desired boundary matrix
3057 if (!quiet && which)
3058 sout << "Reducing D_" << which << ": ";
3059 boundary [which]. simple_form (quiet);
3060 if (!quiet && which)
3061 sout << '\n';
3062
3063 return;
3064} /* chaincomplex<euclidom>::simple_form */
outputstream sout
A replacement for standard output stream, with optional logging and other features provided by the cl...

References chomp::homology::sout.

◆ simple_homology() [1/2]

template<class euclidom >
int chomp::homology::chaincomplex< euclidom >::simple_homology ( chain< euclidom > &  result,
int  which 
) const
inline

Computes the given level of homology of the chain complex, provided it has been transformed into the simple form previously.

Encodes this homology group as a chain which is a combination generator numbers together with their torsion coefficients (or with 1's if none).

Definition at line 3079 of file chains.h.

3081{
3082 int_t g = boundary [which]. findcol (-1, 0);
3083 while (g >= 0)
3084 {
3085 euclidom e;
3086 if (which == dim ())
3087 e = 0;
3088 else
3089 e = boundary [which + 1]. get (g, -1);
3090 if (e == 0)
3091 {
3092 e = 1;
3093 result. add (g, e);
3094 }
3095 else if (e. delta () > 1)
3096 result. add (g, e. normalized ());
3097 g = boundary [which]. findcol (-1, g + 1);
3098 }
3099
3100 return which;
3101} /* chaincomplex<euclidom>::simple_homology */

◆ simple_homology() [2/2]

template<class euclidom >
int chomp::homology::chaincomplex< euclidom >::simple_homology ( chain< euclidom > *&  result,
const int *  level = NULL 
) const
inline

Computes the homology of the chain complex, provided it has been transformed into the simple form previously.

Encodes the homology as a table of chains (one chain for each dimension) which are combinations of generator numbers together with their torsion coefficients (or with 1's if none). Returns the dimension of the chain complex. If a table of levels is given, computes only these levels of homology for which the table's entry is nonzero.

Definition at line 3104 of file chains.h.

3106{
3107 // if the chain complex is empty, then just set the result to NULL
3108 if (!len)
3109 {
3110 result = NULL;
3111 return dim ();
3112 }
3113
3114 result = new chain<euclidom> [len];
3115 if (!result)
3116 throw "Not enough memory to create homology chains.";
3117
3118 for (int q = 0; q < len; ++ q)
3119 {
3120 if (!level || level [q])
3121 simple_homology (result [q], q);
3122 }
3123
3124 return dim ();
3125} /* chaincomplex<euclidom>::simple_homology */

◆ take_homology()

template<class euclidom >
void chomp::homology::chaincomplex< euclidom >::take_homology ( const chain< euclidom > *  hom_chain)
inline

Creates a chain complex containing exactly one generator for each homology generator.

This function is used for extracting the map induced in homology by a chain map.

Definition at line 3128 of file chains.h.

3130{
3131 if (!hom_chain)
3132 return;
3133 for (int q = 0; q < len; ++ q)
3134 def_gen (q, hom_chain [q]. size ());
3135 return;
3136} /* chaincomplex<euclidom>::take_homology */
void def_gen(int q, int_t n)
Defines the number of generators in the given dimension.
Definition: chains.h:2901

Friends And Related Function Documentation

◆ chainmap< euclidom >

template<class euclidom >
friend class chainmap< euclidom >
friend

The class "chainmap" is a friend class which has access to the internal data of the chain complex class.

Definition at line 2770 of file chains.h.

Member Data Documentation

◆ boundary

template<class euclidom >
mmatrix<euclidom>* chomp::homology::chaincomplex< euclidom >::boundary
private

The matrices of the boundary homomorphism.

"D_q" is stored in "boundary [q]".

Definition at line 2794 of file chains.h.

◆ chgbases

template<class euclidom >
mmatrix<euclidom>* chomp::homology::chaincomplex< euclidom >::chgbases
private

Matrices which store the change of basis to obtain the SNF.

Definition at line 2801 of file chains.h.

◆ chgbases_initialized

template<class euclidom >
int* chomp::homology::chaincomplex< euclidom >::chgbases_initialized
private

Have the base change tracing matrices been initialized to the identity (of suitable size each)?

Definition at line 2809 of file chains.h.

◆ generators

template<class euclidom >
mmatrix<euclidom>* chomp::homology::chaincomplex< euclidom >::generators
private

Matrices which store actual combinations of generators.

Used for the extraction of generators of homology.

Definition at line 2798 of file chains.h.

◆ generators_initialized

template<class euclidom >
int* chomp::homology::chaincomplex< euclidom >::generators_initialized
private

Have the generator tracing matrices been initialized to the identity (of suitable size each)?

Definition at line 2805 of file chains.h.

◆ len

template<class euclidom >
int chomp::homology::chaincomplex< euclidom >::len
private

The length of the chain complex (i.e., its dimension + 1).

Definition at line 2790 of file chains.h.

◆ numgen

template<class euclidom >
int_t* chomp::homology::chaincomplex< euclidom >::numgen
private

The numbers of generators in each dimension, or -1's if not defined yet.

Definition at line 2813 of file chains.h.


The documentation for this class was generated from the following file: