Repository: martinfleis/momepy
Pull request #107 (2019-11-05 21:03:40)

API: unify results series attribute
Use `series` as universal attribute to access Series containing results for classes with only one resulting series. Current individual attributes do not make much sense in fact, having the same one is much easier for users.

Based on https://github.com/openjournals/joss-reviews/issues/1807#issuecomment-549947746 (`__repr__` is on to-do list). Thanks to @martibosch for the comment.

Will merge once JOSS review (https://github.com/openjournals/joss-reviews/issues/1807) will be closer to finish as I don't want to confuse reviewers with the sudden change of API. 

cc @geraintpalmer

codecov[bot]: # [Codecov](https://codecov.io/gh/martinfleis/momepy/pull/107?src=pr&el=h1) Report
> Merging [#107](https://codecov.io/gh/martinfleis/momepy/pull/107?src=pr&el=desc) into [master](https://codecov.io/gh/martinfleis/momepy/commit/9e894893bf731126aa8cbd009b459374a390b43b?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/martinfleis/momepy/pull/107/graphs/tree.svg?width=650&token=i04999UxkK&height=150&src=pr)](https://codecov.io/gh/martinfleis/momepy/pull/107?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master     #107   +/-   ##
=======================================
  Coverage   93.23%   93.23%           
=======================================
  Files           9        9           
  Lines        2439     2439           
=======================================
  Hits         2274     2274           
  Misses        165      165
```


| [Impacted Files](https://codecov.io/gh/martinfleis/momepy/pull/107?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [momepy/dimension.py](https://codecov.io/gh/martinfleis/momepy/pull/107/diff?src=pr&el=tree#diff-bW9tZXB5L2RpbWVuc2lvbi5weQ==) | `97.2% <100%> (ø)` | :arrow_up: |
| [momepy/distribution.py](https://codecov.io/gh/martinfleis/momepy/pull/107/diff?src=pr&el=tree#diff-bW9tZXB5L2Rpc3RyaWJ1dGlvbi5weQ==) | `98.4% <100%> (ø)` | :arrow_up: |
| [momepy/shape.py](https://codecov.io/gh/martinfleis/momepy/pull/107/diff?src=pr&el=tree#diff-bW9tZXB5L3NoYXBlLnB5) | `95.24% <100%> (ø)` | :arrow_up: |
| [momepy/utils.py](https://codecov.io/gh/martinfleis/momepy/pull/107/diff?src=pr&el=tree#diff-bW9tZXB5L3V0aWxzLnB5) | `81.5% <100%> (ø)` | :arrow_up: |
| [momepy/diversity.py](https://codecov.io/gh/martinfleis/momepy/pull/107/diff?src=pr&el=tree#diff-bW9tZXB5L2RpdmVyc2l0eS5weQ==) | `90.71% <100%> (ø)` | :arrow_up: |
| [momepy/intensity.py](https://codecov.io/gh/martinfleis/momepy/pull/107/diff?src=pr&el=tree#diff-bW9tZXB5L2ludGVuc2l0eS5weQ==) | `97.52% <100%> (ø)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/martinfleis/momepy/pull/107?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/martinfleis/momepy/pull/107?src=pr&el=footer). Last update [9e89489...7bb4bf3](https://codecov.io/gh/martinfleis/momepy/pull/107?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Patch:
diff --git a/momepy/dimension.py b/momepy/dimension.py
index 7e3bcd5..bfbb7ef 100644
--- a/momepy/dimension.py
+++ b/momepy/dimension.py
@@ -44,16 +44,15 @@ class Area:
 
     Attributes
     ----------
-    area : Series
+    series : Series
         Series containing resulting values
-
     gdf : GeoDataFrame
         original GeoDataFrame
 
     Examples
     --------
     >>> buildings = gpd.read_file(momepy.datasets.get_path('bubenec'), layer='buildings')
-    >>> buildings['area'] = momepy.Area(buildings).area
+    >>> buildings['area'] = momepy.Area(buildings).series
     >>> buildings.area[0]
     728.5574947044363
 
@@ -61,7 +60,7 @@ class Area:
 
     def __init__(self, gdf):
         self.gdf = gdf
-        self.area = self.gdf.geometry.area
+        self.series = self.gdf.geometry.area
 
 
 class Perimeter:
@@ -78,7 +77,7 @@ class Perimeter:
 
     Attributes
     ----------
-    perimeter : Series
+    series : Series
         Series containing resulting values
 
     gdf : GeoDataFrame
@@ -87,14 +86,14 @@ class Perimeter:
     Examples
     --------
     >>> buildings = gpd.read_file(momepy.datasets.get_path('bubenec'), layer='buildings')
-    >>> buildings['perimeter'] = momepy.Perimeter(buildings).perimeter
+    >>> buildings['perimeter'] = momepy.Perimeter(buildings).series
     >>> buildings.perimeter[0]
     137.18630991119903
     """
 
     def __init__(self, gdf):
         self.gdf = gdf
-        self.perimeter = self.gdf.geometry.length
+        self.series = self.gdf.geometry.length
 
 
 class Volume:
@@ -116,7 +115,7 @@ class Volume:
 
     Attributes
     ----------
-    volume : Series
+    series : Series
         Series containing resulting values
 
     gdf : GeoDataFrame
@@ -130,11 +129,11 @@ class Volume:
 
     Examples
     --------
-    >>> buildings['volume'] = momepy.Volume(buildings, heights='height_col')
+    >>> buildings['volume'] = momepy.Volume(buildings, heights='height_col').series
     >>> buildings.volume[0]
     7285.5749470443625
 
-    >>> buildings['volume'] = momepy.Volume(buildings, heights='height_col', areas='area_col').volume
+    >>> buildings['volume'] = momepy.Volume(buildings, heights='height_col', areas='area_col').series
     >>> buildings.volume[0]
     7285.5749470443625
     """
@@ -156,7 +155,7 @@ class Volume:
         else:
             self.areas = gdf.geometry.area
         try:
-            self.volume = self.areas * self.heights
+            self.series = self.areas * self.heights
 
         except KeyError:
             raise KeyError(
@@ -186,7 +185,7 @@ class FloorArea:
 
     Attributes
     ----------
-    fa : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -197,13 +196,13 @@ class FloorArea:
 
     Examples
     --------
-    >>> buildings['floor_area'] = momepy.FloorArea(buildings, heights='height_col')
+    >>> buildings['floor_area'] = momepy.FloorArea(buildings, heights='height_col').series
     Calculating floor areas...
     Floor areas calculated.
     >>> buildings.floor_area[0]
     2185.672484113309
 
-    >>> buildings['floor_area'] = momepy.FloorArea(buildings, heights='height_col', areas='area_col').fa
+    >>> buildings['floor_area'] = momepy.FloorArea(buildings, heights='height_col', areas='area_col').series
     >>> buildings.floor_area[0]
     2185.672484113309
     """
@@ -225,7 +224,7 @@ class FloorArea:
         else:
             self.areas = gdf.geometry.area
         try:
-            self.fa = self.areas * (self.heights // 3)
+            self.series = self.areas * (self.heights // 3)
 
         except KeyError:
             raise KeyError(
@@ -249,7 +248,7 @@ class CourtyardArea:
 
     Attributes
     ----------
-    ca : Series
+    series : Series
         Series containing resulting values
 
     gdf : GeoDataFrame
@@ -260,7 +259,7 @@ class CourtyardArea:
 
     Examples
     --------
-    >>> buildings['courtyard_area'] = momepy.CourtyardArea(buildings).ca
+    >>> buildings['courtyard_area'] = momepy.CourtyardArea(buildings).series
     >>> buildings.courtyard_area[80]
     353.33274206543274
     """
@@ -277,7 +276,7 @@ class CourtyardArea:
             areas = "mm_a"
         self.areas = gdf[areas]
 
-        self.ca = gdf.apply(
+        self.series = gdf.apply(
             lambda row: Polygon(row.geometry.exterior).area - row[areas], axis=1
         )
 
@@ -305,7 +304,7 @@ class LongestAxisLength:
 
     Attributes
     ----------
-    lal : Series
+    series : Series
         Series containing resulting values
 
     gdf : GeoDataFrame
@@ -313,14 +312,14 @@ class LongestAxisLength:
 
     Examples
     --------
-    >>> buildings['lal'] = momepy.LongestAxisLength(buildings).lal
+    >>> buildings['lal'] = momepy.LongestAxisLength(buildings).series
     >>> buildings.lal[0]
     40.2655616057102
     """
 
     def __init__(self, gdf):
         self.gdf = gdf
-        self.lal = gdf.apply(
+        self.series = gdf.apply(
             lambda row: _longest_axis(row.geometry.convex_hull.exterior.coords), axis=1
         )
 
@@ -353,7 +352,7 @@ class AverageCharacter:
 
     Attributes
     ----------
-    ac : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -376,7 +375,7 @@ class AverageCharacter:
     Examples
     --------
     >>> sw = libpysal.weights.DistanceBand.from_dataframe(tessellation, threshold=100, silence_warnings=True, ids='uID')
-    >>> tessellation['mesh_100'] = momepy.AverageCharacter(tessellation, values='area', spatial_weights=sw, unique_id='uID').ac
+    >>> tessellation['mesh_100'] = momepy.AverageCharacter(tessellation, values='area', spatial_weights=sw, unique_id='uID').series
     100%|██████████| 144/144 [00:00<00:00, 1433.32it/s]
     >>> tessellation.mesh_100[0]
     4823.1334436678835
@@ -421,7 +420,7 @@ class AverageCharacter:
             else:
                 raise ValueError("{} is not supported as mode.".format(mode))
 
-        self.ac = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class StreetProfile:
@@ -716,7 +715,7 @@ class WeightedCharacter:
 
     Attributes
     ----------
-    wc : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -738,7 +737,7 @@ class WeightedCharacter:
     --------
     >>> sw = libpysal.weights.DistanceBand.from_dataframe(tessellation_df, threshold=100, silence_warnings=True)
     >>> buildings_df['w_height_100'] = momepy.WeightedCharacter(buildings_df, values='height', spatial_weights=sw,
-                                                                 unique_id='uID').wc
+                                                                 unique_id='uID').series
     100%|██████████| 144/144 [00:00<00:00, 361.60it/s]
     """
 
@@ -776,7 +775,7 @@ class WeightedCharacter:
                 (sum(subset[values] * subset[areas])) / (sum(subset[areas]))
             )
 
-        self.wc = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class CoveredArea:
@@ -799,7 +798,7 @@ class CoveredArea:
 
     Attributes
     ----------
-    ca : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -811,7 +810,7 @@ class CoveredArea:
     Examples
     --------
     >>> sw = momepy.sw_high(k=3, gdf=tessellation_df, ids='uID')
-    >>> tessellation_df['covered3steps'] = mm.CoveredArea(tessellation_df, sw, 'uID').ca
+    >>> tessellation_df['covered3steps'] = mm.CoveredArea(tessellation_df, sw, 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 549.15it/s]
 
     """
@@ -834,7 +833,7 @@ class CoveredArea:
             areas = data.loc[neighbours].geometry.area
             results_list.append(sum(areas))
 
-        self.ca = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class PerimeterWall:
@@ -851,7 +850,7 @@ class PerimeterWall:
 
     Attributes
     ----------
-    wall : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -860,7 +859,7 @@ class PerimeterWall:
 
     Examples
     --------
-    >>> buildings_df['wall_length'] = mm.PerimeterWall(buildings_df).wall
+    >>> buildings_df['wall_length'] = mm.PerimeterWall(buildings_df).series
     Calculating spatial weights...
     Spatial weights ready...
     100%|██████████| 144/144 [00:00<00:00, 4171.39it/s]
@@ -902,7 +901,7 @@ class PerimeterWall:
         results_list = []
         for i, (index, row) in tqdm(enumerate(gdf.iterrows()), total=gdf.shape[0]):
             results_list.append(walls[i])
-        self.wall = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class SegmentsLength:
@@ -925,7 +924,7 @@ class SegmentsLength:
 
     Attributes
     ----------
-    sl : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -936,7 +935,7 @@ class SegmentsLength:
 
     Examples
     --------
-    >>> streets_df['length_neighbours'] = mm.SegmentsLength(streets_df, mean=True).sl
+    >>> streets_df['length_neighbours'] = mm.SegmentsLength(streets_df, mean=True).series
     Calculating spatial weights...
     Spatial weights ready...
     """
@@ -967,4 +966,4 @@ class SegmentsLength:
             else:
                 results_list.append(sum(dims))
 
-        self.sl = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
diff --git a/momepy/distribution.py b/momepy/distribution.py
index d54a8c8..1e94e5d 100644
--- a/momepy/distribution.py
+++ b/momepy/distribution.py
@@ -39,19 +39,19 @@ class Orientation:
 
     Attributes
     ----------
-    o : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
 
     References
-    ---------
+    ----------
     Schirmer PM and Axhausen KW (2015) A multiscale classiﬁcation of urban morphology.
     Journal of Transport and Land Use 9(1): 101–130. (adapted)
 
     Examples
     --------
-    >>> buildings_df['orientation'] = momepy.Orientation(buildings_df).o
+    >>> buildings_df['orientation'] = momepy.Orientation(buildings_df).series
     100%|██████████| 144/144 [00:00<00:00, 630.54it/s]
     >>> buildings_df['orientation'][0]
     41.05146788287027
@@ -116,7 +116,7 @@ class Orientation:
                     az = az - 2 * diff
                 results_list.append(az)
 
-        self.o = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class SharedWallsRatio:
@@ -137,7 +137,7 @@ class SharedWallsRatio:
 
     Attributes
     ----------
-    swr : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -149,7 +149,7 @@ class SharedWallsRatio:
         spatial index of gdf
 
     References
-    ---------
+    ----------
     Hamaina R, Leduc T and Moreau G (2012) Towards Urban Fabrics Characterization
     Based on Buildings Footprints. In: Lecture Notes in Geoinformation and Cartography,
     Berlin, Heidelberg: Springer Berlin Heidelberg, pp. 327–346. Available from:
@@ -157,7 +157,7 @@ class SharedWallsRatio:
 
     Examples
     --------
-    >>> buildings_df['swr'] = momepy.SharedWallsRatio(buildings_df, 'uID').swr
+    >>> buildings_df['swr'] = momepy.SharedWallsRatio(buildings_df, 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 648.72it/s]
     >>> buildings_df['swr'][10]
     0.3424804411228673
@@ -200,7 +200,7 @@ class SharedWallsRatio:
                     length = length + row.geometry.intersection(subset).length
                 results_list.append(length / row[perimeters])
 
-        self.swr = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class StreetAlignment:
@@ -234,7 +234,7 @@ class StreetAlignment:
 
     Attributes
     ----------
-    sa : Series
+    series : Series
         Series containing resulting values
     left : GeoDataFrame
         original left GeoDataFrame
@@ -249,7 +249,7 @@ class StreetAlignment:
 
     Examples
     --------
-    >>> buildings_df['street_alignment'] = momepy.StreetAlignment(buildings_df, streets_df, 'orientation', 'nID', 'nID').sa
+    >>> buildings_df['street_alignment'] = momepy.StreetAlignment(buildings_df, streets_df, 'orientation', 'nID', 'nID').series
     100%|██████████| 144/144 [00:00<00:00, 529.94it/s]
     >>> buildings_df['street_alignment'][0]
     0.29073888476702336
@@ -332,7 +332,7 @@ class StreetAlignment:
                     diff = az - 45
                     az = az - 2 * diff
                 results_list.append(abs(row[orientations] - az))
-        self.sa = pd.Series(results_list, index=left.index)
+        self.series = pd.Series(results_list, index=left.index)
 
 
 class CellAlignment:
@@ -361,7 +361,7 @@ class CellAlignment:
 
     Attributes
     ----------
-    ca : Series
+    series : Series
         Series containing resulting values
     left : GeoDataFrame
         original left GeoDataFrame
@@ -378,7 +378,7 @@ class CellAlignment:
 
     Examples
     --------
-    >>> buildings_df['cell_alignment'] = momepy.CellAlignment(buildings_df, tessellation_df, 'bl_orient', 'tes_orient', 'uID', 'uID').ca
+    >>> buildings_df['cell_alignment'] = momepy.CellAlignment(buildings_df, tessellation_df, 'bl_orient', 'tes_orient', 'uID', 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 799.09it/s]
     >>> buildings_df['cell_alignment'][0]
     0.8795123936951939
@@ -424,7 +424,7 @@ class CellAlignment:
                 )
             )
 
-        self.ca = pd.Series(results_list, index=left.index)
+        self.series = pd.Series(results_list, index=left.index)
 
 
 class Alignment:
@@ -449,7 +449,7 @@ class Alignment:
 
     Attributes
     ----------
-    a : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -462,7 +462,7 @@ class Alignment:
 
     Examples
     --------
-    >>> buildings_df['alignment'] = momepy.Alignment(buildings_df, sw, 'uID', bl_orient).a
+    >>> buildings_df['alignment'] = momepy.Alignment(buildings_df, sw, 'uID', bl_orient).series
     100%|██████████| 144/144 [00:01<00:00, 140.84it/s]
     >>> buildings_df['alignment'][0]
     18.299481296455237
@@ -495,7 +495,7 @@ class Alignment:
             else:
                 results_list.append(0)
 
-        self.a = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class NeighborDistance:
@@ -516,7 +516,7 @@ class NeighborDistance:
 
     Attributes
     ----------
-    nd : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -526,13 +526,13 @@ class NeighborDistance:
         Series containing used unique ID
 
     References
-    ---------
+    ----------
     Schirmer PM and Axhausen KW (2015) A multiscale classiﬁcation of urban morphology.
     Journal of Transport and Land Use 9(1): 101–130. (adapted)
 
     Examples
     --------
-    >>> buildings_df['neighbour_distance'] = momepy.NeighborDistance(buildings_df, sw, 'uID').nd
+    >>> buildings_df['neighbour_distance'] = momepy.NeighborDistance(buildings_df, sw, 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 345.78it/s]
     >>> buildings_df['neighbour_distance'][0]
     29.18589019096464
@@ -558,7 +558,7 @@ class NeighborDistance:
             else:
                 results_list.append(0)
 
-        self.nd = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class MeanInterbuildingDistance:
@@ -587,7 +587,7 @@ class MeanInterbuildingDistance:
 
     Attributes
     ----------
-    mid : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -606,7 +606,7 @@ class MeanInterbuildingDistance:
 
     Examples
     --------
-    >>> buildings_df['mean_interbuilding_distance'] = momepy.MeanInterbuildingDistance(buildings_df, sw, 'uID').mid
+    >>> buildings_df['mean_interbuilding_distance'] = momepy.MeanInterbuildingDistance(buildings_df, sw, 'uID').series
     Generating weights matrix (Queen) of 3 topological steps...
     Generating adjacency matrix based on weights matrix...
     Computing interbuilding distances...
@@ -675,7 +675,7 @@ class MeanInterbuildingDistance:
                 ]
                 results_list.append(np.nanmean(selection.distance))
 
