There are many ways to achieve what you want. For instance, let us consider a differential form $F$ of degree 1 on a 2-dimensional manifold:

```
sage: M = Manifold(2, 'M')
sage: X.<x,y> = M.chart()
sage: X.coframe()
Coordinate coframe (M, (dx,dy))
sage: dx, dy = X.coframe()[:]
sage: F = x*sin(y^2)*dx + (x-y)*dy
sage: F
1-form on the 2-dimensional differentiable manifold M
sage: F.display()
x*sin(y^2) dx + (x - y) dy
```

To get the coefficient of $dx$, we can use one of the following methods:

**1) use F[0]**

The easiest way is the square bracket operator, which gives access to components of a tensor field:

```
sage: F[0]
x*sin(y^2)
```

Note that `F[0]`

is not a Sage symbolic expression but a higher level object: a ChartFunction:

```
sage: type(F[0])
<class 'sage.manifolds.chart_func.ChartFunctionRing_with_category.element_class'>
```

If you want a Sage symbolic expression, apply `expr()`

on it:

```
sage: F[0].expr()
x*sin(y^2)
sage: type(F[0].expr())
<type 'sage.symbolic.expression.Expression'>
```

Actually, chart functions allow for various internal symbolic representations. The default one is `Expression`

, but SymPy representations are also possible:

```
sage: F[0].expr('sympy')
x*sin(y**2)
sage: type(F[0].expr('sympy'))
<class 'sympy.core.mul.Mul'>
```

**2) use F[[0]]**

The double square bracket operator returns a scalar field:

```
sage: F[[0]]
Scalar field on the 2-dimensional differentiable manifold M
sage: F[[0]].display()
M --> R
(x, y) |--> x*sin(y^2)
```

Again, if you want a Sage symbolic expression, apply `expr()`

:

```
sage: F[[0]].expr()
x*sin(y^2)
```

The chart function `F[0]`

is actually the coordinate representation of the scalar field `F[[0]]`

in the chart `X`

:

```
sage: F[0] is F[[0]].coord_function(X)
True
```

**3) Apply $F$ to $\frac{\partial}{\partial x}$**

Being a form, $F$ sends vector fields to scalar fields. Applying it to the vector field $\partial/\partial x$, which is dual to the 1-form $dx$, we get the component of $F$ along $dx$:

```
sage: e_x = X.frame()[0] # d/dx
sage: e_x
Vector field d/dx on the 2-dimensional differentiable manifold M
sage: F(e_x)
Scalar field on the 2-dimensional differentiable manifold M
sage: F(e_x).expr()
x*sin(y^2)
```

**4) Apply $\frac{\partial}{\partial x}$ to $F$**

By duality, we have

```
sage: e_x(F)
Scalar field on the 2-dimensional differentiable manifold M
sage: e_x(F).expr()
x*sin(y^2)
```

**5) Take the interior product with $\frac{\partial}{\partial x}$**

```
sage: F.interior_product(e_x)
Scalar field on the 2-dimensional differentiable manifold M
sage: F.interior_product(e_x).expr()
x*sin(y^2)
```

Equivalently, we may write

```
sage: e_x.interior_product(F).expr()
x*sin(y^2)
```

**6) Contract with $\frac{\partial}{\partial x}$**

As suggested by @FrédéricC:

```
sage: F.contract(e_x)
Scalar field on the 2-dimensional differentiable manifold M
sage: F.contract(e_x).expr()
x*sin(y^2)
```

Equivalently:

```
sage: e_x.contract(F).expr()
x*sin(y^2)
```

Note that, instead of `contract()`

, you can use index notations (with LaTeX syntax) to perform the contraction (assuming summation on repeated indices):

```
sage: F['_a']*e_x['^a']
Scalar field on the 2-dimensional differentiable manifold M
sage: (F['_a']*e_x['^a']).expr()
x*sin(y^2)
```

Contract with a vector field ?

How do I do that? Didn't see it in the basic vector fields manual. EDIT: Nevermind, I found it in the multivector fields manual, and in the differential forms manual.