5.4. 演算#

5.4.1. 単項演算#

pysimple.__pos__(obj: ObjExp) Parameter | Expression#

単項演算 +obj を返します.

パラメータ:

obj (ObjExp)

戻り値:

obj が ObjPrm の場合は Parameter を,それ以外の場合は Expression を返します.

戻り値の型:

Parameter or Expression

pysimple.__neg__(obj: ObjExp) Parameter | Expression#

単項演算 -obj を返します.

パラメータ:

obj (ObjExp)

戻り値:

obj が ObjPrm の場合は Parameter を,それ以外の場合は Expression を返します.

戻り値の型:

Parameter or Expression

5.4.2. 算術演算#

Set.__sub__(rset: Iterable[DType | Key]) Set#

Set に含まれて rset に含まれない集合を返します.

パラメータ:

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I - J
Set(name='(I-J)', value=[1, 3])
>>> I - {2,4,6,8}
Set(name='(I-{8, 2, 4, 6})', value=[1, 3])
>>> I - [2,4,6,8]
Set(name='(I-[2, 4, 6, 8])', value=[1, 3])
Set.__mul__(rset: Iterable[DType | Key]) Set#

Set と rset の直積集合を返します.

パラメータ:

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2], name='I')
>>> I * I
Set(name='(I*I)', dim=2, value=[(1, 1), (1, 2), (2, 1), (2, 2)])
>>> I * {3,4}
Set(name='(I*{3, 4})', dim=2, value=[(1, 3), (1, 4), (2, 3), (2, 4)])
>>> I * [3,4]
Set(name='(I*[3, 4])', dim=2, value=[(1, 3), (1, 4), (2, 3), (2, 4)])
>>> I * I * I
Set(name='((I*I)*I)', dim=3, value=[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)])
Set.__rsub__(lset: Iterable) Set#

lset に含まれて Set に含まれない集合を返します.

パラメータ:

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} - I
Set(name='({8, 2, 4, 6}-I)', value=[8, 6])
>>> [2,4,6,8] - I
Set(name='([2, 4, 6, 8]-I)', value=[6, 8])
Set.__rmul__(lset: Iterable[DType | Key]) Set#

lset と Set の直積集合を返します.

パラメータ:

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2], name='I')
>>> {3,4} * I
Set(name='({3, 4}*I)', dim=2, value=[(3, 1), (3, 2), (4, 1), (4, 2)])
>>> [3,4] * I
Set(name='([3, 4]*I)', dim=2, value=[(3, 1), (3, 2), (4, 1), (4, 2)])
pysimple.__add__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression#

二項演算 obj1+obj2 を返します.

パラメータ:
戻り値:

obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します.

戻り値の型:

Parameter or Expression

pysimple.__sub__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression#

二項演算 obj1-obj2 を返します.

パラメータ:
戻り値:

obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します.

戻り値の型:

Parameter or Expression

pysimple.__mul__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression#

二項演算 obj1*obj2 を返します.

パラメータ:
戻り値:

obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します. 演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型:

Parameter or Expression

例外:

TypeError -- high dimension operand type(s) for *: {} and {}

pysimple.__mod__(obj1: ObjPrm, obj2: ObjPrm) Parameter#

二項演算 obj1%obj2 を返します.

パラメータ:
戻り値:

演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型:

Parameter

例外:

TypeError -- high dimension operand type(s) for %: {} and {}

pysimple.__truediv__(obj1: ObjExp, obj2: ObjPrm) Parameter | Expression#

二項演算 obj1/obj2 を返します.

パラメータ:
戻り値:

obj1 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します. 演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型:

Parameter or Expression

例外:

TypeError -- high dimension operand type(s) for /: {} and {}

pysimple.__floordiv__(obj1: ObjPrm, obj2: ObjPrm) Parameter#

二項演算 obj1//obj2 を返します.

パラメータ:
戻り値:

演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型:

Parameter

例外:

TypeError -- high dimension operand type(s) for //: {} and {}

pysimple.__pow__(obj1: ObjPrm, obj2: ObjPrm) Parameter#

二項演算 obj1**obj2 を返します.

パラメータ:
戻り値:

演算結果が線形または二次でない場合,TypeError が投げられます.

戻り値の型:

Parameter

例外:

TypeError -- high dimension operand type(s) for **: {} and {}

pysimple.__radd__(obj1: ObjExp, obj2: DType) Parameter | Expression#
pysimple.__rsub__(obj1: ObjExp, obj2: DType) Parameter | Expression#
pysimple.__rmul__(obj1: ObjExp, obj2: DType) Parameter | Expression#
pysimple.__rmod__(obj1: ObjPrm, obj2: DType) Parameter#
pysimple.__rdiv__(obj1: ObjPrm, obj2: DType) Parameter#
pysimple.__rtruediv__(obj1: ObjPrm, obj2: DType) Parameter#
pysimple.__rfloordiv__(obj1: ObjPrm, obj2: DType) Parameter#
pysimple.__rpow__(obj1: ObjPrm, obj2: DType) Parameter#

同様に定義されています.

5.4.3. 比較演算#

pysimple.__lt__(obj1: Iterable | ObjPrm, obj2: Iterable | ObjPrm) bool | Cond#

比較演算 obj1<obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, それ以外で ObjPrm と Iterable の比較は以下のような条件文を返します.

ObjPrm<Iterable の場合,set(ObjPrm) & set(Iterable), Iterable<ObjPrm の場合,set(ObjPrm) - set(Iterable) からなる条件文を返します.

パラメータ:
戻り値:

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, それ以外の場合は Cond を返します. ただし,両辺とも添字を含まない場合は bool を返します.

戻り値の型:

bool or Cond

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3,4,5], name='II')
>>> I < I
False
>>> I < II
True
>>> I < {1,2,3,4}
False
>>> i = Element(set=I, name='i')
>>> i < 3
(i<3)[i] in [1, 2]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i < a[i]
(i<a[i])[i] in [1]
>>> J = Set(value=[2,4,6,8], name='J')
>>> i < J  # i.set & J
(i<J)[i] in [2, 4]
>>> J < i  # i.set - J
(J<i)[i] in [1, 3]
>>> i < {2,4,6,8}
(i<{8, 2, 4, 6})[i] in [2, 4]
>>> i < [2,4,6,8]
(i<[2, 4, 6, 8])[i] in [2, 4]
pysimple.__gt__(obj1: Iterable | ObjPrm, obj2: Iterable | ObjPrm) bool | Cond#

比較演算 obj1>obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, それ以外で ObjPrm と Iterable の比較は以下のような条件文を返します.

ObjPrm>Iterable の場合,set(ObjPrm) - set(Iterable), Iterable>ObjPrm の場合,set(ObjPrm) & set(Iterable) からなる条件文を返します.

パラメータ:
戻り値:

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, それ以外の場合は Cond を返します. ただし,両辺とも添字を含まない場合は bool を返します.

戻り値の型:

bool or Cond

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I > I
False
>>> I > II
True
>>> I > {1,2,3,4}
False
>>> i = Element(set=I, name='i')
>>> i > 3
(i>3)[i] in [4]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i > a[i]
(i>a[i])[i] in [3, 4]
>>> J = Set(value=[2,4,6,8], name='J')
>>> J > i  # i.set & J
(J>i)[i] in [2, 4]
>>> i > J  # i.set - J
(i>J)[i] in [1, 3]
>>> i > {2,4,6,8}
(i>{8, 2, 4, 6})[i] in [1, 3]
>>> i > [2,4,6,8]
(i>[2, 4, 6, 8])[i] in [1, 3]
pysimple.__le__(obj1: Iterable | ObjExp, obj2: Iterable | ObjExp) bool | Cond | Constraint#

