# is an object of a subcategory an object of the ambient category?

I have defined a category `Cs()`

and its subcategory `Ds()`

as follows:

```
class Cs(Category_over_base_ring):
...
def __init__(self, K):
Category_over_base_ring.__init__(self, K)
def super_categories(self):
return [ GradedAlgebras(self.base_field()) ]
class Ds(CategoryWithAxiom):
_base_category_class_and_axiom = (Cs, 'Commutative')
Cs.Commutative = Ds
```

The omitted code I think its irrelevant. I can check that `Ds()`

is a subcategory of `Cs()`

:

```
sage: C = Cs(QQ)
sage: D = Ds(QQ)
sage: D.is_subcategory(C)
True
sage:
```

Now I create a parent of `Ds()`

as follows:

```
class DParent (Parent,UniqueRepresentation):
def __init__(self,K, *args, **kwds ):
if not (K in Fields() or \
(isinstance(K, Category) and K.is_subcategory(Fields()))):
raise ValueError(
"base must be a field or a subcategory of Fields(); got {}".format(K))
self._base_algebra = PolynomialRing(K,*args,**kwds)
super(DParent,self).__init__(self,
category=Ds(K))
...
```

And I can check that these parents are objects of `Ds()`

but not of `Cs()`

:

```
sage: J = DParent(QQ, 1, 'x', order=TermOrder('wdeglex', (2,)))
sage: J in C
False
sage: J in D
True
```

Where can I be making a mistake?

**Addition:** I am looking at the implementation in sage/categories/category.py and I am more puzzled:

```
sage: J.category().is_subcategory(C)
True
sage: C.__contains__(J)
False
```

But at least I get

```
sage: c = J.categories()
sage: any(isinstance(cat,C.subcategory_class) for cat in c)
True
sage: C.__classcontains__(C.subcategory_class,J)
True
sage:
```