Forum: Poser Python Scripting


Subject: Useful Code Snippets

structure opened this issue on Jun 27, 2019 · 94 posts


structure posted Fri, 20 May 2022 at 2:25 AM Forum Coordinator

Mirror / reverse data:

INSTANCES for testing what your variable is. ( this is just for printing headings )

class INSTANCES:
    def test_instance(self, value):
        if isinstance(value, type(None)):
            return "NoneType"
        if isinstance(value, str):
            return "string"
        if isinstance(value, int):
            return "int"
        if isinstance(value, float):
            return "float"
        if isinstance(value, list):
            return "list"
        if isinstance(value, tuple):
            return "tuple"
        if isinstance(value, dict):
            return "dict"
        if isinstance(value, set):
            return "set"
        if isinstance(value, object):
            return "object"


Actual Mirror Code:
class MIRROR_DATA:
    def mirror(self, data):
        if isinstance(data, tuple):
            return tuple(map(self.mirror, reversed(data)))
        elif isinstance(data, list):
            return [ele for ele in reversed(data)]
        elif isinstance(data, str):
            return data[::-1]
        elif isinstance(data, dict):
            return dict(reversed(list(data.items())))
        elif isinstance(data, set):
            data = list(data)
            data = self.mirror(data)
            return data
        else:
            return data


example Code:
type(None) == None.__class__
types = (type(None), str, int, float, list, dict, tuple, set, object)
testdata = {0: (0, 1, 2, 3),
            1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ],
            2: "0,1,2,3,4,5,6,7,8,9,",
            3: {0: "0,1,2,3,4,5,6,7,8,9,", 1: 123, 2: "more bullsh*t!"},
            4: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }
            }


for t in testdata:
    nport = testdata[t]
    print(f"{'-'*5} With a {INSTANCES().test_instance(nport)} {'-'*5}")
    print(nport)
    rport = MIRROR_DATA().mirror(nport)
    if t == 4:
        print(f"before conversion back to a set {rport}")
        rport = set(rport)
        print(f"after conversion back to a set {rport}")
    print(rport)
    print(f"{'-'*24}")
    print()


Output:
····· With a tuple ·····
(0, 1, 2, 3)
(3, 2, 1, 0)
························

····· With a list ·····
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
························

····· With a string ·····
0,1,2,3,4,5,6,7,8,9,
,9,8,7,6,5,4,3,2,1,0
························

····· With a dict ·····
{0: '0,1,2,3,4,5,6,7,8,9,', 1: 123, 2: 'more bullsh*t!'}
{2: 'more bullsh*t!', 1: 123, 0: '0,1,2,3,4,5,6,7,8,9,'}
························

····· With a set ·····
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
before conversion back to a set [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
after conversion back to a set {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
························

Locked Out