Repository: alteryx/woodwork (python)

Issue:
Change FullName to PersonFullName
- To be more specific about what the Logical Type represents, we can change FullName to PersonFullName, so that end-users clearly understand its for names like "Mr. Smith, Mrs. Miller, John Bell"

Pull request:
Change FullName to PersonFullName
Closes #695 by renaming FullName logical type to PersonFullName.

Patch:
diff --git a/README.md b/README.md
index 145df18..9ee8a6b 100644
--- a/README.md
+++ b/README.md
@@ -50,7 +50,7 @@ df = pd.read_csv("https://api.featurelabs.com/datasets/online-retail-logs-2018-0
 df.ww.init(name='retail', make_index=True, index='order_product_id')
 df.ww.set_types(logical_types={
     'quantity': 'Integer',
-    'customer_name': 'FullName',
+    'customer_name': 'PersonFullName',
     'country': 'Categorical',
     'order_id': 'Categorical'
 })
@@ -59,7 +59,7 @@ df.ww
 
 ```
                    Physical Type     Logical Type Semantic Tag(s)
-Column                                                           
+Column
 order_product_id           Int64          Integer       ['index']
 order_id                category      Categorical    ['category']
 product_id              category      Categorical    ['category']
@@ -67,7 +67,7 @@ description               string  NaturalLanguage              []
 quantity                   Int64          Integer     ['numeric']
 order_date        datetime64[ns]         Datetime              []
 unit_price               float64           Double     ['numeric']
-customer_name             string         FullName              []
+customer_name             string   PersonFullName              []
 country                 category      Categorical    ['category']
 total                    float64           Double     ['numeric']
 cancelled                boolean          Boolean              []
diff --git a/docs/source/api_reference.rst b/docs/source/api_reference.rst
index 90a730c..e274e83 100644
--- a/docs/source/api_reference.rst
+++ b/docs/source/api_reference.rst
@@ -118,12 +118,12 @@ Logical Types
     Double
     EmailAddress
     Filepath
-    FullName
     Integer
     IPAddress
     LatLong
     NaturalLanguage
     Ordinal
+    PersonFullName
     PhoneNumber
     PostalCode
     SubRegionCode
diff --git a/docs/source/guides/understanding_types_and_tags.ipynb b/docs/source/guides/understanding_types_and_tags.ipynb
index 1a19a02..97ba111 100644
--- a/docs/source/guides/understanding_types_and_tags.ipynb
+++ b/docs/source/guides/understanding_types_and_tags.ipynb
@@ -171,7 +171,7 @@
     "logical_types = {\n",
     "    'integers': 'Integer',\n",
     "    'bools': 'Boolean',\n",
-    "    'names': 'FullName'\n",
+    "    'names': 'PersonFullName'\n",
     "}\n",
     "\n",
     "df.ww.init(logical_types=logical_types)\n",
@@ -192,7 +192,7 @@
    "outputs": [],
    "source": [
     "logical_types = {\n",
-    "    'names': 'FullName'\n",
+    "    'names': 'PersonFullName'\n",
     "}\n",
     "df.ww.init(logical_types=logical_types)\n",
     "df.ww"
@@ -202,7 +202,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "With that input, you get the same results. Woodwork used the `FullName` logical type you assigned to the `names` column and then correctly inferred the logical types for the `integers` and `bools` columns.\n",
+    "With that input, you get the same results. Woodwork used the `PersonFullName` logical type you assigned to the `names` column and then correctly inferred the logical types for the `integers` and `bools` columns.\n",
     "\n",
     "Next, look at what happens if we do not specify any logical types."
    ]
@@ -221,9 +221,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "In this case, Woodwork correctly inferred type for the `integers` and `bools` columns, but failed to recognize the `names` column should have a logical type of `FullName`. In situations like this, Woodwork provides users the ability to change the logical type.\n",
+    "In this case, Woodwork correctly inferred type for the `integers` and `bools` columns, but failed to recognize the `names` column should have a logical type of `PersonFullName`. In situations like this, Woodwork provides users the ability to change the logical type.\n",
     "\n",
-    "Update the logical type of the `names` column to be `FullName`."
+    "Update the logical type of the `names` column to be `PersonFullName`."
    ]
   },
   {
@@ -232,7 +232,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "df.ww.set_types(logical_types={'names': 'FullName'})\n",
+    "df.ww.set_types(logical_types={'names': 'PersonFullName'})\n",
     "df.ww"
    ]
   },
@@ -240,9 +240,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "If you look carefully at the output, you can see that several things happened to the `names` column. First, the correct `FullName` logical type has been applied. Second, the physical type of the column has changed from `category` to `string` to match the standard physical type for the `FullName` logical type. Finally, the standard tag of `category` that was previously set for the `names` column has been removed because it no longer applies.\n",
+    "If you look carefully at the output, you can see that several things happened to the `names` column. First, the correct `PersonFullName` logical type has been applied. Second, the physical type of the column has changed from `category` to `string` to match the standard physical type for the `PersonFullName` logical type. Finally, the standard tag of `category` that was previously set for the `names` column has been removed because it no longer applies.\n",
     "\n",
-    "When setting the LogicalType for a column, the type can be specified by passing a string representing the camel-case name of the LogicalType class as you have done in previous examples. Alternatively, you can pass the class directly instead of a string or the snake-case name of the string. All of these would be valid values to use for setting the FullName Logical type: `FullName`, `\"FullName\"` or `\"full_name\"`. \n",
+    "When setting the LogicalType for a column, the type can be specified by passing a string representing the camel-case name of the LogicalType class as you have done in previous examples. Alternatively, you can pass the class directly instead of a string or the snake-case name of the string. All of these would be valid values to use for setting the PersonFullName Logical type: `PersonFullName`, `\"PersonFullName\"` or `\"person_full_name\"`. \n",
     "\n",
     "Note—in order to use the class name, first you have to import the class."
    ]
