Skip to main content

Manage sequences of frame numbers.

Project description

sequence

Manage sequences of frame numbers

Install

pip install cioseq

Usage

Import

>>> from cioseq.sequence import Sequence

Several ways to create a Sequence using the create() factory method.

# [start [end [step]]] - Unlike range(), end is inclusive.

>>> s = Sequence.create("1")

>>> s = Sequence.create(1,10,2)

# list
>>> s = Sequence.create([5,6,7,10,12])

# spec
>>> s = Sequence.create("1-10x2")

# compound spec with negative frame numbers
>>> s = Sequence.create("0-10x3, 100, -10--2x2")

# Copy constructor
>>> s2 = Sequence.create(s)
>>> s2 == s
False
>>> list(s2) == list(s)
True

>>> list(s)
[-10, -8, -6, -4, -2, 0, 3, 6, 9, 100]

>>> print(s)
-10-0x2,3-9x3,100

>>> repr(s)
"Sequence.create('-10-0x2,3-9x3,100')"

Indexing

>>> s[-1]
100

s[0]
-10

An arithmetic progression is a set of numbers with a common step.

>>> s = Sequence.create([1,4,7,10,13])
>>> type(s)
<class 'cioseq.sequence.Progression'>

>>> s=Sequence.create([1,2,3,5,78])
>>> type(s)
<class 'cioseq.sequence.Sequence'>
>>> s.is_progression()
False

Chunks

# Split into chunks, which are themselves Sequences.
>>> s = Sequence.create("1-20", chunk_size=5)
>>> s.chunk_count()
4
>>> s.chunks()
[Sequence.create('1-5'), Sequence.create('6-10'), Sequence.create('11-15'), Sequence.create('16-20')]

# Chunks can be cyclic.
>>> s.chunk_strategy = "cycle"
>>> for c in s.chunks():
...    print(list(c))

[1, 5, 9, 13, 17]
[2, 6, 10, 14, 18]
[3, 7, 11, 15, 19]
[4, 8, 12, 16, 20]

Booleans

>>> s = Sequence.create("1-10")
>>> isect = s.intersection(range(5, 15))
>>> print(isect)
5-10


>>> s = Sequence.create("1-10")
>>> uni = s.union(range(5, 15))
>>> print(uni)
1-14

Intersecting chunks. Helps to determine which tasks contain scout frames.

>>> s = Sequence.create("1-50", chunk_size=5)
>>> scout =  Sequence.create("1,2,7")
>>> chunks = s.intersecting_chunks(scout)
>>> print(chunks)
[Sequence.create('1-5'), Sequence.create('6-10')]

Multi sequence filename permutations

# single sequence
>>> template = "/path/%(frame)d/image.%(frame)04d.tif"
>>> filenames = list(Sequence.permutations(template, frame="0-6x2"))
>>> print(filenames)
['/path/0/image.0000.tif', '/path/2/image.0002.tif', '/path/4/image.0004.tif', '/path/6/image.0006.tif']

# several sequences
>>> template = "image_%(uval)02d_%(vval)02d.%(frame)04d.tif"
>>> kw = {"uval": "1-2", "vval": "1-2", "frame": "10-11"}
>>> filenames = Sequence.permutations(template, **kw)

>>> print(filenames)
<generator object permutations at 0x10260f960>

>>> for f in filenames:
...    print f

image_01_01.0010.tif
image_01_02.0010.tif
image_02_01.0010.tif
image_02_02.0010.tif
image_01_01.0011.tif
image_01_02.0011.tif
image_02_01.0011.tif
image_02_02.0011.tif

Offset

>>> s = Sequence.create("1-10")
>>> s = s.offset(-5)
>>> print(s)
-4-5

Hash (#) filename expansion

>>> s = Sequence.create("8-10")
s.expand("image.#.exr")
['image.8.exr', 'image.9.exr', 'image.10.exr']

s.expand("/some/dir_###/img.#####.exr")
['/some/dir_008/img.00008.exr', '/some/dir_009/img.00009.exr', '/some/dir_010/img.00010.exr']

Dollar(n)F filename expansion

>>> s = Sequence.create("1")
>>> s.expand_dollar_f("image.$F.exr")
['image.1.exr']

>>> s.expand_dollar_f("image.$F.$5F.$2F.exr")
['image.1.00001.01.exr']

Use different symbols for frame spec

>>> s = Sequence.create("1-10, 14, 20-48x4")
>>> print(s)
1-10,14,20-48x4

>>> print(s.to(":", "%", ";"))
1:10;14;20:48%4

>>> print(s.to("to", "by", " "))
1to10 14 20to48by4

Take a subsample of frames

s = Sequence.create("1-10")
>>> print(s.subsample(1))
6

>>> print(s.subsample(2))
3-8x5

>>> print(s.subsample(3))
2-6x4,9

>>> print(s.subsample(5))
2-10x2

>>> print(list(s.subsample(4)))
[2, 4, 7, 9]

Test

From git repo

python -m unittest discover -v -s ./tests  -p 'test_*.py'

Contributing

Pull requests welcome.

License

MIT

Changelog

Version:0.1.11 -- 10 Mar 2021

  • Adds pip-dependency-file key. [719ec31]

Version:0.1.10 -- 10 Mar 2021

  • Adds ssh key so we can push the tag in circleci. [60360af]
  • Use skulk context. [3459bc0]

Version:0.1.9 -- 09 Mar 2021

  • Fixed wrong pypi registry. [a3d82e1]

Version:0.1.6 -- 09 Mar 2021

  • Adds release flow to circleci. [71bbca2]
  • Add .circleci/config.yml. [30fd9d9]
  • Adds tox for py 2.7 and 3.8. [7ce0970]

Version:0.1.5 -- 21 Sep 2020

  • Bad test name and $f4 token support. [f3c1923]

Version:0.1.3 -- 20 Sep 2020

  • Added several examples to the README and implemented and indexing. [fdec3b4]

Version:0.1.2 -- 19 Sep 2020

  • Python 2 and 3 compatibility. [4aba985]

Version:0.1.1 -- 19 Sep 2020

  • Transfer from core. As such, this is the first changelog entry. [54f9132]
  • Sequence consumers must use factory. [a9fd08a]
  • Adds cycle_progressions chunk strategy. [37075c9]
  • Expander path list enhancements (#5)
  • Lib enhancements (#4)
  • adds sequence intersection check
  • allows uppercase characters in angle-bracket template.. [255f61f]
  • Initial commit. [7cf8fd3]

--

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cioseq-0.1.11.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cioseq-0.1.11-py2.py3-none-any.whl (16.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file cioseq-0.1.11.tar.gz.

File metadata

  • Download URL: cioseq-0.1.11.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for cioseq-0.1.11.tar.gz
Algorithm Hash digest
SHA256 9097240711f0f102cb794236676c4b0e20e1721037c32598dfa743f76e4f8e9a
MD5 d73f1d55dce3ceaf6207f838302ff67b
BLAKE2b-256 fa793adb9f4b9fa790fdbf16f6b3f6ce5afc167841a9ddaee1485b11222ce317

See more details on using hashes here.

File details

Details for the file cioseq-0.1.11-py2.py3-none-any.whl.

File metadata

  • Download URL: cioseq-0.1.11-py2.py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.8.8

File hashes

Hashes for cioseq-0.1.11-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9dd5837255c15fb924c017606d4a909570c85614b1cf24c848cd1ab17272b396
MD5 af697fa9a04bd85b3474105f8aa91bb8
BLAKE2b-256 13ed0f18e798f5f7f28a0f63b2046df1d4a256cafc3618c0d1f92858d0cdda03

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page