pychem

A mirror and a fork of PyChem

https://github.com/kolanich-mirrors/pychem

Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
    1 of 3 committers (33.3%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.3%) to scientific vocabulary

Keywords

chemometrics genetic-algorithm gui hierarchical-clustering ica multivariate-analysis pca python3 spectroscopy wx-widgets
Last synced: 4 months ago · JSON representation ·

Repository

A mirror and a fork of PyChem

Basic Info
Statistics
  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Topics
chemometrics genetic-algorithm gui hierarchical-clustering ica multivariate-analysis pca python3 spectroscopy wx-widgets
Created about 3 years ago · Last pushed almost 3 years ago
Metadata Files
Readme License Code of conduct Citation

ReadMe.md

PyChem

~~wheel (GitLab)~~ wheel (GHA via nightly.link) ~~GitLab Build Status~~ ~~GitLab Coverage~~ GitHub Actions PyPI legacy page Libraries.io Status Code style: antiflash

License

This software originally comes without a license full text, but within its source code it is written Licence: GNU General Public Licence and https://pypi.org/project/PyChem/ exposes OSI Approved :: GNU General Public License (GPL) "Trove classifier". In my opinion, the public release of source code, the license notices in the source code and the Trove classifiers on PyPI clearly carry author's intent to license the software under a GNU General Public License.

When the last release of the software was created (2010 year), there used to be 3 versions of GNU GPL in existence: 1, 2, and 3. In GNU GPL license texts from FSF website it used to be said:

  1. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation.
  2. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
  3. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

So we consider this software as licensed under GNU GENERAL PUBLIC LICENSE Version 3, SPDX identifier GPL-3.0-or-later.

Modifications

