gitextract_b07mgx0i/ ├── .codecov.yml ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── blank_issue.md │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── documentation_improvement.md │ │ └── feature_request.md │ ├── auto_assign.yml │ └── workflows/ │ ├── auto_approve_dependency_PRs.yaml │ ├── broken_link_check.yaml │ ├── build_docs.yaml │ ├── create_feedstock_pr.yaml │ ├── install_test.yaml │ ├── kickoff_evalml_unit_tests.yaml │ ├── latest_dependency_checker.yaml │ ├── lint_check.yaml │ ├── minimum_dependency_checker.yaml │ ├── performance-check.yaml │ ├── pull_request_check.yaml │ ├── release.yaml │ ├── release_notes_updated.yaml │ ├── test_without_test_dependencies.yaml │ ├── tests_with_latest_deps.yaml │ ├── tests_with_minimum_deps.yaml │ └── tests_with_woodwork_main_branch.yaml ├── .gitignore ├── .pre-commit-config.yaml ├── .readthedocs.yaml ├── LICENSE ├── Makefile ├── README.md ├── contributing.md ├── docs/ │ ├── Makefile │ ├── backport_release.md │ ├── make.bat │ ├── notebook_version_standardizer.py │ ├── pull_request_template.md │ └── source/ │ ├── _static/ │ │ └── style.css │ ├── api_reference.rst │ ├── conf.py │ ├── getting_started/ │ │ ├── afe.ipynb │ │ ├── getting_started_index.rst │ │ ├── handling_time.ipynb │ │ ├── primitives.ipynb │ │ ├── using_entitysets.ipynb │ │ └── woodwork_types.ipynb │ ├── guides/ │ │ ├── advanced_custom_primitives.ipynb │ │ ├── deployment.ipynb │ │ ├── feature_descriptions.ipynb │ │ ├── feature_selection.ipynb │ │ ├── guides_index.rst │ │ ├── performance.ipynb │ │ ├── specifying_primitive_options.ipynb │ │ ├── sql_database_integration.ipynb │ │ ├── time_series.ipynb │ │ └── tuning_dfs.ipynb │ ├── index.ipynb │ ├── install.md │ ├── release_notes.rst │ ├── resources/ │ │ ├── ecosystem.rst │ │ ├── frequently_asked_questions.ipynb │ │ ├── help.rst │ │ ├── resources_index.rst │ │ ├── transition_to_ft_v1.0.ipynb │ │ └── usage_tips/ │ │ ├── glossary.rst │ │ └── limitations.rst │ ├── set-headers.py │ ├── setup.py │ └── templates/ │ └── layout.html ├── featuretools/ │ ├── __init__.py │ ├── __main__.py │ ├── computational_backends/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── calculate_feature_matrix.py │ │ ├── feature_set.py │ │ ├── feature_set_calculator.py │ │ └── utils.py │ ├── config_init.py │ ├── demo/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── flight.py │ │ ├── mock_customer.py │ │ ├── retail.py │ │ └── weather.py │ ├── entityset/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── deserialize.py │ │ ├── entityset.py │ │ ├── relationship.py │ │ ├── serialize.py │ │ └── timedelta.py │ ├── exceptions.py │ ├── feature_base/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── cache.py │ │ ├── feature_base.py │ │ ├── feature_descriptions.py │ │ ├── feature_visualizer.py │ │ ├── features_deserializer.py │ │ ├── features_serializer.py │ │ └── utils.py │ ├── feature_discovery/ │ │ ├── FeatureCollection.py │ │ ├── LiteFeature.py │ │ ├── __init__.py │ │ ├── convertors.py │ │ ├── feature_discovery.py │ │ ├── type_defs.py │ │ └── utils.py │ ├── primitives/ │ │ ├── __init__.py │ │ ├── base/ │ │ │ ├── __init__.py │ │ │ ├── aggregation_primitive_base.py │ │ │ ├── primitive_base.py │ │ │ └── transform_primitive_base.py │ │ ├── options_utils.py │ │ ├── standard/ │ │ │ ├── __init__.py │ │ │ ├── aggregation/ │ │ │ │ ├── __init__.py │ │ │ │ ├── all_primitive.py │ │ │ │ ├── any_primitive.py │ │ │ │ ├── average_count_per_unique.py │ │ │ │ ├── avg_time_between.py │ │ │ │ ├── count.py │ │ │ │ ├── count_above_mean.py │ │ │ │ ├── count_below_mean.py │ │ │ │ ├── count_greater_than.py │ │ │ │ ├── count_inside_nth_std.py │ │ │ │ ├── count_inside_range.py │ │ │ │ ├── count_less_than.py │ │ │ │ ├── count_outside_nth_std.py │ │ │ │ ├── count_outside_range.py │ │ │ │ ├── date_first_event.py │ │ │ │ ├── entropy.py │ │ │ │ ├── first.py │ │ │ │ ├── first_last_time_delta.py │ │ │ │ ├── has_no_duplicates.py │ │ │ │ ├── is_monotonically_decreasing.py │ │ │ │ ├── is_monotonically_increasing.py │ │ │ │ ├── is_unique.py │ │ │ │ ├── kurtosis.py │ │ │ │ ├── last.py │ │ │ │ ├── max_consecutive_false.py │ │ │ │ ├── max_consecutive_negatives.py │ │ │ │ ├── max_consecutive_positives.py │ │ │ │ ├── max_consecutive_true.py │ │ │ │ ├── max_consecutive_zeros.py │ │ │ │ ├── max_count.py │ │ │ │ ├── max_min_delta.py │ │ │ │ ├── max_primitive.py │ │ │ │ ├── mean.py │ │ │ │ ├── median.py │ │ │ │ ├── median_count.py │ │ │ │ ├── min_count.py │ │ │ │ ├── min_primitive.py │ │ │ │ ├── mode.py │ │ │ │ ├── n_most_common.py │ │ │ │ ├── n_most_common_frequency.py │ │ │ │ ├── n_unique_days.py │ │ │ │ ├── n_unique_days_of_calendar_year.py │ │ │ │ ├── n_unique_days_of_month.py │ │ │ │ ├── n_unique_months.py │ │ │ │ ├── n_unique_weeks.py │ │ │ │ ├── num_consecutive_greater_mean.py │ │ │ │ ├── num_consecutive_less_mean.py │ │ │ │ ├── num_false_since_last_true.py │ │ │ │ ├── num_peaks.py │ │ │ │ ├── num_true.py │ │ │ │ ├── num_true_since_last_false.py │ │ │ │ ├── num_unique.py │ │ │ │ ├── num_zero_crossings.py │ │ │ │ ├── percent_true.py │ │ │ │ ├── percent_unique.py │ │ │ │ ├── skew.py │ │ │ │ ├── std.py │ │ │ │ ├── sum_primitive.py │ │ │ │ ├── time_since_first.py │ │ │ │ ├── time_since_last.py │ │ │ │ ├── time_since_last_false.py │ │ │ │ ├── time_since_last_max.py │ │ │ │ ├── time_since_last_min.py │ │ │ │ ├── time_since_last_true.py │ │ │ │ ├── trend.py │ │ │ │ └── variance.py │ │ │ └── transform/ │ │ │ ├── __init__.py │ │ │ ├── absolute_diff.py │ │ │ ├── binary/ │ │ │ │ ├── __init__.py │ │ │ │ ├── add_numeric.py │ │ │ │ ├── add_numeric_scalar.py │ │ │ │ ├── and_primitive.py │ │ │ │ ├── divide_by_feature.py │ │ │ │ ├── divide_numeric.py │ │ │ │ ├── divide_numeric_scalar.py │ │ │ │ ├── equal.py │ │ │ │ ├── equal_scalar.py │ │ │ │ ├── greater_than.py │ │ │ │ ├── greater_than_equal_to.py │ │ │ │ ├── greater_than_equal_to_scalar.py │ │ │ │ ├── greater_than_scalar.py │ │ │ │ ├── less_than.py │ │ │ │ ├── less_than_equal_to.py │ │ │ │ ├── less_than_equal_to_scalar.py │ │ │ │ ├── less_than_scalar.py │ │ │ │ ├── modulo_by_feature.py │ │ │ │ ├── modulo_numeric.py │ │ │ │ ├── modulo_numeric_scalar.py │ │ │ │ ├── multiply_boolean.py │ │ │ │ ├── multiply_numeric.py │ │ │ │ ├── multiply_numeric_boolean.py │ │ │ │ ├── multiply_numeric_scalar.py │ │ │ │ ├── not_equal.py │ │ │ │ ├── not_equal_scalar.py │ │ │ │ ├── or_primitive.py │ │ │ │ ├── scalar_subtract_numeric_feature.py │ │ │ │ ├── subtract_numeric.py │ │ │ │ └── subtract_numeric_scalar.py │ │ │ ├── cumulative/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cum_count.py │ │ │ │ ├── cum_max.py │ │ │ │ ├── cum_mean.py │ │ │ │ ├── cum_min.py │ │ │ │ ├── cum_sum.py │ │ │ │ ├── cumulative_time_since_last_false.py │ │ │ │ └── cumulative_time_since_last_true.py │ │ │ ├── datetime/ │ │ │ │ ├── __init__.py │ │ │ │ ├── age.py │ │ │ │ ├── date_to_holiday.py │ │ │ │ ├── date_to_timezone.py │ │ │ │ ├── day.py │ │ │ │ ├── day_of_year.py │ │ │ │ ├── days_in_month.py │ │ │ │ ├── diff_datetime.py │ │ │ │ ├── distance_to_holiday.py │ │ │ │ ├── hour.py │ │ │ │ ├── is_federal_holiday.py │ │ │ │ ├── is_first_week_of_month.py │ │ │ │ ├── is_leap_year.py │ │ │ │ ├── is_lunch_time.py │ │ │ │ ├── is_month_end.py │ │ │ │ ├── is_month_start.py │ │ │ │ ├── is_quarter_end.py │ │ │ │ ├── is_quarter_start.py │ │ │ │ ├── is_weekend.py │ │ │ │ ├── is_working_hours.py │ │ │ │ ├── is_year_end.py │ │ │ │ ├── is_year_start.py │ │ │ │ ├── minute.py │ │ │ │ ├── month.py │ │ │ │ ├── part_of_day.py │ │ │ │ ├── quarter.py │ │ │ │ ├── season.py │ │ │ │ ├── second.py │ │ │ │ ├── time_since.py │ │ │ │ ├── time_since_previous.py │ │ │ │ ├── utils.py │ │ │ │ ├── week.py │ │ │ │ ├── weekday.py │ │ │ │ └── year.py │ │ │ ├── email/ │ │ │ │ ├── __init__.py │ │ │ │ ├── email_address_to_domain.py │ │ │ │ └── is_free_email_domain.py │ │ │ ├── exponential/ │ │ │ │ ├── __init__.py │ │ │ │ ├── exponential_weighted_average.py │ │ │ │ ├── exponential_weighted_std.py │ │ │ │ └── exponential_weighted_variance.py │ │ │ ├── file_extension.py │ │ │ ├── full_name_to_first_name.py │ │ │ ├── full_name_to_last_name.py │ │ │ ├── full_name_to_title.py │ │ │ ├── is_in.py │ │ │ ├── is_null.py │ │ │ ├── latlong/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cityblock_distance.py │ │ │ │ ├── geomidpoint.py │ │ │ │ ├── haversine.py │ │ │ │ ├── is_in_geobox.py │ │ │ │ ├── latitude.py │ │ │ │ ├── longitude.py │ │ │ │ └── utils.py │ │ │ ├── natural_language/ │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── count_string.py │ │ │ │ ├── mean_characters_per_word.py │ │ │ │ ├── median_word_length.py │ │ │ │ ├── num_characters.py │ │ │ │ ├── num_unique_separators.py │ │ │ │ ├── num_words.py │ │ │ │ ├── number_of_common_words.py │ │ │ │ ├── number_of_hashtags.py │ │ │ │ ├── number_of_mentions.py │ │ │ │ ├── number_of_unique_words.py │ │ │ │ ├── number_of_words_in_quotes.py │ │ │ │ ├── punctuation_count.py │ │ │ │ ├── title_word_count.py │ │ │ │ ├── total_word_length.py │ │ │ │ ├── upper_case_count.py │ │ │ │ ├── upper_case_word_count.py │ │ │ │ └── whitespace_count.py │ │ │ ├── not_primitive.py │ │ │ ├── nth_week_of_month.py │ │ │ ├── numeric/ │ │ │ │ ├── __init__.py │ │ │ │ ├── absolute.py │ │ │ │ ├── cosine.py │ │ │ │ ├── diff.py │ │ │ │ ├── natural_logarithm.py │ │ │ │ ├── negate.py │ │ │ │ ├── percentile.py │ │ │ │ ├── rate_of_change.py │ │ │ │ ├── same_as_previous.py │ │ │ │ ├── sine.py │ │ │ │ ├── square_root.py │ │ │ │ └── tangent.py │ │ │ ├── percent_change.py │ │ │ ├── postal/ │ │ │ │ ├── __init__.py │ │ │ │ ├── one_digit_postal_code.py │ │ │ │ └── two_digit_postal_code.py │ │ │ ├── savgol_filter.py │ │ │ ├── time_series/ │ │ │ │ ├── __init__.py │ │ │ │ ├── expanding/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── expanding_count.py │ │ │ │ │ ├── expanding_max.py │ │ │ │ │ ├── expanding_mean.py │ │ │ │ │ ├── expanding_min.py │ │ │ │ │ ├── expanding_std.py │ │ │ │ │ └── expanding_trend.py │ │ │ │ ├── lag.py │ │ │ │ ├── numeric_lag.py │ │ │ │ ├── rolling_count.py │ │ │ │ ├── rolling_max.py │ │ │ │ ├── rolling_mean.py │ │ │ │ ├── rolling_min.py │ │ │ │ ├── rolling_outlier_count.py │ │ │ │ ├── rolling_std.py │ │ │ │ ├── rolling_trend.py │ │ │ │ └── utils.py │ │ │ └── url/ │ │ │ ├── __init__.py │ │ │ ├── url_to_domain.py │ │ │ ├── url_to_protocol.py │ │ │ └── url_to_tld.py │ │ └── utils.py │ ├── selection/ │ │ ├── __init__.py │ │ ├── api.py │ │ └── selection.py │ ├── synthesis/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── deep_feature_synthesis.py │ │ ├── dfs.py │ │ ├── encode_features.py │ │ ├── get_valid_primitives.py │ │ └── utils.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── computational_backend/ │ │ │ ├── __init__.py │ │ │ ├── test_calculate_feature_matrix.py │ │ │ ├── test_feature_set.py │ │ │ ├── test_feature_set_calculator.py │ │ │ └── test_utils.py │ │ ├── config_tests/ │ │ │ ├── __init__.py │ │ │ └── test_config.py │ │ ├── conftest.py │ │ ├── demo_tests/ │ │ │ ├── __init__.py │ │ │ └── test_demo_data.py │ │ ├── entityset_tests/ │ │ │ ├── __init__.py │ │ │ ├── test_es.py │ │ │ ├── test_es_metadata.py │ │ │ ├── test_last_time_index.py │ │ │ ├── test_plotting.py │ │ │ ├── test_relationship.py │ │ │ ├── test_serialization.py │ │ │ ├── test_timedelta.py │ │ │ └── test_ww_es.py │ │ ├── entry_point_tests/ │ │ │ ├── __init__.py │ │ │ ├── add-ons/ │ │ │ │ ├── __init__.py │ │ │ │ ├── featuretools_plugin/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── featuretools_plugin/ │ │ │ │ │ │ └── __init__.py │ │ │ │ │ └── setup.py │ │ │ │ └── featuretools_primitives/ │ │ │ │ ├── __init__.py │ │ │ │ ├── featuretools_primitives/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── existing_primitive.py │ │ │ │ │ ├── invalid_primitive.py │ │ │ │ │ └── new_primitive.py │ │ │ │ └── setup.py │ │ │ ├── test_plugin.py │ │ │ ├── test_primitives.py │ │ │ └── utils.py │ │ ├── feature_discovery/ │ │ │ ├── __init__.py │ │ │ ├── test_convertors.py │ │ │ ├── test_feature_collection.py │ │ │ ├── test_feature_discovery.py │ │ │ └── test_type_defs.py │ │ ├── primitive_tests/ │ │ │ ├── __init__.py │ │ │ ├── aggregation_primitive_tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_agg_primitives.py │ │ │ │ ├── test_count_aggregation_primitives.py │ │ │ │ ├── test_max_consecutive.py │ │ │ │ ├── test_num_consecutive.py │ │ │ │ ├── test_percent_true.py │ │ │ │ ├── test_rolling_primitive.py │ │ │ │ └── test_time_since.py │ │ │ ├── bad_primitive_files/ │ │ │ │ ├── __init__.py │ │ │ │ ├── multiple_primitives.py │ │ │ │ └── no_primitives.py │ │ │ ├── natural_language_primitives_tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_count_string.py │ │ │ │ ├── test_mean_characters_per_word.py │ │ │ │ ├── test_median_word_length.py │ │ │ │ ├── test_natural_language_primitives_terminate.py │ │ │ │ ├── test_num_characters.py │ │ │ │ ├── test_num_unique_separators.py │ │ │ │ ├── test_num_words.py │ │ │ │ ├── test_number_of_common_words.py │ │ │ │ ├── test_number_of_hashtags.py │ │ │ │ ├── test_number_of_mentions.py │ │ │ │ ├── test_number_of_unique_words.py │ │ │ │ ├── test_number_of_words_in_quotes.py │ │ │ │ ├── test_punctuation_count.py │ │ │ │ ├── test_title_word_count.py │ │ │ │ ├── test_total_word_length.py │ │ │ │ ├── test_upper_case_count.py │ │ │ │ ├── test_upper_case_word_count.py │ │ │ │ └── test_whitespace_count.py │ │ │ ├── primitives_to_install/ │ │ │ │ ├── __init__.py │ │ │ │ ├── custom_max.py │ │ │ │ ├── custom_mean.py │ │ │ │ └── custom_sum.py │ │ │ ├── test_absolute_diff.py │ │ │ ├── test_agg_feats.py │ │ │ ├── test_all_primitive_docstrings.py │ │ │ ├── test_direct_features.py │ │ │ ├── test_feature_base.py │ │ │ ├── test_feature_descriptions.py │ │ │ ├── test_feature_serialization.py │ │ │ ├── test_feature_utils.py │ │ │ ├── test_feature_visualizer.py │ │ │ ├── test_features_deserializer.py │ │ │ ├── test_features_serializer.py │ │ │ ├── test_groupby_transform_primitives.py │ │ │ ├── test_identity_features.py │ │ │ ├── test_overrides.py │ │ │ ├── test_primitive_base.py │ │ │ ├── test_primitive_utils.py │ │ │ ├── test_rolling_primitive_utils.py │ │ │ ├── test_transform_features.py │ │ │ ├── transform_primitive_tests/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_cumulative_time_since.py │ │ │ │ ├── test_datetoholiday_primitive.py │ │ │ │ ├── test_distancetoholiday_primitive.py │ │ │ │ ├── test_expanding_primitives.py │ │ │ │ ├── test_exponential_primitives.py │ │ │ │ ├── test_full_name_primitives.py │ │ │ │ ├── test_is_federal_holiday.py │ │ │ │ ├── test_latlong_primitives.py │ │ │ │ ├── test_percent_change.py │ │ │ │ ├── test_percent_unique.py │ │ │ │ ├── test_postal_primitives.py │ │ │ │ ├── test_same_as_previous.py │ │ │ │ ├── test_savgol_filter.py │ │ │ │ ├── test_season.py │ │ │ │ └── test_transform_primitive.py │ │ │ └── utils.py │ │ ├── profiling/ │ │ │ ├── __init__.py │ │ │ └── dfs_profile.py │ │ ├── requirement_files/ │ │ │ ├── latest_requirements.txt │ │ │ ├── minimum_core_requirements.txt │ │ │ ├── minimum_dask_requirements.txt │ │ │ └── minimum_test_requirements.txt │ │ ├── selection/ │ │ │ ├── __init__.py │ │ │ └── test_selection.py │ │ ├── synthesis/ │ │ │ ├── __init__.py │ │ │ ├── test_deep_feature_synthesis.py │ │ │ ├── test_dfs_method.py │ │ │ ├── test_encode_features.py │ │ │ └── test_get_valid_primitives.py │ │ ├── test_version.py │ │ ├── testing_utils/ │ │ │ ├── __init__.py │ │ │ ├── cluster.py │ │ │ ├── es_utils.py │ │ │ ├── features.py │ │ │ ├── generate_fake_dataframe.py │ │ │ └── mock_ds.py │ │ └── utils_tests/ │ │ ├── __init__.py │ │ ├── test_config.py │ │ ├── test_description_utils.py │ │ ├── test_entry_point.py │ │ ├── test_gen_utils.py │ │ ├── test_recommend_primitives.py │ │ ├── test_time_utils.py │ │ ├── test_trie.py │ │ └── test_utils_info.py │ ├── utils/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── common_tld_utils.py │ │ ├── description_utils.py │ │ ├── entry_point.py │ │ ├── gen_utils.py │ │ ├── plot_utils.py │ │ ├── recommend_primitives.py │ │ ├── s3_utils.py │ │ ├── schema_utils.py │ │ ├── time_utils.py │ │ ├── trie.py │ │ ├── utils_info.py │ │ └── wrangle.py │ └── version.py ├── pyproject.toml └── release.md