-        self.mid = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class NeighboringStreetOrientationDeviation:
@@ -695,7 +695,7 @@ class NeighboringStreetOrientationDeviation:
 
     Attributes
     ----------
-    nsod : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -706,7 +706,7 @@ class NeighboringStreetOrientationDeviation:
 
     Examples
     --------
-    >>> streets_df['orient_dev'] = momepy.NeighboringStreetOrientationDeviation(streets_df).nsod
+    >>> streets_df['orient_dev'] = momepy.NeighboringStreetOrientationDeviation(streets_df).series
     Preparing street orientations...
     Generating spatial index...
     100%|██████████| 33/33 [00:00<00:00, 249.02it/s]
@@ -778,7 +778,7 @@ class NeighboringStreetOrientationDeviation:
             else:
                 results_list.append(0)
 
-        self.nsod = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class BuildingAdjacency:
@@ -806,7 +806,7 @@ class BuildingAdjacency:
 
     Attributes
     ----------
-    ba : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -818,13 +818,13 @@ class BuildingAdjacency:
         spatial weights matrix
 
     References
-    ---------
+    ----------
     Vanderhaegen S and Canters F (2017) Mapping urban form and function at city
     block level using spatial metrics. Landscape and Urban Planning 167: 399–409.
 
     Examples
     --------
-    >>> buildings_df['adjacency'] = momepy.BuildingAdjacency(buildings_df, swh, unique_id='uID').ba
+    >>> buildings_df['adjacency'] = momepy.BuildingAdjacency(buildings_df, swh, unique_id='uID').series
     Calculating spatial weights...
     Spatial weights ready...
     100%|██████████| 144/144 [00:00<00:00, 9301.73it/s]
