From a402c4f8f1753dbb10de195e212aa58e29b8dc4b Mon Sep 17 00:00:00 2001 From: Jessica Nash Date: Sun, 13 Feb 2022 09:15:07 -0500 Subject: [PATCH 1/2] add sys argv lesson as alternate --- _episodes/07-command_line.md | 3 +- _episodes/07-command_line_sys.md | 171 +++++++++++++++++++++++++++++++ _includes/syllabus.html | 137 +++++++++++++++++-------- 3 files changed, 269 insertions(+), 42 deletions(-) create mode 100644 _episodes/07-command_line_sys.md diff --git a/_episodes/07-command_line.md b/_episodes/07-command_line.md index 2d95875..f605969 100644 --- a/_episodes/07-command_line.md +++ b/_episodes/07-command_line.md @@ -3,7 +3,8 @@ title: "Running code from the Linux Command Line" teaching: 15 exercises: 10 questions: -- "How do I move my code from the interactive jupyter notebook to run from the Linux command line?" +- "How do I move my code from the interactive Jupyter notebook to run from the Linux command line?" +- "How do I make Python scripts with help messages and user inputs using argparse?" objectives: - "Make code executable from the Linux command line." - "Use argparse to accept user inputs." diff --git a/_episodes/07-command_line_sys.md b/_episodes/07-command_line_sys.md new file mode 100644 index 0000000..c91d9bb --- /dev/null +++ b/_episodes/07-command_line_sys.md @@ -0,0 +1,171 @@ +--- +title: "Running code from the Linux Command Line" +teaching: 15 +exercises: 10 +alternate: true +questions: +- "How do I move my code from the interactive Jupyter notebook to run from the Linux command line?" +- "How do I make simple Python scripts with user inputs using sys.argv?" +objectives: +- "Make code executable from the Linux command line." +- "Use sys.argv() to accept user inputs." +keypoints: +- "You must `import sys` in your code to accept user arguments." +- "The name of the script itself is always `sys.argv[0]` so the first user input is normally `sys.argv[1]`." +--- +## Creating and running a python input file + +We are now going to move our geometry analysis code out of the Jupyter notebook and into a format that can be run from the Linux command line. Open your favorite text editor and create a new file called "geom_analysis.py" (or choose another filename, just make sure the extension is .py). Paste in your geometry analysis code (the version with your functions) from your jupyter notebook and save your file. + +The best practice is to put all your functions at the top of the file, right after your import statements. Your file will look something like this. +``` +import numpy +import os + +def calculate_distance(atom1_coord, atom2_coord): + x_distance = atom1_coord[0] - atom2_coord[0] + y_distance = atom1_coord[1] - atom2_coord[1] + z_distance = atom1_coord[2] - atom2_coord[2] + bond_length_12 = numpy.sqrt(x_distance**2+y_distance**2+z_distance**2) + return bond_length_12 + +def bond_check(atom_distance, minimum_length=0, maximum_length=1.5): + if atom_distance > minimum_length and atom_distance <= maximum_length: + return True + else: + return False + +def open_xyz(filename): + xyz_file = numpy.genfromtxt(fname=filename, skip_header=2, dtype='unicode') + symbols = xyz_file[:,0] + coord = (xyz_file[:,1:]) + coord = coord.astype(numpy.float) + return symbols, coord + +file_location = os.path.join('data', 'water.xyz') +symbols, coord = open_xyz(file_location) +num_atoms = len(symbols) +for num1 in range(0,num_atoms): + for num2 in range(0,num_atoms): + if num1 + xyzfilename = sys.argv[1] +IndexError: list index out of range +``` +{: .error} +The reason it says the list index is out of range is because `sys.argv[1]` does not exist. Since the user forgot to specify the name of the xyz file, the `sys.argv` list only has one element, `sys.argv[0]`. It would be better to print an error message and let the user know that they didn't enter the input correctly. Our code is expecting exactly two inputs: the script name and the xyz file name. The easiest way to add an error message is to check the length of the sys.argv list and print an error message and exit if it does not equal the expected length. + +While you have practiced coding, you have probably seen many error messages. We can actually raise errors in our code and write error messages to our users. +``` +if len(sys.argv) < 2: + raise NameError("Incorrect input! Please specify a file to analyze.") +``` +{: .language-python} + +This will exit the code and print our error message if the user does not specify a filename. + +There are different types of errors you can raise. For example, you may want to raise a `TypeError` if you have data that is not the right type. If you want to learn more about raising errors, [see the official documenation from Python](https://docs.python.org/3/tutorial/errors.html) + +We need to add one more thing to our code. When you write a code that includes function definitions and a main script, you need to tell python which part is the main script. (This becomes very important later when we are talking about testing.) *After* your import statements and function definitions and *before* you check the length of the `sys.argv` list add this line to your code. +``` +if __name__ == "__main__": +``` +{: .language-python} + +Since this is an `if` statement, you now need to indent each line of your main script below this if statement. Be very careful with your indentation! Don't use a mixture of tabs and spaces! + +Save your code and run it again. It should work exactly as before. If you now get an error message, it is probably due to inconsistent indentation. + +``` +import os +import numpy +import sys + +def calculate_distance(atom1_coord, atom2_coord): + x_distance = atom1_coord[0] - atom2_coord[0] + y_distance = atom1_coord[1] - atom2_coord[1] + z_distance = atom1_coord[2] - atom2_coord[2] + bond_length_12 = numpy.sqrt(x_distance**2+y_distance**2+z_distance**2) + return bond_length_12 + +def bond_check(atom_distance, minimum_length=0, maximum_length=1.5): + if atom_distance > minimum_length and atom_distance <= maximum_length: + return True + else: + return False + +def open_xyz(filename): + xyz_file = numpy.genfromtxt(fname=filename, skip_header=2, dtype='unicode') + symbols = xyz_file[:,0] + coord = (xyz_file[:,1:]) + coord = coord.astype(numpy.float) + return symbols, coord + + +if __name__ == "__main__": + + if len(sys.argv) < 2: + raise NameError("Incorrect input! Please specify a file to analyze.") + + + xyz_file = sys.argv[1] + symbols, coord = open_xyz(xyz_file) + num_atoms = len(symbols) + + for num1 in range(0,num_atoms): + for num2 in range(0,num_atoms): + if num1Schedule {% if multiday %}{% endif %} - Setup + Setup Download files required for the lesson {% for episode in site.episodes %} - {% if episode.start %} {% comment %} Starting a new day? {% endcomment %} - {% assign day = day | plus: 1 %} - {% if day > 1 %} {% comment %} If about to start day 2 or later, show finishing time for previous day {% endcomment %} - {% assign hours = current | divided_by: 60 %} - {% assign minutes = current | modulo: 60 %} - - {% if multiday %}{% endif %} - {% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }} - Finish - - + {% if episode.legacy == None %} + {% if episode.start %} {% comment %} Starting a new day? {% endcomment %} + {% assign day = day | plus: 1 %} + {% if day > 1 %} {% comment %} If about to start day 2 or later, show finishing time for previous day {% endcomment %} + {% assign hours = current | divided_by: 60 %} + {% assign minutes = current | modulo: 60 %} + + {% if multiday %}{% endif %} + {% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }} + Finish + + + {% endif %} + {% assign current = site.start_time %} {% comment %}Re-set start time of this episode to general daily start time {% endcomment %} {% endif %} - {% assign current = site.start_time %} {% comment %}Re-set start time of this episode to general daily start time {% endcomment %} - {% endif %} - {% assign hours = current | divided_by: 60 %} - {% assign minutes = current | modulo: 60 %} - - {% if multiday %}{% if episode.start %}Day {{ day }}{% endif %}{% endif %} - {% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }} - - {% assign lesson_number = lesson_number | plus: 1 %} - {{ lesson_number }}. {{ episode.title }} - - - {% if episode.break %} - Break - {% else %} - {% if episode.questions %} - {% for question in episode.questions %} - {{question|markdownify|strip_html}} - {% unless forloop.last %} -
- {% endunless %} - {% endfor %} + {% assign hours = current | divided_by: 60 %} + {% assign minutes = current | modulo: 60 %} + + {% if multiday %}{% if episode.start %}Day {{ day }}{% endif %}{% endif %} + {% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }} + + {% assign lesson_number = lesson_number | plus: 1 %} + {{ lesson_number }}. {{ episode.title }} + + + {% if episode.break %} + Break + {% else %} + {% if episode.questions %} + {% for question in episode.questions %} + {{question|markdownify|strip_html}} + {% unless forloop.last %} +
+ {% endunless %} + {% endfor %} + {% endif %} {% endif %} - {% endif %} - - - {% assign current = current | plus: episode.teaching | plus: episode.exercises | plus: episode.break %} + + + {% assign current = current | plus: episode.teaching | plus: episode.exercises | plus: episode.break %} + {% endif %} {% endfor %} {% assign hours = current | divided_by: 60 %} {% assign minutes = current | modulo: 60 %} @@ -77,4 +77,59 @@

