Skip to content

Primitive coverage

Every primitive in featuretools 1.31.0 beside its tusk counterpart. Time-series primitives (rolling, expanding, lag) are out of scope and not listed.

Meaning
✅ Same values, covered by a test
➕ tusk only
⚠️ Diverges on purpose
❌ Not yet implemented
⛔ Out of scope (for now)
Group tusk featuretools Status Test Comment
Aggregation count count ✅ test_values_match_featuretools
Aggregation max max ✅ test_values_match_featuretools
Aggregation mean mean ✅ test_values_match_featuretools
Aggregation median median ✅ test_median_matches_featuretools_on_every_parent_row
Aggregation min min ✅ test_values_match_featuretools
Aggregation n_unique num_unique ⚠️ test_n_unique_of_an_empty_group_diverges_from_featuretools / test_n_unique_counts_a_null_where_num_unique_ignores_it An empty group is 0 in tusk and NaN in featuretools. A null counts as a value in tusk. featuretools ignores it.
Aggregation percent_true percent_true ✅ test_percent_true_matches_featuretools_on_every_parent_row
Aggregation quantiles — ➕ test_quantiles_defaults_to_the_quartiles featuretools has no quantiles counterpart.
Aggregation std std ✅ test_stacked_values_match_featuretools
Aggregation sum sum ✅ test_values_match_featuretools
Aggregation all_true all ✅ test_standalone_aggregations_match_featuretools_on_every_parent_row Named all_true so the class does not shadow typing.Any.
Aggregation any_true any ⚠️ test_any_true_of_an_empty_group_is_false_rather_than_null An empty group is False in tusk and null in featuretools. Nulls are skipped on both sides. Named any_true so the class does not shadow typing.Any.
Aggregation — average_count_per_unique ❌
Aggregation — avg_time_between ❌
Aggregation count_above_mean count_above_mean ⚠️ test_a_count_against_the_mean_without_a_known_value_is_zero_rather_than_null A group without a non-null value is 0 in tusk and null in featuretools.
Aggregation count_below_mean count_below_mean ⚠️ test_a_count_against_the_mean_without_a_known_value_is_zero_rather_than_null A group without a non-null value is 0 in tusk and null in featuretools.
Aggregation — count_greater_than ⛔ Threshold argument. A useful threshold depends on the data.
Aggregation count_inside_nth_std count_inside_nth_std ✅ test_std_band_counts_match_featuretools_on_every_parent_row
Aggregation — count_inside_range ⛔ Threshold argument. A useful threshold depends on the data.
Aggregation — count_less_than ⛔ Threshold argument. A useful threshold depends on the data.
Aggregation count_outside_nth_std count_outside_nth_std ✅ test_std_band_counts_match_featuretools_on_every_parent_row
Aggregation — count_outside_range ⛔ Threshold argument. A useful threshold depends on the data.
Aggregation — date_first_event ✅ test_date_first_event_is_first_over_the_row_creation_time Not a separate tusk primitive. first over the child's row_creation_time answers it.
Aggregation entropy entropy ✅ test_standalone_aggregations_match_featuretools_on_every_parent_row
Aggregation first first ✅ test_first_and_last_match_featuretools_in_row_creation_order Needs a row_creation_time on the child table. Ties are broken by primary key.
Aggregation first_last_time_delta first_last_time_delta ⚠️ test_a_delta_without_a_known_value_is_null_rather_than_zero Takes any datetime column and returns a Duration. featuretools takes only the time index and returns float seconds. A group without a non-null datetime is null, not zero. For a time-zone-aware column, a gap across a daylight-saving change can vary by backend.
Aggregation — has_no_duplicates ⚠️ test_is_unique_counts_repeated_nulls_where_has_no_duplicates_drops_them Not a separate tusk primitive. is_unique answers it, counting nulls as values where featuretools drops them.
Aggregation — is_monotonically_decreasing ❌ Needs an ordered pairwise scan.
Aggregation — is_monotonically_increasing ❌ Needs an ordered pairwise scan.
Aggregation is_unique is_unique ⚠️ test_is_unique_of_an_empty_group_is_null_rather_than_false Nulls are values on both sides. An empty group is null in tusk and False in featuretools.
Aggregation kurtosis kurtosis ⚠️ test_kurtosis_matches_featuretools_only_on_a_fully_known_group tusk skips nulls. featuretools answers 0 for a group holding a null. A constant or empty group is null in tusk and 0 in featuretools.
Aggregation last last ✅ test_first_and_last_match_featuretools_in_row_creation_order Needs a row_creation_time on the child table. Ties are broken by primary key.
Aggregation — max_consecutive_false ❌ Needs a run-length scan.
Aggregation — max_consecutive_negatives ❌ Needs a run-length scan.
Aggregation — max_consecutive_positives ❌ Needs a run-length scan.
Aggregation — max_consecutive_true ❌ Needs a run-length scan.
Aggregation — max_consecutive_zeros ❌ Needs a run-length scan.
Aggregation — max_count ❌ Needs per-group value counts.
Aggregation max_min_delta max_min_delta ⚠️ test_a_delta_without_a_known_value_is_null_rather_than_zero A group without a non-null value is null in tusk and 0 in featuretools.
Aggregation — median_count ❌ Needs per-group value counts.
Aggregation — min_count ❌ Needs per-group value counts.
Aggregation mode mode ✅ test_standalone_aggregations_match_featuretools_on_every_parent_row
Aggregation — n_most_common ⛔ Length-changing inside a lazy group_by().agg().
Aggregation — n_most_common_frequency ⛔ Length-changing inside a lazy group_by().agg().
Aggregation n_unique_days n_unique_days ⚠️ test_distinct_date_counts_count_a_null_as_a_value A null date counts as one value in tusk. featuretools ignores it.
Aggregation n_unique_days_of_calendar_year n_unique_days_of_calendar_year ⚠️ test_distinct_date_counts_count_a_null_as_a_value A null date counts as one value in tusk. featuretools ignores it.
Aggregation n_unique_days_of_month n_unique_days_of_month ⚠️ test_distinct_date_counts_count_a_null_as_a_value A null date counts as one value in tusk. featuretools ignores it.
Aggregation n_unique_months n_unique_months ⚠️ test_distinct_date_counts_count_a_null_as_a_value A null date counts as one value in tusk. featuretools ignores it.
Aggregation — n_unique_weeks ❌
Aggregation — num_consecutive_greater_mean ❌ Needs a run-length scan.
Aggregation — num_consecutive_less_mean ❌ Needs a run-length scan.
Aggregation — num_false_since_last_true ❌ Needs a run-length scan.
Aggregation — num_peaks ❌ Needs a windowed scan.
Aggregation n_true num_true ✅ test_standalone_aggregations_match_featuretools_on_every_parent_row
Aggregation — num_true_since_last_false ❌ Needs a run-length scan.
Aggregation — num_zero_crossings ❌ Needs a windowed scan.
Aggregation percent_unique percent_unique ⚠️ test_percent_unique_of_an_empty_group_is_null_rather_than_zero A null counts as a distinct value in tusk, and featuretools ignores it. An empty group is null in tusk and 0 in featuretools.
Aggregation skew skew ⚠️ test_skew_differs_from_featuretools_only_by_its_bias_correction Without bias correction, as narwhals computes it. featuretools applies pandas' sample correction. A constant group is null on both sides.
Aggregation time_since_first time_since_first ⚠️ test_time_since_first_and_last_match_featuretools_on_every_parent_row Returns a Duration. featuretools returns float seconds.
Aggregation time_since_last time_since_last ⚠️ test_time_since_first_and_last_match_featuretools_on_every_parent_row Returns a Duration. featuretools returns float seconds.
Aggregation time_since_last_false time_since_last_false ⚠️ test_time_since_last_flag_matches_featuretools_where_a_flagged_row_exists Returns a Duration. featuretools returns float seconds. A group with no such row is null, not zero.
Aggregation — time_since_last_max ❌ Needs an argmax. SQL backends reject an aggregate nested in an aggregate.
Aggregation — time_since_last_min ❌ Needs an argmax. SQL backends reject an aggregate nested in an aggregate.
Aggregation time_since_last_true time_since_last_true ⚠️ test_time_since_last_flag_matches_featuretools_where_a_flagged_row_exists Returns a Duration. featuretools returns float seconds. A group with no such row is null, not zero.
Aggregation — trend ❌ Needs a least-squares fit.
Aggregation variance variance ✅ test_standalone_aggregations_match_featuretools_on_every_parent_row
Binary transform add_numeric add_numeric ✅ test_arithmetic_transforms_match_featuretools
Binary transform divide_numeric divide_numeric ✅ test_arithmetic_transforms_match_featuretools
Binary transform multiply_numeric multiply_numeric ✅ test_arithmetic_transforms_match_featuretools
Binary transform subtract_numeric subtract_numeric ✅ test_arithmetic_transforms_match_featuretools
Binary transform — add_numeric_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform — divide_by_feature ⛔ Scalar argument. tusk primitives take columns only.
Binary transform — divide_numeric_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform equal equal ⚠️ test_*comparisons_match_featuretools_where_nothing_is_null, comparisons_agree_where_an_input_is_null, datetime_comparisons_match_featuretools_where_nothing_is_null, datetime_comparisons_diverge_where_an_operand_is_null, boolean_equality_matches_featuretools_where_nothing_is_null, boolean_equality_agrees_with_featuretools_where_an_operand_is_null, string_equality_matches_featuretools_where_nothing_is_null, string_equality_agrees_with_featuretools_where_an_operand_is_null, string_equality_diverges_where_a_low_cardinality_operand_is_null Compares numbers, datetimes, booleans and strings, but not enums and categoricals. Equal results for numeric, boolean and high cardinality strings. A low-cardinality string pair diverges the same way as equal_categorical. Over Datetime operands tusk gives a null, featuretools answers False.
Binary transform equal_categorical equal (generic — featuretools has no categorical-specific primitive) ⚠️ test_categorical_equality_matches_featuretools_where_nothing_is_null / test_categorical_equality_diverges_where_a_label_is_null Compares labels, not encodings. It agrees with featuretools' generic equal wherever both labels are non-null. Diverges on a null label: tusk gives null (a null label cannot be shown equal to anything), featuretools False.
Binary transform — equal_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform greater_than greater_than ⚠️ test_comparisons_match_featuretools_where_nothing_is_null / test_comparisons_agree_where_an_input_is_null / test_datetime_comparisons_match_featuretools_where_nothing_is_null / test_datetime_comparisons_diverge_where_an_operand_is_null featuretools also accepts Ordinal columns. tusk has no logical types. Over numeric operands, a null gives a null on both sides. Over Datetime operands, a null diverges: tusk still gives a null, featuretools compares NaT with plain datetime64[ns] semantics and answers False.
Binary transform greater_than_equal_to greater_than_equal_to ⚠️ test_comparisons_match_featuretools_where_nothing_is_null / test_comparisons_agree_where_an_input_is_null / test_datetime_comparisons_match_featuretools_where_nothing_is_null / test_datetime_comparisons_diverge_where_an_operand_is_null featuretools also accepts Ordinal columns. tusk has no logical types. Over numeric operands, a null gives a null on both sides. Over Datetime operands, a null diverges: tusk still gives a null, featuretools compares NaT with plain datetime64[ns] semantics and answers False.
Binary transform — greater_than_equal_to_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform — greater_than_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform less_than less_than ⚠️ test_comparisons_match_featuretools_where_nothing_is_null / test_comparisons_agree_where_an_input_is_null / test_datetime_comparisons_match_featuretools_where_nothing_is_null / test_datetime_comparisons_diverge_where_an_operand_is_null featuretools also accepts Ordinal columns. tusk has no logical types. Over numeric operands, a null gives a null on both sides. Over Datetime operands, a null diverges: tusk still gives a null, featuretools compares NaT with plain datetime64[ns] semantics and answers False.
Binary transform less_than_equal_to less_than_equal_to ⚠️ test_comparisons_match_featuretools_where_nothing_is_null / test_comparisons_agree_where_an_input_is_null / test_datetime_comparisons_match_featuretools_where_nothing_is_null / test_datetime_comparisons_diverge_where_an_operand_is_null featuretools also accepts Ordinal columns. tusk has no logical types. Over numeric operands, a null gives a null on both sides. Over Datetime operands, a null diverges: tusk still gives a null, featuretools compares NaT with plain datetime64[ns] semantics and answers False.
Binary transform — less_than_equal_to_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform — less_than_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform — modulo_by_feature ⛔ Scalar argument. tusk primitives take columns only.
Binary transform modulo_numeric modulo_numeric ⚠️ test_modulo_matches_featuretools_on_negative_operands / test_modulo_diverges_on_a_zero_divisor Floored, so the sign follows the divisor on every backend. A zero divisor is backend-defined. On this fixture's float64 columns, tusk gives NaN, while featuretools gives 0. woodwork infers the whole-number columns as Int64, where pandas' % by zero is 0.
Binary transform — modulo_numeric_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform and multiply_boolean ⚠️ test_and_matches_featuretools_multiply_boolean Against this multiply_boolean, and's values match exactly on every input, including false & null. tusk ships one conjunction where featuretools ships two names, because pandas gave it two functions (bitwise_and, logical_and) that disagree on a null operand. SQL has one conjunction, so and is deliberately the only primitive here. See the and row under Boolean transform for the (different) divergence against featuretools' own and.
Binary transform multiply_numeric_boolean multiply_numeric_boolean ✅ test_multiply_numeric_boolean_matches_featuretools
Binary transform — multiply_numeric_scalar ⛔ Scalar argument. tusk primitives take columns only.
Binary transform not_equal not_equal ⚠️ test_comparisons_match_featuretools_where_nothing_is_null / test_comparisons_agree_where_an_input_is_null / test_datetime_comparisons_match_featuretools_where_nothing_is_null / test_datetime_comparisons_diverge_where_an_operand_is_null / test_boolean_equality_matches_featuretools_where_nothing_is_null / test_boolean_equality_agrees_with_featuretools_where_an_operand_is_null / test_string_equality_matches_featuretools_where_nothing_is_null / test_string_equality_agrees_with_featuretools_where_an_operand_is_null / test_string_equality_diverges_where_a_low_cardinality_operand_is_null Compares numbers, datetimes, booleans and strings. Labels have their own primitives. A null gives a null on both sides over numeric, boolean and string operands. This holds for the string operand only while featuretools infers it as a plain string (woodwork Unknown, pandas nullable string), not a low-cardinality label. A low-cardinality string pair diverges the same way not_equal_categorical's row describes. Over Datetime operands, a null diverges: tusk still gives a null, featuretools compares NaT with plain datetime64[ns] semantics and answers True.
Binary transform not_equal_categorical not_equal (generic — featuretools has no categorical-specific primitive) ⚠️ test_categorical_equality_matches_featuretools_where_nothing_is_null / test_categorical_equality_diverges_where_a_label_is_null Compares labels, not encodings. It agrees with featuretools' generic not_equal wherever both labels are non-null. Diverges on a null label: tusk gives null (a null label cannot be shown unequal to anything), featuretools True.
Binary transform — not_equal_scalar ⛔
Binary transform — scalar_subtract_numeric_feature ⛔ Scalar argument. tusk primitives take columns only.
Binary transform — subtract_numeric_scalar ⛔ Scalar argument. tusk primitives take columns only.
Boolean transform and and ⚠️ test_binary_boolean_transforms_diverge_where_one_input_is_null Against this and, false AND null diverges: false in tusk's three-valued logic, but featuretools' and (logical_and) propagates the null instead. See the multiply_boolean row under Binary transform for the (different, matching) comparison.
Boolean transform — isin ⛔ Literal list argument. tusk primitives take columns only.
Boolean transform not not ✅ test_not_matches_featuretools_on_every_row
Boolean transform or or ⚠️ test_binary_boolean_transforms_diverge_where_one_input_is_null true OR null is true in tusk's three-valued logic. featuretools propagates the null.
Cumulative transform cum_count cum_count ⚠️ test_cum_count_counts_known_values_where_featuretools_counts_rows featuretools counts every row. tusk counts only non-null values. Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform cum_max cum_max ⚠️ test_cumulative_transforms_match_featuretools Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform cum_min cum_min ⚠️ test_cumulative_transforms_match_featuretools Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform cum_sum cum_sum ⚠️ test_cumulative_transforms_match_featuretools Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform diff diff ⚠️ test_cumulative_transforms_match_featuretools Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform time_since_previous time_since_previous ⚠️ test_time_since_previous_is_a_timedelta Returns a Duration. featuretools returns float seconds. Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform cum_mean cum_mean ⚠️ test_cum_mean_divides_by_known_values_where_featuretools_divides_by_rows A null is left out of the divisor. featuretools divides by the number of rows. Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform cumulative_time_since_last_false cumulative_time_since_last_false ⚠️ test_cumulative_time_since_matches_featuretools_in_seconds Returns a Duration. featuretools returns float seconds. Takes any datetime column. featuretools takes only the time index. For a time-zone-aware column, a gap across a daylight-saving change can vary by backend. Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform cumulative_time_since_last_true cumulative_time_since_last_true ⚠️ test_cumulative_time_since_matches_featuretools_in_seconds Returns a Duration. featuretools returns float seconds. Takes any datetime column. featuretools takes only the time index. For a time-zone-aware column, a gap across a daylight-saving change can vary by backend. Runs only within foreign-key groups. featuretools also computes it across the whole table.
Cumulative transform — diff_datetime ⚠️ test_diff_datetime_is_time_since_previous Not a separate tusk primitive. time_since_previous computes it.
Datetime transform day day ✅ test_datetime_parts_match_featuretools
Datetime transform hour hour ✅ test_datetime_parts_match_featuretools
Datetime transform is_weekend is_weekend ⚠️ Agrees on real dates. A null datetime is null in tusk and False in featuretools.
Datetime transform month month ✅ test_datetime_parts_match_featuretools
Datetime transform time_since time_since ⚠️ test_time_since_matches_featuretools_on_every_row Returns a Duration. featuretools returns float seconds.
Datetime transform weekday weekday ⚠️ test_row_wise_transforms tusk is ISO 1-7 (Monday = 1). featuretools is 0-6 (Monday = 0).
Datetime transform year year ✅ test_datetime_parts_match_featuretools
Datetime transform — age ⛔ Covered by time_since. Without semantic tags, a birth date is just a datetime.
Datetime transform — date_to_holiday ⛔ This needs rule-based calendars, not explicit dates, which would expire in a persisted feature list.
Datetime transform — date_to_time_zone ⛔ duckdb keeps the time zone on the connection, not on the column.
Datetime transform day_of_year day_of_year ✅ test_datetime_parts_match_featuretools
Datetime transform — days_in_month ❌
Datetime transform — distance_to_holiday ⛔ This needs rule-based calendars, not explicit dates, which would expire in a persisted feature list.
Datetime transform — is_federal_holiday ⛔ This needs rule-based calendars, not explicit dates, which would expire in a persisted feature list.
Datetime transform — is_first_week_of_month ⛔
Datetime transform is_leap_year is_leap_year ⚠️ test_is_leap_year_of_a_null_date_is_null_rather_than_false A null date is null in tusk and False in featuretools.
Datetime transform — is_lunch_time ⛔
Datetime transform — is_month_end ❌
Datetime transform — is_month_start ❌
Datetime transform — is_quarter_end ❌
Datetime transform — is_quarter_start ❌
Datetime transform — is_working_hours ⛔
Datetime transform — is_year_end ❌
Datetime transform — is_year_start ❌
Datetime transform minute minute ✅ test_datetime_parts_match_featuretools
Datetime transform — nth_week_of_month ⛔ narwhals exposes no ISO week number.
Datetime transform — part_of_day ⛔
Datetime transform — quarter ❌
Datetime transform — season ⛔
Datetime transform second second ✅ test_datetime_parts_match_featuretools
Datetime transform — week ❌ narwhals exposes no ISO week number.
Email and URL transform domain email_address_to_domain ⚠️ test_domain_matches_email_address_to_domain_on_well_formed_addresses / test_domain_diverges_from_email_address_to_domain_on_malformed_addresses One primitive handles URLs and emails. Without an @ the value is the domain, the last of several @ counts, and a trailing @ is null.
Email and URL transform — is_free_email_domain ⛔
Email and URL transform domain url_to_domain ⚠️ test_domain_matches_url_to_domain_on_http_urls / test_domain_diverges_from_url_to_domain_on_other_schemes_and_empty_hosts One primitive handles URLs and emails. It removes any scheme, not only http and https. An empty host is null.
Email and URL transform url_to_protocol url_to_protocol ✅ test_url_to_protocol_matches_featuretools
Email and URL transform top_level_domain url_to_tld ⚠️ test_top_level_domain_matches_url_to_tld_where_the_last_label_is_a_listed_tld / test_top_level_domain_keeps_the_whole_last_label Takes the last label of domain, so it also reads emails. featuretools prefix-matches a fixed list of common TLDs, so mysite.company is com there.
Exponential transform — exponential_weighted_average ⛔ duckdb has no exponentially weighted window.
Exponential transform — exponential_weighted_std ⛔ duckdb has no exponentially weighted window.
Exponential transform — exponential_weighted_variance ⛔ duckdb has no exponentially weighted window.
General transform absolute absolute ✅ test_general_transforms_match_featuretools
General transform natural_log natural_logarithm ⚠️ test_square_root_and_natural_log_give_null_where_featuretools_gives_nan A negative input is null in tusk and NaN in featuretools.
General transform absolute_diff absolute_diff ⚠️ test_absolute_diff_does_not_forward_fill A null and the row after it are null in tusk. featuretools fills in the previous non-null value first. Always returns a float, so integer columns cannot overflow. Runs only within foreign-key groups. featuretools also computes it across the whole table.
General transform cosine cosine ✅ test_general_transforms_match_featuretools
General transform is_null is_null ✅ test_general_transforms_match_featuretools
General transform negate negate ✅ test_general_transforms_match_featuretools Always returns a float, so an integer column's smallest value can be negated.
General transform percent_change percent_change ⚠️ test_percent_change_does_not_forward_fill A null and the row after it are null in tusk. featuretools fills in the previous non-null value first. Runs only within foreign-key groups. featuretools also computes it across the whole table.
General transform percentile percentile ⚠️ test_percentile_matches_featuretools_within_the_group Ranks the value within its foreign-key group. Runs only within foreign-key groups. featuretools also computes it across the whole table.
General transform — rate_of_change ⛔
General transform same_as_previous same_as_previous ⚠️ test_same_as_previous_does_not_forward_fill The first row, a null and the row after it are null in tusk. featuretools fills in the previous non-null value first and answers False on the first row. Runs only within foreign-key groups. featuretools also computes it across the whole table.
General transform — savgol_filter ⛔
General transform sine sine ✅ test_general_transforms_match_featuretools
General transform square_root square_root ⚠️ test_square_root_and_natural_log_give_null_where_featuretools_gives_nan A negative input is null in tusk and NaN in featuretools.
General transform — tangent ⛔ narwhals exposes no tan.
Location transform — cityblock_distance ⛔
Location transform — geomidpoint ⛔
Location transform — haversine ⛔
Location transform — is_in_geobox ⛔
Location transform — latitude ⛔
Location transform — longitude ⛔
Natural-language transform — count_string ⛔
Natural-language transform — file_extension ⛔
Natural-language transform — full_name_to_first_name ⛔
Natural-language transform — full_name_to_last_name ⛔
Natural-language transform — full_name_to_title ⛔
Natural-language transform — mean_characters_per_word ⛔
Natural-language transform — median_word_length ⛔ Needs a per-row list reduction.
Natural-language transform n_characters num_characters ✅ test_n_characters_matches_featuretools
Natural-language transform — num_unique_separators ⛔ Needs a regex count. narwhals has none.
Natural-language transform n_words num_words ✅ test_n_words_matches_featuretools
Natural-language transform — number_of_common_words ⛔ Needs tokenisation against a word list.
Natural-language transform — number_of_hashtags ⛔ Needs a regex count. narwhals has none.
Natural-language transform — number_of_mentions ⛔ Needs a regex count. narwhals has none.
Natural-language transform n_unique_words number_of_unique_words ✅ test_n_unique_words_matches_case_insensitive_featuretools / test_n_unique_words_folds_case_where_featuretools_defaults_not_to Equal to featuretools NumberOfUniqueWords(case_insensitive=True)
Natural-language transform — number_of_words_in_quotes ⛔ Needs a regex count. narwhals has none.
Natural-language transform — punctuation_count ⛔ Needs a regex count. narwhals has none.
Natural-language transform — title_word_count ⛔ Needs a regex count. narwhals has none.
Natural-language transform — total_word_length ⛔
Natural-language transform — upper_case_count ⛔ Needs a regex count. narwhals has none.
Natural-language transform — upper_case_word_count ⛔ Needs a regex count. narwhals has none.
Natural-language transform — whitespace_count ⛔ Needs a regex count. narwhals has none.
Postal-code transform — one_digit_postal_code ⛔
Postal-code transform — two_digit_postal_code ⛔