@@ -866,7 +866,7 @@ class BuildingAdjacency:
             else:
                 results_list.append(0)
 
-        self.ba = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class Neighbors:
@@ -892,7 +892,7 @@ class Neighbors:
 
     Attributes
     ----------
-    n : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -906,7 +906,7 @@ class Neighbors:
         used weighted value
 
     References
-    ---------
+    ----------
     Hermosilla T, Ruiz LA, Recio JA, et al. (2012) Assessing contextual descriptive features
     for plot-based classification of urban areas. Landscape and Urban Planning, Elsevier B.V.
     106(1): 124–137.
@@ -914,7 +914,7 @@ class Neighbors:
     Examples
     --------
     >>> sw = libpysal.weights.contiguity.Queen.from_dataframe(tessellation_df, ids='uID')
-    >>> tessellation_df['neighbours'] = momepy.Neighbors(tessellation_df, sw, 'uID').n
+    >>> tessellation_df['neighbours'] = momepy.Neighbors(tessellation_df, sw, 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 6909.50it/s]
     >>> tessellation_df['neighbours'][0]
     4
@@ -935,4 +935,4 @@ class Neighbors:
             else:
                 neighbours.append(spatial_weights.cardinalities[row[unique_id]])
 
-        self.n = pd.Series(neighbours, index=gdf.index)
+        self.series = pd.Series(neighbours, index=gdf.index)
diff --git a/momepy/diversity.py b/momepy/diversity.py
index 9a32f66..527ebd6 100644
--- a/momepy/diversity.py
+++ b/momepy/diversity.py
@@ -39,7 +39,7 @@ class Range:
 
     Attributes
     ----------
-    r : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -62,7 +62,7 @@ class Range:
     Examples
     --------
     >>> sw = momepy.sw_high(k=3, gdf=tessellation_df, ids='uID')
-    >>> tessellation_df['area_IQR_3steps'] = mm.Range(tessellation_df, 'area', sw, 'uID', rng=(25, 75)).r
+    >>> tessellation_df['area_IQR_3steps'] = mm.Range(tessellation_df, 'area', sw, 'uID', rng=(25, 75)).series
     100%|██████████| 144/144 [00:00<00:00, 722.50it/s]
 
 
@@ -95,7 +95,7 @@ class Range:
             values_list = data.loc[neighbours][values]
             results_list.append(sp.stats.iqr(values_list, rng=rng, **kwargs))
 
-        self.r = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class Theil:
@@ -123,7 +123,7 @@ class Theil:
 
     Attributes
     ----------
-    t : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -139,7 +139,7 @@ class Theil:
     Examples
     --------
     >>> sw = momepy.sw_high(k=3, gdf=tessellation_df, ids='uID')
-    >>> tessellation_df['area_Theil'] = mm.Theil(tessellation_df, 'area', sw, 'uID').t
+    >>> tessellation_df['area_Theil'] = mm.Theil(tessellation_df, 'area', sw, 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 597.37it/s]
     """
 
@@ -182,7 +182,7 @@ class Theil:
                 values_list = limit_range(values_list, rng=rng)
             results_list.append(Theil(values_list).T)
 
-        self.t = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class Simpson:
@@ -220,7 +220,7 @@ class Simpson:
 
     Attributes
     ----------
-    s : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -231,7 +231,9 @@ class Simpson:
     id : Series
         Series containing used unique ID
     binning : str
-        binning
+        binning method
+    bins : mapclassify.classifiers.Classifier
+        generated bins
     classification_kwds : dict
         classification_kwds
 
@@ -243,7 +245,7 @@ class Simpson:
     Examples
     --------
     >>> sw = momepy.sw_high(k=3, gdf=tessellation_df, ids='uID')
-    >>> tessellation_df['area_Simpson'] = mm.Simpson(tessellation_df, 'area', sw, 'uID').s
+    >>> tessellation_df['area_Simpson'] = mm.Simpson(tessellation_df, 'area', sw, 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 455.83it/s]
     """
 
@@ -286,7 +288,7 @@ class Simpson:
                 values = "mm_v"
         self.values = data[values]
 
-        bins = schemes[binning](data[values], **classification_kwds).bins
+        self.bins = schemes[binning](data[values], **classification_kwds).bins
         data = data.set_index(unique_id)
         results_list = []
         for index, row in tqdm(data.iterrows(), total=data.shape[0]):
@@ -297,11 +299,11 @@ class Simpson:
                 neighbours = [index]
             values_list = data.loc[neighbours][values]
 
-            sample_bins = classifiers.UserDefined(values_list, bins)
-            counts = dict(zip(bins, sample_bins.counts))
+            sample_bins = classifiers.UserDefined(values_list, self.bins)
+            counts = dict(zip(self.bins, sample_bins.counts))
             results_list.append(self._simpson_di(counts))
 
-        self.s = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
     def _simpson_di(self, data):
 
@@ -346,7 +348,7 @@ class Gini:
 
     Attributes
     ----------
-    g : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -362,7 +364,7 @@ class Gini:
     Examples
     --------
     >>> sw = momepy.sw_high(k=3, gdf=tessellation_df, ids='uID')
-    >>> tessellation_df['area_Gini'] = mm.Gini(tessellation_df, 'area', sw, 'uID').g
+    >>> tessellation_df['area_Gini'] = mm.Gini(tessellation_df, 'area', sw, 'uID').series
     100%|██████████| 144/144 [00:00<00:00, 597.37it/s]
     """
 
@@ -411,4 +413,4 @@ class Gini:
             else:
                 results_list.append(0)
 
-        self.g = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
diff --git a/momepy/intensity.py b/momepy/intensity.py
index d8e9954..8e8337d 100644
--- a/momepy/intensity.py
+++ b/momepy/intensity.py
@@ -51,7 +51,7 @@ class AreaRatio:
 
     Attributes
     ----------
-    ar : Series
+    series : Series
         Series containing resulting values
     left : GeoDataFrame
         original left GeoDataFrame
@@ -73,7 +73,7 @@ class AreaRatio:
 
     Examples
     --------
-    >>> tessellation_df['CAR'] = mm.AreaRatio(tessellation_df, buildings_df, 'area', 'area', 'uID').ar
+    >>> tessellation_df['CAR'] = mm.AreaRatio(tessellation_df, buildings_df, 'area', 'area', 'uID').series
     """
 
     def __init__(
@@ -121,7 +121,7 @@ class AreaRatio:
             look_for, left_on=left_unique_id, right_on=right_unique_id
         )
 
-        self.ar = objects_merged["lf_area"] / objects_merged[left_areas]
+        self.series = objects_merged["lf_area"] / objects_merged[left_areas]
 
 
 class Count:
@@ -151,7 +151,7 @@ class Count:
 
     Attributes
     ----------
-    c : Series
+    series : Series
         Series containing resulting values
     left : GeoDataFrame
         original left GeoDataFrame
@@ -174,7 +174,7 @@ class Count:
 
     Examples
     --------
-    >>> blocks_df['buildings_count'] = mm.Count(blocks_df, buildings_df, 'bID', 'bID', weighted=True).c
+    >>> blocks_df['buildings_count'] = mm.Count(blocks_df, buildings_df, 'bID', 'bID', weighted=True).series
     """
 
     def __init__(self, left, right, left_id, right_id, weighted=False):
@@ -197,7 +197,7 @@ class Count:
             else:
                 raise TypeError("Geometry type does not support weighting.")
 
-        self.c = joined["mm_count"]
+        self.series = joined["mm_count"]
 
 
 class Courtyards:
@@ -216,7 +216,7 @@ class Courtyards:
 
     Attributes
     ----------
-    c : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -232,7 +232,7 @@ class Courtyards:
 
     Examples
     --------
-    >>> buildings_df['courtyards'] = mm.Courtyards(buildings_df, 'bID').c
+    >>> buildings_df['courtyards'] = mm.Courtyards(buildings_df, 'bID').series
     Calculating spatial weights...
     """
 
@@ -279,7 +279,7 @@ class Courtyards:
         for index, row in tqdm(gdf.iterrows(), total=gdf.shape[0]):
             results_list.append(courtyards[index])
 
-        self.c = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class BlocksCount:
@@ -306,7 +306,7 @@ class BlocksCount:
 
     Attributes
     ----------
-    bc : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -327,7 +327,7 @@ class BlocksCount:
     Examples
     --------
     >>> sw4 = mm.sw_high(k=4, gdf='tessellation_df', ids='uID')
-    >>> tessellation_df['blocks_within_4'] = mm.BlocksCount(tessellation_df, 'bID', sw4, 'uID').bc
+    >>> tessellation_df['blocks_within_4'] = mm.BlocksCount(tessellation_df, 'bID', sw4, 'uID').series
     """
 
     def __init__(self, gdf, block_id, spatial_weights, unique_id, weighted=True):
@@ -363,7 +363,7 @@ class BlocksCount:
             else:
                 raise ValueError("Attribute 'weighted' needs to be True or False.")
 
-        self.bc = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class Reached:
@@ -403,7 +403,7 @@ class Reached:
 
     Attributes
     ----------
-    r : Series
+    series : Series
         Series containing resulting values
     left : GeoDataFrame
         original left GeoDataFrame
@@ -420,7 +420,7 @@ class Reached:
 
     Examples
     --------
-    >>> streets_df['reached_buildings'] = mm.Reached(streets_df, buildings_df, 'uID').r
+    >>> streets_df['reached_buildings'] = mm.Reached(streets_df, buildings_df, 'uID').series
 
     """
 
@@ -496,7 +496,7 @@ class Reached:
                         np.nanstd(right.loc[right[right_id].isin(ids)].geometry.area)
                     )
 
-        self.r = pd.Series(results_list, index=left.index)
+        self.series = pd.Series(results_list, index=left.index)
 
 
 class NodeDensity:
@@ -528,7 +528,7 @@ class NodeDensity:
 
     Attributes
     ----------
-    nd : Series
+    series : Series
         Series containing resulting values
     left : GeoDataFrame
         original left GeoDataFrame
@@ -553,7 +553,7 @@ class NodeDensity:
 
     Examples
     --------