Schedule

The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.

- +

Alternate Lessons

+ +

+ Alternate lessons are shown below. +

+ + + {% for episode in site.episodes %} + {% if episode.alternate %} + {% if episode.start %} {% comment %} Starting a new day? {% endcomment %} + {% assign day = day | plus: 1 %} + {% if day > 1 %} {% comment %} If about to start day 2 or later, show finishing time for previous day {% endcomment %} + {% assign hours = current | divided_by: 60 %} + {% assign minutes = current | modulo: 60 %} + + {% if multiday %}{% endif %} + + + + + {% endif %} + {% assign current = site.start_time %} {% comment %}Re-set start time of this episode to general daily start time {% endcomment %} + {% endif %} + {% assign hours = current | divided_by: 60 %} + {% assign minutes = current | modulo: 60 %} + + {% if multiday %}{% endif %} + + + + + {% assign current = current | plus: episode.teaching | plus: episode.exercises | plus: episode.break %} + {% endif %} + {% endfor %} + {% assign hours = current | divided_by: 60 %} + {% assign minutes = current | modulo: 60 %} +
{% if hours < 10 %}0{% endif %}{{ hours }}:{% if minutes < 10 %}0{% endif %}{{ minutes }}Finish
{% if episode.start %}Day {{ day }}{% endif %} + {% assign lesson_number = lesson_number | plus: 1 %} + {{ episode.title }} + + {% if episode.break %} + Break + {% else %} + {% if episode.questions %} + {% for question in episode.questions %} + {{question|markdownify|strip_html}} + {% unless forloop.last %} +
+ {% endunless %} + {% endfor %} + {% endif %} + {% endif %} +
+ + + \ No newline at end of file From dfa04b8215189818bfab3ec195fceadbc2e3fa54 Mon Sep 17 00:00:00 2001 From: Jessica Nash Date: Sun, 13 Feb 2022 09:15:54 -0500 Subject: [PATCH 2/2] switch template to have molssi branding --- _config.yml | 2 +- _extras/about.md | 2 +- _includes/carpentries.html | 70 --------------------- _includes/favicons.html | 19 ++---- _includes/lesson_footer.html | 12 ++-- _includes/molssi.html | 29 +++++++++ assets/css/lesson.scss | 48 +++++++++++--- assets/favicons/molssi/favicon-128.png | Bin 0 -> 7602 bytes assets/favicons/molssi/favicon-152x152.png | Bin 0 -> 9056 bytes assets/favicons/molssi/favicon-16x16.png | Bin 0 -> 934 bytes assets/favicons/molssi/favicon-196x196.png | Bin 0 -> 11270 bytes assets/favicons/molssi/favicon-32x32.png | Bin 0 -> 928 bytes assets/favicons/molssi/favicon-96x96.png | Bin 0 -> 5198 bytes assets/favicons/molssi/molssi.jpg | Bin 0 -> 16562 bytes 14 files changed, 80 insertions(+), 102 deletions(-) delete mode 100644 _includes/carpentries.html create mode 100644 _includes/molssi.html create mode 100644 assets/favicons/molssi/favicon-128.png create mode 100644 assets/favicons/molssi/favicon-152x152.png create mode 100644 assets/favicons/molssi/favicon-16x16.png create mode 100644 assets/favicons/molssi/favicon-196x196.png create mode 100644 assets/favicons/molssi/favicon-32x32.png create mode 100644 assets/favicons/molssi/favicon-96x96.png create mode 100644 assets/favicons/molssi/molssi.jpg diff --git a/_config.yml b/_config.yml index d6ce4e5..88ba749 100644 --- a/_config.yml +++ b/_config.yml @@ -7,7 +7,7 @@ # dc: Data Carpentry # lc: Library Carpentry # cp: Carpentries (to use for instructor traning for instance) -carpentry: "swc" +carpentry: "molssi" # Overall title for pages. title: "Python Scripting for Computational Molecular Science" diff --git a/_extras/about.md b/_extras/about.md index 22dee7e..78591b0 100644 --- a/_extras/about.md +++ b/_extras/about.md @@ -10,5 +10,5 @@ title: About
-{% include carpentries.html %} +{% include molssi.html %} {% include links.md %} diff --git a/_includes/carpentries.html b/_includes/carpentries.html deleted file mode 100644 index c032bd5..0000000 --- a/_includes/carpentries.html +++ /dev/null @@ -1,70 +0,0 @@ -{% comment %} - General description of Software, Data, and Library Carpentry. -{% endcomment %} - -{% include base_path.html %} - -
-
- The Carpentries logo -
-
-

