Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add python interface #466

Open
wants to merge 13 commits into
base: main
Choose a base branch
from
155 changes: 155 additions & 0 deletions python/mfu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
from mpifileutils import *

#flist = FList(read='test.mfu')
#flist.sort('size')
#flist.write('test.txt', text=True)
##print(flist)
#quit()

flist = FList(['../testdir', '../testdir2'])
print(flist)
for f in flist:
print(f)
#quit()

#flist = FList('../testdir')
flist = FList()
flist.walk('../tempbuild', absolute=True)
flist.chmod(mode="g+w", group="tools")
flist.write('test.txt', text=True)
if flist.rank() == 0:
print(flist)
for f in flist[:5]:
print(f)
print("Bytes: ", flist.sum(lambda f: f.size if f.type == TYPE_FILE else 0))
print("Chars: ", flist.sum(lambda f: len(f.name)))
print("Small files: ", flist.sum(lambda f: int(f.size < 10)))
flist.comm().barrier()
quit()

comm = flist.comm()
rank = flist.rank()
ranks = flist.num_ranks()

# sort starting list alphabetically
flist = FList('../tempbuild')
flist.sort()
for f in flist[:5]:
print(rank, "before", f.size, f)

# reassign items in list to ranks on some function
flist.spread(lambda f: f.size % ranks)
for f in flist[:5]:
print(rank, "after", f.size, f)

flist = FList('../testdir')
flist.spread()
flist.sort('-size')
flist.write('test.txt', text=True)
#flist.read('test.mfu')
print(flist)
#quit()

print("Rank: ", rank, "Ranks: ", ranks, "Global size: ", flist.global_size(), "Offset: ", flist.global_offset(), "Local size: ", len(flist))

l = [1, 2, 3]
print(l[:-10])

if rank == 0:
for f in flist[:]:
print(rank, f.user, f.group, f.uid, f.gid, f.mode, f.size, f)
for f in flist[1:]:
print(rank, f.user, f.group, f.uid, f.gid, f.mode, f.size, f)
for f in flist[:-2]:
print(rank, f.user, f.group, f.uid, f.gid, f.mode, f.size, f)
for f in flist[:-1]:
print(rank, f.user, f.group, f.uid, f.gid, f.mode, f.size, f)
for f in flist[-2:]:
print(rank, f.user, f.group, f.uid, f.gid, f.mode, f.size, f)

flist.sort("-size")
if rank == 0:
for f in flist[:3]:
print(rank, f.user, f.group, f.uid, f.gid, f.mode, f.size, f)

flist.sort("size")
if rank == 0:
for f in flist[:3]:
print(rank, f.user, f.group, f.uid, f.gid, f.mode, f.size, f)

for f in flist:
print(f.size, f)

flist2 = flist.subset()
for f in flist:
if f.size < 10:
flist2.append(f)
flist2.summarize()
print(rank, flist2)
for f in flist2:
print(f.size, f)

# create a list of all items whose size is less than 10 bytes
flist3 = flist.subset(fn = lambda f: f.size < 10)
print(rank, flist3)
for f in flist3:
print(f.size, f)

# create a list of all directories or items whose size is less than 10 bytes
flist4 = flist.subset(fn = lambda f: f.type == TYPE_DIR or f.size < 10)
print(rank, flist4)
for f in flist4:
print(f.size, f)

# divide list into two, with first list containing all directories,
# second list is everything else
flist_dirs, flist_notdirs = flist.subset(fn = lambda f: f.type == TYPE_DIR, pivot=True)
print(rank, flist_dirs, flist_notdirs)
print("in")
for f in flist_dirs:
print(f.size, f)
print("out")
for f in flist_notdirs:
print(f.size, f)

types = flist.unique(lambda f: f.type)
print(types)

sizes = flist.unique(lambda f: f.size)
print(sizes)

# example to write out a list of files for each user
users = flist.split(lambda f: f.user)
for user in users:
users[user].write(user + ".txt", text=True)

lists = flist.split(lambda f: f.name)
print(lists)

flist = FList('testdir')
print(flist)
flist.archive('testdir.dtar')

# pause to set breakpoints in libmfu functions
#import time
#time.sleep(10)
#print("Sleeping...")
cwd = os.getcwd()
walkdir = os.path.join(cwd, 'testdir')
flist = FList()
#flist.walk('testdir', absolute=True)
flist.walk(walkdir, absolute=True)
flist.copy('testdir2', 'testdir')
quit()

import os
try:
os.mkdir('tempdir')
except:
pass
os.chdir('tempdir')
flist = FList()
flist.extract('../testdir.dtar')
os.chdir('..')
flist = FList('tempdir')
flist.unlink()
Loading