-    >>> nodes['density'] = mm.NodeDensity(nodes, edges, sw).nd
+    >>> nodes['density'] = mm.NodeDensity(nodes, edges, sw).series
 
     """
 
@@ -599,7 +599,7 @@ class NodeDensity:
             else:
                 results_list.append(0)
 
-        self.nd = pd.Series(results_list, index=left.index)
+        self.series = pd.Series(results_list, index=left.index)
 
 
 class Density:
@@ -625,7 +625,7 @@ class Density:
 
     Attributes
     ----------
-    d : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -645,7 +645,7 @@ class Density:
 
     Examples
     --------
-    >>> tessellation_df['floor_area_dens'] = mm.Density(tessellation_df, 'floor_area', sw, 'uID').d
+    >>> tessellation_df['floor_area_dens'] = mm.Density(tessellation_df, 'floor_area', sw, 'uID').series
     """
 
     def __init__(self, gdf, values, spatial_weights, unique_id, areas=None):
@@ -685,4 +685,4 @@ class Density:
 
             results_list.append(sum(values_list) / sum(areas_list))
 
-        self.d = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
diff --git a/momepy/shape.py b/momepy/shape.py
index 3f28419..0d9f988 100644
--- a/momepy/shape.py
+++ b/momepy/shape.py
@@ -52,7 +52,7 @@ class FormFactor:
 
     Attributes
     ----------
-    ff : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -62,18 +62,18 @@ class FormFactor:
         Series containing used area values
 
     References
-    ---------
+    ----------
     Bourdic, L., Salat, S. and Nowacki, C. (2012) ‘Assessing cities: a new system
     of cross-scale spatial indicators’, Building Research & Information, 40(5),
     pp. 592–605. doi: 10.1080/09613218.2012.703488self.
 
     Examples
     --------
-    >>> buildings_df['formfactor'] = momepy.FormFactor(buildings_df, 'volume').ff
+    >>> buildings_df['formfactor'] = momepy.FormFactor(buildings_df, 'volume').series
     >>> buildings_df.formfactor[0]
     1.9385988170288635
 
-    >>> buildings_df['formfactor'] = momepy.FormFactor(buildings_df, momepy.volume(buildings_df, 'height').volume).ff
+    >>> buildings_df['formfactor'] = momepy.FormFactor(buildings_df, momepy.volume(buildings_df, 'height').volume).series
     >>> buildings_df.formfactor[0]
     1.9385988170288635
 
