diff --git a/directlfq/__init__.py b/directlfq/__init__.py index 37bae43..b52eb5d 100644 --- a/directlfq/__init__.py +++ b/directlfq/__init__.py @@ -2,7 +2,7 @@ __project__ = "directlfq" -__version__ = "0.2.20" +__version__ = "0.3.0" __license__ = "Apache" __description__ = "An open-source Python package of the AlphaPept ecosystem" __author__ = "Mann Labs" diff --git a/directlfq/dashboard_parts.py b/directlfq/dashboard_parts.py index 5264b95..8357268 100644 --- a/directlfq/dashboard_parts.py +++ b/directlfq/dashboard_parts.py @@ -1,10 +1,6 @@ import os -import re -import itertools - -from click import option -import directlfq.gui_textfields as gui_textfields import panel as pn +import directlfq.gui_textfields as gui_textfields import directlfq.lfq_manager as lfq_manager @@ -24,7 +20,8 @@ def trigger_dependancy(self): class HeaderWidget(object): - """This class creates a layout for the header of the dashboard with the name of the tool and all links to the MPI website, the MPI Mann Lab page and the GitHub repo. + """ + This class creates a layout for the header of the dashboard with the name of the tool and all links to the MPI website, the MPI Mann Lab page, and the GitHub repo. Parameters ---------- @@ -36,9 +33,9 @@ class HeaderWidget(object): header_title : pn.pane.Markdown A Panel Markdown pane that returns the title of the tool. mpi_biochem_logo : pn.pane.PNG - A Panel PNG pane that embeds a png image file of the MPI Biochemisty logo and makes the image clickable with the link to the official website. + A Panel PNG pane that embeds a png image file of the MPI Biochemistry logo and makes the image clickable with the link to the official website. mpi_logo : pn.pane.JPG - A Panel JPG pane that embeds a jpg image file of the MPI Biochemisty logo and makes the image clickable with the link to the official website. + A Panel JPG pane that embeds a jpg image file of the MPI Biochemistry logo and makes the image clickable with the link to the official website. github_logo : pn.pane.PNG A Panel PNG pane that embeds a png image file of the GitHub logo and makes the image clickable with the link to the GitHub repository of the project. @@ -53,6 +50,7 @@ def __init__( self.header_title = pn.pane.Markdown( f'# {title}', sizing_mode='stretch_width', + align='center', # Center the title ) self.biochem_logo_path = os.path.join( img_folder_path, @@ -72,7 +70,8 @@ def __init__( link_url='https://www.biochem.mpg.de/mann', width=60, height=60, - align='start' + align='start', + margin=(0, 10, 0, 0), ) self.mpi_logo = pn.pane.JPG( self.mpi_logo_path, @@ -81,13 +80,15 @@ def __init__( embed=True, width=62, margin=(5, 0, 0, 5), - css_classes=['opt'] + css_classes=['opt'], + align='start', ) self.github_logo = pn.pane.PNG( self.github_logo_path, link_url=github_url, height=70, - align='end' + align='end', + margin=(0, 0, 0, 10), ) def create(self): @@ -97,7 +98,8 @@ def create(self): self.header_title, self.github_logo, height=73, - sizing_mode='stretch_width' + sizing_mode='stretch_width', + align='center', ) @@ -109,27 +111,22 @@ def __init__( ): self.project_description = pn.pane.Markdown( description, - margin=(10, 0, 10, 0), + margin=(10, 15, 10, 15), css_classes=['main-part'], - align='start' + sizing_mode='stretch_width', ) def create(self): LAYOUT = pn.Row( self.project_description, - pn.layout.HSpacer(width=500), - # self.manual, - background='#eaeaea', align='center', sizing_mode='stretch_width', - height=190, - margin=(10, 8, 10, 8), - css_classes=['background'] + margin=(10, 15, 10, 15), + #css_classes=['background'] ) return LAYOUT - class RunPipeline(BaseWidget): def __init__(self): @@ -138,67 +135,110 @@ def __init__(self): self.path_analysis_file = pn.widgets.TextInput( name='Specify an analysis file (see detailed specifications below!):', placeholder='Enter the whole path to the AP | MQ | Spectronaut | DIA-NN | Fragpipe outputs according to the specifications below', - width=900, sizing_mode='stretch_width', margin=(5, 15, 0, 15) ) - - self.path_protein_groups_file = pn.widgets.TextInput( name='(optional) If you are using MaxQuant evidence.txt or peptides.txt files, you can add the link to the corresponding proteinGroups.txt file (will improve peptide-to-protein mapping)', placeholder='(optional) Enter the whole path to the MaxQuant proteinGroups.txt file', - value = '', - width=900, + value='', sizing_mode='stretch_width', margin=(15, 15, 0, 15) ) - ## optional files - - self.additional_headers_title = pn.pane.Markdown('* Add the names of columns that you want to keep in the directLFQ output file, separated by semicolons. Note that some basic additional columns such as gene names are always added to the output table by value.\nWARNING: Take care that columns you add are not ambigous. For example, adding the peptide sequence column will not work, because there are multiple peptide sequences per protein.') + # Optional files + self.additional_headers_title = pn.pane.Markdown( + '* Add the names of columns that you want to keep in the directLFQ output file, separated by semicolons. Note that some basic additional columns such as gene names are always added to the output table by value.\nWARNING: Take care that columns you add are not ambiguous. For example, adding the peptide sequence column will not work, because there are multiple peptide sequences per protein.', + sizing_mode='stretch_width', + margin=(5, 15, 0, 15) + ) self.additional_headers = pn.widgets.TextInput( name='', placeholder='(optional) Enter the names of columns that you want to keep', - value = '', - #width=900, - #sizing_mode='stretch_width', - #margin=(15, 15, 0, 15) + sizing_mode='stretch_width', + margin=(0, 15, 0, 15) ) - self.protein_subset_for_normalization_title = pn.pane.Markdown('* Specify a list of proteins (no header, seperated by linebreaks) that you want to use for normalization. This could for example be a list of housekeeping proteins:') + self.protein_subset_for_normalization_title = pn.pane.Markdown( + '* Specify a list of proteins (no header, separated by linebreaks) that you want to use for normalization. This could, for example, be a list of housekeeping proteins:', + sizing_mode='stretch_width', + margin=(5, 15, 0, 15) + ) self.protein_subset_for_normalization_file = pn.widgets.TextInput( name='', - value = None, + value='', placeholder='(optional) Enter the whole path to the protein list file', - width=900, sizing_mode='stretch_width', - margin=(15, 15, 0, 15) + margin=(0, 15, 0, 15) ) - self.yaml_filt_dict_title = pn.pane.Markdown('* In case you want to define specific filters in addition to the standard filters, you can add a yaml file where the filters are defined (see GitHub docs).') + self.yaml_filt_dict_title = pn.pane.Markdown( + '* In case you want to define specific filters in addition to the standard filters, you can add a yaml file where the filters are defined (see GitHub docs).', + sizing_mode='stretch_width', + margin=(5, 15, 0, 15) + ) self.yaml_filt_dict_path = pn.widgets.TextInput( name='', - value = None, + value='', placeholder='(optional) Enter the whole path to the yaml file with the filters', - width=900, sizing_mode='stretch_width', - margin=(15, 15, 0, 15) + margin=(0, 15, 0, 15) ) - self.dropdown_menu_for_input_type_title = pn.pane.Markdown('* Specify the type of the input table you want to use from the dropdown menu. Applies only if you want to use non-default settings, for example if you want to use summarized precursor intensities instead of fragment ion intensities for DIA data:') - self.dropdown_menu_for_input_type = pn.widgets.Select(name = "", - options = {'detect automatically' : None, 'Alphapept peptides.csv' : 'alphapept_peptides', 'MaxQuant evidence.txt' : "maxquant_evidence", 'MaxQuant peptides.txt' : 'maxquant_peptides', - 'Spectronaut fragment level' :'spectronaut_fragion_isotopes', 'Spectronaut precursor level' : 'spectronaut_precursor', 'DIANN fragment level': 'diann_fragion_isotopes', 'DIANN fragment level raw':'diann_fragion_isotopes_raw' - ,'DIANN precursor level' : 'diann_precursors', 'DIANN precusor level MS1' : 'diann_precursors_ms1', 'DIANN precursor MS1 and MS2' : 'diann_precursor_ms1_and_ms2'}) - - self.num_nonan_vals_title = pn.pane.Markdown('* Specify the minimum number of non-nan ion intensities required to derive a protein intensity. The higher this number, the more reliable the protein quantification at the cost of more missing values:') - self.num_nonan_vals = pn.widgets.IntInput(name='', value=1, step=1, start=0, end=1000) - - self.num_cores_title = pn.pane.Markdown('* Specify the number of cores to use (default of 0 means multiprocessing):') - self.num_cores_vals = pn.widgets.IntInput(name='', value=0, step=1, start=0, end=1000) + self.dropdown_menu_for_input_type_title = pn.pane.Markdown( + '* Specify the type of the input table you want to use from the dropdown menu. Applies only if you want to use non-default settings, for example if you want to use summarized precursor intensities instead of fragment ion intensities for DIA data:', + sizing_mode='stretch_width', + margin=(5, 15, 0, 15) + ) + self.dropdown_menu_for_input_type = pn.widgets.Select( + name='', + options={ + 'detect automatically': None, + 'Alphapept peptides.csv': 'alphapept_peptides', + 'MaxQuant evidence.txt': "maxquant_evidence", + 'MaxQuant peptides.txt': 'maxquant_peptides', + 'Spectronaut fragment level': 'spectronaut_fragion_isotopes', + 'Spectronaut precursor level': 'spectronaut_precursor', + 'DIANN fragment level': 'diann_fragion_isotopes', + 'DIANN fragment level raw': 'diann_fragion_isotopes_raw', + 'DIANN precursor level': 'diann_precursors', + 'DIANN precursor level MS1': 'diann_precursors_ms1', + 'DIANN precursor MS1 and MS2': 'diann_precursor_ms1_and_ms2' + }, + sizing_mode='stretch_width', + margin=(0, 15, 0, 15) + ) + self.num_nonan_vals_title = pn.pane.Markdown( + '* Specify the minimum number of non-NaN ion intensities required to derive a protein intensity. The higher this number, the more reliable the protein quantification at the cost of more missing values:', + sizing_mode='stretch_width', + margin=(5, 15, 0, 15) + ) + self.num_nonan_vals = pn.widgets.IntInput( + name='', + value=1, + step=1, + start=0, + end=1000, + width=100, + margin=(0, 15, 0, 15) + ) + self.num_cores_title = pn.pane.Markdown( + '* Specify the number of cores to use (default of 0 means multiprocessing):', + sizing_mode='stretch_width', + margin=(5, 15, 0, 15) + ) + self.num_cores_vals = pn.widgets.IntInput( + name='', + value=0, + step=1, + start=0, + end=1000, + width=100, + margin=(0, 15, 0, 15) + ) # RUN PIPELINE self.run_pipeline_button = pn.widgets.Button( @@ -207,140 +247,117 @@ def __init__(self): height=31, width=250, align='center', - margin=(0, 0, 0, 0) + #margin=(20, 0, 0, 0) ) self.run_pipeline_progress = pn.indicators.Progress( active=False, bar_color='light', width=250, align='center', - margin=(-10, 0, 20, 0) + #margin=(-10, 0, 20, 0) ) self.run_pipeline_error = pn.pane.Alert( width=600, alert_type="danger", - # object='test warning message', margin=(-20, 10, -5, 16), ) - def create(self): + optional_configs = pn.Card( + self.additional_headers_title, + self.additional_headers, + self.dropdown_menu_for_input_type_title, + self.dropdown_menu_for_input_type, + self.protein_subset_for_normalization_title, + self.protein_subset_for_normalization_file, + self.num_nonan_vals_title, + self.num_nonan_vals, + self.num_cores_title, + self.num_cores_vals, + self.yaml_filt_dict_title, + self.yaml_filt_dict_path, + header='Optional Configurations', + collapsed=True, + header_background='#eaeaea', + header_color='#333', + sizing_mode='stretch_width', + margin=(10, 15, 0, 15) + ) + + # Wrap the specifications in a column for consistent alignment + specifications = pn.Column( + gui_textfields.Descriptions.project_instruction, + gui_textfields.Cards.spectronaut, + gui_textfields.Cards.diann, + gui_textfields.Cards.alphapept, + gui_textfields.Cards.maxquant, + gui_textfields.Cards.fragpipe, + sizing_mode='stretch_width', + margin=(10, 15, 0, 15), + ) + self.layout = pn.Card( - pn.Row( - pn.Column( - self.path_analysis_file, - self.path_protein_groups_file, - - #self.run_pipeline_error, - #self.path_output_folder, - pn.Card( - pn.Row( - pn.Column( - self.additional_headers_title, - self.additional_headers, - self.dropdown_menu_for_input_type_title, - self.dropdown_menu_for_input_type, - self.protein_subset_for_normalization_title, - self.protein_subset_for_normalization_file, - self.num_nonan_vals_title, - self.num_nonan_vals, - self.num_cores_title, - self.num_cores_vals, - self.yaml_filt_dict_title, - self.yaml_filt_dict_path, - ), ), - header='optional configurations', - collapsed=True, - header_background='#eaeaea', - header_color='#333', - align='center', - # sizing_mode='stretch_width', - #height=1000, - #margin=(5, 8, 10, 8), - # css_classes=['background'] - - ), - - - gui_textfields.Descriptions.project_instruction, - gui_textfields.Cards.spectronaut, - gui_textfields.Cards.diann, - gui_textfields.Cards.alphapept, - gui_textfields.Cards.maxquant, - gui_textfields.Cards.fragpipe, + pn.Column( + self.path_analysis_file, + self.path_protein_groups_file, + optional_configs, + specifications, + pn.Row( + pn.layout.HSpacer(), self.run_pipeline_button, - self.run_pipeline_progress, - # self.visualize_data_button, + pn.layout.HSpacer(), + sizing_mode='stretch_width', align='center', - - #margin=(100, 30, 10, 10), ), - pn.Spacer(sizing_mode='stretch_width'), - # pn.Column( - # gui_textfields.Descriptions.project_instruction, - # gui_textfields.Cards.spectronaut, - # gui_textfields.Cards.diann, - # gui_textfields.Cards.alphapept, - # gui_textfields.Cards.maxquant, - # self.run_pipeline_button, - # self.run_pipeline_progress, - # # self.visualize_data_button, - # align='center', - # margin=(100, 40, 0, 0), - # ) + self.run_pipeline_progress, + align='start', + sizing_mode='stretch_width', + margin=(0, 15, 15, 15) ), title='Run directLFQ analysis', - collapsed=False, + collapsible=False, # Make the card non-collapsible header_background='#eaeaea', header_color='#333', align='center', sizing_mode='stretch_width', - #height=1000, margin=(5, 8, 10, 8), css_classes=['background'] ) - # self.path_analysis_file.param.watch( - # self.activate_after_analysis_file_upload, - # 'value' - # ) - self.run_pipeline_button.param.watch( - self.run_pipeline, - 'clicks' - ) - # self.visualize_data_button.param.watch( - # self.visualize_data, - # 'clicks' - # ) - return self.layout - - # def activate_after_analysis_file_upload(self, *args): - # self.run_pipeline() + self.run_pipeline_button.on_click(self.run_pipeline) + return self.layout + def run_pipeline(self, *args): self.run_pipeline_progress.active = True - input_file = self.path_analysis_file.value + input_file = self.path_analysis_file.value_input input_type_to_use = self.dropdown_menu_for_input_type.value - mq_protein_groups_txt = None if self.path_protein_groups_file.value == '' else self.path_protein_groups_file.value - additional_headers = [] if self.additional_headers.value == '' else self.additional_headers.value + mq_protein_groups_txt = None if self.path_protein_groups_file.value_input == '' else self.path_protein_groups_file.value_input + additional_headers = [] if self.additional_headers.value_input == '' else self.additional_headers.value_input min_nonan = self.num_nonan_vals.value - file_of_proteins_for_normalization = None if self.protein_subset_for_normalization_file.value == '' else self.protein_subset_for_normalization_file.value + file_of_proteins_for_normalization = None if self.protein_subset_for_normalization_file.value_input == '' else self.protein_subset_for_normalization_file.value_input num_cores = None if self.num_cores_vals.value == -1 else self.num_cores_vals.value yaml_filt_dict_path = None if self.yaml_filt_dict_path.value == '' else self.yaml_filt_dict_path.value if additional_headers is not None: #the user will enter a string with semicolon separated values additional_headers = additional_headers.split(';') - lfq_manager.run_lfq(input_file = input_file, input_type_to_use = input_type_to_use, maximum_number_of_quadratic_ions_to_use_per_protein = 10, - number_of_quadratic_samples = 50, mq_protein_groups_txt= mq_protein_groups_txt, columns_to_add= additional_headers, selected_proteins_file= file_of_proteins_for_normalization, - min_nonan = min_nonan, num_cores=num_cores, filter_dict=yaml_filt_dict_path) + lfq_manager.run_lfq( + input_file=input_file, + input_type_to_use=input_type_to_use, + maximum_number_of_quadratic_ions_to_use_per_protein=10, + number_of_quadratic_samples=50, + mq_protein_groups_txt=mq_protein_groups_txt, + columns_to_add=additional_headers, + selected_proteins_file=file_of_proteins_for_normalization, + min_nonan=min_nonan, + num_cores=num_cores, + filter_dict=yaml_filt_dict_path + ) self.trigger_dependancy() self.run_pipeline_progress.active = False - def visualize_data(self, *args): - self.trigger_dependancy() - class Tabs(object): @@ -350,9 +367,7 @@ def __init__(self, pipeline): def create( self, - # tab_list=None ): - # self.tabs = tab_list return self.pipeline.depends(self.create_layout) def create_layout(self, *args): @@ -363,19 +378,11 @@ def create_layout(self, *args): margin=(30, 10, 5, 8), sizing_mode='stretch_width', ) - # self.layout += self.tabs self.layout += [ - # ('Multiple Comparison', MultipleComparison( #Commented out for pre-release - # self.pipeline.path_output_folder.value - # ).create() - # ), ('Single Comparison', SingleComparison( self.pipeline.path_output_folder.value, self.pipeline.samplemap_table.value, - ).create() - ), + ).create()), ] self.active = 0 return self.layout - - diff --git a/directlfq/gui_textfields.py b/directlfq/gui_textfields.py index e6ac29e..60fa455 100644 --- a/directlfq/gui_textfields.py +++ b/directlfq/gui_textfields.py @@ -133,7 +133,7 @@ class Cards(): collapsed=True, width=ButtonConfiguration.width, align='start', - margin=(0, 80, 5, 10), + margin=(20, 0, 20, 0), css_classes=['spectronaut_instr'] ) diann = pn.Card( diff --git a/misc/.bumpversion.cfg b/misc/.bumpversion.cfg index 4eee692..7313b76 100644 --- a/misc/.bumpversion.cfg +++ b/misc/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.2.20 +current_version = 0.3.0 commit = True tag = False parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\-(?P[a-z]+)(?P\d+))? diff --git a/release/linux/build_installer_linux.sh b/release/linux/build_installer_linux.sh index a29910d..ed15851 100755 --- a/release/linux/build_installer_linux.sh +++ b/release/linux/build_installer_linux.sh @@ -9,7 +9,7 @@ rm -rf dist_pyinstaller build_pyinstaller # Creating the wheel python setup.py sdist bdist_wheel -pip install "dist/directlfq-0.2.20-py3-none-any.whl[stable,gui]" +pip install "dist/directlfq-0.3.0-py3-none-any.whl[stable,gui]" # Creating the stand-alone pyinstaller folder pip install pyinstaller diff --git a/release/linux/control b/release/linux/control index e1c48b3..dc450b6 100644 --- a/release/linux/control +++ b/release/linux/control @@ -1,5 +1,5 @@ Package: directlfq -Version: 0.2.20 +Version: 0.3.0 Architecture: all Maintainer: Mann Labs Description: directlfq diff --git a/release/linux/create_installer_linux.sh b/release/linux/create_installer_linux.sh index ce457f5..17bf4f4 100755 --- a/release/linux/create_installer_linux.sh +++ b/release/linux/create_installer_linux.sh @@ -19,7 +19,7 @@ python setup.py sdist bdist_wheel # Setting up the local package cd release/linux # Make sure you include the required extra packages and always use the stable or very-stable options! -pip install "../../dist/directlfq-0.2.20-py3-none-any.whl[stable, gui]" +pip install "../../dist/directlfq-0.3.0-py3-none-any.whl[stable, gui]" # Creating the stand-alone pyinstaller folder pip install pyinstaller==4.10 diff --git a/release/macos/Info.plist b/release/macos/Info.plist index f88a954..3d117ad 100644 --- a/release/macos/Info.plist +++ b/release/macos/Info.plist @@ -9,9 +9,9 @@ CFBundleIconFile alpha_logo.icns CFBundleIdentifier - directlfq.0.2.20 + directlfq.0.3.0 CFBundleShortVersionString - 0.2.20 + 0.3.0 CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/release/macos/build_installer_macos.sh b/release/macos/build_installer_macos.sh index 2ca075a..33dd11f 100755 --- a/release/macos/build_installer_macos.sh +++ b/release/macos/build_installer_macos.sh @@ -9,7 +9,7 @@ rm -rf dist_pyinstaller build_pyinstaller # Creating the wheel python setup.py sdist bdist_wheel -pip install "dist/directlfq-0.2.20-py3-none-any.whl[stable,gui]" +pip install "dist/directlfq-0.3.0-py3-none-any.whl[stable,gui]" # Creating the stand-alone pyinstaller folder pip install pyinstaller diff --git a/release/macos/build_package_macos.sh b/release/macos/build_package_macos.sh index 3fcfedf..8dc3825 100755 --- a/release/macos/build_package_macos.sh +++ b/release/macos/build_package_macos.sh @@ -30,5 +30,5 @@ cd - chmod 777 release/macos/scripts/* -pkgbuild --root dist_pyinstaller/${PACKAGE_NAME} --identifier de.mpg.biochem.${PACKAGE_NAME}.app --version 0.2.20 --install-location /Applications/${PACKAGE_NAME}.app --scripts release/macos/scripts ${PACKAGE_NAME}.pkg +pkgbuild --root dist_pyinstaller/${PACKAGE_NAME} --identifier de.mpg.biochem.${PACKAGE_NAME}.app --version 0.3.0 --install-location /Applications/${PACKAGE_NAME}.app --scripts release/macos/scripts ${PACKAGE_NAME}.pkg productbuild --distribution release/macos/distribution.xml --resources release/macos/Resources --package-path ${PACKAGE_NAME}.pkg ${BUILD_NAME}.pkg diff --git a/release/macos/create_installer_macos.sh b/release/macos/create_installer_macos.sh index fb825fd..e652d55 100755 --- a/release/macos/create_installer_macos.sh +++ b/release/macos/create_installer_macos.sh @@ -22,7 +22,7 @@ python setup.py sdist bdist_wheel # Setting up the local package cd release/macos -pip install "../../dist/directlfq-0.2.20-py3-none-any.whl[stable, gui]" +pip install "../../dist/directlfq-0.3.0-py3-none-any.whl[stable, gui]" # Creating the stand-alone pyinstaller folder pip install pyinstaller==4.10 @@ -42,5 +42,5 @@ cp ../../LICENSE Resources/LICENSE cp ../logos/alpha_logo.png Resources/alpha_logo.png chmod 777 scripts/* -pkgbuild --root dist/directlfq --identifier de.mpg.biochem.directlfq.app --version 0.2.20 --install-location /Applications/directlfq.app --scripts scripts directlfq.pkg +pkgbuild --root dist/directlfq --identifier de.mpg.biochem.directlfq.app --version 0.3.0 --install-location /Applications/directlfq.app --scripts scripts directlfq.pkg productbuild --distribution distribution.xml --resources Resources --package-path directlfq.pkg dist/directlfq_gui_installer_macos.pkg diff --git a/release/macos/distribution.xml b/release/macos/distribution.xml index c6bfc6a..be4792f 100644 --- a/release/macos/distribution.xml +++ b/release/macos/distribution.xml @@ -1,6 +1,6 @@ - directlfq 0.2.20 + directlfq 0.3.0 diff --git a/release/windows/build_installer_windows.ps1 b/release/windows/build_installer_windows.ps1 index 12bae81..e845d07 100644 --- a/release/windows/build_installer_windows.ps1 +++ b/release/windows/build_installer_windows.ps1 @@ -10,7 +10,7 @@ Remove-Item -Recurse -Force -ErrorAction SilentlyContinue ./dist_pyinstaller # Creating the wheel python setup.py sdist bdist_wheel # Make sure you include the required extra packages and always use the stable or very-stable options! -pip install "dist/directlfq-0.2.20-py3-none-any.whl[stable, gui]" +pip install "dist/directlfq-0.3.0-py3-none-any.whl[stable, gui]" # Creating the stand-alone pyinstaller folder pip install pyinstaller diff --git a/release/windows/create_installer_windows.sh b/release/windows/create_installer_windows.sh index c6d4f6e..054e74c 100644 --- a/release/windows/create_installer_windows.sh +++ b/release/windows/create_installer_windows.sh @@ -19,7 +19,7 @@ python setup.py sdist bdist_wheel # Setting up the local package cd release/windows # Make sure you include the required extra packages and always use the stable or very-stable options! -pip install "../../dist/directlfq-0.2.20-py3-none-any.whl[stable, gui]" +pip install "../../dist/directlfq-0.3.0-py3-none-any.whl[stable, gui]" # Creating the stand-alone pyinstaller folder pip install pyinstaller==4.10 diff --git a/release/windows/directlfq_innoinstaller.iss b/release/windows/directlfq_innoinstaller.iss index ca56384..ee3f54a 100644 --- a/release/windows/directlfq_innoinstaller.iss +++ b/release/windows/directlfq_innoinstaller.iss @@ -5,7 +5,7 @@ ; so all paths are given relative to the location of this .iss file. #define MyAppName "directlfq" -#define MyAppVersion "0.2.20" +#define MyAppVersion "0.3.0" #define MyAppPublisher "Max Planck Institute of Biochemistry and the University of Copenhagen, Mann Labs" #define MyAppURL "https://github.com/MannLabs/directlfq" #define MyAppExeName "directlfq_gui.exe" diff --git a/requirements/requirements_gui.txt b/requirements/requirements_gui.txt index 0d37e74..b7de75e 100644 --- a/requirements/requirements_gui.txt +++ b/requirements/requirements_gui.txt @@ -1,3 +1,3 @@ -panel==0.14.2 -dash==2.7.1 -matplotlib==3.6.3 \ No newline at end of file +panel==0.10.3 +dash==2.5.1 +matplotlib==3.4.3 \ No newline at end of file diff --git a/settings.ini b/settings.ini index b069551..a6e3ba2 100644 --- a/settings.ini +++ b/settings.ini @@ -13,7 +13,7 @@ author = Constantin Ammar author_email = constantin.ammar@gmail.com copyright = fast.ai branch = master -version = 0.2.20 +version = 0.3.0 min_python = 3.6 audience = Developers language = English