def unidiff(a, ad, b, bd, fn1, fn2, opts=defaultopts): def datetag(date, fn=None): if not opts.git and not opts.nodates: return '\t%s\n' % date if fn and ' ' in fn: return '\t\n' return '\n' if not a and not b: return "" if opts.noprefix: aprefix = bprefix = '' else: aprefix = 'a/' bprefix = 'b/' epoch = util.datestr((0, 0)) fn1 = util.pconvert(fn1) fn2 = util.pconvert(fn2) if not opts.text and (util.binary(a) or util.binary(b)): if a and b and len(a) == len(b) and a == b: return "" l = ['Binary file %s has changed\n' % fn1] elif not a: b = splitnewlines(b) if a is None: l1 = '--- /dev/null%s' % datetag(epoch) else: l1 = "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1)) l2 = "+++ %s%s" % (bprefix + fn2, datetag(bd, fn2)) l3 = "@@ -0,0 +1,%d @@\n" % len(b) l = [l1, l2, l3] + ["+" + e for e in b] elif not b: a = splitnewlines(a) l1 = "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1)) if b is None: l2 = '+++ /dev/null%s' % datetag(epoch) else: l2 = "+++ %s%s%s" % (bprefix, fn2, datetag(bd, fn2)) l3 = "@@ -1,%d +0,0 @@\n" % len(a) l = [l1, l2, l3] + ["-" + e for e in a] else: al = splitnewlines(a) bl = splitnewlines(b) l = list(_unidiff(a, b, al, bl, opts=opts)) if not l: return "" l.insert(0, "--- %s%s%s" % (aprefix, fn1, datetag(ad, fn1))) l.insert(1, "+++ %s%s%s" % (bprefix, fn2, datetag(bd, fn2))) for ln in xrange(len(l)): if l[ln][-1] != '\n': l[ln] += "\n\ No newline at end of file\n" return "".join(l)
def unidiff(a, ad, b, bd, fn1, fn2, r=None, opts=defaultopts): def datetag(date, addtab=True): if not opts.git and not opts.nodates: return '\t%s\n' % date if addtab and ' ' in fn1: return '\t\n' return '\n' if not a and not b: return "" epoch = util.datestr((0, 0)) if not opts.text and (util.binary(a) or util.binary(b)): def h(v): # md5 is used instead of sha1 because md5 is supposedly faster return md5.new(v).digest() if a and b and len(a) == len(b) and h(a) == h(b): return "" l = ['Binary file %s has changed\n' % fn1] elif not a: b = splitnewlines(b) if a is None: l1 = '--- /dev/null%s' % datetag(epoch, False) else: l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) l3 = "@@ -0,0 +1,%d @@\n" % len(b) l = [l1, l2, l3] + ["+" + e for e in b] elif not b: a = splitnewlines(a) l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) if b is None: l2 = '+++ /dev/null%s' % datetag(epoch, False) else: l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) l3 = "@@ -1,%d +0,0 @@\n" % len(a) l = [l1, l2, l3] + ["-" + e for e in a] else: al = splitnewlines(a) bl = splitnewlines(b) l = list(bunidiff(a, b, al, bl, "a/" + fn1, "b/" + fn2, opts=opts)) if not l: return "" # difflib uses a space, rather than a tab l[0] = "%s%s" % (l[0][:-2], datetag(ad)) l[1] = "%s%s" % (l[1][:-2], datetag(bd)) for ln in xrange(len(l)): if l[ln][-1] != '\n': l[ln] += "\n\ No newline at end of file\n" if r: l.insert( 0, "diff %s %s\n" % (' '.join(["-r %s" % rev for rev in r]), fn1)) return "".join(l)
def unidiff(a, ad, b, bd, fn1, fn2, r=None, opts=defaultopts): def datetag(date, addtab=True): if not opts.git and not opts.nodates: return '\t%s\n' % date if addtab and ' ' in fn1: return '\t\n' return '\n' if not a and not b: return "" epoch = util.datestr((0, 0)) if not opts.text and (util.binary(a) or util.binary(b)): def h(v): # md5 is used instead of sha1 because md5 is supposedly faster return md5.new(v).digest() if a and b and len(a) == len(b) and h(a) == h(b): return "" l = ['Binary file %s has changed\n' % fn1] elif not a: b = splitnewlines(b) if a is None: l1 = '--- /dev/null%s' % datetag(epoch, False) else: l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) l3 = "@@ -0,0 +1,%d @@\n" % len(b) l = [l1, l2, l3] + ["+" + e for e in b] elif not b: a = splitnewlines(a) l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) if b is None: l2 = '+++ /dev/null%s' % datetag(epoch, False) else: l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) l3 = "@@ -1,%d +0,0 @@\n" % len(a) l = [l1, l2, l3] + ["-" + e for e in a] else: al = splitnewlines(a) bl = splitnewlines(b) l = list(bunidiff(a, b, al, bl, "a/" + fn1, "b/" + fn2, opts=opts)) if not l: return "" # difflib uses a space, rather than a tab l[0] = "%s%s" % (l[0][:-2], datetag(ad)) l[1] = "%s%s" % (l[1][:-2], datetag(bd)) for ln in xrange(len(l)): if l[ln][-1] != '\n': l[ln] += "\n\ No newline at end of file\n" if r: l.insert(0, "diff %s %s\n" % (' '.join(["-r %s" % rev for rev in r]), fn1)) return "".join(l)
def unidiff(a, ad, b, bd, fn1, fn2, r=None, opts=defaultopts): def datetag(date, addtab=True): if not opts.git and not opts.nodates: return '\t%s\n' % date if addtab and ' ' in fn1: return '\t\n' return '\n' if not a and not b: return "" epoch = util.datestr((0, 0)) if not opts.text and (util.binary(a) or util.binary(b)): if a and b and len(a) == len(b) and a == b: return "" l = ['Binary file %s has changed\n' % fn1] elif not a: b = splitnewlines(b) if a is None: l1 = '--- /dev/null%s' % datetag(epoch, False) else: l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) l3 = "@@ -0,0 +1,%d @@\n" % len(b) l = [l1, l2, l3] + ["+" + e for e in b] elif not b: a = splitnewlines(a) l1 = "--- %s%s" % ("a/" + fn1, datetag(ad)) if b is None: l2 = '+++ /dev/null%s' % datetag(epoch, False) else: l2 = "+++ %s%s" % ("b/" + fn2, datetag(bd)) l3 = "@@ -1,%d +0,0 @@\n" % len(a) l = [l1, l2, l3] + ["-" + e for e in a] else: al = splitnewlines(a) bl = splitnewlines(b) l = list(_unidiff(a, b, al, bl, opts=opts)) if not l: return "" l.insert(0, "--- a/%s%s" % (fn1, datetag(ad))) l.insert(1, "+++ b/%s%s" % (fn2, datetag(bd))) for ln in xrange(len(l)): if l[ln][-1] != '\n': l[ln] += "\n\ No newline at end of file\n" if r: l.insert(0, diffline(r, fn1, fn2, opts)) return "".join(l)
def binary(mctx, x): """``binary()`` File that appears to be binary (contains NUL bytes). """ # i18n: "binary" is a keyword getargs(x, 0, 0, _("binary takes no arguments")) return [f for f in mctx.existing() if util.binary(mctx.ctx[f].data())]
def SetValue(self, item, value): pos = self.n.index(item) if util.binary(value): value = util.binary_safe(value) value = unicode(value).split('\n') value = value[0] + ['', ' [...]'][len(value) > 1] self.t[pos].SetValue(unicode(value).split('\n')[0])
def SetValue(self, item, value): pos = self.n.index(item) if util.binary(value): value = util.binary_safe(value) value = unicode(value).split('\n') value = value[0]+['',' [...]'][len(value) > 1] self.t[pos].SetValue(unicode(value).split('\n')[0])
def readfile(filename): f = open(filename, "rb") text = f.read() f.close() if util.binary(text): msg = _("%s looks like a binary file.") % filename if not opts.get('quiet'): ui.warn(_('warning: %s\n') % msg) if not opts.get('text'): raise util.Abort(msg) return text
def eol(mctx, x): """``eol(style)`` File contains newlines of the given style (dos, unix, mac). Binary files are excluded, files with mixed line endings match multiple styles. """ # i18n: "encoding" is a keyword enc = getstring(x, _("encoding requires an encoding name")) s = [] for f in mctx.existing(): d = mctx.ctx[f].data() if util.binary(d): continue if (enc == 'dos' or enc == 'win') and '\r\n' in d: s.append(f) elif enc == 'unix' and re.search('(?<!\r)\n', d): s.append(f) elif enc == 'mac' and re.search('\r(?!\n)', d): s.append(f) return s
def diff(repo, node1=None, node2=None, match=None, changes=None, opts=None): '''yields diff of changes to files between two nodes, or node and working directory. if node1 is None, use first dirstate parent instead. if node2 is None, compare node1 with working directory.''' if opts is None: opts = mdiff.defaultopts if not node1: node1 = repo.dirstate.parents()[0] def lrugetfilectx(): cache = {} order = [] def getfilectx(f, ctx): fctx = ctx.filectx(f, filelog=cache.get(f)) if f not in cache: if len(cache) > 20: del cache[order.pop(0)] cache[f] = fctx._filelog else: order.remove(f) order.append(f) return fctx return getfilectx getfilectx = lrugetfilectx() ctx1 = repo[node1] ctx2 = repo[node2] if not changes: changes = repo.status(ctx1, ctx2, match=match) modified, added, removed = changes[:3] if not modified and not added and not removed: return date1 = util.datestr(ctx1.date()) man1 = ctx1.manifest() if repo.ui.quiet: r = None else: hexfunc = repo.ui.debugflag and hex or short r = [hexfunc(node) for node in [node1, node2] if node] if opts.git: copy, diverge = copies.copies(repo, ctx1, ctx2, repo[nullid]) copy = copy.copy() for k, v in copy.items(): copy[v] = k gone = set() gitmode = {'l': '120000', 'x': '100755', '': '100644'} for f in sorted(modified + added + removed): to = None tn = None dodiff = True header = [] if f in man1: to = getfilectx(f, ctx1).data() if f not in removed: tn = getfilectx(f, ctx2).data() a, b = f, f if opts.git: if f in added: mode = gitmode[ctx2.flags(f)] if f in copy: a = copy[f] omode = gitmode[man1.flags(a)] _addmodehdr(header, omode, mode) if a in removed and a not in gone: op = 'rename' gone.add(a) else: op = 'copy' header.append('%s from %s\n' % (op, a)) header.append('%s to %s\n' % (op, f)) to = getfilectx(a, ctx1).data() else: header.append('new file mode %s\n' % mode) if util.binary(tn): dodiff = 'binary' elif f in removed: # have we already reported a copy above? if f in copy and copy[f] in added and copy[copy[f]] == f: dodiff = False else: header.append('deleted file mode %s\n' % gitmode[man1.flags(f)]) else: omode = gitmode[man1.flags(f)] nmode = gitmode[ctx2.flags(f)] _addmodehdr(header, omode, nmode) if util.binary(to) or util.binary(tn): dodiff = 'binary' r = None header.insert(0, mdiff.diffline(r, a, b, opts)) if dodiff: if dodiff == 'binary': text = b85diff(to, tn) else: text = mdiff.unidiff(to, date1, # ctx2 date may be dynamic tn, util.datestr(ctx2.date()), a, b, r, opts=opts) if header and (text or len(header) > 1): yield ''.join(header) if text: yield text
from model_impl import define_model from model_impl import define_predict import util import dataset if __name__ == "__main__": Xtrain, Xtest, Ytrain, Ytest = dataset.load_ds_train_test( '../gen/dataset.h5') features = Xtrain.shape[0] layers = [features, 10, 5, 1] train = define_model(layers) epochs = 50000 for i in range(epochs): cost, W1, W2, W3, b1, b2, b3 = train(Xtrain, Ytrain, 0.1) if i % 100 == 0: print('Cost on epoch %i: %s' % (i, cost)) predictor = define_predict(W1, b1, W2, b2, W3, b3) Ytrain_hat = util.binary(predictor(Xtrain)) Ytest_hat = util.binary(predictor(Xtest)) util.perf_report(Ytrain_hat, Ytrain, Ytest_hat, Ytest) #implement error analysis #implement confusion matrix #implement
def diff(repo, node1=None, node2=None, files=None, match=util.always, fp=None, changes=None, opts=None): '''print diff of changes to files between two nodes, or node and working directory. if node1 is None, use first dirstate parent instead. if node2 is None, compare node1 with working directory.''' if opts is None: opts = mdiff.defaultopts if fp is None: fp = repo.ui if not node1: node1 = repo.dirstate.parents()[0] ccache = {} def getctx(r): if r not in ccache: ccache[r] = context.changectx(repo, r) return ccache[r] flcache = {} def getfilectx(f, ctx): flctx = ctx.filectx(f, filelog=flcache.get(f)) if f not in flcache: flcache[f] = flctx._filelog return flctx # reading the data for node1 early allows it to play nicely # with repo.status and the revlog cache. ctx1 = context.changectx(repo, node1) # force manifest reading man1 = ctx1.manifest() date1 = util.datestr(ctx1.date()) if not changes: changes = repo.status(node1, node2, files, match=match)[:5] modified, added, removed, deleted, unknown = changes if not modified and not added and not removed: return if node2: ctx2 = context.changectx(repo, node2) execf2 = ctx2.manifest().execf linkf2 = ctx2.manifest().linkf else: ctx2 = context.workingctx(repo) execf2 = util.execfunc(repo.root, None) linkf2 = util.linkfunc(repo.root, None) if execf2 is None: mc = ctx2.parents()[0].manifest().copy() execf2 = mc.execf linkf2 = mc.linkf if repo.ui.quiet: r = None else: hexfunc = repo.ui.debugflag and hex or short r = [hexfunc(node) for node in [node1, node2] if node] if opts.git: copy, diverge = copies.copies(repo, ctx1, ctx2, repo.changectx(nullid)) for k, v in copy.items(): copy[v] = k all = modified + added + removed all.sort() gone = {} for f in all: to = None tn = None dodiff = True header = [] if f in man1: to = getfilectx(f, ctx1).data() if f not in removed: tn = getfilectx(f, ctx2).data() a, b = f, f if opts.git: def gitmode(x, l): return l and '120000' or (x and '100755' or '100644') def addmodehdr(header, omode, nmode): if omode != nmode: header.append('old mode %s\n' % omode) header.append('new mode %s\n' % nmode) if f in added: mode = gitmode(execf2(f), linkf2(f)) if f in copy: a = copy[f] omode = gitmode(man1.execf(a), man1.linkf(a)) addmodehdr(header, omode, mode) if a in removed and a not in gone: op = 'rename' gone[a] = 1 else: op = 'copy' header.append('%s from %s\n' % (op, a)) header.append('%s to %s\n' % (op, f)) to = getfilectx(a, ctx1).data() else: header.append('new file mode %s\n' % mode) if util.binary(tn): dodiff = 'binary' elif f in removed: # have we already reported a copy above? if f in copy and copy[f] in added and copy[copy[f]] == f: dodiff = False else: mode = gitmode(man1.execf(f), man1.linkf(f)) header.append('deleted file mode %s\n' % mode) else: omode = gitmode(man1.execf(f), man1.linkf(f)) nmode = gitmode(execf2(f), linkf2(f)) addmodehdr(header, omode, nmode) if util.binary(to) or util.binary(tn): dodiff = 'binary' r = None header.insert(0, 'diff --git a/%s b/%s\n' % (a, b)) if dodiff: if dodiff == 'binary': text = b85diff(to, tn) else: text = mdiff.unidiff(to, date1, # ctx2 date may be dynamic tn, util.datestr(ctx2.date()), a, b, r, opts=opts) if text or len(header) > 1: fp.write(''.join(header)) fp.write(text)
def isbinary(self): try: return util.binary(self.data()) except IOError: return False
def diff(repo, node1=None, node2=None, match=None, changes=None, opts=None): """yields diff of changes to files between two nodes, or node and working directory. if node1 is None, use first dirstate parent instead. if node2 is None, compare node1 with working directory.""" if opts is None: opts = mdiff.defaultopts if not node1: node1 = repo.dirstate.parents()[0] flcache = {} def getfilectx(f, ctx): flctx = ctx.filectx(f, filelog=flcache.get(f)) if f not in flcache: flcache[f] = flctx._filelog return flctx ctx1 = repo[node1] ctx2 = repo[node2] if not changes: changes = repo.status(ctx1, ctx2, match=match) modified, added, removed = changes[:3] if not modified and not added and not removed: return date1 = util.datestr(ctx1.date()) man1 = ctx1.manifest() if repo.ui.quiet: r = None else: hexfunc = repo.ui.debugflag and hex or short r = [hexfunc(node) for node in [node1, node2] if node] if opts.git: copy, diverge = copies.copies(repo, ctx1, ctx2, repo[nullid]) for k, v in copy.items(): copy[v] = k gone = {} gitmode = {"l": "120000", "x": "100755", "": "100644"} for f in util.sort(modified + added + removed): to = None tn = None dodiff = True header = [] if f in man1: to = getfilectx(f, ctx1).data() if f not in removed: tn = getfilectx(f, ctx2).data() a, b = f, f if opts.git: if f in added: mode = gitmode[ctx2.flags(f)] if f in copy: a = copy[f] omode = gitmode[man1.flags(a)] _addmodehdr(header, omode, mode) if a in removed and a not in gone: op = "rename" gone[a] = 1 else: op = "copy" header.append("%s from %s\n" % (op, a)) header.append("%s to %s\n" % (op, f)) to = getfilectx(a, ctx1).data() else: header.append("new file mode %s\n" % mode) if util.binary(tn): dodiff = "binary" elif f in removed: # have we already reported a copy above? if f in copy and copy[f] in added and copy[copy[f]] == f: dodiff = False else: header.append("deleted file mode %s\n" % gitmode[man1.flags(f)]) else: omode = gitmode[man1.flags(f)] nmode = gitmode[ctx2.flags(f)] _addmodehdr(header, omode, nmode) if util.binary(to) or util.binary(tn): dodiff = "binary" r = None header.insert(0, mdiff.diffline(r, a, b, opts)) if dodiff: if dodiff == "binary": text = b85diff(to, tn) else: text = mdiff.unidiff( to, date1, # ctx2 date may be dynamic tn, util.datestr(ctx2.date()), a, b, r, opts=opts, ) if header and (text or len(header) > 1): yield "".join(header) if text: yield text
def diff(repo, node1=None, node2=None, files=None, match=util.always, fp=None, changes=None, opts=None): '''print diff of changes to files between two nodes, or node and working directory. if node1 is None, use first dirstate parent instead. if node2 is None, compare node1 with working directory.''' if opts is None: opts = mdiff.defaultopts if fp is None: fp = repo.ui if not node1: node1 = repo.dirstate.parents()[0] ccache = {} def getctx(r): if r not in ccache: ccache[r] = context.changectx(repo, r) return ccache[r] flcache = {} def getfilectx(f, ctx): flctx = ctx.filectx(f, filelog=flcache.get(f)) if f not in flcache: flcache[f] = flctx._filelog return flctx # reading the data for node1 early allows it to play nicely # with repo.status and the revlog cache. ctx1 = context.changectx(repo, node1) # force manifest reading man1 = ctx1.manifest() date1 = util.datestr(ctx1.date()) if not changes: changes = repo.status(node1, node2, files, match=match)[:5] modified, added, removed, deleted, unknown = changes if not modified and not added and not removed: return if node2: ctx2 = context.changectx(repo, node2) execf2 = ctx2.manifest().execf linkf2 = ctx2.manifest().linkf else: ctx2 = context.workingctx(repo) execf2 = util.execfunc(repo.root, None) linkf2 = util.linkfunc(repo.root, None) if execf2 is None: mc = ctx2.parents()[0].manifest().copy() execf2 = mc.execf linkf2 = mc.linkf if repo.ui.quiet: r = None else: hexfunc = repo.ui.debugflag and hex or short r = [hexfunc(node) for node in [node1, node2] if node] if opts.git: copy, diverge = copies.copies(repo, ctx1, ctx2, repo.changectx(nullid)) for k, v in copy.items(): copy[v] = k all = modified + added + removed all.sort() gone = {} for f in all: to = None tn = None dodiff = True header = [] if f in man1: to = getfilectx(f, ctx1).data() if f not in removed: tn = getfilectx(f, ctx2).data() a, b = f, f if opts.git: def gitmode(x, l): return l and '120000' or (x and '100755' or '100644') def addmodehdr(header, omode, nmode): if omode != nmode: header.append('old mode %s\n' % omode) header.append('new mode %s\n' % nmode) if f in added: mode = gitmode(execf2(f), linkf2(f)) if f in copy: a = copy[f] omode = gitmode(man1.execf(a), man1.linkf(a)) addmodehdr(header, omode, mode) if a in removed and a not in gone: op = 'rename' gone[a] = 1 else: op = 'copy' header.append('%s from %s\n' % (op, a)) header.append('%s to %s\n' % (op, f)) to = getfilectx(a, ctx1).data() else: header.append('new file mode %s\n' % mode) if util.binary(tn): dodiff = 'binary' elif f in removed: # have we already reported a copy above? if f in copy and copy[f] in added and copy[copy[f]] == f: dodiff = False else: mode = gitmode(man1.execf(f), man1.linkf(f)) header.append('deleted file mode %s\n' % mode) else: omode = gitmode(man1.execf(f), man1.linkf(f)) nmode = gitmode(execf2(f), linkf2(f)) addmodehdr(header, omode, nmode) if util.binary(to) or util.binary(tn): dodiff = 'binary' r = None header.insert(0, 'diff --git a/%s b/%s\n' % (a, b)) if dodiff: if dodiff == 'binary': text = b85diff(to, tn) else: text = mdiff.unidiff( to, date1, # ctx2 date may be dynamic tn, util.datestr(ctx2.date()), a, b, r, opts=opts) if text or len(header) > 1: fp.write(''.join(header)) fp.write(text)
def isbin(ctx): try: return util.binary(ctx.data()) except IOError: return False