diff --git a/docs/source/guides/using_woodwork_with_dask_and_koalas.ipynb b/docs/source/guides/using_woodwork_with_dask_and_koalas.ipynb
index 84e0a54..88ce82c 100644
--- a/docs/source/guides/using_woodwork_with_dask_and_koalas.ipynb
+++ b/docs/source/guides/using_woodwork_with_dask_and_koalas.ipynb
@@ -86,7 +86,7 @@
     "    'quantity': 'Integer',\n",
     "    'order_date': 'Datetime',\n",
     "    'unit_price': 'Double',\n",
-    "    'customer_name': 'FullName',\n",
+    "    'customer_name': 'PersonFullName',\n",
     "    'country': 'Categorical',\n",
     "    'total': 'Double',\n",
     "    'cancelled': 'Boolean',\n",
@@ -210,7 +210,7 @@
     "    'quantity': 'Integer',\n",
     "    'order_date': 'Datetime',\n",
     "    'unit_price': 'Double',\n",
-    "    'customer_name': 'FullName',\n",
+    "    'customer_name': 'PersonFullName',\n",
     "    'country': 'Categorical',\n",
     "    'total': 'Double',\n",
     "    'cancelled': 'Boolean',\n",
diff --git a/docs/source/release_notes.rst b/docs/source/release_notes.rst
index b74ab35..84f18ef 100644
--- a/docs/source/release_notes.rst
+++ b/docs/source/release_notes.rst
@@ -6,15 +6,17 @@ Release Notes
     * Enhancements
     * Fixes
     * Changes
+        * Rename ``FullName`` logical type to ``PersonFullName`` (:pr:`740`)
         * Rename ``ZIPCode`` logical type to ``PostalCode`` (:pr:`741`)
     * Documentation Changes
     * Testing Changes
 
     Thanks to the following people for contributing to this release:
-    :user:`thehomebrewnerd`
+    :user:`jeff-hernandez`, :user:`thehomebrewnerd`
 
 **Breaking Changes**
     * The ``ZIPCode`` logical type has been renamed to ``PostalCode``
+    * The ``FullName`` logical type has been renamed to ``PersonFullName``
 
 **v0.1.0 March 22, 2021**
     * Enhancements