比較演算 obj1<=obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, obj1, obj2 に Variable, Expression を含む場合は制約式を返します.

パラメータ:
戻り値:

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を, obj1, obj2 に Variable, Expression を含む場合は Expression を返します. ただし,obj1, obj2 が共に ObjPrm でいずれも添字含まない場合は bool を返します.

戻り値の型:

bool or Cond or Constraint

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I <= I
True
>>> I <= II
False
>>> I <= {1,2,3,4}
True
>>> i = Element(set=I, name='i')
>>> i <= 3
(i<=3)[i] in [1, 2, 3]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i <= a[i]
(i<=a[i])[i] in [1, 2]
>>> x = Variable(index=i, name='x')
>>> a[i] <= x[i]
(a[i]<=x[i]):
x[1]>=3
x[2]>=2
x[3]>=1
x[4]>=0
pysimple.__ge__(obj1: Iterable | ObjExp, obj2: Iterable | ObjExp) bool | Cond | Constraint#

比較演算 obj1>=obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を, obj1, obj2 に Variable, Expression を含む場合は制約式を返します.

パラメータ:
戻り値:

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を, obj1, obj2 に Variable, Expression を含む場合は Expression を返します. ただし,obj1, obj2 が共に ObjPrm でいずれも添字含まない場合は bool を返します.

戻り値の型:

bool or Cond or Constraint

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3,4,5], name='II')
>>> I >= I
True
>>> I >= II
False
>>> I >= {1,2,3,4}
True
>>> i = Element(set=I, name='i')
>>> i >= 3
(i>=3)[i] in [3, 4]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i >= a[i]
(i>=a[i])[i] in [2, 3, 4]
>>> x = Variable(index=i, name='x')
>>> a[i] >= x[i]
(a[i]>=x[i]):
-x[1]>=-3
-x[2]>=-2
-x[3]>=-1
-x[4]>=0
pysimple.__eq__(obj1: Iterable | ObjExp, obj2: Iterable | ObjExp) bool | Cond | Constraint#

比較演算 obj1==obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は等式を満たす要素からなる条件文を, obj1, obj2 に Variable, Expression を含む場合は制約式を返します.

パラメータ:
戻り値:

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を, obj1, obj2 に Variable, Expression を含む場合は Expression を返します. ただし,obj1, obj2 が共に ObjPrm でいずれも添字含まない場合は bool を返します.

戻り値の型:

bool or Cond or Constraint

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I == I
True
>>> I == II
False
>>> I == {1,2,3,4}
True
>>> i = Element(set=I, name='i')
>>> i == 3
(i==3)[i] in [3]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i == a[i]
(i==a[i])[i] in [2]
>>> x = Variable(index=i, name='x')
>>> a[i] == x[i]
(a[i]==x[i]):
-x[1]==-3
-x[2]==-2
-x[3]==-1
-x[4]==0
pysimple.__ne__(obj1: collections.abc.Set | ObjPrm, obj2: collections.abc.Set | ObjPrm) bool | Cond#

比較演算 obj1!=obj2 を返します. obj1, obj2 が共に collections.abc.Set の派生クラスの場合は集合の包含関係を, obj1, obj2 が共に ObjPrm の場合は不等式を満たす要素からなる条件文を返します.

パラメータ:
戻り値:

obj1, obj2 が共に collections.abc.Set の派生クラスの場合は bool, obj1, obj2 が共に ObjPrm の場合は Cond を返します. ただし,両辺とも添字を含まない場合は bool を返します.

戻り値の型:

bool or Cond

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> II = Set(value=[1,2,3], name='II')
>>> I != I
False
>>> I != II
True
>>> I != {1,2,3,4}
False
>>> i = Element(set=I, name='i')
>>> i != 3
(i!=3)[i] in [1, 2, 4]
>>> a = Parameter(index=i, name='a')
>>> a[i] = 4 - i
>>> a
a[1]=3
a[2]=2
a[3]=1
a[4]=0
>>> i != a[i]
(i!=a[i])[i] in [1, 3, 4]

