Code Monkey home page Code Monkey logo

aplpy's Introduction

aplpy's People

Contributors

alexavillaume avatar astr2600student avatar astrofrog avatar barentsen avatar bmarcote avatar bsipocz avatar cdeil avatar ebressert avatar embray avatar eteq avatar haleygomez avatar hamogu avatar jdmcbr avatar jzuhone avatar kbarbary avatar keflavich avatar larrybradley avatar mdboom avatar mhardcastle avatar mpound avatar mwcraig avatar nbrunett avatar olebole avatar rmcgibbo avatar saimn avatar sargas avatar smaret avatar vlas-sokolov avatar wkerzendorf avatar ysbach 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  avatar  avatar

aplpy's Issues

Features request

It would be very useful to implement the followings in the next version. If these features exist in the current version, please let me know.

-- label for color bar (i think somebody already mentioned this)

Thanks.

Image does not rotate for CROTA2 keyword in fits header

When I display a fits image in APLpy, it always is rectangular with the x,y axes of the image parallel to x,y axes of the plot axes and the x,y axes of the plot window.

This does not change, if the fits file has the CROTA2 keyword. When I move the mouse over the plot window it shows me the right coordinates, i.e. if I move up, both RA and DEC change (e.g. for an CROTA2 = 45 they change by the same amount). I cross-checked the coordinates of stars in ds9 and it really works. However, the RA and DEC axes plotted by APLpy are still parallel to the plot window, thus they are wrong.

Either the image must be plotted in a rotated fashion so that north is up and east is left, or the RA and DEC axes have to be rotated to be in line with the picture. As long as APLpy does not support either of that, it should may print a warning message.

I can supply an example image on request.

Colormap bug

There's a colormap bug where only the jet colormap is used in APLpy. Even when the cmap option is set to another colormap, it does not change. This problem is only seen in the development version.

Offset tick position option

Add the option to have the axes labeled in offset coordinates relative to a chosen point in the field of view. E.g. with ticks at [ -1, -0.5, 0, 0.5, 1] arcseconds for the 2.4" FOV.

Example code:

f = APYpy.FITSFigure('some_tiny_AO_image.fits')
f.show_greyscale(stretch='log')
f.set_tick_relative(True)
f.set_tick_relative_to( (200,150) )

Marshall Perrin suggested the idea. Thanks!

Option to rotate tick labels

Originally submitted by Matthijs van der Wiel:

Tick labels are presented horizontally by default. Some users might prefer to have them vertically, or anywhere in between.

Use isinstance for string tests

In rgb.py:make_rgb_image (and maybe elsewhere), you should not test a string with:

if type(data) == str:

which will fail for 'unicode' strings, but:

if isinstance(data, basestring)

Add ability to work with non-astronomical coordinate axes

Originally submitted by Jeff Mangum:

In addition to the standard (RA,Dec) coordinates, it would be very useful if APLpy could work with image (cubes) that have arbitrary axes. For example, (density, column density, kinetic temperature).

version 0.9.7

I know this site is for posting issues and requesting features. I don't find a suitable place to post this. I am curious to know when version 0.9.7 is ready for release. I am very keen to use the arbitrary coordinate system feature to plot position-velocity map and slicing 3D cube. If not, I am willing to download an unstable version, test it out and provide comments. Thanks.

Feature request: load parts of FITS files

Since I'm dealing with very large FITS files (~400MB/file) and having to plot small sections from lots of those files, it takes an awefully long time to build an aplpy.FITSFigure out of it. As far as I know, there is no possibility to tell FITSFigure to load only a certain part of an image, e.g. by something like
f = pyfits.open('bigimage.fits') scidata = f[1].data fig = aplpy.FITSFigure(scidata[1:100, 1:100])
or the like. I don't know if it's possible, but it would be very helpful.

Infinite loop bug. Related to axis ticks with big field of view?

Gday,

I've encountered a problem with aplpy 0.9.6 where it goes into an infinite CPU loop with certain images.

The problem occurs in the FITSFigure constructor. I've done some investigation and the problem appears to be related to axis ticks and the WCS tick locator.

The images in question are from the MWA telescope and have massive fields of view (>30 degrees), including some where some pixels are actually outside the celestial sphere.

The problem is 100% repeatable and I can't see a workaround. I can supply an example image if you contact me directly: jbanyer (at) gmail.com

ps - I'm developing a transient detection pipeline using Python and Django for the interface. aplpy suits my needs perfectly! Thanks for the awesome library. Just need to fix this issue....

