# shapely.contains_properly#

contains_properly(a, b, **kwargs)#

Returns True if geometry B is completely inside geometry A, with no common boundary points.

A contains B properly if B intersects the interior of A but not the boundary (or exterior). This means that a geometry A does not “contain properly” itself, which contrasts with the `contains` function, where common points on the boundary are allowed.

Note: this function will prepare the geometries under the hood if needed. You can prepare the geometries in advance to avoid repeated preparation when calling this function multiple times.

Parameters:
a, bGeometry or array_like
**kwargs

See NumPy ufunc docs for other keyword arguments.

`contains`

contains which allows common boundary points

`prepare`

improve performance by preparing `a` (the first argument)

Examples

```>>> from shapely import Polygon
>>> area1 = Polygon([(0, 0), (3, 0), (3, 3), (0, 3), (0, 0)])
>>> area2 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)])
>>> area3 = Polygon([(1, 1), (2, 1), (2, 2), (1, 2), (1, 1)])
```

`area1` and `area2` have a common border:

```>>> contains(area1, area2)
True
>>> contains_properly(area1, area2)
False
```

`area3` is completely inside `area1` with no common border:

```>>> contains(area1, area3)
True
>>> contains_properly(area1, area3)
True
```