Here's how R implements it:

```c
static double R_manhattan(double *x, int nr, int nc, int i1, int i2)
{
    double dev, dist;
    int count, j;

    count = 0;
    dist = 0;
    for(j = 0 ; j < nc ; j++) {
        if(both_non_NA(x[i1], x[i2])) {
            dev = fabs(x[i1] - x[i2]);
            if(!ISNAN(dev)) {
                dist += dev;
                count++;
            }
        }
        i1 += nr;
        i2 += nr;
    }
    if(count == 0) return NA_REAL;
    if(count != nc) dist /= ((double)count/nc);
    return dist;
}
```

(sum of differences)


Here's an implementation from the SciPy that you're mentioning:

```c
static NPY_INLINE double city_block_distance(const double *u, const double *v, int n) {
  int i = 0;
  double s = 0.0, d;
  for (i = 0; i < n; i++) {
    d = fabs(u[i] - v[i]);
    s = s + d;
  }
  return s;
}
```

(same here, sum of absolute differences).

I can keep bringing examples, but it won't change anything: this is how cityblock/taxicab/manhattan _distance_ is calculated. 

However, _norm_ is a different thing and calculated in a different way.