To get the value of a scalar field at a point, simply use the call method, i.e. the parenthesis operator. In your case:

```
gP3.ricci_scalar()(p)
```

Actually, `at()`

is reserved to tensor fields of valence $>0$, since for them the call method has a different meaning. For instance, if `g`

is the metric tensor and `u`

and `v`

are two vector fields, the call method of `g`

is used to denote the bilinear form action of `g`

on the pair `(u,v)`

as `g(u,v)`

. The following identity, which involves the various call methods and `at()`

, holds:

```
g.at(p)(u.at(p), v.at(p)) == g(u, v)(p)
```

Here is a full example:

```
sage: E.<x,y> = EuclideanSpace()
sage: g = E.metric()
sage: g.display()
g = dx*dx + dy*dy
sage: u = E.vector_field(-y, x)
sage: v = E.vector_field(x+y, x-y)
sage: p = E((2, 3)); p
Point on the Euclidean plane E^2
sage: bool( g.at(p)(u.at(p), v.at(p)) == g(u, v)(p) )
True
```