This repo contains a modified version of software. Insignificant changes were applied to original commits in order to reduce "diff noise", reduce size of diffs, simplify code comprehension and debugging.

  1. The repo was imported from SourceForge CVS. Unfortunately only non-TLS access was provided by SF, which exposes us to MiTM attacks while fetching the source code.
  2. Repo was converted into git using cvs2git and git fast-import.
  3. Directory layout was changed. CVSROOT was removed. The files were transferred into PyChem subdir.
  4. Source code was bulk-converted into Python 3 using 2to3 -nw.
  5. Indentation was converted into tabs for Python files.
  6. reposurgeon% path rename %^PyChem/(docs|examples)\/(.+)$% \1/\2
  7. reposurgeon% path rename %^PyChem/(setup_win32\.py|setup_standalone\.py)$% \1
  8. reposurgeon% path rename %^PyChem/PyChemApp\.py$% PyChem/__main__.py
  9. Reformated using isort and antiflash.
  10. Imports of legacy wxWidgets API was replaced with modern ones. ```bash #!/usr/bin/env bash

rpl -F "lib.customtreectrl" "lib.agw.customtreectrl" "/*.py" rpl -F "lib.foldpanelbar" "lib.agw.foldpanelbar" "/.py" rpl -F "lib.buttonpanel" "lib.agw.buttonpanel" "/.py" rpl -F "cluster.treecluster" "treecluster" "/*.py" rpl -F "cluster.kcluster" "kcluster" "/.py" rpl -F "wx.AboutBox" "wx.adv.AboutBox" "/.py" rpl -F "wx.AboutDialogInfo" "wx.adv.AboutDialogInfo" "/*.py" rpl "\bwx.NewId\b" "wx.NewIdRef" "/.py" rpl "\bSetToolTipString\b" "SetToolTip" ".//.py" rpl "(\w+)COLOR" '\1COLOUR' ".//*.py" rpl -F "wx.SashWindow" "wx.adv.SashWindow" ".//.py" rpl -F "wx.SW3D" "wx.adv.SW3D" ".//.py" rpl -F "wx.SAVE" "wx.FDSAVE" "*/.py" rpl -F "wx.OVERWRITEPROMPT" "wx.FDOVERWRITEPROMPT" "/*.py" rpl -F "InsertStringItem" "InsertItem" "/.py" rpl -F "SetStringItem" "SetItem" "/.py"

rpl "(\w+).SetFontSizeLegend(" "\1.fontSizeLegend = (" "/*.py" rpl "(\w+).SetEnableLegend(" "\1.enableLegend = (" "/.py" rpl "(\w+).SetYSpec(" "\1.ySpec = (" "/.py" rpl "(\w+).SetXSpec(" "\1.xSpec = (" "/*.py" rpl "(\w+).SetFontSizeAxis(" "\1.fontSizeAxis = (" "/.py" rpl "(\w+).SetFontSizeTitle(" "\1.fontSizeTitle = (" "/.py" rpl "(\w+).SetEnableZoom(" "\1.enableZoom = (" "*/.py"

rpl -F 'scipy.array' 'np.array' "/*.py" rpl -F "scipy.io.arrayimport.strarray" "str_array" "/.py" rpl -F "import scipy.io" "" "/.py" rpl 'attr["(\w+)"]' "\1" "*/.py" rpl "attr['(\w+)']" "\1" "/*.py" rpl -F ".getchildren()" "" "/*.py"

rpl "exec(\"self.\" + item.tag + \".(\w+)(\" + (.+?))')" "getByPath(self, item.tag).\1(exec(\2'))" "/*.py" rpl "exec(\"self.\" + item.tag + \".(\w+)(\" + (.+?))\")" "getByPath(self, item.tag).\1(exec(\2\"))" "/.py" rpl "exec(\"(\w+) = self.\" + item.tag)" "\1 = getByPath(self, item.tag)" "/.py" rpl "exec('([^\"]+)[\"' + (.+?) + '\"]([^\"])')" "\1[\2]\3" "/.py" rpl "exec(\"(\w+) = ET.SubElement(\" + (\w+) + ', \"(\w+)\")')" "\1 = ET.SubElement(locals()[\2], \"\3\")" "/*.py" rpl "exec(\"expSetup.ResizeGrids(self.\" + item.tag + \", r, (.+?))\")" 'expSetup.ResizeGrids(getByPath(self, item.tag), r, \1)' "/.py" rpl "exec('expSetup.ResizeGrids(self.' + item.tag + ', r, (.+?))')" 'expSetup.ResizeGrids(getByPath(self, item.tag), r, \1)' "/.py" rpl -F "',\"'" "',' + '\"'" "/*.py" rpl "exec(\"(.+?)self.\" + (\w+) + \"(.+?)\")" "\1getByPath(self, \2)\3" "/.py" rpl "exec((\w+) + '= ET.SubElement((\w+), \"' + (\w+) + '\")')" "locals()[\1] = ET.SubElement(\2, \3)" "/.py" rpl "exec(\"(\w+) = ET.SubElement(\" + (\w+) + ',\"(\w+)\")')" "\1 = ET.SubElement(locals()[\2], \"\3\")" "/*.py" rpl "exec((\w+) + '([^']+)')" "locals()[\1]\2" "/.py" rpl "exec((\w+) + ' = ET.SubElement((\w+), \"' + (\w+) + '\")')" "locals()[\1] = ET.SubElement(\2, \3)" "/.py" rpl "exec((\w+) + \".(\w+) = ([^\"]+?)self.\" + (\w+) + \"([^\"]+)\")" "locals()[\1].\2 = \3getByPath(self, \4)\5" "/*.py" rpl "exec((\w+) + \"([^\"]+?)\")" "locals()[\1]\2" "/.py" rpl "exec(\"(\w+)\" + (\w+) + ' = ET.SubElement((\w+), \"' + (\w+) + '\")')" "locals()[\"\1\" + \2] = ET.SubElement(\3, \4)" "/.py" rpl "exec(\"(\w+)\" + (\w+) + '([^']+)')" "locals()[\"\1\" + \2]\3" "/*.py" rpl "exec((\w+) + \"([^\"]+)\" + (\w+) + \"([^\"]+)\")" "locals()[name].text = getByPath(self, each).GetValue()" "/.py" rpl "exec(\"(\w+)\" + (\w+) + \"([^\"]+)\")" "locals()[\"\1\" + \2]\3" "/.py" rpl "exec('(\w+) = (\w+)(([^[]+)[\"' + (\w+) + '\"]([^)]+))')" "\1 = \2(\3[\4]\5)" "/*.py" rpl "exec('(\w+) = ([\w.]+)(' + (\w+) + ',\"(\w+)\")')" "\1 = \2(locals()[\3],\"\4\")" "/.py" rpl "exec(\"(\w+) = ([\w.]+)['\" + (\w+) + \"']\")" "\1 = \2[\3]" "/.py" rpl "exec(\"(\w+).\" + ([^\"]+) + \"([^\"]+)\")" "getByPath(\1, \2)\3" "/.py" rpl "exec(\"([\w.]+)(((?:[\w]+.)+)(\w+)\"([^\"]+?)\s+\s*\"([^\"]+)\")" "\1(getByPath(\2, \"\3\"\4)\5" "/.py" rpl "([a-zA-Z]+).," "\1," "/.py" # fixes after the previous command

rpl "string.split(([^,]+), ([^)]+))" "\1.split(\2)" ".//*.py" rpl 'bp.ButtonPanel.init(self, parent=prnt, id=-1, text="([\w ]+)", style=bp.BPUSEGRADIENT,' 'bp.ButtonPanel.init(self, parent=prnt, id=-1, text="\1", agwStyle=bp.BPUSEGRADIENT,' ".//.py" rpl 'bp.ButtonPanel.init(self, parent=prnt, id=-1, text="GA-" + self.type, style=bp.BPUSEGRADIENT,' 'bp.ButtonPanel.init(self, parent=prnt, id=-1, text="GA-" + self.type, agwStyle=bp.BPUSEGRADIENT,' ".//.py" rpl "string.lower(([^)]+))" "\1.lower()" "./*/.py"

rpl -F 'string.join(("The following error occured:\n\n", error), "")' '"".join(("The following error occured:\n\n", error))' ".//*.py" rpl -F 'string.join((confmat, "\n"), "")' '"".join((confmat, "\n"))' ".//.py" rpl -F 'string.join((confmat, "\t", str(i + 1)), "")' '"".join((confmat, "\t", str(i + 1)))' ".//.py" rpl -F 'string.join((centres, "% .2f" % centroids[i, j], "\n"), "")' '"".join((centres, "% .2f" % centroids[i, j], "\n"))' ".//*.py" rpl -F 'string.join((centres, str(i + 1), "\t\t", "% .2f" % centroids[i, j], "\t"), "")' '"".join((centres, str(i + 1), "\t\t", "% .2f" % centroids[i, j], "\t"))' ".//.py" rpl -F 'string.join((centres, str(i + 1), "\t\t", "% .2f" % centroids[i, j], "\t"), "")' '"".join((centres, str(i + 1), "\t\t", "% .2f" % centroids[i, j], "\t"))' ".//.py" rpl -F 'string.join(("Principal component", str(i)), " ")' '" ".join(("Principal component", str(i)))' ".//*.py" rpl -F 'string.join(("Extracting factor...", str(xi + 1)), " ")' '" ".join(("Extracting factor...", str(xi + 1)))' ".//.py" rpl -F 'string.join(("/", workspace), "")' '"".join(("/", workspace))' ".//.py" rpl -F 'string.join((centres, "\n"), "")' '"".join((centres, "\n"))' "./*/.py"

rpl -F 'string.join((str(Var), "vars"), " ")' '" ".join((str(Var), "vars"))' ".//*.py" rpl -F 'string.join((confmat, "\t", str(confarr[i, j])), "")' '"".join((confmat, "\t", str(confarr[i, j])))' ".//.py" rpl -F 'string.join(("Variable", str(Vars + varFrom)), " ")' '" ".join(("Variable", str(Vars + varFrom)))' ".//.py" rpl -F 'string.join(("Run", str(Runs + 1)), " ")' '" ".join(("Run", str(Runs + 1)))' ".//*.py" rpl -F 'string.join(("Generation", str(count)), " ")' '" ".join(("Generation", str(count)))' ".//.py" rpl -F 'string.join((confmat, str(i + 1), "\t\t", str(confarr[i, j])), "")' '"".join((confmat, str(i + 1), "\t\t", str(confarr[i, j])))' ".//.py" rpl -F 'string.join((centres, "% .2f" % centroids[i, j], "\t"), "")' '"".join((centres, "% .2f" % centroids[i, j], "\t"))' ".//*.py" rpl -F 'string.join((centres, "\t", str(i + 1)), "")' '"".join((centres, "\t", str(i + 1)))' ".//*.py"

rpl -F 'string.join(("PLS Predictions:", str(attr["factors"] + 1), "factors, RMS(Indep. Test)", "%.2f" % _attr["RMSEPT"]), " ")' '" ".join(("PLS Predictions:", str(attr["factors"] + 1), "factors, RMS(Indep. Test)", "%.2f" % attr["RMSEPT"]))' ".//*.py" rpl -F 'string.join((title, "\n-----------------------\n\n", "No. clusters\t\tError\t\tNo. optimal soln.\n", "----------------\t\t--------\t\t------------------------\n", str(max(self.clusterid) + 1), "\t\t\t", "% .2f" % error, "\t\t", str(nfound)), "")' '"".join((title, "\n-----------------------\n\n", "No. clusters\t\tError\t\tNo. optimal soln.\n", "----------------\t\t--------\t\t------------------------\n", str(max(self.clusterid) + 1), "\t\t\t", "% .2f" % error, "\t\t", str(nfound)))' ".//.py" rpl -F 'string.join((summary, centres, confmat), "")' '"".join((summary, centres, confmat))' ".//.py" rpl -F 'string.join((str(vars + _attr["varfrom"]), " variables"), "")' '"".join((str(vars + _attr["varfrom"]), " variables"))' "./*/.py" rpl -F 'string.join(("#", str(IterCount + 1), " ", str(scipy.take(scipy.reshape(self.data["indlabelsfull"], (len(self.data["indlabelsfull"]),)), RunLabel)), " ", "%.2f" % (gaScoreList[idx[(vars * (attr["runs"] + 1)) + runs]])), "")' '"".join(("#", str(IterCount + 1), " ", str(scipy.take(scipy.reshape(self.data["indlabelsfull"], (len(self.data["indlabelsfull"]),)), RunLabel)), " ", "%.2f" % (gaScoreList[idx[(vars * (_attr["runs"] + 1)) + runs]])))' ".//*.py" rpl -F 'string.join((axis, yL), " ")' '" ".join((axis, yL))' ".//.py" rpl -F 'string.join((axis, str(col1 + 1)), " ")' '" ".join((axis, str(col1 + 1)))' ".//.py" rpl -F 'string.join((axis, xL), " ")' '" ".join((axis, xL))' ".//*.py" rpl -F 'string.join((axis, str(col2 + 1)), " ")' '" ".join((axis, str(col2 + 1)))' ".//*.py"

rpl -F 'string.replace(data, "]]", "")' 'data.replace("]]", "")' ".//*.py" rpl -F 'string.replace(data, " \n ", " ")' 'data.replace(" \n ", " ")' ".//.py" rpl -F 'string.replace(data, "\n ", " ")' 'data.replace("\n ", " ")' ".//.py" rpl -F 'string.replace(data, "]\n [ ", "\n")' 'data.replace("]\n [ ", "\n")' ".//*.py" rpl -F 'string.replace(str(self.data["raw"]), "[[ ", "")' 'str(self.data["raw"]).replace("[[ ", "")' ".//*.py"

rpl -F "string.join((\".//Workspaces/\",workspace),'')" '"".join((".//Workspaces/",workspace))' ".//*.py" rpl -F 'string.join(("#", str(IterCount + 1), " ", str(scipy.take(scipy.reshape(self.data["indlabelsfull"], (len(self.data["indlabelsfull"]),)), RunLabel)), " ", "%.2f" % (gaScoreList[Count + mch])), "")' '"".join(("#", str(IterCount + 1), " ", str(scipy.take(scipy.reshape(self.data["indlabelsfull"], (len(self.data["indlabelsfull"]),)), RunLabel)), " ", "%.2f" % (gaScoreList[Count + mch])))' ".//.py" rpl -F 'string.join(("#", str(IterCount + 1), " ", str(scipy.take(scipy.reshape(self.data["indlabels"], (len(self.data["indlabels"]),)), RunLabel)), " " "%.2f" % (gaScoreList[Count + mch])), "")' '"".join(("#", str(IterCount + 1), " ", str(scipy.take(scipy.reshape(self.data["indlabels"], (len(self.data["indlabels"]),)), RunLabel)), " " "%.2f" % (gaScoreList[Count + mch])))' ".//.py" rpl -F 'string.join(("PLS Model:", str(factors + 1), "factors, RMS(Indep. Test)", "%.3f" % RMSEPT), " ")' '" ".join(("PLS Model:", str(factors + 1), "factors, RMS(Indep. Test)", "%.3f" % RMSEPT))' ".//*.py" rpl -F 'string.join(("PLS Predictions:", str(factors + 1), "factors, RMS(Indep. Test)", "%.3f" % RMSEPT), " ")' '" ".join(("PLS Predictions:", str(factors + 1), "factors, RMS(Indep. Test)", "%.3f" % RMSEPT))' ".//.py" rpl -F 'string.join(("Extracting factor...", str(x + 1)), " ")' '" ".join(("Extracting factor...", str(x + 1)))' ".//.py"

rpl -F 'string.join((title, "\n-------------\n\n", "No. clusters\t\tError\t\tNo. optimal soln.\n", "----------------\t\t--------\t\t------------------------\n", str(max(self.clusterid) + 1), "\t\t\t", "% .2f" % error, "\t\t", str(nfound)), "")' '"".join((title, "\n-------------\n\n", "No. clusters\t\tError\t\tNo. optimal soln.\n", "----------------\t\t--------\t\t------------------------\n", str(max(self.clusterid) + 1), "\t\t\t", "% .2f" % error, "\t\t", str(nfound)))' "./*/.py"

rpl -F 'string.replace(data, " \n ", " ")' 'data.replace(" \n ", " ")' ".//*.py" rpl -F 'string.replace(data, "\n ", " ")' 'data.replace("\n ", " ")' ".//.py" rpl -F 'string.replace(data, " ", " ")' 'data.replace(" ", " ")' ".//.py" rpl -F "'%.2f' %tstgerr),'')" "'%.2f' %tstgerr))" ".//*.py" rpl -F "OlsResults = string.join((" 'OlsResults = "".join((' ".//*.py" ```