Cheers,
Jay.

use .savefig for .save

In order to follow the conventions of the well known commands of matplotlob, maybe save should be renamed savefig (or, to avoid a backwards compatibility problems, you could make and alias for save that is called savefig).

Add support for B1950 conversion

In order to overlay contours from B1950 images onto J2000 images or vice versa, or B1950 onto Galactic or vice-versa, need to implement B1950 to J2000 conversion and opposite conversion.

linestyle of patches

The linestyle keyword does not seem to be passed correctly when using show_rectangles or show_circles to plot e.g. dashed shapes. However, if I use plot.get_layer('rectangle_set_1').set_linestyle('dotted') then refresh this works. I'm using matplotlib 1.0 and the latest version of aplpy.

from an array or a ndimage to a FITS file

hi,
is it possible to have the inverse of the AplPy point of entry FitsFigure : a piece of code that would take all relevant information concerning the sky coordinates of an image given as array or ndimage and create the equivalent of FitsFigure?

Lots of problems with CASA (continuum) images

CASA writes out continuum images with NAXIS=4, but two axes (Stokes and Freq) have length 1 by default.

>>> F = aplpy.FITSFigure('W51msAD129.fits')

Exception: 
    Attempted to read in 4-dimensional FITS cube, but
    dimensions and slices were not specified. Please specify these
    using the dimensions= and slices= argument. The cube dimensions
    are:

           0 RA---SIN 512
           1 DEC--SIN 512
           2 FREQ 1
           3 STOKES 1


>>> F = aplpy.FITSFigure('W51msAD129.fits', dimensions=[2,3])

InvalidTransformError: Invalid coordinate transformation parameters

If I strip out all of the "bad" header keywords (PC*, C*[34], N*[34]), most of the files work. However, some don't, with this error:

>>> F = aplpy.FITSFigure('temp.fits')
AttributeError: 'YAxis' object has no attribute 'apl_label_form'

That happened if EQUINOX was not in [1950,2000]; unfortunately, CASA writes out EQUINOXes that are inconsistent with the rest of the header.

eps does not change, if I change dpi setting

Hi,
when I try to save a figure with different dpi values, the file size (and the resolution in the eps file) does not actually change:

pl.save('MSTII.eps')
>>> Auto-setting resolution to  199.78791499  dpi
! ls -lh
>>> -rw-r--r-- 1 guenther guenther  14M Apr 12 17:46 MSTII.eps
pl.save('MSTII.eps', max_dpi=10.)
>>> Auto-setting resolution to  10.0  dpi
! ls -lh
>>> -rw-r--r-- 1 guenther guenther  14M Apr 12 17:48 MSTII.eps

This might come down to a matplotlib issue again, but again, it did work for me in plain matplotlib:

imshow(arange(10000).reshape([100,100]))
>>> <matplotlib.image.AxesImage object at 0x198d6d90>
plt.savefig('test1.eps')
plt.savefig('test2.eps',dpi=1)
! ls -lh
>>> -rw-r--r-- 1 guenther guenther 1.4M Apr 12 18:00 test1.eps
>>> -rw-r--r-- 1 guenther guenther 8.8K Apr 12 18:01 test2.eps

Cheers,
Moritz

Add support for pyds9

It would be nice to be able to interface APLpy and SAO Ds9 using the pyds9 module

Label for colorbar

Originally submitted by Joseph Mottram:

Could really do with the ability to add a text label for the colorbar

Cairo compatability

Using

import matplotlib
matplotlib.use('Cairo')
import sys
import numpy as np
import scipy as sp
import aplpy as ap
import pyregion

results in

Traceback (most recent call last):
File "/Users/scroft/h/scripts/python/postage.py", line 7, in
import aplpy as ap
File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/APLpy-0.9.5-py2.7.egg/aplpy/init.py", line 1, in
from aplpy import FITSFigure
File "/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/site-packages/APLpy-0.9.5-py2.7.egg/aplpy/aplpy.py", line 10, in
raise Exception("matplotlib 0.99.0 or later is required for APLpy")
Exception: matplotlib 0.99.0 or later is required for APLpy

Although I have matplotlib 1.0.1 installed:
sleepy:vladeep> python -c "import matplotlib; print matplotlib.version"
1.0.1

and I get output if I select

matplotlib.use('PDF')

Support for velocity and other non-coordinate axes

