# Operators on Point and Extent¶

The Point and Extent classes support many mathematical operators, but the set of available operators (and their expected behavior) isn’t quite as obvious as one might think. The table below lists all supported operators, with notes below on special cases. For the rationale behind these operations, see RFC-41.

LHS

RHS

Operator

Result

Notes

`PointD`

`PointD`

`+`, `+=`

Not supported

[1]

`PointD`

`PointD`

`-`

`ExtentD`

`PointD`

`PointD`

`-=`

Not supported

[2]

`PointD`

`PointI`

`-`

`ExtentD`

`PointD`

`PointI`

`-=`

Not supported

[2]

`PointD`

`ExtentD`

+, +=, -, -=

`PointD`

`PointD`

`ExtentI`

`+`, `+=`, `-`, `-=`

`PointD`

`PointI`

`PointD`

`+`, `+=`

Not supported

[1]

`PointI`

`PointI`

`+`, `+=`

Not supported

[1]

`PointI`

`ExtentD`

`+`

`PointD`

`PointI`

`ExtentD`

`+=`

Not supported

[2]

`PointI`

`ExtentI`

`+`, `+=`

`PointI`

`PointI`

`PointD`

`-`

`ExtentD`

`PointI`

`PointD`

`-=`

Not supported

[2]

`PointI`

`PointI`

`-`

`ExtentI`

`PointI`

`PointI`

`-=`

Not supported

[2]

`PointI`

`ExtentD`

`-`

`PointD`

`PointI`

`ExtentD`

`-=`

Not supported

[2]

`PointI`

`ExtentI`

`-`, `-=`

`PointI`

`ExtentD`

`PointD`

`+`

`PointD`

`ExtentD`

`PointD`

`+=`

Not supported

[2]

`ExtentD`

`PointD`

`-`, `-=`

Not supported

[1]

`ExtentD`

`PointI`

`+`

`PointD`

`ExtentD`

`PointI`

`+=`

Not supported

[2]

`ExtentD`

`PointI`

`-`, `-=`

Not supported

[1]

`ExtentD`

`ExtentD`

`+`, `+=`, `-`, `-=`

`ExtentD`

`ExtentD`

`ExtentI`

`+`, `+=`, `-`, `-=`

`ExtentD`

`ExtentI`

`PointD`

`+`

`PointD`

`ExtentI`

`PointD`

+=

Not supported

[2]

`ExtentI`

`PointD`

`-`, `-=`

Not supported

[1]

`ExtentI`

`PointI`

`+`

`PointI`

`ExtentI`

`PointI`

`+=`

Not supported

[2]

`ExtentI`

`PointI`

`-`, `-=`

Not supported

[1]

`ExtentI`

`ExtentD`

`+`, `-`

`ExtentD`

`ExtentI`

`ExtentD`

`+=`, `-=`

Not supported

[2]

`ExtentI`

`ExtentI`

`+`, `-`, `+=`, `-=`

`ExtentI`

`ExtentD`

`double`

`*`, `*=`, `/`, `/=`

`ExtentD`

`ExtentD`

`double`

`//`, `//=`

Not supported

[4]

`ExtentD`

`int`

`*`, `*=`, `/`, `/=`

`ExtentD`

[3]

`ExtentD`

`int`

`//`, `//=`

Not supported

[4]

`ExtentI`

`double`

`*`

`ExtentD`

`ExtentI`

`double`

`*=`

Not supported

[2]

`ExtentI`

`double`

`/`

`ExtentD`

`ExtentI`

`double`

`/=`

Not supported

[2]

`ExtentI`

`double`

`//`, `//=`

Not supported

[4]

`ExtentI`

`int`

`*`, `*=`

`ExtentI`

`ExtentI`

`int`

`/`

`ExtentD`

`ExtentI`

`int`

`/=`

Not supported (Python), `ExtentI` (C++)

[2]

`ExtentI`

`int`

`//`, `//=`

`ExtentI`

[5]

`double`

`ExtentD`

`*`

`ExtentD`

`double`

`ExtentI`

`*`

`ExtentD`

`int`

`ExtentD`

`*`

`ExtentD`

[3]

`int`

`ExtentI`

`*`

`ExtentI`