From f873045045f4a921d144e68b1f8d1e2f7aa8bcff Mon Sep 17 00:00:00 2001 From: Olivia Lynn Date: Tue, 21 Nov 2023 13:58:38 -0500 Subject: [PATCH 1/2] Initial changes; KeyError still from last pr.run --- .../creation_examples/fsps_sed_demo.ipynb | 481 ++++++++++++++++-- 1 file changed, 430 insertions(+), 51 deletions(-) diff --git a/examples/creation_examples/fsps_sed_demo.ipynb b/examples/creation_examples/fsps_sed_demo.ipynb index 0970f3b..64f09bc 100644 --- a/examples/creation_examples/fsps_sed_demo.ipynb +++ b/examples/creation_examples/fsps_sed_demo.ipynb @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -174,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -221,18 +221,52 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 0 running creator on chunk 0 - 10\n", + "Inserting handle into data store. model_FSPSSedModeler: inprogress_model_FSPSSedModeler.hdf5, FSPSSedModeler\n" + ] + } + ], "source": [ "fspssedmodel = fspssedmodeler.fit_model(training_data)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'restframe_wavelengths': array([[3010., 3030., 3050., ..., 9950., 9970., 9990.]]),\n", + " 'restframe_seds': array([[1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", + " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", + " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", + " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", + " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", + " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", + " ...,\n", + " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", + " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", + " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", + " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", + " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", + " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05]]),\n", + " 'redshifts': array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "fspssedmodel.data" ] @@ -246,8 +280,21 @@ }, { "cell_type": "code", - "execution_count": null, - "outputs": [], + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "redshifts\n", + "restframe_seds\n", + "restframe_wavelengths\n" + ] + } + ], "source": [ "with h5py.File('model_FSPSSedModeler.hdf5','r') as h5table:\n", " for key in h5table.keys():\n", @@ -255,16 +302,24 @@ " redshifts = h5table['redshifts'][()]\n", " restframe_seds = h5table['restframe_seds'][()]\n", " restframe_wavelengths = h5table['restframe_wavelengths'][()]" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -285,7 +340,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "scrolled": true }, @@ -300,31 +355,89 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on method initialize in module ceci.pipeline:\n", + "\n", + "initialize(overall_inputs, run_config, stages_config) method of ceci.pipeline.MiniPipeline instance\n", + " Load the configuation for this pipeline\n", + " \n", + " Parameters\n", + " ----------\n", + " overall_inputs : `Mapping`\n", + " A mapping from tag to path for all of the overall inputs needed by this pipeline\n", + " run_config : `Mapping`\n", + " Configuration parameters for how to run the pipeline\n", + " stages_config: `str`\n", + " File with stage configuration parameters\n", + " \n", + " Returns\n", + " -------\n", + " self.run_info : information on how to run the pipeline, as provided by sub-class `initiate_run` method\n", + " self.run_config : copy of configuration parameters on how to run the pipeline\n", + "\n" + ] + } + ], "source": [ "help(pipe.initialize)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ - "pipe.initialize(dict(input=trainFile), dict(output_dir='./temp_output_rail_fsps', log_dir='./logs_rail_fsps',\n", - " resume=False, nprocess=2), None)\n", + "pipe.initialize(\n", + " dict(training_data=trainFile), \n", + " dict(\n", + " output_dir='./temp_output_rail_fsps', \n", + " log_dir='./logs_rail_fsps',\n", + " resume=False, \n", + " nprocess=2\n", + " ), \n", + " None\n", + ")\n", "pipe.save('./temp_output_rail_fsps/pipe_saved.yml')" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Executing FSPSSedModeler\n", + "Command is:\n", + "OMP_NUM_THREADS=1 python3 -m ceci rail.creation.engines.fsps_sed_modeler.FSPS_sed_model --input=/Users/orl/code/DESC-RAIL/rail_fsps/src/rail/examples_data/creation_data/data/fsps_default_data/input_galaxy_properties_fsps.hdf5 --name=FSPSSedModeler --config=./temp_output_rail_fsps/pipe_saved_config.yml --model=./temp_output_rail_fsps/model_FSPSSedModeler.hdf5 \n", + "Output writing to ./logs_rail_fsps/FSPSSedModeler.out\n", + "\n", + "Job FSPSSedModeler has completed successfully!\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import ceci\n", "pr = ceci.Pipeline.read('./temp_output_rail_fsps/pipe_saved.yml')\n", @@ -333,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -343,9 +456,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -380,7 +504,10 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "from rail.core.stage import RailStage\n", @@ -389,26 +516,23 @@ "DS.__class__.allow_overwrite = True\n", "from rail.core.data import TableHandle\n", "import rail.fsps" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "trainFile = os.path.join('model_FSPSSedModeler.hdf5')\n", "training_data = DS.read_file(\"training_data\", TableHandle, trainFile)" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -418,7 +542,9 @@ "default_rail_fsps_filter_folder = os.path.join(RAIL_FSPS_DIR, 'rail', 'examples_data', 'creation_data', 'data',\n", " 'fsps_default_data', 'filters')\n", "\n", - "fspsphotometrycreator = FSPSPhotometryCreator.make_stage(redshifts_key='redshifts',restframe_sed_key='restframe_seds',\n", + "fspsphotometrycreator = FSPSPhotometryCreator.make_stage(redshifts_key='redshifts',\n", + " redshift_key='redshifts',\n", + " restframe_sed_key='restframe_seds',\n", " restframe_wave_key='restframe_wavelengths',\n", " apparent_mags_key='apparent_mags',\n", " filter_folder=default_rail_fsps_filter_folder,\n", @@ -437,18 +563,235 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Inserting handle into data store. output: inprogress_output.hdf5, FSPS_Photometry_Creator\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/orl/code/DESC-RAIL/rail_fsps/src/rail/creation/engines/fsps_photometry_creator.py:142: RuntimeWarning: invalid value encountered in divide\n", + " mag_ab = -2.5 * np.log10(numerator / denominator) - 48.6\n" + ] + } + ], "source": [ "fspsphotometry = fspsphotometrycreator.sample(input_data=training_data)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),\n", + " 'redshifts': array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n", + " 'apparent_mags': array([[[17.9377563 , 17.9377563 , 17.9377563 , 17.9377563 ,\n", + " 17.9377563 , 17.9377563 , 17.9377563 , 17.9377563 ,\n", + " 17.9377563 , 17.9377563 ],\n", + " [17.16346629, 17.16346629, 17.16346629, 17.16346629,\n", + " 17.16346629, 17.16346629, 17.16346629, 17.16346629,\n", + " 17.16346629, 17.16346629],\n", + " [17.03212188, 17.03212188, 17.03212188, 17.03212188,\n", + " 17.03212188, 17.03212188, 17.03212188, 17.03212188,\n", + " 17.03212188, 17.03212188],\n", + " [16.8650772 , 16.8650772 , 16.8650772 , 16.8650772 ,\n", + " 16.8650772 , 16.8650772 , 16.8650772 , 16.8650772 ,\n", + " 16.8650772 , 16.8650772 ],\n", + " [16.86075682, 16.86075682, 16.86075682, 16.86075682,\n", + " 16.86075682, 16.86075682, 16.86075682, 16.86075682,\n", + " 16.86075682, 16.86075682],\n", + " [16.75137939, 16.75137939, 16.75137939, 16.75137939,\n", + " 16.75137939, 16.75137939, 16.75137939, 16.75137939,\n", + " 16.75137939, 16.75137939]],\n", + " \n", + " [[19.53930898, 19.53930898, 19.53930898, 19.53930898,\n", + " 19.53930898, 19.53930898, 19.53930898, 19.53930898,\n", + " 19.53930898, 19.53930898],\n", + " [18.94455306, 18.94455306, 18.94455306, 18.94455306,\n", + " 18.94455306, 18.94455306, 18.94455306, 18.94455306,\n", + " 18.94455306, 18.94455306],\n", + " [18.54439505, 18.54439505, 18.54439505, 18.54439505,\n", + " 18.54439505, 18.54439505, 18.54439505, 18.54439505,\n", + " 18.54439505, 18.54439505],\n", + " [18.43740896, 18.43740896, 18.43740896, 18.43740896,\n", + " 18.43740896, 18.43740896, 18.43740896, 18.43740896,\n", + " 18.43740896, 18.43740896],\n", + " [18.48983414, 18.48983414, 18.48983414, 18.48983414,\n", + " 18.48983414, 18.48983414, 18.48983414, 18.48983414,\n", + " 18.48983414, 18.48983414],\n", + " [18.39519633, 18.39519633, 18.39519633, 18.39519633,\n", + " 18.39519633, 18.39519633, 18.39519633, 18.39519633,\n", + " 18.39519633, 18.39519633]],\n", + " \n", + " [[20.47891135, 20.47891135, 20.47891135, 20.47891135,\n", + " 20.47891135, 20.47891135, 20.47891135, 20.47891135,\n", + " 20.47891135, 20.47891135],\n", + " [20.06600052, 20.06600052, 20.06600052, 20.06600052,\n", + " 20.06600052, 20.06600052, 20.06600052, 20.06600052,\n", + " 20.06600052, 20.06600052],\n", + " [19.47038043, 19.47038043, 19.47038043, 19.47038043,\n", + " 19.47038043, 19.47038043, 19.47038043, 19.47038043,\n", + " 19.47038043, 19.47038043],\n", + " [19.5086885 , 19.5086885 , 19.5086885 , 19.5086885 ,\n", + " 19.5086885 , 19.5086885 , 19.5086885 , 19.5086885 ,\n", + " 19.5086885 , 19.5086885 ],\n", + " [19.28520459, 19.28520459, 19.28520459, 19.28520459,\n", + " 19.28520459, 19.28520459, 19.28520459, 19.28520459,\n", + " 19.28520459, 19.28520459],\n", + " [19.36521982, 19.36521982, 19.36521982, 19.36521982,\n", + " 19.36521982, 19.36521982, 19.36521982, 19.36521982,\n", + " 19.36521982, 19.36521982]],\n", + " \n", + " [[ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [20.91039219, 20.91039219, 20.91039219, 20.91039219,\n", + " 20.91039219, 20.91039219, 20.91039219, 20.91039219,\n", + " 20.91039219, 20.91039219],\n", + " [20.22582315, 20.22582315, 20.22582315, 20.22582315,\n", + " 20.22582315, 20.22582315, 20.22582315, 20.22582315,\n", + " 20.22582315, 20.22582315],\n", + " [20.09136363, 20.09136363, 20.09136363, 20.09136363,\n", + " 20.09136363, 20.09136363, 20.09136363, 20.09136363,\n", + " 20.09136363, 20.09136363],\n", + " [20.02650124, 20.02650124, 20.02650124, 20.02650124,\n", + " 20.02650124, 20.02650124, 20.02650124, 20.02650124,\n", + " 20.02650124, 20.02650124],\n", + " [19.98239529, 19.98239529, 19.98239529, 19.98239529,\n", + " 19.98239529, 19.98239529, 19.98239529, 19.98239529,\n", + " 19.98239529, 19.98239529]],\n", + " \n", + " [[ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [21.54223957, 21.54223957, 21.54223957, 21.54223957,\n", + " 21.54223957, 21.54223957, 21.54223957, 21.54223957,\n", + " 21.54223957, 21.54223957],\n", + " [20.87001478, 20.87001478, 20.87001478, 20.87001478,\n", + " 20.87001478, 20.87001478, 20.87001478, 20.87001478,\n", + " 20.87001478, 20.87001478],\n", + " [20.57266355, 20.57266355, 20.57266355, 20.57266355,\n", + " 20.57266355, 20.57266355, 20.57266355, 20.57266355,\n", + " 20.57266355, 20.57266355],\n", + " [20.64901271, 20.64901271, 20.64901271, 20.64901271,\n", + " 20.64901271, 20.64901271, 20.64901271, 20.64901271,\n", + " 20.64901271, 20.64901271],\n", + " [20.44220638, 20.44220638, 20.44220638, 20.44220638,\n", + " 20.44220638, 20.44220638, 20.44220638, 20.44220638,\n", + " 20.44220638, 20.44220638]],\n", + " \n", + " [[ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [21.98438644, 21.98438644, 21.98438644, 21.98438644,\n", + " 21.98438644, 21.98438644, 21.98438644, 21.98438644,\n", + " 21.98438644, 21.98438644],\n", + " [21.45961968, 21.45961968, 21.45961968, 21.45961968,\n", + " 21.45961968, 21.45961968, 21.45961968, 21.45961968,\n", + " 21.45961968, 21.45961968],\n", + " [20.99363104, 20.99363104, 20.99363104, 20.99363104,\n", + " 20.99363104, 20.99363104, 20.99363104, 20.99363104,\n", + " 20.99363104, 20.99363104],\n", + " [21.09872182, 21.09872182, 21.09872182, 21.09872182,\n", + " 21.09872182, 21.09872182, 21.09872182, 21.09872182,\n", + " 21.09872182, 21.09872182],\n", + " [21.00433468, 21.00433468, 21.00433468, 21.00433468,\n", + " 21.00433468, 21.00433468, 21.00433468, 21.00433468,\n", + " 21.00433468, 21.00433468]],\n", + " \n", + " [[ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [22.35526462, 22.35526462, 22.35526462, 22.35526462,\n", + " 22.35526462, 22.35526462, 22.35526462, 22.35526462,\n", + " 22.35526462, 22.35526462],\n", + " [22.01000882, 22.01000882, 22.01000882, 22.01000882,\n", + " 22.01000882, 22.01000882, 22.01000882, 22.01000882,\n", + " 22.01000882, 22.01000882],\n", + " [21.4962965 , 21.4962965 , 21.4962965 , 21.4962965 ,\n", + " 21.4962965 , 21.4962965 , 21.4962965 , 21.4962965 ,\n", + " 21.4962965 , 21.4962965 ],\n", + " [21.27387732, 21.27387732, 21.27387732, 21.27387732,\n", + " 21.27387732, 21.27387732, 21.27387732, 21.27387732,\n", + " 21.27387732, 21.27387732],\n", + " [21.40393995, 21.40393995, 21.40393995, 21.40393995,\n", + " 21.40393995, 21.40393995, 21.40393995, 21.40393995,\n", + " 21.40393995, 21.40393995]],\n", + " \n", + " [[ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [22.66643487, 22.66643487, 22.66643487, 22.66643487,\n", + " 22.66643487, 22.66643487, 22.66643487, 22.66643487,\n", + " 22.66643487, 22.66643487],\n", + " [22.50740644, 22.50740644, 22.50740644, 22.50740644,\n", + " 22.50740644, 22.50740644, 22.50740644, 22.50740644,\n", + " 22.50740644, 22.50740644],\n", + " [21.85633753, 21.85633753, 21.85633753, 21.85633753,\n", + " 21.85633753, 21.85633753, 21.85633753, 21.85633753,\n", + " 21.85633753, 21.85633753],\n", + " [21.58115673, 21.58115673, 21.58115673, 21.58115673,\n", + " 21.58115673, 21.58115673, 21.58115673, 21.58115673,\n", + " 21.58115673, 21.58115673],\n", + " [21.73369748, 21.73369748, 21.73369748, 21.73369748,\n", + " 21.73369748, 21.73369748, 21.73369748, 21.73369748,\n", + " 21.73369748, 21.73369748]],\n", + " \n", + " [[ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [22.84595267, 22.84595267, 22.84595267, 22.84595267,\n", + " 22.84595267, 22.84595267, 22.84595267, 22.84595267,\n", + " 22.84595267, 22.84595267],\n", + " [22.26669071, 22.26669071, 22.26669071, 22.26669071,\n", + " 22.26669071, 22.26669071, 22.26669071, 22.26669071,\n", + " 22.26669071, 22.26669071],\n", + " [22.01223736, 22.01223736, 22.01223736, 22.01223736,\n", + " 22.01223736, 22.01223736, 22.01223736, 22.01223736,\n", + " 22.01223736, 22.01223736],\n", + " [21.79966951, 21.79966951, 21.79966951, 21.79966951,\n", + " 21.79966951, 21.79966951, 21.79966951, 21.79966951,\n", + " 21.79966951, 21.79966951]],\n", + " \n", + " [[ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [ nan, nan, nan, nan,\n", + " nan, nan, nan, nan,\n", + " nan, nan],\n", + " [23.09876577, 23.09876577, 23.09876577, 23.09876577,\n", + " 23.09876577, 23.09876577, 23.09876577, 23.09876577,\n", + " 23.09876577, 23.09876577],\n", + " [22.69184206, 22.69184206, 22.69184206, 22.69184206,\n", + " 22.69184206, 22.69184206, 22.69184206, 22.69184206,\n", + " 22.69184206, 22.69184206],\n", + " [22.28485845, 22.28485845, 22.28485845, 22.28485845,\n", + " 22.28485845, 22.28485845, 22.28485845, 22.28485845,\n", + " 22.28485845, 22.28485845],\n", + " [22.06797684, 22.06797684, 22.06797684, 22.06797684,\n", + " 22.06797684, 22.06797684, 22.06797684, 22.06797684,\n", + " 22.06797684, 22.06797684]]])}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "fspsphotometry.data" ] @@ -462,7 +805,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -474,13 +817,49 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Executing FSPS_Photometry_Creator\n", + "Command is:\n", + "OMP_NUM_THREADS=1 python3 -m ceci rail.creation.engines.fsps_photometry_creator.FSPS_Photometry_Creator --model=/Users/orl/code/DESC-RAIL/rail_fsps/src/rail/examples_data/creation_data/data/fsps_default_data/input_galaxy_properties_fsps.hdf5 --config=./temp_output_rail_fsps/pipe_saved_config.yml --output=./temp_output_rail_fsps/output.hdf5 \n", + "Output writing to ./logs/FSPS_Photometry_Creator.out\n", + "\n", + "Job FSPS_Photometry_Creator has failed with status 1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "*************************************************\n", + "Error running pipeline stage FSPS_Photometry_Creator.\n", + "\n", + "Standard output and error streams in ./logs/FSPS_Photometry_Creator.out\n", + "*************************************************\n" + ] + }, + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "pipe.initialize(dict(input='input_galaxy_properties_fsps.h5'), dict(output_dir='./temp_output', log_dir='./logs', resume=False, nprocess=2),'./temp_output/pipe_sed_fsps_config.yml')\n", - "pipe.save('./temp_output/pipe_saved.yml')\n", - "pr = ceci.Pipeline.read('./temp_output/pipe_saved.yml')\n", + "pipe.initialize(dict(training_data=input_file), dict(output_dir='./temp_output_rail_fsps', log_dir='./logs', resume=False, nprocess=2),'./temp_output_rail_fsps/pipe_saved_config.yml')\n", + "pipe.save('./temp_output_rail_fsps/pipe_saved.yml')\n", + "pr = ceci.Pipeline.read('./temp_output_rail_fsps/pipe_saved.yml')\n", "pr.run()" ] }, @@ -510,7 +889,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.6" } }, "nbformat": 4, From c4f9f89c6a6202fc5b72b71792925a3582fdc6f7 Mon Sep 17 00:00:00 2001 From: Olivia Lynn Date: Wed, 22 Nov 2023 12:11:29 -0500 Subject: [PATCH 2/2] Clear outputs --- .../creation_examples/fsps_sed_demo.ipynb | 433 ++---------------- 1 file changed, 32 insertions(+), 401 deletions(-) diff --git a/examples/creation_examples/fsps_sed_demo.ipynb b/examples/creation_examples/fsps_sed_demo.ipynb index 64f09bc..b1f37e4 100644 --- a/examples/creation_examples/fsps_sed_demo.ipynb +++ b/examples/creation_examples/fsps_sed_demo.ipynb @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -174,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -221,52 +221,18 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Process 0 running creator on chunk 0 - 10\n", - "Inserting handle into data store. model_FSPSSedModeler: inprogress_model_FSPSSedModeler.hdf5, FSPSSedModeler\n" - ] - } - ], + "outputs": [], "source": [ "fspssedmodel = fspssedmodeler.fit_model(training_data)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'restframe_wavelengths': array([[3010., 3030., 3050., ..., 9950., 9970., 9990.]]),\n", - " 'restframe_seds': array([[1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", - " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", - " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", - " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", - " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", - " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", - " ...,\n", - " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", - " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", - " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", - " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05],\n", - " [1.42759482e-05, 1.43249559e-05, 1.43778481e-05, ...,\n", - " 4.96154709e-05, 4.99308850e-05, 4.99859566e-05]]),\n", - " 'redshifts': array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "fspssedmodel.data" ] @@ -280,21 +246,11 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "redshifts\n", - "restframe_seds\n", - "restframe_wavelengths\n" - ] - } - ], + "outputs": [], "source": [ "with h5py.File('model_FSPSSedModeler.hdf5','r') as h5table:\n", " for key in h5table.keys():\n", @@ -306,20 +262,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -340,7 +285,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "scrolled": true }, @@ -355,44 +300,18 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on method initialize in module ceci.pipeline:\n", - "\n", - "initialize(overall_inputs, run_config, stages_config) method of ceci.pipeline.MiniPipeline instance\n", - " Load the configuation for this pipeline\n", - " \n", - " Parameters\n", - " ----------\n", - " overall_inputs : `Mapping`\n", - " A mapping from tag to path for all of the overall inputs needed by this pipeline\n", - " run_config : `Mapping`\n", - " Configuration parameters for how to run the pipeline\n", - " stages_config: `str`\n", - " File with stage configuration parameters\n", - " \n", - " Returns\n", - " -------\n", - " self.run_info : information on how to run the pipeline, as provided by sub-class `initiate_run` method\n", - " self.run_config : copy of configuration parameters on how to run the pipeline\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "help(pipe.initialize)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -411,33 +330,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Executing FSPSSedModeler\n", - "Command is:\n", - "OMP_NUM_THREADS=1 python3 -m ceci rail.creation.engines.fsps_sed_modeler.FSPS_sed_model --input=/Users/orl/code/DESC-RAIL/rail_fsps/src/rail/examples_data/creation_data/data/fsps_default_data/input_galaxy_properties_fsps.hdf5 --name=FSPSSedModeler --config=./temp_output_rail_fsps/pipe_saved_config.yml --model=./temp_output_rail_fsps/model_FSPSSedModeler.hdf5 \n", - "Output writing to ./logs_rail_fsps/FSPSSedModeler.out\n", - "\n", - "Job FSPSSedModeler has completed successfully!\n" - ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import ceci\n", "pr = ceci.Pipeline.read('./temp_output_rail_fsps/pipe_saved.yml')\n", @@ -446,7 +341,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -456,20 +351,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -504,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "collapsed": false }, @@ -520,7 +404,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "collapsed": false }, @@ -532,7 +416,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -563,235 +447,18 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Inserting handle into data store. output: inprogress_output.hdf5, FSPS_Photometry_Creator\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/orl/code/DESC-RAIL/rail_fsps/src/rail/creation/engines/fsps_photometry_creator.py:142: RuntimeWarning: invalid value encountered in divide\n", - " mag_ab = -2.5 * np.log10(numerator / denominator) - 48.6\n" - ] - } - ], + "outputs": [], "source": [ "fspsphotometry = fspsphotometrycreator.sample(input_data=training_data)" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'id': array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),\n", - " 'redshifts': array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n", - " 'apparent_mags': array([[[17.9377563 , 17.9377563 , 17.9377563 , 17.9377563 ,\n", - " 17.9377563 , 17.9377563 , 17.9377563 , 17.9377563 ,\n", - " 17.9377563 , 17.9377563 ],\n", - " [17.16346629, 17.16346629, 17.16346629, 17.16346629,\n", - " 17.16346629, 17.16346629, 17.16346629, 17.16346629,\n", - " 17.16346629, 17.16346629],\n", - " [17.03212188, 17.03212188, 17.03212188, 17.03212188,\n", - " 17.03212188, 17.03212188, 17.03212188, 17.03212188,\n", - " 17.03212188, 17.03212188],\n", - " [16.8650772 , 16.8650772 , 16.8650772 , 16.8650772 ,\n", - " 16.8650772 , 16.8650772 , 16.8650772 , 16.8650772 ,\n", - " 16.8650772 , 16.8650772 ],\n", - " [16.86075682, 16.86075682, 16.86075682, 16.86075682,\n", - " 16.86075682, 16.86075682, 16.86075682, 16.86075682,\n", - " 16.86075682, 16.86075682],\n", - " [16.75137939, 16.75137939, 16.75137939, 16.75137939,\n", - " 16.75137939, 16.75137939, 16.75137939, 16.75137939,\n", - " 16.75137939, 16.75137939]],\n", - " \n", - " [[19.53930898, 19.53930898, 19.53930898, 19.53930898,\n", - " 19.53930898, 19.53930898, 19.53930898, 19.53930898,\n", - " 19.53930898, 19.53930898],\n", - " [18.94455306, 18.94455306, 18.94455306, 18.94455306,\n", - " 18.94455306, 18.94455306, 18.94455306, 18.94455306,\n", - " 18.94455306, 18.94455306],\n", - " [18.54439505, 18.54439505, 18.54439505, 18.54439505,\n", - " 18.54439505, 18.54439505, 18.54439505, 18.54439505,\n", - " 18.54439505, 18.54439505],\n", - " [18.43740896, 18.43740896, 18.43740896, 18.43740896,\n", - " 18.43740896, 18.43740896, 18.43740896, 18.43740896,\n", - " 18.43740896, 18.43740896],\n", - " [18.48983414, 18.48983414, 18.48983414, 18.48983414,\n", - " 18.48983414, 18.48983414, 18.48983414, 18.48983414,\n", - " 18.48983414, 18.48983414],\n", - " [18.39519633, 18.39519633, 18.39519633, 18.39519633,\n", - " 18.39519633, 18.39519633, 18.39519633, 18.39519633,\n", - " 18.39519633, 18.39519633]],\n", - " \n", - " [[20.47891135, 20.47891135, 20.47891135, 20.47891135,\n", - " 20.47891135, 20.47891135, 20.47891135, 20.47891135,\n", - " 20.47891135, 20.47891135],\n", - " [20.06600052, 20.06600052, 20.06600052, 20.06600052,\n", - " 20.06600052, 20.06600052, 20.06600052, 20.06600052,\n", - " 20.06600052, 20.06600052],\n", - " [19.47038043, 19.47038043, 19.47038043, 19.47038043,\n", - " 19.47038043, 19.47038043, 19.47038043, 19.47038043,\n", - " 19.47038043, 19.47038043],\n", - " [19.5086885 , 19.5086885 , 19.5086885 , 19.5086885 ,\n", - " 19.5086885 , 19.5086885 , 19.5086885 , 19.5086885 ,\n", - " 19.5086885 , 19.5086885 ],\n", - " [19.28520459, 19.28520459, 19.28520459, 19.28520459,\n", - " 19.28520459, 19.28520459, 19.28520459, 19.28520459,\n", - " 19.28520459, 19.28520459],\n", - " [19.36521982, 19.36521982, 19.36521982, 19.36521982,\n", - " 19.36521982, 19.36521982, 19.36521982, 19.36521982,\n", - " 19.36521982, 19.36521982]],\n", - " \n", - " [[ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [20.91039219, 20.91039219, 20.91039219, 20.91039219,\n", - " 20.91039219, 20.91039219, 20.91039219, 20.91039219,\n", - " 20.91039219, 20.91039219],\n", - " [20.22582315, 20.22582315, 20.22582315, 20.22582315,\n", - " 20.22582315, 20.22582315, 20.22582315, 20.22582315,\n", - " 20.22582315, 20.22582315],\n", - " [20.09136363, 20.09136363, 20.09136363, 20.09136363,\n", - " 20.09136363, 20.09136363, 20.09136363, 20.09136363,\n", - " 20.09136363, 20.09136363],\n", - " [20.02650124, 20.02650124, 20.02650124, 20.02650124,\n", - " 20.02650124, 20.02650124, 20.02650124, 20.02650124,\n", - " 20.02650124, 20.02650124],\n", - " [19.98239529, 19.98239529, 19.98239529, 19.98239529,\n", - " 19.98239529, 19.98239529, 19.98239529, 19.98239529,\n", - " 19.98239529, 19.98239529]],\n", - " \n", - " [[ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [21.54223957, 21.54223957, 21.54223957, 21.54223957,\n", - " 21.54223957, 21.54223957, 21.54223957, 21.54223957,\n", - " 21.54223957, 21.54223957],\n", - " [20.87001478, 20.87001478, 20.87001478, 20.87001478,\n", - " 20.87001478, 20.87001478, 20.87001478, 20.87001478,\n", - " 20.87001478, 20.87001478],\n", - " [20.57266355, 20.57266355, 20.57266355, 20.57266355,\n", - " 20.57266355, 20.57266355, 20.57266355, 20.57266355,\n", - " 20.57266355, 20.57266355],\n", - " [20.64901271, 20.64901271, 20.64901271, 20.64901271,\n", - " 20.64901271, 20.64901271, 20.64901271, 20.64901271,\n", - " 20.64901271, 20.64901271],\n", - " [20.44220638, 20.44220638, 20.44220638, 20.44220638,\n", - " 20.44220638, 20.44220638, 20.44220638, 20.44220638,\n", - " 20.44220638, 20.44220638]],\n", - " \n", - " [[ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [21.98438644, 21.98438644, 21.98438644, 21.98438644,\n", - " 21.98438644, 21.98438644, 21.98438644, 21.98438644,\n", - " 21.98438644, 21.98438644],\n", - " [21.45961968, 21.45961968, 21.45961968, 21.45961968,\n", - " 21.45961968, 21.45961968, 21.45961968, 21.45961968,\n", - " 21.45961968, 21.45961968],\n", - " [20.99363104, 20.99363104, 20.99363104, 20.99363104,\n", - " 20.99363104, 20.99363104, 20.99363104, 20.99363104,\n", - " 20.99363104, 20.99363104],\n", - " [21.09872182, 21.09872182, 21.09872182, 21.09872182,\n", - " 21.09872182, 21.09872182, 21.09872182, 21.09872182,\n", - " 21.09872182, 21.09872182],\n", - " [21.00433468, 21.00433468, 21.00433468, 21.00433468,\n", - " 21.00433468, 21.00433468, 21.00433468, 21.00433468,\n", - " 21.00433468, 21.00433468]],\n", - " \n", - " [[ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [22.35526462, 22.35526462, 22.35526462, 22.35526462,\n", - " 22.35526462, 22.35526462, 22.35526462, 22.35526462,\n", - " 22.35526462, 22.35526462],\n", - " [22.01000882, 22.01000882, 22.01000882, 22.01000882,\n", - " 22.01000882, 22.01000882, 22.01000882, 22.01000882,\n", - " 22.01000882, 22.01000882],\n", - " [21.4962965 , 21.4962965 , 21.4962965 , 21.4962965 ,\n", - " 21.4962965 , 21.4962965 , 21.4962965 , 21.4962965 ,\n", - " 21.4962965 , 21.4962965 ],\n", - " [21.27387732, 21.27387732, 21.27387732, 21.27387732,\n", - " 21.27387732, 21.27387732, 21.27387732, 21.27387732,\n", - " 21.27387732, 21.27387732],\n", - " [21.40393995, 21.40393995, 21.40393995, 21.40393995,\n", - " 21.40393995, 21.40393995, 21.40393995, 21.40393995,\n", - " 21.40393995, 21.40393995]],\n", - " \n", - " [[ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [22.66643487, 22.66643487, 22.66643487, 22.66643487,\n", - " 22.66643487, 22.66643487, 22.66643487, 22.66643487,\n", - " 22.66643487, 22.66643487],\n", - " [22.50740644, 22.50740644, 22.50740644, 22.50740644,\n", - " 22.50740644, 22.50740644, 22.50740644, 22.50740644,\n", - " 22.50740644, 22.50740644],\n", - " [21.85633753, 21.85633753, 21.85633753, 21.85633753,\n", - " 21.85633753, 21.85633753, 21.85633753, 21.85633753,\n", - " 21.85633753, 21.85633753],\n", - " [21.58115673, 21.58115673, 21.58115673, 21.58115673,\n", - " 21.58115673, 21.58115673, 21.58115673, 21.58115673,\n", - " 21.58115673, 21.58115673],\n", - " [21.73369748, 21.73369748, 21.73369748, 21.73369748,\n", - " 21.73369748, 21.73369748, 21.73369748, 21.73369748,\n", - " 21.73369748, 21.73369748]],\n", - " \n", - " [[ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [22.84595267, 22.84595267, 22.84595267, 22.84595267,\n", - " 22.84595267, 22.84595267, 22.84595267, 22.84595267,\n", - " 22.84595267, 22.84595267],\n", - " [22.26669071, 22.26669071, 22.26669071, 22.26669071,\n", - " 22.26669071, 22.26669071, 22.26669071, 22.26669071,\n", - " 22.26669071, 22.26669071],\n", - " [22.01223736, 22.01223736, 22.01223736, 22.01223736,\n", - " 22.01223736, 22.01223736, 22.01223736, 22.01223736,\n", - " 22.01223736, 22.01223736],\n", - " [21.79966951, 21.79966951, 21.79966951, 21.79966951,\n", - " 21.79966951, 21.79966951, 21.79966951, 21.79966951,\n", - " 21.79966951, 21.79966951]],\n", - " \n", - " [[ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [ nan, nan, nan, nan,\n", - " nan, nan, nan, nan,\n", - " nan, nan],\n", - " [23.09876577, 23.09876577, 23.09876577, 23.09876577,\n", - " 23.09876577, 23.09876577, 23.09876577, 23.09876577,\n", - " 23.09876577, 23.09876577],\n", - " [22.69184206, 22.69184206, 22.69184206, 22.69184206,\n", - " 22.69184206, 22.69184206, 22.69184206, 22.69184206,\n", - " 22.69184206, 22.69184206],\n", - " [22.28485845, 22.28485845, 22.28485845, 22.28485845,\n", - " 22.28485845, 22.28485845, 22.28485845, 22.28485845,\n", - " 22.28485845, 22.28485845],\n", - " [22.06797684, 22.06797684, 22.06797684, 22.06797684,\n", - " 22.06797684, 22.06797684, 22.06797684, 22.06797684,\n", - " 22.06797684, 22.06797684]]])}" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "fspsphotometry.data" ] @@ -805,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -817,45 +484,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Executing FSPS_Photometry_Creator\n", - "Command is:\n", - "OMP_NUM_THREADS=1 python3 -m ceci rail.creation.engines.fsps_photometry_creator.FSPS_Photometry_Creator --model=/Users/orl/code/DESC-RAIL/rail_fsps/src/rail/examples_data/creation_data/data/fsps_default_data/input_galaxy_properties_fsps.hdf5 --config=./temp_output_rail_fsps/pipe_saved_config.yml --output=./temp_output_rail_fsps/output.hdf5 \n", - "Output writing to ./logs/FSPS_Photometry_Creator.out\n", - "\n", - "Job FSPS_Photometry_Creator has failed with status 1\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "*************************************************\n", - "Error running pipeline stage FSPS_Photometry_Creator.\n", - "\n", - "Standard output and error streams in ./logs/FSPS_Photometry_Creator.out\n", - "*************************************************\n" - ] - }, - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "pipe.initialize(dict(training_data=input_file), dict(output_dir='./temp_output_rail_fsps', log_dir='./logs', resume=False, nprocess=2),'./temp_output_rail_fsps/pipe_saved_config.yml')\n", "pipe.save('./temp_output_rail_fsps/pipe_saved.yml')\n",