"I wondered if it would be possible to allow for plotting a fits image with at least one non-angular coordinate axis, for example velocity? Using data from an HI cube (RA,Dec,Velocity) one can make two-dimensional slices such as (RA,Velocity) and present the pixel values as an image. I tried doing this with aplpy but it does not seem to be a supported image type. Is it possible to add this functionality?"

BUG: colorbar shows wrong label at the minimum

Hello, when plotting a FITSfigure and showing the colorbar there always occurs a bug a the labels of the colorbar. The minimal label shown isn't correctly displayed. It's mostly always less than it should be. It can be corrected by giving a certain vmin. But this gives you less freedom to choose a vmin. Was this bug already known?

SingularMatrixError on each aplpy.FITSFigure call

User guilalune reported that under Linux Debian, with the GTKAgg backend, APLpy returns the following exception:

Traceback (most recent call last):
File "/home/guillaume/Python/workspace/Hi-Gal_tests/src/racine/__init__.py", line 53, in <module>
gc = aplpy.FITSFigure('/home/guillaume/Python/tutorial_aplpy/fits/2MASS_k.fits')
File "/usr/lib/python2.6/site-packages/APLpy-0.9.4-py2.6.egg/aplpy/aplpy.py", line 177, in __init__
self.set_theme(theme='pretty')
File "/usr/lib/python2.6/site-packages/APLpy-0.9.4-py2.6.egg/aplpy/aplpy.py", line 896, in set_theme
self.set_tick_color('white')
File "/usr/lib/python2.6/site-packages/APLpy-0.9.4-py2.6.egg/aplpy/ticks.py", line 89, in set_tick_color
for line in self._ax1.xaxis.get_ticklines():
File "/usr/lib64/python2.6/site-packages/matplotlib/axis.py", line 836, in get_ticklines
return self.get_majorticklines()
File "/usr/lib64/python2.6/site-packages/matplotlib/axis.py", line 817, in get_majorticklines
ticks = self.get_major_ticks()
File "/usr/lib64/python2.6/site-packages/matplotlib/axis.py", line 894, in get_major_ticks
numticks = len(self.get_major_locator()())
File "/usr/lib/python2.6/site-packages/APLpy-0.9.4-py2.6.egg/aplpy/ticks.py", line 139, in __call__
self.axis.apl_tick_spacing = default_spacing(self.axis.get_axes(), self.coord)
File "/usr/lib/python2.6/site-packages/APLpy-0.9.4-py2.6.egg/aplpy/ticks.py", line 159, in default_spacing
px, py, wx, wy = axis_positions(wcs, coord, False, xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax)
File "/usr/lib/python2.6/site-packages/APLpy-0.9.4-py2.6.egg/aplpy/ticks.py", line 313, in axis_positions
x_world, y_world = wcs_util.pix2world(wcs, x_pix, y_pix)
File "/usr/lib/python2.6/site-packages/APLpy-0.9.4-py2.6.egg/aplpy/wcs_util.py", line 147, in pix2world
return wcs.wcs_pix2sky(x_pix, y_pix, 1)
File "/usr/lib64/python2.6/site-packages/pywcs/pywcs.py", line 524, in wcs_pix2sky
*args, **kwargs)
File "/usr/lib64/python2.6/site-packages/pywcs/pywcs.py", line 473, in _array_converter
sky = func(xy, origin)
File "/usr/lib64/python2.6/site-packages/pywcs/pywcs.py", line 523, in <lambda>
return self._array_converter(lambda xy, o: self.wcs.p2s(xy, o)['world'],
_pywcs.SingularMatrixError: Linear transformation matrix is singular

The problem disappeared when using the TkAgg backend

Provide an option to align rgb images north

Originally submitted by Médéric Boquien:

Hello,

I think it would be nice to have an option to align rgb images north. For now, if i pass north=True to FITSFigure(), it rotates the coordinates grid only and not the image. As a workaround, i have hardcoded the -n option to os.system('mMakeHdr images_raw.tbl header.hdr') in make_rgb_cube().

Thanks,

Médéric

Handle large images with smart downsampling

It would be nice to be able to load up big (Gb) images and be able to pan and zoom, but matplotlib does not deal well with large images. Therefore, maybe it would be possible to have a 'Google maps' type feature that means that the image is automatically downsampled to screen resolution and only the visible part of the image is extracted, so that matplotlib always deals only with a fairly small image, but the full pan and zoom capability would be present.

Do not use anonymous exceptions

For the ease of use of aplpy in scripts, do not use "anonymous" exceptions, like:

/afs/in2p3.fr/throng/snovae/lib/python2.6/site-packages/aplpy/aplpy.pyc in _get_hdu(self, data, hdu, north, convention, slices)
    213             # Check file exists
    214             if not os.path.exists(filename):
--> 215                 raise Exception("File not found: "+filename)

but instead in this case use IOError.

Improve cursor position display

Have the option to show the cursor pixel coordinates instead of world coordinates for example, and to be able to switch between the two.

Fix grid lines near poles

When looking towards the pole of a coordinate system, grid lines that don't intersect the axes are missing.

Integrate with SAMP

Use the Simple Application Messaging Protocol (SAMP) to connect to other SAMP-aware applications

adding a legend - marker='o' vanishes

Hi,

I occasionally add a legend to my plots (which works when I access the matplotlib structures, on which APLpy is built). It all works fine, except that layers with marker='o' (the default) do not show up.
I suspect that that might be a bug in matplotlib (I use 1.0.0), but I could not reproduce this problem in pure matplotlib.
See the following example code:

pl = aplpy.FITSFigure('data.fits')
pl.show_grayscale()
pl.show_markers(dat.RA[ind1], dat.DEC[ind1], edgecolor='r', facecolor='none', marker='s', s=20, label='Class I')
pl.show_markers(dat.RA[ind2],dat.DEC[indi2],edgecolor='g', facecolor='none', marker='o', s=20, label='Class II')
pl.show_markers(dat.RA[ind3], dat.DEC[ind3], edgecolor='b', facecolor='none', marker='^', s=20, label='WTTS')
led = pl._ax1.legend()

This does not depend on the coordinates or dataset used.
Please try any data and see if you have the same issue. I do not understand enough about the interface from APLpy to matplotlib to really pin down where the problem originates.
(There is an easy workaround: marker=(1,10,1) makes a regular polygon with 10 edges, this is virtually indistinguishable from the circle in print).

Moritz

Plotting many files eats up memory

Hello,

I tried to follow the example in the docs to make plots of many FITS files. However, my files are big (256MB each), so after a few no RAM is left and the process is killed by the OS.

Here is a minimum example which fills up my memory after the third image:

ipython -pylab

import aplpy
import pyfits

images=['15.L1465_all.ICL001.2.1.fits',\
    '15.L1466_all.ICL001.2.1.fits',\
    '15.L1467_all.ICL001.2.1.fits',\
    '15.L1471_all.ICL001.2.1.fits',\
    '15.L1474_all.ICL001.2.1.fits']

for fits_file in images:
    f = aplpy.FITSFigure(fits_file)
    f.show_grayscale()
    f.save(fits_file.replace('.fits','.png'))

This is on a 12GB memory Ubuntu 10.04.2 box (64 bit), using a tarball called aplpy-aplpy-910a04c.tar.gz.

I imagine this isn't really a bug, but that in every iteration of the loop a new figure is created and older figures live on. I can't figure out how to destroy a figure once it has been saved.

Cheers,

Enno

Overlaying contours on sliced image fails

If you create an image with:

f3 = aplpy.FITSFigure('multidim_image.fits',dimensions=[0,1],slices=[0,0])

and try to overlay with

f3.show_contour('twodim_image.fits')

contouring fails with the error:

AttributeError: Attribute nx does not exist

because WCS only makes .nx / .ny if slices are specified. I think the solution is to set WCS.nx / ny whether or not _slices is set

Coordinates as offset from centre

It would be a very useful additional option to have the coordinates displayed as offset (in arcseconds, arcminutes or degrees) from the centre of the image. The centre should probably be updated if the region shown in the plot is changed.

Galactic Latitude tick label issue

Hi,
In a plot in galactic coordinates which approximately covers -1.5<b<1.5, when I set myplot.tick_labels.set_yformat('dd') I get tick labels of 359, 0 and 1. The labels are fine if I use set_yformat('dd.d') but I end up with too many ticks.

Exception: 'thread._local' object has no attribute 'nesting'

Gday,

I'm getting an exception in aplpy 0.9.6: Exception Value: 'thread._local' object has no attribute 'nesting' (traceback below). The problem consistently occurs with some images and not others.

This is using aplpy as part of a Django website. The exception only occurs when serving the site using mod_wsgi in Apache. It does not occur using the Django development webserver (manage.py runserver).

I was able to eliminate the exception with the following patch, although I don't know aplpy well enough to know if it's a good change or not:

--- aplpy/aplpy/decorators.py   2011/07/25 04:31:39 115
+++ aplpy/aplpy/decorators.py   2011/07/25 04:36:41 116
@@ -11,6 +11,10 @@


 def _auto_refresh(f, *args, **kwargs):
+    # Jay did this
+    if not mydata.__dict__.has_key("nesting"):
+        mydata.nesting = 0
+    # end Jay
     if 'refresh' in kwargs:
         refresh = kwargs.pop('refresh')
     else:

Django traceback:

Environment:

Request Method: GET
Request URL: [removed]

Django Version: 1.3
Python Version: 2.6.5
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'vast']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/jay/sites/vast/vast/vast/views.py" in postage_stamp
  256.     image_data = postage_stamp.get_postage_stamp(ds)
