From 1313f40041a8174cfa1c197ca133002d3e4b7e86 Mon Sep 17 00:00:00 2001 From: Alex Guinman Date: Thu, 30 May 2024 18:44:23 +1000 Subject: [PATCH] Fix edge case and add test --- .../unzipped/Example_NEM12_partialchannel.csv | 36 +++++++++++++++++++ nemreader/nem_reader.py | 18 ++++++---- nemreader/version.py | 2 +- requirements.txt | 30 ++++++++++------ tests/test_dataframe_pivot.py | 14 ++++++++ 5 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 examples/unzipped/Example_NEM12_partialchannel.csv diff --git a/examples/unzipped/Example_NEM12_partialchannel.csv b/examples/unzipped/Example_NEM12_partialchannel.csv new file mode 100644 index 0000000..4f5dfb0 --- /dev/null +++ b/examples/unzipped/Example_NEM12_partialchannel.csv @@ -0,0 +1,36 @@ +100,NEM12,202304120954,WBAYM, +200,NMI1234567,B1E1,B1,B1,B1,SERNO1234,kWh,5, +300,20230301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.005,.012,.021,.033,.044,.055,.066,.078,.089,.1,.111,.123,.136,.148,.161,.144,.112,.179,.195,.207,.221,.23,.229,.256,.27,.278,.287,.297,.304,.313,.318,.289,.301,.342,.349,.356,.361,.367,.373,.103,.104,.112,.117,.117,.117,.121,.121,.103,.104,.104,.11,.117,.114,.107,.106,.108,.109,.108,.278,.395,.344,.379,.396,.396,.397,.397,.396,.397,.398,.397,.397,.398,.284,.001,0,0,0,0,0,0,0,.091,.382,.386,.386,.387,.382,.382,.376,.363,.38,.186,.286,.353,.355,.25,.066,.06,.047,.171,.248,.258,.337,.319,.258,.238,.156,.128,0,0,0,.022,.042,.024,.01,.001,.002,.009,.01,.007,.008,.014,.021,.031,.033,.035,.031,.025,.021,.022,.022,.02,.011,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,A,,,20230302143218, +200,NMI1234567,B1E1,E1,E1,E1,SERNO1234,kWh,5, +300,20230301,.048,.044,.042,.039,.039,.038,.039,.038,.044,.048,.047,.046,.046,.044,.03,.033,.032,.03,.031,.028,.19,.116,.031,.035,.035,.034,.033,.034,.033,.033,.034,.03,.044,.184,.027,.023,.024,.026,.028,.028,.027,.028,.027,.027,.026,.026,.025,.023,.024,.027,.026,.02,.023,.03,.032,.032,.03,.029,.031,.032,.032,.031,.029,.113,.062,.039,.033,.034,.036,.032,.027,.022,.016,.012,.009,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.029,.016,.021,.016,.022,.037,.021,.031,.018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.003,.146,.234,.232,.125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.007,.012,.021,.082,.154,.091,.068,.03,.029,.031,.034,.035,.034,.034,.034,.035,.034,.034,.032,.031,.067,.255,.301,.354,.343,.303,.269,.246,.097,.022,.032,.04,.039,.039,.035,.035,.052,.053,.052,.041,.037,.041,.041,.041,.041,.041,.041,.041,.041,.04,.04,.039,.039,.039,.038,.039,.039,.038,.039,.038,.038,.038,.039,.038,.038,.038,.038,.038,.038,.038,.038,.038,.039,.038,.038,.039,.038,.036,A,,,20230302143218, +300,20230302,.035,.036,.035,.036,.035,.038,.04,.039,.039,.038,.038,.038,.038,.037,.035,.036,.034,.033,.032,.033,.032,.033,.034,.036,.036,.036,.035,.036,.035,.035,.035,.035,.035,.034,.032,.033,.033,.033,.032,.036,.037,.036,.036,.036,.035,.036,.035,.035,.036,.034,.032,.033,.033,.032,.034,.106,.045,.044,.043,.044,.042,.044,.042,.042,.043,.042,.049,.04,.04,.038,.04,.041,.039,.034,.032,.035,.023,.023,.027,.029,.029,.028,.029,.031,.029,.02,.015,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.011,0,.029,.01,.016,.091,.08,.024,.041,.077,.042,.076,.105,.167,.211,.225,.245,.24,.012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.003,.011,.013,.04,0,.028,.119,.215,.362,.146,.014,0,.001,.094,.022,0,0,0,0,0,0,0,.021,.24,.075,.015,.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.155,.166,.08,.06,.061,.062,.067,.075,.116,.087,.137,.033,.015,.021,.02,.024,.021,.025,.028,.033,.033,.033,.035,.034,.038,.037,.042,.042,.04,.03,.03,.03,.027,.027,.024,.038,.039,.037,.036,.036,.037,.036,.036,.037,.036,.035,.034,.021,.02,.02,.02,.019,.024,.023,.024,.023,.023,.023,.022,.023,.023,.022,.023,.022,.02,.023,.038,.037,.037,.031,.02,.025,.027,.025,.026,.026,.025,.024,.023,.023,.023,.023,.023,.023,.022,.023,.022,A,,,20230303201734, +300,20230303,.022,.023,.028,.03,.029,.028,.027,.089,.189,.031,.027,.029,.031,.03,.031,.03,.03,.029,.028,.03,.124,.101,.02,.019,.021,.021,.021,.024,.024,.024,.024,.023,.023,.022,.023,.022,.022,.02,.019,.02,.02,.02,.02,.023,.023,.023,.023,.022,.023,.022,.022,.022,.02,.02,.019,.02,.019,.02,.023,.023,.023,.022,.029,.111,.058,.038,.032,.059,.03,.03,.025,.021,.015,.011,.003,0,0,.002,.001,.009,.016,.007,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.061,.099,.015,0,.034,.026,.032,.027,.009,.063,.02,.072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.043,.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.051,.207,.131,.104,.032,0,0,0,0,0,0,.278,.258,.233,.124,.132,.106,.001,0,.001,.01,.014,.014,.016,.023,.029,.032,.037,.04,.039,.039,.041,.041,.042,.039,.039,.039,.037,.034,.032,.029,.029,.027,.026,.026,.025,.023,.023,.021,.021,.022,.024,.025,.024,.023,.023,.023,.023,.023,.022,.023,.021,.02,.02,.02,.02,.02,.022,.024,.023,.022,.023,.022,.023,.022,.022,.022,.019,.02,.02,.019,.02,.022,.023,.023,.023,.022,.023,.023,.022,.022,.022,.02,.02,.02,.02,A,,,20230304151924, +300,20230304,.019,.02,.023,.023,.023,.023,.022,.022,.023,.022,.022,.021,.02,.02,.02,.02,.02,.023,.023,.023,.023,.022,.023,.022,.023,.022,.02,.02,.02,.02,.019,.02,.023,.023,.022,.023,.022,.022,.022,.022,.021,.019,.02,.02,.019,.02,.022,.023,.022,.022,.022,.022,.022,.022,.02,.02,.019,.02,.019,.02,.116,.073,.198,.198,.197,.096,.036,.12,.173,.113,.094,.036,.031,.027,.021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.001,.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.081,.19,.226,.167,.088,0,0,.006,.03,0,0,0,0,0,0,.001,.137,.114,.148,.15,.09,.001,.004,.008,.011,.014,.017,.021,.026,.028,.031,.03,.035,.061,.075,.058,.037,.04,.04,.036,.035,.035,.034,.031,.026,.026,.025,.026,.024,.023,.023,.022,.029,.027,.028,.028,.028,.031,.025,.024,.024,.024,.023,.023,.023,.023,.022,.023,.022,.023,.022,.021,.02,.019,.02,.02,.023,.023,.024,.022,.023,.022,.023,.022,.022,.023,.022,.021,.02,.02,.02,.019,.02,.021,.023,.023,.022,.023,.022,A,,,20230306120507, +300,20230305,.022,.023,.022,.022,.022,.02,.019,.02,.019,.019,.021,.023,.022,.023,.022,.023,.022,.022,.022,.022,.022,.019,.019,.02,.019,.02,.022,.023,.023,.022,.022,.022,.023,.022,.022,.022,.019,.02,.019,.02,.02,.02,.024,.023,.022,.023,.022,.022,.022,.022,.021,.02,.019,.02,.019,.02,.021,.023,.023,.022,.031,.098,.032,.032,.032,.031,.038,.041,.04,.033,.025,.032,.036,.036,.03,.025,.011,.006,.004,.005,.002,.003,.002,.003,0,0,.002,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.025,.083,.009,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.055,.111,.285,.159,0,0,0,0,0,0,0,.059,.157,.084,.055,.021,.037,.098,.09,.086,.084,.091,.038,.015,.017,.018,.03,.019,.034,.04,.043,.045,.034,.042,.045,.043,.032,.029,.03,.029,.031,.03,.029,.028,.027,.028,.026,.024,.025,.025,.024,.023,.024,.023,.022,.023,.023,.023,.022,.023,.022,.023,.023,.02,.02,.019,.02,.02,.02,.024,.023,.023,.023,.023,.022,.023,.023,.022,.023,.021,.019,.02,.02,.019,.02,.023,.023,.023,.023,.022,.023,.022,.022,.022,.022,.019,.02,A,,,20230306171459, +300,20230306,.02,.02,.019,.022,.024,.023,.022,.023,.022,.022,.023,.022,.02,.02,.019,.02,.02,.02,.023,.023,.023,.023,.022,.023,.022,.023,.02,.02,.02,.019,.02,.02,.022,.023,.023,.022,.023,.022,.022,.022,.022,.02,.019,.02,.019,.02,.021,.023,.023,.023,.022,.022,.022,.022,.022,.019,.019,.02,.019,.02,.02,.023,.023,.022,.022,.14,.028,.034,.059,.027,.029,.023,.017,.013,.012,.013,.011,.003,.053,0,0,0,0,0,0,0,0,.04,.101,0,0,0,0,0,0,0,0,0,0,0,.035,.011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.027,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.152,.067,0,0,0,0,0,0,0,.087,.069,.076,.053,0,.014,.14,.13,.042,.013,.012,.015,.022,.024,.026,.027,.028,.029,.055,.035,.036,.031,.049,.07,.061,.061,.056,.045,.049,.049,.048,.054,.056,.055,.054,.053,.055,.053,.048,.047,.047,.046,.046,.045,.046,.045,.045,.044,.045,.045,.045,.045,.045,.042,.041,.042,.042,.042,.044,.046,.045,.045,.045,.045,.044,.044,.045,.044,.045,.044,.044,.042,.041,.042,.041,.042,.045,.045,.045,.044,.044,.045,.044,A,,,20230307151618, +300,20230307,.044,.044,.045,.042,.041,.041,.042,.041,.042,.046,.046,.045,.046,.045,.045,.045,.025,.022,.022,.02,.02,.019,.02,.02,.02,.023,.024,.023,.022,.023,.022,.022,.022,.024,.026,.026,.027,.026,.026,.139,.156,.03,.029,.029,.029,.028,.029,.028,.027,.026,.025,.025,.152,.069,.022,.023,.024,.023,.024,.031,.032,.03,.03,.026,.027,.028,.123,.053,.025,.029,.029,.028,.032,.03,.025,.018,.013,.003,0,.004,.009,0,.001,0,0,.001,.004,.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.04,0,.002,.003,0,0,0,0,0,0,0,0,0,0,0,.001,0,0,.064,.089,0,.035,.02,0,0,0,0,0,0,0,0,0,0,.004,.047,.045,.158,.045,.008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.132,.103,.213,.1,0,0,0,0,0,0,0,0,0,0,0,.095,.166,.119,.096,.068,.059,.001,.027,.155,.184,.208,.1,.033,.012,.013,.017,.038,.048,.049,.05,.052,.053,.053,.055,.056,.062,.186,.299,.323,.377,.156,.068,.067,.063,.058,.061,.06,.063,.063,.061,.061,.062,.058,.059,.059,.058,.059,.058,.058,.051,.051,.05,.051,.05,.049,.05,.05,.05,.05,.049,.05,.05,.047,.047,.047,.046,.047,.049,.051,.05,.051,.05,.049,.051,.05,.049,.049,.049,.049,.05,.049,.049,.049,.049,.05,.049,.047,.047,.047,.046,A,,,20230308195006, +300,20230308,.047,.047,.05,.051,.05,.05,.05,.049,.05,.049,.05,.049,.05,.049,.049,.05,.049,.047,.046,.05,.049,.05,.051,.054,.053,.053,.053,.052,.053,.052,.053,.052,.053,.052,.052,.051,.05,.05,.05,.049,.051,.053,.053,.053,.053,.052,.053,.052,.052,.052,.053,.052,.051,.049,.05,.049,.049,.049,.05,.052,.053,.052,.051,.052,.052,.052,.051,.052,.125,.171,.19,.187,.109,.026,.048,.187,.097,.154,.031,.04,.12,.04,.019,.016,.012,.008,.013,.036,.04,.031,0,0,0,.003,.006,.013,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.004,.126,.118,.148,.15,.137,.139,.144,.145,.145,.132,.127,.141,.13,.146,.165,.173,.117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.033,.19,.185,.194,0,0,.006,0,0,0,0,0,0,0,0,0,0,0,0,0,.003,.006,.007,.002,0,0,0,.155,.194,.208,.098,0,0,0,0,0,0,0,0,.001,0,0,0,.054,.077,.009,.079,.064,.008,.016,.015,.028,.031,.032,.03,.031,.033,.16,.193,.345,.187,.065,.053,.057,.059,.071,.041,.057,.034,.033,.033,.032,.03,.03,.042,.044,.055,.067,.051,.053,.057,.056,.052,.053,.054,.056,.05,.049,.046,.044,.045,.045,.045,.044,.043,.042,.043,.042,.043,.042,.043,.042,.042,.043,.042,.043,.042,.043,.042,.041,.04,.04,.04,.039,.04,.042,.043,.044,.044,.043,.043,.042,.043,.042,.043,.042,.042,.042,.04,.04,.039,.04,.04,.04,.043,.045,.047,A,,,20230309160722, +300,20230309,.045,.046,.045,.046,.045,.045,.046,.043,.043,.042,.043,.042,.042,.045,.046,.046,.045,.045,.046,.045,.045,.045,.049,.053,.05,.05,.05,.048,.202,.108,.054,.054,.053,.053,.053,.052,.053,.052,.052,.051,.087,.166,.044,.042,.043,.044,.047,.047,.047,.046,.046,.046,.045,.045,.045,.023,.019,.02,.019,.02,.019,.019,.058,.133,.044,.032,.033,.031,.03,.025,.025,.025,.028,.027,.024,.023,.026,.024,.017,.018,.013,.17,.194,.177,.04,.024,.009,.002,.007,.137,.139,.077,.005,.014,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.168,.179,.178,.179,.194,.215,.218,.217,.223,.208,.202,.198,.206,.205,.194,.185,.067,0,0,0,0,0,0,.043,.065,.069,.013,.013,.021,.02,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.125,.244,.231,.233,.002,0,0,0,0,0,0,0,0,0,0,.001,.13,.003,.01,.147,.207,.126,.116,.117,.113,.104,.096,.096,.028,.032,.037,.035,.034,.037,.037,.043,.044,.042,.04,.034,.033,.032,.032,.032,.032,.032,.029,.027,.027,.026,.027,.028,.027,.026,.027,.026,.026,.026,.025,.025,.024,.024,.023,.023,.023,.023,.023,.022,.023,.023,.022,.022,.02,.019,.02,.019,.02,.023,.023,.024,.023,.023,.022,.023,.022,.024,.023,.022,.022,.023,.022,.023,.022,.022,.019,.02,.019,.02,.019,.022,.023,.023,.024,.022,.023,.022,.023,A,,,20230310152513, +300,20230310,.022,.022,.022,.022,.023,.022,.02,.019,.02,.019,.02,.02,.023,.023,.024,.023,.023,.022,.023,.022,.023,.023,.022,.023,.02,.02,.02,.02,.019,.02,.023,.023,.023,.023,.023,.022,.023,.022,.022,.023,.022,.022,.02,.02,.019,.02,.02,.02,.023,.024,.023,.022,.023,.023,.022,.02,.02,.034,.037,.037,.03,.097,.025,.025,.025,.032,.055,.051,.029,.032,.039,.04,.037,.032,.027,.016,.013,.008,.004,.008,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.085,.092,.11,.091,.114,.11,.086,.086,.055,.03,.029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.001,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.063,.231,.228,.229,.134,0,0,0,0,0,0,0,0,0,0,0,0,.003,.004,.004,.008,.011,.003,.189,.208,.189,.082,.02,.051,.184,.092,.149,.03,.024,.023,.026,.024,.024,.03,.032,.035,.034,.034,.037,.035,.039,.037,.032,.031,.031,.03,.029,.027,.027,.048,.064,.026,.023,.02,.02,.02,.019,.02,.024,.023,.023,.022,.023,.022,.022,.023,.022,.022,.022,.022,.02,.019,.02,.019,.019,.019,.022,.023,.023,.023,.022,.022,.024,.022,.022,.022,.022,.019,.02,.019,.019,.02,.019,.023,.023,.022,.023,.021,.022,.022,.022,.022,.021,.02,.019,.019,A,,,20230311145654, +300,20230311,.019,.019,.019,.022,.023,.023,.022,.022,.021,.022,.022,.022,.021,.02,.019,.02,.019,.02,.02,.023,.023,.023,.023,.022,.022,.022,.022,.022,.021,.02,.019,.019,.019,.019,.02,.023,.023,.022,.022,.022,.022,.022,.02,.019,.035,.037,.037,.034,.019,.024,.026,.025,.026,.025,.024,.024,.023,.022,.023,.022,.113,.036,.028,.03,.029,.031,.029,.028,.024,.024,.028,.031,.032,.028,.026,.025,.02,.013,.009,.003,0,.001,.002,.007,.004,0,.001,.002,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.044,.137,.026,.15,.119,.172,.138,.115,.145,.162,.241,.228,.183,.021,0,0,0,0,0,0,0,0,0,.002,0,.02,0,0,0,0,0,0,0,0,0,0,0,.003,.005,0,0,0,0,0,0,0,0,0,0,0,0,.001,.001,.001,.01,.011,.007,.006,.008,.009,.002,0,0,.141,.272,.275,.275,.104,0,0,.012,.017,.011,.02,.001,0,0,0,0,0,0,0,0,0,0,.008,.019,.126,.201,.033,.03,.032,.035,.103,.101,.1,.069,.078,.095,.091,.178,.057,.033,.032,.032,.034,.034,.032,.031,.037,.035,.032,.033,.027,.024,.02,.019,.022,.022,.023,.024,.025,.025,.024,.024,.023,.023,.024,.023,.022,.023,.022,.023,.022,.022,.019,.02,.02,.02,.019,.022,.023,.024,.023,.023,.023,.022,.024,.023,.023,.022,.023,.021,.02,.02,.02,.02,.019,.021,.024,.023,.023,.023,.022,.022,.022,.023,.022,.022,.021,.019,.02,.02,A,,,20230312152204, +300,20230312,.019,.02,.021,.023,.023,.023,.023,.022,.022,.022,.023,.022,.023,.019,.02,.02,.02,.019,.02,.023,.023,.023,.023,.023,.022,.023,.022,.022,.023,.019,.02,.019,.02,.019,.02,.022,.024,.023,.022,.023,.022,.023,.023,.022,.019,.021,.037,.037,.037,.028,.021,.025,.026,.025,.026,.025,.023,.032,.03,.031,.03,.03,.03,.029,.03,.03,.03,.03,.03,.029,.026,.109,.053,.027,.03,.026,.027,.027,.03,.029,.018,.009,.009,.013,.015,.007,.004,0,0,0,0,0,0,0,0,0,0,0,.001,0,.008,.03,.03,.105,.161,.093,.064,.041,.068,.12,.074,.058,0,0,0,.223,.269,.255,.242,.247,.245,.226,.204,.195,.229,.24,.23,.11,.165,.083,.121,.24,.192,.182,.112,.088,.064,.005,.007,.015,0,0,0,0,0,.074,0,0,0,0,0,.001,.004,.01,.006,.008,.014,.011,0,0,0,0,0,0,.001,.013,.021,.024,.283,.305,.306,.297,.112,.019,.015,.008,.001,0,0,.001,.004,.008,.009,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,.021,0,0,0,0,.199,.341,.174,.118,.079,.08,.077,.074,.065,.069,.006,.018,.021,.025,.026,.029,.031,.032,.035,.035,.035,.038,.037,.037,.035,.037,.034,.031,.025,.025,.024,.025,.024,.023,.023,.023,.022,.02,.02,.021,.02,.02,.022,.023,.024,.022,.023,.022,.022,.022,.022,.022,.022,.022,.022,.022,.022,.023,.022,.02,.019,.019,.02,.019,.019,.023,.023,.023,.023,.022,.022,.022,.022,.022,.022,.022,.022,.022,.022,.019,.019,.02,.019,.019,.02,.023,A,,,20230313155629, +300,20230313,.023,.023,.022,.023,.021,.022,.022,.022,.022,.022,.021,.02,.019,.02,.019,.02,.02,.023,.024,.023,.023,.023,.022,.023,.022,.022,.022,.022,.022,.021,.019,.019,.02,.019,.019,.022,.024,.023,.022,.023,.022,.022,.022,.022,.022,.022,.022,.02,.019,.019,.019,.019,.019,.023,.023,.022,.022,.022,.056,.057,.03,.032,.032,.03,.031,.044,.048,.048,.048,.038,.05,.057,.05,.049,.125,.206,.205,.204,.039,.021,.142,.079,.08,.013,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.002,.001,.088,.193,.356,.327,.294,.101,.041,.022,.169,.246,.236,.223,.203,.011,0,.139,.08,.078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.011,.006,0,.004,.005,.2,.134,.218,.167,0,.001,0,0,0,0,0,.001,.003,.167,.207,.195,.16,.139,.124,.011,.053,.045,.014,.031,.038,.031,.032,.033,.04,.046,.043,.048,.041,.039,.037,.037,.048,.07,.076,.073,.075,.061,.062,.056,.053,.051,.052,.056,.051,.051,.051,.049,.049,.049,.048,.048,.048,.047,.047,.048,.047,.048,.047,.048,.047,.047,.044,.042,.041,.039,.034,.026,.026,.026,.025,.024,.024,.024,.024,.023,.022,.021,.021,.02,.02,.021,.022,.024,.023,.023,.023,.023,.022,.023,.021,.02,A,,,20230314164219, +300,20230314,.02,.02,.02,.02,.023,.023,.023,.023,.022,.022,.023,.021,.02,.02,.019,.02,.02,.021,.024,.024,.022,.023,.023,.022,.022,.021,.019,.02,.02,.02,.021,.023,.023,.022,.022,.022,.023,.021,.019,.02,.02,.02,.021,.021,.023,.023,.022,.022,.022,.022,.021,.019,.02,.019,.022,.025,.025,.029,.029,.027,.028,.027,.027,.026,.028,.021,.02,.028,.141,.074,.045,.043,.042,.027,.028,.064,.051,.023,.016,.065,.154,.158,.145,.02,0,.073,.049,.037,.01,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.042,.092,.103,.116,.012,0,0,0,0,0,0,0,0,0,0,0,.117,.269,.255,.136,.11,.014,.017,.019,.024,.028,.03,.032,.031,.031,.032,.032,.033,.035,.038,.036,.043,.051,.047,.044,.065,.08,.093,.089,.069,.066,.054,.068,.075,.044,.042,.041,.042,.046,.04,.04,.04,.039,.038,.038,.037,.038,.038,.037,.037,.037,.038,.038,.038,.038,.036,.035,.035,.034,.035,.036,.039,.039,.038,.038,.037,.038,.037,.037,.037,.038,.037,.037,.035,.034,.035,.035,.035,.037,.039,.039,.038,.038,A,,,20230315133616, +300,20230315,.038,.038,.038,.038,.037,.037,.035,.035,.036,.035,.035,.037,.039,.039,.039,.038,.038,.038,.038,.037,.037,.035,.035,.036,.035,.036,.037,.039,.038,.038,.038,.039,.038,.038,.037,.036,.035,.031,.02,.02,.02,.024,.024,.024,.022,.023,.022,.023,.022,.023,.019,.02,.02,.02,.019,.02,.023,.024,.024,.028,.028,.028,.033,.038,.035,.029,.033,.041,.037,.033,.031,.03,.083,.152,.152,.214,.203,.19,.023,.04,.151,.116,.133,.151,.039,.02,.014,.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.018,.018,.042,0,.016,.014,.014,.084,.031,.062,.101,.178,.096,.03,.038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.007,0,0,0,0,0,0,0,0,0,0,.09,.126,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.005,.015,.021,.025,.035,.028,.024,.022,.002,0,0,0,0,0,0,0,.085,.074,.101,.003,.084,.14,.095,.072,.018,.015,.016,.017,.021,.02,.022,.023,.025,.024,.029,.057,.054,.055,.054,.054,.054,.053,.046,.045,.045,.044,.043,.045,.052,.054,.053,.051,.054,.049,.048,.049,.049,.047,.045,.046,.046,.045,.046,.05,.054,.051,.046,.045,.046,.043,.043,.042,.043,.043,.042,.047,.045,.046,.045,.046,.045,.044,.043,.042,.043,.043,.042,.032,.023,.023,.023,.023,.023,.033,.043,.042,.043,.043,.043,.044,.046,.046,A,,,20230316154410, +300,20230316,.046,.045,.046,.045,.045,.042,.043,.042,.043,.043,.05,.053,.053,.052,.052,.104,.211,.051,.05,.061,.067,.068,.067,.054,.052,.056,.054,.056,.149,.12,.047,.046,.047,.047,.046,.046,.046,.046,.047,.046,.043,.022,.02,.019,.02,.02,.02,.022,.023,.023,.028,.022,.022,.023,.022,.021,.019,.02,.02,.019,.063,.068,.029,.028,.029,.028,.028,.026,.026,.03,.047,.047,.033,.058,.018,.022,.015,.013,0,0,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.022,.069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.109,.146,.154,.123,.015,0,0,0,0,0,.059,.028,0,.002,.067,.196,.186,.123,.139,.153,.061,.038,.039,.04,.044,.051,.047,.049,.05,.05,.055,.053,.061,.159,.499,.496,.478,.303,.042,.041,.046,.041,.044,.044,.043,.043,.044,.052,.043,.043,.042,.042,.042,.042,.043,.042,.042,.042,.043,.042,.042,.042,.043,.042,.042,.041,.041,.04,.041,.041,.04,.038,.038,.038,.038,.038,.039,.042,.042,.042,.041,.042,.044,.043,.044,.044,.043,.044,.043,.044,.044,.043,.044,.044,.043,A,,,20230317140029, +300,20230317,.041,.041,.04,.041,.041,.044,.044,.046,.047,.047,.046,.047,.046,.047,.046,.045,.046,.046,.046,.045,.043,.044,.044,.043,.044,.046,.048,.047,.047,.047,.046,.047,.046,.046,.046,.046,.046,.052,.044,.043,.043,.044,.043,.044,.047,.047,.047,.047,.046,.046,.046,.046,.046,.046,.046,.046,.046,.043,.044,.043,.043,.043,.043,.047,.047,.046,.051,.051,.051,.051,.051,.05,.053,.051,.099,.161,.047,.03,.044,.022,.018,.02,.002,0,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.001,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.047,.259,.282,.114,.064,.092,.034,.016,.031,.049,.025,.026,.034,.028,.027,.027,.028,.065,.053,.085,.447,.498,.489,.485,.263,.048,.047,.046,.051,.051,.052,.052,.057,.05,.05,.054,.049,.048,.048,.049,.048,.049,.048,.046,.043,.042,.039,.04,.04,.04,.039,.044,.044,.043,.044,.043,.043,.043,.042,.043,.043,.042,.043,.042,.042,.043,.042,.042,.042,.043,.042,.042,.04,.039,.039,.04,.039,.04,.043,.043,.043,.043,A,,,20230318150359, +300,20230318,.043,.042,.045,.045,.046,.045,.045,.046,.045,.043,.043,.043,.044,.043,.044,.047,.047,.046,.046,.046,.045,.046,.045,.046,.046,.045,.045,.043,.043,.043,.043,.043,.045,.047,.046,.046,.045,.046,.045,.045,.046,.045,.045,.043,.043,.042,.043,.043,.043,.046,.047,.046,.045,.045,.045,.045,.045,.045,.044,.043,.042,.04,.025,.025,.027,.03,.031,.035,.035,.03,.049,.029,.029,.051,.028,.031,.023,.025,.014,.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.061,.048,0,0,.045,.038,.042,.012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,.022,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.002,.008,.012,.014,.015,.017,.019,.019,.019,.019,.02,.019,.019,.019,.019,.02,.019,.019,.019,.02,.019,.019,.019,.017,.016,.017,.016,.016,.018,.02,.021,.02,.02,.019,.02,.019,.02,.019,.023,.022,.022,.022,.022,.023,.022,.022,.022,.023,.043,.046,.046,.046,.045,.045,.048,.049,.049,.048,.05,.048,.049,.04,.042,.058,.059,.058,.043,.044,.047,.046,.047,.047,.045,.045,.045,.044,.044,.043,A,,,20230319160554, +300,20230319,.043,.043,.044,.043,.043,.043,.044,.043,.043,.041,.041,.041,.04,.041,.04,.045,.044,.044,.043,.043,.043,.043,.043,.043,.043,.041,.04,.04,.041,.04,.041,.044,.044,.044,.043,.044,.043,.043,.043,.043,.041,.04,.041,.04,.041,.041,.044,.043,.023,.022,.022,.022,.023,.022,.071,.052,.041,.041,.044,.073,.107,.047,.062,.051,.053,.05,.046,.08,.205,.184,.195,.221,.178,.083,.108,.105,.045,.044,.037,.026,.021,.035,.016,.013,.009,.009,.003,.002,.008,.005,0,.003,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.026,.065,.018,0,.011,.005,0,0,0,0,.02,0,0,.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.029,.04,0,0,0,.005,.007,.011,.016,.017,.021,.027,.029,.035,.066,.098,.084,.079,.106,.078,.11,.106,.119,.137,.107,.014,.017,.02,.021,.024,.031,.034,.036,.036,.036,.03,.048,.054,.057,.057,.054,.051,.054,.055,.06,.054,.054,.051,.044,.043,.048,.051,.05,.042,.042,.041,.041,.042,.039,.039,.037,.038,.036,.038,.039,.036,.037,.036,.036,.035,.035,.036,.035,.035,.036,.035,.035,.036,.033,.033,.032,.033,.033,.033,.036,.037,.036,.036,.036,.035,.036,.035,.035,.036,.034,.033,.033,.032,.033,.033,.035,.036,.037,A,,,20230320155010, +300,20230320,.037,.036,.036,.036,.035,.036,.035,.033,.032,.033,.033,.033,.033,.037,.036,.036,.036,.035,.036,.036,.035,.035,.033,.033,.033,.033,.033,.033,.036,.037,.035,.036,.035,.036,.035,.036,.033,.033,.033,.033,.033,.033,.034,.037,.036,.036,.031,.023,.023,.022,.021,.02,.02,.02,.02,.02,.021,.023,.023,.023,.023,.022,.022,.023,.02,.02,.032,.038,.037,.032,.019,.025,.025,.021,.018,.015,.01,.003,.12,.089,.011,.002,0,.009,0,0,0,.003,.004,.001,.004,.075,.074,.029,.001,0,.004,0,.002,.012,0,0,0,0,0,0,0,0,0,.001,0,0,0,0,0,0,0,.02,.015,0,0,.082,.09,.03,.064,.037,.048,.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.1,.158,.167,.173,.133,.138,.132,.065,.009,.011,.017,.018,.03,.086,.054,.029,.03,.034,.033,.041,.034,.057,.032,.031,.037,.042,.04,.039,.042,.041,.042,.042,.041,.041,.04,.039,.041,.044,.037,.038,.041,.04,.04,.04,.042,.044,.043,.044,.043,.04,.037,.037,.037,.037,.037,.037,.037,.037,.034,.035,.034,.033,.019,.02,.023,.023,.022,.023,.022,.022,.022,.022,.022,.022,.022,.021,.022,.02,.019,.019,.019,.019,.019,.023,.022,A,,,20230321164320, +300,20230321,.023,.023,.022,.022,.022,.022,.022,.022,.022,.022,.029,.028,.026,.026,.027,.094,.182,.029,.03,.03,.03,.036,.029,.03,.03,.03,.028,.029,.132,.089,.02,.019,.021,.02,.02,.022,.024,.024,.023,.023,.023,.022,.023,.022,.021,.022,.022,.019,.019,.019,.019,.019,.019,.022,.022,.022,.022,.022,.022,.163,.028,.028,.029,.028,.028,.026,.026,.039,.045,.046,.035,.028,.032,.033,.034,.029,.042,.031,.033,.019,.018,.017,.024,.019,.03,.018,.012,.006,.001,.001,0,.002,0,0,0,0,0,0,.001,.001,0,.013,.04,0,0,0,0,0,0,0,0,0,0,0,0,.16,.22,.236,.221,.115,.081,.134,.11,.134,.18,.113,.138,.193,.251,.078,.048,.031,.128,.161,.186,.126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.056,.152,.255,.242,.045,.03,.009,0,.027,.231,.241,.144,.185,0,0,0,.021,.043,.002,0,0,0,0,0,0,0,0,0,0,0,.004,0,.004,.007,.002,.042,.158,.189,.046,.032,.029,.039,.046,.05,.053,.05,.045,.044,.046,.047,.053,.051,.043,.042,.036,.034,.034,.031,.031,.029,.028,.027,.04,.024,.025,.028,.029,.028,.028,.028,.028,.027,.028,.028,.028,.028,.028,.026,.021,.019,.019,.02,.019,.021,.023,.024,.022,.023,.023,.022,.023,.022,.022,.022,.022,.022,.022,.022,.022,.022,.021,.019,.02,.019,.019,.02,.021,.023,.023,.023,.022,.022,.022,.022,.021,.022,A,,,20230322195250, +300,20230322,.022,.022,.022,.022,.019,.019,.019,.019,.019,.02,.023,.023,.023,.022,.022,.022,.022,.022,.022,.022,.022,.021,.02,.019,.019,.019,.02,.019,.021,.023,.023,.022,.022,.021,.022,.022,.022,.021,.022,.021,.019,.019,.019,.019,.019,.02,.022,.023,.022,.022,.021,.022,.022,.021,.022,.022,.02,.019,.019,.019,.019,.019,.02,.022,.025,.108,.029,.029,.035,.077,.03,.029,.027,.034,.058,.097,.07,.053,.044,.043,.031,.029,.04,.039,.04,.03,.033,.018,.002,0,0,.003,0,.003,0,.001,0,0,0,0,0,0,0,0,0,0,.035,0,0,0,0,0,0,0,.008,.322,.299,.252,.259,.253,.321,.274,.264,.278,.271,.265,.172,.139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.01,.035,.002,0,.004,0,0,.051,.134,.181,.217,.047,.049,.023,0,0,0,0,.009,.07,.062,0,0,0,0,0,0,0,0,0,0,0,.002,.25,.287,.249,.019,0,.001,0,.001,.011,.013,.011,.001,.014,0,0,0,0,0,.119,.262,.268,.188,.047,.07,.102,.125,.107,.125,.046,.155,.165,.095,.106,.026,.03,.035,.056,.042,.038,.037,.037,.037,.039,.041,.043,.043,.043,.047,.044,.038,.04,.039,.036,.032,.032,.031,.034,.027,.026,.027,.026,.026,.026,.024,.023,.022,.023,.022,.023,.031,.032,.031,.031,.031,.032,.022,.023,.022,.022,.023,.022,.021,.019,.02,.019,.019,.019,.02,.023,.023,.022,.022,.022,.022,.021,.022,.022,.021,.021,.019,.019,.019,.019,.019,.021,.023,.023,.022,.022,.021,.022,A,,,20230323152208, +300,20230323,.022,.022,.022,.021,.019,.019,.019,.019,.019,.021,.022,.023,.022,.022,.022,.022,.022,.021,.023,.021,.019,.019,.02,.019,.019,.02,.023,.022,.022,.022,.021,.022,.022,.021,.022,.02,.019,.019,.019,.019,.019,.021,.023,.022,.022,.021,.022,.021,.022,.021,.021,.019,.019,.019,.019,.019,.019,.022,.022,.022,.026,.022,.023,.026,.022,.021,.02,.019,.157,.049,.039,.035,.023,.027,.027,.064,.051,.068,.066,.038,.022,.022,.032,.012,.012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.011,.038,.045,.109,.125,.175,.132,.121,.146,.14,.087,.113,.094,.035,.098,.124,.009,.076,.035,.005,.003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.039,.084,.046,.028,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.005,0,0,0,.002,.007,.07,.216,.176,.023,.026,.028,.036,.03,.031,.034,.034,.034,.034,.035,.041,.038,.025,.029,.048,.048,.047,.036,.031,.038,.03,.028,.027,.025,.024,.029,.023,.023,.022,.023,.022,.022,.023,.022,.022,.022,.022,.02,.019,.019,.02,.019,.019,.023,.023,.022,.022,.022,.022,.022,.023,.021,.02,.019,.02,.02,.019,.021,.023,.022,.023,.021,.022,.022,.022,.02,.02,.019,.02,.019,.019,.023,.022,.023,A,,,20230324153059, +300,20230324,.022,.022,.022,.022,.02,.019,.02,.019,.019,.02,.021,.023,.022,.023,.022,.022,.023,.02,.02,.019,.02,.019,.02,.021,.023,.023,.022,.022,.022,.022,.019,.02,.019,.02,.019,.019,.023,.022,.023,.022,.022,.023,.021,.02,.019,.02,.019,.019,.02,.023,.023,.022,.022,.022,.022,.02,.019,.02,.019,.138,.208,.193,.193,.157,.031,.083,.194,.096,.137,.044,.027,.023,.019,.014,.013,.038,.014,.019,.017,.014,.009,.008,.008,0,.007,.018,.008,.011,.012,.01,.006,.002,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.11,.142,.148,.155,.165,.168,.102,.064,.107,.086,.001,0,.066,.03,.005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.063,.23,.255,.269,.256,0,0,.088,.182,.118,.094,.083,.077,.074,.073,.08,.083,.088,.092,.025,.018,.023,.027,.029,.03,.044,.063,.069,.051,.035,.035,.035,.035,.048,.051,.047,.041,.041,.04,.04,.04,.048,.077,.038,.039,.043,.043,.043,.043,.042,.04,.051,.056,.054,.049,.036,.041,.042,.041,.042,.041,.041,.04,.04,.039,.038,.039,.038,.038,.038,.037,.038,.038,.038,.037,.038,.037,.038,.037,.038,.037,.037,.038,.037,.034,.034,.034,.034,.035,.036,.038,.038,.037,.038,.037,.038,A,,,20230325150605, +300,20230325,.037,.037,.038,.037,.037,.038,.036,.035,.034,.035,.034,.035,.037,.038,.038,.038,.037,.037,.037,.038,.037,.037,.037,.036,.034,.035,.034,.035,.035,.031,.023,.022,.022,.023,.022,.022,.022,.022,.022,.022,.02,.02,.019,.02,.019,.021,.023,.023,.022,.022,.022,.022,.022,.022,.021,.022,.02,.02,.019,.019,.101,.071,.029,.029,.028,.028,.028,.027,.027,.027,.023,.032,.024,.028,.017,.009,.004,.04,.035,.028,.034,.035,.004,.009,.017,.014,.017,.015,.01,.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.067,.147,.094,.051,.033,.05,.009,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.003,.052,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.13,.264,.263,.259,.118,.003,0,0,0,0,0,.142,.288,.225,.127,.117,.114,.239,.117,.077,.023,.034,.006,.012,.019,.026,.029,.031,.036,.034,.033,.038,.039,.039,.039,.039,.037,.035,.035,.041,.034,.035,.03,.027,.028,.028,.028,.027,.026,.035,.043,.042,.041,.041,.041,.041,.041,.041,.025,.019,.019,.019,.02,.019,.022,.023,.022,.022,.023,.022,.022,.02,.02,.032,.036,.037,.037,.023,.023,.025,.026,.026,.025,.026,.024,.024,.023,.024,.022,.023,.022,.023,.022,.022,.023,.022,.022,.022,.023,.022,.022,A,,,20230326150029, +300,20230326,.022,.022,.022,.022,.022,.02,.019,.019,.019,.02,.02,.023,.023,.022,.023,.022,.023,.022,.022,.022,.022,.022,.023,.022,.019,.02,.02,.02,.02,.019,.024,.023,.022,.023,.022,.022,.022,.022,.022,.022,.023,.021,.02,.019,.019,.02,.019,.02,.023,.023,.022,.022,.022,.022,.022,.022,.023,.027,.027,.019,.105,.02,.019,.019,.02,.023,.023,.024,.025,.023,.025,.033,.034,.029,.029,.037,.021,.027,.028,.028,.028,.024,.007,.019,.002,.003,.008,.007,.001,.001,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.141,.16,.166,.103,.137,.127,.08,.123,.095,.054,.012,.006,.051,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.139,.166,.178,.098,0,0,0,0,.075,.071,.001,.004,.037,.049,.049,.024,.023,.026,.031,.031,.029,.03,.03,.034,.034,.039,.034,.035,.034,.031,.035,.039,.046,.041,.041,.038,.041,.04,.04,.036,.035,.036,.036,.041,.036,.035,.035,.033,.034,.05,.051,.05,.041,.033,.037,.039,.038,.038,.038,.037,.036,.036,.035,.035,.035,.035,.035,.034,.035,.034,.035,.035,.034,.035,.034,.035,.033,.031,.029,.019,.02,.019,.022,.023,.022,.022,.022,.022,.021,.022,.022,.022,.021,.019,A,,,20230327154418, +300,20230327,.019,.019,.019,.02,.02,.022,.023,.022,.021,.022,.022,.022,.021,.022,.02,.019,.02,.019,.019,.019,.021,.022,.023,.022,.021,.023,.022,.022,.022,.021,.02,.019,.019,.019,.019,.02,.023,.022,.023,.022,.021,.022,.022,.022,.021,.019,.019,.019,.019,.019,.019,.022,.023,.022,.021,.022,.021,.022,.021,.021,.019,.019,.018,.019,.019,.022,.028,.028,.028,.027,.027,.028,.102,.054,.033,.033,.03,.025,.019,.012,.008,.05,.066,.03,.025,.016,.015,.005,.009,.027,.013,.006,.005,.007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.192,.221,.033,.215,.203,.065,0,.036,.014,.004,.052,.009,.093,.076,.012,.021,0,.05,.009,0,0,0,0,0,0,0,.003,.001,0,0,0,0,0,0,.065,.057,.022,.005,.026,.079,.064,.022,.059,.08,.142,.093,.039,0,.05,.092,.052,.073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.047,.127,.118,.103,0,0,0,0,0,0,.004,0,.109,.207,.202,.196,.143,.134,.117,.098,.029,.018,.022,.024,.03,.048,.033,.033,.031,.032,.034,.037,.033,.033,.028,.032,.047,.053,.04,.037,.036,.035,.034,.035,.039,.045,.044,.045,.043,.043,.042,.038,.036,.037,.037,.036,.037,.037,.035,.034,.034,.034,.034,.034,.036,.038,.037,.038,.037,.037,.037,.036,.035,.035,.049,.052,.052,.052,.034,.039,.041,.041,.04,.04,.04,.039,.038,.028,.023,.028,.038,.037,.037,.038,.037,.037,A,,,20230328152939, +300,20230328,.037,.037,.037,.037,.037,.037,.037,.037,.036,.037,.036,.034,.034,.034,.035,.034,.037,.038,.037,.038,.037,.037,.037,.037,.038,.037,.037,.037,.038,.035,.034,.035,.035,.034,.035,.038,.038,.037,.038,.037,.037,.022,.022,.022,.022,.021,.02,.019,.02,.019,.019,.019,.022,.022,.023,.022,.021,.022,.022,.021,.022,.022,.026,.099,.063,.03,.028,.028,.029,.031,.031,.031,.025,.031,.057,.07,.068,.023,.006,.002,0,0,.001,.001,0,.005,.05,.017,.006,.001,0,0,0,.001,.001,.001,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.081,0,.037,.008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.002,.013,.002,0,0,0,0,0,.222,.403,.405,.291,.106,.011,.04,.016,.023,0,0,0,0,0,0,0,0,0,.024,.265,.371,.007,0,0,0,0,0,.008,0,.021,.089,.002,0,0,0,0,0,0,.028,.104,.087,.001,0,0,0,0,0,0,.001,.001,0,0,0,0,0,.004,.005,.007,0,.01,.073,.076,.143,.042,.027,.031,.036,.037,.043,.043,.044,.042,.04,.04,.047,.04,.044,.042,.041,.046,.055,.054,.053,.051,.047,.043,.041,.04,.055,.04,.042,.062,.06,.059,.054,.04,.048,.044,.042,.042,.042,.041,.04,.04,.039,.039,.038,.039,.037,.038,.038,.037,.037,.037,.037,.037,.037,.037,.038,.037,.037,.037,.037,.037,.037,.037,.037,.034,.034,.034,.035,.034,.037,.038,.037,.038,.037,.037,.037,.037,A,,,20230329153814, +300,20230329,.037,.037,.037,.036,.037,.037,.034,.034,.034,.034,.024,.021,.023,.023,.023,.022,.023,.022,.022,.023,.023,.037,.038,.035,.034,.034,.035,.034,.035,.038,.038,.023,.023,.023,.022,.023,.022,.022,.028,.028,.025,.025,.025,.025,.025,.026,.029,.029,.028,.028,.027,.027,.028,.027,.028,.027,.025,.025,.025,.025,.024,.107,.035,.032,.031,.046,.031,.033,.04,.029,.037,.029,.028,.028,.054,.066,.046,.045,.039,.034,.023,.051,.039,.029,.036,.045,.037,.022,.02,.019,.017,.025,.035,.036,.027,.019,.022,.024,.023,.022,.021,.006,.096,.013,.035,.033,.03,.016,.002,.002,0,.009,.011,.017,.005,.206,.263,.253,.261,.256,.271,.238,.312,.237,.215,.242,.217,.237,.258,.271,.257,.264,.115,0,0,0,0,0,.01,.071,.012,.005,.004,.012,.002,.008,0,.07,.003,0,.028,0,.012,.068,.021,.019,.033,.175,.239,.183,.002,0,.001,.008,0,0,0,0,0,0,0,0,0,.001,0,0,0,0,0,.001,0,0,0,0,0,.02,.003,0,.005,0,.006,0,0,0,0,0,0,0,0,.003,0,0,0,.016,.006,.006,.003,.008,.034,.07,.096,.023,.049,.041,.028,.028,.03,.031,.041,.033,.035,.035,.04,.04,.035,.032,.029,.029,.034,.041,.041,.04,.04,.039,.039,.043,.047,.041,.041,.043,.044,.039,.042,.037,.037,.037,.037,.037,.037,.037,.037,.035,.034,.034,.035,.034,.034,.038,.038,.038,.037,.037,.037,.037,.037,.037,.037,.037,.037,.034,.035,.034,.034,.035,.036,.038,.037,.038,.037,.037,.038,.036,.034,.044,.052,.053,.052,.039,A,,,20230330151734, +300,20230330,.038,.041,.041,.041,.04,.04,.04,.039,.035,.023,.023,.023,.022,.022,.022,.023,.022,.022,.022,.022,.022,.022,.022,.023,.022,.021,.02,.019,.02,.02,.02,.023,.023,.023,.022,.022,.023,.022,.022,.022,.022,.023,.022,.021,.019,.019,.02,.019,.019,.021,.023,.022,.022,.022,.022,.022,.021,.022,.022,.021,.021,.019,.019,.018,.019,.019,.021,.023,.022,.023,.027,.028,.027,.059,.143,.039,.039,.048,.02,.025,.017,.01,.002,0,.005,0,0,0,0,0,.001,.004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.053,.052,.156,.099,.045,.108,.128,.104,.043,.027,.069,.015,.09,.123,.043,0,.088,.137,.083,.029,0,0,0,0,0,0,.002,0,0,0,0,0,0,.001,0,0,0,0,.027,0,.001,0,0,0,0,0,0,0,0,0,0,.005,.034,0,.057,.106,.062,0,0,0,0,.052,.005,0,.025,.01,0,0,0,0,0,0,.009,.082,.093,.104,.115,.096,0,.034,.075,.051,.185,.28,.297,.264,.228,.224,.156,.15,.129,.215,.261,.084,.096,.088,.019,.021,.024,.028,.067,.046,.032,.034,.027,.027,.035,.026,.029,.028,.028,.024,.028,.031,.03,.03,.03,.024,.029,.023,.027,.025,.025,.025,.024,.024,.026,.028,.028,.024,.023,.022,.022,.022,.022,.022,.022,.022,.021,.02,.019,.019,.019,.019,.02,.092,.023,.022,.022,.022,.023,.026,.025,.025,.025,.024,.025,.023,.022,.023,.022,.022,.022,.023,.023,.022,.022,.022,.022,.022,.022,.021,.022,A,,,20230331162549, +300,20230331,.02,.019,.019,.019,.019,.019,.023,.022,.022,.022,.022,.021,.022,.022,.021,.02,.019,.033,.036,.037,.035,.019,.024,.025,.025,.025,.025,.023,.023,.023,.022,.022,.022,.022,.022,.021,.022,.022,.022,.021,.021,.02,.02,.019,.019,.019,.021,.023,.028,.027,.028,.027,.027,.027,.028,.036,.027,.025,.025,.025,.026,.025,.028,.028,.028,.028,.029,.031,.029,.027,.026,.025,.022,.022,.021,.018,.01,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.006,.002,.022,0,0,.011,0,.001,.001,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.004,0,0,.001,0,0,0,0,0,0,0,0,0,0,0,0,0,.048,.196,.247,.157,.043,.052,.081,.194,.132,.095,.065,.052,.023,.024,.013,.008,.014,.013,.017,.021,.027,.03,.031,.031,.031,.031,.049,.034,.033,.032,.031,.031,.032,.032,.031,.032,.031,.033,.032,.031,.035,.029,.024,.025,.029,.031,.03,.03,.031,.03,.031,.038,.03,.031,.03,.029,.029,.03,.029,.027,.027,.022,.025,.024,.024,.024,.024,.023,.024,.023,.024,.023,.022,.021,.021,.02,.021,.021,.023,.024,.024,.024,.023,.023,.023,.023,.023,.023,.02,.021,.02,.02,.02,.021,.022,.024,A,,,20230401143223, +900 diff --git a/nemreader/nem_reader.py b/nemreader/nem_reader.py index 05c7c5d..cd65652 100644 --- a/nemreader/nem_reader.py +++ b/nemreader/nem_reader.py @@ -194,24 +194,30 @@ def get_pivot_data_frame( for col in df.columns: if "value_" in col: new_names[col] = col[6:] + if "quality" in col: - if not quality: + perc_nans = df[col].isna().sum() / len(df[col]) + if not quality and perc_nans < 0.5: new_names[col] = "quality" + quality += 1 else: del df[col] - quality += 1 + if "evt_code" in col: - if not evt_code: + perc_nans = df[col].isna().sum() / len(df[col]) + if not evt_code and perc_nans < 0.5: new_names[col] = "evt_code" + evt_code += 1 else: del df[col] - evt_code += 1 + if "evt_desc" in col: - if not evt_desc: + perc_nans = df[col].isna().sum() / len(df[col]) + if not evt_desc and perc_nans < 0.5: new_names[col] = "evt_desc" + evt_desc += 1 else: del df[col] - evt_desc += 1 df.rename(columns=new_names, inplace=True) return df diff --git a/nemreader/version.py b/nemreader/version.py index 3e2f46a..d69d16e 100644 --- a/nemreader/version.py +++ b/nemreader/version.py @@ -1 +1 @@ -__version__ = "0.9.0" +__version__ = "0.9.1" diff --git a/requirements.txt b/requirements.txt index e4596b7..edcef9f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,34 +7,44 @@ click==8.1.7 # typer click-default-group==1.2.4 # via sqlite-utils -coverage==7.4.4 +coverage==7.5.3 # via pytest-cov -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 # via pytest iniconfig==2.0.0 # via pytest -mypy==1.9.0 +markdown-it-py==3.0.0 + # via rich +mdurl==0.1.2 + # via markdown-it-py +mypy==1.10.0 mypy-extensions==1.0.0 # via mypy numpy==1.26.4 # via pandas packaging==24.0 # via pytest -pandas==2.2.1 -pluggy==1.4.0 +pandas==2.2.2 +pluggy==1.5.0 # via # pytest # sqlite-utils -pytest==8.1.1 +pygments==2.18.0 + # via rich +pytest==8.2.1 # via pytest-cov -pytest-cov==4.1.0 +pytest-cov==5.0.0 python-dateutil==2.9.0.post0 # via # pandas # sqlite-utils pytz==2024.1 # via pandas -ruff==0.3.4 +rich==13.7.1 + # via typer +ruff==0.4.6 +shellingham==1.5.4 + # via typer six==1.16.0 # via python-dateutil sqlite-fts4==1.0.3 @@ -47,8 +57,8 @@ tomli==2.0.1 # coverage # mypy # pytest -typer==0.9.0 -typing-extensions==4.10.0 +typer==0.12.3 +typing-extensions==4.12.0 # via # mypy # typer diff --git a/tests/test_dataframe_pivot.py b/tests/test_dataframe_pivot.py index cd5114c..5781a3c 100644 --- a/tests/test_dataframe_pivot.py +++ b/tests/test_dataframe_pivot.py @@ -21,3 +21,17 @@ def test_pivot_dataframe(): for suffix in ["t_start", "E1", "E2", "V1", "quality", "evt_code", "evt_desc"]: assert suffix in df.columns assert len(df) == 48 + + +def test_pivot_dataframe_partialchannel(): + """Test example where some days are missing from first channel in file""" + nf = NEMFile("examples/unzipped/Example_NEM12_partialchannel.csv", strict=True) + + # The intervals are different, so we have 48 30min + 144 10min = 192 rows + df = nf.get_pivot_data_frame(set_interval=30) + for suffix in ["t_start", "B1", "E1", "quality", "evt_code", "evt_desc"]: + assert suffix in df.columns + assert len(df) == 1488 + for col in ["t_start", "E1", "quality", "evt_code", "evt_desc"]: # only B1 has nans + perc_nans = df[col].isna().sum() / len(df[col]) + assert perc_nans == 0.0