|
813 | 813 | },
|
814 | 814 | {
|
815 | 815 | "cell_type": "code",
|
816 |
| - "execution_count": 3, |
817 |
| - "metadata": {}, |
818 |
| - "outputs": [ |
819 |
| - { |
820 |
| - "ename": "Failed", |
821 |
| - "evalue": "Invalid regex pattern provided to 'match': incomplete escape \\U at position 46", |
822 |
| - "output_type": "error", |
823 |
| - "traceback": [ |
824 |
| - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", |
825 |
| - "\u001b[1;31mFailed\u001b[0m Traceback (most recent call last)", |
826 |
| - "Cell \u001b[1;32mIn[3], line 10\u001b[0m\n\u001b[0;32m 4\u001b[0m invalid_name_or_alias \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnamenotindict\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 5\u001b[0m expected_error_message \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 6\u001b[0m \u001b[38;5;124mrf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname_or_alias: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00minvalid_name_or_alias\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not in JSON at \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 7\u001b[0m \u001b[38;5;124mrf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mos\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(DATA_DIR,\u001b[38;5;250m \u001b[39mpvdeg\u001b[38;5;241m.\u001b[39mutilities\u001b[38;5;241m.\u001b[39mpvdeg_datafiles[pvdeg_file])\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 8\u001b[0m )\n\u001b[1;32m---> 10\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[43mpytest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraises\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;167;43;01mValueError\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmatch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexpected_error_message\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[0;32m 11\u001b[0m pvdeg\u001b[38;5;241m.\u001b[39mutilities\u001b[38;5;241m.\u001b[39msearch_json(pvdeg_file\u001b[38;5;241m=\u001b[39mpvdeg_file, name_or_alias\u001b[38;5;241m=\u001b[39minvalid_name_or_alias)\n", |
827 |
| - " \u001b[1;31m[... skipping hidden 1 frame]\u001b[0m\n", |
828 |
| - "File \u001b[1;32mc:\\Users\\tford\\AppData\\Local\\miniconda3\\envs\\deg\\lib\\site-packages\\_pytest\\python_api.py:997\u001b[0m, in \u001b[0;36mRaisesContext.__init__\u001b[1;34m(self, expected_exception, message, match_expr)\u001b[0m\n\u001b[0;32m 995\u001b[0m re_error \u001b[38;5;241m=\u001b[39m e\n\u001b[0;32m 996\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m re_error \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 997\u001b[0m \u001b[43mfail\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mInvalid regex pattern provided to \u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mmatch\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m: \u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mre_error\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", |
829 |
| - "File \u001b[1;32mc:\\Users\\tford\\AppData\\Local\\miniconda3\\envs\\deg\\lib\\site-packages\\_pytest\\outcomes.py:178\u001b[0m, in \u001b[0;36mfail\u001b[1;34m(reason, pytrace)\u001b[0m\n\u001b[0;32m 165\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Explicitly fail an executing test with the given message.\u001b[39;00m\n\u001b[0;32m 166\u001b[0m \n\u001b[0;32m 167\u001b[0m \u001b[38;5;124;03m:param reason:\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 175\u001b[0m \u001b[38;5;124;03m The exception that is raised.\u001b[39;00m\n\u001b[0;32m 176\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 177\u001b[0m __tracebackhide__ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m--> 178\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Failed(msg\u001b[38;5;241m=\u001b[39mreason, pytrace\u001b[38;5;241m=\u001b[39mpytrace)\n", |
830 |
| - "\u001b[1;31mFailed\u001b[0m: Invalid regex pattern provided to 'match': incomplete escape \\U at position 46" |
831 |
| - ] |
832 |
| - } |
833 |
| - ], |
| 816 | + "execution_count": null, |
| 817 | + "metadata": {}, |
| 818 | + "outputs": [], |
834 | 819 | "source": [
|
835 | 820 | "from pvdeg import DATA_DIR\n",
|
836 | 821 | "\n",
|
|
847 | 832 | },
|
848 | 833 | {
|
849 | 834 | "cell_type": "code",
|
850 |
| - "execution_count": 2, |
| 835 | + "execution_count": null, |
851 | 836 | "metadata": {},
|
852 |
| - "outputs": [ |
853 |
| - { |
854 |
| - "ename": "NameError", |
855 |
| - "evalue": "name 'invalid_name_or_alias' is not defined", |
856 |
| - "output_type": "error", |
857 |
| - "traceback": [ |
858 |
| - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", |
859 |
| - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", |
860 |
| - "Cell \u001b[1;32mIn[2], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m expected_error_message \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m----> 2\u001b[0m \u001b[38;5;124mrf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname_or_alias: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00minvalid_name_or_alias\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not in JSON at \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;124mrf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mos\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(DATA_DIR,\u001b[38;5;250m \u001b[39mpvdeg\u001b[38;5;241m.\u001b[39mutilities\u001b[38;5;241m.\u001b[39mpvdeg_datafiles[pvdeg_file])\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 4\u001b[0m )\n", |
861 |
| - "\u001b[1;31mNameError\u001b[0m: name 'invalid_name_or_alias' is not defined" |
862 |
| - ] |
863 |
| - } |
864 |
| - ], |
| 837 | + "outputs": [], |
865 | 838 | "source": [
|
866 | 839 | "\n",
|
867 | 840 | "expected_error_message = (\n",
|
|
872 | 845 | },
|
873 | 846 | {
|
874 | 847 | "cell_type": "code",
|
875 |
| - "execution_count": 4, |
| 848 | + "execution_count": null, |
876 | 849 | "metadata": {},
|
877 |
| - "outputs": [ |
878 |
| - { |
879 |
| - "data": { |
880 |
| - "text/plain": [ |
881 |
| - "'name_or_alias: namenotindict not in JSON at C:\\\\Users\\\\tford\\\\dev\\\\PVDegradationTools\\\\pvdeg\\\\data\\\\H2Opermeation.json'" |
882 |
| - ] |
883 |
| - }, |
884 |
| - "execution_count": 4, |
885 |
| - "metadata": {}, |
886 |
| - "output_type": "execute_result" |
887 |
| - } |
888 |
| - ], |
| 850 | + "outputs": [], |
889 | 851 | "source": [
|
890 | 852 | "expected_error_message"
|
891 | 853 | ]
|
892 | 854 | },
|
893 | 855 | {
|
894 | 856 | "cell_type": "code",
|
895 |
| - "execution_count": 5, |
| 857 | + "execution_count": null, |
896 | 858 | "metadata": {},
|
897 |
| - "outputs": [ |
898 |
| - { |
899 |
| - "ename": "TypeError", |
900 |
| - "evalue": "'module' object is not callable", |
901 |
| - "output_type": "error", |
902 |
| - "traceback": [ |
903 |
| - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", |
904 |
| - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", |
905 |
| - "Cell \u001b[1;32mIn[5], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mpvdeg\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mutilities\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msearch_json\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpvdeg_file\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpvdeg_file\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname_or_alias\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minvalid_name_or_alias\u001b[49m\u001b[43m)\u001b[49m\n", |
906 |
| - "File \u001b[1;32m~\\dev\\PVDegradationTools\\pvdeg\\utilities.py:1437\u001b[0m, in \u001b[0;36msearch_json\u001b[1;34m(pvdeg_file, fp, name_or_alias)\u001b[0m\n\u001b[0;32m 1434\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (subdict[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m==\u001b[39m name_or_alias \u001b[38;5;129;01mor\u001b[39;00m subdict[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124malias\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m==\u001b[39m name_or_alias):\n\u001b[0;32m 1435\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m key\n\u001b[1;32m-> 1437\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mrf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname_or_alias: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mname_or_alias\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not in JSON at \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mos\u001b[38;5;241m.\u001b[39mpath(fp)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n", |
907 |
| - "\u001b[1;31mTypeError\u001b[0m: 'module' object is not callable" |
908 |
| - ] |
909 |
| - } |
910 |
| - ], |
| 859 | + "outputs": [], |
911 | 860 | "source": [
|
912 | 861 | "pvdeg.utilities.search_json(pvdeg_file=pvdeg_file, name_or_alias=invalid_name_or_alias)"
|
913 | 862 | ]
|
914 | 863 | },
|
| 864 | + { |
| 865 | + "cell_type": "code", |
| 866 | + "execution_count": 5, |
| 867 | + "metadata": {}, |
| 868 | + "outputs": [], |
| 869 | + "source": [ |
| 870 | + "import os\n", |
| 871 | + "import pandas as pd\n", |
| 872 | + "import pvdeg\n", |
| 873 | + "import numpy as np\n", |
| 874 | + "from pvdeg import TEST_DATA_DIR\n", |
| 875 | + "import pytest\n", |
| 876 | + "\n", |
| 877 | + "INPUT_SPECTRA = os.path.join(TEST_DATA_DIR, r\"spectra_pytest.csv\")\n", |
| 878 | + "\n", |
| 879 | + "data = pd.read_csv(INPUT_SPECTRA)\n", |
| 880 | + "wavelengths = np.array(range(280, 420, 20))\n", |
| 881 | + "\n", |
| 882 | + "# convert to expected format\n", |
| 883 | + "spectra = data[\"Spectra\"]\n", |
| 884 | + "spectra_df = pd.DataFrame(spectra.tolist(), index=spectra.index)\n", |
| 885 | + "spectra_df = spectra.str.strip(\"[]\").str.split(\",\", expand=True).astype(float)\n", |
| 886 | + "spectra_df.columns = wavelengths\n", |
| 887 | + "\n", |
| 888 | + "# from input data, this was lost during our original conversion to the dataframe\n", |
| 889 | + "spectra_df.index = pd.date_range(\"2021-03-09 10:00:00\", freq='1h', periods=10)\n", |
| 890 | + "\n", |
| 891 | + "conditions_df = pd.DataFrame(\n", |
| 892 | + " data={\n", |
| 893 | + " \"relative_humidity\": data[\"RH\"],\n", |
| 894 | + " \"temperature\": data[\"Temperature\"],\n", |
| 895 | + " }\n", |
| 896 | + ")\n", |
| 897 | + "conditions_df.index = spectra_df.index\n", |
| 898 | + "\n", |
| 899 | + "degradation = pvdeg.degradation.degradation(\n", |
| 900 | + " spectra_df=spectra_df,\n", |
| 901 | + " conditions_df=conditions_df\n", |
| 902 | + ")\n", |
| 903 | + "\n", |
| 904 | + "assert degradation == pytest.approx(4.4969e-38, abs=0.02e-38)" |
| 905 | + ] |
| 906 | + }, |
| 907 | + { |
| 908 | + "cell_type": "code", |
| 909 | + "execution_count": null, |
| 910 | + "metadata": {}, |
| 911 | + "outputs": [], |
| 912 | + "source": [ |
| 913 | + "degradation" |
| 914 | + ] |
| 915 | + }, |
915 | 916 | {
|
916 | 917 | "cell_type": "code",
|
917 | 918 | "execution_count": null,
|
|
0 commit comments