{"id":22371895,"url":"https://github.com/jupyterphysscilab/documentation","last_synced_at":"2026-01-22T01:34:00.258Z","repository":{"id":107212408,"uuid":"242603913","full_name":"JupyterPhysSciLab/Documentation","owner":"JupyterPhysSciLab","description":"Documentation for the Jupyter Physical Science Lab Suite of Packages","archived":false,"fork":false,"pushed_at":"2024-08-07T01:55:20.000Z","size":49,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-22T22:06:12.504Z","etag":null,"topics":["analog-to-digital-converter","data-acquisition","data-analysis","education","jupyter-notebooks","pandas","physical-sciences","plotting","python","raspberry-pi"],"latest_commit_sha":null,"homepage":"https://jupyterphysscilab.github.io/Documentation/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JupyterPhysSciLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-23T22:50:44.000Z","updated_at":"2024-08-07T01:55:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"7d3071af-9b61-486f-b91e-a7097414df48","html_url":"https://github.com/JupyterPhysSciLab/Documentation","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JupyterPhysSciLab/Documentation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JupyterPhysSciLab%2FDocumentation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JupyterPhysSciLab%2FDocumentation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JupyterPhysSciLab%2FDocumentation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JupyterPhysSciLab%2FDocumentation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JupyterPhysSciLab","download_url":"https://codeload.github.com/JupyterPhysSciLab/Documentation/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JupyterPhysSciLab%2FDocumentation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28649464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"ssl_error","status_checked_at":"2026-01-22T01:17:35.564Z","response_time":86,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analog-to-digital-converter","data-acquisition","data-analysis","education","jupyter-notebooks","pandas","physical-sciences","plotting","python","raspberry-pi"],"created_at":"2024-12-04T20:31:11.032Z","updated_at":"2026-01-22T01:34:00.234Z","avatar_url":"https://github.com/JupyterPhysSciLab.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jupyter Physical Science Lab Suite (JPSL)\nDocumentation for the Jupyter Physical Science Lab Suite of Packages.\n\n[Introduction](#introduction) | [Try It](#try-it) | [Quick\nStart](#quick-start) | \n[Packages](#packages) | [Packages being \nconsiderd](#packages-being-considered) | \n[JPSL Project Repository](https://github.com/JupyterPhysSciLab) | \n[JPSL Documentation Repository](https://github.com/JupyterPhysSciLab/Documentation) | \n[License](#this-software-is-distributed-under-the-gnu-v3-licensehttpsgnuorglicenses)\n\n# Introduction\n\nThe key goals of this suite of packages is to provide:\n\n1. an open source electronic laboratory notebook that is practical in physical\n   science laboratories where data is collected by hand, from instrumentation\n   and sensors;\n2. the ability to run on minimal hardware (things like the Raspberry Pi) to\n   make it affordable for educational use;\n3. adaptability, allowing for use in a variety of teaching situations;\n4. GUI elements that allow students in introductory courses without programming\n   experience to collect data and analyze it, while also facilitating \n   scaffolding learning to write data analysis code/scripts in more advanced \n   course;\n5. tools for instructors allowing them to create worksheets or more open-ended\n   assignments (there is some potential feature overlap\n   with [nbgrader](https://github.com/jupyter/nbgrader), but nbgrader tools are\n   aimed more at math and programming assignments);\n6. ability to generate compact pdf formatted \"reports\" for grading;\n7. easy ways to have students analyze data while properly tracking units and\n   what analysis was done, thus facilitating grading and trouble-shooting of\n   student work.\n\nThere are two basic flavors of this suite of packages: student; and instructor.\nThe instructor flavor includes tools for generating content in worksheets that\nstudents cannot edit. As well as ways to control what is displayed to the \nstudents and in the final version submitted for grading. The student version \npurposely leaves out the tools that\nallow unlocking of locked cells in a notebook, so that the instructor can\ninclude unchanging instructions, examples and questions.\n\n# Try it\n\nYou can try the parts of Jupyter Physical Science lab without installing \nanything. The packages can be run in the cloud. Links to do this are \nprovided on the Github pages for each package. It is recommended that you \nstart with [JPSLInstructor](https://github.com/JupyterPhysSciLab/JPSLInstructor),\nwhich includes all the supported packages.\n\n# Quick Start\n\n1. Install python on your machine, if necessary.\n    1. Check current system python install by opening a command line \n       terminal and issuing the command `python3 --version`. If it is \u003e= 3.\n       7 you can use it. Otherwise, follow the next step to install a \n       newer version.\n    2. Get the installer for your computer from [python.org](https://python.org).\n   Follow the instructions for installing on your system.\n2. Install a tool for managing and using virtual environments. This \n   allows you to have multiple independent sets (virtual environments)\n   of python packages installed.\n   1. I recommend you use this so that you can have both an \"instructor\"\n   and \"student\" environment for testing.\n   2. I personally like using [pipenv](https://pipenv.pypa.io/en/latest/).\n   You can install it using the command `pip3 --user install pipenv`. On \n      Windows you will probably have to do `python3 -m pip --user install \n      pipenv`.\n   See the website for more information.\n3. Set up an instructor work environment.\n   1. Create a directory to contain your virtual environment and navigate \n      into it (in *nix: `cd path-to-directory`).\n   2. Create the empty virtual environment `pipenv shell` (on Windows \n      `python3 -m pipenv shell`). This will\n       create the environment, activate it and leave you inside it. \n      **WARNING**: \n      on Windows I have seen it move you to another directory. If it does \n      this navigate back using the `cd` command. \n   3. Still within the environment use pip to install the [JPSLInstructor \n      pseudo package](https://github.com/JupyterPhysSciLab/JPSLInstructor)\n   `pip install JPSLInstructor`. This will take a while \n      to run. There are a lot of packages to download and install.\n   4. Example notebooks are not installed by pip. You should download the \n      [JPSLInstructor pseudo package](https://github.com/JupyterPhysSciLab/JPSLInstructor)\n   as a zip file and extract the `Examples` folder into the directory for this\n   virtual environment.\n   5. To work with the software launch the jupyter notebook with the \n      command `jupyter lab` (for the complex user interface) or `juptyer \n      notebook` (for the simplified user interface). This will \n      launch a local jupyter server on your machine and open a page \n      connected to it in your web browser (Chrome and Firefox work best).\n   6. Open an example notebook to try things.\n   7. After quiting the Jupyter notebook server you can exit the virtual \n      environment with the command `exit`.\n4. Set up a student work environment for testing.\n   1. Create a directory to contain your virtual environment and navigate \n         into it (in *nix: `cd path-to-directory`).\n   2. Create the empty virtual environment `pipenv shell`. This will\n       create the environment, activate it and leave you inside it. \n   3. Still within the environment use pip to install the [JPSLStudent \n      pseudo package](https://github.com/JupyterPhysSciLab/JPSLStudent)\n   `pip install JPSLStudent`. This will take a while \n      to run. There are a lot of packages to download and install.\n   4. To work with the software launch the jupyter notebook with the \n      command `juptyer notebook` (the simplified interface is recommended \n      most use with students).\n   5. Copy notebooks you want to see from a student perspective into this \n      directory.\n   6. After quiting the Jupyter notebook server you can exit the virtual \n      environment with the command `exit`.\n\n# Packages\n(Under active development, please try and send feedback)\n\nThe packages are available from PyPi (using pip for installation) or by\ninstalling from these repositories. The packages are broken up to allow using\nonly the tools necessary.\n\n* [*jupyter-datainputtable*](https://github.com/JupyterPhysSciLab/jupyter-datainputtable)\n  provides tools for generating a GUI table into which data can be typed and\n  the data will survive clearing of the cell outputs from a notebook.\n* [*jupyter-instructortools*](https://github.com/JupyterPhysSciLab/jupyter-instructortools)\n  provides menu based tools for locking and unlocking text (Markdown) and code\n  cells, inserting tables, some boilerplate language, etc.\n* [*jupyter-pandas-GUI*](https://jupyterphysscilab.github.io/jupyter_Pandas_GUI/)\n  provides jupyter widget based GUI code composers for tasks such as \n  calculating a new column in a Pandas DataFrame, making a scatter or line \n  plot from data in a DataFrame, or fitting data in a DataFrame.\n* [*JupyterPiDAQ*](https://jupyterphysscilab.github.io/JupyterPiDAQ/) provides\n  tools for interactive data collection using A/D boards and\n  visualization of that data, presently supports specific boards attached\n  to Raspberry Pi 3B+ or above and sensors connected to Vernier LabQuest \n  interfaces.\n* [*jupyterpidaq_menu*](https://github.com/JupyterPhysSciLab/JupyterPiDAQ_Menu)\n  provides a menu of useful commands for initiating \n  data collections and analyzing data.\n* [*JPSL_Tools_Menu*](https://github.com/JupyterPhysSciLab/JPSL_Tools_Menu)\n  provides a convenience menu with access to documentation on the parts of \n  the Jupyter Physical Science Lab and menu items to insert common \n  initialization code, commands to activate each tool and control hiding of \n  cells for printing.\n* *[Algebra_with_SymPy](https://gutow.github.io/Algebra_with_Sympy/)* provides\n  a definition for an equation with a lhs and a rhs. This tool applies\n  operations to both sides of the equation simultaneously, just as students are\n  taught to do when attempting to isolate (solve for) a variable. Thus the\n  statement `Equation/b` yields a new\n  equation `Equation.lhs/b = Equation.rhs/b`. This facilitates clearly \n  documented symbolic algebraic manipulations and calculations with units \n  included.\n* **Pseudo Packages**\n    * [*JPSLInstructor*](https://github.com/JupyterPhysSciLab/JPSLInstructor) \n      contains all the packages.\n    * [*JPSLStudent*](https://github.com/JupyterPhysSciLab/JPSLStudent) \n      contains everything but the InstructorTools package.\n\n# Packages being considered\nThese are packages that are under development elsewhere, but might be included\nif there is interest:\n\n* [*DeltaSymbol*](https://github.com/gutow/DeltaSymbol) allows adding a symbol\n  in SymPy that displays as the typeset \u0026Delta;`X` in Jupyter notbooks. Where\n  \u0026Delta;`X` is the common abbreviation for `final(X) - initial (X)`.\n* [*jupyter-wysiwyg*](https://github.com/genepattern/jupyter-wysiwyg) provides\n  a what you see is what you get mode for Markdown/Richtext cells activated by\n  clicking a button.\n* [*ipysketch*](https://github.com/maroba/ipysketch). Tool for making and \n  embedding sketches in a notebook.\n* [*ipysheet*](https://github.com/QuantStack/ipysheet). Tool that provides \n  a widgets based alternative to [*jupyter-datainputtable*\n  ](https://github.com/JupyterPhysSciLab/jupyter-datainputtable). To use, \n  data persistence will have to be addressed.\n* *WYSIWYGcell* provides what you see is what you get text edit cells in\n  Jupyter notebooks, but involves significant changes to the Jupyter notebook\n  code, thus will either require providing a fully custom Jupyter notebook or\n  monkey patching a current installation.\n\n##### [This software is distributed under the GNU V3 license](https://gnu.org/licenses)\nThis program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\nCopyright - Jonathan Gutow, 2021 - 2024.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjupyterphysscilab%2Fdocumentation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjupyterphysscilab%2Fdocumentation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjupyterphysscilab%2Fdocumentation/lists"}