This project recreates the R-based RCy3 Cytoscape Automation library as a Python package.

Overview

py4cytoscape

This project recreates the R-based RCy3 Cytoscape Automation library as a Python package. The idea is to allow a Cytoscape workflow to be written in one language (R or Python) and translated to another language (Python or R) without having to learn different Cytoscape interfaces. The previous Cytoscape Python interface (Py2Cytoscape) has different features than the Cytoscape R library, and is therefore deprecated.

Additionally, this project attempts to maintain the same function signatures, return values, function implementation and module structure as the RCy3, thereby enabling smooth maintenance and evolution of both RCy3 and py4cytoscape.

This project uses PyCharm because of its excellent code management and debugging features.

Over time, py4cytoscape functionality should match RCy3 functionality. Once that occurs, novel Py2Cytoscape functions will be added to both as appropriate. The official Automation API definition met by both RCy3 and py4cytoscape is here. The API is versioned, and you can see which API version RCy3 or py4cytoscape implements by executing the cytoscape_version_info() or cytoscapeVersionInfo() function.

An overall scorecard comparing Py2Cytoscape, RCy3 and py4cytoscape can be found here. Pay close attention to columns E and F, which show how much of RCy3 is reflected in py4cytoscape.

Documentation

To understand the API structure and see calling examples, see the py4cytoscape documentation.

How to install and test

For an explanation of py4cytoscape installation and testing, see the INSTALL.rst file.

How to run a simple workflow

For a quick tutorial on how to build a workflow in Python and using py4cytoscape, see https://py4cytoscape.readthedocs.io/en/latest/tutorials/index.html. You can try py4cytoscape with a web browser only, without installing anything in your local environment.

How to configure logging

py4cytoscape logging is based on the Python logging package, which is based on the Java logging framework.

For an explanation of log configuration and use, see the LOGGING.rst file.

How to build and release

  1. Create a new release file in doc/release to match the version number (e.g., release_0.0.1.rst)
  2. Update the theme list in doc/release_log.rst and reference the release file you just created
  3. Update the version number in both py4cytoscape/_version.py and build.bat
  4. If any API changes were made, be sure to update the Automation API Definition and change the Automation API version in py4cytoscape/_version.py
  5. If any functions were added, be sure to add them to the appropriate .rst file in the References section of the document.
  6. Verify that the requirements.txt file in the docs directory correctly identifies all external dependencies.
  7. Check all sources (including documents and tests) into Github, merge them into the Master branch, and make Master the current branch
  8. Successfully execute all tests by using the tests/runalltests.bat file
  9. Execute liveness test (e.g., Sanity Test) on Google Colab
  10. Execute GangSu workflows (e.g., Workflow1 and Workflow2) on Google Colab
  11. Execute build.bat to check into PyPI ... be sure you updated the version number in build.bat first
  12. Again, successfully execute all tests by using the tests/runalltests.bat file, Gang Su workflows and the Sanity Test. (Change Sanity Test to fetch py4cytoscape from PyPI instead of Github.)
  13. Check any/all changes to the user manual and fix them now. (Note that the manual is automatically re-compiled when changes are made to the Master branch in Github.)
  14. Create a new Github tag (in the Releases section on the far right of the Github GUI)
  15. Start a branch to contain the next round of py4cytoscape changes.

Test Suites

py4cytoscape is supported by extensive test suites that benefit py4cytoscape users as follows:

  • Verify that all API functionality operates as documented
  • Verify that changes to py4cytoscape don't break working functionality

These test suites are not intended to verify Cytoscape or CyREST operation, though they may have that side effect. Their main purpose is to verify that py4cytoscape functions either properly call CyREST or pre/post-process CyREST data. So, they test that each function parameter has an intended affect in the context of one or more CyREST calls. The payoff is confidence in py4cytoscape functions over both the immediate and long term.

Single tests or groups of tests can be executed from the command line per the py4cytoscape Installation instructions.

