aboutsummaryrefslogtreecommitdiff
path: root/gn3
AgeCommit message (Expand)Author
2022-03-03Run partial correlations in an external process...Run the partial correlations code in an external python process decoupling it from the server and making it asynchronous. Summary of changes: * gn3/api/correlation.py: - Remove response processing code - Queue partial corrs processing - Create new endpoint to get results * gn3/commands.py - Compose the pcorrs command to be run in an external process - Enable running of subprocess commands with list args * gn3/responses/__init__.py: new module indicator file * gn3/responses/pcorrs_responses.py: Hold response processing code extracted from ~gn3.api.correlations.py~ file * scripts/partial_correlations.py: CLI script to process the pcorrs * sheepdog/worker.py: - Add the *genenetwork3* path at the beginning of the ~sys.path~ list to override any GN3 in the site-packages - Add any environment variables to be set for the command to be run Frederick Muriuki Muriithi
2022-02-25Fix issue where 0's were treated as False for the primary trait in...correlations In the original version of the if statement* I believe it was interpreted as "if a_val and (b_val is not None)". This caused values of 0 for a_val (the primary trait's values) to be evaluated as False. I changed it to compare both a_val and b_val to None. This seems to have fixed the issue. * if (a_val and b_val is not None) zsloan
2022-02-24gn3: computations: Call Popen with context manager....Context managers should be preferred when allocating resources. * gn3/computations/wgcna.py (stream_cmd_output): Call Popen with context manager. Arun Isaac
2022-02-24gn3: Explicitly specify UTF-8 to be the file encoding....When the encoding is not specified explicitly, the system default encoding is used. This is not recommended. * gn3/computations/ctl.py (call_ctl_script), gn3/computations/gemma.py (generate_pheno_txt_file), gn3/computations/parsers.py (parse_genofile), gn3/computations/partial_correlations.py (partial_correlations_fast), gn3/computations/rqtl.py (process_rqtl_output, process_perm_output), gn3/computations/wgcna.py (dump_wgcna_data, call_wgcna_script), gn3/fs_helpers.py (jsonfile_to_dict): Explicitly specify UTF-8 to be the file encoding. * tests/unit/computations/test_gemma.py (TestGemma.test_generate_pheno_txt_file), tests/unit/computations/test_wgcna.py (TestWgcna.test_create_json_file): Test for call to open with encoding='utf-8' argument. Arun Isaac
2022-02-21Fix minor issues introduced while fixing linting errorsFrederick Muriuki Muriithi
2022-02-21Fix a myriad of linter issues...* Use `with` in place of plain `open` * Use f-strings in place of `str.format()` * Remove string interpolation from queries - provide data as query parameters * other minor fixes Frederick Muriuki Muriithi
2022-02-21Test partial corrs API with mix of existing and non-existing control traits...Test that the partial correlations endpoint handles a mix of existing and non-existing control traits gracefully and issues a warning to the user. Summary of changes: * gn3/computations/partial_correlations.py: Issue a warning for all non-existing control traits * gn3/db/partial_correlations.py: update queries - use `INNER JOIN` for tables instead of comma-separated list of tables * tests/integration/conftest.py: Add `db_conn` fixture to provide a database connection to the tests. This will probably be changed in the future to connect to a temporary database for tests. * tests/integration/test_partial_correlations.py: Add test to check for correct behaviour with a mix of existing and non-existing control traits Frederick Muriuki Muriithi
2022-02-19Test partial corrs endpoint with non-existing control traits...Test that if the endpoint is queried and not a single one of the control traits exists in the database, then the endpoint will respond with a 404 (not-found) status code. Summary of changes: * gn3/computations/partial_correlations.py: Check whether any control trait is found. If none is found, return "not-found" message. * gn3/db/partial_correlations.py: Fix bug in Geno query. * tests/integration/test_partial_correlations.py: Add test for non-existing control traits. Rename function to make it clearer what it is testing for. Remove obsoleted comments. Frederick Muriuki Muriithi
2022-02-18Remove code trying to query non-existent `TempFreeze` table...The code was migrated from GN1 with a faulty assumption that all trait types have a corresponding `*Freeze` table in the database. This assumption is not true for the `Temp` traits. This commit removes the buggy code. Frederick Muriuki Muriithi
2022-02-18Test partial correlations endpoint with non-existent primary traits...Test that the partial correlations endpoint responds with an appropriate "not-found" message and the corresponding 404 status code in the case where a request is made and the primary trait requested for does not exist in the database. Summary of the changes in each file: * gn3/api/correlation.py: generalise the building of the response * gn3/computations/partial_correlations.py: return with a "not-found" if the primary trait does not exist in the database * gn3/db/partial_correlations.py: Fix a number of bugs that led to exceptions in the case that the primary trait did not exist * pytest.ini: register a `slow` pytest marker * tests/integration/test_partial_correlations.py: Add a new test to check for an appropriate 404 response in case of a primary trait that does not exist in the database. Frederick Muriuki Muriithi
2022-02-17Test partial correlations endpoint with missing data in POST request...Add a test for the partial correlations endpoint, with: - no data in the request - missing items in the data Fix the bugs caught by the test Frederick Muriuki Muriithi
2022-02-17Add property tests for `dictify_by_samples`...Add property tests using pytest and hypothesis to test that the expected properties hold for the `gn3.computations.partial_correlations.dictify_by_samples` function. Frederick Muriuki Muriithi
2022-02-08Merge iterations to remove unnecessary computations...Do all the work in a single iteration to avoid unnecessary iterations that hamper performance. Frederick Muriuki Muriithi
2022-02-08Remove multiprocessing for stability...Web servers are long-running processes, and python is not very good at cleaning up after itself especially in forked processes - this leads to memory errors in the web-server after a while. This commit removes the use of multiprocessing to avoid such failures. Frederick Muriuki Muriithi
2022-02-08Give sorting functions more descriptive namesFrederick Muriuki Muriithi
2022-02-08Use multiprocessing to speed up computation...This commit refactors the code to make it possible to use multiprocessing to speed up the computation of the partial correlations. The major refactor is to move the `__compute_trait_info__` function to the top-level of the module, and provide to it all the other necessary context via the new args. Frederick Muriuki Muriithi
2022-02-08Remove unnecessary computation...In Python3 when slicing, seq[:min(some_val, len(seq))] == seq[:some_val] because Python3 will just return a copy of the entire sequence if `some_val` happens to be larger/greater than the length of the sequence. This commit removes the unnecessary call to `min()` Frederick Muriuki Muriithi
2022-02-08db: traits: Enable deletion of individual sample values...If a user replaces an individual value with an "x", delete that date entry from the respective table. Deletion here is the only option since by default the Nstrain, PublishData and PublishSE don't accept null values. Note that deleting all 3 values is equivalent to removing the sample from the CSV file. * gn3/db/traits.py (update_sample_data): If a value is "x", delete it from the respective table. BonfaceKilz
2022-02-08db: traits: Allow insertions of "0" in resp. sample values tables...When editing values from "x" to "0"(or any other value) when editing data, an "update" statement was being run; thereby no new value was being inserted. To the end user, modifying an "x" value to something else meant that no value was being inserted. This commit fixes that by doing an insert whenever a change from "x" to "0" is performed. * gn3/db/traits.py (update_sample_data): Add insert statements whenever an "update" statement returns a 0 row-count. BonfaceKilz
2022-02-08db: traits: Insert "count" instead of "error" in "NStrain" tableBonfaceKilz
2022-02-03db: Fetch correct sample dataBonfaceKilz
2022-02-02Remove PublishFreeze from retrieve_publish_trait_info query...The PublishFreeze table isn't necessary in phenotype queries, since PublishFreeze.Id = InbredSet.Id (for the purposes of identifying traits, at least) zsloan
2022-02-02Fix bug where sample values of 0 were being treated as False...In line 91 of gn3/db/traits.py, there was an if statement "if record[key] else 'x'" that was treating values of 0 as False, so I changed it to explicitly check that values aren't None zsloan
2022-02-02Fix retrieve_publish_trait_data query...The PublishFreeeze table is actually unnecessary for this query, since the group ID (inbred_set_id) should be passed in and that ID is in the PublishXRef table (so no neeed to join with PublishFreeze) zsloan
2022-02-02response object error fixAlexander Kabui
2022-02-02pep8 formattingAlexander Kabui
2022-02-02return 401 on request failAlexander Kabui
2022-02-02refactor code for invoking ctl scriptAlexander Kabui
2022-02-02pep8 formattingAlexander Kabui
2022-02-02new line fixAlexander Kabui
2022-02-02fix comprehension listAlexander Kabui
2022-01-22process ctl plot data imgAlexander Kabui
2022-01-22read stdout data;handle exceptionsAlexander Kabui
2022-01-22generate required json data for ctl apiAlexander Kabui
2022-01-22add endpoint for ctlAlexander Kabui
2022-01-22init file to call ctl scriptAlexander Kabui
2022-01-12Update return type. Remove duplicate import....The function is a generator function, since it uses a `yield` statement, and thus returns a generator object, that contains a tuple object. This fixes that. We also remove a duplicate import. Frederick Muriuki Muriithi
2022-01-12Indent code correctly...Indent the code correctly. Frederick Muriuki Muriithi
2022-01-12Deduplicate query to fetch data for 'Publish' traits...The queries run in the `get_trait_csv_sample_data` and `retrieve_publish_trait_data` functions in the `gn3.db.traits` module were mostly similar. This commit changes that, by making the `get_trait_csv_sample_data` function make use of the results from calling the `retrieve_publish_trait_data` function. Frederick Muriuki Muriithi
2022-01-10Check for path existence...Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi Frederick Muriuki Muriithi
2022-01-10Fix dataset retrieval query for `Geno` traits...Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi Frederick Muriuki Muriithi
2022-01-10Use the correct letter case for the keys...* Use the correct case for the keys inorder to retrieve the correct values. Frederick Muriuki Muriithi
2022-01-10Surround statement with parens for readabilityFrederick Muriuki Muriithi
2022-01-10Indicate that string is an f-string...* The string had the f-string syntax to format the values to be inserted into the string, but was missing the 'f' before the opening quotes to signify to python that this was an f-string. This commit fixes that. Frederick Muriuki Muriithi
2022-01-10Convert keys to string...* Some traits have a name composed of all numerals, which leads to the names being interpreted as numbers. This commit forces them to string to avoid subtle bugs where the code fails. Frederick Muriuki Muriithi
2022-01-10Remove all pairs with 'None' as the value...* Remove all key-value pairs whose value is None. Frederick Muriuki Muriithi
2022-01-10Fix error in query: Replace '=' with 'IN'Frederick Muriuki Muriithi
2022-01-10Replace unoptimised function with optimised one...Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Replace unoptimised function with one optimised to give better performance. The optimisation done here is to fetch multiple items/traits from the database per query, rather than the original form, which fetched a single item/trait from the database per query. Frederick Muriuki Muriithi
2022-01-10Convert NaN to None...Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi Comment: https://github.com/genenetwork/genenetwork3/pull/67#issuecomment-1000828159 * Convert NaN values to None to avoid possible bugs with the string replace method used before. Frederick Muriuki Muriithi
2022-01-10Add optimised entry for partial correlations...Issue: * Function `gn3.computations.partial_correlations_optimised.partial_correlations_entry` is a copy of the `gn3.computations.partial_correlation.partial_correlations_entry` function that is optimised for better performance. The optimised function is intended to replace the unoptimised one, but it is included in this commit for comparison purposes, and to maintain some historical context for doing it this way. Frederick Muriuki Muriithi