The Carpentries comprises - Software Carpentry, Data Carpentry, and Library Carpentry communities of Instructors, Trainers, - Maintainers, helpers, and supporters who share a mission to teach - foundational coding and data science skills to researchers and people - working in library- and information-related roles. In January, - 2018, The Carpentries was formed by the merger of Software Carpentry and - Data Carpentry. Library Carpentry became an official Carpentries Lesson Program in November 2018.

- -

While individual lessons and workshops continue to be run under each - lesson project, The Carpentries provide overall staffing and governance, as - well as support for assessment, instructor training and mentoring. - Memberships are joint, and the Carpentries project maintains a shared Code - of Conduct. The Carpentries is a fiscally sponsored project of Community - Initiatives, a registered 501(c)3 non-profit based in California, USA.

-
-
-
-
- Software Carpentry logo -
-
-

Since 1998, Software Carpentry has - been teaching researchers across all disciplines the foundational coding - skills they need to get more done in less time and with less pain. Its - volunteer instructors have run hundreds of events for thousands of learners - around the world. Now that all research involves some degree of - computational work, whether with big data, cloud computing, or simple task - automation, these skills are needed more than ever.

-
-
-
-
-
- Data Carpentry logo -
-
-

Data Carpentry develops and teaches - workshops on the fundamental data skills needed to conduct research. Its - target audience is researchers who have little to no prior computational - experience, and its lessons are domain specific, building on learners' - existing knowledge to enable them to quickly apply skills learned to their - own research. Data Carpentry workshops take researchers through the entire - data life cycle.