Surprising (but true!) general rules of thumb:

  • Creating a test for a py4cytoscape function may take between 2x and 5x the effort needed to create the function itself. Combined with the effort to document py4cytoscape functions, the overall time needed to create the function itself may be only 30% of the total effort.

  • Unless code is tested, it can reasonably assumed to be buggy ... either in its definition or execution. Untested code is essentially buggy code.

  • For a function or capability to be useful to a user, it must be documented in a place where a user can find it. In addition to testing functions, there must be appropriate function documentation (in the function's header and in the .rst files in the docs directory). Test cases are a rich source for documentation and examples.

Test Suite Construction

The py4cytoscape test suite is created under the rules of the Python unittest framework, and exists in the tests directory. Just as each py4cytoscape Python module contains a collection of py4cytoscape functions, there are corresponding test case files that contain tests for individual functions. For example, the networks module (networks.py) contains over 20 functions; the corresponding test case is tests_networks.py, and it contains individual tests that validate each networks function.

An individual test creates a testing environment and then verifies that each variant of a specific function produces an expected result (i.e., some change in the network, its properties, or the file system). For example, the test_networks.test_get_network_list test loads the galFiltered network and calls networks.get_network_list with various combinations of parameters.

At heart, an individual test:

  • Captures the state (pre-state) before the function is executed
  • Executes the function with a particular combination of parameters and may return a value
  • Verifies that the value is what is expected
  • Captures the state (post-state) after the function is executed
  • Verifies that the post-state is different than the pre-state, and is the state that's expected

Note that these tests also verify that functions return expected results (e.g., exceptions) when incorrect parameters are passed.

Test Suite Usage

The test suite can be used in the following circumstances:

  • During function development ... especially when Test Driven Development is practiced
  • To verify that changes to a function don't break existing functionality
  • To verify that new versions of Cytoscape don't cause functions to return incorrect results

To support this, any changes to a function must be followed up with new tests as appropriate. For example, changes in the networks.get_network_list function should be reflected by appropriate tests added/changed/removed in the test_networks.test_get_network_list function.

License

py4cytoscape is released under the MIT License (see LICENSE.rst file):

    Copyright (c) 2018-2020 The Cytoscape Consortium
    Barry Demchak 
   

   
Comments
  • p4c.layout_network() ++

    p4c.layout_network() ++

    Hello! I can't figure out how (or if it is possible) to use use the Y files organic layout in my script as this is not one of the options for p4c.layout_network. Furthermore, does p4c offer a way of selecting isolated clusters in the network and annotating them? Any help with this is very much appreciated 🙏 Lastly, p4c would be even more amazing (love it already) if a function for creating legends from the mappings (that look nicer and is a bit more customisable than the ones generated by the legend creator app) was created! Thanks for your great work, makes life easier for simple biochemists like me. Best regards, Eirin

    opened by eirinland 15
  • Added ability to create a network view.

    Added ability to create a network view.

    Cytoscape doesn't automatically create views for large networks, and this code calls the REST API to create a view. The code as-is does not check if a view already exists; the user ought to be intelligent enough to do this themselves. See cytoscape/py4cytoscape#71 for an example of a large network.

    opened by nilsoberg2 13
  • get MCODE cluster network images

    get MCODE cluster network images

    Hi,

    Firstly, Thanks for code tutorials.

    Now I am able to run Mcode and to create clusters. But I have some problems.

    1. I want to create cluster Images but when I making a loop some images are missing. I think cytoscape working for other job and because of that it doesn't create all images. To solve this problem I have added timeout end of the loop but its making my script slowly. Is there any solution for this? If I would get the cytoscape job status then I can create new job.

    2. Is there any other way to get all cluster network Images and tables at one time? I did in loop, is this the correct way?

    I added my code.

    Thanks

    network_name = uuid.uuid4().hex
    network_suid = py4.networks.create_network_from_data_frames(
    		edges=results, 
    		title= network_name,
    		collection= network_name + '_collection'
    )
    
    analyze = py4.commands.commands_post('analyzer/analyze')
    
    mcode = py4.commands.commands_post('mcode cluster degreeCutoff=2 fluff=false fluffNodeDensityCutoff=0.1 haircut=true includeLoops=false kCore=2 maxDepthFromStart=100 network=current nodeScoreCutoff=0.2 scope=NETWORK')
    
    big_clusters = [i for i in range(len(mcode['clusters'])) if len(mcode['clusters'][i]['nodes']) > 10]
    
    clusters = []
    for i in range(len(big_clusters)):
    
    	view_id = py4.commands.commands_post('mcode view id=1 rank=' + str(i+1) )
    
    	clusters.append( py4.tables.get_table_columns() \
    				  .drop(columns=['id','name','selected','MCODE_Cluster','SUID']) \
    				  .sort_values(by=['MCODE_Score'], ascending=False) \
    				 .reset_index(drop=True) )
    	
    	py4.network_views.get_network_view_suid()
    	img_name = uuid.uuid4().hex
    	py4.export_image(str(img_name))
    	Image(img_name+'.png')
    	sleep(3)
    
    opened by tyasird 12
  • Reverse color palettes?

    Reverse color palettes?

    When using palette_color_brewer_* palettes like d_RdBu for example, the mapping is going to wrong 99% of the time, i.e., red for negative values and blue for positive. A couple suggestions:

    1. reverse these palettes by default
    2. offer a reverse Boolean parameter that gets passed down to _palette_color_brewer
    enhancement 
    opened by AlexanderPico 10
  • py4cytoscape very slow to tranfert a network between a notebook and cytoscape.

    py4cytoscape very slow to tranfert a network between a notebook and cytoscape.

    Hi,

    I have tested py4cystoscape and compare to py2cytoscape, it is very slow to transfert a network between a notebook and cytoscape. Is it normal ?

    Sincerely.

    Pascal

    opened by pkrezel 8
  • Using basiCO to Run Reaction Kinetics Simulations on Py4cytoscape

    Using basiCO to Run Reaction Kinetics Simulations on Py4cytoscape

    Hello Barry, @bdemchak

    I am currently doing my Ph.D. in Computational Science at the University of Cape Town. My project is about developing systems biology tools for the modelling, simulation, and analysis of glycosylation networks found in Muc-1 type breast cancer tumours.

    Unlike many system biology tools on Cytoscape, I want to approach the network from an enzyme kinetics angle because glycosylation networks involve a lot of glycosyltransferases that determine the final structure of glycan chains.

    I initially had a look at COPASI, a software application for simulation and analysis of biochemical networks, but found that it lacked features, such as automatic import and visualization of pathways from KEGG

    My goal is to use Py4Cytoscape to call COPASI to implement mathematical modelling and time-course simulations on networks imported from KEGG.

    I want to somehow create a bridge between basiCO, a simplified python interface for COPASI, and py4cytoscape.

    This is where I got stuck.

    One idea I had was to create a wrapper function that would take an imported network and do the following:

    • pass its nodes as reacting species
    • pass the edges as reactions with defined rate laws
    • create an ODE model of the network
    • Run simulations using basiCO
    • Perturb the model by introducing enzyme inhibitors to it

    Do you think writing a wrapper function could help to run basiCO on py4cytoscape? What other suggestions can you come up with?

    I hope I made my problem clear. Let me know if you have any more questions and if you want to discuss this further.

    Here is the detailed documentation of basiCO if you are interested: https://basico.readthedocs.io/en/latest/

    All the best,

    Emre

    opened by kyxhik 7
  • In the Verify Cytoscape connection code fragment made file path platform agnostic

    In the Verify Cytoscape connection code fragment made file path platform agnostic

    Hi, This pull request has a minor change in the INSTALL.rst documentation.

    In Verify Cytoscape connection code framgnet, I replaced the hardcoded path tests\data\galfiltered.sif' with anos.path.joincall cause` fails on a MacOS.

    The os.path.join "should" (please check on windows) add the correct delimiter for the platform it is running on.

    opened by coleslaw481 7
  • Customize the path of the detailed log file

    Customize the path of the detailed log file

    Is it possible the change where the detailed log file is written? If I found the right place in the source https://github.com/cytoscape/py4cytoscape/blob/cc3186c722f2789460b90547105d7ffa87d0460f/py4cytoscape/py4cytoscape_logger_settings.py#L34-L35

    it looks like this is hard-coded and cannot be modified.

    opened by agitter 6
  • get_edge_info does not accept list of SUIDs of edges

    get_edge_info does not accept list of SUIDs of edges

    The document says

    get_edge_info(edges, network=None, base_url='http://127.0.0.1:1234/v1')[source]
    Returns source, target and edge table row values.
    
    Parameters
    edges (list) – list of SUIDs or names of edges, i.e., values in the “name” column. Can also input single edge.
    

    But actually it accepts only list of names of edges.

    bug 
    opened by kozo2 6
  • runsanitytests.bat: not able to load test data

    runsanitytests.bat: not able to load test data

    py4cytoscape:~/py4cytoscape/tests$ source runsanitytests.bat 
    Into test_create_igraph_from_network()
    Out of 'test_create_igraph_from_network'
    .Into test_create_network_from_data_frames()
    Out of 'test_create_network_from_data_frames'
    .Into test_create_network_from_igraph()
    Out of 'test_create_network_from_igraph'
    .Into test_create_network_from_networkx()
    /home/py4cy/.software_container/.python/3.9.0/lib/python3.9/site-packages/pandas-1.1.3-py3.9-linux-x86_64.egg/pandas/core/frame.py:1485: FutureWarning: Using short name for 'orient' is deprecated. Only the options: ('dict', list, 'series', 'split', 'records', 'index') will be used in a future version. Use one of the above to silence this warning.
      warnings.warn(
    Out of 'test_create_network_from_networkx'
    .Into test_create_networkx_from_network()
    /home/py4cy/.software_container/.python/3.9.0/lib/python3.9/site-packages/pandas-1.1.3-py3.9-linux-x86_64.egg/pandas/core/frame.py:1485: FutureWarning: Using short name for 'orient' is deprecated. Only the options: ('dict', list, 'series', 'split', 'records', 'index') will be used in a future version. Use one of the above to silence this warning.
      warnings.warn(
    Out of 'test_create_networkx_from_network'
    .Into test_import_network_from_file()
    In commands_post(): File 'galFiltered.sif' not found:
    'test_import_network_from_file' exception CyError("In commands_post(): File 'galFiltered.sif' not found:")
    EInto test_open_session()
    In commands_post(): File 'Affinity Purification.cys' not found:
    'test_open_session' exception CyError("In commands_post(): File 'Affinity Purification.cys' not found:")
    E
    ======================================================================
    ERROR: test_import_network_from_file (test_sanity.SanityTests)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/home/py4cy/py4cytoscape/py4cytoscape/commands.py", line 386, in commands_post
        r.raise_for_status()
      File "/home/py4cy/.software_container/.python/3.9.0/lib/python3.9/site-packages/requests-2.24.0-py3.9.egg/requests/models.py", line 941, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http://192.168.43.99:1234/v1/commands/network/load%20file
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/py4cy/py4cytoscape/test_utils/helpers.py", line 76, in wrapper_entry_exit
        value = func(*args, **kwargs)
      File "/home/py4cy/py4cytoscape/tests/test_sanity.py", line 89, in test_import_network_from_file
        res = import_network_from_file('data/galFiltered.sif')
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 133, in wrapper_log
        log_exception(func, e)
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 130, in wrapper_log
        value = func(*args, **kwargs) # Call function being logged
      File "/home/py4cy/py4cytoscape/py4cytoscape/networks.py", line 1120, in import_network_from_file
        res = commands.commands_post(f'network load file file="{file}"', base_url=base_url)
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 133, in wrapper_log
        log_exception(func, e)
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 130, in wrapper_log
        value = func(*args, **kwargs) # Call function being logged
      File "/home/py4cy/py4cytoscape/py4cytoscape/commands.py", line 392, in commands_post
        _handle_error(e)
      File "/home/py4cy/py4cytoscape/py4cytoscape/commands.py", line 678, in _handle_error
        raise e
    py4cytoscape.exceptions.CyError: In commands_post(): File 'galFiltered.sif' not found:
    
    ======================================================================
    ERROR: test_open_session (test_sanity.SanityTests)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/home/py4cy/py4cytoscape/py4cytoscape/commands.py", line 386, in commands_post
        r.raise_for_status()
      File "/home/py4cy/.software_container/.python/3.9.0/lib/python3.9/site-packages/requests-2.24.0-py3.9.egg/requests/models.py", line 941, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    requests.exceptions.HTTPError: 500 Server Error: Internal Server Error for url: http://192.168.43.99:1234/v1/commands/session/open
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/py4cy/py4cytoscape/test_utils/helpers.py", line 76, in wrapper_entry_exit
        value = func(*args, **kwargs)
      File "/home/py4cy/py4cytoscape/tests/test_sanity.py", line 46, in test_open_session
        self.assertDictEqual(open_session('data/Affinity Purification.cys'), {})
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 133, in wrapper_log
        log_exception(func, e)
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 130, in wrapper_log
        value = func(*args, **kwargs) # Call function being logged
      File "/home/py4cy/py4cytoscape/py4cytoscape/session.py", line 114, in open_session
        return commands.commands_post(f'session open {type}="{file_location}"', base_url=base_url)
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 133, in wrapper_log
        log_exception(func, e)
      File "/home/py4cy/py4cytoscape/py4cytoscape/py4cytoscape_logger.py", line 130, in wrapper_log
        value = func(*args, **kwargs) # Call function being logged
      File "/home/py4cy/py4cytoscape/py4cytoscape/commands.py", line 392, in commands_post
        _handle_error(e)
      File "/home/py4cy/py4cytoscape/py4cytoscape/commands.py", line 678, in _handle_error
        raise e
    py4cytoscape.exceptions.CyError: In commands_post(): File 'Affinity Purification.cys' not found:
    
    ----------------------------------------------------------------------
    Ran 7 tests in 40.096s
    
    FAILED (errors=2)
    

    Cytoscape 3.8.1 Java 11.0.6 by AdoptOpenJDK Mac OS X 10.15.7 - x86_64

    Reproducible with the Docker test env.

    bug 
    opened by jorgeboucas 6
  • Bottleneck in `load_table_data`

    Bottleneck in `load_table_data`

    Hello I am working on a very large network and I noticed a serious bottleneck during runtime when loading data onto the edge table.

    Here is some example code I ran, here I was fetching the alignment_score from the edge table, taking the exponential and adding the column back in as exp_score. On a table size of 200-400k the runtime is not too bad (maybe 5-15 min) but beyond 1m the runtime really slowed down, on this example for a table size of 1.35 m my code was running for 158 min on a jupyter notebook before I gave up and interrupted the kernel.

    edge_df = p4c.get_table_columns(table = 'edge')
    
    exp_scores =10 ** (-1 * edge_df['alignment_score']).to_frame()
    exp_scores['SUID'] = edge_df['SUID']
    exp_scores = exp_scores.rename(columns= {'alignment_score' : 'exp_score'})
    p4c.load_table_data(exp_scores,table = 'edge',table_key_column='SUID',data_key_column= 'SUID')
    

    The terminal halted on this filter and I suspected on a table of 1m that it stayed over 2h just trying to filter.

    https://github.com/cytoscape/py4cytoscape/blob/cc3186c722f2789460b90547105d7ffa87d0460f/py4cytoscape/tables.py#L461-L462

    However, considering that the filter essentially compares two Series wouldn't be faster to use pd.Series.isin(values) instead? I haven't run extensive runtime tests but running exp_scores['SUID'].isin(exp_scores.reset_index()['SUID']).value_counts() retuned in less than a second for the same table.

    opened by ConsueTerra 5
  • get_table_columns does not get all columns

    get_table_columns does not get all columns

    I tried p4c.get_table_columns(table='node', network=1162) for the second netowrk in this cys file. https://www.dropbox.com/s/r9s09p4p54naw7z/test.cys?dl=0 But it didn't get the all columns It got only the first 10 columns. Please let me know if you have any ideas about this. I'm using Python 3.10.8 + py4cytoscape 1.6.0 on Windows11.

    opened by kozo2 8
  • FutureWarning: in py4cytoscape\tables.py:502:

    FutureWarning: in py4cytoscape\tables.py:502:

    c:\Users\kozo2\mambaforge\lib\site-packages\py4cytoscape-1.6.0-py3.10.egg\py4cytoscape\tables.py:502: FutureWarning: iteritems is deprecated and will be removed in a future version. Use .items instead.
    

    I got this Warning in py4cytoscape 1.6.0 + Python 3.10.8.

    If using .items is not too early, I will send the PR. Let me know if you have any thoughts.

    opened by kozo2 1
  • Remove n^2 loops

    Remove n^2 loops

    There are a number of functions that contain checks for a node or edge list being contained within a network. For very large networks and very large lists, this becomes an n^2 operation. I recently verified that for a million node network, the check in load_table_data() took longer than 2 days (before I gave up).

    The general pattern is to create a comprehension and then test whether True or False is in the comprehension.

    For example:

        test_present = [x in all_names   for x in node_suids]
        if not False in test_present:
            return node_suids
    

    These can be found in:

        py4cytoscape_utils:node_suid_to_node_name()
        py4cytoscape_utils:edge_suid_to_edge_name()
        py4cytoscape_utils:_item_to_suid()
    
    opened by bdemchak 0
  • Rendered image appears as a single dot for very large networks

    Rendered image appears as a single dot for very large networks

    Sometimes nodes in very large clusters are stacked on top of each other after layout, when using the non-OpenCL version of prefuse force directed layout. The OpenCL version works well. This occurs in Cytoscape 3.8 and 3.10 (snapshot 0714).

    This occurs in Cytoscape as well as through the CyREST API. The output in the terminal shows there is a stack overflow:

    15:24:24.742 WARN  [qtp1898635594-610] Network larger than view threshold
    Network factory creation finished in 171048 msec.
    java.lang.StackOverflowError
    		at prefuse.util.force.NBodyForce.calcMass(NBodyForce.java:289)
    		at prefuse.util.force.NBodyForce.calcMass(NBodyForce.java:289)
    		at prefuse.util.force.NBodyForce.calcMass(NBodyForce.java:289)
    ....
    		at prefuse.util.force.NBodyForce.forceHelper(NBodyForce.java:324)
    		at prefuse.util.force.NBodyForce.forceHelper(NBodyForce.java:349)
    		at prefuse.util.force.NBodyForce.forceHelper(NBodyForce.java:349)
    ....
    

    An example of this type of file is here:

    https://efi.igb.illinois.edu/databases/very_large_ssn.zip

    370 MB zip file, 4.6 GB uncompressed.

    First referenced in #81.

    ssn_1

    opened by nilsoberg 4
  • Nodes not colored when using large network

    Nodes not colored when using large network

    When using py4cytoscape with large networks, images are generated but not colored like smaller networks are. (The network files contain the node.fillColor attribute which is what Cytoscape uses to color the nodes by default.) This occurs in 3.8 and 3.10 (latest snapshot tested 0714).

    The files that are attached are used for debugging. py4c_test.py uses py4cytoscape and can be used for testing using the CyREST API.

    cytoscape-3.10-01714-rest-output.txt cytoscape-3.10-0714-terminal-log.txt cytoscape-3.10-framework-cytoscape.log ssn_3 10

    cytoscape-3.8-rest-output.txt cytoscape-3.8-terminal-log.txt cytoscape-3.8-framework-cytoscape.log ssn_3 8

    py4c_test.py.txt

    large_ssn.zip

    First reported in #81

    opened by nilsoberg 2
Releases(1.5.0)
  • 1.5.0(Jun 28, 2022)

  • 1.4.0(Jun 28, 2022)

    • Supported Metascape migration from py2cytoscape to py4cytoscape
    • Added names= to get_network_list
    • Added create_cytoscapejs_from_network and create_network_from_cytoscapejs
    • Added get_visual_style_JSON
    • Added delete_all_visual_styles
    • Added sandbox support when Cytoscape is at URL different than 127.0.0.1
    • Fixed bugs for calling Cytoscape at URL different than 127.0.0.1
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(May 26, 2022)

    • Improved cloud file download
    • Improved support for local Jupyter Notebook execution
    • Demonstration of enrichment functionality
    • Rationalized tutorials
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(Apr 30, 2022)

    • Addition of annotation functions (per new Cytoscape features)
    • Changed default for sandboxing when running Notebook on local Workstation
    • Add new functions: create_view, select_all
    • Sped up select_all_nodes, select_all_edges
    Source code(tar.gz)
    Source code(zip)
  • 0.0.11(Oct 12, 2021)

    • Updated documentation and tutorials
      
    • Made set_*_property_bypass more resilient to null node/edge lists
      
    • For Notebook support, improved startup code and added notebook_show_image(), notebook_export_show_image() functions
      
    • For color generators, added reverse= parameter and made divergent palettes automatically reversed
      
    • Fixed filter and style bypass functions to not crash when there are no selected nodes
      
    Source code(tar.gz)
    Source code(zip)
  • 0.0.9(Jul 26, 2021)

    • Updated documentation and tutorials
    • Reworked iGraph support to track RCy3 implementation
    • Added iGraph support for Graph, DiGraph, MultiGraph, MultiDiGraph
    • Updated node/edge-to-suid functions to allow detection of multiple copies of a node/edge
    • Enabled delete_duplicate_edges to ignore edge direction
    • Added support for discrete and continuous value generators (as gen* functions in new style_auto_mappers module)
    Source code(tar.gz)
    Source code(zip)
  • 0.0.8(Mar 31, 2021)

    • Added parameters in CyNDEX functions to support subdomains
    • Added apply= parameter in filter definition functions to support Cytoscape v3.9.0 separating apply from definition
    • Added overwrite_file parameter to export functions
    • Added Sandbox direct download from URL
    • Added functions for import network from tabular file & get current style, etc
    • Fixes that allow commands_help to work
    Source code(tar.gz)
    Source code(zip)
  • 0.0.7(Jan 9, 2021)

    • Compatibility of node, edge and group parameter with RCy3 formats
    • Improved verify_supported_versions parsing for Cytoscape 3.10 and beyond
    Source code(tar.gz)
    Source code(zip)
  • 0.0.6(Oct 30, 2020)

    • Improved sandboxing and Jupyter Notebook documentation
    • Shortened execution delays
    • Docker support
    • More rational default directory for standalone Python execution
    Source code(tar.gz)
    Source code(zip)
  • 0.0.5(Oct 23, 2020)

    • Referenced Concepts:Sandboxing from documentation for sandbox functions
    • Updated installation and logging documentation
    • Updated test to detect Colab shell
    Source code(tar.gz)
    Source code(zip)
  • 0.0.4(Oct 6, 2020)

    Includes everything in 0.0.3 (defective release):

    • Conform to Cytoscape Automation API Definition <https://docs.google.com/spreadsheets/d/1XLWsKxGLqcBWLzoW2y6HyAUU2jMXaEaWw7QLn3NE5nY/edit?usp=sharing>_
    • Change CyError logger to write exceptions to stderr
    • Add Sandboxing interface and functions
    • Add merge_network() and analyze_network()
    • Add Jupyter-bridge, Cytoscape Automation API, py4cytoscape versions to cytoscape_version_info
    • Add support for Jupyter-bridge
    • Add Concepts section to documentation
    Source code(tar.gz)
    Source code(zip)
reproduces experiments from

Installation To enable importing of modules, from the parent directory execute: pip install -e . To install requirements: python -m pip install requir

Meta Research 15 Aug 11, 2022
Coffeematcher is a python library to randomly match participants for coffee meetings.

coffeematcher coffeematcher is a python library to randomly match participants for coffee meetings. Installation Clone the repository: git clone https

Thomas Wesselink 3 May 06, 2022
用于红队成员初步快速攻击的全自动化工具。

关于 Author:m0sway Mail:[email protected] Github:https://www.github.com/m0sway/Jud JuD是

m0sway 46 Jul 21, 2022
A Python program that generates a maze that solves itself using DFS

Maze Generator And Solver Program Purpose: Generates a maze that then solves itself Language: Python and Pygame Algorithm: Randomized DFS / Floodfill

Joshua Liu 1 Jul 25, 2022
Cool Bioinformatics Scripts

Cool Bioinformatics Scripts qqplot You can use this script in two ways read tons of millions of P values from stdin # python zcat pval.txt.gz | qqplo

8 Oct 30, 2022
Easily Generate Revolut Business Cards

RevBusinessCardGen Easily Generate Revolut Business Cards Prerequisites Before you begin, ensure you have met the following requirements: You have ins

Younes™ 35 Dec 14, 2022
Wordless - the #1 app for helping you cheat at Wordle, which is sure to make you popular at parties

Wordless Wordless is the #1 app for helping you cheat at Wordle, which is sure t

James Kirk 7 Feb 04, 2022
Cloud-native SIEM for intelligent security analytics for your entire enterprise.

Microsoft Sentinel Welcome to the Microsoft Sentinel repository! This repository contains out of the box detections, exploration queries, hunting quer

Microsoft Azure 2.9k Jan 02, 2023
Old versions of Deadcord that are problematic or used as reference.

⚠️ Unmaintained and broken. We have decided to release the old version of Deadcord before our v1.0 rewrite. (which will be equiped with much more feat

Galaxzy 1 Feb 10, 2022
validation for pre-commit.ci configuration

pre-commit-ci-config validation for pre-commit.ci configuration installation pip install pre-commit-ci-config api pre_commit_ci_config.SCHEMA a cfgv s

pre-commit.ci 17 Jul 11, 2022
Dockernized ZeroTierOne controller with zero-ui web interface.

docker-zerotier-controller Dockernized ZeroTierOne controller with zero-ui web interface. 中文讨论 Customize ZeroTierOne's controller planets Modify patch

sbilly 209 Jan 04, 2023
It's an .exe file that can notify your chia profit and warning message every time automatically.

chia-Notify-with-Line 警示程式 It's an .exe file that can notify your chia profit and warning message every time automatically. 這是我自行設計的小程式,有轉成.exe檔了,可以在沒

You,Yu 1 Oct 28, 2021
This is the key combo trainer for League of Legends and Dota 2 players.

This is the key combo trainer for League of Legends and Dota 2 players. Place the mouse cursor on the blue point and press the key combo from the upper-left side of the screen.

Ilya Shpigor 1 Jan 31, 2022
This tool don't used illegal ativity

ETHICALTOOL This tool for only educational purposes don't used illegal ativity @onlinehacking this tool for pkg update && pkg upgrade && pkg install g

Mrkarthick 4 Dec 23, 2021
Using Python to parse through email logs received through several backup systems.

outlook-automated-backup-control Backup monitoring on a mailbox: In this mailbox there will be backup logs. The identification will based on the follo

Connor 2 Sep 28, 2022
LinkML based SPARQL template library and execution engine

sparqlfun LinkML based SPARQL template library and execution engine modularized core library of SPARQL templates generic templates using common vocabs

Linked data Modeling Language 6 Oct 10, 2022
WriteAIr is a website which allows users to stream their writing.

WriteAIr is a website which allows users to stream their writing. It uses HSV masking to detect a pen which the user writes with. Plus, users can select a wide range of options through hand gestures!

Atharva Patil 1 Nov 01, 2021
Python project setup, updater, and launcher

pyLaunch Python project setup, updater, and launcher Purpose: Increase project productivity and provide features easily. Once installed as a git submo

DAAV, LLC 1 Jan 07, 2022
This repository contains the exercices for the robotics class at Supaero, 2022.

Supaero robotics, 2022 This repository contains the exercices for the robotics class at Supaero, 2022. The exercices are organized by notebook. Each n

Gepetto team, LAAS-CNRS 5 Aug 01, 2022
BasicVSR++ function for VapourSynth

BasicVSR++ BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment Ported from https://github.com/open-mmlab/mmediting De

Holy Wu 34 Nov 28, 2022