@@ -93,7 +93,7 @@ class FormFactor:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.ff = gdf.apply(
+        self.series = gdf.apply(
             lambda row: row[areas] / (row[volumes] ** (2 / 3))
             if row[volumes] != 0
             else 0,
@@ -121,7 +121,7 @@ class FractalDimension:
 
     Attributes
     ----------
-    fd : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -136,7 +136,7 @@ class FractalDimension:
 
     Examples
     --------
-    >>> buildings_df['fractal'] = momepy.FractalDimension(buildings_df, 'area', 'peri').fd
+    >>> buildings_df['fractal'] = momepy.FractalDimension(buildings_df, 'area', 'peri').series
     100%|██████████| 144/144 [00:00<00:00, 3928.09it/s]
     >>> buildings_df.fractal[0]
     1.0726778567038908
@@ -161,7 +161,7 @@ class FractalDimension:
             gdf["mm_a"] = areas
             areas = "mm_a"
 
-        self.fd = gdf.apply(
+        self.series = gdf.apply(
             lambda row: (2 * math.log(row[perimeters] / 4)) / math.log(row[areas]),
             axis=1,
         )
@@ -188,7 +188,7 @@ class VolumeFacadeRatio:
 
     Attributes
     ----------
-    vfr : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -205,7 +205,7 @@ class VolumeFacadeRatio:
 
     Examples
     -----
-    >>> buildings_df['vfr'] = momepy.VolumeFacadeRatio(buildings_df, 'height').vfr
+    >>> buildings_df['vfr'] = momepy.VolumeFacadeRatio(buildings_df, 'height').series
     >>> buildings_df.vfr[0]
     5.310715735236504
     """
@@ -232,7 +232,7 @@ class VolumeFacadeRatio:
                 volumes = "mm_v"
         self.volumes = gdf[volumes]
 
-        self.vfr = gdf[volumes] / (gdf[perimeters] * gdf[heights])
+        self.series = gdf[volumes] / (gdf[perimeters] * gdf[heights])
 
 
 # Smallest enclosing circle - Library (Python)
@@ -423,7 +423,7 @@ class CircularCompactness:
 
     Attributes
     ----------
-    cc : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -437,7 +437,7 @@ class CircularCompactness:
 
     Examples
     --------
-    >>> buildings_df['circ_comp'] = momepy.CircularCompactness(buildings_df, 'area').cc
+    >>> buildings_df['circ_comp'] = momepy.CircularCompactness(buildings_df, 'area').series
     100%|██████████| 144/144 [00:00<00:00, 2498.75it/s]
     >>> buildings_df['circ_comp'][0]
     0.572145421828038
@@ -454,7 +454,7 @@ class CircularCompactness:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.cc = gdf.apply(
+        self.series = gdf.apply(
             lambda row: (row[areas])
             / (_circle_area(list(row["geometry"].convex_hull.exterior.coords))),
             axis=1,
@@ -483,7 +483,7 @@ class SquareCompactness:
 
     Attributes
     ----------
-    sc : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -499,7 +499,7 @@ class SquareCompactness:
 
     Examples
     --------
-    >>> buildings_df['squ_comp'] = momepy.SquareCompactness(buildings_df).sc
+    >>> buildings_df['squ_comp'] = momepy.SquareCompactness(buildings_df).series
     >>> buildings_df['squ_comp'][0]
     0.6193872538650996
 
@@ -524,7 +524,7 @@ class SquareCompactness:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.sc = gdf.apply(
+        self.series = gdf.apply(
             lambda row: ((4 * math.sqrt(row[areas])) / (row[perimeters])) ** 2, axis=1
         )
 
@@ -546,7 +546,7 @@ class Convexeity:
 
     Attributes
     ----------
-    c : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -554,13 +554,13 @@ class Convexeity:
         Series containing used area values
 
     References
-    ---------
+    ----------
     Dibble, J. (2016) Urban Morphometrics: Towards a Quantitative Science of Urban
     Form. University of Strathclyde.
 
     Examples
     --------
-    >>> buildings_df['convexeity'] = momepy.Convexeity(buildings_df).c
+    >>> buildings_df['convexeity'] = momepy.Convexeity(buildings_df).series
     >>> buildings_df.convexeity[0]
     0.8151964258521672
     """
@@ -576,7 +576,7 @@ class Convexeity:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.c = gdf[areas] / gdf.geometry.convex_hull.area
+        self.series = gdf[areas] / gdf.geometry.convex_hull.area
 
 
 class CourtyardIndex:
@@ -599,7 +599,7 @@ class CourtyardIndex:
 
     Attributes
     ----------
-    ci : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -609,18 +609,18 @@ class CourtyardIndex:
         Series containing used area values
 
     References
-    ---------
+    ----------
     Schirmer, P. M. and Axhausen, K. W. (2015) ‘A multiscale classification of
     urban morphology’, Journal of Transport and Land Use, 9(1), pp. 101–130.
     doi: 10.5198/jtlu.2015.667.
 
     Examples
     --------
-    >>> buildings_df['courtyard_index'] = momepy.CourtyardIndex(buildings, 'courtyard_area', 'area').ci
+    >>> buildings_df['courtyard_index'] = momepy.CourtyardIndex(buildings, 'courtyard_area', 'area').series
     >>> buildings_df.courtyard_index[80]
     0.16605915738643523
 
-    >>> buildings_df['courtyard_index2'] = momepy.CourtyardIndex(buildings_df, momepy.courtyard_area(buildings_df).ca).ci
+    >>> buildings_df['courtyard_index2'] = momepy.CourtyardIndex(buildings_df, momepy.courtyard_area(buildings_df).ca).series
     >>> buildings_df.courtyard_index2[80]
     0.16605915738643523
     """
@@ -639,7 +639,7 @@ class CourtyardIndex:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.ci = gdf[courtyard_areas] / gdf[areas]
+        self.series = gdf[courtyard_areas] / gdf[areas]
 
 
 class Rectangularity:
@@ -659,7 +659,7 @@ class Rectangularity:
 
     Attributes
     ----------
-    r : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -673,7 +673,7 @@ class Rectangularity:
 
     Examples
     --------
-    >>> buildings_df['rectangularity'] = momepy.Rectangularity(buildings_df, 'area').r
+    >>> buildings_df['rectangularity'] = momepy.Rectangularity(buildings_df, 'area').series
     100%|██████████| 144/144 [00:00<00:00, 866.62it/s]
     >>> buildings_df.rectangularity[0]
     0.6942676157646379
@@ -688,7 +688,7 @@ class Rectangularity:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.r = gdf.apply(
+        self.series = gdf.apply(
             lambda row: row[areas] / (row.geometry.minimum_rotated_rectangle.area),
             axis=1,
         )
@@ -713,7 +713,7 @@ class ShapeIndex:
 
     Attributes
     ----------
-    si : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -722,13 +722,9 @@ class ShapeIndex:
     areas : Series
         Series containing used area values
 
-    References
-    ---------
-    Ale?
-
     Examples
     --------
-    >>> buildings_df['shape_index'] = momepy.ShapeIndex(buildings_df, longest_axis='long_ax', areas='area').si
+    >>> buildings_df['shape_index'] = momepy.ShapeIndex(buildings_df, longest_axis='long_ax', areas='area').series
     100%|██████████| 144/144 [00:00<00:00, 5558.33it/s]
     >>> buildings_df['shape_index'][0]
     0.7564029493781987
@@ -748,7 +744,7 @@ class ShapeIndex:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.si = gdf.apply(
+        self.series = gdf.apply(
             lambda row: math.sqrt(row[areas] / math.pi) / (0.5 * row[longest_axis]),
             axis=1,
         )
@@ -770,7 +766,7 @@ class Corners:
 
     Attributes
     ----------
-    c : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -778,7 +774,7 @@ class Corners:
 
     Examples
     --------
-    >>> buildings_df['corners'] = momepy.Corners(buildings_df).c
+    >>> buildings_df['corners'] = momepy.Corners(buildings_df).series
     100%|██████████| 144/144 [00:00<00:00, 1042.15it/s]
     >>> buildings_df.corners[0]
     24
@@ -838,7 +834,7 @@ class Corners:
 
             results_list.append(corners)
 
-        self.c = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class Squareness:
@@ -859,7 +855,7 @@ class Squareness:
 
     Attributes
     ----------
-    s : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -871,7 +867,7 @@ class Squareness:
 
     Examples
     --------
-    >>> buildings_df['squareness'] = momepy.Squareness(buildings_df).s
+    >>> buildings_df['squareness'] = momepy.Squareness(buildings_df).series
     100%|██████████| 144/144 [00:01<00:00, 129.49it/s]
     >>> buildings_df.squareness[0]
     3.7075816043359864
@@ -932,7 +928,7 @@ class Squareness:
                 deviations.append(dev)
             results_list.append(np.mean(deviations))
 
-        self.s = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class EquivalentRectangularIndex:
@@ -955,7 +951,7 @@ class EquivalentRectangularIndex:
 
     Attributes
     ----------
-    eri : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -965,7 +961,7 @@ class EquivalentRectangularIndex:
         Series containing used perimeter values
 
     References
-    ---------
+    ----------
     Basaraner M and Cetinkaya S (2017) Performance of shape indices and classification
     schemes for characterising perceptual shape complexity of building footprints in GIS.
     2nd ed. International Journal of Geographical Information Science, Taylor & Francis
@@ -974,7 +970,7 @@ class EquivalentRectangularIndex:
 
     Examples
     --------
-    >>> buildings_df['eri'] = momepy.EquivalentRectangularIndex(buildings_df, 'area', 'peri').eri
+    >>> buildings_df['eri'] = momepy.EquivalentRectangularIndex(buildings_df, 'area', 'peri').series
     100%|██████████| 144/144 [00:00<00:00, 895.57it/s]
     >>> buildings_df['eri'][0]
     0.7879229963118455
@@ -1009,7 +1005,7 @@ class EquivalentRectangularIndex:
                 math.sqrt(row[areas] / bbox.area) * (bbox.length / row[perimeters])
             )
 
-        self.eri = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class Elongation:
@@ -1034,7 +1030,7 @@ class Elongation:
         original GeoDataFrame
 
     References
-    ---------
+    ----------
     Gil J, Montenegro N, Beirão JN, et al. (2012) On the Discovery of
     Urban Typologies: Data Mining the Multi-dimensional Character of
     Neighbourhoods. Urban Morphology 16(1): 27–40.
@@ -1075,7 +1071,7 @@ class Elongation:
 
             results_list.append(elo)
 
-        self.e = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class CentroidCorners:
@@ -1203,20 +1199,20 @@ class Linearity:
 
     Attributes
     ----------
-    linearity : Series
+    series : Series
         Series containing mean distance values.
     gdf : GeoDataFrame
         original GeoDataFrame
 
     References
-    ---------
+    ----------
     Araldi A and Fusco G (2017) Decomposing and Recomposing Urban Fabric:
     The City from the Pedestrian Point of View. In:, pp. 365–376. Available
     from: http://link.springer.com/10.1007/978-3-319-62407-5.
 
     Examples
     --------
-    >>> streets_df['linearity'] = momepy.Linearity(streets_df).linearity
+    >>> streets_df['linearity'] = momepy.Linearity(streets_df).series
     100%|██████████| 33/33 [00:00<00:00, 1737.64it/s]
     >>> streets_df['linearity'][0]
     1.0
@@ -1234,7 +1230,7 @@ class Linearity:
             )
             results_list.append(euclidean / row["geometry"].length)
 
-        self.linearity = pd.Series(results_list, index=gdf.index)
+        self.series = pd.Series(results_list, index=gdf.index)
 
 
 class CompactnessWeightedAxis:
@@ -1262,7 +1258,7 @@ class CompactnessWeightedAxis:
 
     Attributes
     ----------
-    cwa : Series
+    series : Series
         Series containing resulting values
     gdf : GeoDataFrame
         original GeoDataFrame
@@ -1276,7 +1272,7 @@ class CompactnessWeightedAxis:
 
     Examples
     --------
-    >>> blocks_df['cwa'] = mm.CompactnessWeightedAxis(blocks_df).cwa
+    >>> blocks_df['cwa'] = mm.CompactnessWeightedAxis(blocks_df).series
     """
 
     def __init__(self, gdf, areas=None, perimeters=None, longest_axis=None):
@@ -1294,7 +1290,7 @@ class CompactnessWeightedAxis:
         if longest_axis is None:
             from .dimension import LongestAxisLength
 
-            gdf["mm_la"] = LongestAxisLength(gdf).lal
+            gdf["mm_la"] = LongestAxisLength(gdf).series
             longest_axis = "mm_la"
         else:
             if not isinstance(longest_axis, str):
@@ -1307,7 +1303,7 @@ class CompactnessWeightedAxis:
             gdf["mm_a"] = areas
             areas = "mm_a"
         self.areas = gdf[areas]
-        self.cwa = gdf.apply(
+        self.series = gdf.apply(
             lambda row: row[longest_axis]
             * ((4 / math.pi) - (16 * row[areas]) / ((row[perimeters]) ** 2)),
             axis=1,
diff --git a/momepy/utils.py b/momepy/utils.py
index a092327..13b5b58 100644
--- a/momepy/utils.py
+++ b/momepy/utils.py
@@ -413,7 +413,7 @@ def preprocess(buildings, size=30, compactness=True, islands=True):
         blg["neighbors"] = sw.neighbors
         blg["neighbors"] = blg["neighbors"].map(sw.neighbors)
         blg["n_count"] = blg.apply(lambda row: len(row.neighbors), axis=1)
-        blg["circu"] = CircularCompactness(blg).cc
+        blg["circu"] = CircularCompactness(blg).series
 
         # idetify those smaller than x with only one neighbor and attaches it to it.
         join = {}


Test patch:
diff --git a/tests/test_dimension.py b/tests/test_dimension.py
index ad21fec..d2485e4 100644
--- a/tests/test_dimension.py
+++ b/tests/test_dimension.py
@@ -18,12 +18,12 @@ class TestDimensions:
         self.df_buildings["height"] = np.linspace(10.0, 30.0, 144)
 
     def test_Area(self):
-        self.df_buildings["area"] = mm.Area(self.df_buildings).area
+        self.df_buildings["area"] = mm.Area(self.df_buildings).series
         check = self.df_buildings.geometry[0].area
         assert self.df_buildings["area"][0] == check
 
     def test_Perimeter(self):
-        self.df_buildings["perimeter"] = mm.Perimeter(self.df_buildings).perimeter
+        self.df_buildings["perimeter"] = mm.Perimeter(self.df_buildings).series
         check = self.df_buildings.geometry[0].length
         assert self.df_buildings["perimeter"][0] == check
 
@@ -31,17 +31,17 @@ class TestDimensions:
         self.df_buildings["area"] = self.df_buildings.geometry.area
         self.df_buildings["volume"] = mm.Volume(
             self.df_buildings, "height", "area"
-        ).volume
+        ).series
         check = self.df_buildings.geometry[0].area * self.df_buildings.height[0]
         assert self.df_buildings["volume"][0] == check
 
         area = self.df_buildings.geometry.area
         height = np.linspace(10.0, 30.0, 144)
-        self.df_buildings["volume"] = mm.Volume(self.df_buildings, height, area).volume
+        self.df_buildings["volume"] = mm.Volume(self.df_buildings, height, area).series
         check = self.df_buildings.geometry[0].area * self.df_buildings.height[0]
         assert self.df_buildings["volume"][0] == check
 
-        self.df_buildings["volume"] = mm.Volume(self.df_buildings, "height").volume
+        self.df_buildings["volume"] = mm.Volume(self.df_buildings, "height").series
         check = self.df_buildings.geometry[0].area * self.df_buildings.height[0]
         assert self.df_buildings["volume"][0] == check
 
@@ -54,7 +54,7 @@ class TestDimensions:
         self.df_buildings["area"] = self.df_buildings.geometry.area
         self.df_buildings["floor_area"] = mm.FloorArea(
             self.df_buildings, "height", "area"
-        ).fa
+        ).series
         check = self.df_buildings.geometry[0].area * (self.df_buildings.height[0] // 3)
         assert self.df_buildings["floor_area"][0] == check
 
@@ -62,10 +62,12 @@ class TestDimensions:
         height = np.linspace(10.0, 30.0, 144)
         self.df_buildings["floor_area"] = mm.FloorArea(
             self.df_buildings, height, area
-        ).fa
+        ).series
         assert self.df_buildings["floor_area"][0] == check
 
-        self.df_buildings["floor_area"] = mm.FloorArea(self.df_buildings, "height").fa
+        self.df_buildings["floor_area"] = mm.FloorArea(
+            self.df_buildings, "height"
+        ).series
         assert self.df_buildings["floor_area"][0] == check
 
         with pytest.raises(KeyError):
@@ -77,7 +79,7 @@ class TestDimensions:
         self.df_buildings["area"] = self.df_buildings.geometry.area
         self.df_buildings["courtyard_area"] = mm.CourtyardArea(
             self.df_buildings, "area"
-        ).ca
+        ).series
         check = (
             Polygon(self.df_buildings.geometry[80].exterior).area
             - self.df_buildings.geometry[80].area
@@ -87,10 +89,10 @@ class TestDimensions:
         area = self.df_buildings.geometry.area
         self.df_buildings["courtyard_area"] = mm.CourtyardArea(
             self.df_buildings, area
-        ).ca
+        ).series
         assert self.df_buildings["courtyard_area"][80] == check
 
-        self.df_buildings["courtyard_area"] = mm.CourtyardArea(self.df_buildings).ca
+        self.df_buildings["courtyard_area"] = mm.CourtyardArea(self.df_buildings).series
         assert self.df_buildings["courtyard_area"][80] == check
 
         with pytest.raises(KeyError):
@@ -99,7 +101,7 @@ class TestDimensions:
             )
 
     def test_LongestAxisLength(self):
-        self.df_buildings["long_axis"] = mm.LongestAxisLength(self.df_buildings).lal
+        self.df_buildings["long_axis"] = mm.LongestAxisLength(self.df_buildings).series
         check = (
             _make_circle(self.df_buildings.geometry[0].convex_hull.exterior.coords)[2]
             * 2
@@ -115,28 +117,28 @@ class TestDimensions:
             spatial_weights=spatial_weights,
             unique_id="uID",
             mode="mode",
-        ).ac
+        ).series
         self.df_tessellation["mesh_array"] = mm.AverageCharacter(
             self.df_tessellation,
             values=area,
             spatial_weights=spatial_weights,
             unique_id="uID",
             mode="median",
-        ).ac
+        ).series
         self.df_tessellation["mesh_id"] = mm.AverageCharacter(
             self.df_tessellation,
             spatial_weights=spatial_weights,
             values="area",
             rng=(10, 90),
             unique_id="uID",
-        ).ac
+        ).series
         self.df_tessellation["mesh_iq"] = mm.AverageCharacter(
             self.df_tessellation,
             spatial_weights=spatial_weights,
             values="area",
             rng=(25, 75),
             unique_id="uID",
-        ).ac
+        ).series
         with pytest.raises(ValueError):
             self.df_tessellation["mesh_ar"] = mm.AverageCharacter(
                 self.df_tessellation,
@@ -177,37 +179,37 @@ class TestDimensions:
 
     def test_WeightedCharacter(self):
         sw = sw_high(k=3, gdf=self.df_tessellation, ids="uID")
-        weighted = mm.WeightedCharacter(self.df_buildings, "height", sw, "uID").wc
+        weighted = mm.WeightedCharacter(self.df_buildings, "height", sw, "uID").series
         assert weighted[38] == approx(18.301, rel=1e-3)
 
         self.df_buildings["area"] = self.df_buildings.geometry.area
         sw = sw_high(k=3, gdf=self.df_tessellation, ids="uID")
         weighted = mm.WeightedCharacter(
             self.df_buildings, "height", sw, "uID", "area"
-        ).wc
+        ).series
         assert weighted[38] == approx(18.301, rel=1e-3)
 
         area = self.df_buildings.geometry.area
         sw = sw_high(k=3, gdf=self.df_tessellation, ids="uID")
         weighted = mm.WeightedCharacter(
             self.df_buildings, self.df_buildings.height, sw, "uID", area
-        ).wc
+        ).series
         assert weighted[38] == approx(18.301, rel=1e-3)
 
     def test_CoveredArea(self):
         sw = sw_high(gdf=self.df_tessellation, k=1, ids="uID")