-
-
-
-
-
- Library Carpentry logo -
-
-

Library Carpentry develops lessons and - teaches workshops for and with people working in library- and - information-related roles. Its goal is to create an on-ramp to empower this - community to use software and data in their own work, as well as be - advocates for and train others in efficient, effective and reproducible data - and software practices.

-
-
diff --git a/_includes/favicons.html b/_includes/favicons.html index 8a50b4d..fb00115 100644 --- a/_includes/favicons.html +++ b/_includes/favicons.html @@ -1,4 +1,4 @@ -{% assign favicon_url = relative_root_path | append: '/assets/favicons/' | append: site.carpentry %} +{% assign favicon_url = site.baseurl | append: '/assets/favicons/' | append: site.carpentry | prepend: site.url %} {% if site.carpentry == 'swc' %} {% assign carpentry = 'Software Carpentry' %} @@ -8,26 +8,15 @@ {% assign carpentry = 'Library Carpentry' %} {% elsif site.carpentry == 'cp' %} {% assign carpentry = 'The Carpentries' %} +{% elsif site.carpentry == 'molssi' %} +{% assign carpentry = 'The Molecular Sciences Software Institute' %} {% endif %} - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/_includes/lesson_footer.html b/_includes/lesson_footer.html index 5f55b50..1f9e270 100644 --- a/_includes/lesson_footer.html +++ b/_includes/lesson_footer.html @@ -10,25 +10,25 @@
- Using The Carpentries style + Using a MolSSI modification of The Carpentries style version 9.5.0.
- + \ No newline at end of file diff --git a/_includes/molssi.html b/_includes/molssi.html new file mode 100644 index 0000000..578a3b7 --- /dev/null +++ b/_includes/molssi.html @@ -0,0 +1,29 @@ +{% comment %} + General description of The Molecular Sciences Software Institute. +{% endcomment %} +
+
+ MolSSI logo +
+
+ Since its launch in 2016, The Molecular Sciences Software Institute, has served as a nexus for the + broad computational molecular sciences community by providing software expertise, community engagement and leadership, and education + and training. Through a broad array of software infrastructure projects, teaching workshops, and community outreach, the MolSSI is + catalyzing the scientific advances needed to solve emerging scientific computing Grand Challenges. +
+
+ +
+
+

Education of students, post-docs, and faculty on programming and Best Practices in Software Development is a large part of MolSSI's mission. + Our education program consists of our cohorts of Software Fellows, + online training materials, + and multiple workshops online or in-person at various locations each year. +

+

MolSSI’s education techniques and practices are modeled after The Software Carpentries + style to teaching novice software best practices. This approach teaches subjects that not only increase a student’s scientific + capability and efficiency, but also his/her future marketability in both scientific and non-scientific fields. +

