By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,050 Members | 1,009 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,050 IT Pros & Developers. It's quick & easy.

Create new instance of Python class in C

P: n/a
Hi people,

I'm creating a program that can solve and create Sudoku puzzles. My
creation function needs to make a lot of copies of a puzzle. Until
now, I used copy.deepcopy(), but that's too slow. I want to implement
such a copying function in C and use that instead. My idea about this
is:

- Get the data from a puzzle (a list containing lists containing
strings) and make a copy of it. That's coded already.

- Create a new SodokuPuzzle instance and assign the data to it.

That last step can be done by passing the data to the constructor, so
that's easy too once I know how to do that in C. My question is: how
do I create a new instance in C of a class written in Python? I've
searched Google, but found nothing of help.

Sybren
--
The problem with the world is stupidity. Not saying there should be a
capital punishment for stupidity, but why don't we just take the
safety labels off of everything and let the problem solve itself?
Frank Zappa
Sep 9 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
djw
Sybren Stuvel wrote:
Hi people,

I'm creating a program that can solve and create Sudoku puzzles. My
creation function needs to make a lot of copies of a puzzle. Until
now, I used copy.deepcopy(), but that's too slow. I want to implement
such a copying function in C and use that instead. My idea about this
is:

- Get the data from a puzzle (a list containing lists containing
strings) and make a copy of it. That's coded already.

- Create a new SodokuPuzzle instance and assign the data to it.

That last step can be done by passing the data to the constructor, so
that's easy too once I know how to do that in C. My question is: how
do I create a new instance in C of a class written in Python? I've
searched Google, but found nothing of help.

Sybren

Personally, I would try Psyco first, and consider Pyrex next. Are you
sure your algorithm can't be optimized first, before you start trying to
write this in C?

-Don
Sep 9 '05 #2

P: n/a
djw enlightened us with:
Personally, I would try Psyco first, and consider Pyrex next.
Ok, I'll take a look at those.
Are you sure your algorithm can't be optimized first, before you
start trying to write this in C?


I'm sure there will be optimizations, but profiling showed that the
copying of the puzzles took the most time. Since the copy.deepcopy()
function is implemented it Python, I'd thought it would get quite a
speed boost when done in C instead.

As a side-question: how would I go about compiling my C module in
Windows, if I want to ship a Windows version?

Sybren
--
The problem with the world is stupidity. Not saying there should be a
capital punishment for stupidity, but why don't we just take the
safety labels off of everything and let the problem solve itself?
Frank Zappa
Sep 9 '05 #3

P: n/a
On Fri, 9 Sep 2005 17:19:21 +0200, Sybren Stuvel <sy*******@YOURthirdtower.com.imagination> wrote:
Hi people,

I'm creating a program that can solve and create Sudoku puzzles. My
creation function needs to make a lot of copies of a puzzle.


Why do you need to maske lots of copies? And when you say "lots of"
what numbers do you mean? 100? 1000000?

The reason I ask is I recently wrote a program to solve Sudoku
puzzles, and IIRC it didn't make copies at all.

--
Email: zen19725 at zen dot co dot uk
Sep 10 '05 #4

P: n/a
On Fri, 9 Sep 2005 18:50:26 +0200, Sybren Stuvel <sy*******@YOURthirdtower.com.imagination> wrote:
djw enlightened us with:
Personally, I would try Psyco first, and consider Pyrex next.


Ok, I'll take a look at those.
Are you sure your algorithm can't be optimized first, before you
start trying to write this in C?


I'm sure there will be optimizations, but profiling showed that the
copying of the puzzles took the most time. Since the copy.deepcopy()
function is implemented it Python, I'd thought it would get quite a
speed boost when done in C instead.


Can you use a different algorithm that doesn't make so many copies?

--
Email: zen19725 at zen dot co dot uk
Sep 10 '05 #5

P: n/a
phil hunt enlightened us with:
Why do you need to maske lots of copies?
The puzzles are stored in a NxN list of strings. The strings contain
all the numerals that that block can contain. So a 9x9 puzzle contains
81 strings "123456789" when it's "empty".

My creation function picks a block that isn't a given, and fixes it to
one of it's possible values. It then tries to solve the puzzle. If it
works, it's done creating the puzzle. If it doesn't work, it starts
over again in a recursive manner.

The solver solves the puzzle in-place. That means that if I want to
keep the original puzzle (the one that could be solved), I have to
make a copy.
And when you say "lots of" what numbers do you mean? 100? 1000000?
That depends a lot. The parts "picks a block that isn't a given" and
"fixes it to one if it's possible values" are both randomized.
Sometimes it's 100, sometimes it's 50000.
The reason I ask is I recently wrote a program to solve Sudoku
puzzles, and IIRC it didn't make copies at all.


My solver doesn't create copies either. The creator does.

I think I'll change my algorithm to just solve the puzzle and don't
care about the original minimal puzzle that could be solved. I'll
create a fully solved puzzle, and then use another routine to remove
givens at random until the required number of givens is left. Of
course, still maintaining solvability.

That last part would require copying, but not as much as in the
current situation.

Sybren
--
The problem with the world is stupidity. Not saying there should be a
capital punishment for stupidity, but why don't we just take the
safety labels off of everything and let the problem solve itself?
Frank Zappa
Sep 10 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.