-        covered_sw = mm.CoveredArea(self.df_tessellation, sw, "uID").ca
+        covered_sw = mm.CoveredArea(self.df_tessellation, sw, "uID").series
         assert covered_sw[0] == approx(24115.667, rel=1e-3)
 
     def test_PerimeterWall(self):
         sw = sw_high(gdf=self.df_buildings, k=1)
-        wall = mm.PerimeterWall(self.df_buildings).wall
-        wall_sw = mm.PerimeterWall(self.df_buildings, sw).wall
+        wall = mm.PerimeterWall(self.df_buildings).series
+        wall_sw = mm.PerimeterWall(self.df_buildings, sw).series
         assert wall[0] == wall_sw[0]
         assert wall[0] == 137.2106961418436
 
     def test_SegmentsLength(self):
-        absol = mm.SegmentsLength(self.df_streets).sl
-        mean = mm.SegmentsLength(self.df_streets, mean=True).sl
+        absol = mm.SegmentsLength(self.df_streets).series
+        mean = mm.SegmentsLength(self.df_streets, mean=True).series
         assert max(absol) == 1907.502238338006
         assert max(mean) == 249.5698434867373
diff --git a/tests/test_distribution.py b/tests/test_distribution.py
index 7743d1d..41d98e2 100644
--- a/tests/test_distribution.py
+++ b/tests/test_distribution.py
@@ -13,27 +13,27 @@ class TestDistribution:
         self.df_streets = gpd.read_file(test_file_path, layer="streets")
         self.df_tessellation = gpd.read_file(test_file_path, layer="tessellation")
         self.df_buildings["height"] = np.linspace(10.0, 30.0, 144)
-        self.df_buildings["volume"] = mm.Volume(self.df_buildings, "height").volume
+        self.df_buildings["volume"] = mm.Volume(self.df_buildings, "height").series
         self.df_streets["nID"] = mm.unique_id(self.df_streets)
         self.df_buildings["nID"] = mm.get_network_id(
             self.df_buildings, self.df_streets, "nID"
         )
 
     def test_Orientation(self):
-        self.df_buildings["orient"] = mm.Orientation(self.df_buildings).o
+        self.df_buildings["orient"] = mm.Orientation(self.df_buildings).series
         check = 41.05146788287027
         assert self.df_buildings["orient"][0] == check
 
     def test_SharedWallsRatio(self):
-        self.df_buildings["swr"] = mm.SharedWallsRatio(self.df_buildings, "uID").swr
+        self.df_buildings["swr"] = mm.SharedWallsRatio(self.df_buildings, "uID").series
         self.df_buildings["swr_uid"] = mm.SharedWallsRatio(
             self.df_buildings, range(len(self.df_buildings))
-        ).swr
+        ).series
         self.df_buildings["swr_array"] = mm.SharedWallsRatio(
             self.df_buildings, "uID", self.df_buildings.geometry.length
-        ).swr
+        ).series
         nonconsecutive = self.df_buildings.drop(2)
-        result = mm.SharedWallsRatio(nonconsecutive, "uID").swr
+        result = mm.SharedWallsRatio(nonconsecutive, "uID").series
         check = 0.3424804411228673
         assert self.df_buildings["swr"][10] == check
         assert self.df_buildings["swr_uid"][10] == check
@@ -41,24 +41,24 @@ class TestDistribution:
         assert result[10] == check
 
     def test_StreetAlignment(self):
-        self.df_buildings["orient"] = orient = mm.Orientation(self.df_buildings).o
+        self.df_buildings["orient"] = orient = mm.Orientation(self.df_buildings).series
         self.df_buildings["street_alignment"] = mm.StreetAlignment(
             self.df_buildings, self.df_streets, "orient", network_id="nID"
-        ).sa
+        ).series
         self.df_buildings["street_alignment2"] = mm.StreetAlignment(
             self.df_buildings,
             self.df_streets,
             "orient",
             left_network_id="nID",
             right_network_id="nID",
-        ).sa
+        ).series
         self.df_buildings["street_a_arr"] = mm.StreetAlignment(
             self.df_buildings,
             self.df_streets,
             orient,
             left_network_id=self.df_buildings["nID"],
             right_network_id=self.df_streets["nID"],
-        ).sa
+        ).series
 
         with pytest.raises(ValueError):
             self.df_buildings["street_alignment"] = mm.StreetAlignment(
@@ -78,16 +78,16 @@ class TestDistribution:
         assert self.df_buildings["street_a_arr"][0] == check
 
     def test_CellAlignment(self):
-        self.df_buildings["orient"] = blgori = mm.Orientation(self.df_buildings).o
+        self.df_buildings["orient"] = blgori = mm.Orientation(self.df_buildings).series
         self.df_tessellation["orient"] = tessori = mm.Orientation(
             self.df_tessellation
-        ).o
+        ).series
         self.df_buildings["c_align"] = mm.CellAlignment(
             self.df_buildings, self.df_tessellation, "orient", "orient", "uID", "uID"
-        ).ca
+        ).series
         self.df_buildings["c_align_array"] = mm.CellAlignment(
             self.df_buildings, self.df_tessellation, blgori, tessori, "uID", "uID"
-        ).ca
+        ).series
         check = abs(
             self.df_buildings["orient"][0]
             - self.df_tessellation[
@@ -97,18 +97,18 @@ class TestDistribution:
         assert self.df_buildings["c_align"][0] == check
 
     def test_Alignment(self):
-        self.df_buildings["orient"] = mm.Orientation(self.df_buildings).o
+        self.df_buildings["orient"] = mm.Orientation(self.df_buildings).series
         sw = Queen.from_dataframe(self.df_tessellation, ids="uID")
         self.df_buildings["align_sw"] = mm.Alignment(
             self.df_buildings, sw, "uID", self.df_buildings["orient"]
-        ).a
+        ).series
         assert self.df_buildings["align_sw"][0] == 18.299481296455237
 
     def test_NeighborDistance(self):
         sw = Queen.from_dataframe(self.df_tessellation, ids="uID")
         self.df_buildings["dist_sw"] = mm.NeighborDistance(
             self.df_buildings, sw, "uID"
-        ).nd
+        ).series
         check = 29.18589019096464
         assert self.df_buildings["dist_sw"][0] == check
 
@@ -117,10 +117,10 @@ class TestDistribution:
         swh = mm.sw_high(k=3, gdf=self.df_tessellation, ids="uID")
         self.df_buildings["m_dist_sw"] = mm.MeanInterbuildingDistance(
             self.df_buildings, sw, "uID", swh
-        ).mid
+        ).series
         self.df_buildings["m_dist"] = mm.MeanInterbuildingDistance(
             self.df_buildings, sw, "uID", order=3
-        ).mid
+        ).series
         check = 29.305457092042744
         assert self.df_buildings["m_dist_sw"][0] == check
         assert self.df_buildings["m_dist"][0] == check
@@ -128,7 +128,7 @@ class TestDistribution:
     def test_NeighboringStreetOrientationDeviation(self):
         self.df_streets["dev"] = mm.NeighboringStreetOrientationDeviation(
             self.df_streets
-        ).nsod
+        ).series
         check = 5.986848512501008
         assert self.df_streets["dev"].mean() == check
 
@@ -140,20 +140,22 @@ class TestDistribution:
             spatial_weights=sw,
             unique_id="uID",
             spatial_weights_higher=swh,
-        ).ba
+        ).series
         self.df_buildings["adj_sw_none"] = mm.BuildingAdjacency(
             self.df_buildings, unique_id="uID", spatial_weights_higher=swh
-        ).ba
+        ).series
         check = 0.2613824113909074
         assert self.df_buildings["adj_sw"].mean() == check
         assert self.df_buildings["adj_sw_none"].mean() == check
 
     def test_Neighbors(self):
         sw = Queen.from_dataframe(self.df_tessellation, ids="uID")
-        self.df_tessellation["nei_sw"] = mm.Neighbors(self.df_tessellation, sw, "uID").n
+        self.df_tessellation["nei_sw"] = mm.Neighbors(
+            self.df_tessellation, sw, "uID"
+        ).series
         self.df_tessellation["nei_wei"] = mm.Neighbors(
             self.df_tessellation, sw, "uID", weighted=True
-        ).n
+        ).series
         check = 5.180555555555555
         check_w = 0.029066398893536072
         assert self.df_tessellation["nei_sw"].mean() == check
diff --git a/tests/test_diversity.py b/tests/test_diversity.py
index 8162766..95e5f56 100644
--- a/tests/test_diversity.py
+++ b/tests/test_diversity.py
@@ -14,20 +14,22 @@ class TestDiversity:
         self.df_streets = gpd.read_file(test_file_path, layer="streets")
         self.df_tessellation = gpd.read_file(test_file_path, layer="tessellation")
         self.df_buildings["height"] = np.linspace(10.0, 30.0, 144)
