5.4. 演算¶
5.4.1. 単項演算¶
- pysimple.__pos__(obj: ObjExp) Parameter | Expression ¶
単項演算
+obj
を返します.
- pysimple.__neg__(obj: ObjExp) Parameter | Expression ¶
単項演算
-obj
を返します.
5.4.2. 算術演算¶
- Set.__sub__(rset: Iterable[DType | Key]) Set ¶
Set に含まれて rset に含まれない集合を返します.
サンプル
>>> 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 の直積集合を返します.
サンプル
>>> 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 に含まれない集合を返します.
サンプル
>>> 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 の直積集合を返します.
サンプル
>>> 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 を返します.
- 戻り値の型
- pysimple.__sub__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression ¶
二項演算
obj1-obj2
を返します.- パラメータ
- 戻り値
obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します.
- 戻り値の型
- pysimple.__mul__(obj1: ObjExp, obj2: ObjExp) Parameter | Expression ¶
二項演算
obj1*obj2
を返します.- パラメータ
- 戻り値
obj1 または obj2 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します. 演算結果が線形または二次でない場合,TypeError が投げられます.
- 戻り値の型
- 例外
TypeError -- high dimension operand type(s) for *: {} and {}
- pysimple.__truediv__(obj1: ObjExp, obj2: ObjPrm) Parameter | Expression ¶
二項演算
obj1/obj2
を返します.- パラメータ
- 戻り値
obj1 が Variable, Expression の場合は Expression を, それ以外の場合は Parameter を返します. 演算結果が線形または二次でない場合,TypeError が投げられます.
- 戻り値の型
- 例外
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 ¶
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 を返します.
- 戻り値の型
サンプル
>>> 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 を返します.
- 戻り値の型
サンプル
>>> 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 を返します.
- 戻り値の型
サンプル
>>> 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 のいずれかに含まれる集合を返します.
サンプル
>>> 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 の両方に含まれる集合を返します.
サンプル
>>> 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 のいずれか一方にだけ含まれる集合を返します.
サンプル
>>> 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 のいずれかに含まれる集合を返します.
サンプル
>>> 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 の両方に含まれる集合を返します.
サンプル
>>> 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 のいずれか一方にだけ含まれる集合を返します.
サンプル
>>> 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 のいずれかの条件を満たす条件式を返します.
サンプル
>>> i = Element(value=[1,2,3], name='i') >>> (i<2) | (2<i) ((i<2)|(i>2))[i] in [1, 3]
注釈
「演算子の優先順位 」 により,各条件には括弧をつける必要があります.