Owner

  • Name: KOLANICH's mirrors of third-party projects, often discontinued ones.
  • Login: KOLANICH-mirrors
  • Kind: organization

Citation (CITATION.cff)

cff-version: 1.2.0
title: PyChem fork
license: GPL-3.0-or-later
repository-code: https://github.com/KOLANICH-mirrors/PyChem.py
url: https://pychem.sourceforge.net/
message: It is a fork of abandonware PyChem.
repository: https://sourceforge.net/projects/pychem/
identifiers:
  - type: url
    value: https://pypi.org/project/PyChem/
    description: PyPI


preferred-citation:
  type: article
  title: 'PYCHEM: a multivariate analysis package for python'
  issn: 1367-4803
  languages: [en]
  authors:
    - &rmj01
      given-names: Roger
      family-names: Jarvis M
      alias: rmj01
      email: Roger.Jarvis@manchester.ac.uk
      affiliation: &shared_affiliation |
        School of Chemistry, The University of Manchester, PO Box 88, Sackville Street, Manchester M60 1QD, UK
        Manchester Interdisciplinary Biocentre, 131 Princess Street, Manchester M1 7DN, UK
      #affiliation: &shared_affiliation
      #  - name: School of Chemistry, The University of Manchester
      #    city: Manchester
      #    country: UK
      #    location: PO Box 88, Sackville Street, M60 1QD
      #  - name: Manchester Interdisciplinary Biocentre
      #    city: Manchester
      #    country: UK
      #    location: 131 Princess Street, M1 7DN
      # orcid:
    - &dvd
      given-names: David
      family-names: Broadhurst
      affiliation: *shared_affiliation
      # orcid:
    - &hln
      given-names: Helen
      family-names: Johnson
      #email: hej93@aber.ac.uk # not from that affiliation
      affiliation: Faculty of Life Sciences, University of Manchester, Stopford Building, Oxford Road, Manchester M13 9PT, UK
      #affiliation:
      #  - name: Faculty of Life Sciences, University of Manchester
      #    city: Manchester
      #    country: UK
      #    location: Stopford Building, Oxford Road, M13 9PT
      # orcid:
    - &noel
      given-names: Noel
      family-names: O'Boyle M
      #email: oel.oboyle2@mail.dcu.ie  # not from that affiliation
      affiliation: Unilever Centre for Molecular Science Informatics, Department of Chemistry, University of Cambridge, Lensfield Road, CB2 1EW, UK
      #affiliation:
      #  - name: Unilever Centre for Molecular Science Informatics, Department of Chemistry, University of Cambridge
      #    city: Cambridge
      #    country: UK
      #    location: Lensfield Road, CB2 1EW
      # orcid:
    - &rrg
      given-names: Royston
      family-names: Goodacre
      #email: rrg@aber.ac.uk  # not from that affiliation
      affiliation: *shared_affiliation
      # orcid:
  doi: 10.1093/bioinformatics/btl416
  journal: Bioinformatics
  month: 7
  start: 2565
  end: 2566
  issue: 20
  volume: 22
  year: 2006
  publisher:
    name: Oxford University Press (OUP)
  #date: 2022-12-23
  editors:
    - given-names: Martin
      family-names: Bishop
  url: https://academic.oup.com/bioinformatics/article-pdf/22/20/2565/580465/btl416.pdf
  abstract: |
    We have implemented a multivariate statistical analysis toolbox, with an optional standalone graphical user interface (GUI), using the Python scripting language. This is a free and open source project that addresses the need for a multivariate analysis toolbox in Python. Although the functionality provided does not cover the full range of multivariate tools that are available, it has a broad complement of methods that are widely used in the biological sciences. In contrast to tools like MATLAB, PyChem 2.0.0 is easily accessible and free, allows for rapid extension using a range of Python modules and is part of the growing amount of complementary and interoperable scientific software in Python based upon SciPy. One of the attractions of PyChem is that it is an open source project and so there is an opportunity, through collaboration, to increase the scope of the software and to continually evolve a user-friendly platform that has applicability across a wide range of analytical and post-genomic disciplines.
    AVAILABILITY: http://sourceforge.net/projects/pychem

authors:
  - *rmj01
  - *dvd
  - *hln
  - *noel
  - *rrg

GitHub Events

Total
Last Year

Committers

Last synced: almost 2 years ago

All Time
  • Total Commits: 87
  • Total Committers: 3
  • Avg Commits per committer: 29.0
  • Development Distribution Score (DDS): 0.437
Past Year
  • Commits: 87
  • Committers: 3
  • Avg Commits per committer: 29.0
  • Development Distribution Score (DDS): 0.437
Top Committers
Name Email Commits
Roger Jarvis R****s@m****k 49
KOLANICH k****n@m****u 37
KOLANICH K****H 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: almost 2 years ago

All Time
  • Total issues: 0
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 0
  • Total pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels