Git Product home page Git Product logo

astropy-workshop's Introduction

Python and Astropy for Astronomical Data Analysis

Workshop at the 245th Meeting of the AAS in National Harbor, MD, USA

  • DATE: TBD
  • TIME: TBD
  • LOCATION: TBD

PRE-WORKSHOP SETUP

Please be sure your laptop is properly configured before the workshop by following the installation and setup instructions.

Warning: Installation and setup could take as long as one hour depending on your current configuration and internet speeds. DO NOT WAIT UNTIL THE DAY OF THE WORKSHOP.

If you have any trouble, we will have facilitators on-site as early as 8:30 AM local time who can help you in person.

As an alternative, a workshop session can be run on mybinder.org via this link: Binder

Schedule

Time (PT) Topic Presenter/Instructor
9:00 - 9:10am Install and config help, if needed Brett Morris (@bmorris3)
9:10 - 9:20am Intro to Astropy and Code of Conduct Kelle Cruz (@kelle)
9:20 - 9:45am Astropy Units, Quantities, and Constants
9:45 - 10:15am Intro to Object Oriented Programming (OOP)
10:15 - 10:30am BREAK
10:30 - 11:00am Coordinates
11:00 - 11:30pm Astropy Tables
11:30 – 12:00pm I/O: FITS and ASCII
12:00 - 1:30pm LUNCH
1:30 - 2:00pm Specutils
2:00 - 2:30pm Photutils
2:30 - 3:00pm BREAK
3:00 - 3:20pm Explore together time
3:20 - 3:40pm Uncertainty
3:40 - 4:00pm Astropy Communities & Contributing to Astropy
4:00 - 5:30pm Explore together time

Additional Helpers

TBD

Description

This workshop covers the use of Python tools for astronomical data analysis and visualization, with the focus primarily on UV, Optical, and IR data. Data analysis tools for JWST are being written in Python and distributed as part of Astropy, a community developed Python library for astronomy, and its affiliated packages.

The workshop goals introduce you to the variety of tools which are already available inside the Astropy library as well as provide ample hands-on time during which you’ll be able to explore the science analysis capabilities which the greater Python environment and community provide.

We plan on accomplishing this with brief overview talks on the main tools followed by extended instructor guided tutorials where you’ll be able to try them out for yourself and ask questions in the company of expert users and developers.

Some basic Python experience is highly recommended to be able to effectively participate in the exercises, but those without Python experience will still get much useful information about the capabilities for data analysis in Python and perhaps pick up some pointers on where they can get started learning more scientific Python and integrating it into their work flow.

If you would like to get a head start with the tools we will be concentrating on you can check out their documentation on readthedocs:

Problems or Questions?

We encourage you to submit any problems or questions you have to this repository issue tracker by choosing the "Question from workshop participant" issue template.

Past Workshops

Materials from past workshops can be found in other branches on this repo and in the past-astropy-workshops repo.

astropy-workshop's People

Contributors

adrn avatar bmorris3 avatar bsipocz avatar cshanahan1 avatar eblur avatar elliesch avatar eteq avatar juancab avatar kelle avatar larrybradley avatar lglattly avatar lpsinger avatar mwcraig avatar nden avatar nstarman avatar pllim avatar r-lange avatar sosey avatar stargaser avatar weaverba137 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

astropy-workshop's Issues

Update slides

Some slides might need updating. Someone with a Mac should do this.

I mean in the general sense, not like #9.

Error in photutils_local_background

In the cell In[12], running this code:

phot['annulus_mean'] = phot['annulus_sum'] / bkg_aper.area()
phot

I get this traceback:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-49433b94b10c> in <module>
----> 1 phot['annulus_mean'] = phot['annulus_sum'] / bkg_aper.area()
      2 phot

TypeError: 'float' object is not callable

I guess .area is now an attribute?

Drop Python Intro

Consider dropping Python Intro and rearranging schedule accordingly.

Instead, send folks pre-req materials to be sure they have some Python Intro ahead of time. (I'll make a new issue for that.)

Vet AAS235 notebooks by 2019-12-06

Pre-requisite for #65 and #80. Check the box(es) when the notebook(s) assigned to you works as intended and report back estimated time needed for participants. You are free to test other's notebooks if you wish but only the assigned instructor should sign off.

  • Do your materials work with the environment in the installation instructions? What OS and conda versions? Anaconda or Miniconda?
  • How long does it take for you to work through the materials, keeping in mind that you will likely go 2x to 3x faster than a workshop participant?

Assignments:

  • @pllim -- Astropy Units, Quantities, and Constants, see also #97 and #99 (30-min slot might not be enough)
  • @adrn -- Coordinates, see also #83 and #84 (Need to be extended to 60 mins)
  • @pllim -- I/O: FITS and ASCII, see also #101 (30-min slot okay)
  • @bsipocz -- Astropy Tables, see also #77 (Tentative: Remains 30 mins unless TimeSeries is added)
  • @stargaser -- WCS and Images, see also #102 (30-min slot okay)
  • @shannnnnyyy -- Photutils, see also #92 (40 mins without exercises)
  • @eteq -- Specutils, see also #88 and #89 (Can cut down to 30-45 min, compat with astropy 4.0 is out of scope for this issue)

Notes:

  • @pllim used Miniconda on Windows 10.

failed import: astroquery

When I run the environment check, I get the error:
Error: Failed import: No module named 'astroquery'

I'm running anaconda2 for python 2.7 on a Mac. Otherwise had no installation problems.

Tell people how to do a git pull with modified notebooks

Here is an issue that I was asked about several times. The participant has been working on notebooks all day. They realize that they need to do a git pull to do the latest. At AAS231 I think this was needed to make up for missing data files. (Side note: #14 would save us from missing data files, I think.)

I had to ask @sosey for "best practices" advice, which I recall as, tell the participant to do a "git stash", and then "git pull". I recommend this go into the README as a section like "if you need a git pull in the middle of the workshop..."

install problem

After the conda environment command, I got this:

pytest-doctestplus-0 | 13 KB | ##################################### | 100%

CondaHTTPError: HTTP 000 CONNECTION FAILED for url https://conda.anaconda.org/astropy/noarch/astroquery-0.3.9-py_1000.tar.bz2
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.

When I retried, I got this:

SpecNotFound: Invalid name, try the format: user/package

Should give more time for python "crash course" or not plan to actually go through it

The material in the "Intro to Python" is good, but it's more than 30 min worth of material when actually gone-through. For future workshops it it probably best to either allocate more time, or make it explicit what has happened in practice for the last two: we will go through the first 2 on running ipython and jupyter (since those are absolutely necessary to do the rest of the workshop), and otherwise we should say "do in advance, or as you have time"

Error in photutils_extended

In the cell In[31], running this code:

from photutils.utils import random_cmap

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 8))
ax1.imshow(data, norm=norm)
lbl1 = ax1.set_title('Data')
ax2.imshow(segm, cmap=segm.cmap())
lbl2 = ax2.set_title('Segmentation Image')

I get this traceback:

ImportError                               Traceback (most recent call last)
<ipython-input-31-63b082d1cf72> in <module>
----> 1 from photutils.utils import random_cmap
      2 
      3 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 8))
      4 ax1.imshow(data, norm=norm)
      5 lbl1 = ax1.set_title('Data')

ImportError: cannot import name 'random_cmap' from 'photutils.utils' (/Users/apricewhelan/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/photutils/utils/__init__.py)

Create installation thumb drives?

For offline installation of conda, packages, and materials we need for the workshop. Need to cover all three major OSes if possible -- OSX, Windows, Linux.

make notebooks py3 only?

mostly by removing the future statements, when the workshop material is ready to only be presented in py3

keep environment file updated

remove ginga and other unused packages.
change to astropy channel.

add instructions somewhere if you add new tutorials to update the yaml file.
Hopefully testing will help with this.

Presentation materials for instructors using OSX only

Presentation materials too Mac OSX-centric. For instance, while working on #74, I have no idea how to open the Install.key file on both Linux (RHEL 7) and Windows 10. Thus, I was unable to view/edit it.

In other sections, I see PDF but that is view-only, so I still cannot edit them as a potential instructor who does not own a Mac.

Revise "Other list" in schedule

I suppose it wouldn't hurt to review the list under:

Other tools we can answer questions about but probably won't discuss explicitly

Currently there are 5 (6) packages listed there, and I suspect the subset of us not from ST cannot really answer questions about them.

Error in Specutils_analysis

Cell: In[8]

from specutils.manipulation import extract_region

subspec = extract_region(sdss_spec, pixel_region)
plt.step(subspec.wavelength, subspec.flux)

analysis.snr(subspec)

I get this traceback:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndslicing.py in _slice_wcs(self, item)
    122         try:
--> 123             llwcs = SlicedLowLevelWCS(self.wcs.low_level_wcs, item)
    124             return HighLevelWCSWrapper(llwcs)

AttributeError: 'GWCSAdapter' object has no attribute 'low_level_wcs'

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-8-1cc89492a8c0> in <module>
      1 from specutils.manipulation import extract_region
      2 
----> 3 subspec = extract_region(sdss_spec, pixel_region)
      4 plt.step(subspec.wavelength, subspec.flux)
      5 

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/specutils/manipulation/extract_spectral_region.py in extract_region(spectrum, region)
    133                 left_index, right_index = right_index, left_index
    134 
--> 135             extracted_spectrum.append(spectrum[left_index:right_index])
    136 
    137     # If there is only one subregion in the region then we will

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/specutils/spectra/spectrum1d.py in __getitem__(self, item)
    170                     if self.uncertainty is not None else None)
    171 
--> 172         return super().__getitem__(item)
    173 
    174     def _copy(self, **kwargs):

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndslicing.py in __getitem__(self, item)
     60 
     61         # Let the other methods handle slicing.
---> 62         kwargs = self._slice(item)
     63         return self.__class__(**kwargs)
     64 

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndslicing.py in _slice(self, item)
     90         kwargs['uncertainty'] = self._slice_uncertainty(item)
     91         kwargs['mask'] = self._slice_mask(item)
---> 92         kwargs['wcs'] = self._slice_wcs(item)
     93         # Attributes which are copied and not intended to be sliced
     94         kwargs['unit'] = self.unit

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndslicing.py in _slice_wcs(self, item)
    124             return HighLevelWCSWrapper(llwcs)
    125         except Exception as err:
--> 126             self._handle_wcs_slicing_error(err, item)
    127 
    128     # Implement this in a method to allow subclasses to customise the error.

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndslicing.py in _handle_wcs_slicing_error(self, err, item)
    130         raise ValueError(f"Slicing the WCS object with the slice '{item}' "
    131         "failed, if you want to slice the NDData object without the WCS, you "
--> 132         "can remove by setting `NDData.wcs = None` and then retry.") from err

ValueError: Slicing the WCS object with the slice 'slice(2100, 2600, None)' failed, if you want to slice the NDData object without the WCS, you can remove by setting `NDData.wcs = None` and then retry.

Make a pre-workshop survey by 2019-12-15

In past Astropy workshop surveys, people were asked to describe their comfort levels and use of Python and Astropy affiliated packages before the workshop vs after. But all responses seemed geared towards their attitudes after the workshop.

We need separate pre- and post-workshop surveys so we can better assess the effects of the workshop.

Try to get two more helpers for 2020 AAS workshop

Right now we have 7 instructors for 90 participants slots. To get 1:10 ratio we should call for two more helpers. Will send out a message to astropy-dev and then try via other channels if that doesn't work (or do nothing... 7 helpers for 90 participants is doable, if not ideal).

Update schedule for AAS235

  • Update schedule with known immediate actions (esp #59)
  • Ask teachers (when that list exists, which @stargaser is working on) to do their lessons, and report back how long it takes (deadline is 2019-12-06, #90 )
  • Update schedule based on that feedback

astroquery error in coordinates notebook

In In[15], from running this:

from astroquery.sdss import SDSS
sdss = SDSS.query_region(coordinates=hcg7_center, radius=20*u.arcmin, 
                         spectro=True, 
                         photoobj_fields=['ra','dec','u','g','r','i','z'])

I get:

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-15-7c3b8bbd638e> in <module>
----> 1 from astroquery.sdss import SDSS
      2 sdss = SDSS.query_region(coordinates=hcg7_center, radius=20*u.arcmin, 
      3                          spectro=True,
      4                          photoobj_fields=['ra','dec','u','g','r','i','z'])

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astroquery/sdss/__init__.py in <module>
     25 conf = Conf()
     26 
---> 27 from .core import SDSS, SDSSClass

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astroquery/sdss/core.py in <module>
     17 from ..utils import commons, async_to_sync, prepend_docstr_nosections
     18 from ..exceptions import RemoteServiceError, NoResultsWarning
---> 19 from .field_names import (photoobj_defs, specobj_defs,
     20                           crossid_defs, get_field_info)
     21 

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astroquery/sdss/field_names.py in <module>
     11 
     12 from . import conf
---> 13 from ..utils.testing_tools import MockResponse
     14 
     15 __all__ = ['get_field_info', 'photoobj_defs', 'specobj_defs', 'crossid_defs']

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astroquery/utils/testing_tools.py in <module>
      4 import json
      5 
----> 6 import pytest
      7 
      8 # save original socket method for restoration

ModuleNotFoundError: No module named 'pytest'

Error in specutils_overview

In the cell In[10], running this code:

newspec1d - jyspec1d

I get this traceback:

---------------------------------------------------------------------------
UnitConversionError                       Traceback (most recent call last)
~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/quantity_helper/helpers.py in get_converter(from_unit, to_unit)
     31     try:
---> 32         scale = from_unit._to(to_unit)
     33     except UnitsError:

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/core.py in _to(self, other)
    950         raise UnitConversionError(
--> 951             f"'{self!r}' is not a scaled version of '{other!r}'")
    952 

UnitConversionError: 'Unit("Jy")' is not a scaled version of 'Unit("erg / (Angstrom cm2 s)")'

During handling of the above exception, another exception occurred:

UnitConversionError                       Traceback (most recent call last)
~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/quantity_helper/helpers.py in get_converters_and_unit(f, unit1, unit2)
     76         try:
---> 77             converters[changeable] = get_converter(unit2, unit1)
     78         except UnitsError:

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/quantity_helper/helpers.py in get_converter(from_unit, to_unit)
     34         return from_unit._apply_equivalencies(
---> 35                 from_unit, to_unit, get_current_unit_registry().equivalencies)
     36     except AttributeError:

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/core.py in _apply_equivalencies(self, unit, other, equivalencies)
    887             "{} and {} are not convertible".format(
--> 888                 unit_str, other_str))
    889 

UnitConversionError: 'Jy' (spectral flux density) and 'erg / (Angstrom cm2 s)' (spectral flux density wav) are not convertible

During handling of the above exception, another exception occurred:

UnitConversionError                       Traceback (most recent call last)
<ipython-input-10-0477c1496b1f> in <module>
----> 1 newspec1d - jyspec1d

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/specutils/spectra/spectrum1d.py in __sub__(self, other)
    334 
    335         return self.subtract(
--> 336             other, compare_wcs=lambda o1, o2: self._compare_wcs(self, other))
    337 
    338     def __mul__(self, other):

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndarithmetic.py in subtract(self, operand, operand2, **kwargs)
    524     def subtract(self, operand, operand2=None, **kwargs):
    525         return self._prepare_then_do_arithmetic(np.subtract, operand, operand2,
--> 526                                                 **kwargs)
    527 
    528     @sharedmethod

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndarithmetic.py in _prepare_then_do_arithmetic(self_or_cls, operation, operand, operand2, **kwargs)
    612 
    613         # Now call the _arithmetics method to do the arithmetics.
--> 614         result, init_kwds = operand._arithmetic(operation, operand2, **kwargs)
    615 
    616         # Return a new class based on the result

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndarithmetic.py in _arithmetic(self, operation, operand, propagate_uncertainties, handle_mask, handle_meta, uncertainty_correlation, compare_wcs, **kwds)
    244         # Then calculate the resulting data (which can but not needs to be a
    245         # quantity)
--> 246         result = self._arithmetic_data(operation, operand, **kwds2['data'])
    247 
    248         # Determine the other properties

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/nddata/mixins/ndarithmetic.py in _arithmetic_data(self, operation, operand, **kwds)
    320         else:
    321             result = operation(self.data * self.unit,
--> 322                                operand.data * operand.unit)
    323 
    324         return result

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/quantity.py in __array_ufunc__(self, function, method, *inputs, **kwargs)
    459         # consistent units between two inputs (e.g., in np.add) --
    460         # and the unit of the result (or tuple of units for nout > 1).
--> 461         converters, unit = converters_and_unit(function, method, *inputs)
    462 
    463         out = kwargs.get('out', None)

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/quantity_helper/converters.py in converters_and_unit(function, method, *args)
    164 
    165         # Determine possible conversion functions, and the result unit.
--> 166         converters, result_unit = ufunc_helper(function, *units)
    167 
    168         if any(converter is False for converter in converters):

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/units/quantity_helper/helpers.py in get_converters_and_unit(f, unit1, unit2)
     80                 "Can only apply '{}' function to quantities "
     81                 "with compatible dimensions"
---> 82                 .format(f.__name__))
     83 
     84         return converters, unit1

UnitConversionError: Can only apply 'subtract' function to quantities with compatible dimensions

be consistent with the use of matplotlib magics, or explain the difference

The notebooks have a mix of matplotlib magics, notebook vs inline, it might be good to either have a short section explaining the difference, or comments around the sections those magics appear, or teach from a common command so that it's not confusing for those who are new to matplotlib and notebooks.

improve modeling notebook

include more practical examples

  • compound models: add two gaussians together to get a spectral line
  • model composition: fitting an image of a galaxy for a model including a disk piped into rotation.

Update environment for 2020

For the AAS 2020 workshop, @pllim is proposing we switch to "mostly pip" as the source of packages. That is, conda only for things where it's really necessary/useful (scipy, matplotlib, nodejs, numpy), and stick with pip for the python-only packages.

Also need to update to python 3.7, and use astropy 4.0 (rc for now, release by the time of workshop, hopefully).

@pllim says she'll do this in the next week.

Create issue template for workshop attendees

@pllim is going to set up an issue template for workshop attendees to ask for help before the workshop. This template should use github's fancy machinery to auto-add a label (which @pllim found via google but I can't find now...).

This would use the question label, so then helpers can filter on that label to watch for questions (or "not that label" for non-question issues)

Error in photutils_overview

In the cell In[27], running:

phot = aperture_photometry(data * unit, aperture, error=tot_error * u.adu)
phot

I get this traceback:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-27-dd856df23ce6> in <module>
----> 1 phot = aperture_photometry(data * unit, aperture, error=tot_error * u.adu)
      2 phot

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/astropy/utils/decorators.py in wrapper(*args, **kwargs)
    519                             kwargs[new_name[i]] = value
    520 
--> 521             return function(*args, **kwargs)
    522 
    523         return wrapper

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/photutils/aperture/photometry.py in aperture_photometry(data, apertures, error, mask, method, subpixels, unit, wcs)
    196     # handle data, error, and unit inputs
    197     # output data and error are ndarray without units
--> 198     data, error, unit = _handle_units(data, error, unit)
    199 
    200     # compute variance and apply input mask

~/anaconda/envs/astropy-workshop/lib/python3.7/site-packages/photutils/aperture/_photometry_utils.py in _handle_units(data, error, unit)
    136         if error is not None:
    137             if unit != error.unit:
--> 138                 raise ValueError('data and error must have the same units.')
    139             error = error.value
    140 

ValueError: data and error must have the same units.

[Question] Just testing this template

Which workshop are you sign up for?

235th AAS

What is your operating system?

Windows 10

Describe your question/problem

No problem. Everything is awesome!

Do not duplicate instructor info in multiple READMEs

Instructor assignments are in the root-level README, but then I also see instructor names listed in individual chapter READMEs. This only increases maintenance burden for future workshops and the risk of all the READMEs have conflicting information.

I propose that instructors to be only listed in root-level README.

Send email to instructors with very clear testing instructions and deadline of 2019-12-06

This is an ASAP to-do, particularly given #72 and the need to get install instructions out by mid-Dec. Gist is that we need to send an email to the instructors asking them to do their sections and report back:

  • How long it takes them to do it (bearing in mind that an instructor will probably go 2x to 3x faster than a student)
  • Affirming that they followed the install instructions, and report if it worked correctly with 4.0rc1.

The deadline to ask the instructors to do this is Dec 6 so that there's time to fold that into the #72 discussion.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.