-        self.df_tessellation["area"] = mm.Area(self.df_tessellation).area
+        self.df_tessellation["area"] = mm.Area(self.df_tessellation).series
         self.sw = sw_high(k=3, gdf=self.df_tessellation, ids="uID")
 
     def test_Range(self):
-        full_sw = mm.Range(self.df_tessellation, "area", self.sw, "uID").r
+        full_sw = mm.Range(self.df_tessellation, "area", self.sw, "uID").series
         assert full_sw[0] == approx(8255.372, rel=1e-3)
         area = self.df_tessellation["area"]
-        full2 = mm.Range(self.df_tessellation, area, self.sw, "uID").r
+        full2 = mm.Range(self.df_tessellation, area, self.sw, "uID").series
         assert full2[0] == approx(8255.372, rel=1e-3)
-        limit = mm.Range(self.df_tessellation, "area", self.sw, "uID", rng=(10, 90)).r
+        limit = mm.Range(
+            self.df_tessellation, "area", self.sw, "uID", rng=(10, 90)
+        ).series
         assert limit[0] == approx(4122.139, rel=1e-3)
 
     def test_Theil(self):
-        full_sw = mm.Theil(self.df_tessellation, "area", self.sw, "uID").t
+        full_sw = mm.Theil(self.df_tessellation, "area", self.sw, "uID").series
         assert full_sw[0] == approx(0.25744684)
         limit = mm.Theil(
             self.df_tessellation,
@@ -35,15 +37,15 @@ class TestDiversity:
             self.sw,
             "uID",
             rng=(10, 90),
-        ).t
+        ).series
         assert limit[0] == approx(0.1330295)
         zeros = mm.Theil(
             self.df_tessellation, np.zeros(len(self.df_tessellation)), self.sw, "uID"
-        ).t
+        ).series
         assert zeros[0] == 0
 
     def test_Simpson(self):
-        ht_sw = mm.Simpson(self.df_tessellation, "area", self.sw, "uID").s
+        ht_sw = mm.Simpson(self.df_tessellation, "area", self.sw, "uID").series
         assert ht_sw[0] == 0.385
         quan_sw = mm.Simpson(
             self.df_tessellation,
@@ -52,7 +54,7 @@ class TestDiversity:
             "uID",
             binning="quantiles",
             k=3,
-        ).s
+        ).series
         assert quan_sw[0] == 0.395
         with pytest.raises(ValueError):
             ht_sw = mm.Simpson(
@@ -60,12 +62,14 @@ class TestDiversity:
             )
 
     def test_Gini(self):
-        full_sw = mm.Gini(self.df_tessellation, "area", self.sw, "uID").g
+        full_sw = mm.Gini(self.df_tessellation, "area", self.sw, "uID").series
         assert full_sw[0] == approx(0.3945388)
-        limit = mm.Gini(self.df_tessellation, "area", self.sw, "uID", rng=(10, 90)).g
+        limit = mm.Gini(
+            self.df_tessellation, "area", self.sw, "uID", rng=(10, 90)
+        ).series
         assert limit[0] == approx(0.28532814)
         self.df_tessellation["negative"] = (
             self.df_tessellation.area - self.df_tessellation.area.mean()
         )
         with pytest.raises(ValueError):
-            mm.Gini(self.df_tessellation, "negative", self.sw, "uID").g
+            mm.Gini(self.df_tessellation, "negative", self.sw, "uID").series
diff --git a/tests/test_intensity.py b/tests/test_intensity.py
index 210fab6..d31110f 100644
--- a/tests/test_intensity.py
+++ b/tests/test_intensity.py
@@ -17,7 +17,7 @@ class TestIntensity:
         self.df_buildings["height"] = np.linspace(10.0, 30.0, 144)
         self.df_tessellation["area"] = self.df_tessellation.geometry.area
         self.df_buildings["area"] = self.df_buildings.geometry.area
-        self.df_buildings["fl_area"] = mm.FloorArea(self.df_buildings, "height").fa
+        self.df_buildings["fl_area"] = mm.FloorArea(self.df_buildings, "height").series
         self.df_buildings["nID"] = mm.get_network_id(
             self.df_buildings, self.df_streets, "nID"
         )
@@ -31,7 +31,7 @@ class TestIntensity:
     def test_AreaRatio(self):
         car = mm.AreaRatio(
             self.df_tessellation, self.df_buildings, "area", "area", "uID"
-        ).ar
+        ).series
         carlr = mm.AreaRatio(
             self.df_tessellation,
             self.df_buildings,
@@ -39,7 +39,7 @@ class TestIntensity:
             "area",
             left_unique_id="uID",
             right_unique_id="uID",
-        ).ar
+        ).series
         check = 0.3206556897709747
         assert car.mean() == check
         assert carlr.mean() == check
@@ -49,7 +49,7 @@ class TestIntensity:
             self.df_tessellation.area,
             self.df_buildings.fl_area,
             "uID",
-        ).ar
+        ).series
         check = 1.910949846262234
         assert far.mean() == check
         with pytest.raises(ValueError):
@@ -72,11 +72,13 @@ class TestIntensity:
             )
 
     def test_Count(self):
-        eib = mm.Count(self.blocks, self.df_buildings, "bID", "bID").c
-        weib = mm.Count(self.blocks, self.df_buildings, "bID", "bID", weighted=True).c
+        eib = mm.Count(self.blocks, self.df_buildings, "bID", "bID").series
+        weib = mm.Count(
+            self.blocks, self.df_buildings, "bID", "bID", weighted=True
+        ).series
         weis = mm.Count(
             self.df_streets, self.df_buildings, "nID", "nID", weighted=True
-        ).c
+        ).series
         check_eib = [13, 14, 8, 26, 24, 17, 23, 19]
         check_weib = 0.00040170607189453996
         assert eib.tolist() == check_eib
@@ -84,22 +86,24 @@ class TestIntensity:
         assert weis.mean() == 0.020524232642849215
 
     def test_Courtyards(self):
-        courtyards = mm.Courtyards(self.df_buildings, "bID").c
+        courtyards = mm.Courtyards(self.df_buildings, "bID").series
         sw = Queen.from_dataframe(self.df_buildings)
-        courtyards_wm = mm.Courtyards(self.df_buildings, self.df_buildings.bID, sw).c
+        courtyards_wm = mm.Courtyards(
+            self.df_buildings, self.df_buildings.bID, sw
+        ).series
         check = 0.6805555555555556
         assert courtyards.mean() == check
         assert courtyards_wm.mean() == check
 
     def test_BlocksCount(self):
         sw = mm.sw_high(k=5, gdf=self.df_tessellation, ids="uID")
-        count = mm.BlocksCount(self.df_tessellation, "bID", sw, "uID").bc
+        count = mm.BlocksCount(self.df_tessellation, "bID", sw, "uID").series
         count2 = mm.BlocksCount(
             self.df_tessellation, self.df_tessellation.bID, sw, "uID"
-        ).bc
+        ).series
         unweigthed = mm.BlocksCount(
             self.df_tessellation, "bID", sw, "uID", weighted=False
-        ).bc
+        ).series
         check = 3.142437439120778e-05
         check2 = 5.222222222222222
         assert count.mean() == check
@@ -111,18 +115,20 @@ class TestIntensity:
             )
 
     def test_Reached(self):
-        count = mm.Reached(self.df_streets, self.df_buildings, "nID", "nID").r
+        count = mm.Reached(self.df_streets, self.df_buildings, "nID", "nID").series
         area = mm.Reached(
             self.df_streets,
             self.df_buildings,
             self.df_streets.nID,
             self.df_buildings.nID,
             mode="sum",
-        ).r
+        ).series
         mean = mm.Reached(
             self.df_streets, self.df_buildings, "nID", "nID", mode="mean"
-        ).r
-        std = mm.Reached(self.df_streets, self.df_buildings, "nID", "nID", mode="std").r
+        ).series
+        std = mm.Reached(
+            self.df_streets, self.df_buildings, "nID", "nID", mode="std"
+        ).series
         area_v = mm.Reached(
             self.df_streets,
             self.df_buildings,
@@ -130,7 +136,7 @@ class TestIntensity:
             "nID",
             mode="sum",
             values="fl_area",
-        ).r
+        ).series
         mean_v = mm.Reached(
             self.df_streets,
             self.df_buildings,
@@ -138,7 +144,7 @@ class TestIntensity:
             "nID",
             mode="mean",
             values="fl_area",
-        ).r
+        ).series
         std_v = mm.Reached(
             self.df_streets,
             self.df_buildings,
@@ -146,9 +152,11 @@ class TestIntensity:
             "nID",
             mode="std",
             values="fl_area",
-        ).r
+        ).series
         sw = mm.sw_high(k=2, gdf=self.df_streets)
-        count_sw = mm.Reached(self.df_streets, self.df_buildings, "nID", "nID", sw).r
+        count_sw = mm.Reached(
+            self.df_streets, self.df_buildings, "nID", "nID", sw
+        ).series
         assert max(count) == 18
         assert max(area) == 18085.45897711331
         assert max(count_sw) == 138
@@ -163,11 +171,11 @@ class TestIntensity:
         nx = mm.node_degree(nx)
         nodes, edges, W = mm.nx_to_gdf(nx, spatial_weights=True)
         sw = mm.sw_high(k=3, weights=W)
-        density = mm.NodeDensity(nodes, edges, sw).nd
+        density = mm.NodeDensity(nodes, edges, sw).series
         weighted = mm.NodeDensity(
             nodes, edges, sw, weighted=True, node_degree="degree"
-        ).nd
-        array = mm.NodeDensity(nodes, edges, W).nd
+        ).series
+        array = mm.NodeDensity(nodes, edges, W).series
         assert density.mean() == 0.012690163074599968
         assert weighted.mean() == 0.023207675994368446
         assert array.mean() == 0.008554067995928158
@@ -180,10 +188,10 @@ class TestIntensity:
             sw,
             "uID",
             self.df_tessellation.area,
-        ).d
+        ).series
         dens2 = mm.Density(
             self.df_tessellation, self.df_buildings["fl_area"], sw, "uID"
-        ).d
+        ).series
         check = 1.661587
         assert dens.mean() == approx(check)
         assert dens2.mean() == approx(check)
