[yt-svn] commit/yt: 2 new changesets
Bitbucket
commits-noreply at bitbucket.org
Wed May 30 17:29:47 PDT 2012
2 new commits in yt:
https://bitbucket.org/yt_analysis/yt/changeset/d4544d5f8e0a/
changeset: d4544d5f8e0a
branch: yt
user: chummels
date: 2012-05-31 02:28:56
summary: Corrected the docstrings for covering_grid and smoothed_covering_grid.
affected #: 1 file
diff -r 3442625bb24f66b1cd15273f7feb708342bad20a -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 yt/data_objects/data_containers.py
--- a/yt/data_objects/data_containers.py
+++ b/yt/data_objects/data_containers.py
@@ -3365,9 +3365,18 @@
The resolution level data is uniformly gridded at
left_edge : array_like
The left edge of the region to be extracted
- right_edge : array_like
+ dims : array_like
+ Number of cells along each axis of resulting covering_grid
+ right_edge : array_like, optional
The right edge of the region to be extracted
-
+ fields : array_like, optional
+ A list of fields that you'd like pre-generated for your object
+
+ Example
+ -------
+ cube = pf.h.covering_grid(2, left_edge=[0.0, 0.0, 0.0], \
+ right_edge=[1.0, 1.0, 1.0],
+ dims=[128, 128, 128])
"""
AMR3DData.__init__(self, center=kwargs.pop("center", None),
fields=fields, pf=pf, **kwargs)
@@ -3503,7 +3512,8 @@
@wraps(AMRCoveringGridBase.__init__)
def __init__(self, *args, **kwargs):
"""A 3D region with all data extracted and interpolated to a
- single, specified resolution.
+ single, specified resolution. (Identical to covering_grid,
+ except that it interpolates.)
Smoothed covering grids start at level 0, interpolating to
fill the region to level 1, replacing any cells actually
@@ -3516,9 +3526,18 @@
The resolution level data is uniformly gridded at
left_edge : array_like
The left edge of the region to be extracted
- right_edge : array_like
+ dims : array_like
+ Number of cells along each axis of resulting covering_grid
+ right_edge : array_like, optional
The right edge of the region to be extracted
-
+ fields : array_like, optional
+ A list of fields that you'd like pre-generated for your object
+
+ Example
+ -------
+ cube = pf.h.smoothed_covering_grid(2, left_edge=[0.0, 0.0, 0.0], \
+ right_edge=[1.0, 1.0, 1.0],
+ dims=[128, 128, 128])
"""
self._base_dx = (
(self.pf.domain_right_edge - self.pf.domain_left_edge) /
https://bitbucket.org/yt_analysis/yt/changeset/90c24c4198fb/
changeset: 90c24c4198fb
branch: yt
user: chummels
date: 2012-05-31 02:29:16
summary: Merging.
affected #: 12 files
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 scripts/iyt
--- a/scripts/iyt
+++ b/scripts/iyt
@@ -1,5 +1,6 @@
#!python
import os, re
+from distutils import version
from yt.mods import *
from yt.data_objects.data_containers import AMRData
namespace = locals().copy()
@@ -22,6 +23,11 @@
code.interact(doc, None, namespace)
sys.exit()
+if version.LooseVersion(IPython.__version__) <= version.LooseVersion('0.10'):
+ api_version = '0.10'
+else:
+ api_version = '0.11'
+
if IPython.__version__.startswith("0.10"):
api_version = '0.10'
elif IPython.__version__.startswith("0.11") or \
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/data_objects/data_containers.py
--- a/yt/data_objects/data_containers.py
+++ b/yt/data_objects/data_containers.py
@@ -240,6 +240,8 @@
pass
elif isinstance(center, (types.ListType, types.TupleType, na.ndarray)):
center = na.array(center)
+ elif center in ("c", "center"):
+ center = self.pf.domain_center
elif center == ("max"): # is this dangerous for race conditions?
center = self.pf.h.find_max("Density")[1]
elif center.startswith("max_"):
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/gui/reason/extdirect_repl.py
--- a/yt/gui/reason/extdirect_repl.py
+++ b/yt/gui/reason/extdirect_repl.py
@@ -26,6 +26,7 @@
import json
import os
+import stat
import cStringIO
import logging
import uuid
@@ -276,7 +277,7 @@
for i in range(30):
# Check for stop
if self.stopped: return {'type':'shutdown'} # No race condition
- if self.payload_handler.event.wait(1): # One second timeout
+ if self.payload_handler.event.wait(0.01): # One second timeout
return self.payload_handler.deliver_payloads()
if self.debug: print "### Heartbeat ... finished: %s" % (time.ctime())
return []
@@ -459,6 +460,36 @@
return command
@lockit
+ def load(self, base_dir, filename):
+ pp = os.path.join(base_dir, filename)
+ funccall = "pfs.append(load('%s'))" % pp
+ self.execute(funccall)
+ return []
+
+ def file_listing(self, base_dir, sub_dir):
+ if base_dir == "":
+ cur_dir = os.getcwd()
+ elif sub_dir == "":
+ cur_dir = base_dir
+ else:
+ cur_dir = os.path.join(base_dir, sub_dir)
+ cur_dir = os.path.abspath(cur_dir)
+ if not os.path.isdir(cur_dir):
+ return {'change':False}
+ fns = os.listdir(cur_dir)
+ results = [("..", 0, "directory")]
+ for fn in sorted((os.path.join(cur_dir, f) for f in fns)):
+ if not os.access(fn, os.R_OK): continue
+ if os.path.isfile(fn):
+ size = os.path.getsize(fn)
+ t = "file"
+ else:
+ size = 0
+ t = "directory"
+ results.append((os.path.basename(fn), size, t))
+ return dict(objs = results, cur_dir=cur_dir)
+
+ @lockit
def create_phase(self, objname, field_x, field_y, field_z, weight):
if weight == "None": weight = None
else: weight = "'%s'" % (weight)
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/gui/reason/html/images/file_dialog_directory.png
Binary file yt/gui/reason/html/images/file_dialog_directory.png has changed
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/gui/reason/html/images/file_dialog_file.png
Binary file yt/gui/reason/html/images/file_dialog_file.png has changed
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/gui/reason/html/index.html
--- a/yt/gui/reason/html/index.html
+++ b/yt/gui/reason/html/index.html
@@ -78,7 +78,8 @@
<!-- FONTS --><!-- These will get pulled from Google, but Google might not be accessible.
In that case, it will default to whatever is in the family. -->
- <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Inconsolata">
+ <!--<link rel="stylesheet" type="text/css"
+ href="http://fonts.googleapis.com/css?family=Inconsolata">--><!-- LEAFLET STUFF --><script type="text/javascript" src="leaflet/leaflet.js"></script>
@@ -103,6 +104,9 @@
<script type="text/javascript" src="js/menu_items.js"></script><!-- THE PLOT WINDOW FUNCTIONS -->
+ <script type="text/javascript" src="js/file_open.js"></script>
+
+ <!-- THE PLOT WINDOW FUNCTIONS --><script type="text/javascript" src="js/widget_plotwindow.js"></script><!-- THE GRID VIEWER FUNCTIONS -->
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/gui/reason/html/js/file_open.js
--- /dev/null
+++ b/yt/gui/reason/html/js/file_open.js
@@ -0,0 +1,146 @@
+/**********************************************************************
+A file opener
+
+Author: Matthew Turk <matthewturk at gmail.com>
+Affiliation: Columbia University
+Homepage: http://yt-project.org/
+License:
+ Copyright (C) 2012 Matthew Turk. All Rights Reserved.
+
+ This file is part of yt.
+
+ yt is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+***********************************************************************/
+
+function open_file() {
+ var filestore = new Ext.data.ArrayStore({
+ fields: ['filename',
+ {name:'size', type:'float'},
+ 'type'
+ ]
+ });
+ var cur_dir;
+ function fillStore(f, a){
+ if(a.status == false){
+ Ext.Msg.alert("Error", "Something has gone wrong.");
+ return;
+ }
+ if(a.result['change'] == false) {
+ win.get("current_file").setValue(cur_dir);
+ return;
+ }
+ filestore.removeAll();
+ var rec = [];
+ filestore.loadData(a.result['objs']);
+ cur_dir = a.result['cur_dir'];
+ win.get("current_file").setValue(cur_dir);
+ }
+
+ var win = new Ext.Window({
+ layout:'vbox',
+ layoutConfig: {
+ align: 'stretch',
+ pack: 'start',
+ defaultMargins: "5px 5px 5px 5px",
+ },
+ width:540,
+ height:480,
+ modal:true,
+ resizable:true,
+ draggable:true,
+ title:'Open File',
+ items: [
+ { xtype: 'textfield',
+ id: 'current_file',
+ listeners: {
+ specialkey: function(f, e) {
+ if (e.getKey() != e.ENTER) { return; }
+ yt_rpc.ExtDirectREPL.file_listing(
+ {base_dir:f.getValue(), sub_dir:''}, fillStore);
+ }
+ }
+ }, {
+ xtype:'listview',
+ id: 'file_listing',
+ store: filestore ,
+ singleSelect:true,
+ emptyText: 'No images to display',
+ flex: 1.0,
+ columns: [
+ {
+ header: 'Type',
+ width: 0.1,
+ tpl: '<img src="images/file_dialog_{type}.png" width=16 height=16>',
+ dataIndex: 'type'
+ },{
+ header: 'Filename',
+ width: .75,
+ dataIndex: 'filename'
+ },{
+ header: 'Size',
+ dataIndex: 'size',
+ tpl: '{size:fileSize}',
+ align: 'right',
+ cls: 'listview-filesize'
+ }],
+ listeners: {
+ dblclick: function(view, index, node, e) {
+ var fileRecord = filestore.getAt(index).data;
+ if (fileRecord.type == 'directory') {
+ yt_rpc.ExtDirectREPL.file_listing(
+ {base_dir:cur_dir, sub_dir:fileRecord.filename},
+ fillStore);
+ } else {
+ yt_rpc.ExtDirectREPL.load(
+ {base_dir:cur_dir, filename:fileRecord.filename},
+ handle_result);
+ win.destroy();
+ }
+ },
+ selectionchange: function(view, index, node, e) {
+ },
+ },
+ }, {
+ xtype: 'panel',
+ height: 40,
+ layout: 'hbox',
+ layoutConfig: {
+ align: 'stretch',
+ pack: 'start',
+ defaultMargins: "5px 5px 5px 5px",
+ },
+ items: [
+ { flex: 1.0, xtype: 'button', text: 'Cancel',
+ handler: function(b, e) { win.destroy(); } },
+ { flex: 1.0, xtype: 'button', text: 'Load',
+ handler: function(b, e) {
+ filename = "";
+ var fl = win.get("file_listing");
+ if (fl.getSelectionCount() == 1) {
+ filename = fl.getSelectedRecords()[0].data.filename;
+ }
+ yt_rpc.ExtDirectREPL.load(
+ {base_dir:cur_dir, filename:filename},
+ handle_result);
+ win.destroy();
+ }
+ },
+ ],
+ },
+ ],
+ });
+ yt_rpc.ExtDirectREPL.file_listing(
+ {base_dir:"", sub_dir:""}, fillStore);
+ win.show(this);
+}
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/gui/reason/html/js/menu_items.js
--- a/yt/gui/reason/html/js/menu_items.js
+++ b/yt/gui/reason/html/js/menu_items.js
@@ -33,7 +33,11 @@
text: 'Menu',
id: 'main_menu',
menu: [
- {xtype:'menuitem', text: 'Open', disabled: true},
+ {xtype:'menuitem', text: 'Open File',
+ handler: function(b,e) {
+ open_file()
+ },
+ },
{xtype:'menuitem', text: 'Open Directory', disabled: true},
{xtype: 'menuseparator'},
{xtype:'menuitem', text: 'Save Script',
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/utilities/_amr_utils/misc_utilities.pyx
--- a/yt/utilities/_amr_utils/misc_utilities.pyx
+++ b/yt/utilities/_amr_utils/misc_utilities.pyx
@@ -287,6 +287,7 @@
uniquedims[i] = <np.float64_t *> \
alloca(2*n_grids * sizeof(np.float64_t))
my_max = 0
+ best_dim = -1
for dim in range(3):
n_unique = 0
uniques = uniquedims[dim]
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/utilities/amr_kdtree/amr_kdtree.py
--- a/yt/utilities/amr_kdtree/amr_kdtree.py
+++ b/yt/utilities/amr_kdtree/amr_kdtree.py
@@ -1012,7 +1012,7 @@
# This node belongs to someone else, move along
current_node, previous_node = self.step_depth(current_node, previous_node)
continue
-
+
# If we are down to one grid, we are either in it or the parent grid
if len(current_node.grids) == 1:
thisgrid = current_node.grids[0]
@@ -1031,25 +1031,27 @@
if len(children) > 0:
current_node.grids = self.pf.hierarchy.grids[na.array(children,copy=False)]
current_node.parent_grid = thisgrid
- # print 'My single grid covers the rest of the volume, and I have children, about to iterate on them'
+ #print 'My single grid covers the rest of the volume, and I have children, about to iterate on them'
del children
continue
# Else make a leaf node (brick container)
+ #print 'My single grid covers the rest of the volume, and I have no children', thisgrid
set_leaf(current_node, thisgrid, current_node.l_corner, current_node.r_corner)
- # print 'My single grid covers the rest of the volume, and I have no children'
current_node, previous_node = self.step_depth(current_node, previous_node)
continue
# If we don't have any grids, this volume belongs to the parent
if len(current_node.grids) == 0:
+ #print 'This volume does not have a child grid, so it belongs to my parent!'
set_leaf(current_node, current_node.parent_grid, current_node.l_corner, current_node.r_corner)
- # print 'This volume does not have a child grid, so it belongs to my parent!'
current_node, previous_node = self.step_depth(current_node, previous_node)
continue
# If we've made it this far, time to build a dividing node
- self._build_dividing_node(current_node)
+ # print 'Building dividing node'
+ # Continue if building failed
+ if self._build_dividing_node(current_node): continue
# Step to the nest node in a depth-first traversal.
current_node, previous_node = self.step_depth(current_node, previous_node)
@@ -1058,10 +1060,10 @@
'''
Given a node, finds all the choices for the next dividing plane.
'''
- data = na.array([(child.LeftEdge, child.RightEdge) for child in current_node.grids],copy=False)
# For some reason doing dim 0 separately is slightly faster.
# This could be rewritten to all be in the loop below.
+ data = na.array([(child.LeftEdge, child.RightEdge) for child in current_node.grids],copy=False)
best_dim, split, less_ids, greater_ids = \
kdtree_get_choices(data, current_node.l_corner, current_node.r_corner)
return data[:,:,best_dim], best_dim, split, less_ids, greater_ids
@@ -1071,8 +1073,19 @@
Makes the current node a dividing node, and initializes the
left and right children.
'''
-
- data,best_dim,split,less_ids,greater_ids = self._get_choices(current_node)
+
+ data = na.array([(child.LeftEdge, child.RightEdge) for child in current_node.grids],copy=False)
+ best_dim, split, less_ids, greater_ids = \
+ kdtree_get_choices(data, current_node.l_corner, current_node.r_corner)
+
+ del data
+
+ # Here we break out if no unique grids were found. In this case, there
+ # are likely overlapping grids, and we assume that the first grid takes
+ # precedence. This is fragile.
+ if best_dim == -1:
+ current_node.grids = [current_node.grids[0]]
+ return 1
current_node.split_ax = best_dim
current_node.split_pos = split
@@ -1080,7 +1093,7 @@
#greater_ids0 = (split < data[:,1])
#assert(na.all(less_ids0 == less_ids))
#assert(na.all(greater_ids0 == greater_ids))
-
+
current_node.left_child = MasterNode(my_id=_lchild_id(current_node.id),
parent=current_node,
parent_grid=current_node.parent_grid,
@@ -1099,7 +1112,9 @@
# build to work. The other deletions are just to save memory.
del current_node.grids, current_node.parent_grid, current_node.brick,\
current_node.li, current_node.ri, current_node.dims
-
+
+ return 0
+
def traverse(self, back_center, front_center, image):
r"""Traverses the kd-Tree, casting the partitioned grids from back to
front.
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/utilities/command_line.py
--- a/yt/utilities/command_line.py
+++ b/yt/utilities/command_line.py
@@ -82,11 +82,15 @@
if cls.npfs > 1:
self(args)
else:
- if len(getattr(args, "pf", [])) > 1:
+ pf_args = getattr(args, "pf", [])
+ if len(pf_args) > 1:
pfs = args.pf
for pf in pfs:
args.pf = pf
self(args)
+ elif len(pf_args) == 0:
+ pfs = []
+ self(args)
else:
args.pf = getattr(args, 'pf', [None])[0]
self(args)
@@ -105,6 +109,8 @@
_common_options = dict(
pf = dict(short="pf", action=GetParameterFiles,
nargs="+", help="Parameter files to run on"),
+ opf = dict(action=GetParameterFiles, dest="pf",
+ nargs="*", help="(Optional) Parameter files to run on"),
axis = dict(short="-a", long="--axis",
action="store", type=int,
dest="axis", default=4,
@@ -1269,7 +1275,8 @@
help="At startup, find all *.hierarchy files in the CWD"),
dict(short="-d", long="--debug", action="store_true",
default = False, dest="debug",
- help="Add a debugging mode for cell execution")
+ help="Add a debugging mode for cell execution"),
+ "opf"
)
description = \
"""
@@ -1315,12 +1322,12 @@
from yt.gui.reason.bottle_mods import uuid_serve_functions, PayloadHandler
hr = ExtDirectREPL(base_extjs_path)
hr.debug = PayloadHandler.debug = args.debug
+ command_line = ["pfs = []"]
if args.find:
# We just have to find them and store references to them.
- command_line = ["pfs = []"]
for fn in sorted(glob.glob("*/*.hierarchy")):
command_line.append("pfs.append(load('%s'))" % fn[:-10])
- hr.execute("\n".join(command_line))
+ hr.execute("\n".join(command_line))
bottle.debug()
uuid_serve_functions(open_browser=args.open_browser,
port=int(args.port), repl=hr)
@@ -1430,7 +1437,7 @@
if 'upload' in rv and 'links' in rv['upload']:
print
print "Image successfully uploaded! You can find it at:"
- print " %s" % (rv['upload']['links']['imgur_page'])
+ print " %s" % (rv['upload']['links']['original'])
print
print "If you'd like to delete it, visit this page:"
print " %s" % (rv['upload']['links']['delete_page'])
diff -r d4544d5f8e0ab4262130f6c34ae40ea1754a6ae9 -r 90c24c4198fbd5e3542c8333784215eecf8b8b00 yt/utilities/parallel_tools/parallel_analysis_interface.py
--- a/yt/utilities/parallel_tools/parallel_analysis_interface.py
+++ b/yt/utilities/parallel_tools/parallel_analysis_interface.py
@@ -288,7 +288,7 @@
if size is None:
size = len(self.available_ranks)
if len(self.available_ranks) < size:
- print 'Not enough resources available'
+ print 'Not enough resources available', size, self.available_ranks
raise RuntimeError
if ranks is None:
ranks = [self.available_ranks.pop(0) for i in range(size)]
@@ -315,6 +315,26 @@
for wg in self.workgroups:
self.free_workgroup(wg)
+ @classmethod
+ def from_sizes(cls, sizes):
+ sizes = ensure_list(sizes)
+ pool = cls()
+ rank = pool.comm.rank
+ for i,size in enumerate(sizes):
+ if iterable(size):
+ size, name = size
+ else:
+ name = "workgroup_%02i" % i
+ pool.add_workgroup(size, name = name)
+ for wg in pool.workgroups:
+ if rank in wg.ranks: workgroup = wg
+ return pool, workgroup
+
+ def __getitem__(self, key):
+ for wg in self.workgroups:
+ if wg.name == key: return wg
+ raise KeyError(key)
+
class ResultsStorage(object):
slots = ['result', 'result_id']
result = None
@@ -517,24 +537,24 @@
raise NotImplementedError
@parallel_passthrough
- def mpi_bcast(self, data):
+ def mpi_bcast(self, data, root = 0):
# The second check below makes sure that we know how to communicate
# this type of array. Otherwise, we'll pickle it.
if isinstance(data, na.ndarray) and \
get_mpi_type(data.dtype) is not None:
- if self.comm.rank == 0:
+ if self.comm.rank == root:
info = (data.shape, data.dtype)
else:
info = ()
- info = self.comm.bcast(info, root=0)
- if self.comm.rank != 0:
+ info = self.comm.bcast(info, root=root)
+ if self.comm.rank != root:
data = na.empty(info[0], dtype=info[1])
mpi_type = get_mpi_type(info[1])
- self.comm.Bcast([data, mpi_type], root = 0)
+ self.comm.Bcast([data, mpi_type], root = root)
return data
else:
# Use pickled methods.
- data = self.comm.bcast(data, root = 0)
+ data = self.comm.bcast(data, root = root)
return data
def preload(self, grids, fields, io_handler):
Repository URL: https://bitbucket.org/yt_analysis/yt/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the yt-svn
mailing list