GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Fix mplot3d projection by eric-wieser · Pull Request #8896 · matplotlib/matplotlib

Conversation

@eric-wieser

@eric-wieser eric-wieser commented Jul 16, 2017 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Fixes #8894 and fixes #1104, replacing the bad rendering in the first image, with the good rendering in the second:

image

image

Unsurprisingly, this breaks every single unit test,

The plots now all look rather cubic - but that's better than distorted, and we could go back to correctly-scaled rectangles with #8593

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

darkdragon-001 reacted with thumbs up emoji
All reactions
  • 👍 1 reaction
eric-wieser
eric-wieser commented Jul 16, 2017
View reviewed changes
Comment thread lib/mpl_toolkits/mplot3d/axes3d.py Outdated
point.

"""
pb_aspect = np.array([1, 1, 0.75])

@eric-wieser eric-wieser Jul 16, 2017 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Strictly speaking, this isn't just the aspect, but also the scaling. Is there already scaling in place somewhere else? Seems too convenient that everything just magically fits into the viewing area.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@eric-wieser
eric-wieser force-pushed the fix-mplot3d-projection branch 2 times, most recently from 9355ac4 to 5922edd Compare July 16, 2017 22:28
@eric-wieser

eric-wieser commented Jul 16, 2017

Copy link
Copy Markdown
Contributor Author

Plot is now scaled to sort-of look like it did before, in the default view.

Note that because the plot is now actually stretched horizontally, but the camera is not, the view angle looks different. Options:

  • Change the default view angle too - presumably overriden in matplotlibrc though?
  • Change the default pb_aspect back to a cube
  • Deal with it
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser

eric-wieser commented Jul 17, 2017

Copy link
Copy Markdown
Contributor Author

Reasonably straightforward to implement axis=equal from here too

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@tacaswell tacaswell added this to the 2.2 (next next feature release) milestone Jul 18, 2017
@tacaswell tacaswell added the topic: mplot3d label Jul 18, 2017
WeatherGod
WeatherGod reviewed Aug 2, 2017
View reviewed changes
Comment thread lib/mpl_toolkits/mplot3d/axes3d.py
# in the superclass, we would go through and actually deal with axis
# scales and box/datalim. Those are all irrelevant - all we need to do
# is make sure our coordinate system is square.
figW, figH = self.get_figure().get_size_inches()

@WeatherGod WeatherGod Aug 2, 2017

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why use the figure's aspect ratio? What if the figure has 3 subplots all in a row?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@eric-wieser eric-wieser Aug 2, 2017 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because all sizes in matplotlib are relative to the figure. pb.shrunk_to_aspect seems to take the ratio of the top-level parent (the figure), and the desired ratio. This is because the end result is the size relative to the parent, as all objects in matplotlib seem to be sized - so to ensure a given aspect ratio, you need to account for that of the parent

Note that this is the same as the normal aspect=equal code, so is presumably correct.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@WeatherGod WeatherGod Aug 8, 2017

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ping @efiring, as I think you are the resident expert on all the ways this could possibly go wrong.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@efiring efiring Mar 23, 2019

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it makes sense. I have no intention of spending the time required to understand mplot3d well enough to make a detailed review, but in the absence of any such review I am inclined to trust that this PR is a major improvement, as it appears to be fixing a basic design flaw.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@WeatherGod

WeatherGod commented Aug 2, 2017 via email

Copy link
Copy Markdown
Member
I wouldn't really know. I think @efiring is the expert on these things.
…
On Wed, Aug 2, 2017 at 4:53 PM, Eric Wieser ***@***.***> wrote: ***@***.**** commented on this pull request. ------------------------------ In lib/mpl_toolkits/mplot3d/axes3d.py <#8896 (comment)> : > @@ -247,6 +247,20 @@ def tunit_edges(self, vals=None, M=None): (tc[7], tc[4])] return edges + def apply_aspect(self, position=None): + if position is None: + position = self.get_position(original=True) + + # in the superclass, we would go through and actually deal with axis + # scales and box/datalim. Those are all irrelevant - all we need to do + # is make sure our coordinate system is square. + figW, figH = self.get_figure().get_size_inches() Because all sizes in matplotlib are relative to the figure. pb.shrunk_to_aspect seems to take the ratio of the top-level parent (the figure), and the desired ratio. Note that this is the same as the normal aspect=equal code, so is presumably correct. — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#8896 (comment)>, or mute the thread <https://github.com/notifications/unsubscribe-auth/AARy-E32123ChZda_Y-gPCtOSEXUWFvjks5sUOHjgaJpZM4OZVo9> .
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

eric-wieser
eric-wieser commented Dec 10, 2017
View reviewed changes
Comment thread lib/mpl_toolkits/mplot3d/axes3d.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

eric-wieser
eric-wieser commented Dec 10, 2017
View reviewed changes
Comment thread lib/mpl_toolkits/mplot3d/axes3d.py
return 'azimuth=%d deg, elevation=%d deg ' % (self.azim, self.elev)
# ignore xd and yd and display angles instead
return 'azimuth={:.0f} deg, elevation={:.0f} deg '.format(
self.azim, self.elev)

@eric-wieser eric-wieser Dec 10, 2017 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug fixed here on fractional view angles

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@eric-wieser eric-wieser Oct 20, 2018

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extracted to #12573. I misremembered - the crash was only for non-finite values.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@timhoffm timhoffm mentioned this pull request May 6, 2018
3d plots with aspect='equal' #1077
Closed
@eric-wieser eric-wieser mentioned this pull request Oct 20, 2018
BUG: mplot3d: Don't crash if azim or elev are non-integral #12573
Merged
@darkdragon-001

darkdragon-001 commented Mar 23, 2019

Copy link
Copy Markdown

Any progress here?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@timhoffm

timhoffm commented Mar 23, 2019

Copy link
Copy Markdown
Member

Unfortunately not. Progress would be noted here.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser

eric-wieser commented Mar 23, 2019

Copy link
Copy Markdown
Contributor Author

I was under the impression the ball was not in my court here. Rebasing shouldn't be too awful, but I don't see much point without further review.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@timhoffm

timhoffm commented Mar 23, 2019

Copy link
Copy Markdown
Member

@eric-wieser Not an expert in mpl3d and thus I have no idea who would have to take up the torch. I was just stating that the thread still reflects the current status.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser

eric-wieser commented Mar 23, 2019

Copy link
Copy Markdown
Contributor Author

@timhoffm: I'll rebase for good measure, it'll allow someone to work from this branch at least if they need cubic plots.

Can you remind me how to regenerate the baseline_images? Is there a mechanism to say "assume the new image is correct for all failed image comparison tests"?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

efiring
efiring requested changes Mar 23, 2019
View reviewed changes

@efiring efiring left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the interest of getting things moving, I will approve of this subject to the necessary rebase and addition of "what's new" and "API changes" entries. I will defer to @WeatherGod, however, if he has concrete objections. Same with respect to @tacaswell who might object because this is making a big behavior change.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread lib/mpl_toolkits/mplot3d/axes3d.py
# in the superclass, we would go through and actually deal with axis
# scales and box/datalim. Those are all irrelevant - all we need to do
# is make sure our coordinate system is square.
figW, figH = self.get_figure().get_size_inches()

@efiring efiring Mar 23, 2019

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it makes sense. I have no intention of spending the time required to understand mplot3d well enough to make a detailed review, but in the absence of any such review I am inclined to trust that this PR is a major improvement, as it appears to be fixing a basic design flaw.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@timhoffm

timhoffm commented Mar 24, 2019

Copy link
Copy Markdown
Member

@eric-wieser See Writing an image comparison test.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser

eric-wieser commented Mar 24, 2019

Copy link
Copy Markdown
Contributor Author

Copy the output images (in this case result_images/test_lines/test_line_dashes.png) to the correct subdirectory of baseline_images tree in the source directory

I was hoping there was automation for "assume every failed output is an intended change, overwrite the baseline" so that I can diff with git.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@jklymak

jklymak commented Mar 24, 2019

Copy link
Copy Markdown
Member

I was hoping there was automation for "assume every failed output is an intended change, overwrite the baseline" so that I can diff with git.

Can you just rsync result_images/ and lib/matplotlib/tests/baseline_images?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@efiring

efiring commented Mar 24, 2019

Copy link
Copy Markdown
Member

No, rsync is not the right tool--you need to explicitly copy the appropriate files from result_images, not all of them.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@jklymak

jklymak commented Mar 24, 2019

Copy link
Copy Markdown
Member

Certainly you dont want to git add all the comparison files.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@anntzer

anntzer commented Mar 24, 2019

Copy link
Copy Markdown
Contributor

triage_tests.py has keyboard shortcuts (run with -h to get the help) to accept images and move between them ("A"/"down"/"A"/"down"/etc should get you there).

eric-wieser reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser
eric-wieser force-pushed the fix-mplot3d-projection branch from 5922edd to 76a36bb Compare March 26, 2019 05:43
@eric-wieser

eric-wieser commented Mar 26, 2019

Copy link
Copy Markdown
Contributor Author

@anntzer: Great tool, thanks. Rebased with updated tests

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser
eric-wieser force-pushed the fix-mplot3d-projection branch 2 times, most recently from 9f8cc4c to a7a8051 Compare March 27, 2019 03:49
@eric-wieser

eric-wieser commented Mar 27, 2019

Copy link
Copy Markdown
Contributor Author

I don't understand the circle-ci failures:

/home/circleci/project/lib/mpl_toolkits/mplot3d/axes3d.py:docstring of mpl_toolkits.mplot3d.axes3d.Axes3D.apply_aspect:4: WARNING: more than one target found for cross-reference 'get_anchor': matplotlib.axes.Axes.get_anchor, mpl_toolkits.axes_grid1.axes_divider.AxesDivider.get_anchor, mpl_toolkits.axes_grid1.axes_divider.Divider.get_anchor

It seems that travis is failing the svg tests, but the svg files are no longer being generated on my machine.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@anntzer anntzer added the status: needs review label Dec 17, 2019
@eric-wieser

eric-wieser commented Dec 17, 2019

Copy link
Copy Markdown
Contributor Author

Thanks for the fixups @anntzer, they look fine to me

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser

eric-wieser commented Feb 7, 2020

Copy link
Copy Markdown
Contributor Author

What is the status of this?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@jklymak
jklymak requested review from WeatherGod and efiring February 7, 2020 18:01
efiring
efiring approved these changes Feb 7, 2020
View reviewed changes
tacaswell
tacaswell reviewed Feb 7, 2020
View reviewed changes
Comment thread lib/mpl_toolkits/tests/test_mplot3d.py Resolved

Uh oh!

There was an error while loading. Please reload this page.

tacaswell
tacaswell approved these changes Feb 7, 2020
View reviewed changes

@tacaswell tacaswell left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking through all of the changed images

  • lib/mpl_toolkits/tests/baseline_images/test_mplot3d/bar3d_notshaded.png
  • lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter3d_color.png
  • lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter3d.png
  • lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d_shaded.png

give me a bit of pause, but I think those are all consequences of the 2.0 default value changes, not due to anything in this PR.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@tacaswell

tacaswell commented Feb 7, 2020

Copy link
Copy Markdown
Member

I'm not comfortable merging this over @WeatherGod 's requested changes, however I believe they are addressed.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser

eric-wieser commented Feb 7, 2020

Copy link
Copy Markdown
Contributor Author

but I think those are all consequences of the 2.0 default value changes, not due to anything in this PR.

I've tried to make that easy to look at by having separate commits for the style and other changes - so hopefully you can confirm whether those changes matter.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

WeatherGod
WeatherGod approved these changes Feb 7, 2020
View reviewed changes
@WeatherGod
WeatherGod merged commit 62d8d65 into matplotlib:master Feb 7, 2020
eric-wieser
eric-wieser commented Feb 7, 2020
View reviewed changes
Comment thread lib/mpl_toolkits/mplot3d/axes3d.py
Comment on lines +983 to +984
# chosen for similarity with the initial view before gh-8896
pb_aspect = np.array([4, 4, 3]) / 3.5

@eric-wieser eric-wieser Feb 7, 2020

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I imagine that there are going to be some requests for an API to change this, for people who liked their 1:1:1 plot boxes. I started working on that two years ago, but it opened a can of worms that I didn't want to open concurrently with this PR. At some point I'll see if I can rebase those changes.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@tacaswell

tacaswell commented Feb 8, 2020

Copy link
Copy Markdown
Member

Please see https://discourse.matplotlib.org/t/removed-commits-from-master-branch/20868 This merge was "un-done" so that we can re-do it and squash.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

This was referenced Feb 8, 2020
Rework pylab docstring. #16441
Closed
Expire deprecation of \stackrel. #16442
Closed
Proposal for the baseline images problem #16447
Open
@QuLogic QuLogic modified the milestones: needs sorting, v3.3.0 Feb 9, 2020
@WeatherGod

WeatherGod commented Feb 10, 2020

Copy link
Copy Markdown
Member

Sorry for causing such churn in the repo. I completely forgot to double-check how many image commits there were.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser

eric-wieser commented Feb 11, 2020

Copy link
Copy Markdown
Contributor Author

To be clear, is the current status of this "not actually merged"?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@anntzer

anntzer commented Feb 11, 2020

Copy link
Copy Markdown
Contributor

Yes. I think you can reopen a PR with the same commits, except that the intermediate images should be stripped out (so yes the intermediate commits won't be testable independently).

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@eric-wieser eric-wieser mentioned this pull request Feb 11, 2020
Fix mplot3d projection #16472
Merged
@QuLogic QuLogic removed the status: needs review label Feb 13, 2020
@ImportanceOfBeingErnest ImportanceOfBeingErnest mentioned this pull request Apr 18, 2020
set_aspect for 3D plots #17172
Closed
tacaswell added a commit to tacaswell/matplotlib that referenced this pull request May 27, 2020
@tacaswell
ENH/FIX: make "auto" aspect with Axes3D match Axes better
5451b25
To make bbox_inches='tight' work correctly, we cache the positions of
all of the axes, change their aspect to 'auto', adjust the transforms
on the figure, render the output, and then restore the previous
setting of aspect to each of the figures.  This prevent the Axes from
trying to adjust their size on draw. This matters because for the
render that is emitted the figure transforms are out of sync with the
figure size.

As part of cleaning fixing the rendering of Axes3D in matplotlib#8896 / matplotlib#16472
we started to use apply_aspect to re-size the area the Axes3D takes up
to maintain a fixed ratio between the axes when the aspect is "auto".
However this conflicts with the expectation in tight_bbox.adjust_bbox
as it assumes setting the aspect to "auto" will prevent any axes
resizing.

This commit addresses this by:
 - exiting the Axes3D.apply_aspect early if aspect is auto
 - adding a new aspect mode 'auto_pb' which is the default
   for Axes3D which maintains the current master branch behavior
   of maintaining a fixed ratio between the sizes of the x, y z axis
   independent of the data limits.
 - re implement several functions on Axes3D to make sure they handle
   sharez correctly.

closes matplotlib#16463.
@tacaswell tacaswell mentioned this pull request May 27, 2020
FIX: add set_box_aspect, improve tight bounding box for Axes3D + fix bbox_inches support with fixed box_aspect #17515
Merged
1 of 6 tasks
tacaswell added a commit to tacaswell/matplotlib that referenced this pull request May 30, 2020
@tacaswell
FIX: support bbox_inches='tight' for box_aspect Axes
390a57a
The way that bbox_inches='tight' is implemented we need to ensure that
we do not try to adjust the aspect during the draw (because we have
temporarily de-coupled the reported figure size from the transforms
which results in the being distorted).  Previously we did not have a
way to fix the aspect ratio in screen space of the Axes (only the
aspect ratio in dataspace) however in 3.3 we gained this ability for
both Axes (matplotlib#14917) and Axes3D (matplotlib#8896 / matplotlib#16472).

Rather than add an aspect value to `set_aspect` to handle this case,
in the tight_bbox code we monkey-patch the `apply_aspect` method with
a no-op function and then restore it when we are done.  Previously we
would set the aspect to "auto" and restore it in the same places.

closes matplotlib#16463.
tacaswell added a commit to tacaswell/matplotlib that referenced this pull request Jun 4, 2020
@tacaswell
FIX: support bbox_inches='tight' for box_aspect Axes
c0ab395
The way that bbox_inches='tight' is implemented we need to ensure that
we do not try to adjust the aspect during the draw (because we have
temporarily de-coupled the reported figure size from the transforms
which results in the being distorted).  Previously we did not have a
way to fix the aspect ratio in screen space of the Axes (only the
aspect ratio in dataspace) however in 3.3 we gained this ability for
both Axes (matplotlib#14917) and Axes3D (matplotlib#8896 / matplotlib#16472).

Rather than add an aspect value to `set_aspect` to handle this case,
in the tight_bbox code we monkey-patch the `apply_aspect` method with
a no-op function and then restore it when we are done.  Previously we
would set the aspect to "auto" and restore it in the same places.

closes matplotlib#16463.
@liuzhenqi77 liuzhenqi77 mentioned this pull request Jun 17, 2021
Add custom_aspect parameter to plot_point_brain. netneurolab/netneurotools#104
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@anntzer anntzer anntzer left review comments
@efiring efiring efiring approved these changes
@tacaswell tacaswell tacaswell approved these changes
@WeatherGod WeatherGod WeatherGod approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

topic: mplot3d

Projects

None yet

Milestone

v3.3.0

Development

Successfully merging this pull request may close these issues.

mplot3d projection results in non-orthogonal axes Resizing a GUI window with Axes3D

Uh oh!

There was an error while loading. Please reload this page.

10 participants

@eric-wieser @WeatherGod @darkdragon-001 @timhoffm @jklymak @efiring @anntzer @jpaulos @tacaswell @QuLogic
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.