From 1e49f6c65cc4b7dfbfe32135880b4b22c6dc2464 Mon Sep 17 00:00:00 2001 From: mpecchi Date: Wed, 20 Mar 2024 11:51:52 -0400 Subject: [PATCH] test fixed v1.0.8 --- pyproject.toml | 2 +- scripts/utils.py | 36 +- src/gcms_data_analysis/main.py | 121 +++--- test/data_for_testing/output/files_info.xlsx | Bin 0 -> 5014 bytes .../output/samples/samples_info.xlsx | Bin 0 -> 5014 bytes .../output/samples/samples_info_std.xlsx | Bin 0 -> 5014 bytes tests/conftest.py | 350 ++++++++++-------- .../compounds_properties.xlsx | Bin 8258 -> 8227 bytes .../deriv_compounds_properties.xlsx | Bin 7126 -> 7079 bytes tests/test_gcms_data_analysis.py | 76 ++-- 10 files changed, 322 insertions(+), 263 deletions(-) create mode 100644 test/data_for_testing/output/files_info.xlsx create mode 100644 test/data_for_testing/output/samples/samples_info.xlsx create mode 100644 test/data_for_testing/output/samples/samples_info_std.xlsx diff --git a/pyproject.toml b/pyproject.toml index a224bb2..eba985a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "gcms_data_analysis" -version = "1.0.7" +version = "1.0.8" authors = [{ name = "Matteo Pecchi" }] description = "Automatic analysis of GC-MS data" readme = "README.md" diff --git a/scripts/utils.py b/scripts/utils.py index 3003de8..beae60e 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -3,16 +3,19 @@ import pandas as pd import numpy as np from pandas.testing import assert_frame_equal +from collections.abc import Iterable # example_data_path = plib.Path(plib.Path(__file__).parent.parent, # 'example/data/') -example_data_path = r"C:\Users\mp933\OneDrive - Cornell University\Python\gcms_data_analysis\example\data" +example_data_path = r"C:\Users\mp933\OneDrive - Cornell University\Python\gcms_data_analysis\tests\data_for_testing" Project.set_folder_path(example_data_path) gcms = Project() -#%% -def print_checked_df_to_script_text(df): + + +# %% +def print_checked_df_to_script_text_with_arrays(df): # Convert the DataFrame to a dictionary with 'list' orientation - df_dict = df.to_dict(orient='list') + df_dict = df.to_dict(orient="list") # Convert the index to a list and get the index name index_list = df.index.tolist() @@ -28,16 +31,25 @@ def print_checked_df_to_script_text(df): # Start printing the data dictionary print(" data={") - # Print each column's data + # Iterate over each column and its values for key, values in df_dict.items(): - # Replace NaN values with np.nan for printing - values_with_nan = [f"np.nan" if pd.isnull(value) else value for value in values] - # Prepare the string representation of the list, handling np.nan specially - values_str = str(values_with_nan).replace("'np.nan'", "np.nan") + # Initialize a list to hold the processed values for each column + processed_values = [] + for value in values: + # Check if the value is an iterable (not a string) and convert to tuple + if isinstance(value, Iterable) and not isinstance(value, str): + processed_value = f"({', '.join(repr(v) for v in value)})" + elif pd.isnull(value): + # Handle NaN values + processed_value = "np.nan" + else: + # Direct representation for other types + processed_value = repr(value) + processed_values.append(processed_value) + # Join the processed values into a string representing a list or tuple + values_str = f"[{', '.join(processed_values)}]" print(f" '{key}': {values_str},") - # Close the data dictionary + # Close the data dictionary and DataFrame construction print(" }") - # Close the DataFrame construction print(")") -#%% \ No newline at end of file diff --git a/src/gcms_data_analysis/main.py b/src/gcms_data_analysis/main.py index 6471be4..baf197a 100644 --- a/src/gcms_data_analysis/main.py +++ b/src/gcms_data_analysis/main.py @@ -1625,6 +1625,7 @@ class Project: compounds_to_rename = {} param_to_axis_label: dict[str:str] = { + "height": "Peak Height [-]", "area": "Peak Area [-]", "area_if_undiluted": "Peak Area [-]", "conc_vial_mg_L": "conc. [mg/L] (ppm)", @@ -2545,6 +2546,8 @@ def create_samples_info(self): attribute with this summarized data.""" if not self.files_info_created: self.load_files_info() + if not self.stats_to_files_info_added: + self.add_stats_to_files_info() # Define numeric columns based on calibration presence if not self.calibrations_not_present: # calibrations available @@ -2559,36 +2562,40 @@ def create_samples_info(self): ] else: numeric_columns = ["height", "area", "area_if_undiluted"] + files_info = self.files_info.reset_index() max_columns = [f"max_{nc}" for nc in numeric_columns] total_columns = [f"total_{nc}" for nc in numeric_columns] all_numeric_columns = numeric_columns + max_columns + total_columns # Ensure these columns are in files_info before proceeding - numcol = [col for col in all_numeric_columns if col in self.files_info.columns] - files_info = self.files_info.reset_index() + numcol = [col for col in all_numeric_columns if col in files_info.columns] + # Identify non-numeric columns non_numcol = [ col for col in files_info.columns if col not in numcol and col != "samplename" ] + # Initialize samples_info DataFrame # self.samples_info = pd.DataFrame(columns=self.files_info.columns) # Create an aggregation dictionary + agg_dict = { **{nc: "mean" for nc in numcol}, **{nnc: lambda x: list(x) for nnc in non_numcol}, } - agg_dict_std = { **{nc: "std" for nc in numcol}, **{nnc: lambda x: list(x) for nnc in non_numcol}, } + # Group by 'samplename' and apply aggregation, make sure 'samplename' is not part of the aggregation - _samples_info = files_info.groupby("samplename").agg(agg_dict) _samples_info_std = files_info.groupby("samplename").agg(agg_dict_std) - self.samples_info = _samples_info.loc[:, non_numcol + numcol] - self.samples_info_std = _samples_info_std.loc[:, non_numcol + numcol] + _samples_info = files_info.groupby("samplename").agg(agg_dict) + + self.samples_info = _samples_info[non_numcol + numcol] + self.samples_info_std = _samples_info_std[non_numcol + numcol] self.samples_info_created = True if Project.auto_save_to_excel: self.save_samples_info() @@ -2672,55 +2679,55 @@ def _create_sample_from_files( return sample, sample_std - def add_stats_to_samples_info(self): - """Generates summary statistics for each sample based on the processed files, - adding these statistics to the 'samples_info' DataFrame. - Updates the 'samples_info' with sample-specific maximum, - total values, and compound with maximum concentration.""" - print("Info: add_stats_to_samples_info: started") - if not self.samples_created: - self.create_samples_from_files() - if not self.samples_info_created: - self.create_samples_info() - if not self.calibrations_not_present: # calibrations available - numeric_columns = [ - "height", - "area", - "area_if_undiluted", - "conc_vial_mg_L", - "conc_vial_if_undiluted_mg_L", - "fraction_of_sample_fr", - "fraction_of_feedstock_fr", - ] - else: - numeric_columns = ["height", "area", "area_if_undiluted"] - max_columns = [f"max_{nc}" for nc in numeric_columns] - total_columns = [f"total_{nc}" for nc in numeric_columns] - for name, df in self.samples.items(): - for ncol, mcol, tcol in zip(numeric_columns, max_columns, total_columns): - self.samples_info.loc[name, mcol] = df[ncol].max() - self.samples_info.loc[name, tcol] = df[ncol].sum() - for name, df in self.samples.items(): - self.samples_info.loc[name, "compound_with_max_area"] = df[ - df["area"] == df["area"].max() - ].index[0] - if not self.calibrations_not_present: - self.samples_info.loc[name, "compound_with_max_conc"] = df[ - df["conc_vial_mg_L"] - == self.samples_info.loc[name, "max_conc_vial_mg_L"] - ].index[0] - # convert max and total columns to float - for col in max_columns + total_columns: - if col in self.samples_info.columns: - try: - self.samples_info[col] = self.samples_info[col].astype(float) - except ValueError: - print(self.samples_info[col]) - self.stats_to_samples_info_added = True - if Project.auto_save_to_excel: - self.save_samples_info() - self.stats_to_samples_info_added = True - return self.samples_info + # def add_stats_to_samples_info(self): + # """Generates summary statistics for each sample based on the processed files, + # adding these statistics to the 'samples_info' DataFrame. + # Updates the 'samples_info' with sample-specific maximum, + # total values, and compound with maximum concentration.""" + # print("Info: add_stats_to_samples_info: started") + # if not self.samples_created: + # self.create_samples_from_files() + # if not self.samples_info_created: + # self.create_samples_info() + # if not self.calibrations_not_present: # calibrations available + # numeric_columns = [ + # "height", + # "area", + # "area_if_undiluted", + # "conc_vial_mg_L", + # "conc_vial_if_undiluted_mg_L", + # "fraction_of_sample_fr", + # "fraction_of_feedstock_fr", + # ] + # else: + # numeric_columns = ["height", "area", "area_if_undiluted"] + # max_columns = [f"max_{nc}" for nc in numeric_columns] + # total_columns = [f"total_{nc}" for nc in numeric_columns] + # for name, df in self.samples.items(): + # for ncol, mcol, tcol in zip(numeric_columns, max_columns, total_columns): + # self.samples_info.loc[name, mcol] = df[ncol].max() + # self.samples_info.loc[name, tcol] = df[ncol].sum() + # for name, df in self.samples.items(): + # self.samples_info.loc[name, "compound_with_max_area"] = df[ + # df["area"] == df["area"].max() + # ].index[0] + # if not self.calibrations_not_present: + # self.samples_info.loc[name, "compound_with_max_conc"] = df[ + # df["conc_vial_mg_L"] + # == self.samples_info.loc[name, "max_conc_vial_mg_L"] + # ].index[0] + # # convert max and total columns to float + # for col in max_columns + total_columns: + # if col in self.samples_info.columns: + # try: + # self.samples_info[col] = self.samples_info[col].astype(float) + # except ValueError: + # print(self.samples_info[col]) + # self.stats_to_samples_info_added = True + # if Project.auto_save_to_excel: + # self.save_samples_info() + # self.stats_to_samples_info_added = True + # return self.samples_info def create_files_param_report(self, param="conc_vial_mg_L"): """Creates a detailed report for each parameter across all FILES, @@ -2963,8 +2970,8 @@ def save_samples_info(self): """Saves the 'samples_info' DataFrame as an Excel file in a 'samples' subfolder within the project's output path, after ensuring that sample statistics have been added, providing a summarized view of sample data.""" - if not self.stats_to_samples_info_added: - self.add_stats_to_samples_info() + if not self.samples_info_created: + self.create_samples_info() out_path = plib.Path(Project.out_path, "samples") out_path.mkdir(parents=True, exist_ok=True) self.samples_info.to_excel(plib.Path(out_path, "samples_info.xlsx")) diff --git a/test/data_for_testing/output/files_info.xlsx b/test/data_for_testing/output/files_info.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ffa901d6d6b99fcf60a1d51bb0cdffee310ec052 GIT binary patch literal 5014 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 R0I-p78Ds`m__f9Y{2$5L#ODA2 literal 0 HcmV?d00001 diff --git a/test/data_for_testing/output/samples/samples_info.xlsx b/test/data_for_testing/output/samples/samples_info.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bc61ec12a6594eee131e48093f89eabd845835f6 GIT binary patch literal 5014 zcmZ`-1yqy$+a4t?j1U|WN_TfiNW(y-TVMi`vWav#x<(@@jnqK8rArtkAV^3E2q-y0 zLB6TyJ-+h2|Lr`_&d%9&Klkt2b*HW-4lWe{03ZM?Btnf;Ogc$|G2f~&7dhs#b+yrT zcXfmEKX7y7^K^F7j@2ga5+J{Gp|Q2#qQA!^$TXF|Jm{k)E{3pG@(4Nez26x(FS95R z-Ap}X)WiH#G_J>%#&aQ{0imo5Widsu}G~Hw6iMcr{up@=kTFr#>$wrc~f` z#@L+6`8#pn!_W2WDc;0U`6N)GGT*`io2|mROAb(H94pm(*tPDqk*}YW^O#Iw>uH^8 ziDU;>R6+DDyu>PksQ9cT75chWt`{TsUK15+S=5<00Jt#XnIl&Pn#{9g7}%IKh@4J7{DEza%oj< zt^6!_?B&Pw?wYt-GS#j#3ZGC9>%~Cwu_z4{*qXv?4^EwW&*m28AgC=VdZ8c}0Xie5 zfKk`tHLywe2fePI*N^OO8#wllPpAb35BeqHHLIiZC#ea9NTsE+j7B|t(LK94(L-}E z5ogfy>b|E${qRJT+YQ|1yDiyWSw~JC1qy_<`3_^Yv*@|X_@dI7`#O_f{g$>f>@$gC zOm!w5pDs+sM)XyTd6Ks8>x6YzM)Z}9!L}XP*v~5+3%0J=E2^w+ds9%?t;4FH-2ZD}OgKze}N1h+2whR^sduRDcjXEX;IFw-(@3v&163?KUYdOV< zGun!yZmm3o``?*OAB3^HNK?8?-LO;iMWNC0g{(rTFQ-J?U>Q3`gOn9U5oM(T6$6LJ;MN+$FpblmAXexb@ZTEF#ueyR~QRx0h1NU11K z@3d#~>-~yM8G1^JktE_P3ZbbiY!ojg{k7F7e{dJh{m7h@-%H|W`KA#c=TO633}YMF z6b5ywAnBfj*-yxL|G+!V6eYS5Pe+e!M^~eA6YkKm$ADysO|R$zax2PNUl#+p*If&$ zfBX_|WkS(6?g^f#1)dp~izdoh4eX4>KN+2lzY0vS5Xby>GztOiU^di-OczyLOnbgp z3eL@l@Nw7}x{nO>>md_4XC-r9@0{DqW$*8Pd&dGtrW^AzUqfgH)hMtuo<$AqarF>x z+M2Qw4(m-q#3L!P73o~I?jLI;&#WVxI2vV4*S3(kFgYI7sf^`D?Fg~3QiHqZr~0J! zIyMQ7qv|(qV1{85X*-z&`ue9Y=taMy%{|tb3kB|{Dm8)>+i{$mv))TdWT(Y95l!Ah zxOSgz^?HInU z2$i!_ISY?UgH_|qJ`dHhtrhPJ{Ab9!*a!FYtprW`aJUh9zFN`Bn{FGaW|pht39Iu( zkUAG6=hN%Xx9&-HIiykAl?^RIsyp@RQTnC_Rqc;tYpKDgAI22}IV3>vHDU@inx@9bd*+ZNpjO#4RMc0kg^Nj+L2CmEp3^DGo>F~Lef6EW_LR)U&ZB2Y%#)K<2(WXZtmT^?p6-Ct* zeRF~&UV%o3B)JbImco?NLBemN$|YlnTovBRuiu`ZBDF`8irk3Dvk-h@XaFx9DJ3vusY@odBeE8~f@n54Sqv&=M~ttGJUld@4H4sg_0r=@Wb~D3 z`wxq({sJmZ#dKpLAGaXhTryVk`+DTc(`DBff;x_|$nQP=_;Nh(SWWEl*xFXu@b*G< z8rWBr_B=`=qC4r%_cY(iLl~uKP-rA`2+=TB{fj5IL>m4K>XREqz*8Z)@g?m;e6PZT zD%Nux$Ik~xe(6(VB?^Z)G13yFuw$NmgK91zRhyNSDrJLSt50&IjIsGKhQ|YZJJy^1 zA%;aWR>?tHZn~6Zc~aJ{)77LuD4Wbxr8Y$kA{FL3la{a1y3AaEU|ZkX!Y$Mb2a7w( zminxR+S;k?mLBnGzZz*4^}feD`694QYk%$eAlHHr=OgZ}hedFiE9VoA9x9*=iSSUv zt*)}r)T#%-RN6bQH$C_m}-#PON-hOngp zt|#;&)~}wFDR(zCZ>}5oc~Ii1J?Jm=?Qy<64`m=8SRG@_J+!1-g7NIA!`Jd@-}K-~ zHHy$gTh5yQ$XKwDq5BGfN7q_jfMQn3QW{p4XTm&)0);x5-aN}bZjivpSqjB{ZX#HC$GOnCR1{7YuuY^ zf{@-Y%N|r|*#Ov)Ht5#rOvaggyO$C(A)D37m9_Sz6`0S3YGJ6l_IQRRp!=>F)uh7} zJ4Nxc*BQ=cbAG$MxVUa~NPz+Iv9=C^a9cb?AUTU)`~yV!Yi7UmIIoJ$R%|tuMsGTk z@p9@BqE_+TiVk&4+%kBSS`*JWYe zX{4`)YiyK?WQ6lQv?RtHaUX?gEn$F$*hDQ z5EPT9RC>8Ytr7n5VH~L81dKyn15k=C9BG{R2UbihNgE%Oy$|Jv!C#u3zCCL@CH-5` z4XWFbuQ5u#hEX*})BsC&h!d2b@8>-$LDL0WkVGCy0kPD2*@G=uK3k;}PTUx=k^j6W z-lpdW9W(oy$sVYAk)6$pBolezaRWME=+r0BWA@HKv;y$Tk<%*sah?&EsHQw`t_Wi6 zc$S>!<00z+Z@0^IgBJ8m{fH=jyBS&wc}hfejCE4kozASGWb*EDps?n}$a@sgRC*S& zeCMoKbg$^m;V}~;PgU8C=P15FE6O7YDVM#_UT|1wV_oaHw0UtjRzf9v+L0wt7%?%U zOvvV1b$V$ALO;PO6~H8FPRv2ceuwVQL~ZTr>i9EwV-VwD%mkzyP&kA?<`S%~wQZ3W zs7^qxDhsC>5G^g43QV$HF43AA(Ie^z+!rax1qx<8a56rLt{k_nLpG#Abp(Fx}huh`48nQX=*k z*7%|s@x=M%cJYsV_WYkCVCObYt)C8v|5lOk_G)tlhScvEf?PpY%$0AD@=aG;4OtZ0*4z*os8FC4a92Q<-K}wbFOGhRIb85 zPGX--z_*;SM9G$uYu$9stjh^4)@hQ!fhgqIHv9GpTo5=+0p!2p5LdI67~oxaJIwt3 zu3?iXO0}`#=JL_@%B4eQget=6FbAB$l=`2uqN$Rr3k>1{v()o)gFwxHs;D9n^;1QC zmW7|5JQ9|0li%ix=H7Wt4DT_||CnR#3UiH{f2HxFnlxE6zYqNtdd6DTV1xTc%1+k6 zONojxME-4HqERS8HuDoTFvUetR`|U-cl;IqCSP(cPi!5$W6-I0U69FVUI>cbHJ`A3 zh|=gyO|f9LoqkjFIEXc3b!GXOOk-b}qse`sv+s_Xn__lEP58|t?hkq=-hoNcp-$YC zZEF1vc{SKu_E^KiAiHLgC(cxxFVL}?8qtIWeOCfAc~!@IsYUh?56%`xT&xgHYHL%@ zM8J1-xB(kkPFrPB1B!?NGs!i$?e05v_~K*IZw3-NC(H#Nd$_$-Zx|1s=CGfeg1pFb z&%gLgBMTGzbV$QL$RdBv-B{REfd9Qi!4UfE6^LQ@|8G<-qc3kXeq#ZEK&+~NqyO1& zT!vpB`~Sd)FpvL_CBS6^m)pL74Ach^6Z|sppH1LpE0^1ef2;&zof7`C@~64D485GU z|3HUH{>tK)ftT~(A7Cw}qrn{g-ywS$d^yhlfPt8tiUI$RsK0FIawz?=gT~nTkHFH^ W#KUZ9002VFTMm=K6@RX=0RIP^gvjXt literal 0 HcmV?d00001 diff --git a/test/data_for_testing/output/samples/samples_info_std.xlsx b/test/data_for_testing/output/samples/samples_info_std.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bc61ec12a6594eee131e48093f89eabd845835f6 GIT binary patch literal 5014 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 W#KUZ9002VFTMm=K6@RX=0RIP^gvjXt literal 0 HcmV?d00001 diff --git a/tests/conftest.py b/tests/conftest.py index c157175..b9bcce0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,12 +5,18 @@ import rdkit from gcms_data_analysis.main import Project + @pytest.fixture -def gcms(): - folder_path = plib.Path(plib.Path(__file__).parent.parent, 'tests/data_for_testing/') +def gcms() -> Project: + + folder_path: plib.Path = plib.Path( + plib.Path(__file__).parent.parent, "tests/data_for_testing/" + ) Project.set_folder_path(folder_path) return Project() + +# fmt: off @pytest.fixture def checked_files_info(): files_info = pd.DataFrame( @@ -448,75 +454,115 @@ def checked_files_info_added_stats(): ) return files_info + @pytest.fixture def checked_samples_info(): samples_info = pd.DataFrame( index=pd.Index(['A', 'Ader', 'B'], name='samplename'), data={ - 'filename': [['A_1', 'A_2'], ['Ader_1', 'Ader_2'], ['B_1', 'B_2']], - 'derivatized': [[False, False], [True, True], [False, False]], - 'dilution_factor': [[25, 25], [125, 125], [1, 1]], - 'total_sample_conc_in_vial_mg_L': [[560.0000000000001, 560.0000000000001], [112.0, 112.0], [2800.0, 2800.0]], - 'sample_yield_on_feedstock_basis_fr': [[0.45, 0.46], [0.47, 0.48], [0.49, 0.5]], - 'calibration_file': [['calibration', 'calibration'], ['deriv_calibration', 'deriv_calibration'], ['calibration', 'calibration']], + 'filename': [('A_1', 'A_2'), ('Ader_1', 'Ader_2'), ('B_1', 'B_2')], + 'derivatized': [(False, False), (True, True), (False, False)], + 'dilution_factor': [(25, 25), (125, 125), (1, 1)], + 'total_sample_conc_in_vial_mg_L': [(560.0000000000001, 560.0000000000001), (112.0, 112.0), (2800.0, 2800.0)], + 'sample_yield_on_feedstock_basis_fr': [(0.45, 0.46), (0.47, 0.48), (0.49, 0.5)], + 'calibration_file': [('calibration', 'calibration'), ('deriv_calibration', 'deriv_calibration'), ('calibration', 'calibration')], + 'compound_with_max_area': [('oleic acid', 'oleic acid'), ('9-octadecenoic acid, (z)-, tms derivative', '9-octadecenoic acid, (z)-, tms derivative'), ('2,5-hexanedione', '2,5-hexanedione')], + 'compound_with_max_conc': [('9,12-octadecadienoic acid (z,z)-', '9,12-octadecadienoic acid (z,z)-'), ('9,12-octadecadienoic acid (z,z)-, tms derivative', '9,12-octadecadienoic acid (z,z)-, tms derivative'), ('phenol', 'phenol')], + 'max_height': [1143123.0, 548218.5, 116469.5], + 'max_area': [6387230.0, 1840687.0, 456719.5], + 'max_area_if_undiluted': [159680750.0, 230085875.0, 456719.5], + 'max_conc_vial_mg_L': [128.28438972770587, 34.090377368664285, 7.526085990440194], + 'max_conc_vial_if_undiluted_mg_L': [3207.1097431926473, 4261.297171083035, 7.526085990440194], + 'max_fraction_of_sample_fr': [0.2290792673709033, 0.304378369363074, 0.0026878878537286406], + 'max_fraction_of_feedstock_fr': [0.10420514155783843, 0.1447012705450368, 0.00133114530090798], + 'total_height': [2001498.5, 1271114.0, 263429.0], + 'total_area': [9663908.0, 3905876.5, 950583.0], + 'total_area_if_undiluted': [241597700.0, 488234562.5, 950583.0], + 'total_conc_vial_mg_L': [340.6411164089501, 87.78908432611982, 13.71532827405969], + 'total_conc_vial_if_undiluted_mg_L': [8516.027910223755, 10973.635540764979, 13.71532827405969], + 'total_fraction_of_sample_fr': [0.608287707873125, 0.7838311100546413, 0.0048983315264498895], + 'total_fraction_of_feedstock_fr': [0.27682625306711833, 0.3724952251077016, 0.002425217492902904], } ) return samples_info @pytest.fixture -def checked_samples_info_no_calibrations(): - samples_info = pd.DataFrame( - index=pd.Index(['A', 'Ader', 'B'], name='samplename'), +def checked_samples_info_std(): + samples_info_std = pd.DataFrame( + index=pd.Index(['A', 'Ader', 'B'], name='samplename'), data={ - 'filename': [['A_1', 'A_2'], ['Ader_1', 'Ader_2'], ['B_1', 'B_2']], - 'replicate_number': [['1', '2'], ['1', '2'], ['1', '2']], - 'derivatized': [[False, False], [False, False], [False, False]], - 'calibration_file': [[False, False], [False, False], [False, False]], - 'dilution_factor': [[1, 1], [1, 1], [1, 1]], - 'total_sample_conc_in_vial_mg_L': [[1, 1], [1, 1], [1, 1]], - 'sample_yield_on_feedstock_basis_fr': [[1, 1], [1, 1], [1, 1]], - 'compound_with_max_area': ['oleic acid', '9-octadecenoic acid, (z)-, tms derivative', '2,5-hexanedione'], - 'max_height': [1143123.0, 548218.5, 116469.5], - 'max_area': [6387230.0, 1840687.0, 456719.5], - 'max_area_if_undiluted': [6387230.0, 1840687.0, 456719.5], - 'total_height': [2003628.0, 1271114.0, 263429.0], - 'total_area': [9669384.0, 3905876.5, 950583.0], - 'total_area_if_undiluted': [9669384.0, 3905876.5, 950583.0], + 'filename': [('A_1', 'A_2'), ('Ader_1', 'Ader_2'), ('B_1', 'B_2')], + 'derivatized': [(False, False), (True, True), (False, False)], + 'dilution_factor': [(25, 25), (125, 125), (1, 1)], + 'total_sample_conc_in_vial_mg_L': [(560.0000000000001, 560.0000000000001), (112.0, 112.0), (2800.0, 2800.0)], + 'sample_yield_on_feedstock_basis_fr': [(0.45, 0.46), (0.47, 0.48), (0.49, 0.5)], + 'calibration_file': [('calibration', 'calibration'), ('deriv_calibration', 'deriv_calibration'), ('calibration', 'calibration')], + 'compound_with_max_area': [('oleic acid', 'oleic acid'), ('9-octadecenoic acid, (z)-, tms derivative', '9-octadecenoic acid, (z)-, tms derivative'), ('2,5-hexanedione', '2,5-hexanedione')], + 'compound_with_max_conc': [('9,12-octadecadienoic acid (z,z)-', '9,12-octadecadienoic acid (z,z)-'), ('9,12-octadecadienoic acid (z,z)-, tms derivative', '9,12-octadecadienoic acid (z,z)-, tms derivative'), ('phenol', 'phenol')], + 'max_height': [6330.019905181974, 65717.79713669654, 5193.699307815192], + 'max_area': [10575.489019426004, 163869.16811285765, 22121.83564942114], + 'max_area_if_undiluted': [264387.2254856501, 20483646.014107205, 22121.83564942114], + 'max_conc_vial_mg_L': [4.106325693068217, 3.8503522496954825, 0.5074982512365029], + 'max_conc_vial_if_undiluted_mg_L': [102.65814232670576, 481.29403121193536, 0.5074982512365029], + 'max_fraction_of_sample_fr': [0.007332724451907525, 0.03437814508656681, 0.00018124937544160814], + 'max_fraction_of_feedstock_fr': [0.001716554591745799, 0.01848189900635057, 0.00010872467812800095], + 'total_height': [35334.83296267297, 88567.95277073982, 12695.395149423275], + 'total_area': [188070.60480574841, 215433.51591732426, 45073.814659955286], + 'total_area_if_undiluted': [4701765.120143711, 26929189.48966553, 45073.814659955286], + 'total_conc_vial_mg_L': [8.766356747981709, 5.557903750459465, 0.4303407940826049], + 'total_conc_vial_if_undiluted_mg_L': [219.1589186995424, 694.7379688074318, 0.4303407940826049], + 'total_fraction_of_sample_fr': [0.015654208478538812, 0.049624140629102274, 0.00015369314074378663], + 'total_fraction_of_feedstock_fr': [0.011423908489230281, 0.029113989731069757, 0.00011071453905670015], } ) - return samples_info + return samples_info_std @pytest.fixture -def checked_samples_info_applied_calibration(): +def checked_samples_info_no_calibrations(): samples_info = pd.DataFrame( index=pd.Index(['A', 'Ader', 'B'], name='samplename'), data={ - 'filename': [['A_1', 'A_2'], ['Ader_1', 'Ader_2'], ['B_1', 'B_2']], - 'derivatized': [[False, False], [True, True], [False, False]], - 'dilution_factor': [[25, 25], [125, 125], [1, 1]], - 'total_sample_conc_in_vial_mg_L': [[560.0000000000001, 560.0000000000001], [112.0, 112.0], [2800.0, 2800.0]], - 'sample_yield_on_feedstock_basis_fr': [[0.45, 0.46], [0.47, 0.48], [0.49, 0.5]], - 'calibration_file': [['calibration', 'calibration'], ['deriv_calibration', 'deriv_calibration'], ['calibration', 'calibration']], - 'compound_with_max_area': ['oleic acid', '9-octadecenoic acid, (z)-, tms derivative', '2,5-hexanedione'], - 'compound_with_max_conc': ['9,12-octadecadienoic acid (z,z)-', '9,12-octadecadienoic acid (z,z)-, tms derivative', 'phenol'], + 'filename': [('A_1', 'A_2'), ('Ader_1', 'Ader_2'), ('B_1', 'B_2')], + 'replicate_number': [('1', '2'), ('1', '2'), ('1', '2')], + 'derivatized': [(False, False), (False, False), (False, False)], + 'calibration_file': [(False, False), (False, False), (False, False)], + 'dilution_factor': [(1, 1), (1, 1), (1, 1)], + 'total_sample_conc_in_vial_mg_L': [(1, 1), (1, 1), (1, 1)], + 'sample_yield_on_feedstock_basis_fr': [(1, 1), (1, 1), (1, 1)], + 'compound_with_max_area': [('oleic acid', 'oleic acid'), ('9-octadecenoic acid, (z)-, tms derivative', '9-octadecenoic acid, (z)-, tms derivative'), ('2,5-hexanedione', '2,5-hexanedione')], 'max_height': [1143123.0, 548218.5, 116469.5], 'max_area': [6387230.0, 1840687.0, 456719.5], - 'max_area_if_undiluted': [159680750.0, 230085875.0, 456719.5], - 'max_conc_vial_mg_L': [128.28438972770587, 34.090377368664285, 7.526085990440194], - 'max_conc_vial_if_undiluted_mg_L': [3207.1097431926473, 4261.297171083035, 7.526085990440194], - 'max_fraction_of_sample_fr': [0.2290792673709033, 0.304378369363074, 0.0026878878537286406], - 'max_fraction_of_feedstock_fr': [0.10420514155783843, 0.1447012705450368, 0.00133114530090798], - 'total_height': [2003628.0, 1271114.0, 263429.0], - 'total_area': [9669384.0, 3905876.5, 950583.0], - 'total_area_if_undiluted': [241734600.0, 488234562.5, 950583.0], - 'total_conc_vial_mg_L': [352.0332553342043, 87.78908432611982, 13.715328274059692], - 'total_conc_vial_if_undiluted_mg_L': [8800.831383355107, 10973.635540764979, 13.715328274059692], - 'total_fraction_of_sample_fr': [0.6286308130967933, 0.7838311100546413, 0.0048983315264498895], - 'total_fraction_of_feedstock_fr': [0.28618408147000574, 0.3724952251077016, 0.0024252174929029046], + 'max_area_if_undiluted': [6387230.0, 1840687.0, 456719.5], + 'total_height': [2001498.5, 1271114.0, 263429.0], + 'total_area': [9663908.0, 3905876.5, 950583.0], + 'total_area_if_undiluted': [9663908.0, 3905876.5, 950583.0], } ) return samples_info +@pytest.fixture +def checked_samples_info_no_calibrations_std(): + samples_info_std = pd.DataFrame( + index=pd.Index(['A', 'Ader', 'B'], name='samplename'), + data={ + 'filename': [('A_1', 'A_2'), ('Ader_1', 'Ader_2'), ('B_1', 'B_2')], + 'replicate_number': [('1', '2'), ('1', '2'), ('1', '2')], + 'derivatized': [(False, False), (False, False), (False, False)], + 'calibration_file': [(False, False), (False, False), (False, False)], + 'dilution_factor': [(1, 1), (1, 1), (1, 1)], + 'total_sample_conc_in_vial_mg_L': [(1, 1), (1, 1), (1, 1)], + 'sample_yield_on_feedstock_basis_fr': [(1, 1), (1, 1), (1, 1)], + 'compound_with_max_area': [('oleic acid', 'oleic acid'), ('9-octadecenoic acid, (z)-, tms derivative', '9-octadecenoic acid, (z)-, tms derivative'), ('2,5-hexanedione', '2,5-hexanedione')], + 'max_height': [6330.019905181974, 65717.79713669654, 5193.699307815192], + 'max_area': [10575.489019426004, 163869.16811285765, 22121.83564942114], + 'max_area_if_undiluted': [10575.489019426004, 163869.16811285765, 22121.83564942114], + 'total_height': [35334.83296267297, 88567.95277073982, 12695.395149423275], + 'total_area': [188070.60480574841, 215433.51591732426, 45073.814659955286], + 'total_area_if_undiluted': [188070.60480574841, 215433.51591732426, 45073.814659955286], + } +) + return samples_info_std + @pytest.fixture def checked_samples(): @@ -794,58 +840,58 @@ def checked_files_param_aggrreps(): def checked_samples_param_reports(): reports = { 'height': pd.DataFrame( - index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', 'decanoic acid', '4,5-dimethylhex-1-ene'], name='height'), + index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', '4,5-dimethylhex-1-ene', 'decanoic acid'], name='height'), data={ - 'A': [1143123.0, 477850.5, 332147.5, 0.0, 0.0, 0.0, 0.0, 14769.5, 0.0, 0.0, 6222.0, 4259.0, 0.0], + 'A': [1143123.0, 477850.5, 332147.5, 0.0, 0.0, 0.0, 0.0, 14769.5, 0.0, 0.0, 6222.0, 0.0, 2129.5], 'Ader': [548218.5, 490697.0, 191724.5, 0.0, 0.0, 0.0, 0.0, 18394.0, 0.0, 8953.5, 0.0, 0.0, 0.0], - 'B': [0.0, 0.0, 0.0, 116469.5, 69787.0, 41972.0, 19169.0, 0.0, 12434.5, 0.0, 0.0, 0.0, 3597.0], + 'B': [0.0, 0.0, 0.0, 116469.5, 69787.0, 41972.0, 19169.0, 0.0, 12434.5, 0.0, 0.0, 3597.0, 0.0], } ), 'area': pd.DataFrame( - index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', 'decanoic acid', '4,5-dimethylhex-1-ene'], name='area'), + index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', '4,5-dimethylhex-1-ene', 'decanoic acid'], name='area'), data={ - 'A': [6387230.0, 1767468.0, 1413594.0, 0.0, 0.0, 0.0, 0.0, 47519.5, 0.0, 0.0, 18181.0, 10952.0, 0.0], + 'A': [6387230.0, 1767468.0, 1413594.0, 0.0, 0.0, 0.0, 0.0, 47519.5, 0.0, 0.0, 18181.0, 0.0, 5476.0], 'Ader': [1840687.0, 1409097.5, 562306.5, 0.0, 0.0, 0.0, 0.0, 51560.5, 0.0, 26505.5, 0.0, 0.0, 0.0], - 'B': [0.0, 0.0, 0.0, 456719.5, 214848.5, 164293.5, 66877.0, 0.0, 38083.5, 0.0, 0.0, 0.0, 9761.0], + 'B': [0.0, 0.0, 0.0, 456719.5, 214848.5, 164293.5, 66877.0, 0.0, 38083.5, 0.0, 0.0, 9761.0, 0.0], } ), 'area_if_undiluted': pd.DataFrame( - index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'hexane-2,5-dione', 'oxacycloheptadecan-2-one', 'decanoic acid', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', '(e)-pent-2-enoic acid', '4,5-dimethylhex-1-ene'], name='area_if_undiluted'), + index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'hexane-2,5-dione', 'oxacycloheptadecan-2-one', 'phenol', 'butan-2-one', 'decanoic acid', '2-methylcyclopent-2-en-1-one', '(e)-pent-2-enoic acid', '4,5-dimethylhex-1-ene'], name='area_if_undiluted'), data={ - 'A': [159680750.0, 44186700.0, 35339850.0, 1187987.5, 0.0, 0.0, 454525.0, 273800.0, 0.0, 0.0, 0.0, 0.0, 0.0], + 'A': [159680750.0, 44186700.0, 35339850.0, 1187987.5, 0.0, 0.0, 454525.0, 0.0, 0.0, 136900.0, 0.0, 0.0, 0.0], 'Ader': [230085875.0, 176137187.5, 70288312.5, 6445062.5, 3313187.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], - 'B': [0.0, 0.0, 0.0, 0.0, 0.0, 456719.5, 0.0, 0.0, 214848.5, 164293.5, 66877.0, 38083.5, 9761.0], + 'B': [0.0, 0.0, 0.0, 0.0, 0.0, 456719.5, 0.0, 214848.5, 164293.5, 0.0, 66877.0, 38083.5, 9761.0], } ), 'conc_vial_mg_L': pd.DataFrame( index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', '(z)-octadec-9-enoic acid', 'hexadecanoic acid', 'tetradecanoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one', '(e)-hexadec-9-enoic acid'], name='conc_vial_mg_L'), data={ - 'A': [128.28438972770587, 113.72290046495935, 63.58554431387759, 23.65614297715311, 22.78427785050836, 0.0, 0.0, 0.0], + 'A': [128.28438972770587, 113.72290046495935, 63.58554431387759, 23.65614297715311, 11.39213892525418, 0.0, 0.0, 0.0], 'Ader': [34.090377368664285, 22.971264852335217, 27.502344287695024, 0.6415947958834178, 0.0, 0.0, 0.0, 2.5835030215418877], 'B': [0.0, 0.0, 0.0, 0.0, 0.0, 7.526085990440194, 6.189242283619498, 0.0], } ), 'conc_vial_if_undiluted_mg_L': pd.DataFrame( - index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', 'decanoic acid', '(e)-hexadec-9-enoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='conc_vial_if_undiluted_mg_L'), + index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='conc_vial_if_undiluted_mg_L'), data={ - 'A': [3207.1097431926473, 1589.6386078469395, 2843.0725116239837, 591.4035744288278, 569.606946262709, 0.0, 0.0, 0.0], - 'Ader': [4261.297171083035, 3437.7930359618776, 2871.4081065419023, 80.19934948542723, 0.0, 322.9378776927359, 0.0, 0.0], + 'A': [3207.1097431926473, 1589.6386078469395, 2843.0725116239837, 591.4035744288278, 0.0, 284.8034731313545, 0.0, 0.0], + 'Ader': [4261.297171083035, 3437.7930359618776, 2871.4081065419023, 80.19934948542723, 322.9378776927359, 0.0, 0.0, 0.0], 'B': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.526085990440194, 6.189242283619498], } ), 'fraction_of_sample_fr': pd.DataFrame( - index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', 'decanoic acid', '(e)-hexadec-9-enoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_sample_fr'), + index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_sample_fr'), data={ - 'A': [0.2290792673709033, 0.11354561484620995, 0.20307660797314164, 0.042243112459201974, 0.04068621044733635, 0.0, 0.0, 0.0], - 'Ader': [0.304378369363074, 0.24555664542584843, 0.2051005790387073, 0.005728524963244802, 0.0, 0.023066991263766854, 0.0, 0.0], + 'A': [0.2290792673709033, 0.11354561484620995, 0.20307660797314164, 0.042243112459201974, 0.0, 0.020343105223668174, 0.0, 0.0], + 'Ader': [0.304378369363074, 0.24555664542584843, 0.2051005790387073, 0.005728524963244802, 0.023066991263766854, 0.0, 0.0, 0.0], 'B': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0026878878537286406, 0.0022104436727212492], } ), 'fraction_of_feedstock_fr': pd.DataFrame( - index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', 'decanoic acid', '(e)-hexadec-9-enoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_feedstock_fr'), + index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_feedstock_fr'), data={ - 'A': [0.10420514155783843, 0.051641211741918436, 0.0924007887729286, 0.01922128259154552, 0.018715656805774722, 0.0, 0.0, 0.0], - 'Ader': [0.1447012705450368, 0.11663401169579143, 0.09748090808552162, 0.002722862373382652, 0.0, 0.010956172407969126, 0.0, 0.0], + 'A': [0.10420514155783843, 0.051641211741918436, 0.0924007887729286, 0.01922128259154552, 0.0, 0.009357828402887361, 0.0, 0.0], + 'Ader': [0.1447012705450368, 0.11663401169579143, 0.09748090808552162, 0.002722862373382652, 0.010956172407969126, 0.0, 0.0, 0.0], 'B': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.00133114530090798, 0.0010940721919949245], } ) @@ -856,58 +902,58 @@ def checked_samples_param_reports(): def checked_samples_param_reports_std(): reports = { 'height': pd.DataFrame( - index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', 'decanoic acid', '4,5-dimethylhex-1-ene'], name='height'), + index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', '4,5-dimethylhex-1-ene', 'decanoic acid'], name='height'), data={ - 'A': [6330.019905181974, 22498.01645701238, 10546.497641397356, np.nan, np.nan, np.nan, np.nan, 352.8462838120872, np.nan, np.nan, 731.1484117468901, np.nan, np.nan], + 'A': [6330.019905181974, 22498.01645701238, 10546.497641397356, np.nan, np.nan, np.nan, np.nan, 352.8462838120872, np.nan, np.nan, 731.1484117468901, np.nan, 3011.567781073506], 'Ader': [65717.79713669654, 8212.338156700564, 15378.865384026221, np.nan, np.nan, np.nan, np.nan, 29.698484809834994, np.nan, 252.43712088359746, np.nan, np.nan, np.nan], - 'B': [np.nan, np.nan, np.nan, 5193.699307815192, 7588.669975694028, 3647.2567773602123, 924.8956697920041, np.nan, 427.79960261786124, np.nan, np.nan, np.nan, 5086.926183856023], + 'B': [np.nan, np.nan, np.nan, 5193.699307815192, 7588.669975694028, 3647.2567773602123, 924.8956697920041, np.nan, 427.79960261786124, np.nan, np.nan, 5086.926183856023, np.nan], } ), 'area': pd.DataFrame( - index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', 'decanoic acid', '4,5-dimethylhex-1-ene'], name='area'), + index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'hexane-2,5-dione', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', 'tetradecanoic acid', '(e)-pent-2-enoic acid', '(e)-hexadec-9-enoic acid', 'oxacycloheptadecan-2-one', '4,5-dimethylhex-1-ene', 'decanoic acid'], name='area'), data={ - 'A': [10575.489019426004, 156570.4119174501, 60139.43173991587, np.nan, np.nan, np.nan, np.nan, 4427.195557008974, np.nan, np.nan, 4402.446819667445, np.nan, np.nan], + 'A': [10575.489019426004, 156570.4119174501, 60139.43173991587, np.nan, np.nan, np.nan, np.nan, 4427.195557008974, np.nan, np.nan, 4402.446819667445, np.nan, 7744.233467555068], 'Ader': [163869.16811285765, 8637.309332193678, 60571.47398322085, np.nan, np.nan, np.nan, np.nan, 2902.6733367707775, np.nan, 1827.8710293672254, np.nan, np.nan, np.nan], - 'B': [np.nan, np.nan, np.nan, 22121.83564942114, 19659.68983732958, 23656.25736459595, 3317.745017327281, np.nan, 3242.0845917403203, np.nan, np.nan, np.nan, 13804.138582323782], + 'B': [np.nan, np.nan, np.nan, 22121.83564942114, 19659.68983732958, 23656.25736459595, 3317.745017327281, np.nan, 3242.0845917403203, np.nan, np.nan, 13804.138582323782, np.nan], } ), 'area_if_undiluted': pd.DataFrame( - index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'hexane-2,5-dione', 'oxacycloheptadecan-2-one', 'decanoic acid', 'phenol', 'butan-2-one', '2-methylcyclopent-2-en-1-one', '(e)-pent-2-enoic acid', '4,5-dimethylhex-1-ene'], name='area_if_undiluted'), + index=pd.Index(['(z)-octadec-9-enoic acid', 'hexadecanoic acid', '(9z,12z)-octadeca-9,12-dienoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'hexane-2,5-dione', 'oxacycloheptadecan-2-one', 'phenol', 'butan-2-one', 'decanoic acid', '2-methylcyclopent-2-en-1-one', '(e)-pent-2-enoic acid', '4,5-dimethylhex-1-ene'], name='area_if_undiluted'), data={ - 'A': [264387.2254856501, 3914260.2979362523, 1503485.7934978968, 110679.88892522435, np.nan, np.nan, 110061.17049168612, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], + 'A': [264387.2254856501, 3914260.2979362523, 1503485.7934978968, 110679.88892522435, np.nan, np.nan, 110061.17049168612, np.nan, np.nan, 193605.8366888767, np.nan, np.nan, np.nan], 'Ader': [20483646.014107205, 1079663.6665242098, 7571434.247902606, 362834.1670963472, 228483.87867090316, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], - 'B': [np.nan, np.nan, np.nan, np.nan, np.nan, 22121.83564942114, np.nan, np.nan, 19659.68983732958, 23656.25736459595, 3317.745017327281, 3242.0845917403203, 13804.138582323782], + 'B': [np.nan, np.nan, np.nan, np.nan, np.nan, 22121.83564942114, np.nan, 19659.68983732958, 23656.25736459595, np.nan, 3317.745017327281, 3242.0845917403203, 13804.138582323782], } ), 'conc_vial_mg_L': pd.DataFrame( index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', '(z)-octadec-9-enoic acid', 'hexadecanoic acid', 'tetradecanoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one', '(e)-hexadec-9-enoic acid'], name='conc_vial_mg_L'), data={ - 'A': [4.106325693068217, 0.14764425894471855, 3.4914351462625968, 0.10555595583489899, np.nan, np.nan, np.nan, np.nan], + 'A': [4.106325693068217, 0.14764425894471855, 3.4914351462625968, 0.10555595583489899, 16.110917372532917, np.nan, np.nan, np.nan], 'Ader': [3.8503522496954825, 1.8415608200696434, 0.1709011262715786, 0.05743341165328154, np.nan, np.nan, np.nan, 0.02054160468737343], 'B': [np.nan, np.nan, np.nan, np.nan, np.nan, 0.5074982512365029, 0.07715745715389961, np.nan], } ), 'conc_vial_if_undiluted_mg_L': pd.DataFrame( - index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', 'decanoic acid', '(e)-hexadec-9-enoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='conc_vial_if_undiluted_mg_L'), + index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='conc_vial_if_undiluted_mg_L'), data={ - 'A': [102.65814232670576, 87.28587865656482, 3.691106473618185, 2.638898895872451, np.nan, np.nan, np.nan, np.nan], - 'Ader': [481.29403121193536, 21.362640783947153, 230.19510250870547, 7.179176456660192, np.nan, 2.5677005859216706, np.nan, np.nan], + 'A': [102.65814232670576, 87.28587865656482, 3.691106473618185, 2.638898895872451, np.nan, 402.77293431332293, np.nan, np.nan], + 'Ader': [481.29403121193536, 21.362640783947153, 230.19510250870547, 7.179176456660192, 2.5677005859216706, np.nan, np.nan, np.nan], 'B': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.5074982512365029, 0.07715745715389961], } ), 'fraction_of_sample_fr': pd.DataFrame( - index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', 'decanoic acid', '(e)-hexadec-9-enoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_sample_fr'), + index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_sample_fr'), data={ - 'A': [0.007332724451907525, 0.006234705618326057, 0.00026365046240129915, 0.00018849277827660252, np.nan, np.nan, np.nan, np.nan], - 'Ader': [0.03437814508656681, 0.001525902913139085, 0.01644250732205038, 0.0005127983183328709, np.nan, 0.00018340718470868995, np.nan, np.nan], + 'A': [0.007332724451907525, 0.006234705618326057, 0.00026365046240129915, 0.00018849277827660252, np.nan, 0.028769495308094487, np.nan, np.nan], + 'Ader': [0.03437814508656681, 0.001525902913139085, 0.01644250732205038, 0.0005127983183328709, 0.00018340718470868995, np.nan, np.nan, np.nan], 'B': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.00018124937544160814, 2.7556234697821363e-05], } ), 'fraction_of_feedstock_fr': pd.DataFrame( - index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', 'decanoic acid', '(e)-hexadec-9-enoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_feedstock_fr'), + index=pd.Index(['(9z,12z)-octadeca-9,12-dienoic acid', 'hexadecanoic acid', '(z)-octadec-9-enoic acid', 'tetradecanoic acid', '(e)-hexadec-9-enoic acid', 'decanoic acid', 'phenol', '2-methylcyclopent-2-en-1-one'], name='fraction_of_feedstock_fr'), data={ - 'A': [0.001716554591745799, 0.002033902314020852, 0.001555929426374292, 0.0003844681268991305, np.nan, np.nan, np.nan, np.nan], - 'Ader': [0.01848189900635057, 0.0010115438077193133, 0.009260471080609506, 0.00028408598968518184, np.nan, 7.598984670517598e-05, np.nan, np.nan], + 'A': [0.001716554591745799, 0.002033902314020852, 0.001555929426374292, 0.0003844681268991305, np.nan, 0.013233967841723464, np.nan, np.nan], + 'Ader': [0.01848189900635057, 0.0010115438077193133, 0.009260471080609506, 0.00028408598968518184, 7.598984670517598e-05, np.nan, np.nan, np.nan], 'B': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.00010872467812800095, 1.9898609286992866e-06], } ) @@ -921,58 +967,58 @@ def checked_samples_param_aggrreps(): 'height': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'ketone', 'C-arom', 'alcohol', 'ester'], name='height'), data={ - 'A': [1653503.8741030835, 323399.6926465227, 0.0, 0.0, 0.0, 1419.36241499941], + 'A': [1651930.781078005, 322843.186774585, 0.0, 0.0, 0.0, 1419.36241499941], 'Ader': [1048483.5942705647, 209497.12232512212, 0.0, 0.0, 0.0, 0.0], 'B': [27582.83802734355, 5590.929749300839, 161073.19496333148, 57177.7326745298, 12611.491966847307, 0.0], } ), 'area': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'ketone', 'C-arom', 'alcohol', 'ester'], name='area'), - data={ - 'A': [8073115.744196826, 1567290.9192014115, 0.0, 0.0, 0.0, 4147.449062536849], - 'Ader': [3244281.634364161, 645827.8665250427, 0.0, 0.0, 0.0, 0.0], - 'B': [94251.19374854585, 17123.500993807433, 626471.4374662458, 176029.20455849537, 38826.144293911384, 0.0], - } + data={ + 'A': [8069070.542315948, 1565859.8667690419, 0.0, 0.0, 0.0, 4147.449062536849], + 'Ader': [3244281.634364161, 645827.8665250427, 0.0, 0.0, 0.0, 0.0], + 'B': [94251.19374854585, 17123.500993807433, 626471.4374662458, 176029.20455849537, 38826.144293911384, 0.0], + } ), 'area_if_undiluted': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'ketone', 'C-arom', 'ester', 'alcohol'], name='area_if_undiluted'), - data={ - 'A': [201827893.6049206, 39182272.9800353, 0.0, 0.0, 103686.22656342122, 0.0], - 'Ader': [405535204.2955202, 80728483.31563035, 0.0, 0.0, 0.0, 0.0], - 'B': [94251.19374854585, 17123.500993807433, 626471.4374662458, 176029.20455849537, 0.0, 38826.144293911384], - } + data={ + 'A': [201726763.55789867, 39146496.66922605, 0.0, 0.0, 103686.22656342122, 0.0], + 'Ader': [405535204.2955202, 80728483.31563035, 0.0, 0.0, 0.0, 0.0], + 'B': [94251.19374854585, 17123.500993807433, 626471.4374662458, 176029.20455849537, 0.0, 38826.144293911384], + } ), 'conc_vial_mg_L': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='conc_vial_mg_L'), - data={ - 'A': [291.5503459097622, 60.497977193910856, 0.0, 0.0, 0.0], - 'Ader': [73.2484339653872, 14.545500371460587, 0.0, 0.0, 0.0], - 'B': [2.709346765182483, 0.0, 6.166256363605159, 3.674528613447748, 1.36006954031895], - } + data={ + 'A': [283.134805039116, 57.52085007212886, 0.0, 0.0, 0.0], + 'Ader': [73.2484339653872, 14.545500371460587, 0.0, 0.0, 0.0], + 'B': [2.709346765182483, 0.0, 6.166256363605159, 3.674528613447748, 1.36006954031895], + } ), 'conc_vial_if_undiluted_mg_L': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='conc_vial_if_undiluted_mg_L'), - data={ - 'A': [7288.758647744056, 1512.4494298477714, 0.0, 0.0, 0.0], - 'Ader': [9156.054245673402, 1818.1875464325735, 0.0, 0.0, 0.0], - 'B': [2.709346765182483, 0.0, 6.166256363605159, 3.674528613447748, 1.36006954031895], - } + data={ + 'A': [7078.3701259779, 1438.0212518032215, 0.0, 0.0, 0.0], + 'Ader': [9156.054245673402, 1818.1875464325735, 0.0, 0.0, 0.0], + 'B': [2.709346765182483, 0.0, 6.166256363605159, 3.674528613447748, 1.36006954031895], + } ), 'fraction_of_sample_fr': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='fraction_of_sample_fr'), - data={ - 'A': [0.5206256176960039, 0.10803210213198365, 0.0, 0.0, 0.0], - 'Ader': [0.6540038746909574, 0.12987053903089812, 0.0, 0.0, 0.0], - 'B': [0.0009676238447080297, 0.0, 0.002202234415573271, 0.0013123316476599102, 0.00048573912154248214], - } + data={ + 'A': [0.5055978661412784, 0.10271580370023008, 0.0, 0.0, 0.0], + 'Ader': [0.6540038746909574, 0.12987053903089812, 0.0, 0.0, 0.0], + 'B': [0.0009676238447080297, 0.0, 0.002202234415573271, 0.0013123316476599102, 0.00048573912154248214], + } ), 'fraction_of_feedstock_fr': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='fraction_of_feedstock_fr'), - data={ - 'A': [0.23699631038831473, 0.04920001733649612, 0.0, 0.0, 0.0], - 'Ader': [0.3107992314028268, 0.06171657872932608, 0.0, 0.0, 0.0], - 'B': [0.000478931154804311, 0.0, 0.0010906310654745584, 0.0006495463241603489, 0.00024055666913762634], - } + data={ + 'A': [0.23008354467314104, 0.04675452005788948, 0.0, 0.0, 0.0], + 'Ader': [0.3107992314028268, 0.06171657872932608, 0.0, 0.0, 0.0], + 'B': [0.000478931154804311, 0.0, 0.0010906310654745584, 0.0006495463241603489, 0.00024055666913762634], + } ) } return reports @@ -982,60 +1028,60 @@ def checked_samples_param_aggrreps_std(): reports = { 'height': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'ketone', 'C-arom', 'alcohol', 'ester'], name='height'), - data={ - 'A': [33572.681565843486, 6721.194551751164, 0.0, 0.0, 0.0, 166.78954924783815], - 'Ader': [75153.30566953593, 14433.563492713163, 0.0, 0.0, 0.0, 0.0], - 'B': [6487.963541864086, 192.35172504043408, 8629.636927224863, 6217.532537943509, 1371.3793462610597, 0.0], - } + data={ + 'A': [35797.371056783835, 7508.212703385821, 0.0, 0.0, 0.0, 166.78954924783815], + 'Ader': [75153.30566953593, 14433.563492713163, 0.0, 0.0, 0.0, 0.0], + 'B': [6487.963541864086, 192.35172504043408, 8629.636927224863, 6217.532537943509, 1371.3793462610597, 0.0], + } ), 'area': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'ketone', 'C-arom', 'alcohol', 'ester'], name='area'), - data={ - 'A': [195426.4379503677, 39700.497529875116, 0.0, 0.0, 0.0, 1004.2860093008128], - 'Ader': [199552.22488919983, 38249.3835185481, 0.0, 0.0, 0.0, 0.0], - 'B': [21973.821276880837, 1457.7399327444466, 42815.265175930195, 16107.534210999198, 3552.7823298636085, 0.0], - } + data={ + 'A': [201147.21731284214, 41724.311288199315, 0.0, 0.0, 0.0, 1004.2860093008128], + 'Ader': [199552.22488919983, 38249.3835185481, 0.0, 0.0, 0.0, 0.0], + 'B': [21973.821276880837, 1457.7399327444466, 42815.265175930195, 16107.534210999198, 3552.7823298636085, 0.0], + } ), 'area_if_undiluted': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'ketone', 'C-arom', 'ester', 'alcohol'], name='area_if_undiluted'), - data={ - 'A': [4885660.948759192, 992512.4382468779, 0.0, 0.0, 25107.15023252032, 0.0], - 'Ader': [24944028.111149978, 4781172.939818514, 0.0, 0.0, 0.0, 0.0], - 'B': [21973.821276880837, 1457.7399327444466, 42815.26517593019, 16107.534210999198, 0.0, 3552.7823298636085], - } + data={ + 'A': [5028680.432821053, 1043107.7822049828, 0.0, 0.0, 25107.15023252032, 0.0], + 'Ader': [24944028.111149978, 4781172.939818514, 0.0, 0.0, 0.0, 0.0], + 'B': [21973.821276880837, 1457.7399327444466, 42815.26517593019, 16107.534210999198, 0.0, 3552.7823298636085], + } ), 'conc_vial_mg_L': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='conc_vial_mg_L'), - data={ - 'A': [6.5353020421660615, 1.3165427371870901, 0.0, 0.0, 0.0], - 'Ader': [4.984729502757059, 0.9565736502096863, 0.0, 0.0, 0.0], - 'B': [0.03377575111300582, 0.0, 0.41580236064012105, 0.04580807650772246, 0.09171206841758799], - } + data={ + 'A': [18.436674076139045, 5.526836289719974, 0.0, 0.0, 0.0], + 'Ader': [4.984729502757059, 0.9565736502096863, 0.0, 0.0, 0.0], + 'B': [0.03377575111300582, 0.0, 0.41580236064012105, 0.04580807650772246, 0.09171206841758799], + } ), 'conc_vial_if_undiluted_mg_L': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='conc_vial_if_undiluted_mg_L'), - data={ - 'A': [163.3825510541519, 32.91356842967732, 0.0, 0.0, 0.0], - 'Ader': [623.0911878446323, 119.57170627621078, 0.0, 0.0, 0.0], - 'B': [0.03377575111300582, 0.0, 0.41580236064012105, 0.04580807650772246, 0.09171206841758799], - } + data={ + 'A': [460.9168519034765, 138.1709072429994, 0.0, 0.0, 0.0], + 'Ader': [623.0911878446323, 119.57170627621078, 0.0, 0.0, 0.0], + 'B': [0.03377575111300582, 0.0, 0.41580236064012105, 0.04580807650772246, 0.09171206841758799], + } ), 'fraction_of_sample_fr': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='fraction_of_sample_fr'), - data={ - 'A': [0.01167018221815368, 0.002350969173548375, 0.0, 0.0, 0.0], - 'Ader': [0.04450651341747372, 0.00854083616258648, 0.0, 0.0, 0.0], - 'B': [1.2062768254644968e-05, 0.0, 0.0001485008430857575, 1.6360027324186634e-05, 3.275431014913856e-05], - } + data={ + 'A': [0.03292263227881972, 0.009869350517357094, 0.0, 0.0, 0.0], + 'Ader': [0.04450651341747372, 0.00854083616258648, 0.0, 0.0, 0.0], + 'B': [1.2062768254644968e-05, 0.0, 0.0001485008430857575, 1.6360027324186634e-05, 3.275431014913856e-05], + } ), 'fraction_of_feedstock_fr': pd.DataFrame( index=pd.Index(['C-aliph', 'carboxyl', 'C-arom', 'ketone', 'alcohol'], name='fraction_of_feedstock_fr'), - data={ - 'A': [0.004734701118759861, 0.0009563848477203726, 0.0, 0.0, 0.0], - 'Ader': [0.024426518981430268, 0.004689897339536736, 0.0, 0.0, 0.0], - 'B': [8.710635362591769e-07, 0.0, 8.908006621759261e-05, 1.1813725467879507e-06, 1.9648077791126472e-05], - } + data={ + 'A': [0.014510828146666238, 0.004414840265872383, 0.0, 0.0, 0.0], + 'Ader': [0.024426518981430268, 0.004689897339536736, 0.0, 0.0, 0.0], + 'B': [8.710635362591769e-07, 0.0, 8.908006621759261e-05, 1.1813725467879507e-06, 1.9648077791126472e-05], + } ) } return reports - +# fmt: on diff --git a/tests/data_for_testing/compounds_properties.xlsx b/tests/data_for_testing/compounds_properties.xlsx index cc0468e6dd3723d878a0ab73d65262c4f1ee0575..2c053c1aaafc72a4661b52c5a40f5b2b6c60aa97 100644 GIT binary patch delta 4244 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 diff --git a/tests/data_for_testing/deriv_compounds_properties.xlsx b/tests/data_for_testing/deriv_compounds_properties.xlsx index 756d24dddc3312d465d32f4513cceeadd09dd394..85eb296e606e49f297f08dd486d97d43c0e18dd4 100644 GIT binary patch delta 3102 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 diff --git a/tests/test_gcms_data_analysis.py b/tests/test_gcms_data_analysis.py index a62b884..6bcc284 100644 --- a/tests/test_gcms_data_analysis.py +++ b/tests/test_gcms_data_analysis.py @@ -1,6 +1,8 @@ import pytest from pandas.testing import assert_frame_equal +tolerance_dfs = 0.01 + def test_load_files_info(gcms, checked_files_info): to_check = gcms.load_files_info() @@ -127,8 +129,8 @@ def test_create_compounds_properties(gcms, checked_compounds_properties): to_check.sort_index(), checked_compounds_properties.sort_index(), check_exact=False, - atol=1e-3, - rtol=1e-3, + atol=1e-2, + rtol=1e-2, ) @@ -166,32 +168,6 @@ def test_load_deriv_compounds_properties(gcms, checked_deriv_compounds_propertie ) -# def test_add_iupac_to_calibrations( -# gcms, -# checked_calibrations_added_iupac_only_iupac_and_mw, -# checked_is_calibrations_deriv, -# ): -# calib_to_check, is_calib_deriv_to_check = gcms.add_iupac_to_calibrations() -# for to_check, checked in zip( -# calib_to_check, checked_calibrations_added_iupac_only_iupac_and_mw -# ): -# assert to_check == checked - -# for to_check, checked in zip( -# calib_to_check.values(), -# checked_calibrations_added_iupac_only_iupac_and_mw.values(), -# ): -# assert_frame_equal( -# to_check.loc[:, ["iupac_name", "MW"]], -# checked, -# check_exact=False, -# atol=1e-5, -# rtol=1e-5, -# ) - -# assert is_calib_deriv_to_check == checked_is_calibrations_deriv - - def test_add_iupac_to_files( gcms, checked_files_added_iupac_only_iupac_and_time, checked_is_files_deriv ): @@ -248,22 +224,27 @@ def test_add_stats_to_files_info(gcms, checked_files_info_added_stats): ) -def test_create_samples_info(gcms, checked_samples_info): +def test_create_samples_info(gcms, checked_samples_info, checked_samples_info_std): to_check, to_check_std = gcms.create_samples_info() assert_frame_equal( to_check, checked_samples_info, check_exact=False, atol=1e-5, rtol=1e-5 ) + assert_frame_equal( + to_check_std, checked_samples_info_std, check_exact=False, atol=1e-5, rtol=1e-5 + ) -def test_add_stats_to_samples_info_no_calibrations( - gcms, checked_samples_info_no_calibrations +def test_create_samples_info_no_calibrations( + gcms, + checked_samples_info_no_calibrations, + checked_samples_info_no_calibrations_std, ): _ = gcms.create_files_info() gcms.files_info["calibration_file"] = False gcms.load_calibrations() _ = gcms.add_stats_to_files_info() - to_check = gcms.add_stats_to_samples_info() + to_check, to_check_std = gcms.create_samples_info() assert_frame_equal( to_check, checked_samples_info_no_calibrations, @@ -271,16 +252,9 @@ def test_add_stats_to_samples_info_no_calibrations( atol=1e-5, rtol=1e-5, ) - - -def test_add_stats_to_samples_info_applied_calibration( - gcms, checked_samples_info_applied_calibration -): - _ = gcms.add_stats_to_files_info() - to_check = gcms.add_stats_to_samples_info() assert_frame_equal( - to_check, - checked_samples_info_applied_calibration, + to_check_std, + checked_samples_info_no_calibrations_std, check_exact=False, atol=1e-5, rtol=1e-5, @@ -307,6 +281,11 @@ def test_files_param_reports(gcms, checked_files_param_reports, parameter): ) +def test_files_param_reports_exception(gcms): + with pytest.raises(ValueError): + gcms.create_files_param_report(param="wrong_parameter") + + @pytest.mark.parametrize( "parameter", [ @@ -327,6 +306,11 @@ def test_files_param_aggrreps(gcms, checked_files_param_aggrreps, parameter): ) +def test_files_param_aggreps_exception(gcms): + with pytest.raises(ValueError): + gcms.create_files_param_aggrrep(param="wrong_parameter") + + @pytest.mark.parametrize( "parameter", [ @@ -353,6 +337,11 @@ def test_samples_param_reports( ) +def test_samples_param_reports_exception(gcms): + with pytest.raises(ValueError): + gcms.create_samples_param_report(param="wrong_parameter") + + @pytest.mark.parametrize( "parameter", [ @@ -377,3 +366,8 @@ def test_samples_param_aggrreps( assert_frame_equal( to_check_std, checked_report_std, check_exact=False, atol=1e-5, rtol=1e-5 ) + + +def test_samples_param_aggrreps_exception(gcms): + with pytest.raises(ValueError): + gcms.create_samples_param_aggrrep(param="wrong_parameter")