My Project
Toggle main menu visibility
Loading...
Searching...
No Matches
Singular
dyn_modules
python
PowerSeries.h
Go to the documentation of this file.
1
#ifndef POWER_SERIES_HEADER
2
#define POWER_SERIES_HEADER
3
#include "
kernel/mod2.h
"
4
#include "
Poly.h
"
5
template
<
class
traits>
class
PowerSeriesInputIterator
:
6
public
std::
7
iterator<
8
std::input_iterator_tag,
9
typename traits::expansion_type,
10
int,
11
shared_ptr<const typename traits::expansion_type>,
12
const typename traits::expansion_type
13
>
14
{
15
private
:
16
typedef
typename
traits::denominator_type
denominator_type
;
17
typedef
typename
traits::numerator_type
numerator_type
;
18
typedef
typename
traits::expansion_type
expansion_type
;
19
denominator_type
denominator
;
20
numerator_type
numerator
;
21
denominator_type
toPot
;
22
int
state
;
23
expansion_type
data
;
24
denominator_type
lastPot
;
25
public
:
26
PowerSeriesInputIterator
(
numerator_type
num_arg,
27
denominator_type
den_arg):
28
data
(den_arg.getRing()),
29
lastPot
(den_arg.getRing()),
30
numerator
(num_arg),
31
denominator
(den_arg)
32
{
33
ring r=
denominator
.getRing();
34
//not the lead coef Number c=denominator.leadCoef();
35
Number
c(1,r);
36
typename
traits::denominator_type::iterator it=
denominator
.begin();
37
typename
traits::denominator_type::iterator end=
denominator
.end();
38
while
(it!=end)
39
{
40
if
((*it).isConstant())
41
{
42
//change this type
43
c=
denominator_type
(*it).leadCoef();
44
break
;
45
}
46
++it;
47
}
48
c=
Number
(1,r)/c;
49
numerator
*=c;
50
denominator
*=c;
51
toPot
=
denominator
+
denominator_type
(-1,r);
52
toPot
*=
Number
(-1,r);
53
//change this type
54
lastPot
=
denominator_type
(1,r);
55
data
=
numerator
;
56
state
=0;
57
}
58
PowerSeriesInputIterator
()
59
{
60
state
=-1;
61
}
62
void
shorten
()
63
{
64
typename
expansion_type::iterator it=
data
.begin();
65
typename
expansion_type::iterator end=
data
.end();
66
ring r=
data
.getRing();
67
expansion_type
remove(r);
68
while
(it!=end)
69
{
70
if
(it->lmTotalDegree()<
state
)
71
{
72
remove+=
expansion_type
(*it);
73
}
74
it++;
75
}
76
remove*=
Number
(-1,r);
77
data
+=remove;
78
}
79
expansion_type
getValue
()
80
{
81
typename
expansion_type::iterator it=
data
.begin();
82
typename
expansion_type::iterator end=
data
.end();
83
ring r=
data
.getRing();
84
expansion_type
res
(r);
85
while
(it!=end)
86
{
87
if
(it->lmTotalDegree()==
state
)
88
{
89
res
+=
expansion_type
(*it);
90
}
91
it++;
92
}
93
return
res
;
94
}
95
PowerSeriesInputIterator
&
operator++
()
96
{
97
state
++;
98
shorten
();
99
lastPot
*=
toPot
;
100
data
+=
lastPot
*
numerator
;
101
return
*
this
;
102
}
103
//bad if this are iterators for different PowerSeries
104
bool
operator==
(
const
PowerSeriesInputIterator
& t2)
105
{
106
return
state
==t2.
state
;
107
}
108
bool
operator!=
(
const
PowerSeriesInputIterator
& t2)
109
{
110
return
state
!=t2.
state
;
111
}
112
PowerSeriesInputIterator
operator++
(
int
)
113
{
114
PowerSeriesInputIterator
it(*
this
);
115
++(*this);
116
return
it;
117
}
118
const
expansion_type
operator*
()
119
{
120
return
expansion_type
(
getValue
());
121
}
122
shared_ptr<const expansion_type>
operator->
()
123
{
124
return
shared_ptr<const expansion_type>(
new
expansion_type
(
getValue
()));
125
}
126
};
127
128
129
template
<
class
traits>
class
PowerSeriesBase
130
{
131
public
:
132
typedef
typename
traits::denominator_type
denominator_type
;
133
typedef
typename
traits::numerator_type
numerator_type
;
134
protected
:
135
denominator_type
denominator
;
136
numerator_type
numerator
;
137
public
:
138
PowerSeriesBase
(){}
139
PowerSeriesBase
(
const
numerator_type
&a,
const
denominator_type
&
b
):
numerator
(a),
denominator
(
b
)
140
{
141
assume
(a.
getRing
()==
b
.getRing());
142
//asume b!=NULL
143
}
144
typedef
PowerSeriesInputIterator<traits>
iterator
;
145
iterator
begin
()
146
{
147
return
iterator
(
numerator
,
denominator
);
148
}
149
iterator
end
()
150
{
151
return
iterator
();
152
}
153
};
154
class
PowerSeriesPolyTraits
;
155
class
PowerSeriesVectorTraits
;
156
typedef
PowerSeriesBase<PowerSeriesPolyTraits>
PowerSeries
;
157
typedef
PowerSeriesBase<PowerSeriesVectorTraits>
VectorPowerSeries
;
158
class
PowerSeriesPolyTraits
159
{
160
public
:
161
typedef
Poly
numerator_type
;
162
typedef
Poly
denominator_type
;
163
typedef
PowerSeries
create_type
;
164
typedef
Poly
expansion_type
;
165
};
166
class
PowerSeriesVectorTraits
167
{
168
public
:
169
typedef
Vector
numerator_type
;
170
typedef
Poly
denominator_type
;
171
typedef
VectorPowerSeries
create_type
;
172
typedef
Vector
expansion_type
;
173
};
174
175
#endif
Poly.h
PowerSeries
PowerSeriesBase< PowerSeriesPolyTraits > PowerSeries
Definition
PowerSeries.h:156
VectorPowerSeries
PowerSeriesBase< PowerSeriesVectorTraits > VectorPowerSeries
Definition
PowerSeries.h:157
PowerSeriesPolyTraits::expansion_type
Poly expansion_type
Definition
PowerSeries.h:164
PowerSeriesPolyTraits::denominator_type
Poly denominator_type
Definition
PowerSeries.h:162
PowerSeriesVectorTraits::create_type
VectorPowerSeries create_type
Definition
PowerSeries.h:171
PowerSeriesVectorTraits::numerator_type
Vector numerator_type
Definition
PowerSeries.h:169
PowerSeriesVectorTraits::expansion_type
Vector expansion_type
Definition
PowerSeries.h:172
PowerSeriesVectorTraits::denominator_type
Poly denominator_type
Definition
PowerSeries.h:170
PowerSeriesPolyTraits::create_type
PowerSeries create_type
Definition
PowerSeries.h:163
PowerSeriesPolyTraits::numerator_type
Poly numerator_type
Definition
PowerSeries.h:161
PowerSeriesPolyTraits
Definition
PowerSeries.h:159
PowerSeriesVectorTraits
Definition
PowerSeries.h:167
b
CanonicalForm b
Definition
cfModGcd.cc:4111
Number
Definition
Number.h:34
PolyBase::getRing
ring getRing() const
Definition
Poly.h:427
PowerSeriesBase
Definition
PowerSeries.h:130
PowerSeriesBase< PowerSeriesPolyTraits >::denominator
denominator_type denominator
Definition
PowerSeries.h:135
PowerSeriesBase::numerator_type
traits::numerator_type numerator_type
Definition
PowerSeries.h:133
PowerSeriesBase::denominator_type
traits::denominator_type denominator_type
Definition
PowerSeries.h:132
PowerSeriesBase::PowerSeriesBase
PowerSeriesBase()
Definition
PowerSeries.h:138
PowerSeriesBase< PowerSeriesPolyTraits >::numerator
numerator_type numerator
Definition
PowerSeries.h:136
PowerSeriesBase::begin
iterator begin()
Definition
PowerSeries.h:145
PowerSeriesBase::iterator
PowerSeriesInputIterator< traits > iterator
Definition
PowerSeries.h:144
PowerSeriesBase::PowerSeriesBase
PowerSeriesBase(const numerator_type &a, const denominator_type &b)
Definition
PowerSeries.h:139
PowerSeriesBase::end
iterator end()
Definition
PowerSeries.h:149
PowerSeriesInputIterator
Definition
PowerSeries.h:14
PowerSeriesInputIterator::operator==
bool operator==(const PowerSeriesInputIterator &t2)
Definition
PowerSeries.h:104
PowerSeriesInputIterator::PowerSeriesInputIterator
PowerSeriesInputIterator()
Definition
PowerSeries.h:58
PowerSeriesInputIterator::operator*
const expansion_type operator*()
Definition
PowerSeries.h:118
PowerSeriesInputIterator::getValue
expansion_type getValue()
Definition
PowerSeries.h:79
PowerSeriesInputIterator::denominator_type
traits::denominator_type denominator_type
Definition
PowerSeries.h:16
PowerSeriesInputIterator::PowerSeriesInputIterator
PowerSeriesInputIterator(numerator_type num_arg, denominator_type den_arg)
Definition
PowerSeries.h:26
PowerSeriesInputIterator::expansion_type
traits::expansion_type expansion_type
Definition
PowerSeries.h:18
PowerSeriesInputIterator::data
expansion_type data
Definition
PowerSeries.h:23
PowerSeriesInputIterator::operator!=
bool operator!=(const PowerSeriesInputIterator &t2)
Definition
PowerSeries.h:108
PowerSeriesInputIterator::numerator_type
traits::numerator_type numerator_type
Definition
PowerSeries.h:17
PowerSeriesInputIterator::operator++
PowerSeriesInputIterator & operator++()
Definition
PowerSeries.h:95
PowerSeriesInputIterator::lastPot
denominator_type lastPot
Definition
PowerSeries.h:24
PowerSeriesInputIterator::numerator
numerator_type numerator
Definition
PowerSeries.h:20
PowerSeriesInputIterator::operator++
PowerSeriesInputIterator operator++(int)
Definition
PowerSeries.h:112
PowerSeriesInputIterator::toPot
denominator_type toPot
Definition
PowerSeries.h:21
PowerSeriesInputIterator::state
int state
Definition
PowerSeries.h:22
PowerSeriesInputIterator::operator->
shared_ptr< const expansion_type > operator->()
Definition
PowerSeries.h:122
PowerSeriesInputIterator::shorten
void shorten()
Definition
PowerSeries.h:62
PowerSeriesInputIterator::denominator
denominator_type denominator
Definition
PowerSeries.h:19
Vector
Definition
Poly.h:509
res
CanonicalForm res
Definition
facAbsFact.cc:60
mod2.h
assume
#define assume(x)
Definition
mod2.h:389
Poly
Definition
janet.h:15
Generated on
for My Project by
doxygen 1.17.0
for
Singular