File "/home/jay/sites/vast/vast/vast/postage_stamp.py" in get_postage_stamp
  194.         return self.get_image(path, ds.image, sources=sources, size=[300,300], pan=[ds.ra, ds.dec, radius_deg])
File "/home/jay/sites/vast/vast/vast/postage_stamp.py" in get_image
  162.             self.save_image_aplpy(path, image, **kwargs)
File "/home/jay/sites/vast/vast/vast/postage_stamp.py" in save_image_aplpy
  103.         figure = aplpy.FITSFigure(fits_image.hdu, dpi=dpi, figsize=figsize, auto_refresh=False)
File "/home/jay/sites/vast/vast/aplpy/decorators.py" in _auto_refresh
  18.     mydata.nesting += 1

Exception Type: AttributeError at /postage_stamps/40115.png
Exception Value: 'thread._local' object has no attribute 'nesting'

Problem with the grid for glat

Hello! Now I've got a problem when I try to display a grid. It works only for the x-axis (glon) but not for the y-axis (glat). Might this be a BUG or did I do something wrong?
I tried it with this script and used one of your example images:

import aplpy
import numpy

image=aplpy.FITSFigure("MSX_E.fits")
image.show_grayscale(invert=True)
image.tick_labels.set_xformat('dd.d')
image.tick_labels.set_yformat('dd.d')
image.set_tick_labels_font(size='small') 