diff --git a/docs/source/start.ipynb b/docs/source/start.ipynb
index 1d24079..05d63d2 100644
--- a/docs/source/start.ipynb
+++ b/docs/source/start.ipynb
@@ -106,7 +106,7 @@
    "metadata": {},
    "source": [
     "## Updating Logical Types\n",
-    "If the initial inference was not to our liking, the logical type can be changed to a more appropriate value. Let's change some of the columns to a different logical type to illustrate this process. In this case, set the logical type for the `order_product_id` and `country` columns to be `Categorical` and set `customer_name` to have a logical type of `FullName`."
+    "If the initial inference was not to our liking, the logical type can be changed to a more appropriate value. Let's change some of the columns to a different logical type to illustrate this process. In this case, set the logical type for the `order_product_id` and `country` columns to be `Categorical` and set `customer_name` to have a logical type of `PersonFullName`."
    ]
   },
   {
@@ -116,7 +116,7 @@
    "outputs": [],
    "source": [
     "df.ww.set_types(logical_types={\n",
-    "    'customer_name': 'FullName',\n",
+    "    'customer_name': 'PersonFullName',\n",
     "    'country': 'Categorical',\n",
     "    'order_id': 'Categorical'\n",
     "})\n",
@@ -492,7 +492,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.5"
+   "version": "3.8.8"
   }
  },
  "nbformat": 4,
diff --git a/woodwork/logical_types.py b/woodwork/logical_types.py
index bfe6010..69995c0 100644
--- a/woodwork/logical_types.py
+++ b/woodwork/logical_types.py
@@ -156,7 +156,7 @@ class Filepath(LogicalType):
     primary_dtype = 'string'
 
 
