Best Python code snippet using hypothesis
business_logic.py
Source:business_logic.py
1import pandas as pd2import numpy as np3import datetime4import helper_methods as helpers5from dateutil import relativedelta6from custom_exceptions import NoLeftOperandInPercentage7from chatbot.models import MONTH_NAMES8# class for storing all complex business logic9# All methods should be class method and a data frame as parameter10class BusinessLogic:11 def __init__(self, dimensions, fact_condition, date_condition, dim_filters):12 self.dimensions = dimensions13 self.fact_condition = fact_condition14 self.agg = fact_condition['aggregation']15 self.dim_filters = dim_filters16 self.date_condition = date_condition17 self.start_date = datetime.datetime.today()18 self.end_date = datetime.datetime.strptime('2000-01-01', '%Y-%m-%d')19 for cond in date_condition:20 # Use max date in date_condition for end date and min for start date21 date = datetime.datetime.strptime(cond['CalendarDate'], '%Y-%m-%d')22 if date < self.start_date:23 self.start_date = date24 if date > self.end_date:25 self.end_date = date26 # self.curr_month = self.date.month27 # self.curr_year = self.date.year28 # self.curr_quarter = (self.curr_month - 1) // 3 + 129 # self.last_month = 12 if self.curr_month - 1 == 0 else self.curr_month - 130 # self.last_quarter = 4 if self.curr_quarter - 1 == 0 else self.curr_quarter - 131 # self.last_year = self.curr_year - 132 # self.last_month_year = self.last_year if self.curr_month - 1 == 0 else self.curr_year33 # self.last_qtr_year = self.last_year if self.curr_quarter - 1 == 0 else self.curr_year34 # # Append Q to quarter after creating last qtr and last qtr year35 # self.curr_quarter = "Q" + str(self.curr_quarter)36 # self.last_quarter = "Q" + str(self.last_quarter)37 def mom_facts(self, df):38 if self.dim_filters:39 df = helpers.apply_dim_filters(df, dim_filters=self.dim_filters)40 final_df = pd.DataFrame()41 s_date = self.start_date42 e_date = self.end_date43 if e_date.strftime('%Y-%m-%d') > df['CalendarDate'].max():44 e_date = datetime.datetime.strptime(df['CalendarDate'].max(), '%Y-%m-%d')45 r = relativedelta.relativedelta(e_date, s_date)46 n_months = r.years * 12 + r.months47 # if there is no date or same date then make mom for last 6 months48 if n_months < 1:49 n_months = 650 e_date = datetime.datetime.now()51 s_date = e_date - relativedelta.relativedelta(months=6)52 # show 1 extra month for current month53 for month in range(n_months + 1):54 curr_month_year = MONTH_NAMES[s_date.month]['ShortMonthName'] + '-' + str(s_date.year)55 prev_month_year = helpers.get_prev_month_year(curr_month_year)56 curr_month_facts = helpers.safe_groupby(df[df['MonthYear'] == curr_month_year], self.dimensions + [57 'MonthYear'], self.agg)58 last_month_facts = helpers.safe_groupby(df[df['MonthYear'] == prev_month_year], self.dimensions + [59 'MonthYear'], self.agg)60 if not last_month_facts.empty:61 last_month_facts.index = curr_month_facts.index62 mom_facts = (curr_month_facts / last_month_facts).fillna(63 0) if last_month_facts.empty else 100 * curr_month_facts / last_month_facts64 mom_facts = mom_facts.add_prefix("% MOM ")65 final_df = final_df.append(pd.concat([curr_month_facts, mom_facts], axis=1, sort=False))66 s_date = s_date + relativedelta.relativedelta(months=1)67 # curr_month_facts = curr_month_facts.add_prefix(MONTH_NAMES[self.curr_month] + '-' + str(self.curr_year) + " ")68 # last_month_facts = last_month_facts.add_prefix(MONTH_NAMES[self.last_month] + '-' + str(self.last_month_year) + " ")69 # return pd.concat([curr_month_facts, last_month_facts, mom_facts], axis=1, sort=False)70 return final_df71 def qoq_facts(self, df):72 if self.dim_filters:73 df = helpers.apply_dim_filters(df, dim_filters=self.dim_filters)74 final_df = pd.DataFrame()75 s_date = self.start_date76 e_date = self.end_date77 n_qtr = helpers.get_n_quarters(e_date, s_date)78 # if there is no date or same date then make qoq for last 4 quarters79 if n_qtr < 1:80 n_qtr = 481 e_date = datetime.datetime.now()82 s_date = e_date - relativedelta.relativedelta(months=n_qtr * 3)83 # use 1 extra quarter to show current quarter facts alse84 for qtr in range(n_qtr + 1):85 curr_qtr_year = MONTH_NAMES[s_date.month]['QtrName'] + '-' + str(s_date.year)86 prev_qtr_year = helpers.get_prev_qtr_year(curr_qtr_year)87 curr_qtr_facts = helpers.safe_groupby(df[df['QuarterYear'] == curr_qtr_year], self.dimensions + [88 'QuarterYear'], self.agg)89 last_qtr_facts = helpers.safe_groupby(df[df['QuarterYear'] == prev_qtr_year], self.dimensions + [90 'QuarterYear'], self.agg)91 if not last_qtr_facts.empty:92 last_qtr_facts.index = curr_qtr_facts.index93 qoq_facts = (curr_qtr_facts / last_qtr_facts).fillna(94 0) if last_qtr_facts.empty else 100 * curr_qtr_facts / last_qtr_facts95 qoq_facts = qoq_facts.add_prefix("% QOQ ")96 final_df = final_df.append(pd.concat([curr_qtr_facts, qoq_facts], axis=1, sort=False))97 s_date = s_date + relativedelta.relativedelta(months=3)98 return final_df99 def yoy_fact(self, df):100 if self.dim_filters:101 df = helpers.apply_dim_filters(df, dim_filters=self.dim_filters)102 final_df = pd.DataFrame()103 s_date = self.start_date104 e_date = self.end_date105 n_year = relativedelta.relativedelta(e_date, s_date).years106 # if there is no date or same date then make yoy for last 3 years107 if n_year < 1:108 n_year = 3109 e_date = datetime.datetime.now()110 s_date = e_date - relativedelta.relativedelta(years=3)111 # add 1 to show current year sales also112 for year in range(n_year + 1):113 curr_year = s_date.year114 prev_year = curr_year - 1115 curr_year_facts = helpers.safe_groupby(df[df['Year'] == curr_year], self.dimensions + [116 'Year'], self.agg)117 last_year_facts = helpers.safe_groupby(df[df['Year'] == prev_year], self.dimensions + [118 'Year'], self.agg)119 if not last_year_facts.empty:120 last_year_facts.index = curr_year_facts.index121 yoy_facts = (curr_year_facts / last_year_facts).fillna(122 0) if last_year_facts.empty else 100 * curr_year_facts / last_year_facts123 yoy_facts = yoy_facts.add_prefix("% YoY ")124 final_df = final_df.append(pd.concat([curr_year_facts, yoy_facts], axis=1, sort=False))125 s_date = s_date + relativedelta.relativedelta(years=1)126 return final_df127 def mtd(self, df):128 if self.dim_filters:129 df = helpers.apply_dim_filters(df, dim_filters=self.dim_filters)130 # get max date from the user query for mtd131 date = self.end_date if self.end_date > self.start_date else self.start_date132 curr_month_year = MONTH_NAMES[date.month]['ShortMonthName'] + '-' + str(date.year)133 mtd_facts = helpers.safe_groupby(df[(df['MonthYear'] == curr_month_year) & (134 df['CalendarDate'] <= date.strftime("%Y-%m-%d"))], self.dimensions, self.agg)135 mtd_facts = mtd_facts.add_prefix(136 date.replace(day=1).strftime("%Y-%m-%d") + ' to ' + date.strftime("%Y-%m-%d") + " ")137 return mtd_facts138 def qtd(self, df):139 if self.dim_filters:140 df = helpers.apply_dim_filters(df, dim_filters=self.dim_filters)141 # get max date from the user query for qtd142 date = self.end_date if self.end_date > self.start_date else self.start_date143 curr_qtr_year = MONTH_NAMES[date.month]['QtrName'] + '-' + str(date.year)144 qtd_facts = helpers.safe_groupby(df[(df['QuarterYear'] == curr_qtr_year) & (145 df['CalendarDate'] <= date.strftime("%Y-%m-%d"))], self.dimensions, self.agg)146 qtr_first_date = datetime.datetime(date.year, (3 * int(MONTH_NAMES[date.month]['QtrName'][1:]) - 2), 1)147 qtd_facts = qtd_facts.add_prefix(148 qtr_first_date.strftime("%Y-%m-%d") + ' to ' + date.strftime("%Y-%m-%d") + " ")149 return qtd_facts150 def ytd(self, df):151 if self.dim_filters:152 df = helpers.apply_dim_filters(df, dim_filters=self.dim_filters)153 # get max date from the user query for ytd154 date = self.end_date if self.end_date > self.start_date else self.start_date155 ytd_facts = helpers.safe_groupby(df[(df['Year'] == date.year) & (156 df['CalendarDate'] <= date.strftime("%Y-%m-%d"))], self.dimensions, self.agg)157 ytd_facts = ytd_facts.add_prefix(158 date.replace(day=1, month=1).strftime("%Y-%m-%d") + ' to ' + date.strftime("%Y-%m-%d") + " ")159 return ytd_facts160 def target_achievement(self, df):161 fact_condition = self.fact_condition.copy()162 if self.dim_filters:163 df = helpers.apply_dim_filters(df, dim_filters=self.dim_filters)164 if self.date_condition:165 df = helpers.apply_date_condition(df, self.date_condition)166 # add Sales in Aggregation167 if 'SalesAmount' not in fact_condition['aggregation']:168 fact_condition['aggregation']['SalesAmount'] = ['sum']169 fact_condition['conditions'] += [170 {'fact_name': 'SalesAmount sum', 'conditions': np.nan, 'fact_value': np.nan}]171 # add Target Amount in Aggregation172 if 'TargetAmount' not in fact_condition['aggregation']:173 fact_condition['aggregation']['TargetAmount'] = fact_condition['aggregation']['SalesAmount']174 fact_condition['conditions'] += [175 {'fact_name': 'TargetAmount sum', 'conditions': np.nan, 'fact_value': np.nan}]176 # add sum to sales Amount177 if 'sum' not in fact_condition['aggregation']['SalesAmount']:178 fact_condition['aggregation']['SalesAmount'] += ['sum']179 fact_condition['conditions'] += [180 {'fact_name': 'SalesAmount sum', 'conditions': np.nan, 'fact_value': np.nan}]181 # Apply fact condition182 df = helpers.apply_fact_condition(df, self.dimensions + list(self.dim_filters.keys()), fact_condition)183 sale_fact_names = [c['fact_name'] for c in fact_condition['conditions'] if c['fact_name'][0:5] == 'Sales']184 target_fact_names = [c['fact_name'] for c in fact_condition['conditions'] if c['fact_name'][0:6] == 'Target']185 # target facts for 0th name186 target_facts = pd.DataFrame(100 * df[sale_fact_names[0]] / df[target_fact_names[0]])187 target_facts.columns = ["% Target Achievement"]188 # return pd.concat([df, target_facts], axis=1, sort=False)189 return target_facts190 # TODO Need to implement again for more dynamic191 def contribution(self, df):192 # Raise Error if there is no filters193 if not self.dim_filters and not self.date_condition and not self.dimensions:194 raise NoLeftOperandInPercentage(195 "Could not apply percentage without a filter! Either apply filter in dimension or date")196 all_filtered = df.copy()197 less_filtered = df.copy()198 contribution = pd.DataFrame({'Error': ["Could not applied percentage"]})199 if (self.dim_filters or self.dimensions) and self.date_condition:200 # Do not filter lowest level dimension201 all_filtered = helpers.apply_dim_filters(all_filtered, dim_filters=self.dim_filters)202 all_filtered = helpers.apply_date_condition(all_filtered, self.date_condition)203 less_filtered = helpers.apply_date_condition(less_filtered, self.date_condition)204 all_filtered = helpers.apply_fact_condition(all_filtered, self.dimensions, self.fact_condition)205 less_filtered = helpers.apply_fact_condition(less_filtered, self.dimensions[1:], self.fact_condition)206 contribution = 100 * all_filtered / less_filtered.iloc[0]207 contribution = contribution.add_prefix("% ")208 elif len(self.dim_filters.keys()) == 1 or self.dimensions:209 # Do not filter lowest level dimension210 less_dim_filters = {k: v for k, v in self.dim_filters.items() if k != list(self.dim_filters.keys())[0]}211 all_filtered = helpers.apply_dim_filters(all_filtered, dim_filters=self.dim_filters)212 less_filtered = helpers.apply_dim_filters(less_filtered, dim_filters=less_dim_filters)213 all_filtered = helpers.apply_fact_condition(all_filtered, self.dimensions, self.fact_condition)214 less_filtered = helpers.apply_fact_condition(less_filtered, self.dimensions[1:], self.fact_condition)215 contribution = 100 * all_filtered / less_filtered.iloc[0]216 contribution = contribution.add_prefix("% ")217 elif len(self.dim_filters.keys()) > 1:218 # Do not filter lowest level dimension219 less_dim_filters = {k: v for k, v in self.dim_filters.items() if k != list(self.dim_filters.keys())[0]}220 all_filtered = helpers.apply_dim_filters(all_filtered, dim_filters=self.dim_filters)221 less_filtered = helpers.apply_dim_filters(less_filtered, dim_filters=less_dim_filters)222 all_filtered = helpers.apply_fact_condition(all_filtered, self.dimensions, self.fact_condition)223 less_filtered = helpers.apply_fact_condition(less_filtered, self.dimensions[1:], self.fact_condition)224 contribution = 100 * all_filtered / less_filtered225 contribution = contribution.add_prefix("% ")226 elif self.date_condition:227 # Do not filter first level date228 less_date_filters = self.date_condition[1:]229 more_date_filters = self.date_condition[0:1]230 if not len(self.date_condition) % 2:231 less_date_filters = self.date_condition[2:]232 more_date_filters = self.date_condition[0:2]233 all_filtered = helpers.apply_date_condition(all_filtered, more_date_filters)234 less_filtered = helpers.apply_date_condition(less_filtered, less_date_filters)235 all_filtered = helpers.apply_fact_condition(all_filtered, self.dimensions, self.fact_condition)236 less_filtered = helpers.apply_fact_condition(less_filtered, self.dimensions[1:], self.fact_condition)237 contribution = 100 * all_filtered / less_filtered238 contribution = contribution.add_prefix("% ")...
gaussian_filter_factory.py
Source:gaussian_filter_factory.py
1'''2Created on Jun 19, 20133@author: Simon4'''5from algorithms.AbstractAlgorithmFactory import AbstractAlgorithmFactory6from algorithms.image.gaussian_filter import GaussianFilter7class GaussianFilterFactory(AbstractAlgorithmFactory):8 '''9 Factory class for Linear Regression.10 Provides the functionalities specified by the AbstractAlgorithmClass.11 '''12 def __init__(self, sigma):13 '''14 Constructor15 '''16 self.sigma = sigma17 18 def get_instance(self):19 '''20 Create a Gaussian filter21 :return: Object implementing AbstractAlgorithm22 '''23 gaussian_filter = GaussianFilter(self.sigma)24 return gaussian_filter25 def aggregate(self, algs):26 '''27 Aggregates a list of GaussianFilter instances.28 :param algs list of algorithm instances29 :return same as input30 '''31 all_filtered = []32 for f in algs:33 all_filtered.extend(f.filtered)34 gaussian_filter = GaussianFilter(self.sigma)35 gaussian_filter.filtered = all_filtered36 return gaussian_filter37 38 def encode(self, alg_instance):39 return alg_instance.filtered40 41 def decode(self, encoded):42 deserialized = []43 for f in encoded:44 # create new algorithm object45 gauss_filter = GaussianFilter(self.sigma)46 gauss_filter.set_params(f)47 # append to list of algorithm objetcs48 deserialized.append(gauss_filter)...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!