+
+
+ diff --git a/assets/css/lesson.scss b/assets/css/lesson.scss index 0401011..0b5db19 100644 --- a/assets/css/lesson.scss +++ b/assets/css/lesson.scss @@ -10,6 +10,7 @@ $color-brand: #2b3990 !default; // code boxes $color-error: #bd2c00 !default; +$color-warning: #cda01d !default; $color-output: #303030 !default; $color-source: #360084 !default; @@ -36,9 +37,10 @@ $color-testimonial: #fc8dc1 !default; border-radius: 4px 0 0 4px; } -.error { @include cdSetup($color-error); } -.output { @include cdSetup($color-output); } -.source { @include cdSetup($color-source); } +.error { @include cdSetup($color-error); } +.warning { @include cdSetup($color-warning); } +.output { @include cdSetup($color-output); } +.source { @include cdSetup($color-source); } .bash, .language-bash { @include cdSetup($color-source); } .make, .language-make { @include cdSetup($color-source); } @@ -48,6 +50,7 @@ $color-testimonial: #fc8dc1 !default; .sql, .language-sql { @include cdSetup($color-source); } .error::before, +.warning:before, .output::before, .source::before, .bash::before, .language-bash::before, @@ -56,13 +59,14 @@ $color-testimonial: #fc8dc1 !default; .python::before, .language-python::before, .r::before, .language-r::before, .sql::before, .language-sql::before { - background-color: #f2eff6; - display: block; - font-weight: bold; - padding: 5px 10px; + background-color: #f2eff6; + display: block; + font-weight: bold; + padding: 5px 10px; } .error::before { background-color: #ffebe6; content: "Error"; } +.warning:before { background-color: #f8f4e8; content:" Warning"; } .output::before { background-color: #efefef; content: "Output"; } .source::before { content: "Code"; } .bash::before, .language-bash::before { content: "Bash"; } @@ -72,7 +76,26 @@ $color-testimonial: #fc8dc1 !default; .r::before, .language-r::before { content: "R"; } .sql::before, .language-sql::before { content: "SQL"; } +// Tab panels are used on Setup pages to show instructions for different Operating Systems +.tab-pane { + border: solid 1px #ddd; // #ddd == @nav-tabs-active-link-hover-border-color + border-top: none; + padding: 20px 20px 10px 20px; + border-radius: 0 0 4px 4px; // 4px == @border-radius-base +} + +// Stripe above tab panels where OS tabs are shown +ul.nav.nav-tabs { + background: #E1E1E1; + border-radius: 4px 4px 0 0; // 4px == @border-radius-base +} +// This color provides better contrast ratio on most backgrounds used on Carpentries websites +// 9.24 on FFFFFF: https://webaim.org/resources/contrastchecker/?fcolor=204A6F&bcolor=FFFFFF&api (body) +// 8.78 on F9F9F9: https://webaim.org/resources/contrastchecker/?fcolor=204A6F&bcolor=F9F9F9&api (tables) +// 7.07 on E1E1E1: https://webaim.org/resources/contrastchecker/?fcolor=204A6F&bcolor=E1E1E1&api (tab panels) +a { color: #ed1c24FF; } +a:hover{ color: #393536ff; } //---------------------------------------- // Specialized blockquote environments for learning objectives, callouts, etc. //---------------------------------------- @@ -156,6 +179,8 @@ blockquote :not(h2) + p { // Override Bootstrap settings. //---------------------------------------- +blockquote { font-size: inherit; } + code { white-space: nowrap; padding: 2px 5px; @@ -163,6 +188,11 @@ code { background-color: #e7e7e7; } +samp { hyphens: none; } + +dt { margin-top: 20px; } +dd { margin-left: 2em; } + article img { display: block; margin: 20px auto; @@ -197,7 +227,7 @@ article pre { text-align: center; } -footer .copyright, +footer .license, footer .help-links { font-size: inherit; @@ -278,4 +308,4 @@ kbd { box-shadow: 0 1px 0 rgba(12,13,14,0.2), 0 0 0 2px #FFF inset; white-space: nowrap; font-style: normal; -} +} \ No newline at end of file diff --git a/assets/favicons/molssi/favicon-128.png b/assets/favicons/molssi/favicon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..30eab74ba230244243a007a53c527ad0c0452d55 GIT binary patch literal 7602 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 IM6N<$f>hMMX#fBK literal 0 HcmV?d00001 diff --git a/assets/favicons/molssi/favicon-196x196.png b/assets/favicons/molssi/favicon-196x196.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc82a31d20cb3ab6d8ef9a28befc7b709c003a2 GIT binary patch literal 11270 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 B_geq} literal 0 HcmV?d00001 diff --git a/assets/favicons/molssi/favicon-32x32.png b/assets/favicons/molssi/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..94940c2ca130aa5075953c7e65c42fb6632c2fa2 GIT binary patch literal 928 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 literal 0 HcmV?d00001 diff --git a/assets/favicons/molssi/molssi.jpg b/assets/favicons/molssi/molssi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..604018bfd2957fe5cc98abf76bce97bf4e06dcdd GIT binary patch literal 16562 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 A;s5{u literal 0 HcmV?d00001