-class FullName(LogicalType):
+class PersonFullName(LogicalType):
     """Represents Logical Types that may contain first, middle and last names,
     including honorifics and suffixes.
 
diff --git a/woodwork/type_sys/type_system.py b/woodwork/type_sys/type_system.py
index 7ece0b5..a939d11 100644
--- a/woodwork/type_sys/type_system.py
+++ b/woodwork/type_sys/type_system.py
@@ -16,13 +16,13 @@ from woodwork.logical_types import (
     Double,
     EmailAddress,
     Filepath,
-    FullName,
     Integer,
     IPAddress,
     LatLong,
     LogicalType,
     NaturalLanguage,
     Ordinal,
+    PersonFullName,
     PhoneNumber,
     PostalCode,
     SubRegionCode,
@@ -41,7 +41,7 @@ DEFAULT_INFERENCE_FUNCTIONS = {
     Double: double_func,
     EmailAddress: None,
     Filepath: None,
-    FullName: None,
+    PersonFullName: None,
     Integer: integer_func,
     IPAddress: None,
     LatLong: None,
@@ -62,7 +62,7 @@ DEFAULT_RELATIONSHIPS = [
     (Categorical, SubRegionCode),
     (NaturalLanguage, EmailAddress),
     (NaturalLanguage, Filepath),
-    (NaturalLanguage, FullName),
+    (NaturalLanguage, PersonFullName),
     (NaturalLanguage, IPAddress),
     (NaturalLanguage, PhoneNumber),
     (NaturalLanguage, URL),


Test patch:
diff --git a/woodwork/tests/accessor/test_statistics.py b/woodwork/tests/accessor/test_statistics.py
index 58a212a..d18c24d 100644
--- a/woodwork/tests/accessor/test_statistics.py
+++ b/woodwork/tests/accessor/test_statistics.py
@@ -10,12 +10,12 @@ from woodwork.logical_types import (
     Double,
     EmailAddress,
     Filepath,
-    FullName,
     Integer,
     IPAddress,
     LatLong,
     NaturalLanguage,
     Ordinal,
+    PersonFullName,
     PhoneNumber,
     PostalCode,
     SubRegionCode,
@@ -229,7 +229,7 @@ def test_describe_accessor_method(describe_df):
     formatted_datetime_ltypes = [Datetime(datetime_format='%Y~%m~%d')]
     timedelta_ltypes = [Timedelta]
     numeric_ltypes = [Double, Integer]
-    natural_language_ltypes = [EmailAddress, Filepath, FullName, IPAddress,
+    natural_language_ltypes = [EmailAddress, Filepath, PersonFullName, IPAddress,
                                PhoneNumber, URL]
     latlong_ltypes = [LatLong]
 
diff --git a/woodwork/tests/accessor/test_table_accessor.py b/woodwork/tests/accessor/test_table_accessor.py
index 0e16e0d..716f874 100644
--- a/woodwork/tests/accessor/test_table_accessor.py
+++ b/woodwork/tests/accessor/test_table_accessor.py
@@ -23,12 +23,12 @@ from woodwork.logical_types import (
     Double,
     EmailAddress,
     Filepath,
-    FullName,
     Integer,
     IPAddress,
     LatLong,
     NaturalLanguage,
     Ordinal,
+    PersonFullName,
     PhoneNumber,
     PostalCode,
     SubRegionCode
@@ -667,7 +667,7 @@ def test_sets_string_dtype_on_init():
 
     logical_types = [
         Filepath,
-        FullName,
+        PersonFullName,
         IPAddress,
         NaturalLanguage,
         PhoneNumber,
@@ -1085,7 +1085,7 @@ def test_accessor_with_falsy_column_names(falsy_names_df):
 
 def test_get_invalid_schema_message(sample_df):
     schema_df = sample_df.copy()
-    schema_df.ww.init(name='test_schema', index='id', logical_types={'id': 'Double', 'full_name': 'FullName'})
+    schema_df.ww.init(name='test_schema', index='id', logical_types={'id': 'Double', 'full_name': 'PersonFullName'})
     schema = schema_df.ww.schema
 
     assert _get_invalid_schema_message(schema_df, schema) is None
@@ -1131,7 +1131,7 @@ def test_get_invalid_schema_message_index_checks(sample_df):
         pytest.xfail('Index validation not performed for Dask or Koalas DataFrames')
 
     schema_df = sample_df.copy()
-    schema_df.ww.init(name='test_schema', index='id', logical_types={'id': 'Double', 'full_name': 'FullName'})
+    schema_df.ww.init(name='test_schema', index='id', logical_types={'id': 'Double', 'full_name': 'PersonFullName'})
     schema = schema_df.ww.schema
 
     different_underlying_index_df = schema_df.copy()
@@ -1274,7 +1274,7 @@ def test_get_subset_df_with_schema(sample_df):
     schema_df.ww.init(time_index='signup_date',
                       index='id',
                       name='df_name',
-                      logical_types={'full_name': FullName,
+                      logical_types={'full_name': PersonFullName,
                                      'email': EmailAddress,
                                      'phone_number': PhoneNumber,
                                      'age': Double,
@@ -1323,7 +1323,7 @@ def test_get_subset_df_use_dataframe_order(sample_df):
 
 def test_select_ltypes_no_match_and_all(sample_df):
     schema_df = sample_df.copy()
-    schema_df.ww.init(logical_types={'full_name': FullName,
+    schema_df.ww.init(logical_types={'full_name': PersonFullName,
                                      'email': EmailAddress,
                                      'phone_number': PhoneNumber,
                                      'age': Double,
@@ -1342,50 +1342,50 @@ def test_select_ltypes_no_match_and_all(sample_df):
 
 def test_select_ltypes_strings(sample_df):
     schema_df = sample_df.copy()
-    schema_df.ww.init(logical_types={'full_name': FullName,
+    schema_df.ww.init(logical_types={'full_name': PersonFullName,
                                      'email': EmailAddress,
                                      'phone_number': PhoneNumber,
                                      'age': Double,
                                      'signup_date': Datetime,
                                      })
 
-    df_multiple_ltypes = schema_df.ww.select(['FullName', 'email_address', 'double', 'Boolean', 'datetime'])
+    df_multiple_ltypes = schema_df.ww.select(['PersonFullName', 'email_address', 'double', 'Boolean', 'datetime'])
     assert len(df_multiple_ltypes.columns) == 5
     assert 'phone_number' not in df_multiple_ltypes.columns
     assert 'id' not in df_multiple_ltypes.columns
 
-    df_single_ltype = schema_df.ww.select('full_name')
+    df_single_ltype = schema_df.ww.select('person_full_name')
     assert set(df_single_ltype.columns) == {'full_name'}
 
 
 def test_select_ltypes_objects(sample_df):
     schema_df = sample_df.copy()
-    schema_df.ww.init(logical_types={'full_name': FullName,
+    schema_df.ww.init(logical_types={'full_name': PersonFullName,
                                      'email': EmailAddress,
                                      'phone_number': PhoneNumber,
                                      'age': Double,
                                      'signup_date': Datetime,
                                      })
 
-    df_multiple_ltypes = schema_df.ww.select([FullName, EmailAddress, Double, Boolean, Datetime])
+    df_multiple_ltypes = schema_df.ww.select([PersonFullName, EmailAddress, Double, Boolean, Datetime])
     assert len(df_multiple_ltypes.columns) == 5
     assert 'phone_number' not in df_multiple_ltypes.columns
     assert 'id' not in df_multiple_ltypes.columns
 
-    df_single_ltype = schema_df.ww.select(FullName)
+    df_single_ltype = schema_df.ww.select(PersonFullName)
     assert len(df_single_ltype.columns) == 1
 
 
 def test_select_ltypes_mixed(sample_df):
     schema_df = sample_df.copy()
-    schema_df.ww.init(logical_types={'full_name': FullName,
+    schema_df.ww.init(logical_types={'full_name': PersonFullName,
                                      'email': EmailAddress,
                                      'phone_number': PhoneNumber,
                                      'age': Double,
                                      'signup_date': Datetime,
                                      })
 
-    df_mixed_ltypes = schema_df.ww.select(['FullName', 'email_address', Double])
+    df_mixed_ltypes = schema_df.ww.select(['PersonFullName', 'email_address', Double])
     assert len(df_mixed_ltypes.columns) == 3
     assert 'phone_number' not in df_mixed_ltypes.columns
 
@@ -1395,7 +1395,7 @@ def test_select_ltypes_table(sample_df):
     schema_df.ww.init(name='testing',
                       index='id',
                       time_index='signup_date',
-                      logical_types={'full_name': FullName,
+                      logical_types={'full_name': PersonFullName,
                                      'email': EmailAddress,
                                      'phone_number': PhoneNumber,
                                      'age': Double,
@@ -1413,7 +1413,7 @@ def test_select_ltypes_table(sample_df):
     assert df_with_indices.ww.index == 'id'
     assert df_with_indices.ww.time_index == 'signup_date'
 
-    df_values = schema_df.ww.select(['FullName'])
+    df_values = schema_df.ww.select(['PersonFullName'])
     assert df_values.ww.name == schema_df.ww.name
     assert df_values.ww.columns['full_name'] == schema_df.ww.columns['full_name']
 
@@ -1465,7 +1465,7 @@ def test_select_single_inputs(sample_df):
                       index='id',
                       name='df_name',
                       logical_types={
-                          'full_name': FullName,
+                          'full_name': PersonFullName,
                           'email': EmailAddress,
                           'phone_number': PhoneNumber,
                           'signup_date': Datetime(datetime_format='%Y-%m-%d')
@@ -1476,7 +1476,7 @@ def test_select_single_inputs(sample_df):
                           'signup_date': 'date_of_birth'
                       })
 
-    df_ltype_string = schema_df.ww.select('full_name')
+    df_ltype_string = schema_df.ww.select('person_full_name')
     assert len(df_ltype_string.columns) == 1
     assert 'full_name' in df_ltype_string.columns
 
@@ -1500,7 +1500,7 @@ def test_select_list_inputs(sample_df):
                       index='id',
                       name='df_name',
                       logical_types={
-                          'full_name': FullName,
+                          'full_name': PersonFullName,
                           'email': EmailAddress,
                           'phone_number': PhoneNumber,
                           'signup_date': Datetime(datetime_format='%Y-%m-%d'),
@@ -1513,14 +1513,14 @@ def test_select_list_inputs(sample_df):
                           'is_registered': 'category'
                       })
 
-    df_just_strings = schema_df.ww.select(['FullName', 'index', 'tag2', 'boolean'])
+    df_just_strings = schema_df.ww.select(['PersonFullName', 'index', 'tag2', 'boolean'])
     assert len(df_just_strings.columns) == 4
     assert 'id' in df_just_strings.columns
     assert 'full_name' in df_just_strings.columns
     assert 'email' in df_just_strings.columns
     assert 'is_registered' in df_just_strings.columns
 
-    df_mixed_selectors = schema_df.ww.select([FullName, 'index', 'time_index', Integer])
+    df_mixed_selectors = schema_df.ww.select([PersonFullName, 'index', 'time_index', Integer])
     assert len(df_mixed_selectors.columns) == 4
     assert 'id' in df_mixed_selectors.columns
     assert 'full_name' in df_mixed_selectors.columns
@@ -1540,7 +1540,7 @@ def test_select_semantic_tags_no_match(sample_df):
                       index='id',
                       name='df_name',
                       logical_types={
-                          'full_name': FullName,
+                          'full_name': PersonFullName,
                           'email': EmailAddress,
                           'phone_number': PhoneNumber,
                           'signup_date': Datetime(datetime_format='%Y-%m-%d'),
@@ -1566,7 +1566,7 @@ def test_select_repetitive(sample_df):
                       index='id',
                       name='df_name',
                       logical_types={
-                          'full_name': FullName,
+                          'full_name': PersonFullName,
                           'email': EmailAddress,
                           'phone_number': PhoneNumber,
                           'signup_date': Datetime(datetime_format='%Y-%m-%d'),
diff --git a/woodwork/tests/schema/test_schema.py b/woodwork/tests/schema/test_schema.py
index a9b5d38..b40d0b1 100644
--- a/woodwork/tests/schema/test_schema.py
+++ b/woodwork/tests/schema/test_schema.py
@@ -12,9 +12,9 @@ from woodwork.logical_types import (
     Datetime,
     Double,
     EmailAddress,
-    FullName,
     Integer,
     NaturalLanguage,
+    PersonFullName,
     PhoneNumber
 )
 from woodwork.schema import Schema
@@ -265,13 +265,13 @@ def test_filter_schema_overlap_name_and_type(sample_column_names, sample_inferre
     assert filter_overlap_with_name == ['full_name']
 
     schema = Schema(sample_column_names,
-                    {**sample_inferred_logical_types, 'full_name': Categorical, 'age': FullName},
-                    semantic_tags={'id': 'full_name'})
+                    {**sample_inferred_logical_types, 'full_name': Categorical, 'age': PersonFullName},
+                    semantic_tags={'id': 'person_full_name'})
 
-    filter_tag_and_ltype = schema._filter_cols(include='full_name')
+    filter_tag_and_ltype = schema._filter_cols(include='person_full_name')
     assert set(filter_tag_and_ltype) == {'id', 'age'}
 
-    filter_all_three = schema._filter_cols(include='full_name', col_names=True)
+    filter_all_three = schema._filter_cols(include=['person_full_name', 'full_name'], col_names=True)
     assert set(filter_all_three) == {'id', 'age', 'full_name'}
 
 
diff --git a/woodwork/tests/type_system/test_type_system.py b/woodwork/tests/type_system/test_type_system.py
index a02abb7..7512bd5 100644
--- a/woodwork/tests/type_system/test_type_system.py
+++ b/woodwork/tests/type_system/test_type_system.py
@@ -8,11 +8,11 @@ from woodwork.logical_types import (
     CountryCode,
     Datetime,
     Double,
-    FullName,
     Integer,
     LogicalType,
     NaturalLanguage,
     Ordinal,
+    PersonFullName,
     SubRegionCode
 )
 from woodwork.type_sys.inference_functions import (
@@ -306,8 +306,8 @@ def test_str_to_logical_type():
         assert ww.type_system.str_to_logical_type(logical_type.type_string) == logical_type
 
     assert ww.type_system.str_to_logical_type('bOoLeAn') == Boolean
-    assert ww.type_system.str_to_logical_type('full_NAME') == FullName
-    assert ww.type_system.str_to_logical_type('FullnamE') == FullName
+    assert ww.type_system.str_to_logical_type('person_full_NAME') == PersonFullName
+    assert ww.type_system.str_to_logical_type('PersonFullnamE') == PersonFullName
 
     ymd = '%Y-%m-%d'
     datetime_with_format = ww.type_system.str_to_logical_type('datetime', params={'datetime_format': ymd})
@@ -321,7 +321,7 @@ def test_str_to_logical_type():
     assert datetime_no_format == Datetime()
 
     # When parameters are supplied in a non-empty dictionary, the logical type gets instantiated
-    assert ww.type_system.str_to_logical_type('full_NAME', params={}) == FullName
+    assert ww.type_system.str_to_logical_type('person_full_NAME', params={}) == PersonFullName
     assert datetime_no_format != Datetime
 
     # Input a different type system