image.add_grid()
image.grid.set_color('black')
image.grid.set_alpha(0.3)
image.grid.set_xspacing(0.2)
image.grid.set_yspacing(0.2)
image.grid.set_linestyle('dashed')
image.grid.set_linewidth(0.8)

Thank you!

problem with .show_grayscale() and .save()

The .show() and .save() functions don't work properly. Using the example code from the documentation, gc.show_grayscale() doesn't produce any plot at all (but returning Auto-set vmin/vmax), but if I execute matplotlib.pyplot.show() next, the plot comes up. Also, when I run the script
import aplpy gc = aplpy.FITSFigure('new.fits') gc.save('myfirstplot.png')
I get a plot only containng the coordinate axes but an empty white image. Is this a known bug and is there any solution?
I'm running Python2.7 on a Mint Linux 12 machine with gnome3, the latest versions of numpy, matplotlib, pyfits, and pywcs installed with python-pip.

EDIT: Yes, I forgot gc.show_grayscale() in the script. Works just fine now. But I'm still wondering though, why is it necessary to run pyplot.show() to get the interactive plot...?

show_rectangles vs. PDF

Hi,

I am trying to overlay some rectangles on an image, but when I save it as a PDF file, the rectangles disappear. A simplified version of my code that produces the same error is below.

import numpy as np
import aplpy as ap
from aplpy.labels import TickLabels

import pyfits as pf

gc = ap.FITSFigure('ngc104k_1.fits')

tk = TickLabels(gc)
TickLabels.set_xformat(tk,'dd.dd')
TickLabels.set_yformat(tk,'dd.dd')

gc.show_rectangles(6.03,-72.08,width=1./3600.,height=27./3600.)

gc.show_grayscale()

gc.save('minimal.png')
gc.save('minimal.pdf')
gc.save('minimal.eps')
gc.save('minimal.ps')

Cheers,

Daniel

Minor ticks

Feature request: Would be nice to have minor ticks in addition to major ones.

Odd PDF output

I'm overplotting some VLA data on a Chandra image with quite large pixels (the image is about 50 pixels across). If I save this as a PDF with max_dpi=0, aplpy picks very low DPI (2.78) and the resulting pixel map differs subtly from what's shown in the GUI window. Also, if I view the output in Adobe Acrobat it looks ok, but viewing in Preview the pixels look distorted (almost like a blocky jpeg image of the field). If I remove my max_dpi specification and set dpi=75 by hand, the output looks fine.

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.