5.4.4. ビット演算#

Set.__or__(rset: Iterable[DType | Key]) Set#

Set と rset のいずれかに含まれる集合を返します.

パラメータ:

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I | J
Set(name='(I|J)', value=[1, 2, 3, 4, 6, 8])
>>> I | {2,4,6,8}
Set(name='(I|{8, 2, 4, 6})', value=[1, 2, 3, 4, 8, 6])
>>> I | [2,4,6,8]
Set(name='(I|[2, 4, 6, 8])', value=[1, 2, 3, 4, 6, 8])
Set.__and__(rset: Iterable[DType | Key]) Set#

Set と rset の両方に含まれる集合を返します.

パラメータ:

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I & J
Set(name='(I&J)', value=[2, 4])
>>> I & {2,4,6,8}
Set(name='(I&{8, 2, 4, 6})', value=[2, 4])
>>> I & [2,4,6,8]
Set(name='(I&[2, 4, 6, 8])', value=[2, 4])
Set.__xor__(rset: Iterable[DType | Key]) Set#

Set と rset のいずれか一方にだけ含まれる集合を返します.

パラメータ:

rset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> J = Set(value=[2,4,6,8], name='J')
>>> I ^ J
Set(name='(I^J)', value=[1, 3, 6, 8])
>>> I ^ {2,4,6,8}
Set(name='(I^{8, 2, 4, 6})', value=[1, 3, 8, 6])
>>> I ^ [2,4,6,8]
Set(name='(I^[2, 4, 6, 8])', value=[1, 3, 6, 8])
Set.__ror__(lset: Iterable[DType | Key]) Set#

lset と Set のいずれかに含まれる集合を返します.

パラメータ:

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} | I
Set(name='({8, 2, 4, 6}|I)', value=[1, 2, 3, 4, 8, 6])
>>> [2,4,6,8] | I
Set(name='([2, 4, 6, 8]|I)', value=[1, 2, 3, 4, 6, 8])
Set.__rand__(lset: Iterable[DType | Key]) Set#

lset と Set の両方に含まれる集合を返します.

パラメータ:

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} & I
Set(name='({8, 2, 4, 6}&I)', value=[2, 4])
>>> [2,4,6,8] & I
Set(name='([2, 4, 6, 8]&I)', value=[2, 4])
Set.__rxor__(lset: Iterable[DType | Key]) Set#

lset と Set のいずれか一方にだけ含まれる集合を返します.

パラメータ:

lset (Iterable[DType | Key]) -- Set や set でなくても構いません.

戻り値の型:

Set

サンプル

>>> I = Set(value=[1,2,3,4], name='I')
>>> {2,4,6,8} ^ I
Set(name='({8, 2, 4, 6}^I)', value=[1, 3, 8, 6])
>>> [2,4,6,8] ^ I
Set(name='([2, 4, 6, 8]^I)', value=[1, 3, 6, 8])
Cond.__or__(rcond: Cond) Cond#

Cond と rcond のいずれかの条件を満たす条件式を返します.

パラメータ:

rcond (Cond)

戻り値の型:

Cond

サンプル

>>> i = Element(value=[1,2,3], name='i')
>>> (i<2) | (2<i)
((i<2)|(i>2))[i] in [1, 3]

注釈

Cond.__and__(rcond: Cond) Cond#

Cond と rcond の両方の条件を満たす条件式を返します.

パラメータ:

rcond (Cond)

戻り値の型:

Cond

サンプル

>>> i = Element(value=[1,2,3], name='i')
>>> (1<i) & (i<3)
((i>1)&(i<3))[i] in [2]

注釈

  • 演算子の優先順位 」 により,各条件には括弧をつける必要があります.

  • 3 つ以上の条件文の場合,Condition 関数を使用した方が効率的で見やすいです. Condition(i, (1<i, i<5, i!=3))