diff --git a/tests/test_shape.py b/tests/test_shape.py
index d0b84af..f93e8d3 100644
--- a/tests/test_shape.py
+++ b/tests/test_shape.py
@@ -15,10 +15,10 @@ class TestShape:
         self.df_streets = gpd.read_file(test_file_path, layer="streets")
         self.df_tessellation = gpd.read_file(test_file_path, layer="tessellation")
         self.df_buildings["height"] = np.linspace(10.0, 30.0, 144)
-        self.df_buildings["volume"] = mm.Volume(self.df_buildings, "height").volume
+        self.df_buildings["volume"] = mm.Volume(self.df_buildings, "height").series
 
     def test_FormFactor(self):
-        self.df_buildings["ff"] = mm.FormFactor(self.df_buildings, "volume").ff
+        self.df_buildings["ff"] = mm.FormFactor(self.df_buildings, "volume").series
         check = (self.df_buildings.geometry[0].area) / (
             self.df_buildings.volume[0] ** (2 / 3)
         )
@@ -26,16 +26,16 @@ class TestShape:
 
         self.df_buildings["ff"] = mm.FormFactor(
             self.df_buildings,
-            mm.Volume(self.df_buildings, "height").volume,
+            mm.Volume(self.df_buildings, "height").series,
             areas=self.df_buildings.geometry.area,
-        ).ff
+        ).series
         check = (self.df_buildings.geometry[0].area) / (
             self.df_buildings.volume[0] ** (2 / 3)
         )
         assert self.df_buildings["ff"][0] == check
 
     def test_FractalDimension(self):
-        self.df_buildings["fd"] = mm.FractalDimension(self.df_buildings).fd
+        self.df_buildings["fd"] = mm.FractalDimension(self.df_buildings).series
         check = (
             2
             * math.log(self.df_buildings.geometry[0].length / 4)
@@ -47,30 +47,30 @@ class TestShape:
             self.df_buildings,
             areas=self.df_buildings.geometry.area,
             perimeters=self.df_buildings.geometry.length,
-        ).fd
+        ).series
         assert self.df_buildings["fd2"][0] == check
 
     def test_VolumeFacadeRatio(self):
         self.df_buildings["peri"] = self.df_buildings.geometry.length
         self.df_buildings["vfr"] = mm.VolumeFacadeRatio(
             self.df_buildings, "height", "volume", "peri"
-        ).vfr
+        ).series
         check = self.df_buildings.volume[0] / (
             self.df_buildings.peri[0] * self.df_buildings.height[0]
         )
         assert self.df_buildings["vfr"][0] == check
 
         peri = self.df_buildings.geometry.length
-        volume = mm.Volume(self.df_buildings, "height").volume
+        volume = mm.Volume(self.df_buildings, "height").series
         self.df_buildings["vfr2"] = mm.VolumeFacadeRatio(
             self.df_buildings, "height", volume, peri
-        ).vfr
+        ).series
         assert self.df_buildings["vfr2"][0] == check
 
         self.df_buildings["peri"] = self.df_buildings.geometry.length
         self.df_buildings["vfr3"] = mm.VolumeFacadeRatio(
             self.df_buildings, "height"
-        ).vfr
+        ).series
 
         assert self.df_buildings["vfr3"][0] == check
 
@@ -78,7 +78,7 @@ class TestShape:
         self.df_buildings["area"] = self.df_buildings.geometry.area
         self.df_buildings["circom"] = mm.CircularCompactness(
             self.df_buildings, "area"
-        ).cc
+        ).series
         check = self.df_buildings.area[0] / (
             _circle_area(
                 list(self.df_buildings.geometry[0].convex_hull.exterior.coords)
@@ -89,14 +89,14 @@ class TestShape:
         area = self.df_buildings.geometry.area
         self.df_buildings["circom2"] = mm.CircularCompactness(
             self.df_buildings, area
-        ).cc
+        ).series
         assert self.df_buildings["circom2"][0] == check
 
-        self.df_buildings["circom3"] = mm.CircularCompactness(self.df_buildings).cc
+        self.df_buildings["circom3"] = mm.CircularCompactness(self.df_buildings).series
         assert self.df_buildings["circom3"][0] == check
 
     def test_SquareCompactness(self):
-        self.df_buildings["sqcom"] = mm.SquareCompactness(self.df_buildings).sc
+        self.df_buildings["sqcom"] = mm.SquareCompactness(self.df_buildings).series
         check = (
             (4 * math.sqrt(self.df_buildings.geometry.area[0]))
             / (self.df_buildings.geometry.length[0])
@@ -107,12 +107,12 @@ class TestShape:
             self.df_buildings,
             areas=self.df_buildings.geometry.area,
             perimeters=self.df_buildings.geometry.length,
-        ).sc
+        ).series
 
         assert self.df_buildings["sqcom2"][0] == check
 
     def test_Convexeity(self):
-        self.df_buildings["conv"] = mm.Convexeity(self.df_buildings).c
+        self.df_buildings["conv"] = mm.Convexeity(self.df_buildings).series
         check = (
             self.df_buildings.geometry.area[0]
             / self.df_buildings.geometry.convex_hull.area[0]
@@ -121,25 +121,25 @@ class TestShape:
 
         self.df_buildings["conv2"] = mm.Convexeity(
             self.df_buildings, areas=self.df_buildings.geometry.area
-        ).c
+        ).series
 
         assert self.df_buildings["conv2"][0] == check
 
     def test_CourtyardIndex(self):
-        cas = self.df_buildings["cas"] = mm.CourtyardArea(self.df_buildings).ca
-        self.df_buildings["cix"] = mm.CourtyardIndex(self.df_buildings, "cas").ci
+        cas = self.df_buildings["cas"] = mm.CourtyardArea(self.df_buildings).series
+        self.df_buildings["cix"] = mm.CourtyardIndex(self.df_buildings, "cas").series
         self.df_buildings["cix_array"] = mm.CourtyardIndex(
             self.df_buildings, cas, self.df_buildings.geometry.area
-        ).ci
+        ).series
         check = self.df_buildings.cas[80] / self.df_buildings.geometry.area[80]
         assert self.df_buildings["cix"][80] == check
         assert self.df_buildings["cix_array"][80] == check
 
     def test_Rectangularity(self):
-        self.df_buildings["rect"] = mm.Rectangularity(self.df_buildings).r
+        self.df_buildings["rect"] = mm.Rectangularity(self.df_buildings).series
         self.df_buildings["rect_array"] = mm.Rectangularity(
             self.df_buildings, self.df_buildings.geometry.area
-        ).r
+        ).series
         check = (
             self.df_buildings.geometry[0].area
             / self.df_buildings.geometry[0].minimum_rotated_rectangle.area
@@ -148,11 +148,11 @@ class TestShape:
         assert self.df_buildings["rect_array"][0] == check
 
     def test_ShapeIndex(self):
-        la = self.df_buildings["la"] = mm.LongestAxisLength(self.df_buildings).lal
-        self.df_buildings["shape_index"] = mm.ShapeIndex(self.df_buildings, "la").si
+        la = self.df_buildings["la"] = mm.LongestAxisLength(self.df_buildings).series
+        self.df_buildings["shape_index"] = mm.ShapeIndex(self.df_buildings, "la").series
         self.df_buildings["shape_index_array"] = mm.ShapeIndex(
             self.df_buildings, la, self.df_buildings.geometry.area
-        ).si
+        ).series
         check = math.sqrt(self.df_buildings.area[0] / math.pi) / (
             0.5 * self.df_buildings.la[0]
         )
@@ -160,28 +160,30 @@ class TestShape:
         assert self.df_buildings["shape_index_array"][0] == check
 
     def test_Corners(self):
-        self.df_buildings["corners"] = mm.Corners(self.df_buildings).c
+        self.df_buildings["corners"] = mm.Corners(self.df_buildings).series
         check = 24
         assert self.df_buildings["corners"][0] == check
 
     def test_Squareness(self):
-        self.df_buildings["squ"] = mm.Squareness(self.df_buildings).s
+        self.df_buildings["squ"] = mm.Squareness(self.df_buildings).series
         check = round(3.7075816043359855, 4)
         assert round(self.df_buildings["squ"][0], 4) == check
 
     def test_EquivalentRectangularIndex(self):
-        self.df_buildings["eri"] = mm.EquivalentRectangularIndex(self.df_buildings).eri
+        self.df_buildings["eri"] = mm.EquivalentRectangularIndex(
+            self.df_buildings
+        ).series
         self.df_buildings["eri_array"] = mm.EquivalentRectangularIndex(
             self.df_buildings,
             areas=self.df_buildings.geometry.area,
             perimeters=self.df_buildings.geometry.length,
-        ).eri
+        ).series
         check = 0.7879229963118455
         assert self.df_buildings["eri"][0] == check
         assert self.df_buildings["eri_array"][0] == check
 
     def test_Elongation(self):
-        self.df_buildings["elo"] = mm.Elongation(self.df_buildings).e
+        self.df_buildings["elo"] = mm.Elongation(self.df_buildings).series
         check = 0.9082437463675544
         assert self.df_buildings["elo"][0] == check
 
@@ -196,7 +198,7 @@ class TestShape:
         assert self.df_buildings["ccddev"][0] == check_devs
 
     def test_Linearity(self):
-        self.df_streets["lin"] = mm.Linearity(self.df_streets).linearity
+        self.df_streets["lin"] = mm.Linearity(self.df_streets).series
         euclidean = Point(self.df_streets.geometry[0].coords[0]).distance(
             Point(self.df_streets.geometry[0].coords[-1])
         )
@@ -204,13 +206,13 @@ class TestShape:
         assert self.df_streets["lin"][0] == check
 
     def test_CompactnessWeightedAxis(self):
-        self.df_buildings["cwa"] = mm.CompactnessWeightedAxis(self.df_buildings).cwa
+        self.df_buildings["cwa"] = mm.CompactnessWeightedAxis(self.df_buildings).series
         self.df_buildings["cwa_array"] = mm.CompactnessWeightedAxis(
             self.df_buildings,
             areas=self.df_buildings.geometry.area,
             perimeters=self.df_buildings.geometry.length,
-            longest_axis=mm.LongestAxisLength(self.df_buildings).lal,
-        ).cwa
+            longest_axis=mm.LongestAxisLength(self.df_buildings).series,
+        ).series
         check = 26.32772969906327
         assert self.df_buildings["cwa"][0] == check
         assert self.df_buildings["cwa_array"][0] == check